workspai 0.77.0 → 0.78.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.
Files changed (82) hide show
  1. package/contracts/create-planner-capabilities.v1.json +26 -2
  2. package/contracts/runtime-command-surface.v1.json +2 -0
  3. package/contracts/workspace-intelligence-architecture.v1.json +2 -0
  4. package/dist/analyze-X76YV667.js +1 -0
  5. package/dist/autopilot-release-6OV2FLRS.js +1 -0
  6. package/dist/{chunk-3EMAC3MF.js → chunk-2CUT4GLE.js} +1 -1
  7. package/dist/chunk-3PGXGAHC.js +2 -0
  8. package/dist/{chunk-4CXV3PPV.js → chunk-4AAXIWYY.js} +1 -1
  9. package/dist/{chunk-47UR6ZH4.js → chunk-4KAYWMNE.js} +1 -1
  10. package/dist/{chunk-UP3UWAJV.js → chunk-5FVREPQC.js} +1 -1
  11. package/dist/{chunk-HRVHQBTA.js → chunk-5OKNWBAN.js} +1 -1
  12. package/dist/{chunk-DWKCFHHL.js → chunk-75WJOYWT.js} +1 -1
  13. package/dist/{chunk-LUPKDFQ3.js → chunk-7EMG3C3H.js} +2 -2
  14. package/dist/{chunk-O3TVVQ6X.js → chunk-7HV4U2OV.js} +1 -1
  15. package/dist/{chunk-TGNPMOM6.js → chunk-AMGIXK6Z.js} +1 -1
  16. package/dist/{chunk-IDETNYCF.js → chunk-FLAGHVSH.js} +1 -1
  17. package/dist/{chunk-UNEK3VVR.js → chunk-HB3ZYG2Z.js} +2144 -91
  18. package/dist/{chunk-UTIK3K3M.js → chunk-HMWZWT7B.js} +1 -1
  19. package/dist/{chunk-3SQIV3F4.js → chunk-IQJL3LBM.js} +1 -1
  20. package/dist/{chunk-475GQJ2D.js → chunk-KRTVIBPC.js} +1 -1
  21. package/dist/chunk-MD4CHXV3.js +2 -0
  22. package/dist/{chunk-QCX6BO2M.js → chunk-MN5S462C.js} +1 -1
  23. package/dist/{chunk-IAXRGH4Q.js → chunk-ONUFNCRN.js} +1 -1
  24. package/dist/chunk-QDM6TWFK.js +1 -0
  25. package/dist/{chunk-WC2K5QFI.js → chunk-QLHRGWUW.js} +1 -1
  26. package/dist/{chunk-223SWPTL.js → chunk-QMNJTI65.js} +1 -1
  27. package/dist/{chunk-ZIWWE4BQ.js → chunk-RHF2IZOW.js} +1 -1
  28. package/dist/{chunk-V6HVDVKJ.js → chunk-RJESUJQF.js} +5 -5
  29. package/dist/chunk-RQXZF7BZ.js +1 -0
  30. package/dist/{chunk-JVZA35OL.js → chunk-TJRVWVAZ.js} +1 -1
  31. package/dist/{chunk-GLBFY7AB.js → chunk-UVIBPWOG.js} +2 -2
  32. package/dist/{chunk-3EPR3D5Q.js → chunk-VEMGICT4.js} +1 -1
  33. package/dist/{chunk-SC43A6LH.js → chunk-VRZAN3WS.js} +50 -50
  34. package/dist/{chunk-E7WJ2QX7.js → chunk-YHQK4S3H.js} +1 -1
  35. package/dist/{chunk-X5XFT5UZ.js → chunk-YWC5MKIL.js} +1 -1
  36. package/dist/{chunk-J2MPBSQJ.js → chunk-ZQ36CTLF.js} +1 -1
  37. package/dist/{create-YPAZJYCE.js → create-WB5YQ7C6.js} +1 -1
  38. package/dist/{doctor-W5PXJ5FL.js → doctor-HOSHQ7II.js} +1 -1
  39. package/dist/{goal-lifecycle-5R55CA7H.js → goal-lifecycle-UEJMTUFV.js} +1 -1
  40. package/dist/{goal-pack-IS6GGJPH.js → goal-pack-YGZMG3RQ.js} +1 -1
  41. package/dist/index.js +92 -91
  42. package/dist/{pipeline-LW3SW2WT.js → pipeline-Z4JOJ4PX.js} +1 -1
  43. package/dist/{project-agent-entry-5TYKK5IV.js → project-agent-entry-ZMDQWJ6I.js} +1 -1
  44. package/dist/{project-intelligence-lens-TEOSTKNU.js → project-intelligence-lens-FSWQKY3E.js} +1 -1
  45. package/dist/{project-test-coverage-T4TIWGKN.js → project-test-coverage-EJ3MBSZ3.js} +1 -1
  46. package/dist/{proof-carrying-change-2TKRADCW.js → proof-carrying-change-M2RNYQ7E.js} +1 -1
  47. package/dist/{verified-goal-RN4TOV34.js → verified-goal-UAUCEDZZ.js} +1 -1
  48. package/dist/{workspace-A33YMF2N.js → workspace-J5QYWAE3.js} +1 -1
  49. package/dist/{workspace-agent-sync-VCA4G4DT.js → workspace-agent-sync-GLG36KQZ.js} +1 -1
  50. package/dist/{workspace-context-YBWLSKR6.js → workspace-context-BZV4ZFKZ.js} +1 -1
  51. package/dist/{workspace-contract-3QUZDBMM.js → workspace-contract-XDNIB5JX.js} +1 -1
  52. package/dist/{workspace-explain-NXYRAQFI.js → workspace-explain-V3XDMONQ.js} +1 -1
  53. package/dist/{workspace-foundation-DZ52PECX.js → workspace-foundation-EDTKW2RB.js} +1 -1
  54. package/dist/{workspace-graph-stream-4VT46HZ7.js → workspace-graph-stream-UPASFCAF.js} +1 -1
  55. package/dist/{workspace-intelligence-FKYQQDJ6.js → workspace-intelligence-24MZRG2S.js} +1 -1
  56. package/dist/{workspace-intelligence-runner-3K2JZH6Q.js → workspace-intelligence-runner-HISKHQLG.js} +1 -1
  57. package/dist/{workspace-knowledge-graph-CPBKNXQI.js → workspace-knowledge-graph-5EECTGXQ.js} +1 -1
  58. package/dist/workspace-knowledge-graph-snapshot-T6ZJGWLC.js +1 -0
  59. package/dist/{workspace-mcp-serve-UXPKX7K6.js → workspace-mcp-serve-S3TWO4RI.js} +1 -1
  60. package/dist/{workspace-model-POCPMNRT.js → workspace-model-J757KSDE.js} +1 -1
  61. package/dist/{workspace-onboarding-KLG3GG7S.js → workspace-onboarding-3TLME4HP.js} +1 -1
  62. package/dist/{workspace-registry-summary-M4WMFDQ4.js → workspace-registry-summary-ZC5CFZXP.js} +1 -1
  63. package/dist/{workspace-repair-engine-2VGN42QD.js → workspace-repair-engine-C26C7OIB.js} +1 -1
  64. package/dist/workspace-run-2KBTMGG7.js +1 -0
  65. package/dist/{workspace-verify-PLAKTF3J.js → workspace-verify-KFBWQ37C.js} +1 -1
  66. package/dist/{workspace-watch-VNU4KVYN.js → workspace-watch-LNP5JPD4.js} +1 -1
  67. package/docs/agent-framework-adapters.md +68 -18
  68. package/docs/ci-workflows.md +9 -6
  69. package/docs/commands-reference.md +5 -2
  70. package/docs/creating-workspaces-and-projects.md +2 -0
  71. package/docs/doctor-command.md +5 -3
  72. package/docs/native-kit-baselines.md +2 -2
  73. package/package.json +4 -1
  74. package/scripts/enterprise-package-smoke.mjs +50 -0
  75. package/dist/analyze-TJM66CPF.js +0 -1
  76. package/dist/autopilot-release-C7Q4OTPY.js +0 -1
  77. package/dist/chunk-5KXOV7W4.js +0 -1
  78. package/dist/chunk-IHWS3ALP.js +0 -2
  79. package/dist/chunk-N7DOKE7V.js +0 -2
  80. package/dist/chunk-SEZTSMRR.js +0 -1
  81. package/dist/workspace-knowledge-graph-snapshot-67XDXUOT.js +0 -1
  82. package/dist/workspace-run-5YQR7GEZ.js +0 -1
@@ -1,4 +1,4 @@
1
- import {g,f,h as h$2}from'./chunk-N7DOKE7V.js';import {b as b$4}from'./chunk-UTIK3K3M.js';import {b as b$7,a as a$4}from'./chunk-D5LLTUTY.js';import {b as b$2}from'./chunk-B6FJ6RG6.js';import {a as a$3}from'./chunk-QCX6BO2M.js';import {V as V$1,e as e$1,g as g$1,h as h$1,c as c$2,i as i$1,f as f$1,b as b$6,d as d$3}from'./chunk-UNEK3VVR.js';import {g as g$2}from'./chunk-IHWS3ALP.js';import {e,c as c$1}from'./chunk-252EKOR6.js';import {i,b as b$5,k,j,m,z,y,w}from'./chunk-6BO4QHKA.js';import {h,e as e$2,b as b$3,d as d$1}from'./chunk-EFHSRPW7.js';import {a}from'./chunk-TQEMLBAG.js';import {b as b$1,a as a$1,c,d as d$2}from'./chunk-VQZ5PI5J.js';import {promises}from'fs';import*as b from'fs-extra';import d from'path';import a$2 from'chalk';import {execa}from'execa';function dt(e){let t=e.projectCount??0,n=t===1?"project":"projects",o=e.pythonEngine==="installed"?`Python ${e.pythonVersion||"3.10+"} \xB7 ${e.installMethod||"local environment"}`:e.pythonEngine==="skipped"?"Python engine not installed":"Runtime-neutral foundation";return ["","\u2713 Workspace ready",`${e.workspaceName} \xB7 ${e.profile} \xB7 ${t} registered ${n}`,`Location ${e.workspacePath}`,`Runtime ${o}`,...e.note?[`Note ${e.note}`]:[],"","Workspace Intelligence"," \u2713 Contract and project registry"," \u2713 Canonical model and proof-backed graph"," \u2713 Agent context, grounding, and evidence index","","Next",` ${h$2(e.workspacePath)}`," npx workspai create"," npx workspai workspace intelligence run --for-agent generic --strict --json","","Evidence .workspai/reports/INDEX.json","Guide README.md",""]}function J(e){let t=dt(e);for(let n of t)n==="\u2713 Workspace ready"?console.log(a$2.green.bold(n)):n==="Workspace Intelligence"||n==="Next"?console.log(a$2.cyan.bold(n)):n.startsWith(" \u2713")?console.log(a$2.green(n)):n.startsWith("Location")||n.startsWith("Runtime")?console.log(a$2.gray(n)):console.log(n);}function M(){return i()}var ut="transactions";function mt(){return d.join(w(),ut)}async function Ue(){let e=mt();return await b$7(e),a$4({journalDirectory:e})}async function qe(e){for(let t of y())await e.captureFile(t);}async function le(e){let t=await Ue();try{return await qe(t),await t.captureOwnedTree(e),t}catch(n){return F(t,n)}}async function yt(e){let t=await Ue();try{return await Ye(t,e),t}catch(n){return F(t,n)}}async function Ye(e,t){await qe(e),await e.captureOwnedTree(d.join(t,a$1)),await e.captureOwnedTree(d.join(t,".venv"));for(let o of [".agents",".amazonq",".claude",".cursor",".github",".grok",".vscode",".windsurf"])await e.captureOwnedTree(d.join(t,o));let n=[c,".gitignore",d.join(a$1,"workspace.json"),d.join(a$1,"toolchain.lock"),d.join(a$1,"policies.yml"),d.join(a$1,"cache-config.yml"),g$2,a$3,"pyproject.toml","poetry.toml","poetry.lock","rapidkit","rapidkit.cmd","README.md","AGENTS.md","CLAUDE.md","GEMINI.md","QWEN.md",".windsurfrules",".rapidkit-global"];for(let o of n)await e.captureFile(d.join(t,o));}async function Q(e){await e.commit(),e.journalPath&&await promises.rm(d.dirname(e.journalPath),{recursive:true,force:true}).catch(t=>e$2.debug(`Could not remove committed lifecycle journal: ${t}`));}async function F(e,t){try{await e.rollback();}catch(n){throw new AggregateError([t,n],"Workspace lifecycle failed and rollback was incomplete.")}throw t}async function X(e$1,t,n,o,i){let r=e(t,h(),n,i?.pythonEngine?{coreStatus:i.pythonEngine,...i.pythonEngineReason?{coreReason:i.pythonEngineReason}:{},...o?{pythonVersion:o}:{}}:void 0);o&&!i?.pythonEngine&&(r.metadata||(r.metadata={}),r.metadata.python={pythonVersion:o}),await c$1(e$1,r);}async function G(e){await b.outputFile(d.join(e,".gitignore"),`.venv/
1
+ import {g,f,h as h$2}from'./chunk-3PGXGAHC.js';import {b as b$4}from'./chunk-HMWZWT7B.js';import {b as b$7,a as a$4}from'./chunk-D5LLTUTY.js';import {b as b$2}from'./chunk-B6FJ6RG6.js';import {a as a$3}from'./chunk-MN5S462C.js';import {U,e as e$1,g as g$1,h as h$1,c as c$2,i as i$1,f as f$1,b as b$6,d as d$3}from'./chunk-HB3ZYG2Z.js';import {g as g$2}from'./chunk-MD4CHXV3.js';import {e,c as c$1}from'./chunk-252EKOR6.js';import {i,b as b$5,k,j,m,z,y,w}from'./chunk-6BO4QHKA.js';import {h,e as e$2,b as b$3,d as d$1}from'./chunk-EFHSRPW7.js';import {a}from'./chunk-TQEMLBAG.js';import {b as b$1,a as a$1,c,d as d$2}from'./chunk-VQZ5PI5J.js';import {promises}from'fs';import*as b from'fs-extra';import d from'path';import a$2 from'chalk';import {execa}from'execa';function dt(e){let t=e.projectCount??0,n=t===1?"project":"projects",o=e.pythonEngine==="installed"?`Python ${e.pythonVersion||"3.10+"} \xB7 ${e.installMethod||"local environment"}`:e.pythonEngine==="skipped"?"Python engine not installed":"Runtime-neutral foundation";return ["","\u2713 Workspace ready",`${e.workspaceName} \xB7 ${e.profile} \xB7 ${t} registered ${n}`,`Location ${e.workspacePath}`,`Runtime ${o}`,...e.note?[`Note ${e.note}`]:[],"","Workspace Intelligence"," \u2713 Contract and project registry"," \u2713 Canonical model and proof-backed graph"," \u2713 Agent context, grounding, and evidence index","","Next",` ${h$2(e.workspacePath)}`," npx workspai create"," npx workspai workspace intelligence run --for-agent generic --strict --json","","Evidence .workspai/reports/INDEX.json","Guide README.md",""]}function J(e){let t=dt(e);for(let n of t)n==="\u2713 Workspace ready"?console.log(a$2.green.bold(n)):n==="Workspace Intelligence"||n==="Next"?console.log(a$2.cyan.bold(n)):n.startsWith(" \u2713")?console.log(a$2.green(n)):n.startsWith("Location")||n.startsWith("Runtime")?console.log(a$2.gray(n)):console.log(n);}function M(){return i()}var ut="transactions";function mt(){return d.join(w(),ut)}async function Ue(){let e=mt();return await b$7(e),a$4({journalDirectory:e})}async function qe(e){for(let t of y())await e.captureFile(t);}async function le(e){let t=await Ue();try{return await qe(t),await t.captureOwnedTree(e),t}catch(n){return F(t,n)}}async function yt(e){let t=await Ue();try{return await Ye(t,e),t}catch(n){return F(t,n)}}async function Ye(e,t){await qe(e),await e.captureOwnedTree(d.join(t,a$1)),await e.captureOwnedTree(d.join(t,".venv"));for(let o of [".agents",".amazonq",".claude",".cursor",".github",".grok",".vscode",".windsurf"])await e.captureOwnedTree(d.join(t,o));let n=[c,".gitignore",d.join(a$1,"workspace.json"),d.join(a$1,"toolchain.lock"),d.join(a$1,"policies.yml"),d.join(a$1,"cache-config.yml"),g$2,a$3,"pyproject.toml","poetry.toml","poetry.lock","rapidkit","rapidkit.cmd","README.md","AGENTS.md","CLAUDE.md","GEMINI.md","QWEN.md",".windsurfrules",".rapidkit-global"];for(let o of n)await e.captureFile(d.join(t,o));}async function Q(e){await e.commit(),e.journalPath&&await promises.rm(d.dirname(e.journalPath),{recursive:true,force:true}).catch(t=>e$2.debug(`Could not remove committed lifecycle journal: ${t}`));}async function F(e,t){try{await e.rollback();}catch(n){throw new AggregateError([t,n],"Workspace lifecycle failed and rollback was incomplete.")}throw t}async function X(e$1,t,n,o,i){let r=e(t,h(),n,i?.pythonEngine?{coreStatus:i.pythonEngine,...i.pythonEngineReason?{coreReason:i.pythonEngineReason}:{},...o?{pythonVersion:o}:{}}:void 0);o&&!i?.pythonEngine&&(r.metadata||(r.metadata={}),r.metadata.python={pythonVersion:o}),await c$1(e$1,r);}async function G(e){await b.outputFile(d.join(e,".gitignore"),`.venv/
2
2
  __pycache__/
3
3
  *.pyc
4
4
  .env
@@ -37,7 +37,7 @@ cache:
37
37
  prune_on_bootstrap: false
38
38
  self_heal: true
39
39
  verify_integrity: false
40
- `}async function et(){try{let{stdout:e}=await execa("go",["version"],{timeout:3e3,stdio:"pipe"}),t=e.match(/go(\d+\.\d+(?:\.\d+)?)/i);return t?t[1]:void 0}catch{return}}async function tt(){try{let{stdout:e}=await execa("dotnet",["--version"],{timeout:3e3,stdio:"pipe"}),t=e.trim();return t.length>0?t:void 0}catch{return}}async function ee(e,t,n,o,i,r){let[u,h]=await Promise.all([et(),tt()]),l=[{fileName:"workspace.json",content:Je(t,n,o,i,r)},{fileName:"toolchain.lock",content:Qe(n,o,process.version,u,h,r)},{fileName:"policies.yml",content:Xe()},{fileName:"cache-config.yml",content:Ze()}];for(let w of l)await b.outputFile(d.join(e,a$1,w.fileName),w.content,"utf-8");}async function an(e$1,t){let{workspaceName:n=d.basename(e$1),installMethod:o="venv",pythonVersion:i,profile:r,writeMarker:u=true,writeGitignore:h$1=true,onlyIfMissing:l=true}=t||{},w=[],[g,f]=await Promise.all([et(),tt()]),c$2=[{relPath:d.join(a$1,"workspace.json"),legacyRelPath:d.join(b$1,"workspace.json"),content:Je(n,o,i,r)},{relPath:d.join(a$1,"toolchain.lock"),legacyRelPath:d.join(b$1,"toolchain.lock"),content:Qe(o,i,process.version,g,f)},{relPath:d.join(a$1,"policies.yml"),legacyRelPath:d.join(b$1,"policies.yml"),content:Xe()},{relPath:d.join(a$1,"cache-config.yml"),legacyRelPath:d.join(b$1,"cache-config.yml"),content:Ze()}];for(let m of c$2){let p=d.join(e$1,m.relPath),s=d.join(e$1,m.legacyRelPath),$=await b.pathExists(p),k=await b.pathExists(s);l&&$||(l&&k?(await b.copy(s,p),w.push(m.relPath)):(await b.outputFile(p,m.content,"utf-8"),w.push(m.relPath)));}if(u&&(!await b.pathExists(d.join(e$1,c))||!l)){let p=e(n,h(),o);i&&(p.metadata||(p.metadata={}),p.metadata.python={pythonVersion:i}),await c$1(e$1,p),w.push(c);}if(h$1){let m=d.join(e$1,".gitignore");(!l||!await b.pathExists(m))&&(await G(e$1),w.push(".gitignore"));}return w}var ft={"python-only":"minimal",polyglot:"node-only",enterprise:"polyglot"};function wt(e){let t=e,n=new Set;for(;!V$1(t);){if(n.has(t))return "minimal";n.add(t);let o=ft[t];if(!o)return "minimal";t=o;}return t}var V="3.10",nt=["3.10","3.11","3.12"];async function xe(e){try{let{stdout:t}=await execa(e,["--version"],{timeout:3e3}),n=t.match(/Python (\d+\.\d+\.\d+)/);if(n)return n[1]}catch{}return null}async function vt(e,t){try{await promises.writeFile(d.join(e,".python-version"),`${t}
40
+ `}async function et(){try{let{stdout:e}=await execa("go",["version"],{timeout:3e3,stdio:"pipe"}),t=e.match(/go(\d+\.\d+(?:\.\d+)?)/i);return t?t[1]:void 0}catch{return}}async function tt(){try{let{stdout:e}=await execa("dotnet",["--version"],{timeout:3e3,stdio:"pipe"}),t=e.trim();return t.length>0?t:void 0}catch{return}}async function ee(e,t,n,o,i,r){let[u,h]=await Promise.all([et(),tt()]),l=[{fileName:"workspace.json",content:Je(t,n,o,i,r)},{fileName:"toolchain.lock",content:Qe(n,o,process.version,u,h,r)},{fileName:"policies.yml",content:Xe()},{fileName:"cache-config.yml",content:Ze()}];for(let w of l)await b.outputFile(d.join(e,a$1,w.fileName),w.content,"utf-8");}async function an(e$1,t){let{workspaceName:n=d.basename(e$1),installMethod:o="venv",pythonVersion:i,profile:r,writeMarker:u=true,writeGitignore:h$1=true,onlyIfMissing:l=true}=t||{},w=[],[g,f]=await Promise.all([et(),tt()]),c$2=[{relPath:d.join(a$1,"workspace.json"),legacyRelPath:d.join(b$1,"workspace.json"),content:Je(n,o,i,r)},{relPath:d.join(a$1,"toolchain.lock"),legacyRelPath:d.join(b$1,"toolchain.lock"),content:Qe(o,i,process.version,g,f)},{relPath:d.join(a$1,"policies.yml"),legacyRelPath:d.join(b$1,"policies.yml"),content:Xe()},{relPath:d.join(a$1,"cache-config.yml"),legacyRelPath:d.join(b$1,"cache-config.yml"),content:Ze()}];for(let m of c$2){let p=d.join(e$1,m.relPath),s=d.join(e$1,m.legacyRelPath),$=await b.pathExists(p),k=await b.pathExists(s);l&&$||(l&&k?(await b.copy(s,p),w.push(m.relPath)):(await b.outputFile(p,m.content,"utf-8"),w.push(m.relPath)));}if(u&&(!await b.pathExists(d.join(e$1,c))||!l)){let p=e(n,h(),o);i&&(p.metadata||(p.metadata={}),p.metadata.python={pythonVersion:i}),await c$1(e$1,p),w.push(c);}if(h$1){let m=d.join(e$1,".gitignore");(!l||!await b.pathExists(m))&&(await G(e$1),w.push(".gitignore"));}return w}var ft={"python-only":"minimal",polyglot:"node-only",enterprise:"polyglot"};function wt(e){let t=e,n=new Set;for(;!U(t);){if(n.has(t))return "minimal";n.add(t);let o=ft[t];if(!o)return "minimal";t=o;}return t}var V="3.10",nt=["3.10","3.11","3.12"];async function xe(e){try{let{stdout:t}=await execa(e,["--version"],{timeout:3e3}),n=t.match(/Python (\d+\.\d+\.\d+)/);if(n)return n[1]}catch{}return null}async function vt(e,t){try{await promises.writeFile(d.join(e,".python-version"),`${t}
41
41
  `,"utf-8"),e$2.debug(`Created .python-version with ${t}`);}catch(n){e$2.warn(`Failed to create .python-version: ${n}`);}}function ce(){let n=[...(process.env.PATH||"").split(d.delimiter).filter(Boolean)];for(let o of z())n.includes(o)||n.unshift(o);process.env.PATH=n.join(d.delimiter);}async function he(e,t){ce(),e.start("Checking pipx installation");try{return await execa("pipx",["--version"]),e.succeed("pipx found"),{kind:"binary"}}catch{}let n=M();try{return await execa(n,["-m","pipx","--version"]),e.succeed("pipx found"),{kind:"python-module",pythonCmd:n}}catch{}if(t)throw new d$3;try{await execa(n,["-m","pip","--version"],{timeout:2500});}catch{throw new h$1}e.stop?.();let{installPipx:o}=await b$2([{type:"confirm",name:"installPipx",message:"pipx is not installed. Install it now (user install via python -m pip)?",default:true}]);if(!o)throw new d$3;e.start("Installing pipx (user install)");try{try{await execa(n,["-m","pip","install","--user","--upgrade","pip"]);}catch{}await execa(n,["-m","pip","install","--user","--upgrade","pipx"]);}catch(i){let r=i,u=String(r?.stderr||r?.shortMessage||r?.message||"");throw new f$1("Install pipx with python -m pip",i instanceof Error?i:new Error(u))}e.succeed("pipx installed"),ce();try{return await execa(n,["-m","pipx","--version"]),{kind:"python-module",pythonCmd:n}}catch(i){let r=i,u=String(r?.stderr||r?.shortMessage||r?.message||"pipx not runnable after install");throw new f$1("Verify pipx after install",new Error(`${u}
42
42
 
43
43
  Try reopening your terminal or run: ${n} -m pipx ensurepath`))}}async function H(e,t){return e.kind==="binary"?execa("pipx",t):execa(e.pythonCmd,["-m","pipx",...t])}function ot(e){let t=e.match(/^(\d+)\.(\d+)/);return t?`${t[1]}.${t[2]}`:null}function He(e){if(!e)return null;let t=e.match(/Python\s+(\d+)\.(\d+)(?:\.\d+)?/i);return t?`${t[1]}.${t[2]}`:null}function Ie(e,t){let[n,o]=e.split(".").map(u=>Number(u)),[i,r]=t.split(".").map(u=>Number(u));return n!==i?n-i:o-r}function te(e,t){return Ie(e,t)>=0}async function kt(e){let t=new Set,n=k(14,10);for(let f of n)try{let c=await execa(f.command,f.args,{timeout:2500}),m=He(`${c.stdout||""}
@@ -120,7 +120,7 @@ for %%R in ("%USERPROFILE%\\.local\\bin\\rapidkit.exe" "%APPDATA%\\Python\\Scrip
120
120
  echo RapidKit launcher could not find a local Python CLI. 1>&2
121
121
  ${o}echo Tip: for npm-owned workspace commands, run npx --yes --package workspai workspai %* from a shell where npm is on PATH. 1>&2
122
122
  exit /b 1
123
- `}async function ge(e,t,n={}){await b.outputFile(d.join(e,"rapidkit"),xt(t,n),{encoding:"utf-8",mode:493}),await b.outputFile(d.join(e,"rapidkit.cmd"),It(t,n),"utf-8");}async function rn(e,t){let{skipGit:n=false,skipPythonEngine:o=false,testMode:i$1=false,demoMode:r=false,dryRun:u=false,yes:h=false,userConfig:l={},installMethod:w,profile:g$2,parentDirectory:f,suppressReceipt:c=false,json:m=false}=t,p=e||"rapidkit",s=f?d.resolve(f,p):d.resolve(process.cwd(),p);if(await b.pathExists(s))throw new e$1(p);if(await g(s),u){if(!m){let v=g$2||(h?"minimal":void 0),I=w||l.defaultInstallMethod||"poetry",E=l.pythonVersion||"3.10";await _t(s,p,r,l,v,I,E,n,o);}return}if(r){await Et(s,p,n);return}let $=new Set(["python-only","polyglot","enterprise"]),k=g$2||"";if(!h&&!g$2){let{selectedProfile:v}=await b$2([{type:"rawlist",name:"selectedProfile",message:"Select workspace profile:",choices:[{name:"minimal \u2014 Foundation files only (fastest bootstrap, mixed projects)",value:"minimal"},{name:"java-only \u2014 Java runtime (Spring Boot services)",value:"java-only"},{name:"python-only \u2014 Python + Poetry (FastAPI, Django, ML pipelines)",value:"python-only"},{name:"node-only \u2014 Node.js runtime (NestJS, Express, Next.js)",value:"node-only"},{name:"go-only \u2014 Go runtime (Fiber, Gin, gRPC, microservices)",value:"go-only"},{name:"dotnet-only \u2014 .NET runtime (ASP.NET Core services)",value:"dotnet-only"},{name:"polyglot \u2014 Python + Node.js + Go + Java + .NET multi-runtime workspace",value:"polyglot"},{name:"enterprise \u2014 Polyglot + governance + Sigstore verification",value:"enterprise"}],default:1}]);k=v;}else k||(k="minimal");let U=!h&&$.has(k),q=$.has(k)?o?"skip":U?(await b$2([{type:"confirm",name:"installPythonEngine",message:"Install the optional RapidKit Python engine now? (needed for Python-backed kits/modules)",default:true}])).installPythonEngine!==false?"install":"skip":"install":"skip",_e=U&&q==="install",st=typeof l.pythonVersion=="string"&&l.pythonVersion.trim().length>0?l.pythonVersion.trim():void 0,lt=w||l.defaultInstallMethod||"poetry",C=q==="install"?await Pt():{poetry:true,pipx:true,pip:true,venv:true},Ce=_e?await kt(st):{choices:nt.map(v=>({name:v,value:v})),defaultValue:V},ct=bt(lt,C),pt=[{name:C.poetry?"\u{1F3AF} Poetry (Recommended - includes virtual env + dependency mgmt)":C.pipx||C.pip?"\u{1F3AF} Poetry (Recommended) \u2014 not detected (can be installed)":"\u{1F3AF} Poetry (Recommended) \u2014 unavailable (system pipx package required)",value:"poetry"},{name:C.venv?"\u{1F4E6} pip with venv (Standard, zero extra tools)":"\u{1F4E6} pip with venv \u2014 unavailable (system venv package required)",value:"venv"},{name:C.pipx?"\u{1F527} pipx (Global isolated - RapidKit Core only, no local venv)":C.pip?"\u{1F527} pipx (Global isolated) \u2014 not detected (can be installed)":"\u{1F527} pipx (Global isolated) \u2014 unavailable (system pipx package required)",value:"pipx"}],x=_e?await b$2([{type:"rawlist",name:"pythonVersion",message:"Select minimum Python version for RapidKit:",choices:Ce.choices,default:Ce.defaultValue},{type:"rawlist",name:"installMethod",message:"How would you like to manage the workspace environment?",choices:pt,default:ct}]):await(async()=>{if(q==="skip")return {pythonVersion:l.pythonVersion||"3.10",installMethod:"venv"};let v=w||l.defaultInstallMethod||await(async()=>{try{return await execa("poetry",["--version"],{timeout:3e3}),"poetry"}catch{return e$2.warn("Poetry not found \u2014 auto-selecting venv. Pass --install-method poetry to override."),"venv"}})();return {pythonVersion:l.pythonVersion||"3.10",installMethod:v}})();if(V$1(k)){let v=b$3("Creating workspace",{component:"create",phase:"workspace.python-free"}),I=await le(s);try{await b.ensureDir(s),v.succeed("Directory created"),await X(s,p,"venv",void 0),await ee(s,p,"venv",void 0,k,{bootstrapNote:"python-engine-skipped",pythonEngine:"skipped",pythonEngineReason:"workspace-profile-does-not-install-python-at-create"}),await G(s);let E=await b$4(s,{workspaceName:p,silent:true});await Q(I),n||await Z(s,v,"Initial commit: Workspai workspace"),c||J({workspaceName:p,workspacePath:s,profile:k,projectCount:E?.projectCount??0});}catch(E){return v.fail("Failed to create workspace"),F(I,E)}return}if($.has(k)&&q==="skip"){let v=b$3("Creating workspace",{component:"create",phase:"workspace.python-engine-skipped"}),I=await le(s);try{await b.ensureDir(s),v.succeed("Directory created");let E={bootstrapNote:"python-engine-skipped",pythonEngine:"skipped",pythonEngineReason:"user-opted-out"};await X(s,p,"venv",void 0,E),await ee(s,p,"venv",void 0,k,E),await G(s),await ge(s,"venv",{pythonEngineSkipped:true});let R=await b$4(s,{workspaceName:p,silent:true});await Q(I),n||await Z(s,v,`Initial commit: Workspai workspace (${k})`),c||J({workspaceName:p,workspacePath:s,profile:k,projectCount:R?.projectCount??0,pythonEngine:"skipped",note:"Install the optional Python engine later only when a Python-backed kit needs it."});return}catch(E){return v.fail("Failed to create workspace"),F(I,E)}}{let v=M(),I=false;try{await execa(v,["--version"],{timeout:5e3}),I=true;}catch{try{await execa("python",["--version"],{timeout:5e3}),I=true;}catch{I=false;}}if(!I){let E=k,R=wt(k);if(U&&!h){console.log(a$2.yellow(`
123
+ `}async function ge(e,t,n={}){await b.outputFile(d.join(e,"rapidkit"),xt(t,n),{encoding:"utf-8",mode:493}),await b.outputFile(d.join(e,"rapidkit.cmd"),It(t,n),"utf-8");}async function rn(e,t){let{skipGit:n=false,skipPythonEngine:o=false,testMode:i$1=false,demoMode:r=false,dryRun:u=false,yes:h=false,userConfig:l={},installMethod:w,profile:g$2,parentDirectory:f,suppressReceipt:c=false,json:m=false}=t,p=e||"rapidkit",s=f?d.resolve(f,p):d.resolve(process.cwd(),p);if(await b.pathExists(s))throw new e$1(p);if(await g(s),u){if(!m){let v=g$2||(h?"minimal":void 0),I=w||l.defaultInstallMethod||"poetry",E=l.pythonVersion||"3.10";await _t(s,p,r,l,v,I,E,n,o);}return}if(r){await Et(s,p,n);return}let $=new Set(["python-only","polyglot","enterprise"]),k=g$2||"";if(!h&&!g$2){let{selectedProfile:v}=await b$2([{type:"rawlist",name:"selectedProfile",message:"Select workspace profile:",choices:[{name:"minimal \u2014 Foundation files only (fastest bootstrap, mixed projects)",value:"minimal"},{name:"java-only \u2014 Java runtime (Spring Boot services)",value:"java-only"},{name:"python-only \u2014 Python + Poetry (FastAPI, Django, ML pipelines)",value:"python-only"},{name:"node-only \u2014 Node.js runtime (NestJS, Express, Next.js)",value:"node-only"},{name:"go-only \u2014 Go runtime (Fiber, Gin, gRPC, microservices)",value:"go-only"},{name:"dotnet-only \u2014 .NET runtime (ASP.NET Core services)",value:"dotnet-only"},{name:"polyglot \u2014 Python + Node.js + Go + Java + .NET multi-runtime workspace",value:"polyglot"},{name:"enterprise \u2014 Polyglot + governance + Sigstore verification",value:"enterprise"}],default:1}]);k=v;}else k||(k="minimal");let U$1=!h&&$.has(k),q=$.has(k)?o?"skip":U$1?(await b$2([{type:"confirm",name:"installPythonEngine",message:"Install the optional RapidKit Python engine now? (needed for Python-backed kits/modules)",default:true}])).installPythonEngine!==false?"install":"skip":"install":"skip",_e=U$1&&q==="install",st=typeof l.pythonVersion=="string"&&l.pythonVersion.trim().length>0?l.pythonVersion.trim():void 0,lt=w||l.defaultInstallMethod||"poetry",C=q==="install"?await Pt():{poetry:true,pipx:true,pip:true,venv:true},Ce=_e?await kt(st):{choices:nt.map(v=>({name:v,value:v})),defaultValue:V},ct=bt(lt,C),pt=[{name:C.poetry?"\u{1F3AF} Poetry (Recommended - includes virtual env + dependency mgmt)":C.pipx||C.pip?"\u{1F3AF} Poetry (Recommended) \u2014 not detected (can be installed)":"\u{1F3AF} Poetry (Recommended) \u2014 unavailable (system pipx package required)",value:"poetry"},{name:C.venv?"\u{1F4E6} pip with venv (Standard, zero extra tools)":"\u{1F4E6} pip with venv \u2014 unavailable (system venv package required)",value:"venv"},{name:C.pipx?"\u{1F527} pipx (Global isolated - RapidKit Core only, no local venv)":C.pip?"\u{1F527} pipx (Global isolated) \u2014 not detected (can be installed)":"\u{1F527} pipx (Global isolated) \u2014 unavailable (system pipx package required)",value:"pipx"}],x=_e?await b$2([{type:"rawlist",name:"pythonVersion",message:"Select minimum Python version for RapidKit:",choices:Ce.choices,default:Ce.defaultValue},{type:"rawlist",name:"installMethod",message:"How would you like to manage the workspace environment?",choices:pt,default:ct}]):await(async()=>{if(q==="skip")return {pythonVersion:l.pythonVersion||"3.10",installMethod:"venv"};let v=w||l.defaultInstallMethod||await(async()=>{try{return await execa("poetry",["--version"],{timeout:3e3}),"poetry"}catch{return e$2.warn("Poetry not found \u2014 auto-selecting venv. Pass --install-method poetry to override."),"venv"}})();return {pythonVersion:l.pythonVersion||"3.10",installMethod:v}})();if(U(k)){let v=b$3("Creating workspace",{component:"create",phase:"workspace.python-free"}),I=await le(s);try{await b.ensureDir(s),v.succeed("Directory created"),await X(s,p,"venv",void 0),await ee(s,p,"venv",void 0,k,{bootstrapNote:"python-engine-skipped",pythonEngine:"skipped",pythonEngineReason:"workspace-profile-does-not-install-python-at-create"}),await G(s);let E=await b$4(s,{workspaceName:p,silent:true});await Q(I),n||await Z(s,v,"Initial commit: Workspai workspace"),c||J({workspaceName:p,workspacePath:s,profile:k,projectCount:E?.projectCount??0});}catch(E){return v.fail("Failed to create workspace"),F(I,E)}return}if($.has(k)&&q==="skip"){let v=b$3("Creating workspace",{component:"create",phase:"workspace.python-engine-skipped"}),I=await le(s);try{await b.ensureDir(s),v.succeed("Directory created");let E={bootstrapNote:"python-engine-skipped",pythonEngine:"skipped",pythonEngineReason:"user-opted-out"};await X(s,p,"venv",void 0,E),await ee(s,p,"venv",void 0,k,E),await G(s),await ge(s,"venv",{pythonEngineSkipped:true});let R=await b$4(s,{workspaceName:p,silent:true});await Q(I),n||await Z(s,v,`Initial commit: Workspai workspace (${k})`),c||J({workspaceName:p,workspacePath:s,profile:k,projectCount:R?.projectCount??0,pythonEngine:"skipped",note:"Install the optional Python engine later only when a Python-backed kit needs it."});return}catch(E){return v.fail("Failed to create workspace"),F(I,E)}}{let v=M(),I=false;try{await execa(v,["--version"],{timeout:5e3}),I=true;}catch{try{await execa("python",["--version"],{timeout:5e3}),I=true;}catch{I=false;}}if(!I){let E=k,R=wt(k);if(U$1&&!h){console.log(a$2.yellow(`
124
124
  \u26A0\uFE0F Python 3.10+ is not detected on this system.
125
125
  `)),console.log(a$2.cyan(`You have 3 options:
126
126
  `));let{pythonAction:D}=await b$2([{type:"rawlist",name:"pythonAction",message:"What would you like to do?",choices:[{name:"\u{1F4E5} Install Python now (I'll show you the command for your OS)",value:"install"},{name:`\u{1F504} Switch to "${R}" profile (no Python required)`,value:"fallback"},{name:"\u274C Cancel and install Python manually",value:"cancel"}]}]);if(D==="cancel"&&(console.log(a$2.cyan(`
@@ -136,9 +136,9 @@ exit /b 1
136
136
  `))),console.log(a$2.gray(` After installing, run: npx workspai ${p}
137
137
  `)),process.exit(0);}if(D==="fallback"&&(console.log(a$2.green(`
138
138
  \u2705 Switching to "${R}" profile (no Python required).
139
- `)),k=R,V$1(R))){let A=b$3("Creating workspace",{component:"create",phase:"workspace.python-free"}),Y=await le(s);try{await b.ensureDir(s),A.succeed("Directory created"),await X(s,p,"venv",void 0),await ee(s,p,"venv",void 0,R,{profileRequested:E,bootstrapNote:"python-free-fallback",pythonEngine:"skipped",pythonEngineReason:"python-runtime-unavailable"}),await G(s);let fe=await b$4(s,{workspaceName:p,silent:true});await Q(Y),n||await Z(s,A,`Initial commit: Workspai workspace (${R} profile)`),c||J({workspaceName:p,workspacePath:s,profile:R,projectCount:fe?.projectCount??0,note:`Requested ${E}; used ${R} because Python was unavailable.`});return}catch(fe){return A.fail("Failed to create workspace"),F(Y,fe)}}}else if(console.log(a$2.yellow(`
139
+ `)),k=R,U(R))){let A=b$3("Creating workspace",{component:"create",phase:"workspace.python-free"}),Y=await le(s);try{await b.ensureDir(s),A.succeed("Directory created"),await X(s,p,"venv",void 0),await ee(s,p,"venv",void 0,R,{profileRequested:E,bootstrapNote:"python-free-fallback",pythonEngine:"skipped",pythonEngineReason:"python-runtime-unavailable"}),await G(s);let fe=await b$4(s,{workspaceName:p,silent:true});await Q(Y),n||await Z(s,A,`Initial commit: Workspai workspace (${R} profile)`),c||J({workspaceName:p,workspacePath:s,profile:R,projectCount:fe?.projectCount??0,note:`Requested ${E}; used ${R} because Python was unavailable.`});return}catch(fe){return A.fail("Failed to create workspace"),F(Y,fe)}}}else if(console.log(a$2.yellow(`
140
140
  \u26A0\uFE0F Python not detected. Auto-switching to "${R}" profile (no Python required).
141
- `)),k=R,V$1(R)){let D=b$3("Creating workspace",{component:"create",phase:"workspace.python-free"}),A=await le(s);try{await b.ensureDir(s),D.succeed("Directory created"),await X(s,p,"venv",void 0),await ee(s,p,"venv",void 0,R,{profileRequested:E,bootstrapNote:"python-free-fallback",pythonEngine:"skipped",pythonEngineReason:"python-runtime-unavailable"}),await G(s);let Y=await b$4(s,{workspaceName:p,silent:true});await Q(A),n||await Z(s,D,`Initial commit: Workspai workspace (${R})`),c||J({workspaceName:p,workspacePath:s,profile:R,projectCount:Y?.projectCount??0,note:`Requested ${E}; used ${R} because Python was unavailable.`});return}catch(Y){return D.fail("Failed to create workspace"),F(A,Y)}}}}if(x.installMethod==="venv"&&!C.venv){let v=await xe(i()),I=v?ot(v):null;throw new g$1(`python${I||x.pythonVersion}-venv`,d.basename(s))}if(x.installMethod==="pipx"&&!C.pipx&&!C.pip)throw new h$1;if(x.installMethod==="poetry"&&!C.poetry&&!C.pipx&&!C.pip)throw new c$2;let _=b$3("Creating directory",{component:"create",phase:"workspace.directory"}),Ae=await le(s);try{await b.ensureDir(s),_.succeed("Directory created"),_.start("Detecting Python version");let v=null,I=await it(x.pythonVersion);if(I)v=await xe(I),v?(e$2.info(` Detected Python ${v}`),_.succeed(`Python ${v} detected`)):_.warn("Could not detect exact Python version");else {let R=M();v=await xe(R),v?_.succeed(`Python ${v} detected`):_.warn("Could not detect Python version, proceeding with defaults");}if(await X(s,p,x.installMethod,v||void 0),await ee(s,p,x.installMethod,v||x.pythonVersion,k||g$2),await G(s),await Be(s,p),x.installMethod==="poetry")try{await at(s,x.pythonVersion,_,i$1,l,h);}catch(R){let ne=R?.details||R?.message||String(R);if(ne.includes("pyenv")||ne.includes("exit status 127")||ne.includes("returned non-zero exit status 127")){_.warn("Poetry encountered Python discovery issues, trying venv method"),e$2.debug(`Poetry error (attempting venv fallback): ${ne}`);try{await Ee(s,x.pythonVersion,_,i$1,l),x.installMethod="venv";}catch(A){throw A}}else throw R}else x.installMethod==="venv"?await Ee(s,x.pythonVersion,_,i$1,l):await rt(s,_,i$1,l,h);v&&await vt(s,v),await ge(s,x.installMethod),_.succeed("Workspai environment ready!");let E=await b$4(s,{workspaceName:p,silent:true});await Q(Ae),t.skipGit||await Z(s,_,"Initial commit: Workspai environment"),c||J({workspaceName:p,workspacePath:s,profile:k,projectCount:E?.projectCount??0,pythonEngine:"installed",pythonVersion:x.pythonVersion,installMethod:x.installMethod});}catch(v){return _.fail("Failed to create Workspai environment"),F(Ae,v)}}async function it(e){let t=[];if(!b$5())try{let{stdout:r}=await execa("pyenv",["which","python"]),u=r.trim();u&&t.push(u);}catch{}let n=Number(e.split(".")[1]),o=k(n,10).map(r=>r.command).filter(Boolean);t.push(`python${e}`,...o,...j());let i=[...new Set(t)];for(let r of i)try{let u=r==="py"?["-3","--version"]:["--version"],h=r==="py"?["-3","-c","import sys; sys.exit(0)"]:["-c","import sys; sys.exit(0)"],{stdout:l}=await execa(r,u,{timeout:2e3}),w=l.match(/Python (\d+\.\d+)/)?.[1];if(w&&te(w,e))return await execa(r,h,{timeout:2e3}),r}catch{continue}return null}async function at(e,t,n,o,i,r=false){await Rt(n,r),n.start("Finding Python interpreter");let u=await it(t);u?(e$2.debug(`Found working Python: ${u}`),n.succeed("Python found")):n.warn("Could not verify Python path, proceeding with default"),n.start("Initializing Poetry project");let h=d.join(e,"pyproject.toml"),w=(await b.pathExists(h)?await promises.readFile(h,"utf-8"):"").includes("rapidkit-core");if(w)n.succeed("Poetry project initialized");else {await execa("poetry",["init","--no-interaction","--python",`^${t}`],{cwd:e}),n.succeed("Poetry project initialized");let m=await promises.readFile(h,"utf-8");m.includes("[tool.poetry]")?m=m.replace("[tool.poetry]",`[tool.poetry]
141
+ `)),k=R,U(R)){let D=b$3("Creating workspace",{component:"create",phase:"workspace.python-free"}),A=await le(s);try{await b.ensureDir(s),D.succeed("Directory created"),await X(s,p,"venv",void 0),await ee(s,p,"venv",void 0,R,{profileRequested:E,bootstrapNote:"python-free-fallback",pythonEngine:"skipped",pythonEngineReason:"python-runtime-unavailable"}),await G(s);let Y=await b$4(s,{workspaceName:p,silent:true});await Q(A),n||await Z(s,D,`Initial commit: Workspai workspace (${R})`),c||J({workspaceName:p,workspacePath:s,profile:R,projectCount:Y?.projectCount??0,note:`Requested ${E}; used ${R} because Python was unavailable.`});return}catch(Y){return D.fail("Failed to create workspace"),F(A,Y)}}}}if(x.installMethod==="venv"&&!C.venv){let v=await xe(i()),I=v?ot(v):null;throw new g$1(`python${I||x.pythonVersion}-venv`,d.basename(s))}if(x.installMethod==="pipx"&&!C.pipx&&!C.pip)throw new h$1;if(x.installMethod==="poetry"&&!C.poetry&&!C.pipx&&!C.pip)throw new c$2;let _=b$3("Creating directory",{component:"create",phase:"workspace.directory"}),Ae=await le(s);try{await b.ensureDir(s),_.succeed("Directory created"),_.start("Detecting Python version");let v=null,I=await it(x.pythonVersion);if(I)v=await xe(I),v?(e$2.info(` Detected Python ${v}`),_.succeed(`Python ${v} detected`)):_.warn("Could not detect exact Python version");else {let R=M();v=await xe(R),v?_.succeed(`Python ${v} detected`):_.warn("Could not detect Python version, proceeding with defaults");}if(await X(s,p,x.installMethod,v||void 0),await ee(s,p,x.installMethod,v||x.pythonVersion,k||g$2),await G(s),await Be(s,p),x.installMethod==="poetry")try{await at(s,x.pythonVersion,_,i$1,l,h);}catch(R){let ne=R?.details||R?.message||String(R);if(ne.includes("pyenv")||ne.includes("exit status 127")||ne.includes("returned non-zero exit status 127")){_.warn("Poetry encountered Python discovery issues, trying venv method"),e$2.debug(`Poetry error (attempting venv fallback): ${ne}`);try{await Ee(s,x.pythonVersion,_,i$1,l),x.installMethod="venv";}catch(A){throw A}}else throw R}else x.installMethod==="venv"?await Ee(s,x.pythonVersion,_,i$1,l):await rt(s,_,i$1,l,h);v&&await vt(s,v),await ge(s,x.installMethod),_.succeed("Workspai environment ready!");let E=await b$4(s,{workspaceName:p,silent:true});await Q(Ae),t.skipGit||await Z(s,_,"Initial commit: Workspai environment"),c||J({workspaceName:p,workspacePath:s,profile:k,projectCount:E?.projectCount??0,pythonEngine:"installed",pythonVersion:x.pythonVersion,installMethod:x.installMethod});}catch(v){return _.fail("Failed to create Workspai environment"),F(Ae,v)}}async function it(e){let t=[];if(!b$5())try{let{stdout:r}=await execa("pyenv",["which","python"]),u=r.trim();u&&t.push(u);}catch{}let n=Number(e.split(".")[1]),o=k(n,10).map(r=>r.command).filter(Boolean);t.push(`python${e}`,...o,...j());let i=[...new Set(t)];for(let r of i)try{let u=r==="py"?["-3","--version"]:["--version"],h=r==="py"?["-3","-c","import sys; sys.exit(0)"]:["-c","import sys; sys.exit(0)"],{stdout:l}=await execa(r,u,{timeout:2e3}),w=l.match(/Python (\d+\.\d+)/)?.[1];if(w&&te(w,e))return await execa(r,h,{timeout:2e3}),r}catch{continue}return null}async function at(e,t,n,o,i,r=false){await Rt(n,r),n.start("Finding Python interpreter");let u=await it(t);u?(e$2.debug(`Found working Python: ${u}`),n.succeed("Python found")):n.warn("Could not verify Python path, proceeding with default"),n.start("Initializing Poetry project");let h=d.join(e,"pyproject.toml"),w=(await b.pathExists(h)?await promises.readFile(h,"utf-8"):"").includes("rapidkit-core");if(w)n.succeed("Poetry project initialized");else {await execa("poetry",["init","--no-interaction","--python",`^${t}`],{cwd:e}),n.succeed("Poetry project initialized");let m=await promises.readFile(h,"utf-8");m.includes("[tool.poetry]")?m=m.replace("[tool.poetry]",`[tool.poetry]
142
142
  package-mode = false`):m.includes("[project]")&&(m.includes("[build-system]")?m=m.replace("[build-system]",`
143
143
  [tool.poetry]
144
144
  package-mode = false
@@ -0,0 +1 @@
1
+ import {j,m,e}from'./chunk-7EMG3C3H.js';import {u}from'./chunk-VQZ5PI5J.js';import {t}from'./chunk-ODK4LCEL.js';import d from'path';import f from'fs-extra';import {parse}from'yaml';import k from'fs';var G=new Set(["backend","desktop","extension","service","frontend","worker","agent","gateway","platform","library","infra","docs","test-suite","unknown"]),O=new Set([".git",".workspai","vendor","node_modules","test","tests","testdata","fixtures","samples","examples","third_party"]),F=new Set([...O,".cache",".venv","build","dist","target"]);async function I(e){let n=0,t=async(o,r)=>{if(r>5)return false;let s;try{s=await f.readdir(o,{withFileTypes:true});}catch{return false}for(let c of s.sort((u,a)=>u.name.localeCompare(a.name))){if(c.isFile()&&c.name==="main.go"){let u=await f.readFile(d.join(o,c.name),"utf8").catch(()=>"");if(/^\s*package\s+main\b/m.test(u)&&(n+=1,n>1))return true}if(c.isDirectory()&&!O.has(c.name)&&await t(d.join(o,c.name),r+1))return true}return false};return t(e,0)}async function M(e,n){if(n!=="c"&&n!=="cpp")return false;let t=new Set,o=async(r,s)=>{if(s>3||t.size>=3)return;let c;try{c=await f.readdir(r,{withFileTypes:true});}catch{return}for(let u of c)if(u.isFile()){let a=u.name.toLowerCase();a==="cmakelists.txt"||a==="meson.build"?t.add("native"):a==="pyproject.toml"||a==="setup.py"?t.add("python"):a==="description"&&d.basename(r).toLowerCase()==="r"?t.add("r"):a.endsWith(".gemspec")?t.add("ruby"):a==="pom.xml"||a==="build.gradle"||a==="build.gradle.kts"?t.add("java"):a==="cargo.toml"?t.add("rust"):a==="go.mod"?t.add("go"):a==="package.json"&&t.add("node");}else u.isDirectory()&&!F.has(u.name)&&await o(d.join(r,u.name),s+1);};return await o(e,0),t.has("native")&&t.size>=3}async function K(e){if((((await f.readFile(d.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 o of ["settings.gradle","settings.gradle.kts"]){let r=await f.readFile(d.join(e,o),"utf8").catch(()=>"");if(!r)continue;if(new Set([...r.matchAll(/['"](:[^'"]+)['"]/gu)].map(c=>c[1])).size>=2)return true}return false}async function $(e){for(let n of ["compose.yaml","compose.yml","docker-compose.yaml","docker-compose.yml"]){let t=await f.readFile(d.join(e,n),"utf8").catch(()=>"");if(t)try{let r=parse(t)?.services??{},s=Object.entries(r).map(([i,p])=>{let g=(()=>{if(typeof p?.build=="string")return `${p.build}|Dockerfile`;if(!p?.build||typeof p.build!="object")return null;let l=p.build.context;if(typeof l!="string"||l.length===0)return null;let j="dockerfile"in p.build&&typeof p.build.dockerfile=="string"?p.build.dockerfile:"Dockerfile";return `${l}|${j}`})();return g?{serviceName:i,service:p,identity:g.replaceAll("\\","/").replace(/\/$/,"")}:null}).filter(i=>i!==null);if(new Set(s.map(i=>i.identity)).size<2)continue;let u=new Set(s.map(i=>i.serviceName)),a=new Set(s.filter(({service:i})=>Array.isArray(i.ports)&&i.ports.length>0).map(({identity:i})=>i)),y=s.some(({service:i})=>(Array.isArray(i.depends_on)?i.depends_on:i.depends_on&&typeof i.depends_on=="object"?Object.keys(i.depends_on):[]).some(g=>typeof g=="string"&&u.has(g)));if(a.size>=2||y)return true}catch{}}return false}async function A(e){try{if(!await f.pathExists(e))return null;let n=await f.readJSON(e);return n&&typeof n=="object"?n:null}catch{return null}}async function z(e){for(let n of e){let t=await A(n);if(t)return t}return null}function S(e){if(typeof e!="string")return null;let n=e.trim().toLowerCase();return G.has(n)?n==="service"?"backend":n:null}function ne(e){switch(e){case "backend":case "service":case "worker":return "backend";case "agent":return "agent";case "gateway":return "gateway";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 oe(e$1,n,t={}){let o=n??await z(u(e$1,"project.json")),r=j(o)?null:o,s=r===null&&o!==null?m(e$1,null):null,c=S(r?.kind)??S(r?.type);if(c)return c==="worker"&&typeof r?.framework=="string"&&(r.framework.trim().toLowerCase()==="microsoft-agent-framework"||r.framework.trim().toLowerCase()==="openai-agents"||r.framework.trim().toLowerCase()==="google-adk")?"agent":c;let u$1=typeof r?.kit_name=="string"?r.kit_name:typeof r?.kit=="string"?r.kit:t.kit,a=typeof r?.framework=="string"?r.framework:t.framework??s?.key,y=typeof r?.runtime=="string"?r.runtime:t.runtime??s?.runtime,i=`${typeof u$1=="string"?u$1:""} ${a??""} ${y??""}`.trim().toLowerCase();if(await $(e$1))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(typeof u$1=="string"&&u$1.trim().toLowerCase().startsWith("gateway.")||typeof a=="string"&&a.trim().toLowerCase()==="openrouter")return "gateway";let p=await f.readFile(d.join(e$1,"Cargo.toml"),"utf8").catch(()=>""),g=/^\s*\[workspace\]\s*$/m.test(p)&&!/^\s*\[package\]\s*$/m.test(p),l=await A(d.join(e$1,"package.json"));if(l!==null&&(Array.isArray(l.workspaces)||l.workspaces!==null&&typeof l.workspaces=="object")||g||e(e$1))return "platform";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";if(l){let m={...l.dependencies??{},...l.devDependencies??{}},D=l.scripts??{},b=Object.values(D).filter(w=>typeof w=="string").join(" ").toLowerCase(),_=l.engines??{},N=Array.isArray(l.categories)?l.categories.filter(w=>typeof w=="string"):[];if(m["@tauri-apps/api"]||m["@tauri-apps/cli"]||await f.pathExists(d.join(e$1,"src-tauri","tauri.conf.json"))||await f.pathExists(d.join(e$1,"src-tauri","tauri.conf.json5"))||m.electron||m["@electron-forge/cli"]||b.includes("electron-forge")||b.includes("electron "))return "desktop";if(typeof _.vscode=="string"||N.some(w=>w.toLowerCase()==="extension packs")||l.publisher&&(l.activationEvents||l.contributes))return "extension";if(m.next||m.react||m.vue||m.svelte||m.vite||m["@angular/core"]||b.includes("next ")||b.includes("vite "))return "frontend";if(l.private===true&&!m.express&&!m["@nestjs/core"])return "library"}return g||await K(e$1)||await f.pathExists(d.join(e$1,"go.work"))||await f.pathExists(d.join(e$1,"go.mod"))&&await I(e$1)?"platform":await M(e$1,y)?"library":await f.pathExists(d.join(e$1,"compose.yaml"))||await f.pathExists(d.join(e$1,"compose.yml"))||await f.pathExists(d.join(e$1,"docker-compose.yml"))||await f.pathExists(d.join(e$1,"docker-compose.yaml"))||await f.pathExists(d.join(e$1,"terraform.tf"))?"infra":"backend"}var B={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",".gitlab/CODEOWNERS","CODEOWNERS","docs/CODEOWNERS","OWNERS","OWNERS_ALIASES","MAINTAINERS"]},J=/(?:^|[-_.])(?:release|publish|publishing|distribution)(?:[-_.]|$)/i,V={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 U(e,n){let t=[];for(let o of n)try{await k.promises.access(d.join(e,o),k.constants.F_OK),t.push(o);}catch{}return t}async function Y(e,n){let t=["README.md","CONTRIBUTING.md","DEVELOPMENT.md","docs/devel/README.md"],o=[];for(let r of t)try{let s=d.join(e,r),c=await k.promises.stat(s);if(!c.isFile()||c.size>1024*1024)continue;let u=await k.promises.readFile(s,"utf8");n.test(u)&&o.push(r);}catch{}return o}async function q(e){let n=d.join(e,".github","workflows");try{return (await k.promises.readdir(n,{withFileTypes:true})).filter(o=>o.isFile()&&/\.(?:ya?ml)$/i.test(o.name)&&J.test(o.name)).map(o=>`.github/workflows/${o.name}`).sort()}catch{return []}}function H(e,n){let t$1=e?.[n];return t$1?.mode?{status:t$1.mode==="external"?"external-declared":"repository",provider:t$1.provider?.trim()||null,evidence:[t.workspaceContract],reference:t$1.reference?.trim()||null}:null}async function v(e,n,t){let o=H(n,t);if(o)return o;let r=[...await U(e,B[t]),...t==="release"?await q(e):[]];if(r.length>0)return {status:"repository",provider:null,evidence:r,reference:null};let s=await Y(e,V[t]);return s.length>0?{status:"external-observed",provider:null,evidence:s,reference:null}:{status:"unknown",provider:null,evidence:[],reference:null}}async function ue(e){let[n,t,o]=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:n,release:t,ownership:o}}export{ne as a,oe as b,ue as c};
@@ -1,2 +1,2 @@
1
- import {b as b$1}from'./chunk-COICGD62.js';import {b}from'./chunk-HRVHQBTA.js';import {r,f,g}from'./chunk-SEZTSMRR.js';import {d}from'./chunk-IHWS3ALP.js';import {h,g as g$1}from'./chunk-BLEIUQL6.js';import {q,p}from'./chunk-ODK4LCEL.js';import E from'path';import A from'fs-extra';var re=q.agentContext,se=p.agentContext;function ne(e){if(typeof e!="string"||!e.trim()||e==="true")return "generic";let t=e.trim().toLowerCase();return t==="codex"||t==="claude"||t==="cursor"||t==="gemini"||t==="qwen"||t==="kimi"||t==="grok"||t==="copilot"||t==="windsurf"||t==="amazon-q"||t==="orca"?t:"generic"}function G(e){return `npx --yes --package workspai workspai ${e}`.trim()}function x(e){return `npx workspai ${e}`.trim()}async function C(e,t,i){let s=E.join(e,t);if(!await A.pathExists(s))return null;try{let n=await A.readJson(s);return typeof n!="object"||n===null||!("schemaVersion"in n)||n.schemaVersion!==i?null:n}catch{return null}}function m(e){return {id:e.id,scope:e.scope,display:x(e.args),execute:G(e.args),description:e.description,...e.project?{project:e.project}:{},freshness:f({id:`command.${e.id}`,label:`${e.id} command`,scope:"command",value:{display:x(e.args),execute:G(e.args)},...e.project?{project:e.project}:{},freshness:{kind:"derived",category:"structure",generatedAt:e.generatedAt,now:e.now,sourceArtifact:p.model,sourcePath:`safeCommands.${e.id}`,reason:"Safe command surfaces are derived from workspace model command capabilities."}}).freshness}}function L(e,t){return `workspace run ${t} --scope project:${e.name}`}function ae(e){return (e.startsWith("project:")?e.slice(8):e).trim().toLowerCase()}function oe(e){return [e.name,e.path,E.basename(e.path),e.absolutePath].filter(t=>typeof t=="string"&&t.trim().length>0).map(t=>t.trim().toLowerCase())}function ie(e,t,i){let s={generatedAt:e.generatedAt,now:i},n=[m({id:"workspace.model",scope:"workspace",args:"workspace model --json",description:"Read the canonical workspace intelligence model.",...s}),m({id:"workspace.graph.entities",scope:"workspace",args:"workspace graph entities --json",description:"Query proof-backed workspace entities without loading the full graph.",...s}),m({id:"workspace.graph.evidence",scope:"workspace",args:"workspace graph evidence <entity-or-relation> --json",description:"Resolve portable evidence for a graph entity or relation.",...s}),m({id:"workspace.graph.path",scope:"workspace",args:"workspace graph path <from> <to> --json",description:"Find a shortest proof-carrying path between workspace entities.",...s}),m({id:"workspace.doctor",scope:"workspace",args:"doctor workspace --json",description:"Check workspace health before claiming verification.",...s}),m({id:"workspace.pipeline",scope:"workspace",args:"pipeline --json",description:"Run the governed sync, doctor, analyze, readiness, and autopilot loop.",...s}),m({id:"workspace.contract.verify",scope:"workspace",args:"workspace contract verify --json",description:"Verify workspace contract and dependency edges.",...s}),m({id:"workspace.verify",scope:"workspace",args:"workspace verify --json",description:"Evaluate evidence freshness and verification gates before release decisions.",...s})],c=t?[t]:e.projects;for(let a of c)a.commands.fleetStages.includes("test")&&n.push(m({id:`project.${a.name}.test`,scope:"project",project:a.name,args:L(a,"test"),description:`Run tests for ${a.name} through workspace orchestration.`,...s})),a.commands.fleetStages.includes("build")&&n.push(m({id:`project.${a.name}.build`,scope:"project",project:a.name,args:L(a,"build"),description:`Build ${a.name} through workspace orchestration.`,...s}));return n}function ce(e){return e.commands.fleetStages.filter(t=>t==="test"||t==="build").map(t=>`workspace run ${t}`)}function pe(e,t){if(!t?.startsWith("project:"))return;let i=ae(t);if(i)return e.projects.find(s=>oe(s).includes(i))}function de(e,t,i){let s=[...e.validation?.issues??[]];t?.startsWith("project:")&&!i&&s.push({severity:"error",code:"context.scope.project.missing",message:`Requested project scope was not found: ${t}`,target:t});let n=s.filter(a=>a.severity==="error").length,c=s.filter(a=>a.severity==="warning").length;return {status:n>0?"failed":c>0?"warning":"passed",errors:n,warnings:c,issues:s}}async function me(e,t){let i=[],s=[];for(let[n,c]of Object.entries(e.evidence))c&&await g$1(t,c.path)!==null?i.push(`${n}: ${c.path}`):s.push(n);return {available:i.sort(),missing:s.sort()}}function le(e){let t=e.summary.projectCount,i=e.summary.runtimes.length?`${e.summary.runtimes.join(", ")} runtime coverage`:"no runtime coverage",s=e.identity.surfaces.length?e.identity.surfaces.join(", "):"no detected surfaces";return `${e.workspace.name} is a ${e.identity.workspaceType} with ${t} project${t===1?"":"s"}, ${i}, and ${s}.`}function ge(e){let t=["Do not claim a command passed unless a report or command output proves it.","Do not infer secrets or environment values from file names.","Do not change project scope without checking the selected project."];return e.contracts.exists||t.push("Workspace contract is missing; dependency and API edges may be incomplete."),((e.summary.extendedProjects??0)>0||e.summary.observedProjects>0)&&t.push("Some projects use extended or observed support tiers; command coverage may be partial."),t}async function We(e){let t=e.model??await r({workspacePath:e.workspacePath,includeEvidence:e.includeEvidence===true,observableScanDepth:e.observableScanDepth,now:e.now}),i=ne(e.agent),s=pe(t,e.scope),n=de(t,e.scope,s);if(e.strict===true&&n.status!=="passed"){let r=n.issues.map(g=>`${g.severity}:${g.code}:${g.target}`).join(", ");throw new Error(`Workspace context strict validation failed: ${r}`)}let c=e.now??new Date,a=t.facts??[],K=new Set((s?[s]:t.projects).map(r=>r.name)),R=a.filter(r=>r.project?K.has(r.project):true),H=(s?[s]:t.projects).map(r=>{let g=R.filter(p=>p.project===r.name);return {name:r.name,path:r.path,kind:r.kind,category:r.category,runtime:r.runtime,framework:r.frameworkDisplayName,...r.generator?{generator:r.generator}:{},createCapability:r.createCapability,supportTier:r.supportTier,...r.governance?{governance:r.governance}:{},safeCommands:ce(r),importantFiles:r.importantFiles,facts:g}}),S=await me(t,e.workspacePath),F=E.join(e.workspacePath,p.knowledgeGraph),u=await A.pathExists(F)?await A.readJson(F).catch(()=>null):null,N=false;if(u?.schemaVersion===q.knowledgeGraph)try{b(u,t),N=true;}catch{}let $=le(t),M=ie(t,s,c),b$2=await C(e.workspacePath,p.impact,q.impact),l=await C(e.workspacePath,p.doctor,q.doctor),v=await C(e.workspacePath,p.analyze,q.analyze),k=await C(e.workspacePath,p.readiness,q.readiness),h=await C(e.workspacePath,p.verify,q.verify),w=await C(e.workspacePath,p.explain,q.explain),f$1=await C(e.workspacePath,p.diff,q.diff),B=b$2?.summary?{changed:b$2.summary.changed,risk:b$2.summary.risk,affectedProjects:b$2.summary.affectedProjects,blastRadius:b$2.summary.blastRadius,recommendedCommands:b$2.summary.recommendedCommands}:void 0,U=l?.summary?{verdict:l.summary.verdict,totalIssues:l.summary.totalIssues,advisoryFindings:l.summary.advisoryFindings,blockingFindings:l.summary.blockingFindings,unknownFindings:l.summary.unknownFindings,hasSystemErrors:l.summary.hasSystemErrors,topSignals:(()=>{let r=Array.isArray(l.projects)?l.projects:[],g=[];for(let p of r.slice(0,6)){let te=Array.isArray(p.probes)?p.probes:[];for(let y of te.slice(0,10))(y?.status==="fail"||y?.severity==="error")&&g.push({label:y.label,scope:y.scope,issueClass:y.issueClass,status:y.status,severity:y.severity,recommendation:y.recommendation});}return g.slice(0,8)})()}:void 0,J=v?.summary?{score:v.summary.score,verdict:v.summary.verdict,findingCounts:v.summary.findings,topFindings:(Array.isArray(v.findings)?v.findings:[]).filter(p=>p?.severity==="fail"||p?.severity==="warn").slice(0,8).map(p=>({severity:p.severity,title:p.title,target:p.target,remediation:p.remediation}))}:void 0,X=k?{overallStatus:k.overallStatus,blocking:k.blocking,blockingReasons:k.blockingReasons,evidencePath:k.evidencePath,gates:Array.isArray(k.gates)?k.gates.slice(0,6).map(r=>({gate:r.gate,status:r.status,summary:r.summary})):void 0}:void 0,Q=h?.summary?{verdict:h.summary.verdict,exitCode:h.summary.exitCode,stepsFailed:h.summary.stepsFailed,stepsMissing:h.summary.stepsMissing,blockingReasons:h.blockingReasons,missingEvidence:h.missingEvidence}:void 0,Y=w?{summary:w.summary,blockingReasons:w.blockingReasons,releaseVerdict:w.releaseVerdict,evidenceFreshness:w.evidenceFreshness,sections:Array.isArray(w.sections)?w.sections.slice(0,4).map(r=>({id:r.id,title:r.title,body:r.body})):void 0}:void 0,Z=f$1?.summary?{changed:f$1.summary.changed,addedProjects:f$1.summary.addedProjects,removedProjects:f$1.summary.removedProjects,changedProjects:f$1.summary.changedProjects,workspaceChanges:f$1.summary.workspaceChanges,validationChanges:f$1.summary.validationChanges,gitChangedFiles:f$1.summary.gitChangedFiles}:void 0,ee=M.map(r=>f({id:`context.command.${r.id}`,label:`${r.id} safe command`,scope:"command",value:{display:r.display,execute:r.execute,scope:r.scope},...r.project?{project:r.project}:{},freshness:{kind:"derived",category:"structure",generatedAt:t.generatedAt,now:c,sourceArtifact:p.agentContext,sourcePath:`safeCommands.${r.id}`,reason:"Context safe commands are derived from workspace model command capabilities."}})),I=[...R,...ee],W=g({facts:I,generatedAt:c.toISOString(),now:c}),j=b$1();return {schemaVersion:re,generatedAt:c.toISOString(),agent:i,workspaceSummary:$,modelRef:p.model,knowledgeGraph:{artifact:p.knowledgeGraph,schemaVersion:q.knowledgeGraph,available:N,...typeof u?.quality?.entityCount=="number"?{entityCount:u.quality.entityCount}:{},...typeof u?.quality?.relationCount=="number"?{relationCount:u.quality.relationCount}:{},...typeof u?.quality?.proofCount=="number"?{proofCount:u.quality.proofCount}:{},queryCommands:[x("workspace graph search <query> --limit 12 --json"),x("workspace graph entities [kind] --json"),x("workspace graph evidence <entity-or-relation> --json"),x("workspace graph path <from> <to> --json")]},intelligenceChain:{schemaVersion:j.schemaVersion,contractPath:j.contractPath,currentStep:"context",canonicalReadOrder:[...j.consumers.agents.canonicalReadOrder]},workspace:{name:t.workspace.name,root:`workspace:${t.workspace.name}`,type:t.identity.workspaceType,...t.workspace.profile?{profile:t.workspace.profile}:{}},scope:{requested:e.scope??"workspace",...s?{activeProject:s.name}:{}},projects:H,safeCommands:M,facts:I,factFreshness:W,evidence:S,policies:{mode:t.policies.mode,source:t.policies.source},contracts:{exists:t.contracts.exists,path:t.contracts.workspaceContractPath},validation:n,agentInstructions:[`Read \`${p.agentIndex}\` first, then this context pack and linked evidence reports.`,"Use `workspace graph search <query> --limit 12 --json` for bounded, proof-backed retrieval before loading the full graph.",`Load \`${p.knowledgeGraph}\` only when a complete graph export is explicitly required.`,"Use this context as the workspace source of truth before inspecting random files.","Prefer workspace-level evidence over generic framework assumptions.","Use `display` commands when explaining steps to a human.","Use `execute` commands when launching commands from automation or tooling.","Treat `facts[].freshness.verifyBeforeUse` as a hard refresh requirement before using that fact in advice, fixes, or release decisions.","Do not carry extracted facts beyond their freshness contract; re-read or regenerate evidence when the contract says stale, unknown, live, or verify-before-use.","Keep project-scoped advice tied to the active project scope.","Regenerate stale grounding with `npx workspai workspace agent-sync --write --refresh-context`."],unsafeAssumptions:[...ge(t),...W.verifyBeforeUseFacts>0?[`${W.verifyBeforeUseFacts} fact(s) require verification before use; do not treat them as durable workspace structure.`]:[]],humanSummary:[$,`Evidence available: ${S.available.length}. Missing evidence groups: ${S.missing.join(", ")||"none"}.`,s?`Active project scope: ${s.name} (${s.frameworkDisplayName}).`:"Scope: whole workspace."].join(`
1
+ import {b as b$1}from'./chunk-COICGD62.js';import {b}from'./chunk-5OKNWBAN.js';import {r,f,g}from'./chunk-QDM6TWFK.js';import {d}from'./chunk-MD4CHXV3.js';import {h,g as g$1}from'./chunk-BLEIUQL6.js';import {q,p}from'./chunk-ODK4LCEL.js';import E from'path';import A from'fs-extra';var re=q.agentContext,se=p.agentContext;function ne(e){if(typeof e!="string"||!e.trim()||e==="true")return "generic";let t=e.trim().toLowerCase();return t==="codex"||t==="claude"||t==="cursor"||t==="gemini"||t==="qwen"||t==="kimi"||t==="grok"||t==="copilot"||t==="windsurf"||t==="amazon-q"||t==="orca"?t:"generic"}function G(e){return `npx --yes --package workspai workspai ${e}`.trim()}function x(e){return `npx workspai ${e}`.trim()}async function C(e,t,i){let s=E.join(e,t);if(!await A.pathExists(s))return null;try{let n=await A.readJson(s);return typeof n!="object"||n===null||!("schemaVersion"in n)||n.schemaVersion!==i?null:n}catch{return null}}function m(e){return {id:e.id,scope:e.scope,display:x(e.args),execute:G(e.args),description:e.description,...e.project?{project:e.project}:{},freshness:f({id:`command.${e.id}`,label:`${e.id} command`,scope:"command",value:{display:x(e.args),execute:G(e.args)},...e.project?{project:e.project}:{},freshness:{kind:"derived",category:"structure",generatedAt:e.generatedAt,now:e.now,sourceArtifact:p.model,sourcePath:`safeCommands.${e.id}`,reason:"Safe command surfaces are derived from workspace model command capabilities."}}).freshness}}function L(e,t){return `workspace run ${t} --scope project:${e.name}`}function ae(e){return (e.startsWith("project:")?e.slice(8):e).trim().toLowerCase()}function oe(e){return [e.name,e.path,E.basename(e.path),e.absolutePath].filter(t=>typeof t=="string"&&t.trim().length>0).map(t=>t.trim().toLowerCase())}function ie(e,t,i){let s={generatedAt:e.generatedAt,now:i},n=[m({id:"workspace.model",scope:"workspace",args:"workspace model --json",description:"Read the canonical workspace intelligence model.",...s}),m({id:"workspace.graph.entities",scope:"workspace",args:"workspace graph entities --json",description:"Query proof-backed workspace entities without loading the full graph.",...s}),m({id:"workspace.graph.evidence",scope:"workspace",args:"workspace graph evidence <entity-or-relation> --json",description:"Resolve portable evidence for a graph entity or relation.",...s}),m({id:"workspace.graph.path",scope:"workspace",args:"workspace graph path <from> <to> --json",description:"Find a shortest proof-carrying path between workspace entities.",...s}),m({id:"workspace.doctor",scope:"workspace",args:"doctor workspace --json",description:"Check workspace health before claiming verification.",...s}),m({id:"workspace.pipeline",scope:"workspace",args:"pipeline --json",description:"Run the governed sync, doctor, analyze, readiness, and autopilot loop.",...s}),m({id:"workspace.contract.verify",scope:"workspace",args:"workspace contract verify --json",description:"Verify workspace contract and dependency edges.",...s}),m({id:"workspace.verify",scope:"workspace",args:"workspace verify --json",description:"Evaluate evidence freshness and verification gates before release decisions.",...s})],c=t?[t]:e.projects;for(let a of c)a.commands.fleetStages.includes("test")&&n.push(m({id:`project.${a.name}.test`,scope:"project",project:a.name,args:L(a,"test"),description:`Run tests for ${a.name} through workspace orchestration.`,...s})),a.commands.fleetStages.includes("build")&&n.push(m({id:`project.${a.name}.build`,scope:"project",project:a.name,args:L(a,"build"),description:`Build ${a.name} through workspace orchestration.`,...s}));return n}function ce(e){return e.commands.fleetStages.filter(t=>t==="test"||t==="build").map(t=>`workspace run ${t}`)}function pe(e,t){if(!t?.startsWith("project:"))return;let i=ae(t);if(i)return e.projects.find(s=>oe(s).includes(i))}function de(e,t,i){let s=[...e.validation?.issues??[]];t?.startsWith("project:")&&!i&&s.push({severity:"error",code:"context.scope.project.missing",message:`Requested project scope was not found: ${t}`,target:t});let n=s.filter(a=>a.severity==="error").length,c=s.filter(a=>a.severity==="warning").length;return {status:n>0?"failed":c>0?"warning":"passed",errors:n,warnings:c,issues:s}}async function me(e,t){let i=[],s=[];for(let[n,c]of Object.entries(e.evidence))c&&await g$1(t,c.path)!==null?i.push(`${n}: ${c.path}`):s.push(n);return {available:i.sort(),missing:s.sort()}}function le(e){let t=e.summary.projectCount,i=e.summary.runtimes.length?`${e.summary.runtimes.join(", ")} runtime coverage`:"no runtime coverage",s=e.identity.surfaces.length?e.identity.surfaces.join(", "):"no detected surfaces";return `${e.workspace.name} is a ${e.identity.workspaceType} with ${t} project${t===1?"":"s"}, ${i}, and ${s}.`}function ge(e){let t=["Do not claim a command passed unless a report or command output proves it.","Do not infer secrets or environment values from file names.","Do not change project scope without checking the selected project."];return e.contracts.exists||t.push("Workspace contract is missing; dependency and API edges may be incomplete."),((e.summary.extendedProjects??0)>0||e.summary.observedProjects>0)&&t.push("Some projects use extended or observed support tiers; command coverage may be partial."),t}async function We(e){let t=e.model??await r({workspacePath:e.workspacePath,includeEvidence:e.includeEvidence===true,observableScanDepth:e.observableScanDepth,now:e.now}),i=ne(e.agent),s=pe(t,e.scope),n=de(t,e.scope,s);if(e.strict===true&&n.status!=="passed"){let r=n.issues.map(g=>`${g.severity}:${g.code}:${g.target}`).join(", ");throw new Error(`Workspace context strict validation failed: ${r}`)}let c=e.now??new Date,a=t.facts??[],K=new Set((s?[s]:t.projects).map(r=>r.name)),R=a.filter(r=>r.project?K.has(r.project):true),H=(s?[s]:t.projects).map(r=>{let g=R.filter(p=>p.project===r.name);return {name:r.name,path:r.path,kind:r.kind,category:r.category,runtime:r.runtime,framework:r.frameworkDisplayName,...r.generator?{generator:r.generator}:{},createCapability:r.createCapability,supportTier:r.supportTier,...r.governance?{governance:r.governance}:{},safeCommands:ce(r),importantFiles:r.importantFiles,facts:g}}),S=await me(t,e.workspacePath),F=E.join(e.workspacePath,p.knowledgeGraph),u=await A.pathExists(F)?await A.readJson(F).catch(()=>null):null,N=false;if(u?.schemaVersion===q.knowledgeGraph)try{b(u,t),N=true;}catch{}let $=le(t),M=ie(t,s,c),b$2=await C(e.workspacePath,p.impact,q.impact),l=await C(e.workspacePath,p.doctor,q.doctor),v=await C(e.workspacePath,p.analyze,q.analyze),k=await C(e.workspacePath,p.readiness,q.readiness),h=await C(e.workspacePath,p.verify,q.verify),w=await C(e.workspacePath,p.explain,q.explain),f$1=await C(e.workspacePath,p.diff,q.diff),B=b$2?.summary?{changed:b$2.summary.changed,risk:b$2.summary.risk,affectedProjects:b$2.summary.affectedProjects,blastRadius:b$2.summary.blastRadius,recommendedCommands:b$2.summary.recommendedCommands}:void 0,U=l?.summary?{verdict:l.summary.verdict,totalIssues:l.summary.totalIssues,advisoryFindings:l.summary.advisoryFindings,blockingFindings:l.summary.blockingFindings,unknownFindings:l.summary.unknownFindings,hasSystemErrors:l.summary.hasSystemErrors,topSignals:(()=>{let r=Array.isArray(l.projects)?l.projects:[],g=[];for(let p of r.slice(0,6)){let te=Array.isArray(p.probes)?p.probes:[];for(let y of te.slice(0,10))(y?.status==="fail"||y?.severity==="error")&&g.push({label:y.label,scope:y.scope,issueClass:y.issueClass,status:y.status,severity:y.severity,recommendation:y.recommendation});}return g.slice(0,8)})()}:void 0,J=v?.summary?{score:v.summary.score,verdict:v.summary.verdict,findingCounts:v.summary.findings,topFindings:(Array.isArray(v.findings)?v.findings:[]).filter(p=>p?.severity==="fail"||p?.severity==="warn").slice(0,8).map(p=>({severity:p.severity,title:p.title,target:p.target,remediation:p.remediation}))}:void 0,X=k?{overallStatus:k.overallStatus,blocking:k.blocking,blockingReasons:k.blockingReasons,evidencePath:k.evidencePath,gates:Array.isArray(k.gates)?k.gates.slice(0,6).map(r=>({gate:r.gate,status:r.status,summary:r.summary})):void 0}:void 0,Q=h?.summary?{verdict:h.summary.verdict,exitCode:h.summary.exitCode,stepsFailed:h.summary.stepsFailed,stepsMissing:h.summary.stepsMissing,blockingReasons:h.blockingReasons,missingEvidence:h.missingEvidence}:void 0,Y=w?{summary:w.summary,blockingReasons:w.blockingReasons,releaseVerdict:w.releaseVerdict,evidenceFreshness:w.evidenceFreshness,sections:Array.isArray(w.sections)?w.sections.slice(0,4).map(r=>({id:r.id,title:r.title,body:r.body})):void 0}:void 0,Z=f$1?.summary?{changed:f$1.summary.changed,addedProjects:f$1.summary.addedProjects,removedProjects:f$1.summary.removedProjects,changedProjects:f$1.summary.changedProjects,workspaceChanges:f$1.summary.workspaceChanges,validationChanges:f$1.summary.validationChanges,gitChangedFiles:f$1.summary.gitChangedFiles}:void 0,ee=M.map(r=>f({id:`context.command.${r.id}`,label:`${r.id} safe command`,scope:"command",value:{display:r.display,execute:r.execute,scope:r.scope},...r.project?{project:r.project}:{},freshness:{kind:"derived",category:"structure",generatedAt:t.generatedAt,now:c,sourceArtifact:p.agentContext,sourcePath:`safeCommands.${r.id}`,reason:"Context safe commands are derived from workspace model command capabilities."}})),I=[...R,...ee],W=g({facts:I,generatedAt:c.toISOString(),now:c}),j=b$1();return {schemaVersion:re,generatedAt:c.toISOString(),agent:i,workspaceSummary:$,modelRef:p.model,knowledgeGraph:{artifact:p.knowledgeGraph,schemaVersion:q.knowledgeGraph,available:N,...typeof u?.quality?.entityCount=="number"?{entityCount:u.quality.entityCount}:{},...typeof u?.quality?.relationCount=="number"?{relationCount:u.quality.relationCount}:{},...typeof u?.quality?.proofCount=="number"?{proofCount:u.quality.proofCount}:{},queryCommands:[x("workspace graph search <query> --limit 12 --json"),x("workspace graph entities [kind] --json"),x("workspace graph evidence <entity-or-relation> --json"),x("workspace graph path <from> <to> --json")]},intelligenceChain:{schemaVersion:j.schemaVersion,contractPath:j.contractPath,currentStep:"context",canonicalReadOrder:[...j.consumers.agents.canonicalReadOrder]},workspace:{name:t.workspace.name,root:`workspace:${t.workspace.name}`,type:t.identity.workspaceType,...t.workspace.profile?{profile:t.workspace.profile}:{}},scope:{requested:e.scope??"workspace",...s?{activeProject:s.name}:{}},projects:H,safeCommands:M,facts:I,factFreshness:W,evidence:S,policies:{mode:t.policies.mode,source:t.policies.source},contracts:{exists:t.contracts.exists,path:t.contracts.workspaceContractPath},validation:n,agentInstructions:[`Read \`${p.agentIndex}\` first, then this context pack and linked evidence reports.`,"Use `workspace graph search <query> --limit 12 --json` for bounded, proof-backed retrieval before loading the full graph.",`Load \`${p.knowledgeGraph}\` only when a complete graph export is explicitly required.`,"Use this context as the workspace source of truth before inspecting random files.","Prefer workspace-level evidence over generic framework assumptions.","Use `display` commands when explaining steps to a human.","Use `execute` commands when launching commands from automation or tooling.","Treat `facts[].freshness.verifyBeforeUse` as a hard refresh requirement before using that fact in advice, fixes, or release decisions.","Do not carry extracted facts beyond their freshness contract; re-read or regenerate evidence when the contract says stale, unknown, live, or verify-before-use.","Keep project-scoped advice tied to the active project scope.","Regenerate stale grounding with `npx workspai workspace agent-sync --write --refresh-context`."],unsafeAssumptions:[...ge(t),...W.verifyBeforeUseFacts>0?[`${W.verifyBeforeUseFacts} fact(s) require verification before use; do not treat them as durable workspace structure.`]:[]],humanSummary:[$,`Evidence available: ${S.available.length}. Missing evidence groups: ${S.missing.join(", ")||"none"}.`,s?`Active project scope: ${s.name} (${s.frameworkDisplayName}).`:"Scope: whole workspace."].join(`
2
2
  `),impactSummary:B,doctorSummary:U,analyzeSummary:J,readinessSummary:X,verifySummary:Q,explainSummary:Y,diffSummary:Z}}async function je(e,t){return h(t,se,d(e))}export{re as a,se as b,We as c,je as d};
@@ -2,7 +2,7 @@ import {c}from'./chunk-N4B2M44I.js';import {a}from'./chunk-A5FBGRJA.js';import {
2
2
  `);}async function se(e,r){let t=n.dirname(e);await promises.mkdir(t,{recursive:true});let o=`${e}.${process.pid}.${randomUUID()}.tmp`;try{await promises.writeFile(o,r);let a=await promises.open(o,"r");try{await ae(a);}finally{await a.close();}try{await promises.rename(o,e);}catch(s){let i=s.code;if(i!=="EEXIST"&&i!=="EPERM")throw s;await le.move(o,e,{overwrite:true});}}finally{await promises.rm(o,{force:true}).catch(()=>{});}}async function Z(e){try{return {exists:true,content:await promises.readFile(e)}}catch(r){if(r.code==="ENOENT")return {exists:false};throw r}}async function ee(e,r){if(!r.exists){await promises.rm(e,{force:true});return}await se(e,r.content);}async function we(e,r){let t=n.join(e,"workspaces.json.lock"),o=randomUUID();await promises.mkdir(e,{recursive:true});let a=Date.now(),s;for(;!s;)try{s=await promises.open(t,"wx"),await s.writeFile(`${JSON.stringify({pid:process.pid,lockId:o,createdAt:new Date().toISOString()})}
3
3
  `),await ae(s);}catch(i){if(i.code!=="EEXIST")throw i;let c=await promises.stat(t).catch(()=>null);if(c&&Date.now()-c.mtimeMs>de){let d=await promises.readFile(t,"utf8").then(g=>JSON.parse(g)).catch(()=>null),u=Number(d?.pid),f=false;if(Number.isInteger(u)&&u>0)try{process.kill(u,0),f=true;}catch(g){f=g.code==="EPERM";}if(!f){await promises.rm(t,{force:true}).catch(()=>{});continue}}if(Date.now()-a>me)throw new Error(`Timed out waiting for workspace registry lock: ${t}`);await new Promise(d=>setTimeout(d,25));}try{return await r()}finally{await s.close().catch(()=>{}),await promises.readFile(t,"utf8").then(c=>JSON.parse(c).lockId===o).catch(()=>false)&&await promises.rm(t,{force:true}).catch(()=>{});}}async function S(e){let r=w(),t=n.join(r,"workspaces.json"),o=n.join(x(),"workspaces.json"),a=[...new Set(y())];return we(r,async()=>{let[s,i]=await Promise.all([Z(t),Z(o)]),c=await oe(a);await e(c);let d=I(c);try{await X(t,d),await X(o,d);}catch(u){let g=(await Promise.allSettled([ee(t,s),ee(o,i)])).filter(k=>k.status==="rejected").map(k=>k.reason);throw g.length>0?new AggregateError([u,...g],"Workspace registry transaction failed and could not be fully restored"):u}return d})}async function ie(e,r){let t=a(e);await S(o=>{let a=o.workspaces.find(s=>s.path===t);if(a){a.name=r,a.mode=a.mode||"full",a.projects=Array.isArray(a.projects)?a.projects:[];return}o.workspaces.push({name:r,path:t,mode:"full",projects:[]});});}async function He(e){let r=a(e),o=(await oe()).workspaces.find(a=>a.path===r);return o?{...o,projects:o.projects.map(a=>({...a}))}:null}async function Ke(e,r){let t=a(e);await S(o=>{let a=o.workspaces.findIndex(i=>i.path===t);if(!r){a>=0&&o.workspaces.splice(a,1);return}let s=G(r);a>=0?o.workspaces[a]=s:o.workspaces.push(s);});}async function qe(e){let r=a(e);await S(t=>{t.workspaces=t.workspaces.filter(o=>o.path!==r);});}async function he(e,r){try{await ie(e,r);}catch{console.warn(p.gray("Note: Could not register workspace in shared registry"));}}async function Qe(e,r=false){let t=a(e),o={workspacePath:t,workspaceFound:false,added:[],skipped:0};try{let a$1=await z(),s=a$1.workspaces.find(k=>k.path===t);if(!s){if(await he(t,n.basename(n.resolve(e))),a$1=await z(),s=a$1.workspaces.find(k=>k.path===t),!s)return r||console.log("\u26A0\uFE0F Workspace could not be registered in registry"),o;r||console.log("\u2714 Registered workspace in shared registry");}Array.isArray(s.projects)||(s.projects=[]);let i=0,c=0,d=[],u$1=[],f=[e],g=new Set;for(;f.length>0;){let k=f.shift();if(!k||g.has(k))continue;g.add(k);let w=await promises.readdir(k,{withFileTypes:true});for(let h of w){if(!h.isDirectory()||h.name.startsWith(".")||["node_modules","dist","build","target","coverage","htmlcov"].includes(h.name))continue;let v=n.join(k,h.name),y=a(v);try{let x=false;for(let P of [...u(y,"context.json"),...u(y,"project.json")])try{await promises.access(P),x=true;break}catch{}if(x){let P=n.basename(y),m=s.projects.some($=>$.path===y);u$1.push({name:P,path:y}),m?c++:(s.projects.push({name:P,path:y}),i++,d.push(y),r||console.log(`\u2714 Added: ${n.relative(e,y)}`));continue}}catch{}f.push(v);}}return await S(k=>{let w=k.workspaces.find(y=>y.path===t);if(!w)return;let h=`${t}${n.sep}`,v=(w.projects||[]).filter(y=>y.path!==t&&!y.path.startsWith(h));w.projects=G({...w,projects:[...v,...u$1]}).projects;}),i>0?r||console.log(`
4
4
  \u2705 Synced ${i} project(s) to registry`):r||console.log(`
5
- \u2705 All projects already registered (${c} found)`),{workspacePath:t,workspaceFound:true,added:d,skipped:c}}catch(a){return r||console.error("\u274C Failed to sync projects:",a.message),o}}async function ye(e,r,t){let o=a(e),a$1=a(t);await S(s=>{let i=s.workspaces.find(u=>u.path===o);if(!i)throw new Error(`Workspace is not registered: ${o}`);i.projects=Array.isArray(i.projects)?i.projects:[];let c=i.projects.findIndex(u=>u.path===a$1||u.name===r),d={name:r,path:a$1};c>=0?i.projects[c]=d:i.projects.push(d);});}async function Xe(e,r,t){try{await ye(e,r,t);}catch{}}async function Ze(e,r){let t=N("Creating Workspai workspace...").start();try{await promises.mkdir(e,{recursive:true}),await promises.mkdir(n.join(e,".workspai"),{recursive:true});let o={workspace_name:r.name,author:r.author,rapidkit_version:h(),created_at:new Date().toISOString(),type:"workspace"};await promises.writeFile(n.join(e,".workspai","config.json"),JSON.stringify(o,null,2));let{syncWorkspaceFoundationFiles:a}=await import('./create-YPAZJYCE.js');await a(e,{workspaceName:r.name,installMethod:"venv",writeMarker:true,writeGitignore:false,onlyIfMissing:true});let s=$e();await promises.writeFile(n.join(e,"rapidkit"),s),await promises.chmod(n.join(e,"rapidkit"),493);let i=je();await promises.writeFile(n.join(e,"rapidkit.cmd"),i);let c=ve(r.name);await promises.writeFile(n.join(e,"README.md"),c),await promises.writeFile(n.join(e,".gitignore"),`# Workspai workspace
5
+ \u2705 All projects already registered (${c} found)`),{workspacePath:t,workspaceFound:true,added:d,skipped:c}}catch(a){return r||console.error("\u274C Failed to sync projects:",a.message),o}}async function ye(e,r,t){let o=a(e),a$1=a(t);await S(s=>{let i=s.workspaces.find(u=>u.path===o);if(!i)throw new Error(`Workspace is not registered: ${o}`);i.projects=Array.isArray(i.projects)?i.projects:[];let c=i.projects.findIndex(u=>u.path===a$1||u.name===r),d={name:r,path:a$1};c>=0?i.projects[c]=d:i.projects.push(d);});}async function Xe(e,r,t){try{await ye(e,r,t);}catch{}}async function Ze(e,r){let t=N("Creating Workspai workspace...").start();try{await promises.mkdir(e,{recursive:true}),await promises.mkdir(n.join(e,".workspai"),{recursive:true});let o={workspace_name:r.name,author:r.author,rapidkit_version:h(),created_at:new Date().toISOString(),type:"workspace"};await promises.writeFile(n.join(e,".workspai","config.json"),JSON.stringify(o,null,2));let{syncWorkspaceFoundationFiles:a}=await import('./create-WB5YQ7C6.js');await a(e,{workspaceName:r.name,installMethod:"venv",writeMarker:true,writeGitignore:false,onlyIfMissing:true});let s=$e();await promises.writeFile(n.join(e,"rapidkit"),s),await promises.chmod(n.join(e,"rapidkit"),493);let i=je();await promises.writeFile(n.join(e,"rapidkit.cmd"),i);let c=ve(r.name);await promises.writeFile(n.join(e,"README.md"),c),await promises.writeFile(n.join(e,".gitignore"),`# Workspai workspace
6
6
  .env
7
7
  .env.*
8
8
  !.env.example
@@ -17,7 +17,7 @@ Thumbs.db
17
17
 
18
18
  # Logs
19
19
  *.log
20
- `),await _e(e),t.succeed("Workspace created!"),r.skipGit||await re(e,N(),"Initial commit: Workspai workspace"),await ie(e,r.name);let{publishWorkspaceRegistrySummary:u}=await import('./workspace-registry-summary-M4WMFDQ4.js');await u(e),console.log(`
20
+ `),await _e(e),t.succeed("Workspace created!"),r.skipGit||await re(e,N(),"Initial commit: Workspai workspace"),await ie(e,r.name);let{publishWorkspaceRegistrySummary:u}=await import('./workspace-registry-summary-ZC5CFZXP.js');await u(e),console.log(`
21
21
  ${p.green("\u2728 Workspai workspace created successfully!")}
22
22
 
23
23
  ${p.bold("\u{1F4C2} Workspace structure:")}
@@ -1,2 +1,2 @@
1
- import {r,m,n,l}from'./chunk-SEZTSMRR.js';import {a}from'./chunk-HTYMXMQM.js';import {c}from'./chunk-S5KTATOU.js';import {d as d$1}from'./chunk-IHWS3ALP.js';import {h as h$1}from'./chunk-BLEIUQL6.js';import {a as a$1}from'./chunk-AFIFZTOY.js';import {e,d,b as b$1}from'./chunk-EWZZUQBR.js';import {q,p}from'./chunk-ODK4LCEL.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 x(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 i=r.stdout??"";return {ok:true,stdout:a?.preserveWhitespace?i:i.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 i of e.split(`
1
+ import {r,m,n,l}from'./chunk-QDM6TWFK.js';import {a}from'./chunk-HTYMXMQM.js';import {c}from'./chunk-S5KTATOU.js';import {d as d$1}from'./chunk-MD4CHXV3.js';import {h as h$1}from'./chunk-BLEIUQL6.js';import {a as a$1}from'./chunk-AFIFZTOY.js';import {e,d,b as b$1}from'./chunk-EWZZUQBR.js';import {q,p}from'./chunk-ODK4LCEL.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 x(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 i=r.stdout??"";return {ok:true,stdout:a?.preserveWhitespace?i:i.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 i of e.split(`
2
2
  `)){if(!i.trim())continue;let n=i.slice(0,2),c=i.slice(3).trim();if(c&&!ge(c)){if(n==="??"){a.push(c);continue}n.includes("D")&&r.push(c),t.push(c);}}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=x(e,["rev-parse","--is-inside-work-tree"]);if(!r.ok||r.stdout!=="true")return a;let i=x(e,["rev-parse","--abbrev-ref","HEAD"]),n=x(e,["rev-parse","HEAD"]),c=x(e,["status","--porcelain=v1","--untracked-files=all"],{preserveWhitespace:true}),p=ke(c.stdout),m=p.changedFiles.length>0||p.untrackedFiles.length>0||p.deletedFiles.length>0;return {available:true,branch:i.ok?i.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=q.snapshot,L=q.diff,T=p.snapshot,ae=p.diff,he=q.impact,we=p.impact;function ye(e$1){if(e$1.model.projectTopology||!e$1.model.graph||e$1.modelHash!==e(e$1.model))return null;let t={...e$1.model,projectTopology:e$1.model.graph,graph:e$1.model.graph};return {...e$1,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!==l)throw new Error(`Invalid workspace model snapshot: ${e}`);let i=d(r.model);if(r.modelHash!==i){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===l){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. ${T}. 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!==l||!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 r({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:m,model:t}}async function Qe(e,t){return h$1(t,T,d$1(e))}function F(e){let{evidence:t,...a}=e;return a}function h(e,t){e.push(t);}function je(e,t){let a=[],r=["name","profile","type"],i=["workspaceType","surfaces","runtimeFamilies","businessCapabilities"];for(let n of r){let c=e.workspace[n],p=t.workspace[n];b$1(c)!==b$1(p)&&h(a,{type:"workspace.changed",severity:"info",target:`workspace.${n}`,message:`Workspace metadata field changed: ${String(n)}`,before:c,after:p});}for(let n of i){let c=e.identity[n],p=t.identity[n];b$1(c)!==b$1(p)&&h(a,{type:"workspace.changed",severity:"info",target:`identity.${n}`,message:`Workspace identity field changed: ${String(n)}`,before:c,after:p});}return b$1(e.policies)!==b$1(t.policies)&&h(a,{type:"workspace.changed",severity:"warning",target:"policies",message:"Workspace policy summary changed.",before:e.policies,after:t.policies}),b$1(e.discovery)!==b$1(t.discovery)&&h(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&&h(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 Me(e,t){let a=e.validation??null,r=t.validation??null;return b$1(a)===b$1(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])),i=new Map(t.projects.map(n=>[n.path,n]));for(let[n,c]of i.entries()){let p=r.get(n);if(!p){h(a,{type:"project.added",severity:"info",target:n,message:`Project added: ${c.name}`,after:F(c)});continue}let m=F(p),l=F(c);if(b$1(m)!==b$1(l)){let u=p.runtime!==c.runtime||p.framework!==c.framework;h(a,{type:"project.changed",severity:u?"warning":"info",target:n,message:`Project changed: ${c.name}`,before:m,after:l});}}for(let[n,c]of r.entries())i.has(n)||h(a,{type:"project.removed",severity:"warning",target:n,message:`Project removed: ${c.name}`,before:F(c)});return a.sort((n,c)=>`${n.type}:${n.target}`.localeCompare(`${c.type}:${c.target}`))}async function Pe(e){let t=k.resolve(e.workspacePath),a=ne(e.fromPath),r$1=a?We(e.fromPath):void 0,i=e.fromPath;if(a){let f=k.join(t,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");i=T;}let n=se(t,i),c=await be(n),p=e.model??await r({workspacePath:t,includeAbsolutePaths:e.includeAbsolutePaths,includeEvidence:e.includeEvidence,observableScanDepth:e.observableScanDepth,now:e.now}),m$1=d(p),l=[...je(c.model,p),...Ie(c.model,p),...Me(c.model,p)],u;e.includeGitObservation!==false&&(u=e.gitObservation??Q(t,{ref:r$1}),u.available&&Se(l,u,p));let v=c.hash!==m$1;v&&!l.some(f=>!f.type.startsWith("git."))&&h(l,{type:"workspace.changed",severity:"warning",target:"model.structural-hash",message:"Workspace structural identity changed outside the currently classified diff fields.",before:c.hash,after:m$1});let P=l.filter(f=>f.type.startsWith("git.")).length,w=a?`git:${r$1??"HEAD"}`:k.relative(t,n).split(k.sep).join("/");return {schemaVersion:L,generatedAt:(e.now??new Date).toISOString(),fromRef:w,toRef:m,fromHash:c.hash,toHash:m$1,summary:{changed:v||P>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:P},git:u?.available?Oe(u,r$1):{available:false,dirty:false,changedFiles:0,untrackedFiles:0,deletedFiles:0},changes:l,currentModel:p}}async function Ze(e,t){return h$1(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 b(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,r={init:`Run init for ${e.name}`,test:`Run tests for ${e.name}`,build:`Run build for ${e.name}`,start:`Run start for ${e.name}`};return ["init","test","build","start"].filter(i=>a.includes(i)).map(i=>b(`project.${e.name}.${i}`,r[i],["workspace","run",i,"--scope",t,"--json"],{scope:"project",project:e.name}))}function _(){return [b("workspace.doctor","Run workspace doctor",["doctor","workspace","--json"],{scope:"workspace"}),b("workspace.contract.verify","Verify workspace contract",["workspace","contract","verify","--json"],{scope:"workspace"}),b("workspace.readiness","Run release readiness",["readiness","--json"],{scope:"workspace"}),b("workspace.analyze","Run workspace analyze",["analyze","--json"],{scope:"workspace",required:false}),b("workspace.pipeline","Run governance pipeline",["pipeline","--json"],{scope:"workspace",required:false}),b("workspace.doctor-fix","Verify doctor fix result",["doctor","workspace","--fix","--json"],{scope:"workspace",required:false})]}function Ee(e,t){let a=t.split(k.sep).join("/");return e.projects.filter(i=>{let n=i.path.split(k.sep).join("/");return a===n||a.startsWith(`${n}/`)}).sort((i,n)=>n.path.length-i.path.length)[0]}function Se(e,t,a){let r=new Set(e.map(n=>n.target)),i=(n,c)=>{let p=c.split(k.sep).join("/"),m=`git:${p}`;if(r.has(m))return;let l=Ee(a,p),u=l?`${l.name} (${l.path})`:"workspace";h(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)i("git.file.changed",n);for(let n of t.untrackedFiles)i("git.untracked",n);for(let n of t.deletedFiles)i("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 i=`${r.scope}:${r.project??""}:${r.display}`;t.has(i)||(t.add(i),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 xe(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 Fe(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 i=new Map(r.currentModel.projects.map(o=>[o.path,o])),n$1=new Map(r.currentModel.projects.map(o=>[o.name,o])),c$1=r.changes.filter(o=>o.type.startsWith("project.")),p=new Map;for(let o of c$1){let d=(i.get(o.target)??(typeof o.before?.name=="string"?n$1.get(o.before.name):void 0))?.path??o.target,y=p.get(d)??[];y.push(o),p.set(d,y);}let m=[];for(let[o,s]of p.entries()){let d=i.get(o);if(d&&!re(e.scope,d))continue;let y=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(j=>j.message).join(" "),risk:y,reasons:s.map(j=>`${j.type}: ${j.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):_()});}let l=n(r.currentModel),u=l?a(l):void 0,v=new Set(m.map(o=>o.project?.name).filter(o=>typeof o=="string")),P=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,P.set(o.project.name,o.risk);}let w=[],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$1.get(s.id);if(d&&!re(e.scope,d))continue;let y=s.path[0],C=s.path[s.path.length-2]??y,j=P.get(y)??"medium",de=Re(j),M=u?.byId.get(s.id);f=Math.max(f,s.distance),w.push({id:`transitive:${s.id}`,scope:"project",target:d?.path??s.id,title:`Transitive impact: ${s.id}`,summary:`Depends on changed project ${y}${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):_(),origin:"transitive",distance:s.distance,path:s.path,via:s.via,...M?{centrality:{fanIn:M.fanIn,fanOut:M.fanOut,reach:M.reach,betweenness:M.betweenness,isHotspot:M.isHotspot}}:{}});}}w.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,R=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:_()})),B=Ae([...m.flatMap(o=>o.verification),...w.flatMap(o=>o.verification),...R.flatMap(o=>o.verification),...r.summary.changed?_():[]]).filter(o=>o.required),pe=Z([...m.map(o=>o.risk),...w.map(o=>o.risk),...R.map(o=>o.risk)]),z=xe({risk:pe,affectedProjects:m.length,projectCount:K,changes:r.changes}),q={changed:r.summary.changed,risk:z,affectedProjects:m.length,workspaceItems:R.length,recommendedCommands:B.length,blastRadius:{directlyAffected:m.length,transitivelyAffected:w.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:q,affectedProjects:m.sort((o,s)=>o.target.localeCompare(s.target)),transitiveImpact:w,criticalPathHotspots:ie,workspaceImpact:R.sort((o,s)=>o.target.localeCompare(s.target)),verificationPlan:B,agentBrief:Fe({changed:q.changed,risk:z,affectedProjects:m,workspaceImpact:R}),diff:r}}async function tt(e,t){return h$1(t,we,d$1(e))}export{Q as a,oe as b,L as c,T 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,_ as o,et as p,tt as q};