workspai 0.65.0 → 0.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -1
- package/contracts/agent-customization-pack.v1.json +4 -2
- package/contracts/analyze-last-run.v1.json +9 -1
- package/contracts/cli-runtime-command-inventory.v1.snapshot.json +113 -0
- package/contracts/extension-cli-compatibility.v1.json +2 -0
- package/contracts/published-contract-catalog.v1.json +10 -0
- package/contracts/runtime-command-surface.v1.json +47 -2
- package/contracts/workspace-activity-event.v1.json +132 -0
- package/contracts/workspace-intelligence/agent-bootstrap-receipt.v1.json +17 -0
- package/contracts/workspace-intelligence/mcp-design.v1.json +49 -2
- package/contracts/workspace-intelligence/project-agent-entry.v1.json +3 -0
- package/contracts/workspace-intelligence/project-context-agent.v1.json +49 -7
- package/contracts/workspace-intelligence/project-knowledge-graph-reference.v1.json +51 -0
- package/contracts/workspace-intelligence/workspace-knowledge-graph.v1.json +97 -2
- package/contracts/workspace-intelligence/workspace-skills-index.v1.json +34 -0
- package/dist/analyze-UJQWGNM2.js +1 -0
- package/dist/{artifact-remediation-plan-XIQNI35L.js → artifact-remediation-plan-M2XBS2IU.js} +1 -1
- package/dist/autopilot-release-U6F4M2BQ.js +1 -0
- package/dist/capabilities-command-XUKPO25Z.js +1 -0
- package/dist/chunk-2LIVMG5C.js +2 -0
- package/dist/{chunk-XGE2FDI4.js → chunk-2PACEMNE.js} +1 -1
- package/dist/chunk-334J2KIP.js +7 -0
- package/dist/{chunk-6TBTMWNA.js → chunk-3H5ACWWZ.js} +1 -1
- package/dist/{chunk-HCFWT42C.js → chunk-3NM3JAZW.js} +1 -1
- package/dist/chunk-4XEH3WNV.js +13 -0
- package/dist/chunk-5OA33JH2.js +2 -0
- package/dist/chunk-5TY74LLW.js +2 -0
- package/dist/{chunk-QCKWQFCD.js → chunk-5U4L6VF2.js} +1 -1
- package/dist/{chunk-W6FHVXNL.js → chunk-5XGR3LRI.js} +1 -1
- package/dist/{chunk-KTN2ARZJ.js → chunk-6JX56VAL.js} +3 -3
- package/dist/chunk-6UNATTB7.js +1 -0
- package/dist/{chunk-J3X56S7L.js → chunk-727IQFGN.js} +1 -1
- package/dist/chunk-7FF5EOIO.js +2 -0
- package/dist/{chunk-D5YJOQYK.js → chunk-AP4PV6WJ.js} +1 -1
- package/dist/chunk-AXUA7PFV.js +2 -0
- package/dist/chunk-B4IVVTMQ.js +2 -0
- package/dist/{chunk-LNXIMF3O.js → chunk-C4S22E6S.js} +1 -1
- package/dist/{chunk-PXWKMPPI.js → chunk-D4UHRJAP.js} +1 -1
- package/dist/chunk-DUBOKZMA.js +49 -0
- package/dist/{chunk-VYDURWN7.js → chunk-ECLMYTWT.js} +1 -1
- package/dist/{chunk-2RL6RRT2.js → chunk-EHH4SKVH.js} +50 -50
- package/dist/chunk-EP4CUWOO.js +9 -0
- package/dist/chunk-FY4X2VOE.js +39 -0
- package/dist/chunk-GAYK3WGV.js +2 -0
- package/dist/{chunk-YUGKQ44M.js → chunk-H5RJCS5E.js} +1 -1
- package/dist/{chunk-YN5X2FTP.js → chunk-H7MRINGP.js} +1 -1
- package/dist/chunk-HJLGXFMK.js +1 -0
- package/dist/{chunk-VRGEPPUB.js → chunk-HLWDIIWL.js} +1 -1
- package/dist/{chunk-HDNATYW7.js → chunk-IIFFEEMX.js} +1 -1
- package/dist/chunk-IVF6NEHS.js +1 -0
- package/dist/chunk-JC4XSU7G.js +1 -0
- package/dist/chunk-JRP6WP5C.js +681 -0
- package/dist/chunk-JZJBA2V2.js +1 -0
- package/dist/{chunk-N4QQADXX.js → chunk-L5CCIIF2.js} +1 -1
- package/dist/chunk-L5Q2S5GY.js +3 -0
- package/dist/chunk-LPCZHKD5.js +1 -0
- package/dist/chunk-MZ7U4BIQ.js +157 -0
- package/dist/chunk-NMXGSVMD.js +1 -0
- package/dist/{chunk-GQSRNUCU.js → chunk-NVND4727.js} +3 -3
- package/dist/chunk-O37UBRMX.js +4 -0
- package/dist/chunk-OI2VOU6S.js +1 -0
- package/dist/chunk-PD7Y6HIM.js +2 -0
- package/dist/chunk-PJPS7CNH.js +1 -0
- package/dist/chunk-QGAPGZPL.js +97 -0
- package/dist/chunk-R2M5OJOK.js +5 -0
- package/dist/chunk-SX6A656X.js +1 -0
- package/dist/{chunk-X6TNBARH.js → chunk-TABXSDTR.js} +2 -2
- package/dist/chunk-TTHO4MFC.js +2 -0
- package/dist/chunk-U5ENEDJA.js +7 -0
- package/dist/chunk-UOCERSAN.js +1 -0
- package/dist/chunk-UPIPSSXY.js +1 -0
- package/dist/chunk-UTV4DTNM.js +1 -0
- package/dist/chunk-VA5VSOBL.js +2 -0
- package/dist/chunk-VQOWB26M.js +12 -0
- package/dist/chunk-VQZ5PI5J.js +1 -0
- package/dist/chunk-WTWRSEOW.js +1 -0
- package/dist/{chunk-D65FCQIO.js → chunk-XESFJN52.js} +1 -1
- package/dist/{chunk-YYQEWAES.js → chunk-XQFWUM2P.js} +1 -1
- package/dist/chunk-XWKGZRHN.js +1 -0
- package/dist/{chunk-WRQWVSBJ.js → chunk-YX5VWPR5.js} +1 -1
- package/dist/chunk-ZQH2I5RQ.js +1 -0
- package/dist/{create-ALT2ME6H.js → create-SOLLXXAB.js} +1 -1
- package/dist/{demo-kit-QHIDCSBI.js → demo-kit-5UQH2OXC.js} +1 -1
- package/dist/{doctor-RW4R3O5C.js → doctor-NQ5PUCUP.js} +1 -1
- package/dist/{dotnet-webapi-clean-AVHPJG7Y.js → dotnet-webapi-clean-YEHYIGOT.js} +1 -1
- package/dist/{goal-lifecycle-VYOKS6E6.js → goal-lifecycle-IPNY7KNR.js} +1 -1
- package/dist/goal-pack-2WV3EA4Y.js +1 -0
- package/dist/{gofiber-standard-47S2GYAO.js → gofiber-standard-C44IIQYH.js} +1 -1
- package/dist/{gogin-standard-EWB4XNOI.js → gogin-standard-X7VKACVR.js} +1 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.js +170 -170
- package/dist/live-command-Q6E45N7S.js +18 -0
- package/dist/{pipeline-U4N2DVD7.js → pipeline-MIMENSI7.js} +1 -1
- package/dist/{project-agent-entry-YAQCHIMP.js → project-agent-entry-OWLJ3IHQ.js} +1 -1
- package/dist/project-intelligence-lens-I67EO6AE.js +1 -0
- package/dist/{project-test-coverage-4S7MEQ6T.js → project-test-coverage-OPDVSFPH.js} +1 -1
- package/dist/{pythonRapidkitExec-VAW5XE4Z.js → pythonRapidkitExec-44ORGQ4R.js} +1 -1
- package/dist/{rust-axum-M5X4ZC4Z.js → rust-axum-JKZTZDRZ.js} +1 -1
- package/dist/{springboot-standard-Y5ADLZMQ.js → springboot-standard-PI4FLTAN.js} +1 -1
- package/dist/verified-goal-46JWNCDY.js +1 -0
- package/dist/{workspace-HGUZWNAB.js → workspace-KO37XHF6.js} +1 -1
- package/dist/{workspace-agent-sync-GEN3KBAX.js → workspace-agent-sync-32FIJQBH.js} +1 -1
- package/dist/{workspace-archive-ZBCKJHXS.js → workspace-archive-6R5DRNZW.js} +1 -1
- package/dist/{workspace-context-4WIWFW26.js → workspace-context-JKRPX775.js} +1 -1
- package/dist/{workspace-contract-7DXK4GF5.js → workspace-contract-4T3NYNK5.js} +1 -1
- package/dist/workspace-explain-MOGL4GEA.js +1 -0
- package/dist/workspace-explain-contract-W2E6LF4Q.js +1 -0
- package/dist/{workspace-feedback-RQ4TGJW6.js → workspace-feedback-6VQ7T4CR.js} +1 -1
- package/dist/{workspace-foundation-J3NNRMI3.js → workspace-foundation-GHWO3BZU.js} +1 -1
- package/dist/{workspace-graph-stream-PQI7OGCE.js → workspace-graph-stream-PTVS47NJ.js} +1 -1
- package/dist/workspace-graph-token-efficiency-Z5JD5NHI.js +1 -0
- package/dist/{workspace-history-SYCDK7FO.js → workspace-history-M2K4M2JY.js} +1 -1
- package/dist/{workspace-intelligence-6FS26JOQ.js → workspace-intelligence-PJIPTXL3.js} +1 -1
- package/dist/{workspace-intelligence-evaluation-CQDKOYZZ.js → workspace-intelligence-evaluation-GONCRE6O.js} +1 -1
- package/dist/{workspace-intelligence-runner-XYUPCSLN.js → workspace-intelligence-runner-M47QR3JM.js} +1 -1
- package/dist/{workspace-intelligence-runtime-registry-IW6J53LO.js → workspace-intelligence-runtime-registry-FFGQF4A7.js} +1 -1
- package/dist/workspace-knowledge-graph-V2EAYDCL.js +1 -0
- package/dist/{workspace-knowledge-graph-contract-L3CLAM2M.js → workspace-knowledge-graph-contract-VANN7RCA.js} +1 -1
- package/dist/{workspace-knowledge-graph-query-FZXSPWGK.js → workspace-knowledge-graph-query-RASPF7FS.js} +1 -1
- package/dist/workspace-knowledge-graph-snapshot-5YIG6EMG.js +1 -0
- package/dist/{workspace-marker-7NHMDIRL.js → workspace-marker-XGAWZZDX.js} +1 -1
- package/dist/workspace-mcp-serve-YRORNE4P.js +3 -0
- package/dist/workspace-model-VSVKLX7M.js +1 -0
- package/dist/{workspace-onboarding-X3PWRIIS.js → workspace-onboarding-2VMJZVLZ.js} +1 -1
- package/dist/{workspace-python-engine-state-J4QKW55K.js → workspace-python-engine-state-BE4A3BL5.js} +1 -1
- package/dist/{workspace-readme-G7TZ3V5T.js → workspace-readme-6X3GLTBM.js} +2 -2
- package/dist/{workspace-registry-summary-LJN4WHIZ.js → workspace-registry-summary-QVSJKKTX.js} +1 -1
- package/dist/workspace-repair-engine-WSKV3Q4V.js +3 -0
- package/dist/workspace-run-3BXKTLVL.js +1 -0
- package/dist/{workspace-verify-USRRIM2F.js → workspace-verify-EJCSOBIK.js} +1 -1
- package/dist/{workspace-watch-43YZPLF7.js → workspace-watch-JTIFBF4Z.js} +1 -1
- package/docs/SETUP.md +10 -0
- package/docs/agent-entry.md +22 -7
- package/docs/ci-workflows.md +1 -1
- package/docs/commands-reference.md +41 -7
- package/docs/contracts/ARTIFACT_CATALOG.md +63 -44
- package/docs/contracts/COMMAND_OWNERSHIP_MATRIX.md +1 -0
- package/docs/contracts/NAMING_AND_COEXISTENCE.md +20 -18
- package/docs/contracts/README.md +4 -3
- package/docs/real-world-qualification.md +19 -3
- package/docs/workspace-knowledge-graph.md +95 -27
- package/docs/workspace-live-activity.md +199 -0
- package/docs/workspace-operations.md +32 -9
- package/package.json +1 -1
- package/dist/analyze-5PDVWECJ.js +0 -1
- package/dist/autopilot-release-JVIJCTKX.js +0 -1
- package/dist/capabilities-command-LHM3XIS6.js +0 -1
- package/dist/chunk-2647BYBC.js +0 -1
- package/dist/chunk-27UR373Z.js +0 -1
- package/dist/chunk-2C5ZBVBI.js +0 -2
- package/dist/chunk-6JWNDWOA.js +0 -1
- package/dist/chunk-CCDGHPEJ.js +0 -2
- package/dist/chunk-DFG33SBR.js +0 -2
- package/dist/chunk-FY4IIAIF.js +0 -1
- package/dist/chunk-HEZZ72V4.js +0 -94
- package/dist/chunk-HN7P4T3B.js +0 -681
- package/dist/chunk-ILIBOMYL.js +0 -1
- package/dist/chunk-J7QYANXK.js +0 -8
- package/dist/chunk-JD3A5QM6.js +0 -2
- package/dist/chunk-JQLJBK5N.js +0 -1
- package/dist/chunk-KLSSPJTV.js +0 -1
- package/dist/chunk-L22EABIC.js +0 -7
- package/dist/chunk-MDTI3UEB.js +0 -1
- package/dist/chunk-MOSXTVPU.js +0 -1
- package/dist/chunk-MYJQGGIU.js +0 -5
- package/dist/chunk-NOV6723U.js +0 -1
- package/dist/chunk-NYEAMMUL.js +0 -1
- package/dist/chunk-NZ3WZYD5.js +0 -1
- package/dist/chunk-O5B2L3R2.js +0 -1
- package/dist/chunk-OWB5KWSS.js +0 -13
- package/dist/chunk-P5PSZQPB.js +0 -2
- package/dist/chunk-QI3HG6IG.js +0 -144
- package/dist/chunk-SWGSFLTC.js +0 -1
- package/dist/chunk-THIOE2PB.js +0 -2
- package/dist/chunk-U5FCQTVL.js +0 -4
- package/dist/chunk-UXEO5QCF.js +0 -33
- package/dist/chunk-VR6XMUF3.js +0 -2
- package/dist/chunk-VVJK5NFY.js +0 -2
- package/dist/chunk-VXKWWX7S.js +0 -8
- package/dist/chunk-W322YDHS.js +0 -49
- package/dist/chunk-WPRLXKWC.js +0 -8
- package/dist/chunk-Y5YAP4F3.js +0 -2
- package/dist/chunk-YOCN7GF4.js +0 -1
- package/dist/goal-pack-YWPI43QL.js +0 -1
- package/dist/project-intelligence-lens-MRQR2LQW.js +0 -1
- package/dist/verified-goal-WM34TTGE.js +0 -1
- package/dist/workspace-explain-TE2LGOAV.js +0 -1
- package/dist/workspace-explain-contract-V2IVSROX.js +0 -1
- package/dist/workspace-graph-token-efficiency-2I4X374C.js +0 -1
- package/dist/workspace-knowledge-graph-SWCKDTPF.js +0 -1
- package/dist/workspace-knowledge-graph-snapshot-M572JRB4.js +0 -1
- package/dist/workspace-mcp-serve-IBMTFQDY.js +0 -3
- package/dist/workspace-model-ZL6WCICX.js +0 -1
- package/dist/workspace-repair-engine-NX7I632M.js +0 -3
- package/dist/workspace-run-6GT5OBQ5.js +0 -1
package/dist/chunk-NZ3WZYD5.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var r="workspai.doctor-capabilities.v1",k="universal-doctor-capabilities-v1",t="workspai.doctor-validation.v1",w="doctor-disease-corpus-v1";var o={model:".workspai/reports/workspace-model.json",knowledgeGraph:".workspai/reports/workspace-knowledge-graph.json",snapshot:".workspai/reports/workspace-model-snapshot.json",diff:".workspai/reports/workspace-model-diff-last-run.json",impact:".workspai/reports/workspace-impact-last-run.json",analyze:".workspai/reports/analyze-last-run.json",doctor:".workspai/reports/doctor-last-run.json",contractVerify:".workspai/reports/workspace-contract-verify-last-run.json",readiness:".workspai/reports/release-readiness-last-run.json",verify:".workspai/reports/workspace-verify-last-run.json",history:".workspai/reports/workspace-intelligence-history.json",agentContext:".workspai/reports/workspace-context-agent.json",agentIndex:".workspai/reports/INDEX.json",agentCustomizationPack:".workspai/reports/agent-customization-pack.json",skillsIndex:".workspai/reports/workspace-skills-index.json",agents:"AGENTS.md",explain:".workspai/reports/workspace-explain-last-run.json",intelligenceRun:".workspai/reports/workspace-intelligence-run-last-run.json",evaluationLive:".workspai/reports/workspace-intelligence-evaluation-live.json",evaluationLastRun:".workspai/reports/workspace-intelligence-evaluation-last-run.json",verifiedGoalStatus:".workspai/reports/verified-goal-last-run.json",repairTransaction:".workspai/reports/workspace-repair-last-run.json"},s={model:"workspace-model.v1",knowledgeGraph:"workspace-knowledge-graph.v1",snapshot:"workspace-model-snapshot.v1",diff:"workspace-model-diff.v1",impact:"workspace-impact.v1",analyze:"rapidkit-analyze-v1",doctor:"doctor-workspace-evidence-v1",contractVerify:"workspace-contract-verify.v1",readiness:"release-readiness-v1",verify:"workspace-verify.v1",history:"workspace-intelligence-history.v1",agentContext:"workspace-context.v1",agentIndex:"rapidkit-agent-reports-index.v1",agentCustomizationPack:"rapidkit-agent-customization-pack.v1",skillsIndex:"workspace-skills-index.v1",agents:null,explain:"workspace-explain.v1",intelligenceRun:"workspace-intelligence-run.v1",evaluationLive:"workspace-intelligence-evaluation.v1",evaluationLastRun:"workspace-intelligence-evaluation.v1",verifiedGoalStatus:"workspai.verified-goal-status.v1",repairTransaction:"workspai.workspace-repair-transaction.v1"},c={model:"contracts/workspace-intelligence/workspace-model.v1.json",knowledgeGraph:"contracts/workspace-intelligence/workspace-knowledge-graph.v1.json",snapshot:"contracts/workspace-intelligence/workspace-model-snapshot.v1.json",diff:"contracts/workspace-intelligence/workspace-model-diff.v1.json",impact:"contracts/workspace-intelligence/workspace-impact.v1.json",analyze:"contracts/analyze-last-run.v1.json",doctor:"contracts/doctor-workspace-evidence.v1.json",contractVerify:"contracts/workspace-intelligence/workspace-contract-verify.v1.json",readiness:"contracts/release-readiness.v1.json",verify:"contracts/workspace-intelligence/workspace-verify.v1.json",history:"contracts/workspace-intelligence/workspace-intelligence-history.v1.json",agentContext:"contracts/workspace-intelligence/workspace-context.v1.json",agentIndex:"contracts/workspace-intelligence/agent-reports-index.v1.json",agentCustomizationPack:"contracts/workspace-intelligence/agent-customization-pack-report.v1.json",skillsIndex:"contracts/workspace-intelligence/workspace-skills-index.v1.json",agents:null,explain:"contracts/workspace-intelligence/workspace-explain.v1.json",intelligenceRun:"contracts/workspace-intelligence/workspace-intelligence-run.v1.json",evaluationLive:"contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json",evaluationLastRun:"contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json",verifiedGoalStatus:"contracts/workspace-intelligence/verified-goal-status.v1.json",repairTransaction:"contracts/workspace-intelligence/workspace-repair-transaction.v1.json"},l={goalIndex:{artifactPath:".workspai/goals/index.json",schemaVersion:"workspai.goal-index.v1",contractPath:"contracts/workspace-intelligence/goal-index.v1.json",producerCommands:[["goal"]]},projectWorkspaceLink:{artifactPath:".workspai/workspace-link.local.json",schemaVersion:"project-workspace-link.v1",contractPath:"contracts/project-workspace-link.v1.json",producerCommands:[["adopt"],["import"],["project","workspace","relink"],["workspace","sync"]]},projectContextAgent:{artifactPath:".workspai/reports/project-context-agent.json",schemaVersion:"project-context-agent.v1",contractPath:"contracts/workspace-intelligence/project-context-agent.v1.json",producerCommands:[["adopt"],["import"],["workspace","sync"],["workspace","agent-sync","--write"]]},projectAgentEntry:{artifactPath:".workspai/agent-entry.v1.json",schemaVersion:"workspai.agent-entry.v1",contractPath:"contracts/workspace-intelligence/project-agent-entry.v1.json",producerCommands:[["adopt"],["import"],["workspace","sync"],["workspace","agent-sync","--write"]]},workspaceContract:{artifactPath:".workspai/workspace.contract.json",schemaVersion:1,contractPath:"contracts/workspace-contract.v1.json",producerCommands:[["workspace","sync"],["workspace","contract","sync"]]},workspaceModelCache:{artifactPath:".workspai/cache/workspace-model.v1.json",schemaVersion:"workspace-model-cache.v1",contractPath:"contracts/workspace-model-cache.v1.json",producerCommands:[["workspace","model"]]},workspaceRegistry:{artifactPath:".workspai/workspace-registry.v1.json",schemaVersion:"workspace-registry.v1",contractPath:"contracts/workspace-registry.v1.json",producerCommands:[["workspace","sync"]]},compatibilityMatrix:{artifactPath:".workspai/compatibility-matrix.json",schemaVersion:"rapidkit.compatibility-matrix.v1",contractPath:"contracts/compatibility-matrix.v1.json",producerCommands:[["bootstrap"]]},doctorWorkspaceCache:{artifactPath:".workspai/reports/doctor-workspace-cache.json",schemaVersion:"doctor-workspace-cache-v2",contractPath:"contracts/doctor-workspace-cache.v2.json",producerCommands:[["doctor","workspace"]]},doctorCapabilities:{artifactPath:".workspai/reports/doctor-capabilities.json",schemaVersion:r,contractPath:"contracts/workspace-intelligence/doctor-capabilities.v1.json",producerCommands:[["doctor","capabilities","--write"]]},doctorValidation:{artifactPath:".workspai/reports/doctor-validation-last-run.json",schemaVersion:t,contractPath:"contracts/workspace-intelligence/doctor-validation.v1.json",producerCommands:[["doctor","capabilities","--validate","--write"]]},bootstrapCompliance:{artifactPath:".workspai/reports/bootstrap-compliance.latest.json",schemaVersion:"bootstrap-compliance.v1",contractPath:"contracts/bootstrap-compliance.v1.json",producerCommands:[["bootstrap"]]},mirrorOps:{artifactPath:".workspai/reports/mirror-ops.latest.json",schemaVersion:"mirror-ops.v1",contractPath:"contracts/mirror-ops.v1.json",producerCommands:[["mirror","status"]]},transparencyEvidence:{artifactPath:".workspai/reports/transparency-evidence.latest.json",schemaVersion:"transparency-evidence.v1",contractPath:"contracts/transparency-evidence.v1.json",producerCommands:[["mirror","sync"]]},workspaceShareBundle:{artifactPath:".workspai/reports/share-bundle.json",schemaVersion:"1.1",schemaVersionField:"schema_version",contractPath:"contracts/workspace-share-bundle.v1.json",producerCommands:[["workspace","share"]]},doctorProject:{artifactPath:".workspai/reports/doctor-project-last-run.json",schemaVersion:"doctor-project-evidence-v1",contractPath:"contracts/doctor-project-evidence.v1.json",producerCommands:[["doctor","project"]]},doctorReceipt:{artifactPath:".workspai/reports/doctor-receipt-last-run.json",schemaVersion:"workspai.doctor-receipt.v1",contractPath:"contracts/workspace-intelligence/doctor-receipt.v1.json",producerCommands:[["doctor","workspace"],["doctor","project"]]},projectTestCoverage:{artifactPath:".workspai/reports/project-test-coverage-last-run.json",schemaVersion:"workspai.project-test-coverage.v1",contractPath:"contracts/project-test-coverage.v1.json",producerCommands:[["project","coverage"]]},goalPackLastRun:{artifactPath:".workspai/reports/goal-pack-last-run.json",schemaVersion:"workspai.goal-pack.v1",contractPath:"contracts/workspace-intelligence/goal-pack.v1.json",producerCommands:[["goal"]]},doctorRemediationPlan:{artifactPath:".workspai/reports/doctor-remediation-plan-last-run.json",schemaVersion:"doctor-remediation-plan-v2",contractPath:"contracts/doctor-remediation-plan.v2.json",producerCommands:[["workspace","remediation-plan"]]},artifactRemediationPlan:{artifactPath:".workspai/reports/artifact-remediation-plan-last-run.json",schemaVersion:"artifact-remediation-plan-v1",contractPath:"contracts/artifact-remediation-plan.v1.json",producerCommands:[["workspace","remediation-plan"]]},doctorFixResult:{artifactPath:".workspai/reports/doctor-fix-result-last-run.json",schemaVersion:"rapidkit-doctor-fix-result-v1",contractPath:"contracts/workspace-intelligence/doctor-fix-result.v1.json",producerCommands:[["doctor","workspace"]]},pipelineLastRun:{artifactPath:".workspai/reports/pipeline-last-run.json",schemaVersion:"rapidkit-pipeline-v1",contractPath:"contracts/pipeline-last-run.v1.json",producerCommands:[["pipeline"]]},autopilotReleaseLastRun:{artifactPath:".workspai/reports/autopilot-release-last-run.json",schemaVersion:"autopilot-release-v1",contractPath:"contracts/autopilot-release.v1.json",producerCommands:[["autopilot","release"]]},autopilotReleaseAlias:{artifactPath:".workspai/reports/autopilot-release.json",schemaVersion:"autopilot-release-v1",contractPath:"contracts/autopilot-release.v1.json",producerCommands:[["autopilot","release"]]},workspaceRunLast:{artifactPath:".workspai/reports/workspace-run-last.json",schemaVersion:"workspace-run-v1",contractPath:"contracts/workspace-run-last.v1.json",producerCommands:[["workspace","run"]]},workspaiMcpDesign:{artifactPath:".workspai/reports/workspai-mcp-design.json",schemaVersion:"workspai-mcp-design.v1",contractPath:"contracts/workspace-intelligence/mcp-design.v1.json",producerCommands:[["workspace","agent-sync","--write"]]},legacyMcpDesign:{artifactPath:".workspai/reports/rapidkit-mcp-design.json",schemaVersion:"workspai-mcp-design.v1",contractPath:"contracts/workspace-intelligence/mcp-design.v1.json",producerCommands:[["workspace","agent-sync","--write"]]},workspaceWhy:{artifactPath:".workspai/reports/workspace-why-last-run.json",schemaVersion:s.explain,contractPath:c.explain,producerCommands:[["workspace","why"]]},workspaceTrace:{artifactPath:".workspai/reports/workspace-trace-last-run.json",schemaVersion:s.explain,contractPath:c.explain,producerCommands:[["workspace","trace"]]},agentHooks:{artifactPath:".vscode/workspai-agent-hooks.json",schemaVersion:"workspai-agent-hooks.v1",contractPath:"contracts/workspace-intelligence/agent-hooks.v1.json",producerCommands:[["workspace","agent-sync"]]},infraPlan:{artifactPath:".workspai/reports/infra-plan.json",schemaVersion:"rapidkit.infra-plan.v1",contractPath:"contracts/infra-plan.v1.json",producerCommands:[["infra","plan"]]}},u=Object.freeze(Object.fromEntries(Object.entries(l).map(([a,n])=>[a,n.artifactPath]))),h={[o.intelligenceRun]:[["workspace","intelligence","run"]],[o.snapshot]:[["workspace","snapshot"]],[o.history]:[["workspace","feedback","record","--json"]],[o.evaluationLive]:[["workspace","eval","init"],["workspace","eval","record","--json"]],[o.evaluationLastRun]:[["workspace","eval","report","--json"]],[o.verifiedGoalStatus]:[["workspace","goal","plan"],["workspace","goal","verify"]],[o.repairTransaction]:[["workspace","repair","plan"],["workspace","repair","propose"],["workspace","repair","approve"],["workspace","repair","decide"],["workspace","repair","execute"],["workspace","repair","resume"],["workspace","repair","rollback"],["workspace","repair","cancel"]]},j={analyze:"analyze",workspace:"workspace <action> [subaction] [key] [value]",doctor:"doctor [scope]",readiness:"readiness"},f=["analyze","readiness","doctor","workspace"],C=["model","diff","impact","doctor-evidence","contract-evidence","analyze-evidence","readiness-evidence","verify","context","agent-sync","explain"],P=["sync","baseline"],y={sync:[".workspai/workspace.contract.json",".workspai/workspace-registry.v1.json"],baseline:[o.snapshot]},e=o,d={model:{command:["workspace","model","--json","--write"],produces:[e.model,e.knowledgeGraph]},diff:{command:["workspace","diff","--from",e.snapshot,"--json"],produces:[e.diff]},impact:{command:["workspace","impact","--from",e.diff,"--json"],produces:[e.impact]},"doctor-evidence":{command:["doctor","workspace","--json"],produces:[e.doctor]},"contract-evidence":{command:["workspace","contract","verify","--strict","--json"],produces:[e.contractVerify]},"analyze-evidence":{command:["analyze","--json"],produces:[e.analyze]},"readiness-evidence":{command:["readiness","--json","--skip-verify"],produces:[e.readiness]},verify:{command:["workspace","verify","--from-impact",e.impact,"--json"],produces:[e.verify,e.history]},context:{command:["workspace","context","--for-agent","--json","--write","--no-agent-sync"],produces:[e.agentContext]},"agent-sync":{command:["workspace","agent-sync","--write","--json","--preset","enterprise"],produces:[e.agentIndex,e.agentCustomizationPack,e.skillsIndex,e.agents]},explain:{command:["workspace","explain","release-blocked","--json","--write"],produces:[e.explain]}};function I(a){return d[a]}export{r as a,k as b,t as c,w as d,o as e,s as f,c as g,l as h,u as i,h as j,j as k,f as l,C as m,P as n,y as o,d as p,I as q};
|
package/dist/chunk-O5B2L3R2.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {b,c}from'./chunk-VXKWWX7S.js';import {d}from'./chunk-CCDGHPEJ.js';import {e,f as f$1}from'./chunk-NZ3WZYD5.js';import A from'fs-extra';function t(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function W(e){let s=t(e);return !!(s&&s.schemaVersion===f$1.model&&t(s.workspace)&&Array.isArray(s.projects)&&(t(s.projectTopology)||t(s.graph)))}function G(e){let s=t(e);return !!(s&&s.schemaVersion===f$1.knowledgeGraph&&t(s.source)&&t(s.workspace)&&Array.isArray(s.entities)&&Array.isArray(s.relations)&&Array.isArray(s.proofs)&&Array.isArray(s.providers)&&t(s.quality))}async function f(e){try{return await A.readJson(e)}catch{return null}}async function I(e$1){let[s,n]=await Promise.all([d(e$1,e.model),d(e$1,e.knowledgeGraph)]);if(!s)return {status:"miss",reason:"missing-model"};if(!n)return {status:"miss",reason:"missing-graph"};let[i,o]=await Promise.all([f(s),f(n)]);if(!W(i))return {status:"miss",reason:"invalid-model"};if(!G(o))return {status:"miss",reason:"invalid-graph"};if(o.proofs.some(r=>r.freshness==="stale"))return {status:"miss",reason:"stale-proof"};try{b(o,i);}catch{return {status:"miss",reason:"source-mismatch"}}let a=o.source.inputs;if(!a)return {status:"miss",reason:"missing-input-fingerprint"};let d$1=a.scopes.filter(r=>r.kind==="workspace"),p=a.scopes.filter(r=>r.kind==="project"),k=i.projects.map(r=>r.name).sort(),w=p.map(r=>r.id).sort(),y=new Set(p.map(r=>r.fileLimit));if(a.schemaVersion!=="workspace-knowledge-graph-inputs.v1"||a.strategy!=="hybrid-git-content-v2"||a.hashAlgorithm!=="sha256"||d$1.length!==1||y.size>1||JSON.stringify(k)!==JSON.stringify(w))return {status:"miss",reason:"invalid-input-fingerprint"};let c$1;try{c$1=await c({workspacePath:e$1,projects:i.projects.map(r=>({id:r.name,path:r.path,...r.absolutePath?{absolutePath:r.absolutePath}:{}})),projectFileLimit:p[0]?.fileLimit??2e4,workspaceFileLimit:d$1[0].fileLimit});}catch{return {status:"miss",reason:"input-scan-failed"}}return !c$1||c$1.hash!==a.hash?{status:"miss",reason:"live-input-mismatch"}:{status:"hit",model:i,graph:o,modelPath:s,graphPath:n}}export{I as a};
|
package/dist/chunk-OWB5KWSS.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import {a as a$1}from'./chunk-JEI6BTZI.js';import {a}from'./chunk-PXWKMPPI.js';import {c,e,d}from'./chunk-YUGKQ44M.js';import {d as d$1,b}from'./chunk-NOV6723U.js';import {g}from'./chunk-VVJK5NFY.js';import {n,j}from'./chunk-FY4IIAIF.js';import {p as p$1,d as d$2}from'./chunk-P5PSZQPB.js';import {e as e$1}from'./chunk-CCDGHPEJ.js';import {b as b$2}from'./chunk-D65FCQIO.js';import {a as a$2}from'./chunk-AFIFZTOY.js';import v from'path';import b$1 from'fs-extra';function J(e$1){switch(e$1){case "why":return d;case "trace":return e;default:return c}}async function P(e,o,n){try{if(!await b$1.pathExists(e))return null;let r=await b$1.readJson(e);return o?b$2(o,r,e):n&&a$2(r,n,e),r}catch(r){if((o||n)&&await b$1.pathExists(e))throw r;return null}}function G(e,o){if(!e)return null;let n=o.trim().toLowerCase();return e.projects.find(r=>r.slug.toLowerCase()===n||r.relativePath.toLowerCase()===n)??null}function X(e,o,n){let r=n.trim().toLowerCase(),t=(j(e)?.nodes.map(a=>a.id)??e.projects.map(a=>a.name)).find(a=>a.toLowerCase()===r);if(t)return t;let d=e.projects.find(a=>[a.name,a.path,v.basename(a.path)].filter(u=>u.trim().length>0).some(u=>u.toLowerCase()===r));if(d)return d.name;let c=G(o,n);if(c){let a=e.projects.find(u=>u.path===c.relativePath||u.path.endsWith(`/${c.relativePath}`));if(a)return a.name}return n}function Y(e,o){if(!e)return [];let n=o.trim().toLowerCase(),r=new Set;for(let l of e.projects){l.contracts.dependsOn?.some(t=>t.toLowerCase()===n)&&r.add(l.slug);for(let t of l.contracts.consumes??[])for(let d of e.projects)d.contracts.publishes?.includes(t)&&d.slug===n&&r.add(l.slug);}return [...r].sort()}function q(e,o){if(!e)return [];let n=o.trim().toLowerCase();return e.steps.filter(r=>r.scope==="project"&&r.project?.toLowerCase()===n&&r.command?.display).map(r=>r.command.display).slice(0,8)}function p(e,o,n){return {id:e,title:o,body:n.trim()}}async function fe(e){let o=v.resolve(e.workspacePath),n$1=(e.now??new Date).toISOString(),r=e.model??await n({workspacePath:o,includeEvidence:true}),l=e.contract;if(l===void 0)try{l=(await p$1({workspacePath:o})).contract;}catch{l=null;}let t=e.verify;t===void 0&&(t=await P(v.join(o,d$1),d$1));let d=e.impact;if(d===void 0&&(d=await P(v.join(o,g),g)),e.target.kind==="release-blocked"){let s=t?.blockingReasons??[],i=(r.summary?.projectCount??r.projects.length)===0,g=[p("verdict",i?"Workspace scaffold posture":"Release verdict",t?i?`Scaffold posture: **${t.summary.verdict}** (exit ${t.summary.exitCode}). Freshness: **${t.freshness.verdict}**. No registered projects yet \u2014 release gates apply after the first project is added.`:`Verdict: **${t.summary.verdict}** (exit ${t.summary.exitCode}). Risk: **${t.impact.risk}**. Freshness: **${t.freshness.verdict}**.`:"No workspace verify report found. Run `npx workspai workspace verify --json --write` first."),p("blockers",i?"Pre-project signals":"Blocking reasons",s.length?s.map(h=>`- ${h}`).join(`
|
|
2
|
-
`):i?"No pre-project signals in the latest verify report.":"No blocking reasons in the latest verify report.")];return t?.resolutionHints?.length&&g.push(p("resolution","Resolution hints",t.resolutionHints.map(h=>`- **${h.blockerId}** (${h.resolutionClass}): ${h.commandRetryHint??h.fixHints[0]?.detail??"See fix hints"}`).join(`
|
|
3
|
-
`))),{schemaVersion:a,generatedAt:n$1,workspacePath:o,target:e.target,summary:t?i?b(s.length,t.summary.verdict):s.length>0||t.summary.verdict==="blocked"?`Release blocked: ${t.summary.verdict} with ${s.length} blocking reason(s).`:t.summary.verdict==="needs-attention"?"Release needs attention: advisory or incomplete verification evidence remains; no blocking reason was reported.":`Release posture: ${t.summary.verdict}; no blocking reason was reported.`:"Release posture unknown \u2014 verify report missing.",sections:g,releaseVerdict:t?.summary.verdict,evidenceFreshness:t?.freshness.verdict,blocking:!!(t&&(t.summary.verdict==="blocked"||s.length>0)),releaseRisk:t?.impact.risk,blockingReasons:s,resolutionHints:t?.resolutionHints}}if(e.target.kind==="blocker"){let s=e.target,m=t?.resolutionHints?.find(g=>g.blockerId===s.blockerId),i=t?.blockingReasons.find(g=>g.includes(s.blockerId))??t?.blockingReasons[0];return {schemaVersion:a,generatedAt:n$1,workspacePath:o,target:s,summary:m?`Blocker ${s.blockerId}: ${m.resolutionClass}`:`Blocker ${s.blockerId} (no structured hint)`,sections:[p("reason","Blocking signal",i??"No matching blocking reason in verify."),p("hint","Resolution class",m?`${m.resolutionClass}
|
|
4
|
-
|
|
5
|
-
${m.commandRetryHint??""}
|
|
6
|
-
|
|
7
|
-
${m.fixHints.map(g=>`- ${g.detail}`).join(`
|
|
8
|
-
`)}`:"Run workspace verify to emit resolutionHints for this blocker.")],blockingReasons:i?[i]:[],resolutionHints:m?[m]:[]}}if(e.target.kind==="trace"){let s=v.isAbsolute(e.target.diffRef)?e.target.diffRef:v.join(o,e.target.diffRef),m=await P(s,void 0,"contracts/workspace-intelligence/workspace-model-diff.v1.json"),i=m?.summary?.changedProjects??[...new Set((m?.changes??[]).map(f=>f.project).filter(Boolean))],h=(r.summary?.projectCount??r.projects.length)===0,_=d?.transitiveImpact?.map(f=>`${f.project?.name??f.target} (d${f.distance??0}, via ${f.via??"\u2014"})`)??[],y=t?.affectedSubgraph;return {schemaVersion:a,generatedAt:n$1,workspacePath:o,target:e.target,summary:i?.length?`Trace from ${i.length} changed project(s) through blast radius to gate coverage.`:h?"Trace: workspace scaffold baseline \u2014 no project changes in the latest diff.":"Trace: diff baseline present with no project changes.",sections:[p("origin","Change origin",i?.length?i.map(f=>`- ${f}`).join(`
|
|
9
|
-
`):"No changed projects in diff."),p("blast-radius","Transitive impact",_.length?_.map(f=>`- ${f}`).join(`
|
|
10
|
-
`):"No transitive impact report."),p("gate","Subgraph gate",y?`Directly changed: ${y.directlyChanged}; transitive dependents: ${y.transitiveDependents}; covered: ${y.covered}; uncovered: ${y.uncovered}; unverifiable: ${y.unverifiable}.`:"No verify subgraph coverage available.")],releaseRisk:d?.summary?.risk??t?.impact.risk,blockingReasons:t?.blockingReasons}}let c=e.target.project,a$2=X(r,l,c),u=j(r),k=u?a$1(u,a$2):{found:false,centrality:null,directDependents:[],transitiveDependents:[]},j$1=G(l,c),E=Y(l,c),x=q(t,c),w=r.projects.find(s=>s.name.toLowerCase()===c.toLowerCase()),I=[p("overview","Project overview",w?`${w.name} (${w.frameworkDisplayName}, ${w.runtime}) at \`${w.path}\`.`:`Project **${c}** ${k.found?"exists in graph":"not found in workspace model"}.`),p("consumers","Consumers / dependents",[`Direct dependents: ${k.directDependents.join(", ")||"none"}`,`Contract consumers: ${E.join(", ")||"none"}`,`Transitive dependents (blast radius): ${k.transitiveDependents.length}`].join(`
|
|
11
|
-
`)),p("contracts","Critical contracts",j$1?[`Owns: ${j$1.contracts?.owns?.join(", ")||"none"}`,`Publishes: ${j$1.contracts.publishes.join(", ")||"none"}`,`Consumes: ${j$1.contracts.consumes.join(", ")||"none"}`,`APIs: ${j$1.contracts.apis.map(s=>s.name).join(", ")||"none"}`].join(`
|
|
12
|
-
`):"No workspace.contract.json entry for this project."),p("verification","Required verification",x.length?x.map(s=>`- ${s}`).join(`
|
|
13
|
-
`):"- `npx workspai workspace verify --json`\n- Project test/build via `workspace run` when configured")];k.centrality&&I.push(p("centrality","Graph centrality",`fanIn ${k.centrality.fanIn}, fanOut ${k.centrality.fanOut}, reach ${k.centrality.reach}, hotspot ${k.centrality.isHotspot?"yes":"no"}.`));let A=c.trim().toLowerCase(),T=s=>s.project?.name?.toLowerCase()===A||s.target.toLowerCase()===A,S=d?.affectedProjects?.find(T)?.risk??d?.transitiveImpact?.find(T)?.risk??t?.impact.risk??"unknown";return {schemaVersion:a,generatedAt:n$1,workspacePath:o,target:e.target,summary:`${c}: ${E.length} consumer(s), release risk **${S}**.`,sections:I,releaseRisk:String(S)}}async function ue(e,o,n="explain"){let r=J(n);return await e$1(o,r,d$2(e)),r}export{J as a,fe as b,ue as c};
|
package/dist/chunk-P5PSZQPB.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {G}from'./chunk-J7QYANXK.js';import {a}from'./chunk-GR6442P7.js';import {a as a$1,d,c as c$1,e as e$1}from'./chunk-CCDGHPEJ.js';import {b}from'./chunk-D65FCQIO.js';import {l}from'./chunk-OCGZNSOE.js';import {i,e,h,f}from'./chunk-NZ3WZYD5.js';import {c}from'./chunk-VR6XMUF3.js';import {s,t,p}from'./chunk-MOSXTVPU.js';import*as g from'path';import g__default from'path';import h$1 from'fs-extra';var ke="unknown-run";function ee(e){let t=c();return !t||t===ke?e:{...e,runId:t}}async function te(e,t){await h$1.ensureDir(g.dirname(e));let r=`${e}.${process.pid}.${Date.now()}.tmp`;try{await h$1.writeJSON(r,t,{spaces:2}),await h$1.move(r,e,{overwrite:true});}finally{await h$1.remove(r).catch(()=>{});}}function re(e){return p(e,"imported-projects.json")}async function I(e){let t=(await Promise.all(s(e,"imported-projects.json").map(async r=>await h$1.pathExists(r)?r:null))).find(r=>typeof r=="string");if(!t)return [];try{let r=await h$1.readJSON(t);if(!r||typeof r!="object"||r.version!==1||!Array.isArray(r.projects))throw new Error("expected a version 1 registry with a projects array");let o=r.projects,n=o.filter(i=>{if(!i||typeof i!="object")return false;let c=i;return typeof c.name=="string"&&typeof c.path=="string"&&typeof c.stack=="string"&&typeof c.confidence=="string"&&typeof c.importedAt=="string"});if(n.length!==o.length)throw new Error("one or more project entries are invalid");return n}catch(r){throw new Error(`Imported-project registry is invalid: ${t}`,{cause:r})}}async function Ve(e,t){if(t.length===0)return;let r=await I(e),o=new Map;for(let d of r)o.set(d.path,d);for(let d of t)o.set(d.path,d);let n=Array.from(o.values()).sort((d,u)=>d.name.localeCompare(u.name)).map(d=>({...d})),i={version:1,updatedAt:new Date().toISOString(),projects:n},c=re(e);await te(c,i);}async function $e(e,t){if(t.length===0)return;let r=await I(e),o=new Set(t.map(d=>g.resolve(d))),n=r.filter(d=>!o.has(g.resolve(d.path))),i={version:1,updatedAt:new Date().toISOString(),projects:n},c=re(e);await te(c,i);}var Me="workspace-dependency-graph.v1",oe=["code-import","package-dep","event-pub-sub","service-dependsOn","shared-resource"],ne=["inferred","contract","manual"];var E=i.workspaceContract,we=e.contractVerify,R=h.workspaceContract.schemaVersion,Pe=f.contractVerify,N=class extends Error{constructor(r){super(`Workspace contract verification failed: ${r.violations.join("; ")}`);this.verification=r;this.name="WorkspaceContractVerificationError";}verification};function pe(e){return e.replace(/\\/g,"/")}function L(e){let t=pe(e).trim();return !t||t.startsWith("/")||t.startsWith("~")||/^[a-zA-Z]:\//.test(t)||t.includes("\0")?false:!t.split("/").filter(Boolean).some(r=>r===".."||r===".")}function ae(e,t){return e.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/-+/g,"-").replace(/^[-_.]+|[-_.]+$/g,"").slice(0,80)||t}function ye(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim().length>0):[]}function se(e){let r=(Array.isArray(e.ports)?e.ports:[]).map(i=>{if(!i||typeof i!="object"||Array.isArray(i))return null;let c=i,d=Number(c.port);if(!Number.isInteger(d)||d<1||d>65535)return null;let u=c.protocol==="https"||c.protocol==="grpc"||c.protocol==="tcp"||c.protocol==="udp"?c.protocol:"http";return {name:typeof c.name=="string"&&c.name.trim()?c.name:"http",port:d,protocol:u}}).filter(i=>i!==null);if(r.length>0)return r;let o=e.frontend&&typeof e.frontend=="object"&&!Array.isArray(e.frontend)?e.frontend:void 0,n=Number(e.port??o?.default_port);return Number.isInteger(n)&&n>=1&&n<=65535?[{name:"http",port:n,protocol:"http"}]:[]}async function Ce(e){let t=g__default.join(e,"Dockerfile");if(!await h$1.pathExists(t))return [];try{let r=await h$1.readFile(t,"utf8"),o=new Map;for(let n of r.matchAll(/^\s*EXPOSE\s+(.+)$/gim))for(let i of n[1].split(/\s+/)){let c=i.match(/^(\d{1,5})(?:\/(tcp|udp))?$/i),d=Number(c?.[1]);if(!c||!Number.isInteger(d)||d<1||d>65535)continue;let u=c[2]?.toLowerCase();o.set(d,{name:"http",port:d,protocol:u==="udp"?"udp":"http"});}return [...o.values()].sort((n,i)=>n.port-i.port)}catch{return []}}async function D(e){for(let t of e)if(await h$1.pathExists(t))return t;return null}async function Ee(e){for(let t of s(e,"workspace.json"))try{let r=await h$1.readJson(t);return {name:typeof r.workspace_name=="string"&&r.workspace_name.trim()||typeof r.name=="string"&&r.name.trim()||g__default.basename(e),profile:typeof r.profile=="string"?r.profile:void 0}}catch{}return {name:g__default.basename(e)}}async function be(e){let t$1=[],r=[e],o=new Set,n=new Set([".git",".workspai",".rapidkit","node_modules",".venv","venv","dist","build","target",".next",".turbo",".cache"]);for(;r.length>0;){let i=r.shift();if(!i||o.has(i))continue;o.add(i);let c=await D(t(i,"project.json")),d=await D(t(i,"context.json"));if(c||d){t$1.push(c??d??"");continue}let u;try{u=await h$1.readdir(i,{withFileTypes:true});}catch{continue}for(let l of u)!l.isDirectory()||n.has(l.name)||a(l.name)||r.push(g__default.join(i,l.name));}return t$1.sort()}function je(e){let t=(e||"").toLowerCase();if(t.includes("fastapi"))return "fastapi";if(t.includes("nestjs"))return "nestjs";if(t.includes("springboot"))return "springboot";if(t.includes("gofiber"))return "fiber";if(t.includes("gogin"))return "gin"}function ve(e,t){let r=(e||"").toLowerCase(),o=(t||"").toLowerCase();return r.includes("vscode-extension")?null:r.includes("fastapi")?8e3:r.includes("nestjs")?3e3:r.includes("springboot")?8080:r.includes("gofiber")?3e3:r.includes("gogin")?8080:r.startsWith("adopted.")?null:o==="node"?3e3:o==="python"?8e3:o==="java"||o==="go"?8080:null}function M(e,t){let r=e;for(;t.has(r)&&r<65535;)r+=1;return r}function H(e,t,r){let o=e!==void 0&&e.source===void 0,n=ve(t.kit,t.runtime),i=e?.ports||[],c=t.ports||[],d=(t.kit||"").toLowerCase().includes("vscode-extension"),u=t.source==="adopted-local"&&e?.source==="adopted-local",l=u,p=(d&&c.length===0?[]:u?c.length>0?c:n?[{name:"http",port:M(n,r),protocol:"http"}]:[]:i.length>0?i:c.length>0?c:n?[{name:"http",port:M(n,r),protocol:"http"}]:[]).map(P=>({...P,port:M(P.port,r)}));for(let P of p)r.add(P.port);let k={...t,...e,slug:e?.slug||t.slug,relativePath:o&&e?.relativePath&&L(e.relativePath)?e.relativePath:t.relativePath,source:o&&e?.source||t.source,relationship:o&&e?.relationship||t.relationship,externalPath:o&&e?.externalPath||t.externalPath,runtime:l?t.runtime:e?.runtime||t.runtime,framework:l?t.framework:e?.framework||t.framework,kit:l?t.kit:e?.kit||t.kit,modules:e?.modules?.length?e.modules:t.modules,ports:p,contracts:{owns:e?.contracts?.owns||[],apis:e?.contracts?.apis||[],publishes:e?.contracts?.publishes||[],consumes:e?.contracts?.consumes||[],dependsOn:e?.contracts?.dependsOn||[],env:e?.contracts?.env||[]}},f=JSON.stringify(e||null)!==JSON.stringify(k);return {project:k,changed:f}}async function de(e){let t$1=g__default.resolve(e.workspacePath),r=await Ee(t$1),o=await be(t$1),n=await I(t$1),i=[];for(let l of n){let s=g__default.resolve(l.path),p=await D(t(s,"project.json"))??await D(t(s,"context.json"));!p||o.some(k=>g__default.resolve(k)===g__default.resolve(p))||i.push({projectJsonPath:p,registryEntry:l});}let c=[],d=[...o.map(l=>({projectJsonPath:l})),...i];for(let{projectJsonPath:l,registryEntry:s}of d){let p=g__default.dirname(g__default.dirname(l)),k=pe(g__default.relative(t$1,p)),f=s!==void 0&&!L(k),P=ae(s?.name||g__default.basename(p),g__default.basename(p)),y=f?`external/${P}`:k||P,w=await h$1.readJson(l),x=typeof w.kit_name=="string"&&w.kit_name||typeof w.kit=="string"&&w.kit||void 0,a=typeof w.framework=="string"&&w.framework||je(x);c.push({slug:s?.name||y||g__default.basename(p),relativePath:y,source:s?.source??"workspace",relationship:s?.relationship,externalPath:f?p:void 0,runtime:typeof w.runtime=="string"?w.runtime:void 0,framework:a,kit:x,modules:ye(w.modules),ports:se(w).length>0?se(w):await Ce(p),contracts:{owns:[],apis:[],publishes:[],consumes:[],dependsOn:[],env:[]}});}let u=new Map;for(let l of c){let s=ae(l.slug,l.relativePath),p=u.get(s);(!p||p.source!=="workspace"&&l.source==="workspace")&&u.set(s,l);}return {schemaVersion:R,kind:"rapidkit.workspace.contract",generatedAt:(e.now??new Date).toISOString(),workspace:r,projects:[...u.values()]}}async function ot(e){let t=g__default.resolve(e.outputPath||a$1(e.workspacePath,E));if(await h$1.pathExists(t)&&e.force!==true)throw new Error(`Workspace contract already exists: ${t}. Use --force to overwrite.`);let r=await de({workspacePath:e.workspacePath,now:e.now}),o=new Set,n={...r,projects:r.projects.map(c=>H(void 0,c,o).project)},i=await me({workspacePath:e.workspacePath,contractPath:t,contract:n});if(e.strict&&i.status==="failed")throw new N(i);return await le({workspacePath:e.workspacePath,contractPath:t,contract:n,now:e.now}),{contractPath:t,contract:n}}async function nt(e){let t=g__default.resolve(e.workspacePath),r=a$1(t,E),o=await d(t,E)??r,n=await de({workspacePath:t,now:e.now}),i=await h$1.pathExists(o)?await h$1.readJson(o):null,c=new Map((i?.projects||[]).map(f=>[f.slug,f])),d$1=new Set,u=[],l=[],s=[];for(let f of n.projects){let P=c.get(f.slug),y=H(P,f,d$1);P?y.changed&&l.push(f.slug):u.push(f.slug),s.push(y.project),c.delete(f.slug);}for(let f of c.values()){if(f.source)continue;let P=H(f,f,d$1);s.push(P.project);}let p={schemaVersion:R,kind:"rapidkit.workspace.contract",generatedAt:(e.now??new Date).toISOString(),workspace:{...i?.workspace||{},...n.workspace,name:n.workspace.name||i?.workspace?.name||g__default.basename(t)},projects:s.sort((f,P)=>f.slug.localeCompare(P.slug))},k=await me({workspacePath:t,contractPath:r,contract:p});if(e.strict&&k.status==="failed")throw new N(k);return await le({workspacePath:t,contractPath:r,contract:p,now:e.now}),{contractPath:r,contract:p,addedProjects:u,updatedProjects:l,verification:k}}async function ce(e){return await h$1.pathExists(e)?{exists:true,contents:await h$1.readFile(e)}:{exists:false}}async function ie(e,t){if(!t.exists){await h$1.remove(e);return}await h$1.outputFile(e,t.contents);}async function le(e){let{buildWorkspaceRegistrySummary:t,WORKSPACE_REGISTRY_SUMMARY_RELATIVE_PATH:r}=await import('./workspace-registry-summary-LJN4WHIZ.js'),o=await t(e.workspacePath,{now:e.now,contract:e.contract}),n=a$1(e.workspacePath,r),i=c=>{if(!c||typeof c!="object"||Array.isArray(c))return JSON.stringify(c);let{generatedAt:d,...u}=c;return JSON.stringify(u)};if(await h$1.pathExists(e.contractPath)&&await h$1.pathExists(n)){let[c,d]=await Promise.all([h$1.readJson(e.contractPath),h$1.readJson(n)]);if(i(c)===i(e.contract)&&i(d)===i(o))return}b(E,e.contract),b(r,o),await c$1(e.workspacePath,E,async()=>{let[c,d]=await Promise.all([ce(e.contractPath),ce(n)]);try{if(e.contractPath===a$1(e.workspacePath,E)?await e$1(e.workspacePath,E,e.contract):(await h$1.ensureDir(g__default.dirname(e.contractPath)),await h$1.writeJson(e.contractPath,e.contract,{spaces:2})),process.env.WORKSPAI_TEST_FAIL_WORKSPACE_REGISTRY_PUBLISH==="1")throw new Error("Injected workspace registry summary publication failure.");await e$1(e.workspacePath,r,o);}catch(u){let s=(await Promise.allSettled([ie(e.contractPath,c),ie(n,d)])).filter(p=>p.status==="rejected");throw s.length>0?new AggregateError([u,...s.map(p=>p.reason)],"Workspace contract publication failed and rollback was incomplete."):u}});}async function ue(e){let t=e.contractPath??(await d(e.workspacePath,E)||a$1(e.workspacePath,E)),r=await h$1.readJson(t);return {contractPath:t,contract:r}}var We={metadata:[".workspai/project.json",".workspai/context.json",".rapidkit/project.json",".rapidkit/context.json"],manifests:["package.json","package-lock.json","pnpm-lock.yaml","yarn.lock","pyproject.toml","poetry.lock","requirements.txt","go.mod","go.sum","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","Gemfile","composer.json"],entrypoints:["src/main.ts","src/index.ts","src/app.ts","src/main.js","src/index.js","main.py","app/main.py","manage.py","main.go","cmd/main.go","Program.cs"],apiSpecifications:["openapi.yaml","openapi.yml","openapi.json","swagger.yaml","swagger.yml","swagger.json"],infrastructure:["Dockerfile","docker-compose.yml","docker-compose.yaml","compose.yml","compose.yaml","k8s","kubernetes","terraform"],documentation:["README.md","ARCHITECTURE.md","CONTRIBUTING.md","docs"]};function Se(e,t){return t.externalPath?g__default.resolve(t.externalPath):g__default.resolve(e,t.relativePath)}async function Ae(e){let t={metadata:[],manifests:[],entrypoints:[],apiSpecifications:[],infrastructure:[],documentation:[]};for(let[r,o]of Object.entries(We))for(let n of o)await h$1.pathExists(g__default.join(e,n))&&t[r].push(n);try{let r=await h$1.readdir(e,{withFileTypes:true});for(let o of r)o.isFile()&&(o.name.endsWith(".csproj")||o.name.endsWith(".sln"))&&t.manifests.push(o.name),o.isFile()&&o.name.endsWith(".tf")&&t.infrastructure.push(o.name);}catch{}for(let r of Object.values(t))r.sort((o,n)=>o.localeCompare(n));return t}function A(e){return !e||typeof e!="object"||Array.isArray(e)?[]:Object.keys(e).sort((t,r)=>t.localeCompare(r))}async function Re(e){try{let t=await h$1.readJson(g__default.join(e,"package.json")),r={runtime:A(t.dependencies),development:A(t.devDependencies),peer:A(t.peerDependencies),optional:A(t.optionalDependencies)};return {...typeof t.name=="string"?{name:t.name}:{},...typeof t.version=="string"?{version:t.version}:{},...typeof t.private=="boolean"?{private:t.private}:{},scripts:A(t.scripts),dependencies:r,dependencyCount:new Set(Object.values(r).flat()).size}}catch{return}}async function xe(e){for(let t of [".env.example",".env.sample",".env.template"])try{return (await h$1.readFile(g__default.join(e,t),"utf8")).split(/\r?\n/).map(o=>o.trim()).filter(o=>o.length>0&&!o.startsWith("#")&&o.includes("=")).map(o=>o.slice(0,o.indexOf("=")).trim()).filter(o=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(o)).sort((o,n)=>o.localeCompare(n))}catch{}return []}function _e(e,t){try{let r=G(e);if(r.engine!=="unknown")return r;let o=h$1.pathExistsSync(g__default.join(e,"package.json"))?"npm":h$1.pathExistsSync(g__default.join(e,"pyproject.toml"))?"python":h$1.pathExistsSync(g__default.join(e,"requirements.txt"))?"pip":"unknown";return {...r,engine:o,runtime:t.runtime??r.runtime,framework:t.framework??r.framework,frameworkDisplayName:t.framework??r.frameworkDisplayName}}catch{return {schemaVersion:1,scope:"project",projectRoot:null,engine:"unknown",runtime:"unknown",runtimeCandidates:["unknown"],compositeRuntime:false,lifecycleCoverage:"complete",framework:"unknown",frameworkDisplayName:"Unknown",frameworkConfidence:"low",frameworkSupportTier:"observed",runtimeSupportTier:"observed",runtimeDoctorSupport:"observed",moduleSupport:false,fleetStages:[],localOnlyCommands:[],commandMap:{},supportedCommands:[],unsupportedCommands:[],globalCommands:[]}}}function Ge(e,t,r){let o=e.projects.map(n=>({id:n.slug,path:n.relativePath,runtime:n.runtime,framework:n.framework}));return {schemaVersion:"workspace-dependency-graph.v1",generatedAt:t,nodes:o,edges:[],stats:{nodeCount:o.length,edgeCount:0,inferredEdges:0,contractEdges:0,manualEdges:0,authoritativeEdges:0,lowConfidenceEdges:0,orphanCount:o.length,connectedNodeCount:0,density:0,edgeCoverageRatio:o.length===0?1:0,evidenceCoverageRatio:1,hotspotCount:0,hasCycle:false},diagnostics:[{code:"graph.enrichment.failed",severity:"warning",message:r,recommendation:"Review project manifests and graph overrides, then rerun workspace contract graph."}]}}async function at(e$1){let{contractPath:t,contract:r}=await ue(e$1),o=e$1.now??new Date,n=o.toISOString(),{buildWorkspaceModel:i,workspaceModelProjectTopology:c}=await import('./workspace-model-ZL6WCICX.js'),{hashWorkspaceModel:d}=await import('./workspace-model-hash-ZXYPIGCW.js'),u=await i({workspacePath:e$1.workspacePath,includeEvidence:false,now:o}),l=c(u)??Ge(r,n,"The canonical Workspace Model did not provide a project dependency topology."),s=new Map(l.nodes.map(a=>[a.id,a.operationalProfile])),{buildWorkspaceKnowledgeGraph:p}=await import('./workspace-knowledge-graph-SWCKDTPF.js'),k=await p({workspacePath:e$1.workspacePath,workspace:{name:u.workspace.name,...u.workspace.profile?{profile:u.workspace.profile}:{}},contract:r,projectTopology:l,now:o,projects:u.projects.map(a=>({id:a.name,path:a.path,...a.absolutePath?{absolutePath:a.absolutePath}:{},runtime:a.runtime,runtimeCandidates:a.runtimeCandidates,framework:a.framework,...a.kit?{kit:a.kit}:{}})),source:{kind:"workspace-model",artifact:e.model,hashAlgorithm:"sha256",hash:d(u)}}),f=await Promise.all(r.projects.map(async a=>{let m=Se(e$1.workspacePath,a),[_,v,ge]=await Promise.all([Ae(m),Re(m),xe(m)]),C=_e(m,a);return {id:a.slug,label:a.slug,relativePath:a.relativePath,source:a.source,relationship:a.relationship,externalPath:a.externalPath,runtime:a.runtime??C.runtime,framework:a.framework??C.framework,kit:a.kit,modules:a.modules,ports:a.ports,apis:a.contracts.apis,owns:a.contracts.owns,env:[...new Set([...a.contracts.env,...ge])].sort((fe,he)=>fe.localeCompare(he)),contracts:{owns:[...a.contracts.owns],apis:[...a.contracts.apis],publishes:[...a.contracts.publishes],consumes:[...a.contracts.consumes],dependsOn:[...a.contracts.dependsOn],env:[...a.contracts.env]},capabilities:{engine:C.engine,supportTier:C.frameworkSupportTier,runtimeSupportTier:C.runtimeSupportTier,doctorSupport:C.runtimeDoctorSupport,moduleSupport:C.moduleSupport,fleetStages:[...C.fleetStages],localOnlyCommands:[...C.localOnlyCommands],supportedCommands:[...C.supportedCommands]},files:_,...v?{package:v}:{},...s.get(a.slug)?{operationalProfile:s.get(a.slug)}:{}}})),P=new Set(f.map(a=>a.id)),y=new Map,w=[];for(let a of r.projects){for(let m of a.contracts.dependsOn||[])P.has(m)&&w.push({from:m,to:a.slug,type:"dependency",label:"dependsOn"});for(let m of a.contracts.publishes||[])y.has(m)||y.set(m,new Set),y.get(m)?.add(a.slug);}for(let a of r.projects)for(let m of a.contracts.consumes||[]){let _=y.get(m);if(_)for(let v of _)v!==a.slug&&w.push({from:v,to:a.slug,type:"event",label:m});}let x={schemaVersion:1,kind:"rapidkit.workspace.contract.graph",workspace:r.workspace,generatedAt:n,nodes:f.sort((a,m)=>a.id.localeCompare(m.id)),edges:w.sort((a,m)=>`${a.from}:${a.to}:${a.type}:${a.label}`.localeCompare(`${m.from}:${m.to}:${m.type}:${m.label}`)),dependencyGraph:l,knowledgeGraph:k,semantics:{legacyEdges:"producer-to-consumer",dependencyGraphEdges:"consumer-to-dependency"},summary:{projectCount:f.length,dependencyEdges:w.filter(a=>a.type==="dependency").length,eventEdges:w.filter(a=>a.type==="event").length,portCount:f.reduce((a,m)=>a+m.ports.length,0),apiCount:f.reduce((a,m)=>a+m.apis.length,0),relationshipEdges:l.stats.edgeCount,inferredEdges:l.stats.inferredEdges,authoritativeEdges:l.stats.authoritativeEdges,orphanProjects:l.stats.orphanCount,hotspotProjects:l.stats.hotspotCount,evidenceCoverageRatio:l.stats.evidenceCoverageRatio,edgeCoverageRatio:l.stats.edgeCoverageRatio,connectedProjects:l.stats.connectedNodeCount,lowConfidenceEdges:l.stats.lowConfidenceEdges,hasCycle:l.stats.hasCycle,manifestCount:f.reduce((a,m)=>a+m.files.manifests.length,0),entrypointCount:f.reduce((a,m)=>a+m.files.entrypoints.length,0),diagnostics:l.diagnostics?.length??0,relationshipKinds:Object.fromEntries(oe.map(a=>[a,l.edges.filter(m=>m.kind===a).length])),relationshipSources:Object.fromEntries(ne.map(a=>[a,l.edges.filter(m=>m.source===a).length])),entityCount:k.quality.entityCount,knowledgeRelations:k.quality.relationCount,proofCount:k.quality.proofCount,providerCount:k.providers.length,knowledgeUnknowns:k.quality.unknownCount}};return {contractPath:t,graph:x}}async function me(e){let t=e.contract?{contractPath:e.contractPath??a$1(e.workspacePath,E),contract:e.contract}:await ue(e),{contractPath:r,contract:o}=t,n=[],i=[];o.kind!=="rapidkit.workspace.contract"&&n.push("Contract kind must be rapidkit.workspace.contract."),o.schemaVersion!==R&&n.push(`Contract schemaVersion must be ${R}.`),o.workspace?.name||n.push("Contract workspace.name is required."),Array.isArray(o.projects)||n.push("Contract projects must be an array.");let c=new Set,d=new Map;for(let s of o.projects||[]){if(!s.slug){n.push("Every project must declare slug.");continue}c.has(s.slug)&&n.push(`Duplicate project slug: ${s.slug}.`),c.add(s.slug),s.relativePath?L(s.relativePath)||n.push(`Project ${s.slug} declares unsafe relativePath: ${s.relativePath}.`):n.push(`Project ${s.slug} must declare relativePath.`),s.externalPath&&(s.relationship==="adopted"||s.source==="adopted-local"||s.source==="local-folder"||s.source==="git-url"||n.push(`Project ${s.slug} declares externalPath without imported/adopted provenance.`),g__default.isAbsolute(s.externalPath)||n.push(`Project ${s.slug} declares non-absolute externalPath.`));for(let p of s.ports||[]){(!Number.isInteger(p.port)||p.port<1||p.port>65535)&&n.push(`Project ${s.slug} declares invalid port: ${p.port}.`);let k=d.get(p.port);k&&n.push(`Port ${p.port} is claimed by both ${k} and ${s.slug}.`),d.set(p.port,s.slug);}for(let p of s.contracts?.apis||[])(!p.name?.trim()||!p.basePath?.startsWith("/"))&&n.push(`Project ${s.slug} declares invalid API contract.`);for(let p of [...s.contracts?.publishes||[],...s.contracts?.consumes||[]])p.trim()||n.push(`Project ${s.slug} declares an empty event contract.`);for(let p of s.contracts?.env||[])/^[A-Z_][A-Z0-9_]*$/.test(p)||n.push(`Project ${s.slug} declares invalid env contract: ${p}.`);for(let p of s.contracts?.dependsOn||[])c.has(p);}for(let s of o.projects||[])for(let p of s.contracts?.dependsOn||[])c.has(p)||n.push(`Project ${s.slug} depends on unknown project: ${p}.`);i.push({id:"schema",status:o.kind==="rapidkit.workspace.contract"&&o.schemaVersion===R?"passed":"failed",message:"Contract schema and kind are valid."}),i.push({id:"projects",status:Array.isArray(o.projects)?"passed":"failed",message:`Contract declares ${Array.isArray(o.projects)?o.projects.length:0} project(s).`}),i.push({id:"ports",status:n.some(s=>s.toLowerCase().includes("port"))?"failed":"passed",message:"Project port declarations are valid and collision-free."}),i.push({id:"dependencies",status:n.some(s=>s.includes("depends on unknown project"))?"failed":"passed",message:"Project dependencies point to known project slugs."}),i.push({id:"contracts",status:n.some(s=>s.includes("unsafe relativePath")||s.includes("invalid API contract")||s.includes("event contract")||s.includes("env contract"))?"failed":"passed",message:"Project path, API, event, and env contracts are valid."});let u=await l(e.workspacePath);if(u.moduleCount>0){for(let s of u.issues)n.push(`${g__default.basename(s.projectRoot)}: ${s.message} (slug=${s.slug})`);i.push({id:"module-paths",status:u.status,message:u.status==="passed"?`All ${u.moduleCount} registered module(s) resolve under canonical paths.`:`${u.issues.length} registered module(s) missing canonical install paths.`});}else e.strict&&i.push({id:"module-paths",status:"passed",message:"No registry-backed modules declared in workspace projects."});return {status:n.length>0?"failed":"passed",contractPath:r,projectCount:Array.isArray(o.projects)?o.projects.length:0,checks:i,violations:n}}async function st(e){let t=g__default.resolve(e.workspacePath),r={schemaVersion:Pe,generatedAt:e.generatedAt??new Date().toISOString(),status:e.result.status,contractPath:e.result.contractPath,projectCount:e.result.projectCount,checks:e.result.checks,violations:e.result.violations};return e$1(t,we,ee(r))}
|
|
2
|
-
export{I as a,Ve as b,$e as c,ee as d,Me as e,oe as f,E as g,we as h,R as i,Pe as j,N as k,be as l,de as m,ot as n,nt as o,ue as p,at as q,me as r,st as s};
|
package/dist/chunk-QI3HG6IG.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import {g,b as b$1,i as i$1,d as d$1,e as e$1,f}from'./chunk-JD3A5QM6.js';import {c}from'./chunk-L22EABIC.js';import {c as c$1}from'./chunk-X7FYEKLI.js';import {d as d$2,b as b$2,a as a$1}from'./chunk-3RBUSW7H.js';import {a}from'./chunk-AFIFZTOY.js';import {d}from'./chunk-EWZZUQBR.js';import {h,e,i}from'./chunk-NZ3WZYD5.js';import {t,h as h$1,g as g$1}from'./chunk-MOSXTVPU.js';import ge from'crypto';import X from'fs';import k from'fs/promises';import p from'path';import {execa}from'execa';import U from'fs-extra';async function q(e,t){let[n,o]=await Promise.all([U.realpath(e).catch(()=>null),U.realpath(t).catch(()=>null)]);if(!n||!o)return null;let s=p.relative(n,o);return !s||p.isAbsolute(s)||s===".."||s.startsWith(`..${p.sep}`)?null:(await U.stat(o).catch(()=>null))?.isFile()?o:null}var be=h.projectContextAgent.schemaVersion,it=["managed","local","off"],ue="<!-- WORKSPAI:PROJECT-GROUNDING:START -->",me="<!-- WORKSPAI:PROJECT-GROUNDING:END -->";function ae(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}async function b(e){try{return JSON.parse(await k.readFile(e,"utf8"))}catch(t){return null}}function x(e){return e.replace(/\\/g,"/").replace(/^\.\/+/,"")}function L(e,t,n){let o=e.replace(/\\/g,"/"),s=/^[A-Za-z]:\//.test(o);if(!p.isAbsolute(e)&&!s)return x(o);if(s&&process.platform!=="win32")return null;let i=p.resolve(e),l=p.relative(n,i);if(l&&!l.startsWith("..")&&!p.isAbsolute(l))return x(l);let c=p.relative(t,i);return c&&!c.startsWith("..")&&!p.isAbsolute(c)?`workspace:${x(c)}`:null}function v(e,t,n){return [[n,"project:"],[n.replace(/\\/g,"/"),"project:"],[t,"workspace:"],[t.replace(/\\/g,"/"),"workspace:"]].reduce((s,[i,l])=>i.length>0?s.split(i).join(l):s,e)}function fe(e,t){return ae(e?.adoption)?.mode==="linked"?"adopted":ae(e?.import)?"imported":t}function ve(e){if(!e.model)return null;let t=x(e.relativePath);return e.model.projects.find(n=>n.name===e.projectName||x(n.path)===t)??null}function ie(e,t){e[t]=(e[t]??0)+1;}var Ae=["project","language","service","api","endpoint","schema","protocol","runtime-unit","lifecycle-stage","database","queue","container","deployment","pipeline","environment","test-suite","owner","decision","document","package","file","module","symbol"];function Ee(e,t=160){let n={language:32,api:32,service:32,endpoint:32,schema:32,protocol:32,"runtime-unit":32,"lifecycle-stage":32,file:8,module:8,symbol:8},o=[];for(let s of Ae){let i=e.filter(l=>l.kind===s).sort((l,c)=>l.label.localeCompare(c.label)||l.id.localeCompare(c.id)).slice(0,n[s]??32);for(let l of i){if(o.length>=t)return o;o.push(l);}}return o}function Ce(e,t){if(!e)return {entityCount:0,relationCount:0,proofCount:0,entitiesByKind:{},relationsByKind:{},languages:{},semantic:{protocolConceptCount:0,protocolImplementationBindings:0,equivalenceBindings:0,generationBindings:0,runtimeUnitCount:0,lifecycleStageCount:0,runtimeCoverage:[]},relatedProjects:[],proofArtifacts:[],entities:[],relations:[],proofs:[],topology:{status:"unavailable",dependencies:[],dependents:[]},diagnostics:[]};let n=e.entities.find(r=>r.kind==="project"&&(r.id===t||r.label===t||r.projectId===t)),o=new Set(e.entities.filter(r=>r.projectId===t||r.id===n?.id||r.kind==="project"&&r.label===t).map(r=>r.id));n&&o.add(n.id);let s=e.relations.filter(r=>o.has(r.from)||o.has(r.to)),i=new Set(o);for(let r of s)i.add(r.from),i.add(r.to);let l=e.entities.filter(r=>i.has(r.id)),c=new Set,g={},f={},d={},w=new Set(l.filter(r=>r.kind==="language").map(r=>r.attributes.language).filter(r=>typeof r=="string"));for(let r of l){ie(g,r.kind);let a=typeof r.attributes.language=="string"?r.attributes.language:void 0;if(a&&r.kind==="language")d[a]={fileCount:typeof r.attributes.fileCount=="number"?r.attributes.fileCount:0,symbolCount:d[a]?.symbolCount??0,generatedFileCount:typeof r.attributes.generatedFileCount=="number"?r.attributes.generatedFileCount:0};else if(a&&(r.kind==="file"||r.kind==="symbol")){let h=d[a]??{fileCount:0,symbolCount:0,generatedFileCount:0};r.kind==="file"&&!w.has(a)?(h.fileCount+=1,r.attributes.generated===true&&(h.generatedFileCount+=1)):r.kind==="symbol"&&(h.symbolCount+=1),d[a]=h;}for(let h of r.proofIds)c.add(h);}for(let r of s){ie(f,r.kind);for(let a of r.proofIds)c.add(a);}let y=e.proofs.filter(r=>c.has(r.id)),P=[...new Set(e.entities.filter(r=>i.has(r.id)&&r.projectId&&r.projectId!==t).map(r=>r.projectId))].sort(),m=e.diagnostics.filter(r=>r.entityIds?.some(a=>i.has(a))||r.relationIds?.some(a=>s.some(h=>h.id===a))).map(r=>({code:r.code,severity:r.severity,message:r.message,...r.recommendation?{recommendation:r.recommendation}:{}})),u=(r,a)=>({project:a,kind:r.kind,source:r.source,confidence:r.confidence,evidence:[...new Set(r.evidence.map(h=>h.file.replace(/\\/g,"/")))].sort()}),A=e.projectTopology.edges.filter(r=>r.from===t).map(r=>u(r,r.to)).sort((r,a)=>`${r.project}:${r.kind}`.localeCompare(`${a.project}:${a.kind}`)),C=e.projectTopology.edges.filter(r=>r.to===t).map(r=>u(r,r.from)).sort((r,a)=>`${r.project}:${r.kind}`.localeCompare(`${a.project}:${a.kind}`)),R=Ee(l),S=l.filter(r=>r.kind==="runtime-unit"),j=new Set(R.map(r=>r.id)),_=[...s].sort((r,a)=>{let h=Number(j.has(r.from)||j.has(r.to));return Number(j.has(a.from)||j.has(a.to))-h||r.id.localeCompare(a.id)}).slice(0,128),G=new Set([...R.flatMap(r=>r.proofIds),..._.flatMap(r=>r.proofIds)]);return {entityCount:l.length,relationCount:s.length,proofCount:y.length,entitiesByKind:g,relationsByKind:f,languages:Object.fromEntries(Object.entries(d).sort(([r],[a])=>r.localeCompare(a))),semantic:{protocolConceptCount:g.protocol??0,protocolImplementationBindings:f["implements-protocol"]??0,equivalenceBindings:f["equivalent-to"]??0,generationBindings:(f["generated-from"]??0)+(f["generated-by"]??0),runtimeUnitCount:S.length,lifecycleStageCount:g["lifecycle-stage"]??0,runtimeCoverage:[...new Set(S.map(r=>r.attributes.runtime).filter(r=>typeof r=="string"))].sort()},relatedProjects:P,proofArtifacts:[...new Set(y.map(r=>r.artifact))].sort(),entities:R,relations:_,proofs:y.filter(r=>G.has(r.id)).sort((r,a)=>r.id.localeCompare(a.id)).slice(0,128),topology:{status:A.length>0||C.length>0?"proven":e.projectTopology.nodes.some(r=>r.id===t)?"unproven":"unavailable",dependencies:A,dependents:C},diagnostics:m}}function he(e,t,n){return Array.isArray(e)?e.map(o=>typeof o=="string"?v(o,t,n):o):typeof e=="string"?v(e,t,n):e}function Re(e,t,n){return {id:e.id,kind:e.kind,label:v(e.label,t,n),attributes:Object.fromEntries(Object.entries(e.attributes).map(([o,s])=>[o,he(s,t,n)])),proofIds:[...e.proofIds].sort()}}function Te(e,t,n){let o=(...i)=>e.filter(l=>i.includes(l.kind)).map(l=>Re(l,t,n)).slice(0,32),s=[];for(let i of e){for(let[l,c]of Object.entries(i.attributes))if(/(?:^|[-_.])ports?(?:$|[-_.])/i.test(l)&&(s.push({entityId:i.id,label:v(i.label,t,n),attribute:l,value:he(c,t,n)}),s.length>=32))break;if(s.length>=32)break}return {services:o("service"),packages:o("package"),protocols:o("protocol"),runtimeUnits:o("runtime-unit"),lifecycleStages:o("lifecycle-stage"),apis:o("api"),endpoints:o("endpoint"),dataStores:o("database","queue"),deployments:o("container","deployment","environment"),pipelines:o("pipeline"),tests:o("test-suite"),owners:o("owner"),decisions:o("decision"),ports:s}}function Se(e,t,n){let o=L(e.artifact,t,n);return o?{id:e.id,provider:e.provider,artifact:o,...e.pointer?{pointer:v(e.pointer,t,n)}:{},...e.line!==void 0?{line:e.line}:{},derivation:e.derivation,trust:e.trust,confidence:e.confidence,freshness:e.freshness}:null}async function Ne(e,t,n){let o=[],s=await b(p.join(e,".workspai","reports","INDEX.json"));if(Array.isArray(s?.blockers))for(let d of s.blockers)typeof d=="string"&&(d.startsWith(`${n}:`)||d.includes(`project:${n}`)||d.includes(`project ${n}`))&&o.push({source:"workspace-report-index",severity:"error",message:v(d,e,t)});let i=await b(p.join(e,".workspai","reports","doctor-project-last-run.json")),l=await b(p.join(e,".workspai","reports","doctor-last-run.json")),c=l?.projects?.find(d=>d.name===n),f=[...i?.project&&(i.projectName===n||i.project.name===n)?[{generatedAt:i.generatedAt,project:i.project}]:[],...c?[{generatedAt:l?.generatedAt,project:c}]:[]].sort((d,w)=>{let y=typeof d.generatedAt=="string"&&Date.parse(d.generatedAt)||0;return (typeof w.generatedAt=="string"&&Date.parse(w.generatedAt)||0)-y})[0];if(f)for(let d of c$1({project:f.project}))o.push({source:"doctor-project",severity:d.status==="blocking"?"error":"warning",message:v(d.message,e,t),...d.id?{code:d.id}:{}});return [...new Map(o.map(d=>[`${d.source}:${d.code??""}:${d.message}`,d])).values()].slice(0,32)}function z(e,t=[]){return typeof e=="string"?/^[A-Za-z]:[\\/]/.test(e)||/(?:^|[\s("'`])[A-Za-z]:[\\/]/.test(e)||/(?:^|[\s("'`])\/(?:Users|home|private|var|opt|srv|mnt|Volumes|tmp)\//.test(e)||t.some(n=>n.length>0&&(e.includes(n)||e.includes(n.replace(/\\/g,"/")))):Array.isArray(e)?e.some(n=>z(n,t)):e&&typeof e=="object"?Object.values(e).some(n=>z(n,t)):false}function Ie(e){return ge.createHash("sha256").update(JSON.stringify(e)).digest("hex")}async function xe(e$1){let t$1=p.resolve(e$1.workspacePath),n=p.resolve(e$1.projectPath),o=t(n,"project.json").find(a=>X.existsSync(a)),s=o?await b(o):null,i$1=await b(p.join(t$1,".workspai","workspace.contract.json")),l=p.resolve(n),c=i$1?.projects?.find(a=>a.externalPath?p.resolve(a.externalPath)===l:!a.relativePath||a.relativePath.startsWith("external/")?false:p.resolve(t$1,a.relativePath)===l)??i$1?.projects?.find(a=>a.slug===e$1.projectName||a.slug===p.basename(n)),g=e$1.projectName??(typeof s?.name=="string"?s.name:void 0)??c?.slug??p.basename(n),f=c?.relativePath??(()=>{let a=x(p.relative(t$1,n));return !a||a.startsWith("..")?`external/${g}`:a})(),d$1=await b(p.join(t$1,e.model)),w=await b(p.join(t$1,e.knowledgeGraph)),y=d$1?d(d$1):void 0,P=!!(y&&w?.source.hash===y),m=ve({model:d$1,projectName:g,relativePath:f}),u=Ce(P?w:null,g),A=await Ne(t$1,n,g),C=u.proofs.map(a=>a.freshness),R=w?!P||C.includes("stale")?"stale":C.includes("unknown")?"unknown":"fresh":"missing",S=d$1?d$1.factFreshness?.status??"unknown":"missing",j=[...d$1?[]:[{code:"project.context.model-missing",severity:"warning",message:"The canonical Workspace Model has not been generated yet. Refresh workspace intelligence before relying on project topology."}],...d$1&&!m?[{code:"project.context.project-not-materialized",severity:"warning",message:"The project is registered in the workspace contract but is not present in the current Workspace Model."}]:[],...w?[]:[{code:"project.context.graph-missing",severity:"warning",message:"The Workspace Knowledge Graph has not been generated yet. Run the workspace intelligence loop to build proof-backed relationships."}],...w&&!P?[{code:"project.context.graph-model-mismatch",severity:"warning",message:"The persisted Knowledge Graph does not match the current Workspace Model and was excluded from this project lens."}]:[]],_=fe(s,e$1.relationship??c?.relationship??"managed"),G={schemaVersion:be,generatedAt:(e$1.now??new Date).toISOString(),workspace:{name:i$1?.workspace?.name??d$1?.workspace.name??p.basename(t$1),...i$1?.workspace?.profile||d$1?.workspace.profile?{profile:i$1?.workspace?.profile??d$1?.workspace.profile}:{},relationship:_,contract:`workspace:${i.workspaceContract}`,index:`workspace:${e.agentIndex}`,context:`workspace:${e.agentContext}`,skillsIndex:`workspace:${e.skillsIndex}`,boundedGraphSearch:`workspai workspace graph search <task-query> --scope project:${g} --limit 12 --json`,access:{localBinding:i.projectWorkspaceLink,canonicalEvidenceAvailableAtGeneration:true,identityIsFilesystemPath:false,resolverCommand:"workspai project workspace status --json",portableUriScheme:"workspace:",resolvedPathPolicy:"runtime-private-never-persist"}},project:{name:g,relativePath:f,...m?.kind?{kind:m.kind}:{},...m?.runtime||c?.runtime?{runtime:m?.runtime??c?.runtime}:{},...m?.runtimeCandidates?.length?{runtimeCandidates:[...m.runtimeCandidates].sort()}:{},...m?.framework||c?.framework?{framework:m?.framework??c?.framework}:{},...m?.kit||c?.kit?{kit:m?.kit??c?.kit}:{},...m?.supportTier?{supportTier:m.supportTier}:{},...m?.governance?{governance:m.governance}:{},commands:{supported:[...m?.commands.supported??[]].sort(),unsupported:[...m?.commands.unsupported??[]].sort(),fleetStages:[...m?.commands.fleetStages??[]].sort()},importantFiles:[...new Set((m?.importantFiles??[]).map(a=>L(a,t$1,n)).filter(a=>a!==null))].sort()},intelligence:{...d$1?.generatedAt?{modelGeneratedAt:d$1.generatedAt}:{},...w?.generatedAt?{graphGeneratedAt:w.generatedAt}:{},...w?.source.hash?{graphModelHash:w.source.hash}:{},entityCount:u.entityCount,relationCount:u.relationCount,proofCount:u.proofCount,entitiesByKind:u.entitiesByKind,relationsByKind:u.relationsByKind,languages:u.languages,semantic:u.semantic,relatedProjects:u.relatedProjects,freshness:{model:S,graph:R,graphMatchesModel:P},topology:{...u.topology,dependencies:u.topology.dependencies.map(a=>({...a,evidence:a.evidence.map(h=>L(h,t$1,n)).filter(h=>h!==null)})),dependents:u.topology.dependents.map(a=>({...a,evidence:a.evidence.map(h=>L(h,t$1,n)).filter(h=>h!==null)}))},surfaces:Te(u.entities,t$1,n),diagnostics:[...j,...u.diagnostics].map(a=>({...a,message:v(a.message,t$1,n),...a.recommendation?{recommendation:v(a.recommendation,t$1,n)}:{}}))},evidence:{readOrder:[b$1,".workspai/PROJECT-GROUNDING.md",i.projectContextAgent,"AGENTS.md","workspace:.workspai/goals/index.json",`workspace:${i.goalPackLastRun}`,"workspace:.workspai/reports/INDEX.json","workspace:.workspai/reports/workspace-context-agent.json","workspace:.workspai/reports/workspace-skills-index.json",`command:workspai workspace graph search <task-query> --scope project:${g} --limit 12 --json`],projectProofArtifacts:[...new Set(u.proofArtifacts.map(a=>L(a,t$1,n)).filter(a=>a!==null))],relations:u.relations.map(a=>({id:a.id,from:a.from,to:a.to,kind:a.kind,derivation:a.derivation,trust:a.trust,confidence:a.confidence,proofIds:[...a.proofIds].sort()})),proofs:u.proofs.map(a=>Se(a,t$1,n)).filter(a=>a!==null)},blockers:A,agentRouting:{enforcement:"required",mandatoryPreflight:{command:"workspai agent bootstrap --for-agent generic --strict --json",successCondition:"ready"},workspaceLocator:{command:"workspai project workspace status --json",successCondition:"resolved",outputClassification:"machine-local",persistence:"forbidden",disclosure:"forbidden",portableUriScheme:"workspace:"},workspaceEvidenceRequiredFor:["repository-analysis","architecture-analysis","change-impact","cross-project-change","contract-change","infrastructure-change","release-readiness"],requiredReadOrder:[b$1,"command:workspai agent bootstrap --for-agent generic --strict --json","command:workspai project workspace status --json",i.projectContextAgent,"workspace:.workspai/reports/INDEX.json","workspace:.workspai/reports/workspace-context-agent.json","workspace:.workspai/reports/workspace-skills-index.json",`command:workspai workspace graph search ${JSON.stringify(g)} --scope ${JSON.stringify(`project:${g}`)} --limit 12 --json`],degradedMode:{allowCompleteArchitectureClaims:false,requireDisclosure:true}},commands:{refresh:"workspai workspace intelligence run --for-agent generic --strict --json",verify:"workspai workspace verify --strict --json",graphSearch:`workspai workspace graph search ${JSON.stringify(g)} --scope ${JSON.stringify(`project:${g}`)} --limit 12 --json`,doctor:"workspai doctor project --json",workspaceStatus:"workspai project workspace status --json"}};if(z(G,[t$1,n]))throw new Error("Project context lens rejected a non-portable absolute path.");let r={...G,integrity:{algorithm:"sha256",...y?{modelHash:y}:{},payloadHash:Ie(G),portable:true,absolutePathsEmitted:false}};return a(r,"contracts/workspace-intelligence/project-context-agent.v1.json","Project context agent"),r}function We(e){let t=e.intelligence.relatedProjects.length>0?e.intelligence.relatedProjects.map(s=>`\`${s}\``).join(", "):"No proven cross-project relation is currently available.",n=e.intelligence.diagnostics.length>0?e.intelligence.diagnostics.slice(0,8).map(s=>`- **${s.severity} \xB7 ${s.code}:** ${s.message}`).join(`
|
|
2
|
-
`):"- No project-scoped graph diagnostic is currently recorded.",o=e.blockers.length>0?e.blockers.slice(0,12).map(s=>`- **${s.severity}${s.code?` \xB7 ${s.code}`:""}:** ${s.message}`).join(`
|
|
3
|
-
`):"- No current project-scoped blocker is recorded.";return `# Workspai project grounding
|
|
4
|
-
|
|
5
|
-
This project is adopted into the **${e.workspace.name}** Workspai workspace.
|
|
6
|
-
That value is the canonical workspace identity, not its filesystem path. Workspai
|
|
7
|
-
commands launched here resolve the machine-local workspace automatically.
|
|
8
|
-
|
|
9
|
-
## Mandatory first contact
|
|
10
|
-
|
|
11
|
-
Do not begin broad repository discovery, architecture claims, planning, or mutation
|
|
12
|
-
until this sequence is complete:
|
|
13
|
-
|
|
14
|
-
1. Read \`.workspai/agent-entry.v1.json\` to discover the portable protocol.
|
|
15
|
-
2. Run \`workspai agent bootstrap --for-agent generic --strict --json\`.
|
|
16
|
-
3. Follow the receipt's \`requiredReadOrder\` exactly.
|
|
17
|
-
4. Read \`.workspai/reports/project-context-agent.json\`.
|
|
18
|
-
5. If the receipt reports an active Goal, read its immutable Goal Pack and agent
|
|
19
|
-
handoff before choosing or expanding work.
|
|
20
|
-
6. Read the compact workspace Skills index and load only a matching playbook.
|
|
21
|
-
7. Query the bounded Workspace Graph with the user's actual task before opening broad
|
|
22
|
-
source, then inspect only returned proof paths and targeted live files.
|
|
23
|
-
|
|
24
|
-
Receipt policy:
|
|
25
|
-
|
|
26
|
-
- \`ready\`: continue with bounded evidence and targeted source inspection.
|
|
27
|
-
- \`degraded\`: disclose the limitation and do not claim complete architecture or verification.
|
|
28
|
-
- \`blocked\`: stop governed claims, execute \`nextActions\`, and rerun bootstrap.
|
|
29
|
-
|
|
30
|
-
## Workspace location and portable paths
|
|
31
|
-
|
|
32
|
-
- \`${e.workspace.name}\` is an identity, not a directory name to guess.
|
|
33
|
-
- Project-local paths begin with \`.workspai/\`.
|
|
34
|
-
- Canonical workspace paths begin with \`workspace:\`.
|
|
35
|
-
- Resolve the exact local workspace root only when direct file access is necessary by
|
|
36
|
-
running \`workspai project workspace status --json\` from this project.
|
|
37
|
-
- The resolver's absolute paths are machine-local runtime data. Never persist or copy
|
|
38
|
-
them into answers, shared logs, commits, prompts, telemetry, or portable artifacts.
|
|
39
|
-
|
|
40
|
-
## Authority boundary
|
|
41
|
-
|
|
42
|
-
The Workspace Model owns canonical project identity and its compact \`projectTopology\`.
|
|
43
|
-
The Workspace Knowledge Graph is a separate, proof-backed enrichment containing
|
|
44
|
-
files, symbols, APIs, infrastructure, tests, owners, and decisions. Do not treat
|
|
45
|
-
an unproven topology edge as proof that two projects are independent. Live source owns
|
|
46
|
-
exact implementation. CLI evidence owns Goal, readiness, repair, and verification claims.
|
|
47
|
-
Repository-authored instructions remain authoritative for source changes after this
|
|
48
|
-
entry gate; Workspai preserves rather than replaces them.
|
|
49
|
-
|
|
50
|
-
## Project
|
|
51
|
-
|
|
52
|
-
- Name: \`${e.project.name}\`
|
|
53
|
-
- Workspace-relative identity: \`${e.project.relativePath}\`
|
|
54
|
-
- Runtime: \`${e.project.runtime??"unknown"}\`
|
|
55
|
-
- Framework: \`${e.project.framework??"unknown"}\`
|
|
56
|
-
- Relationship: \`${e.workspace.relationship}\`
|
|
57
|
-
- Related projects: ${t}
|
|
58
|
-
- Topology status: \`${e.intelligence.topology.status}\`
|
|
59
|
-
- Model freshness: \`${e.intelligence.freshness.model}\`
|
|
60
|
-
- Knowledge Graph freshness: \`${e.intelligence.freshness.graph}\`
|
|
61
|
-
|
|
62
|
-
## Current evidence coverage
|
|
63
|
-
|
|
64
|
-
- Project-scoped entities: ${e.intelligence.entityCount}
|
|
65
|
-
- Project-scoped relations: ${e.intelligence.relationCount}
|
|
66
|
-
- Portable proofs: ${e.intelligence.proofCount}
|
|
67
|
-
|
|
68
|
-
${n}
|
|
69
|
-
|
|
70
|
-
## Current project blockers
|
|
71
|
-
|
|
72
|
-
${o}
|
|
73
|
-
|
|
74
|
-
## Safe commands from this project
|
|
75
|
-
|
|
76
|
-
\`\`\`bash
|
|
77
|
-
${e.commands.workspaceStatus}
|
|
78
|
-
${e.commands.doctor}
|
|
79
|
-
${e.commands.graphSearch}
|
|
80
|
-
${e.commands.verify}
|
|
81
|
-
\`\`\`
|
|
82
|
-
|
|
83
|
-
The machine-local workspace binding lives only in
|
|
84
|
-
\`.workspai/workspace-link.local.json\`, which is gitignored. Portable grounding files
|
|
85
|
-
never publish its value.
|
|
86
|
-
`}function Ge(e){return `# Workspai agent entry gate (mandatory)
|
|
87
|
-
|
|
88
|
-
- Project: \`${e.project.name}\`
|
|
89
|
-
- Workspace identity: \`${e.workspace.name}\` (logical name, not a filesystem path)
|
|
90
|
-
- Entry contract: \`.workspai/agent-entry.v1.json\`
|
|
91
|
-
|
|
92
|
-
Before broad repository discovery, architecture claims, planning, or mutation:
|
|
93
|
-
|
|
94
|
-
1. Read \`.workspai/agent-entry.v1.json\`.
|
|
95
|
-
2. Run \`workspai agent bootstrap --for-agent generic --strict --json\`.
|
|
96
|
-
3. Follow the receipt's \`requiredReadOrder\` exactly.
|
|
97
|
-
4. If a Goal is active, read its immutable Goal Pack and handoff before acting.
|
|
98
|
-
5. Read the compact workspace Skills index and load only a matching playbook.
|
|
99
|
-
6. Query the bounded Workspace Graph with the user's task, then inspect only returned proofs and targeted live source.
|
|
100
|
-
|
|
101
|
-
Receipt policy: \`ready\` may proceed; \`degraded\` must disclose limitations and may not claim complete architecture or verification; \`blocked\` must stop governed claims, execute \`nextActions\`, and rerun bootstrap.
|
|
102
|
-
|
|
103
|
-
\`workspace:\` paths belong to the canonical workspace, not this project's \`.workspai\` directory. Resolve their machine-local root at runtime with \`workspai project workspace status --json\`. That output is machine-local: never copy it into answers, shared logs, commits, or portable artifacts.
|
|
104
|
-
|
|
105
|
-
Authority: Workspai evidence owns identity, topology, goals, readiness, and verification. Live source and repository-authored rules own exact implementation and source conventions.`}function ce(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function V(e,t){return new RegExp(`${ce(e)}[\\s\\S]*?${ce(t)}`,"m")}function ke(e){let t=e.replace(V(ue,me),"");return d$2(t)?.includes("# Workspai project boundary")&&(t=t.replace(V(a$1,b$2),"")),t.replace(/\n{3,}/g,`
|
|
106
|
-
|
|
107
|
-
`).trim()}function $e(e,t){let n=ke(e),o=`${ue}
|
|
108
|
-
${t.trim()}
|
|
109
|
-
${me}`;return n?`${o}
|
|
110
|
-
|
|
111
|
-
${n}
|
|
112
|
-
`:`${o}
|
|
113
|
-
`}async function W(e,t){await k.mkdir(p.dirname(e),{recursive:true});let n=`${e}.${process.pid}.${ge.randomUUID()}.tmp`;try{await k.writeFile(n,t,"utf8");try{await k.rename(n,e);}catch(o){let s=o.code;if(s!=="EEXIST"&&s!=="EPERM")throw o;await U.move(n,e,{overwrite:true});}}finally{await k.rm(n,{force:true}).catch(()=>{});}}async function we(e,t){let n;try{n=await execa("git",["rev-parse","--show-toplevel"],{cwd:e,reject:false});}catch{return false}if(n?.exitCode!==0)return false;let o=n.stdout.trim();if(!o)return false;let s,i;try{[s,i]=await Promise.all([k.realpath(p.resolve(o)),k.realpath(e)]);}catch{return false}let l=p.resolve(i,t),c=p.relative(s,l).replace(/\\/g,"/");if(!c||p.isAbsolute(c)||c===".."||c.startsWith("../"))return false;let g;try{g=await execa("git",["cat-file","-e",`HEAD:${c}`],{cwd:s,reject:false});}catch{return false}if(g?.exitCode!==0)return false;let f;try{f=await execa("git",["ls-files","--deleted","--error-unmatch","--",`:(top)${c}`],{cwd:s,reject:false});}catch{return false}return f?.exitCode===0}async function le(e,t){let n=p.join(e,".gitignore"),o=await k.readFile(n,"utf8").catch(c=>{if(c.code==="ENOENT")return "";throw c}),s=[g$1,h$1,b$1],i=o.split(/\r?\n/).filter(c=>c.trim()!=="# Workspai local project grounding"&&!s.includes(c.trim()));for(;i.length>0&&i[i.length-1]==="";)i.pop();t==="local"&&(i.length>0&&i.push(""),i.push("# Workspai local project grounding",...s));let l=i.length>0?`${i.join(`
|
|
114
|
-
`)}
|
|
115
|
-
`:"";l!==o&&await W(n,l);}var O=[{host:"claude",relativePath:"CLAUDE.md",importFromAgents:"@AGENTS.md",importFromGrounding:"@.workspai/PROJECT-GROUNDING.md"},{host:"gemini",relativePath:"GEMINI.md",importFromAgents:"@./AGENTS.md",importFromGrounding:"@./.workspai/PROJECT-GROUNDING.md"},{host:"qwen",relativePath:"QWEN.md",importFromAgents:"@AGENTS.md",importFromGrounding:"@.workspai/PROJECT-GROUNDING.md"},{host:"amazon-q",relativePath:".amazonq/rules/workspai-agent-entry.md",importFromAgents:"",importFromGrounding:""}];if(O.length!==g.length||O.some((e,t)=>e.relativePath!==g[t]))throw new Error("Project agent adapter paths must match the portable entry contract.");async function Le(e,t){let n=t.split("/").slice(0,-1),o=e;for(let s of n){o=p.join(o,s);let i=await k.lstat(o).catch(l=>{if(l.code==="ENOENT")return null;throw l});if(!i)return null;if(i.isSymbolicLink()||!i.isDirectory())return p.relative(e,o).split(p.sep).join("/")}return null}function Oe(e){let t=e.agentsAvailable?e.adapter.importFromAgents:e.adapter.importFromGrounding;return t?`${t}
|
|
116
|
-
|
|
117
|
-
# Workspai host binding \xB7 ${e.adapter.host}
|
|
118
|
-
|
|
119
|
-
The imported Workspai entry gate is mandatory. Validate this host with
|
|
120
|
-
\`workspai agent bootstrap --for-agent ${e.adapter.host} --strict --json\`, then follow
|
|
121
|
-
the receipt's \`requiredReadOrder\`, Goal handoff, bounded Graph queries, proof paths,
|
|
122
|
-
status policy, workspace locator privacy policy, and authority boundary. Do not repeat
|
|
123
|
-
the imported instructions or replace repository-authored source rules.`:`# Workspai entry for ${e.adapter.host}
|
|
124
|
-
|
|
125
|
-
Before broad repository discovery, architecture claims, planning, or mutation:
|
|
126
|
-
|
|
127
|
-
1. Read \`.workspai/agent-entry.v1.json\`.
|
|
128
|
-
2. Run \`workspai agent bootstrap --for-agent ${e.adapter.host} --strict --json\`.
|
|
129
|
-
3. Follow \`requiredReadOrder\`, any active Goal handoff, bounded Graph queries, and returned proof paths.
|
|
130
|
-
|
|
131
|
-
Receipt policy: \`ready\` may proceed; \`degraded\` must disclose limitations; \`blocked\` must execute \`nextActions\` and rerun bootstrap before governed claims.
|
|
132
|
-
|
|
133
|
-
The workspace name is a logical identity, not a path. Resolve \`workspace:\` URIs at runtime with \`workspai project workspace status --json\`; its absolute paths are machine-local and must never be copied into shared output or portable artifacts. Live source owns exact implementation; Workspai evidence owns identity, topology, goals, readiness, and verification. Repository-authored rules remain authoritative for source changes after this entry gate.`}async function de(e){let t=await Le(e.projectPath,e.adapter.relativePath);if(t)return {reason:`${e.adapter.relativePath} has an unsafe repository-authored parent at ${t}.`};let n=p.join(e.projectPath,e.adapter.relativePath),o=n,s=await k.lstat(n).catch(d=>{if(d.code==="ENOENT")return null;throw d});if(s?.isSymbolicLink()){let d=await q(e.projectPath,n);if(!d)return {reason:`${e.adapter.relativePath} is a symbolic link without a safe repository-local file target.`};if((await k.readFile(d,"utf8")).includes(d$1))return {path:e.adapter.relativePath};o=d;}let i=s?.isFile()===true,l=await k.readFile(o,"utf8").catch(d=>{if(d.code==="ENOENT")return "";throw d});if(e.mode==="managed"&&!i&&await we(e.projectPath,e.adapter.relativePath))return {reason:`${e.adapter.relativePath} has an authored tracked deletion.`};let c=l.replace(V(d$1,e$1),"").replace(/\n{3,}/g,`
|
|
134
|
-
|
|
135
|
-
`).trim(),g=e.mode==="managed"?[c,`${d$1}
|
|
136
|
-
${Oe(e).trim()}
|
|
137
|
-
${e$1}`].filter(Boolean).join(`
|
|
138
|
-
|
|
139
|
-
`):c;if(!g)return i&&!s?.isSymbolicLink()&&await k.rm(o,{force:true}),{};let f=`${g.trimEnd()}
|
|
140
|
-
`;return f!==l&&await W(o,f),e.mode==="managed"?{path:e.adapter.relativePath}:{}}function _e(e){let t={id:"generic",discovery:"portable-fallback",entryFiles:[g$1],status:"ready",managed:e.mode==="managed"},o=["codex","kimi","grok","copilot","cursor","windsurf"].map(l=>({id:l,discovery:"native",entryFiles:["AGENTS.md"],status:e.agentsAvailable?"ready":"blocked",managed:e.mode==="managed"&&e.agentsAvailable,...e.agentsAvailable?{}:{reason:"AGENTS.md could not be managed without overriding authored repository state."}})),s=O.map(l=>{let c=e.adapters.get(l.host);return {id:l.host,discovery:"adapter",entryFiles:[l.relativePath],status:c?.path?"ready":e.mode==="managed"?"blocked":"degraded",managed:!!c?.path,...c?.path?{}:{reason:c?.reason??"Provider adapter generation is disabled by the project grounding policy."}}}),i=[t,...o,...s];return f.map(l=>i.find(c=>c.id===l))}async function pe(e,t,n){let o=p.join(e,"AGENTS.md"),s=await k.lstat(o).catch(d=>{if(d.code==="ENOENT")return null;throw d}),i=s?.isSymbolicLink()?await q(e,o):o;if(!i)return;let l=s?.isFile()===true||s?.isSymbolicLink()===true,c=await k.readFile(i,"utf8").catch(d=>{if(d.code==="ENOENT")return "";throw d});if(t==="managed"&&!n)throw new Error("Managed project grounding requires a project context.");if(t==="managed"&&!l&&await we(e,"AGENTS.md"))return;let g=t==="managed"&&n?$e(c,Ge(n)):ke(c);if(!g){l&&!s?.isSymbolicLink()&&await k.rm(i,{force:true});return}let f=`${g.trimEnd()}
|
|
141
|
-
`;return f!==c&&await W(i,f),t==="managed"?o:void 0}async function Fe(e){let t$1=e.mode??"managed",n=p.resolve(e.workspacePath),o=p.resolve(e.projectPath);if(t$1==="off"){let u=t(o,"project.json").find(j=>X.existsSync(j)),A=u?await b(u):null,C=e.projectName??(typeof A?.name=="string"?A.name:void 0)??p.basename(o),R=fe(A,e.relationship??"managed"),S=await c({workspacePath:n,projectPath:o,projectName:C,relationship:R,now:e.now});return await le(o,t$1),await pe(o,t$1),await Promise.all(O.map(j=>de({projectPath:o,adapter:j,mode:t$1,agentsAvailable:false}))),await Promise.all([k.rm(p.join(o,h$1),{force:true}),k.rm(p.join(o,g$1),{force:true}),k.rm(p.join(o,b$1),{force:true})]),{mode:t$1,projectPath:o,linkPath:S.linkPath,writtenFiles:[i.projectWorkspaceLink]}}let s=await xe(e),i$2=s.workspace.relationship,l=await c({workspacePath:n,projectPath:o,projectName:s.project.name,relationship:i$2,workspaceName:s.workspace.name,relativePath:s.project.relativePath,now:e.now});await le(o,t$1);let c$1=await pe(o,t$1,s),g=new Map;for(let u of O)g.set(u.host,await de({projectPath:o,adapter:u,mode:t$1,agentsAvailable:!!c$1}));let f=_e({mode:t$1,agentsAvailable:!!c$1,adapters:g}),d=p.join(o,h$1),w=p.join(o,g$1),y=p.join(o,b$1),P=i$1({context:s,hosts:f});await W(d,`${JSON.stringify(s,null,2)}
|
|
142
|
-
`),await W(w,`${We(s).trimEnd()}
|
|
143
|
-
`),await W(y,`${JSON.stringify(P,null,2)}
|
|
144
|
-
`);let m=[i.projectWorkspaceLink,h$1,g$1,b$1];c$1&&m.push("AGENTS.md");for(let u of g.values())u.path&&m.push(u.path);return {mode:t$1,projectPath:o,linkPath:l.linkPath,groundingPath:w,contextPath:d,agentEntryPath:y,agentsPath:c$1,hostCoverage:f,writtenFiles:m}}async function ct(e){let t=p.resolve(e.workspacePath),n=e.mode??"managed",o=await Ke(t),s=[],i=[];for(let l of o.resolved)try{s.push(await Fe({workspacePath:t,projectPath:l.projectPath,projectName:l.name,relationship:l.relationship,mode:n,now:e.now}));}catch(c){i.push({name:l.name,reason:c instanceof Error?c.message:String(c)});}return {workspacePath:t,mode:n,projects:s,skipped:[...o.skipped,...i]}}async function Ke(e){let t=p.resolve(e),n=await b(p.join(t,".workspai","workspace.contract.json")),o=[],s=[];for(let i of n?.projects??[]){let l=i.slug??i.relativePath??"unknown-project",c=typeof i.externalPath=="string"?p.resolve(i.externalPath):typeof i.relativePath=="string"&&!i.relativePath.startsWith("external/")?p.resolve(t,i.relativePath):null;if(!c||!X.existsSync(c)){s.push({name:l,reason:"project path is unavailable on this machine"});continue}o.push({name:l,projectPath:c,relationship:i.relationship??"managed"});}return {resolved:o,skipped:s}}export{q as a,be as b,it as c,ue as d,me as e,xe as f,Fe as g,ct as h,Ke as i};
|
package/dist/chunk-SWGSFLTC.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {i}from'./chunk-NZ3WZYD5.js';import {t}from'./chunk-MOSXTVPU.js';import l from'path';import u from'fs-extra';import {parse}from'yaml';import w from'fs';var N=new Set(["backend","desktop","extension","service","frontend","worker","platform","library","infra","docs","test-suite","unknown"]),R=new Set([".git",".workspai","vendor","node_modules","test","tests","testdata","fixtures","samples","examples","third_party"]),W=new Set([...R,".cache",".venv","build","dist","target"]);async function T(e){let r=0,t=async(n,a)=>{if(a>5)return false;let c;try{c=await u.readdir(n,{withFileTypes:true});}catch{return false}for(let d of c.sort((f,i)=>f.name.localeCompare(i.name))){if(d.isFile()&&d.name==="main.go"){let f=await u.readFile(l.join(n,d.name),"utf8").catch(()=>"");if(/^\s*package\s+main\b/m.test(f)&&(r+=1,r>1))return true}if(d.isDirectory()&&!R.has(d.name)&&await t(l.join(n,d.name),a+1))return true}return false};return t(e,0)}async function G(e,r){if(r!=="c"&&r!=="cpp")return false;let t=new Set,n=async(a,c)=>{if(c>3||t.size>=3)return;let d;try{d=await u.readdir(a,{withFileTypes:true});}catch{return}for(let f of d)if(f.isFile()){let i=f.name.toLowerCase();i==="cmakelists.txt"||i==="meson.build"?t.add("native"):i==="pyproject.toml"||i==="setup.py"?t.add("python"):i==="description"&&l.basename(a).toLowerCase()==="r"?t.add("r"):i.endsWith(".gemspec")?t.add("ruby"):i==="pom.xml"||i==="build.gradle"||i==="build.gradle.kts"?t.add("java"):i==="cargo.toml"?t.add("rust"):i==="go.mod"?t.add("go"):i==="package.json"&&t.add("node");}else f.isDirectory()&&!W.has(f.name)&&await n(l.join(a,f.name),c+1);};return await n(e,0),t.has("native")&&t.size>=3}async function I(e){if((((await u.readFile(l.join(e,"pom.xml"),"utf8").catch(()=>"")).match(/<modules\b[^>]*>([\s\S]*?)<\/modules>/iu)?.[1]??"").match(/<module\b[^>]*>[^<]+<\/module>/giu)??[]).length>=2)return true;for(let n of ["settings.gradle","settings.gradle.kts"]){let a=await u.readFile(l.join(e,n),"utf8").catch(()=>"");if(!a)continue;if(new Set([...a.matchAll(/['"](:[^'"]+)['"]/gu)].map(d=>d[1])).size>=2)return true}return false}async function F(e){for(let r of ["compose.yaml","compose.yml","docker-compose.yaml","docker-compose.yml"]){let t=await u.readFile(l.join(e,r),"utf8").catch(()=>"");if(t)try{let a=parse(t)?.services??{},c=Object.entries(a).map(([s,o])=>{let m=(()=>{if(typeof o?.build=="string")return `${o.build}|Dockerfile`;if(!o?.build||typeof o.build!="object")return null;let p=o.build.context;if(typeof p!="string"||p.length===0)return null;let b="dockerfile"in o.build&&typeof o.build.dockerfile=="string"?o.build.dockerfile:"Dockerfile";return `${p}|${b}`})();return m?{serviceName:s,service:o,identity:m.replaceAll("\\","/").replace(/\/$/,"")}:null}).filter(s=>s!==null);if(new Set(c.map(s=>s.identity)).size<2)continue;let f=new Set(c.map(s=>s.serviceName)),i=new Set(c.filter(({service:s})=>Array.isArray(s.ports)&&s.ports.length>0).map(({identity:s})=>s)),k=c.some(({service:s})=>(Array.isArray(s.depends_on)?s.depends_on:s.depends_on&&typeof s.depends_on=="object"?Object.keys(s.depends_on):[]).some(m=>typeof m=="string"&&f.has(m)));if(i.size>=2||k)return true}catch{}}return false}async function P(e){try{if(!await u.pathExists(e))return null;let r=await u.readJSON(e);return r&&typeof r=="object"?r:null}catch{return null}}async function L(e){for(let r of e){let t=await P(r);if(t)return t}return null}function h(e){if(typeof e!="string")return null;let r=e.trim().toLowerCase();return N.has(r)?r==="service"?"backend":r:null}function X(e){switch(e){case "backend":case "service":case "worker":return "backend";case "frontend":case "desktop":case "extension":case "library":case "platform":return e;case "infra":return "infrastructure";case "docs":return "documentation";case "test-suite":return "quality";default:return "unknown"}}async function Q(e,r,t$1={}){let n=r??await L(t(e,"project.json")),a=h(n?.kind)??h(n?.type);if(a)return a;let c=typeof n?.kit_name=="string"?n.kit_name:typeof n?.kit=="string"?n.kit:t$1.kit,d=typeof n?.framework=="string"?n.framework:t$1.framework,f=typeof n?.runtime=="string"?n.runtime:t$1.runtime,i=`${typeof c=="string"?c:""} ${d??""} ${f??""}`.trim().toLowerCase();if(await F(e))return "platform";if(/\b(tauri|electron|wails|desktop)\b/.test(i))return "desktop";if(/\b(vscode-extension|visual studio code extension|jetbrains-plugin|browser-extension)\b/.test(i))return "extension";if(/\b(frontend|nextjs|next\.js|react|vue|svelte|vite|angular|astro|remix|nuxt)\b/.test(i))return "frontend";if(/\b(fastapi|nestjs|springboot|spring boot|gofiber|gogin|webapi|django|flask|express|fastify|laravel|rails|phoenix|axum|actix|rocket)\b/.test(i))return "backend";let k=await u.readFile(l.join(e,"Cargo.toml"),"utf8").catch(()=>""),s=/^\s*\[workspace\]\s*$/m.test(k)&&!/^\s*\[package\]\s*$/m.test(k),o=await P(l.join(e,"package.json"));if(o){let p={...o.dependencies??{},...o.devDependencies??{}},b=o.scripts??{},y=Object.values(b).filter(g=>typeof g=="string").join(" ").toLowerCase(),S=o.engines??{},C=Array.isArray(o.categories)?o.categories.filter(g=>typeof g=="string"):[],A=Array.isArray(o.workspaces)||o.workspaces!==null&&typeof o.workspaces=="object";if(p["@tauri-apps/api"]||p["@tauri-apps/cli"]||await u.pathExists(l.join(e,"src-tauri","tauri.conf.json"))||await u.pathExists(l.join(e,"src-tauri","tauri.conf.json5"))||p.electron||p["@electron-forge/cli"]||y.includes("electron-forge")||y.includes("electron "))return "desktop";if(typeof S.vscode=="string"||C.some(g=>g.toLowerCase()==="extension packs")||o.publisher&&(o.activationEvents||o.contributes))return "extension";if(p.next||p.react||p.vue||p.svelte||p.vite||p["@angular/core"]||y.includes("next ")||y.includes("vite "))return "frontend";if(A||s)return "platform";if(o.private===true&&!p.express&&!p["@nestjs/core"])return "library"}return s||await I(e)||await u.pathExists(l.join(e,"go.work"))||await u.pathExists(l.join(e,"go.mod"))&&await T(e)?"platform":await G(e,f)?"library":await u.pathExists(l.join(e,"Dockerfile"))||await u.pathExists(l.join(e,"compose.yaml"))||await u.pathExists(l.join(e,"compose.yml"))||await u.pathExists(l.join(e,"docker-compose.yml"))||await u.pathExists(l.join(e,"docker-compose.yaml"))||await u.pathExists(l.join(e,"terraform.tf"))?"infra":"backend"}var K={ci:[".github/workflows",".gitlab-ci.yml",".circleci/config.yml","azure-pipelines.yml","bitbucket-pipelines.yml","cloudbuild.yaml","Jenkinsfile",".buildkite/pipeline.yml","prow"],release:[".changeset",".releaserc",".releaserc.json","release.config.js",".goreleaser.yml",".goreleaser.yaml","RELEASING.md","RELEASE.md","tools/release","scripts/release","docs/release","doc/release","build/release.sh","hack/lib/release.sh"],ownership:[".github/CODEOWNERS","CODEOWNERS","OWNERS","OWNERS_ALIASES","MAINTAINERS"]},M=/(?:^|[-_.])(?:release|publish|publishing|distribution)(?:[-_.]|$)/i,$={ci:/\b(?:prow|buildkite|jenkins|teamcity|travis|external ci|test-infra)\b/i,release:/\b(?:release automation|release engineering|release infrastructure|external release)\b/i,ownership:/\b(?:external ownership|central owners|maintainer team|code owners)\b/i};async function z(e,r){let t=[];for(let n of r)try{await w.promises.access(l.join(e,n),w.constants.F_OK),t.push(n);}catch{}return t}async function B(e,r){let t=["README.md","CONTRIBUTING.md","DEVELOPMENT.md","docs/devel/README.md"],n=[];for(let a of t)try{let c=l.join(e,a),d=await w.promises.stat(c);if(!d.isFile()||d.size>1024*1024)continue;let f=await w.promises.readFile(c,"utf8");r.test(f)&&n.push(a);}catch{}return n}async function J(e){let r=l.join(e,".github","workflows");try{return (await w.promises.readdir(r,{withFileTypes:true})).filter(n=>n.isFile()&&/\.(?:ya?ml)$/i.test(n.name)&&M.test(n.name)).map(n=>`.github/workflows/${n.name}`).sort()}catch{return []}}function V(e,r){let t=e?.[r];return t?.mode?{status:t.mode==="external"?"external-declared":"repository",provider:t.provider?.trim()||null,evidence:[i.workspaceContract],reference:t.reference?.trim()||null}:null}async function v(e,r,t){let n=V(r,t);if(n)return n;let a=[...await z(e,K[t]),...t==="release"?await J(e):[]];if(a.length>0)return {status:"repository",provider:null,evidence:a,reference:null};let c=await B(e,$[t]);return c.length>0?{status:"external-observed",provider:null,evidence:c,reference:null}:{status:"unknown",provider:null,evidence:[],reference:null}}async function oe(e){let[r,t,n]=await Promise.all([v(e.projectPath,e.declaration,"ci"),v(e.projectPath,e.declaration,"release"),v(e.projectPath,e.declaration,"ownership")]);return {schemaVersion:"workspai.project-governance.v1",ci:r,release:t,ownership:n}}export{X as a,Q as b,oe as c};
|
package/dist/chunk-THIOE2PB.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import d from'crypto';import {constants}from'fs';import a from'fs/promises';import n from'path';var E="workspai.lifecycle-transaction",L=1,b="manifest.json",O="lifecycle-transaction-";async function p(r){try{return await a.lstat(r)}catch(e){if(e.code==="ENOENT")return null;throw e}}function k(r){let e=r?.code;return process.platform==="win32"&&(e==="EPERM"||e==="EINVAL"||e==="ENOSYS")}async function v(r){try{await r.sync();}catch(e){if(!k(e))throw e}}function j(r){if(typeof r!="string"||!n.isAbsolute(r))throw new Error("Lifecycle transaction journal contains a non-absolute target path.")}function A(r){if(typeof r!="string"||r.length===0||n.basename(r)!==r||r==="."||r==="..")throw new Error("Lifecycle transaction journal contains an unsafe backup reference.")}function F(r){if(!r||typeof r!="object")throw new Error("Lifecycle transaction journal is not an object.");let e=r;if(e.kind!==E||e.version!==L)throw new Error("Lifecycle transaction journal has an unsupported format.");if(!Number.isInteger(e.ownerPid)||e.ownerPid<=0)throw new Error("Lifecycle transaction journal has an invalid owner process.");if(!["active","committed","rolling-back"].includes(e.phase))throw new Error("Lifecycle transaction journal has an invalid phase.");if(!Array.isArray(e.operations))throw new Error("Lifecycle transaction journal has invalid operations.");for(let t of e.operations){if(!t||typeof t!="object")throw new Error("Lifecycle transaction journal contains an invalid operation.");let i=t;if(j(i.path),i.type!=="tree"){if(i.type!=="file"||!["absent","regular"].includes(i.state))throw new Error("Lifecycle transaction journal contains an invalid operation.");if(i.state==="regular"){if(!Number.isInteger(i.mode)||i.mode<0||i.mode>4095)throw new Error("Lifecycle transaction journal contains an invalid file mode.");A(i.backup);}}}return e}async function g(r){let e;try{e=await a.open(r,constants.O_RDONLY);}catch(t){if(k(t))return;throw t}try{await v(e);}finally{await e.close();}}async function N(r,e){let t=n.join(n.dirname(r),`.${n.basename(r)}.${process.pid}.${d.randomUUID()}.tmp`);try{let i=await a.open(t,constants.O_WRONLY|constants.O_CREAT|constants.O_EXCL,384);try{await i.writeFile(e),await v(i);}finally{await i.close();}await a.rename(t,r),await g(n.dirname(r));}catch(i){throw await a.rm(t,{force:true}).catch(()=>{}),i}}async function D(r,e){await N(n.join(r,b),Buffer.from(`${JSON.stringify(e,null,2)}
|
|
2
|
-
`));}async function S(r,e){let t=await p(r.path);if(t?.isSymbolicLink()||t&&!t.isFile())throw new Error(`Refusing to restore over a non-regular file: ${r.path}`);if(r.state==="absent"){t&&await a.unlink(r.path);return}if(!e)throw new Error(`Missing durable backup for: ${r.path}`);if(!await p(n.dirname(r.path)))return;let i=n.join(e,r.backup),o=await a.lstat(i).catch(s=>{if(s.code==="ENOENT"&&t?.isFile())return t;throw s});if(o===t)return;if(!o.isFile()||o.isSymbolicLink())throw new Error(`Lifecycle transaction backup is not a regular file: ${i}`);let c=await a.readFile(i),f=n.join(n.dirname(r.path),`.${n.basename(r.path)}.${process.pid}.${d.randomUUID()}.rollback`),l=await a.open(f,constants.O_WRONLY|constants.O_CREAT|constants.O_EXCL,r.mode);try{await l.writeFile(c),await l.chmod(r.mode),await v(l);}finally{await l.close();}try{await a.rename(f,r.path),await g(n.dirname(r.path));}catch(s){throw await a.rm(f,{force:true}).catch(()=>{}),s}}async function P(r){let e=await p(r.path);if(e){if(e.isSymbolicLink()||!e.isDirectory())throw new Error(`Refusing to remove a non-directory owned tree: ${r.path}`);await a.rm(r.path,{recursive:true});}}async function T(r,e){let t=[];for(let i of [...r].reverse())try{i.type==="file"?await S(i,e):await P(i);}catch(o){t.push(o);}if(t.length>0)throw new AggregateError(t,"Lifecycle transaction rollback failed.")}var m=class r{constructor(e){this.transactionDirectory=e;this.journalPath=e?n.join(e,b):void 0;}transactionDirectory;journalPath;actions=[];durableOperations=[];phase="active";finished=false;static async create(e={}){if(!e.journalDirectory)return new r;let t=n.resolve(e.journalDirectory);await a.mkdir(t,{recursive:true});let i=await a.mkdtemp(n.join(t,O));await g(t);let o=new r(i);return await o.persist(),o}assertActive(){if(this.finished||this.phase!=="active")throw new Error("Lifecycle transaction is no longer active.")}async persist(e=this.durableOperations){this.transactionDirectory&&await D(this.transactionDirectory,{kind:E,version:L,ownerPid:process.pid,phase:this.phase,operations:e});}async addDurableOperation(e){let t=[...this.durableOperations,e];await this.persist(t),this.durableOperations.push(e),this.actions.push(e);}async captureFile(e){this.assertActive();let t=n.resolve(e),i=await p(t);if(!i){await this.addDurableOperation({type:"file",path:t,state:"absent"});return}if(i.isSymbolicLink()||!i.isFile())throw new Error(`Lifecycle transaction can only capture regular files: ${t}`);let o;try{o=await a.open(t,constants.O_RDONLY|(constants.O_NOFOLLOW??0));}catch(c){throw c.code==="ENOENT"?new Error(`File changed while being captured: ${t}`,{cause:c}):c}try{let c=await o.stat();if(!c.isFile())throw new Error(`Lifecycle transaction can only capture regular files: ${t}`);let f=await o.readFile(),l=c.mode&4095;if(this.transactionDirectory){let s=`file-${this.durableOperations.length}-${d.randomUUID()}.bin`;await N(n.join(this.transactionDirectory,s),f),await this.addDurableOperation({type:"file",path:t,state:"regular",mode:l,backup:s});}else {let s=`memory-${this.durableOperations.length}`,w={type:"file",path:t,state:"regular",mode:l,backup:s};this.durableOperations.push(w),this.actions.push({type:"compensation",run:async()=>{let h=await p(t);if(h?.isSymbolicLink()||h&&!h.isFile())throw new Error(`Refusing to restore over a non-regular file: ${t}`);let y=n.join(n.dirname(t),`.${n.basename(t)}.${process.pid}.${d.randomUUID()}.rollback`);await a.writeFile(y,f,{flag:"wx",mode:l}),await a.chmod(y,l);try{await a.rename(y,t);}catch(R){throw await a.rm(y,{force:true}).catch(()=>{}),R}}});}}finally{await o.close();}}async captureOwnedTree(e){this.assertActive();let t=n.resolve(e),i=await p(t);if(!i)return await this.addDurableOperation({type:"tree",path:t}),true;if(i.isSymbolicLink()||!i.isDirectory())throw new Error(`Lifecycle transaction tree must be absent or a directory: ${t}`);return false}registerCompensation(e){this.assertActive(),this.actions.push({type:"compensation",run:async()=>e()});}async commit(){if(!this.finished){this.assertActive(),this.phase="committed";try{await this.persist(),this.finished=true,this.actions.length=0,this.transactionDirectory&&await a.rm(this.transactionDirectory,{recursive:true}).catch(()=>{});}catch(e){throw this.phase="active",e}}}async rollback(){if(this.finished||this.phase==="committed")return;this.assertActive(),this.phase="rolling-back";try{await this.persist();}catch(t){throw this.phase="active",t}let e=[];for(let t of [...this.actions].reverse())try{t.type==="compensation"?await t.run():t.type==="file"?await S(t,this.transactionDirectory):await P(t);}catch(i){e.push(i);}if(e.length>0)throw new AggregateError(e,"Lifecycle transaction rollback failed.");this.finished=true,this.transactionDirectory&&await a.rm(this.transactionDirectory,{recursive:true});}};async function M(r={}){return m.create(r)}async function C(r){let e=n.resolve(r),t=await a.readdir(e,{withFileTypes:true}).catch(c=>{if(c.code==="ENOENT")return [];throw c}),i=[],o=[];for(let c of t){if(!c.isDirectory()||!c.name.startsWith(O))continue;let f=n.join(e,c.name);try{let l;try{l=await a.readFile(n.join(f,b),"utf8");}catch(h){if(h.code==="ENOENT")continue;throw h}let s=F(JSON.parse(l));if(s.phase==="committed"){await a.rm(f,{recursive:true});continue}let w=false;try{process.kill(s.ownerPid,0),w=true;}catch(h){w=h.code==="EPERM";}if(w)continue;s.phase==="active"&&(s.phase="rolling-back",await D(f,s)),await T(s.operations,f),await a.rm(f,{recursive:true}),i.push(f);}catch(l){o.push(l);}}if(o.length>0)throw new AggregateError(o,"Lifecycle transaction recovery failed.");return i}export{M as a,C as b};
|
package/dist/chunk-U5FCQTVL.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import {f,e}from'./chunk-ILIBOMYL.js';import {a,b as b$1}from'./chunk-VRGEPPUB.js';import {a as a$1,b as b$3}from'./chunk-X7FYEKLI.js';import {c as c$1,d}from'./chunk-HCFWT42C.js';import {q,r,t,s,v}from'./chunk-J7QYANXK.js';import {a as a$2,e as e$2}from'./chunk-CCDGHPEJ.js';import {b as b$2}from'./chunk-D65FCQIO.js';import {f as f$1,e as e$1}from'./chunk-NZ3WZYD5.js';import {s as s$1}from'./chunk-MOSXTVPU.js';import u from'chalk';import c from'fs';import y from'path';var H=e$1.readiness;function K(n){return n.vulnerableDependencies>0?`${n.vulnerableDependencies} known dependency vulnerability finding(s) reported`:`${n.blockingFindings} blocking dependency/security finding(s) reported`}var U=f$1.readiness;function B(n,e){let t=y.resolve(n);if(!b$1(t))return t;let a=M(e,"workspace.contract.json");if(c.existsSync(a))try{let o=JSON.parse(c.readFileSync(a,"utf-8")),s=Array.isArray(o.projects)?o.projects:[];for(let i of s){let l=m(i),p=typeof l.relativePath=="string"?l.relativePath.trim():"";if(p)return y.join(e,p)}}catch{}let r=T(e),d=Array.isArray(r.payload?.projects)?r.payload.projects:[];for(let o of d){let s=m(o),i=typeof s.path=="string"?s.path.trim():"";if(i)return y.resolve(i)}return t}function z(n){let e=q(n);return r(e,n)?"go":t(e,n)?"java":s(e,n)?"node":v(e,n)?"python":"unknown"}function _(n,e){if(!c.existsSync(n))return null;let t=c.readdirSync(n).filter(a=>a.endsWith(".json")&&e.some(r=>r.test(a))).map(a=>y.join(n,a));return t.length===0?null:(t.sort((a,r)=>c.statSync(r).mtimeMs-c.statSync(a).mtimeMs),t[0])}function m(n){return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}function J(n){for(let e of n)if(c.existsSync(e))return e;return null}function M(n,...e){let t=s$1(n,...e);return J(t)??t[0]}function b(n,e){let t=a$2(n,`.workspai/reports/${e}`);return J([t,y.join(n,".rapidkit","reports",e)])??t}async function Q(n){let{readWorkspaceRegistrySummary:e,resolveWorkspaceRegisteredProjects:t}=await import('./workspace-registry-summary-LJN4WHIZ.js'),a=await e(n);return a?a.projectCount:(await t(n)).summary.projectCount}function X(n,e,t){let a=M(n,"toolchain.lock");if(!c.existsSync(a))return {gate:"env",status:"fail",summary:"toolchain.lock is missing",details:["Run workspai bootstrap to pin runtime versions and generate a reproducible toolchain."],evidencePath:a};try{let r=JSON.parse(c.readFileSync(a,"utf-8")),d=m(r.runtime),s=["python","node","go","java"].filter(p=>{let f=m(d[p]);return typeof f.version=="string"&&f.version.trim().length>0});if(s.length===0)return {gate:"env",status:"fail",summary:"No runtime versions are pinned in toolchain.lock",details:["Pin at least one runtime version via workspai setup <runtime> and re-run bootstrap."],evidencePath:a};let l=[...new Set((Array.isArray(e)?e:[e]).filter(p=>p!=="unknown"))].filter(p=>{let f=m(d[p]);return typeof f.version!="string"||f.version.trim().length===0});return l.length>0?{gate:"env",status:"fail",summary:`${t?.hasRegisteredProjects?"Project runtime":"Workspace"}${l.length===1?"":"s"} (${l.join(", ")}) ${l.length===1?"is":"are"} not pinned in toolchain.lock`,details:l.map(f=>`Run workspai setup ${f} and workspai bootstrap to lock ${f} for this workspace.`),evidencePath:a}:{gate:"env",status:"pass",summary:`Pinned runtimes: ${s.join(", ")}`,details:[],evidencePath:a}}catch{return {gate:"env",status:"fail",summary:"toolchain.lock is invalid JSON",details:["Regenerate lockfile with workspai bootstrap."],evidencePath:a}}}function T(n){let e=b(n,"doctor-last-run.json");if(!c.existsSync(e))return {payload:null,path:e};try{let t=JSON.parse(c.readFileSync(e,"utf-8"));return c$1(t,"workspace")?(d(t),{payload:t,path:e}):{payload:null,path:e}}catch{return {payload:null,path:e}}}function Y(n){let e=T(n);if(!e.payload)return {gate:{gate:"doctor",status:"fail",summary:"Doctor evidence is missing",details:["Run workspai doctor workspace --json before release readiness checks."],evidencePath:e.path},payload:null};let t=a$1(e.payload);if(t.hasSystemErrors)return {gate:{gate:"doctor",status:"fail",summary:"Doctor reported system errors",details:["Resolve system-level doctor errors before proceeding."],evidencePath:e.path},payload:e.payload};if(t.blockingFindings>0)return {gate:{gate:"doctor",status:"fail",summary:`Doctor reported ${t.blockingFindings} blocking finding(s)`,details:["Resolve the canonical Doctor findings and regenerate fresh Doctor evidence."],evidencePath:e.path},payload:e.payload};let a=[...t.advisoryFindings>0?[`${t.advisoryFindings} advisory finding(s)`]:[],...t.unknownFindings>0?[`${t.unknownFindings} unknown finding(s)`]:[],...t.contradictionCount>0?[`${t.contradictionCount} evidence contradiction(s)`]:[],...t.missingDiagnosisProjects>0?[`${t.missingDiagnosisProjects} project(s) without canonical diagnosis`]:[],...t.staleEvidence?["stale Doctor evidence"]:[],...t.unknownFreshness?["unknown Doctor evidence freshness"]:[],...t.minimumDiagnosisCompleteness<100?[`diagnosis completeness ${t.minimumDiagnosisCompleteness}%`]:[]];return a.length>0?{gate:{gate:"doctor",status:"warn",summary:"Doctor evidence requires attention",details:a,evidencePath:e.path},payload:e.payload}:{gate:{gate:"doctor",status:"pass",summary:"Doctor checks passed without issues",details:[],evidencePath:e.path},payload:e.payload}}function Z(n){let e=b(n,"analyze-last-run.json");if(!c.existsSync(e))return {gate:"analyze",status:"fail",summary:"Analyze evidence is missing",details:["Run workspai analyze --json before release readiness checks."],evidencePath:e};try{let t=JSON.parse(c.readFileSync(e,"utf-8"));b$2(e$1.analyze,t,e);let a=m(t.summary),r=String(a.verdict??"").toLowerCase(),d=Number(a.score??0),o=m(a.findings),s=Number(o.fail??0);return r==="blocked"||s>0?{gate:"analyze",status:"fail",summary:`Analyze verdict is blocked (score ${d}/100)`,details:["Resolve analyze findings and regenerate analyze-last-run.json."],evidencePath:e}:r==="needs-attention"?{gate:"analyze",status:"warn",summary:`Analyze needs attention (score ${d}/100)`,details:["Review analyze warnings before release."],evidencePath:e}:{gate:"analyze",status:"pass",summary:`Analyze passed (score ${d}/100)`,details:[],evidencePath:e}}catch{return {gate:"analyze",status:"fail",summary:"Analyze evidence is invalid or violates its contract",details:["Re-run workspai analyze --json to regenerate evidence."],evidencePath:e}}}function ee(n){try{let e=JSON.parse(c.readFileSync(n,"utf-8")),t=String(e.status??"").toLowerCase(),a=m(e.summary),r=Number(a.failedChecks??0);return t==="fail"||r>0?{gate:"verify",status:"fail",summary:"Verify-pack contract reports failed checks",details:["Fix failed verify checks and regenerate verify-pack contract evidence."],evidencePath:n}:t==="pass"?{gate:"verify",status:"pass",summary:"Verify-pack contract passed",details:[],evidencePath:n}:{gate:"verify",status:"warn",summary:"Verify-pack contract status is not explicit",details:["Ensure contract status is pass/fail and keep schema aligned with v1 contract."],evidencePath:n}}catch{return {gate:"verify",status:"fail",summary:"Verify-pack contract is invalid JSON",details:["Regenerate verify-pack contract artifact."],evidencePath:n}}}async function te(n,e){if(e.skipVerify)return {gate:"verify",status:"pass",summary:"Verify gate skipped (--skip-verify)",details:["Verification was explicitly skipped for this readiness run."]};let t=[a$2(n,".workspai/reports"),y.join(n,".rapidkit","reports")],a=t[0],r=t.map(s=>_(s,[/verify-pack-contract/i,/^verify.*\.json$/i])).find(s=>typeof s=="string")??null;if(r)return ee(r);let d=a$2(n,e$1.contractVerify),o=t.map(s=>_(s,[/workspace-contract-verify-last-run/i,/workspace-contract-verify/i])).find(s=>typeof s=="string")??null;if(o)try{let s=JSON.parse(c.readFileSync(o,"utf-8")),i=String(s.status??"").toLowerCase();if(i==="passed"||i==="pass")return {gate:"verify",status:"pass",summary:"Workspace contract verification passed (CLI cache)",details:[],evidencePath:o};if(i==="failed"||i==="fail")return {gate:"verify",status:"fail",summary:"Workspace contract verification failed (CLI cache)",details:(Array.isArray(s.violations)?s.violations:[]).slice(0,5),evidencePath:o}}catch{}try{let{verifyWorkspaceContract:s}=await import('./workspace-contract-7DXK4GF5.js'),i=await s({workspacePath:n}),l={schemaVersion:"v1",source:"cli",generatedAt:new Date().toISOString(),status:i.status,contractPath:i.contractPath,projectCount:i.projectCount,checks:i.checks,violations:i.violations};return await e$2(n,e$1.contractVerify,l),i.status==="failed"?{gate:"verify",status:"fail",summary:"Workspace contract verification failed (CLI)",details:i.violations.slice(0,5),evidencePath:d}:{gate:"verify",status:"pass",summary:"Workspace contract verification passed (CLI)",details:[],evidencePath:d}}catch(s){return {gate:"verify",status:"fail",summary:"No verify evidence and workspace contract verification unavailable",details:["Run workspai workspace contract verify --json or export verify-pack contract from CI.",s instanceof Error?s.message:String(s)],evidencePath:y.join(a,"*verify*.json")}}}function ne(n,e){let t=b(e,"doctor-last-run.json");if(!n)return {gate:"dependency",status:"warn",summary:"Dependency risk check skipped (doctor evidence missing)",details:["Run workspai doctor workspace --json to include dependency findings."],evidencePath:t};let a=b$3(n);return a.blockingFindings>0||a.vulnerableDependencies>0?{gate:"dependency",status:"fail",summary:K(a),details:["Resolve the typed dependency/security findings and regenerate focused audit evidence."],evidencePath:t}:a.auditFailed>0?{gate:"dependency",status:"fail",summary:`${a.auditFailed} dependency audit(s) failed`,details:["Repair the audit runner or dependency environment; failed audits are not clean."],evidencePath:t}:a.missingDependencies>0||a.auditUnavailable>0||a.unknownFindings>0||a.advisoryFindings>0?{gate:"dependency",status:"warn",summary:"Dependency evidence is incomplete or requires attention",details:[...a.missingDependencies>0?[`${a.missingDependencies} project(s) have no materialized dependency tree.`]:[],...a.auditUnavailable>0?[`${a.auditUnavailable} audit provider(s) are unavailable or unsupported.`]:[],...a.unknownFindings>0?[`${a.unknownFindings} dependency/security finding(s) remain unknown.`]:[],...a.advisoryFindings>0?[`${a.advisoryFindings} dependency/security advisory finding(s) remain.`]:[]],evidencePath:t}:{gate:"dependency",status:"pass",summary:"No dependency vulnerabilities reported",details:[],evidencePath:t}}function ae(n){return n.some(e=>e.status==="fail")?"fail":n.some(e=>e.status==="warn")?"warn":"pass"}async function se(n,e){return e$2(n,H,e)}async function re(n={}){let e$1=y.resolve(n.startPath??process.cwd()),t=a(e$1)??e$1,a$1=await Q(t)>0,r=a$1&&b$1(e$1)?t:B(e$1,t),d=r===t?"unknown":z(r),o=a$1?d:"unknown";if(a$1&&r===t){let{resolveWorkspaceRegisteredProjects:g}=await import('./workspace-registry-summary-LJN4WHIZ.js');o=(await g(t)).summary.projects.map(q=>z(y.resolve(t,q.relativePath)));}let s=X(t,o,{hasRegisteredProjects:a$1}),i=Y(t),l=Z(t),p=await te(t,{skipVerify:n.skipVerify}),f$1=ne(i.payload,t),w=[s,i.gate,l,p,f$1],h=ae(w),v={schemaVersion:U,generatedAt:new Date().toISOString(),workspacePath:t,projectPath:r,action:n.action,overallStatus:h,blocking:h==="fail",blockingReasons:w.filter(g=>g.status==="fail").map(g=>`${g.gate}: ${g.summary}`),gates:w};if(n.writeReport!==false){let g=f(v,{commandId:"workspaceReadiness",exitCode:h==="fail"?2:h==="warn"?1:0,generatedAt:v.generatedAt,blockers:v.blockingReasons,runId:e()});v.evidencePath=await se(t,g);}return v}function ie(n){return n==="pass"?u.green("PASS"):n==="warn"?u.yellow("WARN"):u.red("FAIL")}function oe(n){return n==="pass"?u.green("PASS"):n==="warn"?u.yellow("WARN"):u.red("FAIL")}async function Se(n){let e=await re({startPath:n.workspace,writeReport:true,skipVerify:n.skipVerify===true});if(n.json)console.log(JSON.stringify(e,null,2));else {console.log(u.bold.cyan(`
|
|
2
|
-
\u{1F6A6} Workspai Release Readiness
|
|
3
|
-
`)),console.log(u.bold(`Workspace: ${u.cyan(y.basename(e.workspacePath))}`)),console.log(u.gray(`Path: ${e.workspacePath}`)),console.log(`Overall: ${oe(e.overallStatus)}`);for(let t of e.gates){console.log(` - ${t.gate}: ${ie(t.status)} ${t.summary}`);for(let a of t.details)console.log(u.gray(` ${a}`));t.evidencePath&&console.log(u.gray(` evidence: ${t.evidencePath}`));}e.evidencePath&&console.log(u.gray(`
|
|
4
|
-
Evidence saved: ${e.evidencePath}`));}n.strict&&e.overallStatus!=="pass"&&process.exit(1);}export{re as a,Se as b};
|
package/dist/chunk-UXEO5QCF.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import {c,d}from'./chunk-MOSXTVPU.js';import {m,k as k$1,j as j$1,b,t,n,i}from'./chunk-RGNCL5OB.js';import {a}from'./chunk-2FIX2MDC.js';import wt from'crypto';import tt from'os';import l from'path';import*as p from'fs-extra';import {execa}from'execa';var yt=["version","project","create","add","list","info","upgrade","diff","doctor","license","commands","reconcile","rollback","uninstall","checkpoint","optimize","snapshot","frameworks","modules","merge"],M=new Set(yt);var g=a();async function et(t){for(let e of [c,d]){let r=l.join(t,e);if(await p.pathExists(r))try{let n=await p.readJson(r);if(n&&typeof n=="object")return n}catch{return null}}return null}function O(){let t=[],e=i=>{let o=i?.trim();o&&t.push(o);};e(process.env.RAPIDKIT_BRIDGE_PYTHON),e(process.env.RAPIDKIT_PYTHON_CMD),e(process.env.POETRY_PYTHON);let r=_();(r.startsWith("/")||r.startsWith(".")||r.startsWith(".."))&&!r.startsWith("file:")&&e(m(l.join(l.resolve(r),".venv")));for(let i of k$1())i.args.length===1&&i.args[0]==="--version"&&e(i.command);for(let i of j$1())e(i);return [...new Set(t)]}function v(t,e){return t==="py"?["-3",...e]:e}function H(t){if(!t)return t;let e=["Installed Poetry version does not support '--no-update'. Falling back to 'poetry lock'."];return t.split(/\r?\n/).filter(i=>!e.some(o=>i.includes(o))).join(`
|
|
2
|
-
`)}var y=class extends Error{code;constructor(e,r){super(r),this.code=e;}};function D(t){if(t instanceof y)switch(t.code){case "PYTHON_NOT_FOUND":return `Workspai could not find Python (python3/python/py) on your PATH.
|
|
3
|
-
Install Python 3.10+ and ensure \`${i()}\` is available, then retry.
|
|
4
|
-
Tip: if you are inside a RapidKit project, use the local ./rapidkit launcher.`;case "BRIDGE_VENV_CREATE_FAILED":return `Workspai failed to create its bridge virtual environment.
|
|
5
|
-
`+(b()?`Ensure Python is installed with venv support.
|
|
6
|
-
`:`Ensure Python venv support is installed (e.g., python3-venv).
|
|
7
|
-
`)+`Details: ${t.message}`;case "BRIDGE_PIP_BOOTSTRAP_FAILED":return `Workspai could not bootstrap pip inside the bridge virtual environment.
|
|
8
|
-
`+(b()?`Ensure pip is available for your Python installation and retry.
|
|
9
|
-
`:`Install python3-venv/python3-pip and retry.
|
|
10
|
-
`)+`Details: ${t.message}`;case "BRIDGE_PIP_UPGRADE_FAILED":return `Workspai could not upgrade pip in the bridge virtual environment.
|
|
11
|
-
Check your network/proxy or disable RAPIDKIT_BRIDGE_UPGRADE_PIP.
|
|
12
|
-
Details: ${t.message}`;case "BRIDGE_PIP_INSTALL_FAILED":return `Workspai could not install rapidkit-core in the bridge virtual environment.
|
|
13
|
-
Check your network/proxy, or install manually with: pipx install rapidkit-core.
|
|
14
|
-
Details: ${t.message}`;default:return `Workspai bridge error: ${t.message}`}return `Workspai failed to run the Python core engine: ${t instanceof Error?t.message:String(t)}`}function _(){let t=process.env.RAPIDKIT_CORE_PYTHON_PACKAGE;return t&&t.trim()?t.trim():"rapidkit-core"}function vt(){let t=_(),e=process.env.RAPIDKIT_CORE_PYTHON_PACKAGE_ID,r=e&&e.trim()?`${t}|${e.trim()}`:t;return wt.createHash("sha256").update(r).digest("hex").slice(0,12)}function j(){let t=process.env.XDG_CACHE_HOME;return t&&t.trim()?t:l.join(tt.homedir(),".cache")}function Pt(){return l.join(j(),"rapidkit","npm-bridge","venv")}function nt(){let t=vt();return l.join(j(),"rapidkit","npm-bridge",`venv-${t}`)}function Y(t){return m(t)}function U(t){return n(t)}async function rt(t$1=process.platform,e=process.env){let r=b(t$1)?["rapidkit.exe","rapidkit.cmd"]:["rapidkit"],n=t(e,t$1).flatMap(i=>r.map(o=>l.join(i,o)));for(let i of [...new Set(n)])try{if(!await p.pathExists(i))continue;let o=await execa(i,["--version","--json"],{reject:false,stdio:"pipe",timeout:4e3});if(o.exitCode===0&&await k(o.stdout))return {cmd:i,baseArgs:[]}}catch{}return null}async function it(t=process.platform,e=process.env){let r=b(t)?"rapidkit.exe":"rapidkit",n=(e.PATH??"").split(l.delimiter).filter(Boolean);for(let i of n){let o=l.join(i,r);try{if(!await p.pathExists(o))continue;let c=await execa(o,["--version","--json"],{reject:false,stdio:"pipe",timeout:4e3});if(c.exitCode===0&&await k(c.stdout,{requireSchema:true}))return {cmd:o,baseArgs:[]}}catch{}}return null}function ot(t){return /[<>=!~]=|@|\.whl$|\.tar\.gz$|\.zip$|git\+|https?:\/\//.test(t)}function Ct(t){return l.dirname(l.dirname(t))}function st(){return l.join(j(),"rapidkit","npm-bridge","core-commands.json")}async function at(t){let e=!!process.env.RAPIDKIT_DEBUG,r=n=>{e&&process.stderr.write(`[DEBUG] tryRapidkit(${t}): ${n}
|
|
15
|
-
`);};try{r("probing interpreter-specific rapidkit script");let i=((await execa(t,v(t,["-c","import sysconfig, os; print(os.path.join(sysconfig.get_path('scripts'), 'rapidkit'))"]),{reject:false,stdio:"pipe",timeout:2e3})).stdout??"").toString().trim();if(r(`script path: ${i}`),i)try{if(await p.pathExists(i)){r(`found script at ${i}; invoking --version --json`);let o=await execa(i,["--version","--json"],{reject:false,stdio:"pipe",timeout:4e3});if(r(`script exitCode=${o.exitCode}`),o.exitCode===0){let c=(o.stdout??"").toString().trim();try{let s=JSON.parse(c),a=!!s&&typeof s=="object"&&s!==null&&"version"in s;if(r(`script JSON parse ok=${a}`),a)return true}catch{r("script output not valid JSON");}}}}catch(o){r(`interpreter-specific script probe failed: ${String(o)}`);}}catch(n){r(`interpreter-specific script probe error: ${String(n)}`);}try{r('probing importlib.find_spec("rapidkit")');let n=await execa(t,v(t,["-c","import importlib.util; print(1 if importlib.util.find_spec('rapidkit') else 0)"]),{reject:false,stdio:"pipe",timeout:2e3});if(r(`import probe exitCode=${n.exitCode} stdout=${(n.stdout??"").toString().trim()}`),n.exitCode===0&&(n.stdout??"").toString().trim()==="1")return true}catch(n){r(`import probe error: ${String(n)}`);}try{r("probing python -m rapidkit");let n=await execa(t,v(t,["-m","rapidkit","--version","--json"]),{reject:false,stdio:"pipe",timeout:8e3});if(r(`-m probe exitCode=${n.exitCode}`),n.exitCode===0)return true}catch(n){r(`-m probe error: ${String(n)}`);}try{r("probing PATH for rapidkit executables");let n=(process.env.PATH??"").split(l.delimiter).filter(Boolean);for(let i of n){let o=l.join(i,b()?"rapidkit.exe":"rapidkit");try{if(await p.pathExists(o)){r(`found candidate on PATH: ${o}; invoking --version --json`);let c=await execa(o,["--version","--json"],{reject:false,stdio:"pipe",timeout:4e3});if(r(`candidate exitCode=${c.exitCode}`),c.exitCode===0){let s=(c.stdout??"").toString().trim();try{let a=JSON.parse(s),d=a;if(a&&typeof a=="object"&&a!==null&&"version"in d&&d.schema_version===1)return true}catch{r("candidate output not valid JSON, skipping");}}}}catch(c){r(`error probing candidate ${o}: ${String(c)}`);}}return r("no valid rapidkit found on PATH"),false}catch(n){return r(`PATH probe error: ${String(n)}`),false}}async function k(t,e){let r=(t??"").toString().trim();if(!r)return false;try{let n=JSON.parse(r);if(!n||typeof n!="object"||n===null)return false;let i=n;return "version"in i?e?.requireSchema?i.schema_version===1||i.schemaVersion==="rapidkit-core-version-v1":true:false}catch{return false}}async function ct(t,e=process.platform){let r=async o=>{try{let a=(await et(o))?.metadata?.python?.venvPath;return typeof a!="string"||!a.trim()?null:l.isAbsolute(a)?a:l.join(o,a)}catch{return null}},n$1=async(o,c)=>{let s=n(c,e);if(await p.pathExists(s)){let d=await execa(s,["--version","--json"],{reject:false,stdio:"pipe",timeout:1500,cwd:o});if(d.exitCode===0&&await k(d.stdout))return {cmd:s,baseArgs:[],workspaceDir:o}}let a=m(c,e);if(await p.pathExists(a)){let d=await execa(a,["-m","rapidkit","--version","--json"],{reject:false,stdio:"pipe",timeout:1500,cwd:o});if(d.exitCode===0&&await k(d.stdout))return {cmd:a,baseArgs:["-m","rapidkit"],workspaceDir:o}}return null},i=t;for(let o=0;o<25;o+=1){let c=await r(i),s=[l.join(i,".venv"),c].filter(d=>!!d);for(let d of [...new Set(s)]){let P=await n$1(i,d);if(P)return P}let a=l.dirname(i);if(a===i)break;i=a;}return null}async function Et(t){try{let e=l.join(t,".python-version");if(await p.pathExists(e)){let n=(await p.readFile(e,"utf-8")).trim();if(n)return n}}catch{}try{let e=await et(t);if(typeof e?.pythonVersion=="string"&&e.pythonVersion.trim())return e.pythonVersion.trim();let n=e?.metadata?.python?.pythonVersion;if(typeof n=="string"&&n.trim())return n.trim()}catch{}return null}async function F(t){if(t&&t.trim())try{let s=await ct(t);if(s){let a=s.workspaceDir??(l.dirname(s.cmd).includes(".venv")?l.dirname(l.dirname(l.dirname(s.cmd))):l.dirname(s.cmd)),d=await Et(a);return d&&(process.env.PYENV_VERSION=d),s}}catch{}let e=await St();if(e.kind==="venv"){let s=Ct(e.pythonPath),a=U(s);return await p.pathExists(a)?{cmd:a,baseArgs:[]}:{cmd:e.pythonPath,baseArgs:["-m","rapidkit"]}}try{if((await execa(e.cmd,["-m","rapidkit","--version","--json"],{reject:false,stdio:"pipe",timeout:4e3})).exitCode===0)return {cmd:e.cmd,baseArgs:["-m","rapidkit"]}}catch{}try{let a=((await execa(e.cmd,["-c","import sysconfig, os; print(os.path.join(sysconfig.get_path('scripts'), 'rapidkit'))"],{reject:false,stdio:"pipe",timeout:2e3})).stdout??"").toString().trim();if(a&&await p.pathExists(a))try{let d=await execa(a,["--version","--json"],{reject:false,stdio:"pipe",timeout:4e3});if(d.exitCode===0&&await k(d.stdout))return {cmd:a,baseArgs:[]}}catch{}}catch{}let r=await rt();if(r)return r;let n=await it();if(n)return n;let i=nt(),o=await N(e.cmd),c=U(i);return await p.pathExists(c)?{cmd:c,baseArgs:[]}:{cmd:o,baseArgs:["-m","rapidkit"]}}async function dt(){for(let t of O())try{if((await execa(t,v(t,["--version"]),{reject:false,stdio:"pipe",timeout:2e3})).exitCode===0)return t}catch{}return null}async function B(){let t=null,e=false;for(let r of O()){try{if((await execa(r,v(r,["--version"]),{reject:false,stdio:"pipe",timeout:2e3})).exitCode!==0)continue;e=true;}catch{continue}try{return await N(r)}catch(n){t=n;continue}}throw e?t instanceof y?t:t instanceof Error?new y("BRIDGE_VENV_BOOTSTRAP_FAILED",t.message):new y("BRIDGE_VENV_BOOTSTRAP_FAILED","Python was detected, but the Workspai bridge environment could not be created."):new y("PYTHON_NOT_FOUND","No Python interpreter found (python3/python/py).")}async function _t(){let t=!!process.env.RAPIDKIT_DEBUG,e=n=>{t&&process.stderr.write(`[DEBUG] checkRapidkitCore: ${n}
|
|
16
|
-
`);},r=Array.from(new Set([...j$1(),...k$1(14,10).map(n=>n.command)]));for(let n of r)try{e(`Method 1: trying ${n} import`);let i=await execa(n,v(n,["-c","import rapidkit_core; print(1)"]),{reject:false,stdio:"pipe",timeout:g});if(i.exitCode===0&&i.stdout?.trim()==="1")return e(`\u2713 Found via ${n} import`),true}catch{continue}for(let n of r)try{e(`Method 2: trying ${n} -m pip show`);let i=await execa(n,v(n,["-m","pip","show","rapidkit-core"]),{reject:false,stdio:"pipe",timeout:g});if(i.exitCode===0&&i.stdout?.includes("Name: rapidkit-core"))return e(`\u2713 Found via ${n} -m pip show`),true}catch{continue}for(let n of ["pip","pip3"])try{e(`Method 3: trying ${n} show`);let i=await execa(n,["show","rapidkit-core"],{reject:false,stdio:"pipe",timeout:g});if(i.exitCode===0&&i.stdout?.includes("Name: rapidkit-core"))return e(`\u2713 Found via ${n} show`),true}catch{continue}try{e("Method 4: checking pyenv versions");let n=await execa("pyenv",["versions","--bare"],{reject:false,stdio:"pipe",timeout:g});if(n.exitCode===0&&n.stdout){let i=n.stdout.split(`
|
|
17
|
-
`).filter(o=>o.trim());e(`Found pyenv versions: ${i.join(", ")}`);for(let o of i){let c=process.env.PYENV_ROOT||l.join(tt.homedir(),".pyenv"),s=l.join(c,"versions",o.trim(),"bin","pip");try{let a=await execa(s,["show","rapidkit-core"],{reject:false,stdio:"pipe",timeout:g});if(a.exitCode===0&&a.stdout?.includes("Name: rapidkit-core"))return e(`\u2713 Found in pyenv ${o}`),true}catch{try{let a=await execa("pyenv",["exec","pip","show","rapidkit-core"],{reject:false,stdio:"pipe",timeout:g,env:{...process.env,PYENV_VERSION:o.trim()}});if(a.exitCode===0&&a.stdout?.includes("Name: rapidkit-core"))return e(`\u2713 Found in pyenv ${o} via PYENV_VERSION`),true}catch{continue}}}}}catch{e("pyenv not available");}for(let n of r)try{e(`Method 5: checking ${n} user site`);let i=await execa(n,v(n,["-m","site","--user-site"]),{reject:false,stdio:"pipe",timeout:g});if(i.exitCode===0&&i.stdout){let o=i.stdout.trim(),c=l.join(o,"rapidkit_core");if(await p.pathExists(c))return e("\u2713 Found in user site-packages"),true}}catch{continue}try{e("Method 6: checking pipx");let n=await execa("pipx",["list"],{reject:false,stdio:"pipe",timeout:g});if(n.exitCode===0&&n.stdout?.includes("rapidkit-core"))return e("\u2713 Found via pipx"),true}catch{e("pipx not available");}for(let n of r)try{e(`Method 6: checking ${n} -m pipx list`);let i=await execa(n,v(n,["-m","pipx","list"]),{reject:false,stdio:"pipe",timeout:g});if(i.exitCode===0&&i.stdout?.includes("rapidkit-core"))return e(`\u2713 Found via ${n} -m pipx list`),true}catch{continue}try{if(e("Method 7: checking poetry"),(await execa("poetry",["show","rapidkit-core"],{reject:false,stdio:"pipe",timeout:g})).exitCode===0)return e("\u2713 Found via poetry"),true}catch{e("poetry check failed");}for(let n of r)try{if(e(`Method 7: checking ${n} -m poetry show rapidkit-core`),(await execa(n,v(n,["-m","poetry","show","rapidkit-core"]),{reject:false,stdio:"pipe",timeout:g})).exitCode===0)return e(`\u2713 Found via ${n} -m poetry`),true}catch{continue}try{e("Method 8: checking conda");let n=await execa("conda",["list","rapidkit-core"],{reject:false,stdio:"pipe",timeout:g});if(n.exitCode===0&&n.stdout?.includes("rapidkit-core"))return e("\u2713 Found via conda"),true}catch{e("conda not available");}return e("\u2717 Not found in any environment"),false}function kt(t){let e=t.trim();if(!e||!e.startsWith("rapidkit-core"))return null;let r=e.slice(13).trim();return !r||/[\/@]|\.whl$|\.tar\.gz$|\.zip$|git\+|https?:\/\//.test(r)?null:r}function z(t){let e=t.trim();if(!e)return null;let r=e.split("."),n=[];for(let i of r){let o=i.match(/^(\d+)/);if(!o){n.push(0);continue}n.push(Number.parseInt(o[1],10));}return n}function q(t,e){let r=Math.max(t.length,e.length);for(let n=0;n<r;n+=1){let i=n<t.length?t[n]:0,o=n<e.length?e[n]:0;if(i>o)return 1;if(i<o)return -1}return 0}function xt(t){return t.length<=1?[t[0]+1]:t.length===2?[t[0]+1,0]:[t[0],t[1]+1,0]}function Rt(t){let e=t.split(",").map(n=>n.trim()).filter(Boolean);if(e.length===0)return null;let r=[];for(let n of e){let i=n.match(/^(==|>=|<=|>|<|~=)\s*([0-9][0-9A-Za-z+._-]*)$/);if(!i)return null;r.push({op:i[1],version:i[2]});}return r}function ut(t,e){let r=z(t);if(!r)return false;let n=Rt(e);if(!n)return false;for(let i of n){let o=z(i.version);if(!o)return false;let c=q(r,o);if(i.op==="=="&&c!==0||i.op===">="&&c<0||i.op==="<="&&c>0||i.op===">"&&c<=0||i.op==="<"&&c>=0)return false;if(i.op==="~="){if(c<0)return false;let s=xt(o);if(q(r,s)>=0)return false}}return true}async function bt(){let t=Array.from(new Set([...j$1(),...k$1(14,10).map(r=>r.command)])),e=r=>{let n=r.match(/^Version:\s*(.+)$/m);return n?n[1].trim():null};for(let r of t)try{let n=await execa(r,v(r,["-m","pip","show","rapidkit-core"]),{reject:false,stdio:"pipe",timeout:g});if(n.exitCode===0){let i=e(n.stdout||"");if(i)return i}}catch{continue}for(let r of ["pip","pip3"])try{let n=await execa(r,["show","rapidkit-core"],{reject:false,stdio:"pipe",timeout:g});if(n.exitCode===0){let i=e(n.stdout||"");if(i)return i}}catch{continue}try{let r=await execa("pipx",["list"],{reject:false,stdio:"pipe",timeout:g});if(r.exitCode===0&&r.stdout){let n=r.stdout.match(/rapidkit-core\s+([0-9][0-9A-Za-z+._-]*)/i);if(n?.[1])return n[1]}}catch{}return null}async function At(){let t=_(),e=kt(t);if(!e)return {isCompatible:false,installedVersion:null,expectedConstraint:null,reason:ot(t)?"constraint-unsupported":"constraint-missing"};let r=await bt();if(!r)return {isCompatible:false,installedVersion:null,expectedConstraint:e,reason:"version-not-detected"};let n=ut(r,e);return {isCompatible:n,installedVersion:r,expectedConstraint:e,reason:n?"compatible":"incompatible-version"}}async function N(t){let e=nt(),r=Pt(),n=_(),i=[e];!ot(n)&&!await p.pathExists(e)&&await p.pathExists(r)&&i.push(r);for(let m of i){let h=Y(m);if(await p.pathExists(h))try{let f=await execa(h,["-c","import importlib.util; print(1 if importlib.util.find_spec('rapidkit') else 0)"],{reject:false,stdio:"pipe",timeout:2e3});if(f.exitCode===0&&(f.stdout??"").toString().trim()==="1")return h;await p.remove(m);}catch{await p.remove(m);}}let o=e,c={...process.env,PIP_DISABLE_PIP_VERSION_CHECK:"1",PIP_NO_PYTHON_VERSION_WARNING:"1"},s=Math.max(0,Number(process.env.RAPIDKIT_BRIDGE_PIP_RETRY??"2")),a=Math.max(200,Number(process.env.RAPIDKIT_BRIDGE_PIP_RETRY_DELAY_MS??"800")),d=Math.max(1e4,Number(process.env.RAPIDKIT_BRIDGE_PIP_TIMEOUT_MS??"120000")),P=m=>new Promise(h=>setTimeout(h,m)),E=async(m,h,f)=>{let w=await execa(m,h,{reject:false,stdio:["ignore","pipe","inherit"],env:c,timeout:f});if(w.exitCode===0)return;let T=(w.stdout??"").toString(),$=(w.stderr??"").toString(),b=[T,$].filter(Boolean).join(`
|
|
18
|
-
`),ft=b?`${m} ${h.join(" ")}
|
|
19
|
-
${b}`:`${m} ${h.join(" ")}`;throw new Error(ft)},R=async(m,h,f)=>{let w=0;for(;;)try{await E(m,h,f);return}catch(T){if(w>=s)throw T;let $=Math.floor(Math.random()*200),b=a*Math.pow(2,w)+$;w+=1,await P(b);}};try{await p.ensureDir(l.dirname(o));try{await E(t,v(t,["-m","venv",o]),6e4);}catch(f){let w=f instanceof Error?f.message:String(f);throw new y("BRIDGE_VENV_CREATE_FAILED",w)}let m=Y(o);if((await execa(m,["-m","pip","--version"],{reject:false,stdio:"pipe",timeout:2e3})).exitCode!==0&&(await execa(m,["-m","ensurepip","--default-pip"],{reject:false,stdio:["ignore","pipe","inherit"],env:c,timeout:6e4})).exitCode!==0)throw new y("BRIDGE_PIP_BOOTSTRAP_FAILED","ensurepip failed; install python3-venv/python3-pip and retry.");if(process.env.RAPIDKIT_BRIDGE_UPGRADE_PIP==="1")try{await R(m,["-m","pip","install","-U","pip"],d);}catch(f){let w=f instanceof Error?f.message:String(f);throw new y("BRIDGE_PIP_UPGRADE_FAILED",w)}try{await R(m,["-m","pip","install","-U",_()],d);}catch(f){let w=f instanceof Error?f.message:String(f);throw new y("BRIDGE_PIP_INSTALL_FAILED",w)}return m}catch(m){if(m instanceof y)throw m;let h=m instanceof Error?m.message:String(m);throw new y("BRIDGE_VENV_BOOTSTRAP_FAILED",h)}}async function St(){if(process.env.RAPIDKIT_BRIDGE_FORCE_VENV==="1")return {kind:"venv",pythonPath:await B()};for(let r of O())if(await at(r))return {kind:"system",cmd:r};let t=await dt();if(!t)throw new y("PYTHON_NOT_FOUND","No Python interpreter found (python3/python/py).");let e;try{e=await N(t);}catch{e=await B();}return {kind:"venv",pythonPath:e}}async function Wt(t,e){try{let r=await F(e?.cwd),n=r.cmd,i=[...r.baseArgs,...t];if(t[0]==="init"){let s=await execa(n,i,{cwd:e?.cwd,env:{...process.env,...e?.env},reject:false,stdio:"pipe"}),a=H((s.stdout??"").toString()),d=H((s.stderr??"").toString());return a&&process.stdout.write(a.endsWith(`
|
|
20
|
-
`)?a:`${a}
|
|
21
|
-
`),d&&process.stderr.write(d.endsWith(`
|
|
22
|
-
`)?d:`${d}
|
|
23
|
-
`),typeof s.exitCode=="number"?s.exitCode:1}let c=await execa(n,i,{cwd:e?.cwd,env:{...process.env,...e?.env},reject:false,stdio:"inherit"});return typeof c.exitCode=="number"?c.exitCode:1}catch(r){return process.stderr.write(`${D(r)}
|
|
24
|
-
`),1}}var It=[{pattern:/RapidKitError:\s*Directory '([^']+)' exists and force is not set/,message:t=>`\u274C Directory "${l.basename(t[1])}" already exists.
|
|
25
|
-
\u{1F4A1} Choose a different name, or remove the existing directory first:
|
|
26
|
-
rm -rf ${t[1]}`},{pattern:/RapidKitError:\s*Project name '([^']+)' is (invalid|not allowed)/i,message:t=>`\u274C Invalid project name: "${t[1]}"
|
|
27
|
-
\u{1F4A1} Use lowercase letters, numbers, and hyphens only (e.g. my-api).`},{pattern:/RapidKitError:\s*Kit '([^']+)' not found/i,message:t=>`\u274C Unknown kit: "${t[1]}"
|
|
28
|
-
\u{1F4A1} Run "npx workspai list" to see available kits.`},{pattern:/RapidKitError:\s*(.+)/,message:t=>`\u274C ${t[1].trim()}`}];async function Jt(t,e){let{spawn:r}=await import('child_process');try{let n=await F(e?.cwd),i=n.cmd,o=[...n.baseArgs,...t];return await new Promise(c=>{let s=r(i,o,{cwd:e?.cwd,env:{...process.env,...e?.env},stdio:["inherit","inherit","pipe"]}),a=[];s.stderr?.on("data",d=>{a.push(d);}),s.on("close",d=>{let P=d??1;if(P!==0&&a.length>0){let E=Buffer.concat(a).toString("utf8");for(let{pattern:R,message:m}of It){let h=E.match(R);if(h){process.stderr.write(m(h)+`
|
|
29
|
-
`),c(P);return}}process.stderr.write(E);}c(P);}),s.on("error",d=>{process.stderr.write(`${D(d)}
|
|
30
|
-
`),c(1);});})}catch(n){return process.stderr.write(`${D(n)}
|
|
31
|
-
`),1}}async function x(t,e){try{let r=await F(e?.cwd),n=r.cmd,i=[...r.baseArgs,...t],o=await execa(n,i,{cwd:e?.cwd,env:{...process.env,...e?.env},reject:false,stdio:"pipe"});return {exitCode:typeof o.exitCode=="number"?o.exitCode:1,stdout:(o.stdout??"").toString(),stderr:(o.stderr??"").toString()}}catch(r){return {exitCode:1,stdout:"",stderr:`${D(r)}
|
|
32
|
-
`}}}function pt(t){let e=new Set,r=t.split(`
|
|
33
|
-
`),n=false;for(let i of r){let o=i.replace(/\r$/,"");if(!n){/^\s*Commands:\s*$/i.test(o)&&(n=true);let a=o.match(/^\s*rapidkit\s+([a-z0-9_-]+)\b/i);if(a){let d=a[1].trim();d&&!d.startsWith("-")&&e.add(d);}continue}if(!o.trim())break;if(/^\s*(Options|Arguments|Usage|Commands)\s*:/i.test(o))continue;let c=o.match(/^\s*([a-z0-9][a-z0-9_-]*)\b/i);if(!c)continue;let s=c[1].trim();s&&!s.startsWith("-")&&e.add(s);}return e}async function lt(){let t=st();if(!await p.pathExists(t))return null;try{let e=await p.readJson(t);if(e&&e.schema_version===1&&Array.isArray(e.commands))return e}catch{}return null}async function Z(t){let e=st();await p.ensureDir(l.dirname(e)),await p.writeJson(e,t,{spaces:2});}async function Dt(){let t=await x(["version","--json"],{cwd:process.cwd()});if(t.exitCode===0)try{let r=JSON.parse(t.stdout)?.version;return typeof r=="string"?r:void 0}catch{return}}async function Ot(){let t=await x(["commands","--json"],{cwd:process.cwd()});if(t.exitCode!==0)return null;try{let e=JSON.parse(t.stdout);if(e?.schema_version!==1||!Array.isArray(e.commands))return null;let r=e.commands.filter(n=>typeof n=="string");return r.length?r:null}catch{return null}}async function Ht(){let e=Date.now(),r=await lt(),n=await Dt(),i=!!r?.commands?.length;if(i&&e-r.fetched_at<864e5&&(!n||!r.rapidkit_version||r.rapidkit_version===n))return new Set(r.commands);let o=await Ot();if(o?.length){let d=Array.from(new Set(o)).sort();return await Z({schema_version:1,fetched_at:e,rapidkit_version:n,commands:d}),new Set(d)}let c=await x(["--help"],{cwd:process.cwd()});if(c.exitCode!==0)return i&&r?.commands?new Set(r.commands):new Set(M);let s=pt(c.stdout);if(s.size===0)return new Set(M);let a=Array.from(s).sort();return await Z({schema_version:1,fetched_at:e,rapidkit_version:n,commands:a}),s}async function Yt(){let e=Date.now(),r=await lt();return !r||e-r.fetched_at>=864e5||!r.commands?.length?null:new Set(r.commands)}function mt(){return l.join(j(),"rapidkit","npm-bridge","modules-catalog.json")}async function jt(){let t=mt();if(!await p.pathExists(t))return null;try{let e=await p.readJson(t);if(e&&e.schema_version===1&&Array.isArray(e.modules))return e}catch{}return null}async function X(t){let e=mt();await p.ensureDir(l.dirname(e)),await p.writeJson(e,t,{spaces:2});}function Q(t){try{return JSON.parse(t)}catch{return null}}async function Ut(t={}){let e=typeof t.ttlMs=="number"?t.ttlMs:18e5,r=Date.now(),n=await jt();if(n?.fetched_at&&r-n.fetched_at<e)return n;let i=["modules","list","--json-schema","1"];t.category&&i.push("--category",t.category),t.tag&&i.push("--tag",t.tag),t.detailed&&i.push("--detailed");let o=await x(i,{cwd:t.cwd,env:t.env});if(o.exitCode===0){let s=Q(o.stdout);if(s&&s.schema_version===1&&Array.isArray(s.modules)){let a={...s,fetched_at:r};return await X(a),a}}let c=await x(["modules","list","--json"],{cwd:t.cwd,env:t.env});if(c.exitCode===0){let s=Q(c.stdout);if(Array.isArray(s)){let a={schema_version:1,generated_at:new Date().toISOString(),filters:{category:t.category??null,tag:t.tag??null,detailed:!!t.detailed},stats:{total:s.length,returned:s.length,invalid:0},modules:s,source:"legacy-json",fetched_at:r};return await X(a),a}}return n||null}var zt={pythonCommandCandidates:O,pickSystemPython:dt,ensureBridgeVenv:N,ensureBridgeVenvFromCandidates:B,parseCoreCommandsFromHelp:pt,tryRapidkit:at,findUserLocalRapidkitRunner:rt,findPathRapidkitRunner:it,findWorkspaceRunner:ct,checkRapidkitCoreAvailable:_t,checkRapidkitCoreVersionCompatible:At,isVersionSatisfyingConstraint:ut};export{M as a,_t as b,At as c,St as d,Wt as e,Jt as f,x as g,Ht as h,Yt as i,Ut as j,zt as k};
|
package/dist/chunk-VR6XMUF3.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {b}from'./chunk-UJXE4UAX.js';var s="cli-log-event-v1";var a="unknown-run";function C(e){a=e;}function l(){return a}function c(e){return {schemaVersion:s,runId:l(),timestamp:new Date().toISOString(),level:e.level,event:e.event,component:e.component,message:e.message,...e.command?{command:e.command}:{},...e.metadata&&Object.keys(e.metadata).length>0?{metadata:E(e.metadata)}:{}}}function f(e){b()&&L(c(e));}function L(e){process.stderr.write(`${JSON.stringify(e)}
|
|
2
|
-
`);}function E(e){let t={};for(let[r,n]of Object.entries(e))if(n!==void 0){if(n instanceof Error){t[r]={name:n.name,message:n.message};continue}if(n===null||typeof n=="string"||typeof n=="number"||typeof n=="boolean"){t[r]=n;continue}if(Array.isArray(n)){t[r]=n.map(o=>typeof o=="string"||typeof o=="number"||typeof o=="boolean"?o:String(o));continue}t[r]=String(n);}return t}export{s as a,C as b,l as c,f as d,L as e};
|
package/dist/chunk-VVJK5NFY.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {n,i,j,h as h$1}from'./chunk-FY4IIAIF.js';import {a}from'./chunk-HTYMXMQM.js';import {c}from'./chunk-S5KTATOU.js';import {d as d$1}from'./chunk-P5PSZQPB.js';import {e as e$2}from'./chunk-CCDGHPEJ.js';import {a as a$1}from'./chunk-AFIFZTOY.js';import {e as e$1,d,b}from'./chunk-EWZZUQBR.js';import {f,e}from'./chunk-NZ3WZYD5.js';import k from'path';import V from'fs-extra';import {spawnSync}from'child_process';function ue(){let e={...process.env};return delete e.GIT_DIR,delete e.GIT_WORK_TREE,delete e.GIT_INDEX_FILE,delete e.GIT_PREFIX,e}function F(e,t,a){let r=spawnSync("git",t,{cwd:e,env:ue(),encoding:"utf8",stdio:["ignore","pipe","ignore"]});if(r.status!==0)return {ok:false,stdout:""};let c=r.stdout??"";return {ok:true,stdout:a?.preserveWhitespace?c:c.trim()}}function ge(e){let t=e.replace(/\\/g,"/").replace(/^\.\//,"");return t===".workspai/AGENT-GROUNDING.md"?true:[".workspai/reports/",".workspai/cache/",".rapidkit/reports/",".rapidkit/cache/"].some(a=>t.startsWith(a))}function ke(e){let t=[],a=[],r=[];for(let c of e.split(`
|
|
2
|
-
`)){if(!c.trim())continue;let n=c.slice(0,2),i=c.slice(3).trim();if(i&&!ge(i)){if(n==="??"){a.push(i);continue}n.includes("D")&&r.push(i),t.push(i);}}return {changedFiles:[...new Set(t)].sort(),untrackedFiles:[...new Set(a)].sort(),deletedFiles:[...new Set(r)].sort()}}function Q(e,t){let a={available:false,dirty:false,changedFiles:[],untrackedFiles:[],deletedFiles:[]},r=F(e,["rev-parse","--is-inside-work-tree"]);if(!r.ok||r.stdout!=="true")return a;let c=F(e,["rev-parse","--abbrev-ref","HEAD"]),n=F(e,["rev-parse","HEAD"]),i=F(e,["status","--porcelain=v1","--untracked-files=all"],{preserveWhitespace:true}),p=ke(i.stdout),m=p.changedFiles.length>0||p.untrackedFiles.length>0||p.deletedFiles.length>0;return {available:true,branch:c.ok?c.stdout:void 0,commit:n.ok?n.stdout:void 0,ref:t?.ref,dirty:m,changedFiles:p.changedFiles,untrackedFiles:p.untrackedFiles,deletedFiles:p.deletedFiles}}var oe=f.snapshot,L=f.diff,_=e.snapshot,ae=e.diff,he=f.impact,we=e.impact;function ye(e){if(e.model.projectTopology||!e.model.graph||e.modelHash!==e$1(e.model))return null;let t={...e.model,projectTopology:e.model.graph,graph:e.model.graph};return {...e,modelHash:d(t),model:t}}function ne(e){let t=e.trim().toLowerCase();return t==="git"||t.startsWith("git:")}function We(e){let t=e.trim();return t.toLowerCase()==="git"?"HEAD":t.toLowerCase().startsWith("git:")&&t.slice(4).trim()||"HEAD"}function se(e,t){return k.isAbsolute(t)?t:k.join(e,t)}async function be(e){let t=await V.readJson(e);if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`Workspace model input is not a JSON object: ${e}`);let a=t;if(a.schemaVersion===oe){a$1(t,"contracts/workspace-intelligence/workspace-model-snapshot.v1.json",`Workspace model snapshot ${e}`);let r=a;if(!r.model||r.model.schemaVersion!==h$1)throw new Error(`Invalid workspace model snapshot: ${e}`);let c=d(r.model);if(r.modelHash!==c){let n=ye(r);if(!n)throw new Error(`Workspace model snapshot hash mismatch: ${e}`);return {model:n.model,hash:n.modelHash}}return {model:r.model,hash:r.modelHash}}if(a.schemaVersion===h$1){a$1(t,"contracts/workspace-intelligence/workspace-model.v1.json",`Workspace model ${e}`);let r=a;return {model:r,hash:d(r)}}throw a.schemaVersion===L?new Error(`workspace diff --from received a diff report (${k.basename(e)}). Use a workspace model snapshot or model report as baseline, e.g. ${_}. To analyze an existing diff report, run: npx workspai workspace impact --from ${k.basename(e)} --json`):new Error(`Unsupported workspace model input schema: ${String(a.schemaVersion)}`)}async function ve(e){let t=await V.readJson(e);if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`Workspace diff input is not a JSON object: ${e}`);let a=t;if(a.schemaVersion!==L)return null;a$1(t,"contracts/workspace-intelligence/workspace-model-diff.v1.json",`Workspace model diff ${e}`);let r=a;if(!r.currentModel||r.currentModel.schemaVersion!==h$1||!r.summary||!Array.isArray(r.changes))throw new Error(`Invalid workspace model diff report: ${e}`);if(r.toHash!==d(r.currentModel))throw new Error(`Workspace model diff current-model hash mismatch: ${e}`);return r}async function Ye(e){let t=e.model??await n({workspacePath:e.workspacePath,includeAbsolutePaths:e.includeAbsolutePaths,includeEvidence:e.includeEvidence,observableScanDepth:e.observableScanDepth,now:e.now});return {schemaVersion:oe,generatedAt:(e.now??new Date).toISOString(),modelHash:d(t),modelRef:i,model:t}}async function Qe(e,t){return e$2(t,_,d$1(e))}function x(e){return {name:e.name,path:e.path,kind:e.kind,category:e.category,runtime:e.runtime,framework:e.framework,generator:e.generator,supportTier:e.supportTier,commands:e.commands,importantFiles:e.importantFiles}}function w(e,t){e.push(t);}function Me(e,t){let a=[],r=["name","profile","type"],c=["workspaceType","surfaces","runtimeFamilies","businessCapabilities"];for(let n of r){let i=e.workspace[n],p=t.workspace[n];b(i)!==b(p)&&w(a,{type:"workspace.changed",severity:"info",target:`workspace.${n}`,message:`Workspace metadata field changed: ${String(n)}`,before:i,after:p});}for(let n of c){let i=e.identity[n],p=t.identity[n];b(i)!==b(p)&&w(a,{type:"workspace.changed",severity:"info",target:`identity.${n}`,message:`Workspace identity field changed: ${String(n)}`,before:i,after:p});}return b(e.policies)!==b(t.policies)&&w(a,{type:"workspace.changed",severity:"warning",target:"policies",message:"Workspace policy summary changed.",before:e.policies,after:t.policies}),b(e.discovery)!==b(t.discovery)&&w(a,{type:"workspace.changed",severity:"info",target:"discovery",message:"Workspace discovery settings changed.",before:e.discovery,after:t.discovery}),e.contracts.exists!==t.contracts.exists&&w(a,{type:"workspace.changed",severity:t.contracts.exists?"info":"warning",target:t.contracts.workspaceContractPath,message:"Workspace contract presence changed.",before:e.contracts.exists,after:t.contracts.exists}),a}function je(e,t){let a=e.validation??null,r=t.validation??null;return b(a)===b(r)?[]:[{type:"validation.changed",severity:r?.status==="failed"?"critical":"warning",target:"validation",message:"Workspace model validation changed.",before:a,after:r}]}function Ie(e,t){let a=[],r=new Map(e.projects.map(n=>[n.path,n])),c=new Map(t.projects.map(n=>[n.path,n]));for(let[n,i]of c.entries()){let p=r.get(n);if(!p){w(a,{type:"project.added",severity:"info",target:n,message:`Project added: ${i.name}`,after:x(i)});continue}let m=x(p),l=x(i);if(b(m)!==b(l)){let u=p.runtime!==i.runtime||p.framework!==i.framework;w(a,{type:"project.changed",severity:u?"warning":"info",target:n,message:`Project changed: ${i.name}`,before:m,after:l});}}for(let[n,i]of r.entries())c.has(n)||w(a,{type:"project.removed",severity:"warning",target:n,message:`Project removed: ${i.name}`,before:x(i)});return a.sort((n,i)=>`${n.type}:${n.target}`.localeCompare(`${i.type}:${i.target}`))}async function Pe(e){let t=k.resolve(e.workspacePath),a=ne(e.fromPath),r=a?We(e.fromPath):void 0,c=e.fromPath;if(a){let f=k.join(t,_);if(!await V.pathExists(f))throw new Error("Git-aware workspace diff requires an existing snapshot at .workspai/reports/workspace-model-snapshot.json. Run: npx workspai workspace snapshot --json");c=_;}let n$1=se(t,c),i$1=await be(n$1),p=e.model??await n({workspacePath:t,includeAbsolutePaths:e.includeAbsolutePaths,includeEvidence:e.includeEvidence,observableScanDepth:e.observableScanDepth,now:e.now}),m=d(p),l=[...Me(i$1.model,p),...Ie(i$1.model,p),...je(i$1.model,p)],u;e.includeGitObservation!==false&&(u=e.gitObservation??Q(t,{ref:r}),u.available&&Ee(l,u,p));let v=l.filter(f=>f.type.startsWith("git.")).length,R=i$1.hash!==m,y=a?`git:${r??"HEAD"}`:k.relative(t,n$1).split(k.sep).join("/");return {schemaVersion:L,generatedAt:(e.now??new Date).toISOString(),fromRef:y,toRef:i,fromHash:i$1.hash,toHash:m,summary:{changed:R||v>0,addedProjects:l.filter(f=>f.type==="project.added").length,removedProjects:l.filter(f=>f.type==="project.removed").length,changedProjects:l.filter(f=>f.type==="project.changed").length,workspaceChanges:l.filter(f=>f.type==="workspace.changed").length,validationChanges:l.filter(f=>f.type==="validation.changed").length,gitChangedFiles:v},git:u?.available?Oe(u,r):{available:false,dirty:false,changedFiles:0,untrackedFiles:0,deletedFiles:0},changes:l,currentModel:p}}async function Ze(e,t){return e$2(t,ae,d$1(e))}function I(e){return {none:0,low:1,medium:2,high:3,critical:4}[e]}function Z(e){return e.reduce((t,a)=>I(a)>I(t)?a:t,"none")}var N=["none","low","medium","high","critical"];function Re(e){let t=Math.max(1,I(e)-1);return N[t]}function Ce(e){let t=Math.min(N.length-1,I(e)+1);return N[t]}function ee(e){return e.join(" ")}function h(e,t,a,r){return {id:e,label:t,scope:r.scope,project:r.project,display:ee(["npx","workspai",...a]),execute:ee(["npx","--yes","--package","workspai","workspai",...a]),required:r.required!==false}}function te(e){let t=`project:${e.name}`,a=e.commands.fleetStages;return [h(`project.${e.name}.init`,`Run init for ${e.name}`,["workspace","run","init","--scope",t,"--json"],{scope:"project",project:e.name,required:a.includes("init")}),h(`project.${e.name}.test`,`Run tests for ${e.name}`,["workspace","run","test","--scope",t,"--json"],{scope:"project",project:e.name,required:a.includes("test")}),h(`project.${e.name}.build`,`Run build for ${e.name}`,["workspace","run","build","--scope",t,"--json"],{scope:"project",project:e.name,required:a.includes("build")}),h(`project.${e.name}.start`,`Run start for ${e.name}`,["workspace","run","start","--scope",t,"--json"],{scope:"project",project:e.name,required:a.includes("start")})]}function T(){return [h("workspace.doctor","Run workspace doctor",["doctor","workspace","--json"],{scope:"workspace"}),h("workspace.contract.verify","Verify workspace contract",["workspace","contract","verify","--json"],{scope:"workspace"}),h("workspace.readiness","Run release readiness",["readiness","--json"],{scope:"workspace"}),h("workspace.analyze","Run workspace analyze",["analyze","--json"],{scope:"workspace",required:false}),h("workspace.pipeline","Run governance pipeline",["pipeline","--json"],{scope:"workspace",required:false}),h("workspace.doctor-fix","Verify doctor fix result",["doctor","workspace","--fix","--json"],{scope:"workspace",required:false})]}function Se(e,t){let a=t.split(k.sep).join("/");return e.projects.filter(c=>{let n=c.path.split(k.sep).join("/");return a===n||a.startsWith(`${n}/`)}).sort((c,n)=>n.path.length-c.path.length)[0]}function Ee(e,t,a){let r=new Set(e.map(n=>n.target)),c=(n,i)=>{let p=i.split(k.sep).join("/"),m=`git:${p}`;if(r.has(m))return;let l=Se(a,p),u=l?`${l.name} (${l.path})`:"workspace";w(e,{type:n,severity:n==="git.deleted"?"warning":"info",target:m,message:`Git ${n==="git.untracked"?"untracked":n==="git.deleted"?"deleted":"changed"} file affects ${u}: ${p}`,after:{path:p,project:l?.name,projectPath:l?.path}}),r.add(m);};for(let n of t.changedFiles)c("git.file.changed",n);for(let n of t.untrackedFiles)c("git.untracked",n);for(let n of t.deletedFiles)c("git.deleted",n);}function Oe(e,t){return {available:true,ref:t??e.ref,branch:e.branch,commit:e.commit,dirty:e.dirty,changedFiles:e.changedFiles.length,untrackedFiles:e.untrackedFiles.length,deletedFiles:e.deletedFiles.length}}function Ae(e){let t=new Set,a=[];for(let r of e){let c=`${r.scope}:${r.project??""}:${r.display}`;t.has(c)||(t.add(c),a.push(r));}return a}function De(e){return e.type==="project.removed"?"high":e.severity==="critical"?"critical":e.severity==="warning"?"high":("medium")}function $e(e,t){return e.severity==="critical"?"critical":e.target==="policies"||e.target.includes("contract")?"high":e.type==="validation.changed"?(t?.projectCount??0)===0?"low":"high":e.target==="evidence"?"low":e.severity==="warning"?"medium":"low"}function Fe(e){return e.affectedProjects>0||e.projectCount>0||!e.changes.every(a=>a.severity==="critical"?false:a.type.startsWith("git.")||a.type==="validation.changed")?e.risk:I(e.risk)>=I("high")||e.risk==="medium"?"low":e.risk}function re(e,t){if(!e||e==="workspace")return true;let a=(e.startsWith("project:")?e.slice(8):e).trim().toLowerCase();return [t.name,t.path,k.basename(t.path),t.absolutePath].filter(r=>typeof r=="string"&&r.trim().length>0).map(r=>r.trim().toLowerCase()).includes(a)}function xe(e){if(!e.changed)return {headline:"No workspace model impact detected.",bullets:["The current workspace model matches the provided snapshot/report."],unsafeAssumptions:["Do not claim runtime verification passed unless a report exists."]};let t=e.affectedProjects.map(a=>a.project?.name??a.target);return {headline:`Workspace impact risk: ${e.risk}.`,bullets:[`Affected projects: ${t.length?t.join(", "):"none"}.`,`Workspace-level items: ${e.workspaceImpact.length}.`,"Use the verification plan before recommending apply, rollback, or release actions."],unsafeAssumptions:["Do not infer test/build success from impact alone.","Do not apply fixes without project scope and verification evidence.","Use display commands for users and execute commands for automation."]}}async function et(e){let t=k.resolve(e.workspacePath),a$1=ne(e.fromPath),r=e.diff;if(!r&&!a$1){let o=se(t,e.fromPath);r=await ve(o)??void 0;}r||(r=await Pe({workspacePath:t,fromPath:e.fromPath,includeAbsolutePaths:e.includeAbsolutePaths,includeEvidence:e.includeEvidence,includeGitObservation:e.includeGitObservation,gitObservation:e.gitObservation,now:e.now,model:e.model}));let c$1=new Map(r.currentModel.projects.map(o=>[o.path,o])),n=new Map(r.currentModel.projects.map(o=>[o.name,o])),i=r.changes.filter(o=>o.type.startsWith("project.")),p=new Map;for(let o of i){let d=(c$1.get(o.target)??(typeof o.before?.name=="string"?n.get(o.before.name):void 0))?.path??o.target,W=p.get(d)??[];W.push(o),p.set(d,W);}let m=[];for(let[o,s]of p.entries()){let d=c$1.get(o);if(d&&!re(e.scope,d))continue;let W=Z(s.map(De)),C=d?.name??(typeof s[0]?.before?.name=="string"?String(s[0].before.name):o);m.push({id:`project:${C}`,scope:"project",target:o,title:`Project impact: ${C}`,summary:s.map(M=>M.message).join(" "),risk:W,reasons:s.map(M=>`${M.type}: ${M.message}`),project:d?{name:d.name,path:d.path,kind:d.kind,runtime:d.runtime,framework:d.framework,supportTier:d.supportTier,...d.generator?{generator:d.generator}:{}}:void 0,verification:d?te(d):T()});}let l=j(r.currentModel),u=l?a(l):void 0,v=new Set(m.map(o=>o.project?.name).filter(o=>typeof o=="string")),R=new Map;for(let o of m)if(o.project?.name){let s=u?.byId.get(o.project.name);s&&(o.centrality={fanIn:s.fanIn,fanOut:s.fanOut,reach:s.reach,betweenness:s.betweenness,isHotspot:s.isHotspot},s.isHotspot&&(o.risk=Ce(o.risk),o.reasons=[...o.reasons,`graph.hotspot: critical-path project with ${s.reach} transitive dependent(s); risk escalated.`])),o.origin="direct",o.distance=0,R.set(o.project.name,o.risk);}let y=[],f=0;if(l&&v.size>0){let o=c(l,v);for(let s of o.values()){if(s.distance===0||v.has(s.id))continue;let d=n.get(s.id);if(d&&!re(e.scope,d))continue;let W=s.path[0],C=s.path[s.path.length-2]??W,M=R.get(W)??"medium",de=Re(M),j=u?.byId.get(s.id);f=Math.max(f,s.distance),y.push({id:`transitive:${s.id}`,scope:"project",target:d?.path??s.id,title:`Transitive impact: ${s.id}`,summary:`Depends on changed project ${W}${s.via?` via ${s.via}`:""} (distance ${s.distance}).`,risk:de,reasons:[`graph.dependent: depends on ${C}${s.via?` via ${s.via}`:""} (path ${s.path.join(" -> ")})`],project:d?{name:d.name,path:d.path,kind:d.kind,runtime:d.runtime,framework:d.framework,supportTier:d.supportTier,...d.generator?{generator:d.generator}:{}}:void 0,verification:d?te(d):T(),origin:"transitive",distance:s.distance,path:s.path,via:s.via,...j?{centrality:{fanIn:j.fanIn,fanOut:j.fanOut,reach:j.reach,betweenness:j.betweenness,isHotspot:j.isHotspot}}:{}});}}y.sort((o,s)=>o.target.localeCompare(s.target));let ie=u?u.hotspots.flatMap(o=>{let s=u.byId.get(o);return s?[{project:o,fanIn:s.fanIn,fanOut:s.fanOut,reach:s.reach,betweenness:s.betweenness}]:[]}):[],ce=r.changes.filter(o=>!o.type.startsWith("project.")),K=r.currentModel.summary?.projectCount??r.currentModel.projects.length,P=ce.map(o=>({id:`workspace:${o.target}`,scope:"workspace",target:o.target,title:`Workspace impact: ${o.target}`,summary:o.message,risk:$e(o,{projectCount:K}),reasons:[`${o.type}: ${o.message}`],verification:T()})),B=Ae([...m.flatMap(o=>o.verification),...y.flatMap(o=>o.verification),...P.flatMap(o=>o.verification),...r.summary.changed?T():[]]).filter(o=>o.required),pe=Z([...m.map(o=>o.risk),...y.map(o=>o.risk),...P.map(o=>o.risk)]),q=Fe({risk:pe,affectedProjects:m.length,projectCount:K,changes:r.changes}),z={changed:r.summary.changed,risk:q,affectedProjects:m.length,workspaceItems:P.length,recommendedCommands:B.length,blastRadius:{directlyAffected:m.length,transitivelyAffected:y.length,maxDistance:f,graphEdges:l?.edges.length??0}};return {schemaVersion:he,generatedAt:(e.now??new Date).toISOString(),fromRef:r.fromRef,diffRef:ae,workspace:{name:r.currentModel.workspace.name,profile:r.currentModel.workspace.profile,type:r.currentModel.workspace.type},summary:z,affectedProjects:m.sort((o,s)=>o.target.localeCompare(s.target)),transitiveImpact:y,criticalPathHotspots:ie,workspaceImpact:P.sort((o,s)=>o.target.localeCompare(s.target)),verificationPlan:B,agentBrief:xe({changed:z.changed,risk:q,affectedProjects:m,workspaceImpact:P}),diff:r}}async function tt(e,t){return e$2(t,we,d$1(e))}export{Q as a,oe as b,L as c,_ as d,ae as e,he as f,we as g,ye as h,ne as i,We as j,Ye as k,Qe as l,Pe as m,Ze as n,T as o,et as p,tt as q};
|