workspai 0.59.1 → 0.60.1

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 (99) hide show
  1. package/README.md +5 -0
  2. package/contracts/cli-runtime-command-inventory.v1.snapshot.json +4 -0
  3. package/contracts/extension-cli-compatibility.v1.json +1 -1
  4. package/contracts/workspace-intelligence/goal-agent-handoff.v1.json +89 -8
  5. package/contracts/workspace-intelligence/goal-index.v1.json +100 -7
  6. package/contracts/workspace-intelligence/goal-lifecycle-result.v1.json +74 -6
  7. package/contracts/workspace-intelligence/goal-pack.v1.json +182 -19
  8. package/contracts/workspace-intelligence/verified-goal.v1.json +44 -3
  9. package/dist/analyze-FYNMI5KT.js +1 -0
  10. package/dist/autopilot-release-IRXB2VOH.js +1 -0
  11. package/dist/{chunk-DGGTTRYE.js → chunk-7ITSLGPZ.js} +1 -1
  12. package/dist/{chunk-5NIZNXRS.js → chunk-A4BK7C7M.js} +1 -1
  13. package/dist/{chunk-FLTIFYTJ.js → chunk-AJ535F22.js} +1 -1
  14. package/dist/{chunk-KVSYBHUR.js → chunk-B6FJ6RG6.js} +1 -1
  15. package/dist/{chunk-5PSKBJKJ.js → chunk-DIJGQUEV.js} +1 -1
  16. package/dist/{chunk-QMPFNXI7.js → chunk-E4LJ3PQD.js} +1 -1
  17. package/dist/{chunk-6FBNSTUS.js → chunk-GPGEJVVO.js} +1 -1
  18. package/dist/{chunk-U3MGJN7A.js → chunk-HQWDW2BV.js} +1 -1
  19. package/dist/chunk-I2O6AC2Z.js +2 -0
  20. package/dist/chunk-ILIBOMYL.js +1 -0
  21. package/dist/chunk-J7G3YL4O.js +1 -0
  22. package/dist/{chunk-NOZ4JCH7.js → chunk-KCJ3VS6R.js} +1 -1
  23. package/dist/{chunk-SP5EHSWG.js → chunk-KG3TUTXU.js} +1 -1
  24. package/dist/chunk-KNTPDRZB.js +1 -0
  25. package/dist/{chunk-QPE6VCDW.js → chunk-KTW4EN47.js} +19 -19
  26. package/dist/{chunk-RVKMGKYL.js → chunk-MDF2FBLS.js} +1 -1
  27. package/dist/{chunk-WSRUPDZN.js → chunk-NA2NXX5P.js} +1 -1
  28. package/dist/{chunk-OFWSZYUX.js → chunk-NBJ6AP7K.js} +1 -1
  29. package/dist/{chunk-RTDEFUTL.js → chunk-NRVSDL4J.js} +1 -1
  30. package/dist/{chunk-7WUT5ZSO.js → chunk-NVQUBUTY.js} +1 -1
  31. package/dist/{chunk-YEEAWZWI.js → chunk-O6R7SE6Y.js} +1 -1
  32. package/dist/{chunk-7SFXADXO.js → chunk-OU7DF6MP.js} +1 -1
  33. package/dist/{chunk-WJVB6SSD.js → chunk-PTNLVI62.js} +5 -5
  34. package/dist/{chunk-WP3CXMVA.js → chunk-SCP5LJNO.js} +1 -1
  35. package/dist/{chunk-QFBVQUKV.js → chunk-TFOOSYGO.js} +6 -6
  36. package/dist/{chunk-3CGR6435.js → chunk-TYQMO36U.js} +1 -1
  37. package/dist/chunk-UJXE4UAX.js +1 -0
  38. package/dist/{chunk-ENKGGWRX.js → chunk-VDFHUYAQ.js} +8 -8
  39. package/dist/chunk-VR6XMUF3.js +2 -0
  40. package/dist/{chunk-Y4B55J5S.js → chunk-VV55EAWO.js} +1 -1
  41. package/dist/{chunk-ZJCM37KX.js → chunk-WLFJHRB3.js} +1 -1
  42. package/dist/{chunk-P2WH7W2H.js → chunk-WUB6QGC7.js} +6 -6
  43. package/dist/chunk-X6TNBARH.js +6 -0
  44. package/dist/{create-HUEDWYDM.js → create-ZLDOBXG4.js} +1 -1
  45. package/dist/demo-kit-QHIDCSBI.js +149 -0
  46. package/dist/{doctor-NAZEKMGU.js → doctor-MAPZ2ZCD.js} +1 -1
  47. package/dist/{dotnet-webapi-clean-VXEF4SHM.js → dotnet-webapi-clean-AVHPJG7Y.js} +5 -5
  48. package/dist/goal-command-contract-43E22XQD.js +1 -0
  49. package/dist/goal-interactive-selection-6YJOK4WC.js +1 -0
  50. package/dist/goal-lifecycle-OV6NZDD6.js +1 -0
  51. package/dist/goal-pack-Q3O2Z7R5.js +1 -0
  52. package/dist/{gofiber-standard-AQGSC7ON.js → gofiber-standard-47S2GYAO.js} +2 -2
  53. package/dist/{gogin-standard-7DU3OCBX.js → gogin-standard-EWB4XNOI.js} +3 -3
  54. package/dist/index.js +122 -122
  55. package/dist/{pipeline-62A2SDLC.js → pipeline-NICVJLZF.js} +1 -1
  56. package/dist/{project-agent-entry-7SYHRY7J.js → project-agent-entry-DVPKQST7.js} +1 -1
  57. package/dist/{project-intelligence-lens-BSG5LK6N.js → project-intelligence-lens-RLYSPJB2.js} +1 -1
  58. package/dist/{project-test-coverage-HP37HUV2.js → project-test-coverage-E2Q4QL44.js} +1 -1
  59. package/dist/{rust-axum-4HXDICIB.js → rust-axum-M5X4ZC4Z.js} +4 -4
  60. package/dist/{springboot-standard-EK6GYN5T.js → springboot-standard-Y5ADLZMQ.js} +7 -7
  61. package/dist/verified-goal-2BRQZQBL.js +1 -0
  62. package/dist/{workspace-BNRSBWSL.js → workspace-LQ77WAHC.js} +1 -1
  63. package/dist/{workspace-agent-sync-ANBHBZ2H.js → workspace-agent-sync-YLP75OWF.js} +1 -1
  64. package/dist/{workspace-context-RAO62QVU.js → workspace-context-YAK5XX27.js} +1 -1
  65. package/dist/{workspace-contract-ACSIHJIO.js → workspace-contract-3BWIRSVQ.js} +1 -1
  66. package/dist/{workspace-explain-RH27OQB4.js → workspace-explain-QH4FXQW5.js} +1 -1
  67. package/dist/{workspace-foundation-EWYJPPT6.js → workspace-foundation-G4KPT5CN.js} +1 -1
  68. package/dist/{workspace-graph-stream-ZZZEQQTE.js → workspace-graph-stream-XTSDKRLM.js} +1 -1
  69. package/dist/{workspace-intelligence-3YERTBA3.js → workspace-intelligence-625UN27X.js} +1 -1
  70. package/dist/{workspace-intelligence-runner-QLLBUD6G.js → workspace-intelligence-runner-T6CVJIQQ.js} +1 -1
  71. package/dist/{workspace-knowledge-graph-HZZP6ZRB.js → workspace-knowledge-graph-3ZBPSAS7.js} +1 -1
  72. package/dist/workspace-knowledge-graph-snapshot-ZI4W735H.js +1 -0
  73. package/dist/{workspace-mcp-serve-5TTAN243.js → workspace-mcp-serve-ALIZV72K.js} +1 -1
  74. package/dist/{workspace-model-EIQSKDX7.js → workspace-model-ETCLINRB.js} +1 -1
  75. package/dist/{workspace-onboarding-UW3CSURE.js → workspace-onboarding-46BE3EQD.js} +1 -1
  76. package/dist/{workspace-registry-summary-OV5KX3WC.js → workspace-registry-summary-VSOBKAJG.js} +1 -1
  77. package/dist/workspace-repair-engine-SZZKV3JF.js +3 -0
  78. package/dist/workspace-run-JTEFCQYQ.js +1 -0
  79. package/dist/{workspace-verify-W4P6LBIH.js → workspace-verify-7ENGIY4S.js} +1 -1
  80. package/dist/{workspace-watch-EZ4D4VCF.js → workspace-watch-2YFSB2WL.js} +1 -1
  81. package/docs/ci-workflows.md +1 -1
  82. package/docs/commands-reference.md +12 -2
  83. package/docs/goal-packs.md +51 -11
  84. package/package.json +1 -1
  85. package/dist/analyze-52TEGLDR.js +0 -1
  86. package/dist/autopilot-release-NFLAKBA3.js +0 -1
  87. package/dist/chunk-DQ6VXTDE.js +0 -1
  88. package/dist/chunk-MZKKRAAJ.js +0 -2
  89. package/dist/chunk-RO73VVHW.js +0 -2
  90. package/dist/chunk-T3GJ7YVG.js +0 -1
  91. package/dist/chunk-VRW6KXNK.js +0 -6
  92. package/dist/demo-kit-KHH63TNA.js +0 -149
  93. package/dist/goal-command-contract-CHE7U6YY.js +0 -1
  94. package/dist/goal-lifecycle-NUKWVUAL.js +0 -1
  95. package/dist/goal-pack-TWOXHXN6.js +0 -1
  96. package/dist/verified-goal-B6HQOZWA.js +0 -1
  97. package/dist/workspace-knowledge-graph-snapshot-7DWHMEM2.js +0 -1
  98. package/dist/workspace-repair-engine-DHH2UUJN.js +0 -3
  99. package/dist/workspace-run-BLHRXT2N.js +0 -1
@@ -0,0 +1,2 @@
1
+ import {b}from'./chunk-UJXE4UAX.js';var s="cli-log-event-v1";var a="unknown-run";function C(e){a=e;}function l(){return a}function c(e){return {schemaVersion:s,runId:l(),timestamp:new Date().toISOString(),level:e.level,event:e.event,component:e.component,message:e.message,...e.command?{command:e.command}:{},...e.metadata&&Object.keys(e.metadata).length>0?{metadata:E(e.metadata)}:{}}}function f(e){b()&&L(c(e));}function L(e){process.stderr.write(`${JSON.stringify(e)}
2
+ `);}function E(e){let t={};for(let[r,n]of Object.entries(e))if(n!==void 0){if(n instanceof Error){t[r]={name:n.name,message:n.message};continue}if(n===null||typeof n=="string"||typeof n=="number"||typeof n=="boolean"){t[r]=n;continue}if(Array.isArray(n)){t[r]=n.map(o=>typeof o=="string"||typeof o=="number"||typeof o=="boolean"?o:String(o));continue}t[r]=String(n);}return t}export{s as a,C as b,l as c,f as d,L as e};
@@ -1 +1 @@
1
- import e from'path';import N from'fs-extra';import F from'chalk';async function K(n,o={}){let t=e.resolve(n),{WORKSPACE_CONTRACT_PATH:i,syncWorkspaceContract:c,verifyWorkspaceContract:m,writeWorkspaceContractVerifyEvidence:k}=await import('./workspace-contract-ACSIHJIO.js'),p=await c({workspacePath:t,strict:true}),{syncWorkspaceReadme:f,WORKSPACE_README_PATH:d}=await import('./workspace-readme-56YZ4EAZ.js'),h=await f({workspacePath:t,workspaceName:p.contract.workspace.name,profile:p.contract.workspace.profile??"minimal",projectCount:p.contract.projects.length}),{buildWorkspaceModel:u,writeWorkspaceModel:g}=await import('./workspace-model-EIQSKDX7.js'),a=await u({workspacePath:t,includeEvidence:true}),P=await g(a,t),{buildWorkspaceImpact:W,buildWorkspaceModelSnapshot:C,diffWorkspaceModel:y,writeWorkspaceImpact:A,writeWorkspaceModelDiff:j,writeWorkspaceModelSnapshot:E}=await import('./workspace-intelligence-3YERTBA3.js'),{WORKSPACE_INTELLIGENCE_ARTIFACTS:s}=await import('./workspace-intelligence-runtime-registry-IW6J53LO.js'),R=e.join(t,s.snapshot),l=false;if(!await N.pathExists(R)){let r=await C({workspacePath:t,model:a});await E(r,t),l=true;}let S=await y({workspacePath:t,fromPath:s.snapshot,model:a}),b=await j(S,t),v=await W({workspacePath:t,fromPath:s.diff}),O=await A(v,t),T=await m({workspacePath:t,strict:true}),_=await k({workspacePath:t,result:T}),{syncWorkspaceAgentGrounding:M}=await import('./workspace-agent-sync-ANBHBZ2H.js'),w=await M({workspacePath:t,model:a,write:true,refreshContext:true,strict:false,preset:"enterprise",targets:["all"],projectGrounding:o.projectGrounding??"managed"}),x=[i,(await import('./workspace-registry-summary-OV5KX3WC.js')).WORKSPACE_REGISTRY_SUMMARY_RELATIVE_PATH,e.relative(t,h).split(e.sep).join("/")||d,e.relative(t,P).split(e.sep).join("/"),s.knowledgeGraph,...l?[s.snapshot]:[],e.relative(t,b).split(e.sep).join("/"),e.relative(t,O).split(e.sep).join("/"),e.relative(t,_).split(e.sep).join("/"),...w.writtenFiles].filter((r,I,G)=>G.indexOf(r)===I);return o.silent||console.log(F.gray(`\u2713 Workspace Intelligence synced \xB7 ${a.summary.projectCount} project(s) \xB7 model + graph + agent grounding`)),{workspacePath:t,projectCount:a.summary.projectCount,baselineCreated:l,writtenFiles:x,warnings:w.projectLenses?.skipped.map(r=>`${r.name}: ${r.reason}`)??[]}}async function D(n,o={}){let t=e.resolve(n),i=o.workspaceName??e.basename(t),{registerWorkspaceStrict:c}=await import('./workspace-BNRSBWSL.js');return await c(t,i),K(t,{silent:o.silent})}export{K as a,D as b};
1
+ import e from'path';import N from'fs-extra';import F from'chalk';async function K(n,o={}){let t=e.resolve(n),{WORKSPACE_CONTRACT_PATH:i,syncWorkspaceContract:c,verifyWorkspaceContract:m,writeWorkspaceContractVerifyEvidence:k}=await import('./workspace-contract-3BWIRSVQ.js'),p=await c({workspacePath:t,strict:true}),{syncWorkspaceReadme:f,WORKSPACE_README_PATH:d}=await import('./workspace-readme-56YZ4EAZ.js'),h=await f({workspacePath:t,workspaceName:p.contract.workspace.name,profile:p.contract.workspace.profile??"minimal",projectCount:p.contract.projects.length}),{buildWorkspaceModel:u,writeWorkspaceModel:g}=await import('./workspace-model-ETCLINRB.js'),a=await u({workspacePath:t,includeEvidence:true}),P=await g(a,t),{buildWorkspaceImpact:W,buildWorkspaceModelSnapshot:C,diffWorkspaceModel:y,writeWorkspaceImpact:A,writeWorkspaceModelDiff:j,writeWorkspaceModelSnapshot:E}=await import('./workspace-intelligence-625UN27X.js'),{WORKSPACE_INTELLIGENCE_ARTIFACTS:s}=await import('./workspace-intelligence-runtime-registry-IW6J53LO.js'),R=e.join(t,s.snapshot),l=false;if(!await N.pathExists(R)){let r=await C({workspacePath:t,model:a});await E(r,t),l=true;}let S=await y({workspacePath:t,fromPath:s.snapshot,model:a}),b=await j(S,t),v=await W({workspacePath:t,fromPath:s.diff}),O=await A(v,t),T=await m({workspacePath:t,strict:true}),_=await k({workspacePath:t,result:T}),{syncWorkspaceAgentGrounding:M}=await import('./workspace-agent-sync-YLP75OWF.js'),w=await M({workspacePath:t,model:a,write:true,refreshContext:true,strict:false,preset:"enterprise",targets:["all"],projectGrounding:o.projectGrounding??"managed"}),x=[i,(await import('./workspace-registry-summary-VSOBKAJG.js')).WORKSPACE_REGISTRY_SUMMARY_RELATIVE_PATH,e.relative(t,h).split(e.sep).join("/")||d,e.relative(t,P).split(e.sep).join("/"),s.knowledgeGraph,...l?[s.snapshot]:[],e.relative(t,b).split(e.sep).join("/"),e.relative(t,O).split(e.sep).join("/"),e.relative(t,_).split(e.sep).join("/"),...w.writtenFiles].filter((r,I,G)=>G.indexOf(r)===I);return o.silent||console.log(F.gray(`\u2713 Workspace Intelligence synced \xB7 ${a.summary.projectCount} project(s) \xB7 model + graph + agent grounding`)),{workspacePath:t,projectCount:a.summary.projectCount,baselineCreated:l,writtenFiles:x,warnings:w.projectLenses?.skipped.map(r=>`${r.name}: ${r.reason}`)??[]}}async function D(n,o={}){let t=e.resolve(n),i=o.workspaceName??e.basename(t),{registerWorkspaceStrict:c}=await import('./workspace-LQ77WAHC.js');return await c(t,i),K(t,{silent:o.silent})}export{K as a,D as b};
@@ -1,4 +1,4 @@
1
- import {a as a$1}from'./chunk-JEI6BTZI.js';import {a}from'./chunk-PXWKMPPI.js';import {c,e,d}from'./chunk-KBR4Y4RW.js';import {d as d$1,b}from'./chunk-YEEAWZWI.js';import {g}from'./chunk-OFWSZYUX.js';import {p as p$1,l}from'./chunk-WSRUPDZN.js';import {m,a as a$2}from'./chunk-SP5EHSWG.js';import {e as e$1}from'./chunk-CCDGHPEJ.js';import {b as b$2}from'./chunk-D65FCQIO.js';import {a as a$3}from'./chunk-AFIFZTOY.js';import v from'path';import b$1 from'fs-extra';function J(e$1){switch(e$1){case "why":return d;case "trace":return e;default:return c}}async function P(e,o,n){try{if(!await b$1.pathExists(e))return null;let r=await b$1.readJson(e);return o?b$2(o,r,e):n&&a$3(r,n,e),r}catch(r){if((o||n)&&await b$1.pathExists(e))throw r;return null}}function G(e,o){if(!e)return null;let n=o.trim().toLowerCase();return e.projects.find(r=>r.slug.toLowerCase()===n||r.relativePath.toLowerCase()===n)??null}function X(e,o,n){let r=n.trim().toLowerCase(),t=(l(e)?.nodes.map(a=>a.id)??e.projects.map(a=>a.name)).find(a=>a.toLowerCase()===r);if(t)return t;let d=e.projects.find(a=>[a.name,a.path,v.basename(a.path)].filter(u=>u.trim().length>0).some(u=>u.toLowerCase()===r));if(d)return d.name;let c=G(o,n);if(c){let a=e.projects.find(u=>u.path===c.relativePath||u.path.endsWith(`/${c.relativePath}`));if(a)return a.name}return n}function Y(e,o){if(!e)return [];let n=o.trim().toLowerCase(),r=new Set;for(let l of e.projects){l.contracts.dependsOn?.some(t=>t.toLowerCase()===n)&&r.add(l.slug);for(let t of l.contracts.consumes??[])for(let d of e.projects)d.contracts.publishes?.includes(t)&&d.slug===n&&r.add(l.slug);}return [...r].sort()}function q(e,o){if(!e)return [];let n=o.trim().toLowerCase();return e.steps.filter(r=>r.scope==="project"&&r.project?.toLowerCase()===n&&r.command?.display).map(r=>r.command.display).slice(0,8)}function p(e,o,n){return {id:e,title:o,body:n.trim()}}async function fe(e){let o=v.resolve(e.workspacePath),n=(e.now??new Date).toISOString(),r=e.model??await p$1({workspacePath:o,includeEvidence:true}),l$1=e.contract;if(l$1===void 0)try{l$1=(await m({workspacePath:o})).contract;}catch{l$1=null;}let t=e.verify;t===void 0&&(t=await P(v.join(o,d$1),d$1));let d=e.impact;if(d===void 0&&(d=await P(v.join(o,g),g)),e.target.kind==="release-blocked"){let s=t?.blockingReasons??[],i=(r.summary?.projectCount??r.projects.length)===0,g=[p("verdict",i?"Workspace scaffold posture":"Release verdict",t?i?`Scaffold posture: **${t.summary.verdict}** (exit ${t.summary.exitCode}). Freshness: **${t.freshness.verdict}**. No registered projects yet \u2014 release gates apply after the first project is added.`:`Verdict: **${t.summary.verdict}** (exit ${t.summary.exitCode}). Risk: **${t.impact.risk}**. Freshness: **${t.freshness.verdict}**.`:"No workspace verify report found. Run `npx workspai workspace verify --json --write` first."),p("blockers",i?"Pre-project signals":"Blocking reasons",s.length?s.map(h=>`- ${h}`).join(`
1
+ import {a as a$1}from'./chunk-JEI6BTZI.js';import {a}from'./chunk-PXWKMPPI.js';import {c,e,d}from'./chunk-KBR4Y4RW.js';import {d as d$1,b}from'./chunk-O6R7SE6Y.js';import {g}from'./chunk-NBJ6AP7K.js';import {p as p$1,l}from'./chunk-NA2NXX5P.js';import {m,a as a$2}from'./chunk-KG3TUTXU.js';import {e as e$1}from'./chunk-CCDGHPEJ.js';import {b as b$2}from'./chunk-D65FCQIO.js';import {a as a$3}from'./chunk-AFIFZTOY.js';import v from'path';import b$1 from'fs-extra';function J(e$1){switch(e$1){case "why":return d;case "trace":return e;default:return c}}async function P(e,o,n){try{if(!await b$1.pathExists(e))return null;let r=await b$1.readJson(e);return o?b$2(o,r,e):n&&a$3(r,n,e),r}catch(r){if((o||n)&&await b$1.pathExists(e))throw r;return null}}function G(e,o){if(!e)return null;let n=o.trim().toLowerCase();return e.projects.find(r=>r.slug.toLowerCase()===n||r.relativePath.toLowerCase()===n)??null}function X(e,o,n){let r=n.trim().toLowerCase(),t=(l(e)?.nodes.map(a=>a.id)??e.projects.map(a=>a.name)).find(a=>a.toLowerCase()===r);if(t)return t;let d=e.projects.find(a=>[a.name,a.path,v.basename(a.path)].filter(u=>u.trim().length>0).some(u=>u.toLowerCase()===r));if(d)return d.name;let c=G(o,n);if(c){let a=e.projects.find(u=>u.path===c.relativePath||u.path.endsWith(`/${c.relativePath}`));if(a)return a.name}return n}function Y(e,o){if(!e)return [];let n=o.trim().toLowerCase(),r=new Set;for(let l of e.projects){l.contracts.dependsOn?.some(t=>t.toLowerCase()===n)&&r.add(l.slug);for(let t of l.contracts.consumes??[])for(let d of e.projects)d.contracts.publishes?.includes(t)&&d.slug===n&&r.add(l.slug);}return [...r].sort()}function q(e,o){if(!e)return [];let n=o.trim().toLowerCase();return e.steps.filter(r=>r.scope==="project"&&r.project?.toLowerCase()===n&&r.command?.display).map(r=>r.command.display).slice(0,8)}function p(e,o,n){return {id:e,title:o,body:n.trim()}}async function fe(e){let o=v.resolve(e.workspacePath),n=(e.now??new Date).toISOString(),r=e.model??await p$1({workspacePath:o,includeEvidence:true}),l$1=e.contract;if(l$1===void 0)try{l$1=(await m({workspacePath:o})).contract;}catch{l$1=null;}let t=e.verify;t===void 0&&(t=await P(v.join(o,d$1),d$1));let d=e.impact;if(d===void 0&&(d=await P(v.join(o,g),g)),e.target.kind==="release-blocked"){let s=t?.blockingReasons??[],i=(r.summary?.projectCount??r.projects.length)===0,g=[p("verdict",i?"Workspace scaffold posture":"Release verdict",t?i?`Scaffold posture: **${t.summary.verdict}** (exit ${t.summary.exitCode}). Freshness: **${t.freshness.verdict}**. No registered projects yet \u2014 release gates apply after the first project is added.`:`Verdict: **${t.summary.verdict}** (exit ${t.summary.exitCode}). Risk: **${t.impact.risk}**. Freshness: **${t.freshness.verdict}**.`:"No workspace verify report found. Run `npx workspai workspace verify --json --write` first."),p("blockers",i?"Pre-project signals":"Blocking reasons",s.length?s.map(h=>`- ${h}`).join(`
2
2
  `):i?"No pre-project signals in the latest verify report.":"No blocking reasons in the latest verify report.")];return t?.resolutionHints?.length&&g.push(p("resolution","Resolution hints",t.resolutionHints.map(h=>`- **${h.blockerId}** (${h.resolutionClass}): ${h.commandRetryHint??h.fixHints[0]?.detail??"See fix hints"}`).join(`
3
3
  `))),{schemaVersion:a,generatedAt:n,workspacePath:o,target:e.target,summary:t?i?b(s.length,t.summary.verdict):s.length>0||t.summary.verdict==="blocked"?`Release blocked: ${t.summary.verdict} with ${s.length} blocking reason(s).`:t.summary.verdict==="needs-attention"?"Release needs attention: advisory or incomplete verification evidence remains; no blocking reason was reported.":`Release posture: ${t.summary.verdict}; no blocking reason was reported.`:"Release posture unknown \u2014 verify report missing.",sections:g,releaseVerdict:t?.summary.verdict,evidenceFreshness:t?.freshness.verdict,blocking:!!(t&&(t.summary.verdict==="blocked"||s.length>0)),releaseRisk:t?.impact.risk,blockingReasons:s,resolutionHints:t?.resolutionHints}}if(e.target.kind==="blocker"){let s=e.target,m=t?.resolutionHints?.find(g=>g.blockerId===s.blockerId),i=t?.blockingReasons.find(g=>g.includes(s.blockerId))??t?.blockingReasons[0];return {schemaVersion:a,generatedAt:n,workspacePath:o,target:s,summary:m?`Blocker ${s.blockerId}: ${m.resolutionClass}`:`Blocker ${s.blockerId} (no structured hint)`,sections:[p("reason","Blocking signal",i??"No matching blocking reason in verify."),p("hint","Resolution class",m?`${m.resolutionClass}
4
4
 
@@ -1,8 +1,8 @@
1
- import {c as c$1}from'./chunk-HCFWT42C.js';import {a}from'./chunk-A5FBGRJA.js';import {a as a$2}from'./chunk-27UR373Z.js';import {b as b$1}from'./chunk-D65FCQIO.js';import {i as i$1,h}from'./chunk-NZ3WZYD5.js';import {i}from'./chunk-VRW6KXNK.js';import {a as a$1}from'./chunk-TQEMLBAG.js';import {t,s}from'./chunk-MOSXTVPU.js';import {q as q$1,r,s as s$1}from'./chunk-RJIYCDVC.js';import {promises}from'fs';import {randomUUID}from'crypto';import p from'path';import c from'chalk';import ne from'fs-extra';import P from'ora';import {execa}from'execa';var ce=3e4,pe=45e3;async function le(e){try{let r=await execa("git",["rev-parse","--show-toplevel"],{cwd:e,env:a$1()});return r.stdout.trim()?p.resolve(e,r.stdout.trim()):null}catch{return null}}async function Z(e,r,t){if(await le(e)){r.warn("Git initialization skipped because target is already inside a git worktree");return}r.start("Initializing git repository...");try{await execa("git",["init"],{cwd:e,env:a$1()}),await execa("git",["add","."],{cwd:e,env:a$1()}),await execa("git",["-c","user.name=Workspai","-c","user.email=workspai@localhost","commit","-m",t],{cwd:e,env:a$1()}),r.succeed("Git repository initialized");}catch{r.warn("Could not initialize git repository");}}function B(e){let r=a(e.path),t=Array.isArray(e.projects)?e.projects:[],o=[],a$1=new Set;for(let s of t){if(!s||typeof s.name!="string"||typeof s.path!="string")continue;let i=a(s.path);a$1.has(i)||(a$1.add(i),o.push({name:s.name,path:i}));}return {name:e.name,path:r,mode:e.mode,projects:o}}function b(e){let r=[],t=new Set;for(let o of e.workspaces||[]){if(!o||typeof o.name!="string"||typeof o.path!="string")continue;let a=B(o);t.has(a.path)||(t.add(a.path),r.push(a));}return {workspaces:r}}async function de(e){let r;try{r=await promises.readFile(e,"utf8");}catch(t){if(t.code==="ENOENT")return {workspaces:[]};throw t}try{let t=JSON.parse(r);if(!t||!Array.isArray(t.workspaces))throw new Error("missing workspaces array");return b(t)}catch(t){throw new Error(`Workspace registry is invalid: ${e}`,{cause:t})}}async function me(e){let r;try{r=await promises.readFile(e,"utf8");}catch(o){if(o.code==="ENOENT")return {workspaces:[]};throw o}let t;try{t=JSON.parse(r);}catch(o){throw new Error(`Workspace registry is invalid: ${e}`,{cause:o})}if(!t||typeof t!="object"||!Array.isArray(t.workspaces))throw new Error(`Workspace registry is invalid: ${e}`);for(let o of t.workspaces)if(!o||typeof o.name!="string"||typeof o.path!="string"||o.mode!==void 0&&typeof o.mode!="string"||o.projects!==void 0&&!Array.isArray(o.projects)||Array.isArray(o.projects)&&o.projects.some(a=>!a||typeof a.name!="string"||typeof a.path!="string"))throw new Error(`Workspace registry contains an invalid entry: ${e}`);return b(t)}async function F(){let e={workspaces:[]},r=new Set;for(let t of s$1()){let o=await de(t);for(let a of o.workspaces)r.has(a.path)||(r.add(a.path),e.workspaces.push(a));}return e}async function ee(e=s$1()){let r={workspaces:[]},t=new Set;for(let o of e){let a=await me(o);for(let s of a.workspaces)t.has(s.path)||(t.add(s.path),r.workspaces.push(s));}return r}function ge(e){let r=e?.code;return process.platform==="win32"&&(r==="EPERM"||r==="EINVAL"||r==="ENOSYS")}async function te(e){try{await e.sync();}catch(r){if(!ge(r))throw r}}async function K(e,r){let t=p.dirname(e);await promises.mkdir(t,{recursive:true});let o=`${p.basename(e)}.`,a=Date.now();for(let i of await promises.readdir(t)){if(!i.startsWith(o)||!i.endsWith(".tmp"))continue;let n=p.join(t,i),d=await promises.stat(n).catch(()=>null);d&&a-d.mtimeMs>3e4&&await promises.rm(n,{force:true}).catch(()=>{});}let s=await promises.readFile(e,"utf8").catch(()=>null);if(s!==null){let i=false;try{let n=JSON.parse(s);i=Array.isArray(n.workspaces);}catch{i=false;}if(!i){let n=`${e}.corrupt-${Date.now()}`;await promises.copyFile(e,n);}}await re(e,`${JSON.stringify(b(r),null,2)}
1
+ import {c as c$1}from'./chunk-HCFWT42C.js';import {a}from'./chunk-A5FBGRJA.js';import {a as a$2}from'./chunk-27UR373Z.js';import {b as b$1}from'./chunk-D65FCQIO.js';import {i,h as h$1}from'./chunk-NZ3WZYD5.js';import {h}from'./chunk-X6TNBARH.js';import {a as a$1}from'./chunk-TQEMLBAG.js';import {t,s}from'./chunk-MOSXTVPU.js';import {q as q$1,r,s as s$1}from'./chunk-RJIYCDVC.js';import {promises}from'fs';import {randomUUID}from'crypto';import p from'path';import c from'chalk';import ne from'fs-extra';import P from'ora';import {execa}from'execa';var ce=3e4,pe=45e3;async function le(e){try{let r=await execa("git",["rev-parse","--show-toplevel"],{cwd:e,env:a$1()});return r.stdout.trim()?p.resolve(e,r.stdout.trim()):null}catch{return null}}async function Z(e,r,t){if(await le(e)){r.warn("Git initialization skipped because target is already inside a git worktree");return}r.start("Initializing git repository...");try{await execa("git",["init"],{cwd:e,env:a$1()}),await execa("git",["add","."],{cwd:e,env:a$1()}),await execa("git",["-c","user.name=Workspai","-c","user.email=workspai@localhost","commit","-m",t],{cwd:e,env:a$1()}),r.succeed("Git repository initialized");}catch{r.warn("Could not initialize git repository");}}function B(e){let r=a(e.path),t=Array.isArray(e.projects)?e.projects:[],o=[],a$1=new Set;for(let s of t){if(!s||typeof s.name!="string"||typeof s.path!="string")continue;let i=a(s.path);a$1.has(i)||(a$1.add(i),o.push({name:s.name,path:i}));}return {name:e.name,path:r,mode:e.mode,projects:o}}function b(e){let r=[],t=new Set;for(let o of e.workspaces||[]){if(!o||typeof o.name!="string"||typeof o.path!="string")continue;let a=B(o);t.has(a.path)||(t.add(a.path),r.push(a));}return {workspaces:r}}async function de(e){let r;try{r=await promises.readFile(e,"utf8");}catch(t){if(t.code==="ENOENT")return {workspaces:[]};throw t}try{let t=JSON.parse(r);if(!t||!Array.isArray(t.workspaces))throw new Error("missing workspaces array");return b(t)}catch(t){throw new Error(`Workspace registry is invalid: ${e}`,{cause:t})}}async function me(e){let r;try{r=await promises.readFile(e,"utf8");}catch(o){if(o.code==="ENOENT")return {workspaces:[]};throw o}let t;try{t=JSON.parse(r);}catch(o){throw new Error(`Workspace registry is invalid: ${e}`,{cause:o})}if(!t||typeof t!="object"||!Array.isArray(t.workspaces))throw new Error(`Workspace registry is invalid: ${e}`);for(let o of t.workspaces)if(!o||typeof o.name!="string"||typeof o.path!="string"||o.mode!==void 0&&typeof o.mode!="string"||o.projects!==void 0&&!Array.isArray(o.projects)||Array.isArray(o.projects)&&o.projects.some(a=>!a||typeof a.name!="string"||typeof a.path!="string"))throw new Error(`Workspace registry contains an invalid entry: ${e}`);return b(t)}async function F(){let e={workspaces:[]},r=new Set;for(let t of s$1()){let o=await de(t);for(let a of o.workspaces)r.has(a.path)||(r.add(a.path),e.workspaces.push(a));}return e}async function ee(e=s$1()){let r={workspaces:[]},t=new Set;for(let o of e){let a=await me(o);for(let s of a.workspaces)t.has(s.path)||(t.add(s.path),r.workspaces.push(s));}return r}function ge(e){let r=e?.code;return process.platform==="win32"&&(r==="EPERM"||r==="EINVAL"||r==="ENOSYS")}async function te(e){try{await e.sync();}catch(r){if(!ge(r))throw r}}async function K(e,r){let t=p.dirname(e);await promises.mkdir(t,{recursive:true});let o=`${p.basename(e)}.`,a=Date.now();for(let i of await promises.readdir(t)){if(!i.startsWith(o)||!i.endsWith(".tmp"))continue;let n=p.join(t,i),d=await promises.stat(n).catch(()=>null);d&&a-d.mtimeMs>3e4&&await promises.rm(n,{force:true}).catch(()=>{});}let s=await promises.readFile(e,"utf8").catch(()=>null);if(s!==null){let i=false;try{let n=JSON.parse(s);i=Array.isArray(n.workspaces);}catch{i=false;}if(!i){let n=`${e}.corrupt-${Date.now()}`;await promises.copyFile(e,n);}}await re(e,`${JSON.stringify(b(r),null,2)}
2
2
  `);}async function re(e,r){let t=p.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 te(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 ne.move(o,e,{overwrite:true});}}finally{await promises.rm(o,{force:true}).catch(()=>{});}}async function q(e){try{return {exists:true,content:await promises.readFile(e)}}catch(r){if(r.code==="ENOENT")return {exists:false};throw r}}async function Q(e,r){if(!r.exists){await promises.rm(e,{force:true});return}await re(e,r.content);}async function ue(e,r){let t=p.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 te(s);}catch(i){if(i.code!=="EEXIST")throw i;let n=await promises.stat(t).catch(()=>null);if(n&&Date.now()-n.mtimeMs>ce){let d=await promises.readFile(t,"utf8").then(m=>JSON.parse(m)).catch(()=>null),u=Number(d?.pid),w=false;if(Number.isInteger(u)&&u>0)try{process.kill(u,0),w=true;}catch(m){w=m.code==="EPERM";}if(!w){await promises.rm(t,{force:true}).catch(()=>{});continue}}if(Date.now()-a>pe)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(n=>JSON.parse(n).lockId===o).catch(()=>false)&&await promises.rm(t,{force:true}).catch(()=>{});}}async function _(e){let r$1=q$1(),t=p.join(r$1,"workspaces.json"),o=p.join(r(),"workspaces.json"),a=[...new Set(s$1())];return ue(r$1,async()=>{let[s,i]=await Promise.all([q(t),q(o)]),n=await ee(a);await e(n);let d=b(n);try{await K(t,d),await K(o,d);}catch(u){let m=(await Promise.allSettled([Q(t,s),Q(o,i)])).filter(g=>g.status==="rejected").map(g=>g.reason);throw m.length>0?new AggregateError([u,...m],"Workspace registry transaction failed and could not be fully restored"):u}return d})}async function oe(e,r){let t=a(e);await _(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 ze(e){let r=a(e),o=(await ee()).workspaces.find(a=>a.path===r);return o?{...o,projects:o.projects.map(a=>({...a}))}:null}async function Ge(e,r){let t=a(e);await _(o=>{let a=o.workspaces.findIndex(i=>i.path===t);if(!r){a>=0&&o.workspaces.splice(a,1);return}let s=B(r);a>=0?o.workspaces[a]=s:o.workspaces.push(s);});}async function Me(e){let r=a(e);await _(t=>{t.workspaces=t.workspaces.filter(o=>o.path!==r);});}async function ke(e,r){try{await oe(e,r);}catch{console.warn(c.gray("Note: Could not register workspace in shared registry"));}}async function Ve(e,r=false){let t$1=a(e),o={workspacePath:t$1,workspaceFound:false,added:[],skipped:0};try{let a$1=await F(),s=a$1.workspaces.find(g=>g.path===t$1);if(!s){if(await ke(t$1,p.basename(p.resolve(e))),a$1=await F(),s=a$1.workspaces.find(g=>g.path===t$1),!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,n=0,d=[],u=[],w=[e],m=new Set;for(;w.length>0;){let g=w.shift();if(!g||m.has(g))continue;m.add(g);let y=await promises.readdir(g,{withFileTypes:true});for(let h of y){if(!h.isDirectory()||h.name.startsWith(".")||["node_modules","dist","build","target","coverage","htmlcov"].includes(h.name))continue;let j=p.join(g,h.name),f=a(j);try{let k=false;for(let $ of [...t(f,"context.json"),...t(f,"project.json")])try{await promises.access($),k=true;break}catch{}if(k){let $=p.basename(f),R=s.projects.some(C=>C.path===f);u.push({name:$,path:f}),R?n++:(s.projects.push({name:$,path:f}),i++,d.push(f),r||console.log(`\u2714 Added: ${p.relative(e,f)}`));continue}}catch{}w.push(j);}}return await _(g=>{let y=g.workspaces.find(f=>f.path===t$1);if(!y)return;let h=`${t$1}${p.sep}`,j=(y.projects||[]).filter(f=>f.path!==t$1&&!f.path.startsWith(h));y.projects=B({...y,projects:[...j,...u]}).projects;}),i>0?r||console.log(`
4
4
  \u2705 Synced ${i} project(s) to registry`):r||console.log(`
5
- \u2705 All projects already registered (${n} found)`),{workspacePath:t$1,workspaceFound:true,added:d,skipped:n}}catch(a){return r||console.error("\u274C Failed to sync projects:",a.message),o}}async function we(e,r,t){let o=a(e),a$1=a(t);await _(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 n=i.projects.findIndex(u=>u.path===a$1||u.name===r),d={name:r,path:a$1};n>=0?i.projects[n]=d:i.projects.push(d);});}async function Ye(e,r,t){try{await we(e,r,t);}catch{}}async function He(e,r){let t=P("Creating Workspai workspace...").start();try{await promises.mkdir(e,{recursive:true}),await promises.mkdir(p.join(e,".workspai"),{recursive:true});let o={workspace_name:r.name,author:r.author,rapidkit_version:i(),created_at:new Date().toISOString(),type:"workspace"};await promises.writeFile(p.join(e,".workspai","config.json"),JSON.stringify(o,null,2));let{syncWorkspaceFoundationFiles:a}=await import('./create-HUEDWYDM.js');await a(e,{workspaceName:r.name,installMethod:"venv",writeMarker:true,writeGitignore:false,onlyIfMissing:true});let s=fe();await promises.writeFile(p.join(e,"rapidkit"),s),await promises.chmod(p.join(e,"rapidkit"),493);let i$1=he();await promises.writeFile(p.join(e,"rapidkit.cmd"),i$1);let n=ye(r.name);await promises.writeFile(p.join(e,"README.md"),n),await promises.writeFile(p.join(e,".gitignore"),`# Workspai workspace
5
+ \u2705 All projects already registered (${n} found)`),{workspacePath:t$1,workspaceFound:true,added:d,skipped:n}}catch(a){return r||console.error("\u274C Failed to sync projects:",a.message),o}}async function we(e,r,t){let o=a(e),a$1=a(t);await _(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 n=i.projects.findIndex(u=>u.path===a$1||u.name===r),d={name:r,path:a$1};n>=0?i.projects[n]=d:i.projects.push(d);});}async function Ye(e,r,t){try{await we(e,r,t);}catch{}}async function He(e,r){let t=P("Creating Workspai workspace...").start();try{await promises.mkdir(e,{recursive:true}),await promises.mkdir(p.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(p.join(e,".workspai","config.json"),JSON.stringify(o,null,2));let{syncWorkspaceFoundationFiles:a}=await import('./create-ZLDOBXG4.js');await a(e,{workspaceName:r.name,installMethod:"venv",writeMarker:true,writeGitignore:false,onlyIfMissing:true});let s=fe();await promises.writeFile(p.join(e,"rapidkit"),s),await promises.chmod(p.join(e,"rapidkit"),493);let i=he();await promises.writeFile(p.join(e,"rapidkit.cmd"),i);let n=ye(r.name);await promises.writeFile(p.join(e,"README.md"),n),await promises.writeFile(p.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 Z(e,P(),"Initial commit: Workspai workspace"),await oe(e,r.name);let{publishWorkspaceRegistrySummary:u}=await import('./workspace-registry-summary-OV5KX3WC.js');await u(e),console.log(`
20
+ `),await $e(e),t.succeed("Workspace created!"),r.skipGit||await Z(e,P(),"Initial commit: Workspai workspace"),await oe(e,r.name);let{publishWorkspaceRegistrySummary:u}=await import('./workspace-registry-summary-VSOBKAJG.js');await u(e),console.log(`
21
21
  ${c.green("\u2728 Workspai workspace created successfully!")}
22
22
 
23
23
  ${c.bold("\u{1F4C2} Workspace structure:")}
@@ -428,7 +428,7 @@ main() {
428
428
  print_help
429
429
  ;;
430
430
  version|-v|--version)
431
- echo "Workspai CLI (legacy ./rapidkit launcher) v${i()}"
431
+ echo "Workspai CLI (legacy ./rapidkit launcher) v${h()}"
432
432
  ;;
433
433
  *)
434
434
  echo -e "\${RED}\u274C Unknown command: $cmd\${NC}"
@@ -517,7 +517,7 @@ instructions start at \`AGENTS.md\`.
517
517
 
518
518
  - [Workspai Documentation](https://workspai.dev)
519
519
  - [GitHub Repository](https://github.com/chistiq/workspai)
520
- `}async function $e(e){let{fileURLToPath:r}=await import('url'),t=r(import.meta.url),o=p.dirname(t),a=p.resolve(o,".."),s=p.join(a,"templates","kits"),i=p.join(e,".workspai","templates"),{default:n}=await import('fs-extra');await n.copy(s,i);let d=p.join(a,"templates","generator.js"),u=p.join(e,".workspai","generator.js");await n.copy(d,u);}async function Ke(e,r){let t=r.template==="fastapi",o=t?"FastAPI":"NestJS",a=P(`Creating ${o} project...`).start();try{let{fileURLToPath:s}=await import('url'),i$1=s(import.meta.url),n=p.dirname(i$1),d=p.resolve(n,".."),u=t?"fastapi-standard":"nestjs-standard",w=p.join(d,"templates","kits",u);await promises.mkdir(e,{recursive:true});let m={project_name:t?r.name.replace(/-/g,"_").toLowerCase():r.name.replace(/_/g,"-").toLowerCase(),author:r.author,description:r.description||`${o} application generated with Workspai`,app_version:"0.1.0",license:"MIT",package_manager:r.package_manager||"npm",created_at:new Date().toISOString(),rapidkit_version:i()};await ae(w,e,m);let g=t?`# Python
520
+ `}async function $e(e){let{fileURLToPath:r}=await import('url'),t=r(import.meta.url),o=p.dirname(t),a=p.resolve(o,".."),s=p.join(a,"templates","kits"),i=p.join(e,".workspai","templates"),{default:n}=await import('fs-extra');await n.copy(s,i);let d=p.join(a,"templates","generator.js"),u=p.join(e,".workspai","generator.js");await n.copy(d,u);}async function Ke(e,r){let t=r.template==="fastapi",o=t?"FastAPI":"NestJS",a=P(`Creating ${o} project...`).start();try{let{fileURLToPath:s}=await import('url'),i=s(import.meta.url),n=p.dirname(i),d=p.resolve(n,".."),u=t?"fastapi-standard":"nestjs-standard",w=p.join(d,"templates","kits",u);await promises.mkdir(e,{recursive:true});let m={project_name:t?r.name.replace(/-/g,"_").toLowerCase():r.name.replace(/_/g,"-").toLowerCase(),author:r.author,description:r.description||`${o} application generated with Workspai`,app_version:"0.1.0",license:"MIT",package_manager:r.package_manager||"npm",created_at:new Date().toISOString(),rapidkit_version:h()};await ae(w,e,m);let g=t?`# Python
521
521
  __pycache__/
522
522
  *.py[cod]
523
523
  *$py.class
@@ -663,4 +663,4 @@ ${c.gray("\u{1F4A1} Tip: Install globally (npm i -g workspai) to use without npx
663
663
  \u{1F4E6} Registered Workspai Workspaces:
664
664
  `));for(let m of d.workspaces)console.log(c.cyan(` ${m.name}`)),console.log(c.gray(` Path: ${m.path}`)),console.log(c.gray(` Projects: ${m.projects?.length||0}`)),console.log();n>0&&console.log(c.gray(`Cleaned ${n} stale workspace entr${n===1?"y":"ies"}.`)),console.log(c.gray(`Total: ${d.workspaces.length} workspace(s)
665
665
  `));}catch(a){if(e.json){console.log(JSON.stringify({schemaVersion:"rapidkit-workspace-list-v1",registryPath:t,workspaces:[],summary:{total:0,missing:0,registryExists:true,registryValid:false},error:{code:"workspace.registry.read_failed",message:a.message}},null,2));return}console.error(c.red(`
666
- \u274C Failed to read workspace registry`)),console.error(c.gray(String(a)));}}async function ve(e){try{let r=await promises.readFile(e,"utf8");return JSON.parse(r)}catch{return null}}async function D(e){for(let r of e){let t=await ve(r);if(t!==null)return t}return null}function _e(e){return c$1(e)}async function Ee(e){return a$2(e,{skipDirs:new Set(["node_modules","dist","build","target","coverage","htmlcov"]),includeHiddenDirs:false,descendIntoMatchedProjects:true})}async function O(e){try{return (await promises.readdir(e,{withFileTypes:true})).filter(t=>t.isFile()&&t.name.toLowerCase().endsWith(".json")).map(t=>t.name).sort((t,o)=>t.localeCompare(o))}catch{return []}}async function Qe(e,r){let t$1=r?.includePaths===true,o=r?.includeDoctorEvidence!==false,a=r?.includeBlueprint!==false,s$1=p.resolve(e),i=await D(s(s$1,"workspace.json")),n=typeof i?.workspace_name=="string"&&i.workspace_name.trim()||p.basename(s$1),d=typeof i?.profile=="string"?i.profile:void 0,u=typeof i?.rapidkit_version=="string"?i.rapidkit_version:void 0,w=await Ee(s$1),m=[];for(let k of w){let $=await D(t(k,"project.json")),R=p.relative(s$1,k)||".",C=p.dirname(t(k,p.join("reports","placeholder"))[0]),J=p.dirname(t(k,p.join("reports","placeholder"))[1]),N={name:p.basename(k),relative_path:R,runtime:typeof $?.runtime=="string"?$.runtime:void 0,kit_name:typeof $?.kit_name=="string"?$.kit_name:void 0,modules:Array.isArray($?.modules)?$.modules.filter(E=>typeof E=="string"):void 0};if(t$1&&(N.absolute_path=k),o){let E=await D([p.join(C,"doctor-last-run.json"),p.join(J,"doctor-last-run.json")]);_e(E)&&(N.doctor_report=E);}let U=[...await O(C),...await O(J)].filter((E,se,ie)=>ie.indexOf(E)===se);U.length>0&&(N.reports=U),m.push(N);}let g=s(s$1,"reports"),y=[...await O(g[0]),...await O(g[1])].filter((k,$,R)=>R.indexOf(k)===$),h$1=await D(s(s$1,"workspace.contract.json")),j={schema_version:h.workspaceShareBundle.schemaVersion,generated_at:new Date().toISOString(),generated_by:"workspai",workspace:{name:n,relative_root:".",profile:d,rapidkit_version:u,...t$1?{absolute_root:s$1}:{}},summary:{project_count:m.length,doctor_evidence_included:o,contract_included:!!h$1},reports:{workspace:y},projects:m,...h$1?{contract:h$1}:{}};a&&(j.blueprint={schema_version:"rapidkit.workspace-blueprint.v1",purpose:"portable-reproducibility",workspace:{name:n,profile:d},projects:m.map(k=>({name:k.name,relative_path:k.relative_path,runtime:k.runtime,kit_name:k.kit_name,modules:k.modules??[],recreate_commands:[...k.kit_name?[`npx workspai create project ${k.kit_name} ${k.name} --yes --skip-install`]:[],`cd ${k.relative_path}`,"npx workspai init","npx workspai test"]})),recommended_commands:["npx workspai workspace contract verify --strict","npx workspai doctor workspace","npx workspai workspace run init --json","npx workspai workspace run test --strict --json","npx workspai readiness --strict --json"]});let f=r?.outputPath?p.resolve(r.outputPath):p.join(g[0],"share-bundle.json");return r?.outputPath||b$1(i$1.workspaceShareBundle,j),await promises.mkdir(p.dirname(f),{recursive:true}),await promises.writeFile(f,JSON.stringify(j,null,2),"utf8"),f}export{B as a,oe as b,ze as c,Ge as d,Me as e,ke as f,Ve as g,we as h,Ye as i,He as j,Ke as k,qe as l,Qe as m};
666
+ \u274C Failed to read workspace registry`)),console.error(c.gray(String(a)));}}async function ve(e){try{let r=await promises.readFile(e,"utf8");return JSON.parse(r)}catch{return null}}async function D(e){for(let r of e){let t=await ve(r);if(t!==null)return t}return null}function _e(e){return c$1(e)}async function Ee(e){return a$2(e,{skipDirs:new Set(["node_modules","dist","build","target","coverage","htmlcov"]),includeHiddenDirs:false,descendIntoMatchedProjects:true})}async function O(e){try{return (await promises.readdir(e,{withFileTypes:true})).filter(t=>t.isFile()&&t.name.toLowerCase().endsWith(".json")).map(t=>t.name).sort((t,o)=>t.localeCompare(o))}catch{return []}}async function Qe(e,r){let t$1=r?.includePaths===true,o=r?.includeDoctorEvidence!==false,a=r?.includeBlueprint!==false,s$1=p.resolve(e),i$1=await D(s(s$1,"workspace.json")),n=typeof i$1?.workspace_name=="string"&&i$1.workspace_name.trim()||p.basename(s$1),d=typeof i$1?.profile=="string"?i$1.profile:void 0,u=typeof i$1?.rapidkit_version=="string"?i$1.rapidkit_version:void 0,w=await Ee(s$1),m=[];for(let k of w){let $=await D(t(k,"project.json")),R=p.relative(s$1,k)||".",C=p.dirname(t(k,p.join("reports","placeholder"))[0]),J=p.dirname(t(k,p.join("reports","placeholder"))[1]),N={name:p.basename(k),relative_path:R,runtime:typeof $?.runtime=="string"?$.runtime:void 0,kit_name:typeof $?.kit_name=="string"?$.kit_name:void 0,modules:Array.isArray($?.modules)?$.modules.filter(E=>typeof E=="string"):void 0};if(t$1&&(N.absolute_path=k),o){let E=await D([p.join(C,"doctor-last-run.json"),p.join(J,"doctor-last-run.json")]);_e(E)&&(N.doctor_report=E);}let U=[...await O(C),...await O(J)].filter((E,se,ie)=>ie.indexOf(E)===se);U.length>0&&(N.reports=U),m.push(N);}let g=s(s$1,"reports"),y=[...await O(g[0]),...await O(g[1])].filter((k,$,R)=>R.indexOf(k)===$),h=await D(s(s$1,"workspace.contract.json")),j={schema_version:h$1.workspaceShareBundle.schemaVersion,generated_at:new Date().toISOString(),generated_by:"workspai",workspace:{name:n,relative_root:".",profile:d,rapidkit_version:u,...t$1?{absolute_root:s$1}:{}},summary:{project_count:m.length,doctor_evidence_included:o,contract_included:!!h},reports:{workspace:y},projects:m,...h?{contract:h}:{}};a&&(j.blueprint={schema_version:"rapidkit.workspace-blueprint.v1",purpose:"portable-reproducibility",workspace:{name:n,profile:d},projects:m.map(k=>({name:k.name,relative_path:k.relative_path,runtime:k.runtime,kit_name:k.kit_name,modules:k.modules??[],recreate_commands:[...k.kit_name?[`npx workspai create project ${k.kit_name} ${k.name} --yes --skip-install`]:[],`cd ${k.relative_path}`,"npx workspai init","npx workspai test"]})),recommended_commands:["npx workspai workspace contract verify --strict","npx workspai doctor workspace","npx workspai workspace run init --json","npx workspai workspace run test --strict --json","npx workspai readiness --strict --json"]});let f=r?.outputPath?p.resolve(r.outputPath):p.join(g[0],"share-bundle.json");return r?.outputPath||b$1(i.workspaceShareBundle,j),await promises.mkdir(p.dirname(f),{recursive:true}),await promises.writeFile(f,JSON.stringify(j,null,2),"utf8"),f}export{B as a,oe as b,ze as c,Ge as d,Me as e,ke as f,Ve as g,we as h,Ye as i,He as j,Ke as k,qe as l,Qe as m};
@@ -0,0 +1,6 @@
1
+ import {a}from'./chunk-J7G3YL4O.js';import {d as d$1}from'./chunk-VR6XMUF3.js';import {b as b$1}from'./chunk-UJXE4UAX.js';import {b as b$2}from'./chunk-2FIX2MDC.js';import {spinner,log,note}from'@clack/prompts';import {execa}from'execa';import v from'chalk';import {createRequire}from'module';import {promises}from'fs';import C from'path';import _ from'os';function d(e,t,r){d$1({level:t==="failed"?"error":t==="warn"?"warn":"info",event:"progress",component:e.component,message:r,metadata:{phase:e.phase,status:t,...e.metadata}});}function A(e,t){let r=e;if(b$1())return d(t,"started",e),{start(n){return n&&(r=n),d(t,"started",r),this},succeed(n){d(t,"succeeded",n??r);},fail(n){d(t,"failed",n??r);},warn(n){d(t,"warn",n??r);},stop(n){d(t,"succeeded",n??r);},get text(){return r},set text(n){r=n,d(t,"started",n);}};let i=spinner();return i.start(e),{start(n){return i.start(n??r),n&&(r=n),this},succeed(n){i.stop(n??r);},fail(n){i.stop(n??r,1);},warn(n){i.stop(n??r);},stop(n){i.stop(n??r);},get text(){return r},set text(n){r=n,i.message(n);}}}function B(e,t){return A(e,t)}function E(e,t,r,i="create"){d$1({level:"info",event:"progress",component:i,message:r,metadata:{phase:"step",stepNum:e,total:t,status:"started"}});}function Q(e){d$1({level:e.status==="failed"?"error":e.status==="warn"?"warn":"info",event:"progress",component:"workspace",message:e.message,metadata:{phase:`workspace.${e.action}`,action:e.action,status:e.status,...e.metadata??{}}});}function X(e){d$1({level:e.status==="failed"?"error":"info",event:"progress",component:e.component??"create",message:e.message,metadata:{phase:e.phase??"workspace.install.pypi",status:e.status,installMethod:e.installMethod,...e.attempt!==void 0?{attempt:e.attempt}:{},...e.maxAttempts!==void 0?{maxAttempts:e.maxAttempts}:{}}});}function c(e,t,r){b$1()&&d$1({level:e,event:"log",component:"cli",message:t,metadata:r});}var u={info(e){c("info",e),!b$1()&&log.info(e);},success(e){c("info",e,{outcome:"success"}),!b$1()&&log.success(e);},warn(e){c("warn",e),!b$1()&&log.warn(e);},error(e){c("error",e),!b$1()&&log.error(e);},step(e){c("info",e,{phase:"step"}),!b$1()&&log.step(e);},stepNumbered(e,t,r){let i=`${a.dim(`[${e}/${t}]`)} ${r}`;c("info",r,{phase:"step",stepNum:e,total:t}),!b$1()&&log.step(i);},note(e,t){c("info",e,{kind:"note",title:t}),!b$1()&&note(e,t);},message(e,t=a.brand("\u25C7")){c("info",e),!b$1()&&log.message(e,{symbol:t});},dim(e){b$1()||console.log(a.dim(e));},plain(e){b$1()||console.log(e);},nextSteps(e){b$1()||u.note(e.map(t=>a.white(t)).join(`
2
+ `),a.brand("Next steps"));}};var y=class{debugEnabled=false;setDebug(t){this.debugEnabled=t;}isJsonMode(){return b$1()}debug(t,...r){this.debugEnabled&&this.write("debug",t,r);}info(t,...r){this.write("info",t,r);}success(t,...r){this.write("info",t,r,{outcome:"success"},"success");}warn(t,...r){this.write("warn",t,r,void 0,"warn");}error(t,...r){this.write("error",t,r,void 0,"error");}step(t,r,i){if(b$1()){E(t,r,i);return}u.stepNumbered(t,r,i);}write(t,r,i,n,l="info"){let p=i.length>0?{details:i.map(k=>j(k))}:void 0;if(b$1()){d$1({level:t,event:"log",component:"cli",message:r,metadata:{...n,...p}});return}let o=t==="debug"?`[debug] ${r}`:r;switch(l){case "success":u.success(o);break;case "warn":u.warn(o);break;case "error":u.error(o);break;default:t==="debug"?u.dim(o):u.info(o);}}};function j(e){return e instanceof Error?{name:e.name,message:e.message}:e===null||typeof e=="string"||typeof e=="number"||typeof e=="boolean"?e:String(e)}var b=new y;function R(e){let t=e.startsWith("WORKSPAI_")?e:`WORKSPAI_${e.replace(/^RAPIDKIT_/,"")}`,r=e.startsWith("RAPIDKIT_")?e:`RAPIDKIT_${e.replace(/^WORKSPAI_/,"")}`,i=process.env[t]?.trim();return i||process.env[r]?.trim()||void 0}var T="workspai",W=createRequire(import.meta.url),O=W("../package.json"),g=O?.version??"0.0.0";function I(e){let r=e.trim().match(/^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/);if(!r)return null;let i=r[4]?r[4].split(".").map(n=>n.match(/^\d+$/)?Number(n):n):[];return {major:Number(r[1]),minor:Number(r[2]),patch:Number(r[3]),prerelease:i}}function V(e,t){let r=I(e),i=I(t);if(!r||!i)return 0;if(r.major!==i.major)return r.major>i.major?1:-1;if(r.minor!==i.minor)return r.minor>i.minor?1:-1;if(r.patch!==i.patch)return r.patch>i.patch?1:-1;if(r.prerelease.length===0&&i.prerelease.length===0)return 0;if(r.prerelease.length===0)return 1;if(i.prerelease.length===0)return -1;let n=Math.max(r.prerelease.length,i.prerelease.length);for(let l=0;l<n;l+=1){let p=r.prerelease[l],o=i.prerelease[l];if(p===void 0)return -1;if(o===void 0)return 1;if(p===o)continue;let k=typeof p=="number",P=typeof o=="number";return k&&P?p>o?1:-1:k?-1:P||String(p)>String(o)?1:-1}return 0}var K=14400*1e3;function $(){let e=R("CACHE_DIR")||(process.env.VITEST_WORKER_ID?C.join(_.homedir(),".workspai","cache",`vitest-${process.env.VITEST_WORKER_ID}`):C.join(_.homedir(),".workspai","cache"));return C.join(e,"update-check.json")}async function L(){try{let e=await promises.readFile($(),"utf-8"),t=JSON.parse(e);return typeof t.latestVersion=="string"&&typeof t.checkedAt=="number"&&t.currentVersion===g&&Date.now()-t.checkedAt<K?t:null}catch{return null}}async function F(e){try{let t=$();await promises.mkdir(C.dirname(t),{recursive:true}),await promises.writeFile(t,JSON.stringify({latestVersion:e,checkedAt:Date.now(),currentVersion:g}),"utf-8");}catch{}}async function Se(){try{b.debug("Checking for updates...");let e=await L();if(e){let i=Math.round((Date.now()-e.checkedAt)/6e4);b.debug(`Update check: cache hit (${i}m old)`),V(e.latestVersion,g)>0&&(console.log(v.yellow(`
3
+ \u26A0\uFE0F Update available: ${g} \u2192 ${e.latestVersion}`)),console.log(v.cyan(`Run: npm install -g workspai@latest
4
+ `)));return}let{stdout:t}=await execa("npm",["view",T,"version"],{timeout:b$2()}),r=t.trim();await F(r),r&&V(r,g)>0?(console.log(v.yellow(`
5
+ \u26A0\uFE0F Update available: ${g} \u2192 ${r}`)),console.log(v.cyan(`Run: npm install -g workspai@latest
6
+ `))):b.debug("You are using the latest version");}catch{b.debug("Could not check for updates");}}function Ae(){return g}export{A as a,B as b,Q as c,X as d,b as e,R as f,Se as g,Ae as h};
@@ -1 +1 @@
1
- export{c as PYTHON_FREE_WORKSPACE_PROFILES,a as buildWorkspaceManifest,f as createProject,g as registerWorkspaceAtPath,d as resolvePythonFreeFallbackProfile,b as syncWorkspaceFoundationFiles,e as writeWorkspaceLauncher}from'./chunk-QPE6VCDW.js';
1
+ export{c as PYTHON_FREE_WORKSPACE_PROFILES,a as buildWorkspaceManifest,f as createProject,g as registerWorkspaceAtPath,d as resolvePythonFreeFallbackProfile,b as syncWorkspaceFoundationFiles,e as writeWorkspaceLauncher}from'./chunk-KTW4EN47.js';
@@ -0,0 +1,149 @@
1
+ import {h as h$1}from'./chunk-X6TNBARH.js';import {b,a as a$1}from'./chunk-TQEMLBAG.js';import {promises}from'fs';import a from'path';import T from'nunjucks';import e from'chalk';import h from'ora';import {fileURLToPath}from'url';import {execa}from'execa';import G from'crypto';var J=fileURLToPath(import.meta.url),M=a.dirname(J);function O(t=32){let i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",x=G.randomBytes(t),o="";for(let p=0;p<t;p++)o+=i[x[p]%i.length];return o}async function te(t,i){let o=(i.template||"fastapi")==="fastapi",p=o?"FastAPI":"NestJS",d=i.kit_name||(o?"fastapi.standard":"nestjs.standard"),D=d.replace(".","/"),$=h(`Generating ${p} project...`).start();try{let w=a.resolve(M,".."),m;d==="fastapi.ddd"?m="fastapi-ddd":d.startsWith("fastapi")?m="fastapi-standard":m="nestjs-standard";let f=a.join(w,"templates","kits",m),S=T.configure(f,{autoescape:false,trimBlocks:true,lstripBlocks:true});S.addFilter("generate_secret",function(n,r=32){return O(r)});let F={project_name:i.project_name,author:i.author||"Workspai User",description:i.description||(o?"FastAPI service generated with Workspai":"NestJS application generated with Workspai"),app_version:i.app_version||"0.1.0",license:i.license||"MIT",package_manager:i.package_manager||"npm",node_version:i.node_version||"20.0.0",database_type:i.database_type||"postgresql",include_caching:i.include_caching||false,created_at:new Date().toISOString(),workspai_version:h$1(),rapidkit_version:h$1()},y;o?y=["src/main.py.j2","src/__init__.py.j2","src/cli.py.j2","src/routing/__init__.py.j2","src/routing/health.py.j2","src/routing/examples.py.j2","src/modules/__init__.py.j2","tests/__init__.py.j2","tests/test_health.py.j2","tests/test_examples.py.j2","README.md.j2","pyproject.toml.j2","Makefile.j2","env.example.j2","rapidkit.j2","rapidkit.cmd.j2"]:y=["src/main.ts.j2","src/app.module.ts.j2","src/app.controller.ts.j2","src/app.service.ts.j2","src/config/configuration.ts.j2","src/config/validation.ts.j2","src/config/index.ts.j2","src/modules/index.ts.j2","src/examples/examples.module.ts.j2","src/examples/examples.controller.ts.j2","src/examples/examples.service.ts.j2","src/examples/dto/create-note.dto.ts.j2","test/app.controller.spec.ts.j2","test/examples.controller.spec.ts.j2","test/app.e2e-spec.ts.j2","test/jest-e2e.json.j2","package.json.j2","tsconfig.json.j2","tsconfig.build.json.j2","nest-cli.json.j2","jest.config.ts.j2","eslint.config.cjs.j2","env.example.j2","docker-compose.yml.j2","Dockerfile.j2","README.md.j2","rapidkit.j2","rapidkit.cmd.j2"];for(let n of y){let r=a.join(f,n);try{await promises.access(r);}catch{continue}let _=await promises.readFile(r,"utf-8"),g;try{g=S.renderString(_,F);}catch(W){throw console.error(`Failed to render template: ${n}`),W}let c=n==="env.example.j2"?".env.example":n.replace(/\.j2$/,""),v=a.join(t,c);await promises.mkdir(a.dirname(v),{recursive:true}),await promises.writeFile(v,g),(c.endsWith(".workspai/rapidkit")||c.endsWith(".workspai/cli.py")||c.endsWith(".workspai/activate")||c.endsWith(".rapidkit/rapidkit")||c.endsWith(".rapidkit/cli.py")||c.endsWith(".rapidkit/activate")||c==="rapidkit")&&await promises.chmod(v,493);}if(o){let n=a.join(f,".rapidkit","context.json"),r=a.join(t,".workspai","context.json");try{await promises.mkdir(a.join(t,".workspai"),{recursive:true}),await promises.copyFile(n,r);}catch{await promises.mkdir(a.join(t,".workspai"),{recursive:true});let g=i.engine||"pip";await promises.writeFile(r,JSON.stringify({engine:g,created_by:"workspai-cli-fallback",legacyCreatedBy:"rapidkit-npm-fallback"},null,2));}}let I=a.join(t,".workspai");await promises.mkdir(I,{recursive:true});let R=a.join(I,"project.json"),C={kit_name:d,profile:D,created_at:new Date().toISOString(),created_by:"workspai-cli-fallback",workspai_version:h$1(),rapidkit_version:h$1(),runtime:o?"python":"node"},P=JSON.stringify(C,null,2);await promises.writeFile(R,P,"utf-8");let j=a.join(t,"rapidkit");await promises.access(j).then(()=>true).catch(()=>false)||(await promises.writeFile(j,`#!/usr/bin/env bash
2
+ set -euo pipefail
3
+ SCRIPT_DIR="$(cd "$(dirname "\${BASH_SOURCE[0]}")" && pwd)"
4
+ cd "$SCRIPT_DIR"
5
+ RAPIDKIT_LOCAL_LAUNCHER_BYPASS=1 npx workspai "$@"
6
+ `),await promises.chmod(j,493));let b$1=a.join(t,"rapidkit.cmd");await promises.access(b$1).then(()=>true).catch(()=>false)||await promises.writeFile(b$1,`@echo off
7
+ set RAPIDKIT_LOCAL_LAUNCHER_BYPASS=1
8
+ npx workspai %*
9
+ `);let L=o?`# Python
10
+ __pycache__/
11
+ *.py[cod]
12
+ *$py.class
13
+ *.so
14
+ .Python
15
+ build/
16
+ develop-eggs/
17
+ dist/
18
+ downloads/
19
+ eggs/
20
+ .eggs/
21
+ lib/
22
+ lib64/
23
+ parts/
24
+ sdist/
25
+ var/
26
+ wheels/
27
+ *.egg-info/
28
+ .installed.cfg
29
+ *.egg
30
+
31
+ # Virtual environments
32
+ .venv/
33
+ venv/
34
+ ENV/
35
+ env/
36
+
37
+ # IDEs
38
+ .vscode/
39
+ .idea/
40
+ *.swp
41
+ *.swo
42
+ *~
43
+
44
+ # OS
45
+ .DS_Store
46
+ Thumbs.db
47
+
48
+ # Project specific
49
+ .env
50
+ .env.local
51
+ `:`# Node artifacts
52
+ node_modules/
53
+ dist/
54
+ .tmp/
55
+ .env
56
+ .env.*
57
+ !.env.example
58
+
59
+ # Logs
60
+ logs/
61
+ *.log
62
+ npm-debug.log*
63
+ yarn-debug.log*
64
+ yarn-error.log*
65
+ pnpm-debug.log*
66
+
67
+ # OS
68
+ .DS_Store
69
+ Thumbs.db
70
+
71
+ # IDEs
72
+ .idea/
73
+ .vscode/
74
+
75
+ # Coverage
76
+ coverage/
77
+ `;if(await promises.writeFile(a.join(t,".gitignore"),L),$.succeed(`${p} project generated!`),!i.skipGit){let n=h("Initializing git repository...").start();try{await b(t)?n.warn("Git initialization skipped because target is already inside a git worktree"):(await execa("git",["init"],{cwd:t,env:a$1()}),await execa("git",["add","."],{cwd:t,env:a$1()}),await execa("git",["commit","-m",`Initial commit: ${p} project via Workspai`],{cwd:t,env:a$1()}),n.succeed("Git repository initialized"));}catch{n.warn("Could not initialize git repository");}}if(!o&&!i.skipInstall){let n=i.package_manager||"npm",r=h(`Installing dependencies with ${n}...`).start();try{await execa(n,n==="yarn"?["install"]:n==="pnpm"?["install"]:["install"],{cwd:t}),r.succeed("Dependencies installed");}catch{r.warn(`Could not install dependencies. Run '${n} install' manually.`);}}let A=a.basename(t);console.log(`
78
+ ${e.yellow("\u26A0\uFE0F Limited offline mode:")} This project was created using basic templates.
79
+ ${e.gray("For full kit features, install Python 3.10+ and rapidkit-core:")}
80
+ ${e.cyan(" sudo apt install python3 python3-pip python3-venv")}
81
+ ${e.cyan(" pip install rapidkit-core")}
82
+ `),console.log(o?`
83
+ ${e.green("\u2728 FastAPI project created successfully!")}
84
+
85
+ ${e.bold("\u{1F4C2} Project structure:")}
86
+ ${t}/
87
+ \u251C\u2500\u2500 .workspai/ # Workspai metadata
88
+ \u251C\u2500\u2500 src/
89
+ \u2502 \u251C\u2500\u2500 main.py # FastAPI application
90
+ \u2502 \u251C\u2500\u2500 cli.py # CLI commands
91
+ \u2502 \u251C\u2500\u2500 routing/ # API routes
92
+ \u2502 \u2514\u2500\u2500 modules/ # Module system
93
+ \u251C\u2500\u2500 tests/ # Test suite
94
+ \u251C\u2500\u2500 pyproject.toml # Poetry configuration
95
+ \u2514\u2500\u2500 README.md
96
+
97
+ ${e.bold("\u{1F680} Get started:")}
98
+ ${e.cyan(`cd ${A}`)}
99
+ ${e.cyan("npx workspai init")} ${e.gray("# Install dependencies")}
100
+ ${e.cyan("npx workspai dev")} ${e.gray("# Start dev server")}
101
+
102
+ ${e.bold("\u{1F4DA} Available commands:")}
103
+ npx workspai init # Install dependencies (poetry install)
104
+ npx workspai dev # Start dev server with hot reload
105
+ npx workspai start # Start production server
106
+ npx workspai test # Run tests
107
+ npx workspai lint # Lint code
108
+ npx workspai format # Format code
109
+
110
+ ${e.gray("Alternative: make dev, npx workspai dev, poetry run dev")}
111
+ ${e.gray("\u{1F4A1} Tip: Install globally (npm i -g workspai) to use without npx")}
112
+ `:`
113
+ ${e.green("\u2728 NestJS project created successfully!")}
114
+
115
+ ${e.bold("\u{1F4C2} Project structure:")}
116
+ ${t}/
117
+ \u251C\u2500\u2500 .workspai/ # Workspai metadata
118
+ \u251C\u2500\u2500 src/
119
+ \u2502 \u251C\u2500\u2500 main.ts # Application entry point
120
+ \u2502 \u251C\u2500\u2500 app.module.ts # Root module
121
+ \u2502 \u251C\u2500\u2500 config/ # Configuration
122
+ \u2502 \u2514\u2500\u2500 examples/ # Example module
123
+ \u251C\u2500\u2500 test/ # Test files
124
+ \u251C\u2500\u2500 package.json # Dependencies
125
+ \u2514\u2500\u2500 README.md
126
+
127
+ ${e.bold("\u{1F680} Get started:")}
128
+ ${e.cyan(`cd ${A}`)}
129
+ ${e.cyan("npx workspai init")} ${e.gray("# Install dependencies")}
130
+ ${e.cyan("cp .env.example .env")}
131
+ ${e.cyan("npx workspai dev")} ${e.gray("# Start dev server")}
132
+
133
+ ${e.bold("\u{1F4DA} Available commands:")}
134
+ npx workspai init # Install dependencies
135
+ npx workspai dev # Start dev server with hot reload
136
+ npx workspai start # Start production server
137
+ npx workspai build # Build for production
138
+ npx workspai test # Run tests
139
+ npx workspai lint # Lint code
140
+ npx workspai format # Format code
141
+
142
+ ${e.bold("\u{1F310} API endpoints:")}
143
+ http://localhost:8000/health # Health check
144
+ http://localhost:8000/docs # Swagger docs
145
+ http://localhost:8000/examples/notes # Example API
146
+
147
+ ${e.gray("Alternative: npm run start:dev, npx workspai dev")}
148
+ ${e.gray("\u{1F4A1} Tip: Install globally (npm i -g workspai) to use without npx")}
149
+ `);}catch(w){throw $.fail(`Failed to generate ${p} project`),w}}export{te as generateDemoKit};
@@ -1 +1 @@
1
- export{a as DOCTOR_WORKSPACE_REPORT_PATH,n as applyEnvKeyAddFix,j as applyFileAppendFix,k as applyFileCopyFix,i as applyFileCreateFix,m as applyJsonEditFix,o as applyMakefileTargetFix,h as applyPackageScriptFix,f as assertOperationPathInsideProject,g as assertOperationPathInsideProjectResolved,e as buildRepairOperationIdentity,q as computeDoctorFixAwareExitCode,p as computeDoctorGateExitCode,l as decodeJsonPointerSegment,d as parseInternalRepairCommand,c as parsePackageScriptFix,b as resolveDoctorPolicyProfile,r as runDoctor}from'./chunk-ENKGGWRX.js';
1
+ export{a as DOCTOR_WORKSPACE_REPORT_PATH,n as applyEnvKeyAddFix,j as applyFileAppendFix,k as applyFileCopyFix,i as applyFileCreateFix,m as applyJsonEditFix,o as applyMakefileTargetFix,h as applyPackageScriptFix,f as assertOperationPathInsideProject,g as assertOperationPathInsideProjectResolved,e as buildRepairOperationIdentity,q as computeDoctorFixAwareExitCode,p as computeDoctorGateExitCode,l as decodeJsonPointerSegment,d as parseInternalRepairCommand,c as parsePackageScriptFix,b as resolveDoctorPolicyProfile,r as runDoctor}from'./chunk-VDFHUYAQ.js';
@@ -1,4 +1,4 @@
1
- import {b as b$1,c}from'./chunk-IBJEQHJR.js';import {i}from'./chunk-VRW6KXNK.js';import {b as b$2,a}from'./chunk-TQEMLBAG.js';import {promises}from'fs';import o from'path';import i$1 from'chalk';import S from'ora';import {execa}from'execa';var b="net8.0",j="8080";function y(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}function E(e,r){return e.trim().replace(/[^A-Za-z0-9_.]+/g,".").replace(/^\.+|\.+$/g,"").replace(/\.{2,}/g,".").split(".").map(a=>a.replace(/^[^A-Za-z_]+/,"").replace(/[^A-Za-z0-9_]/g,"")).filter(Boolean).join(".")||r}function _(e,r){return e.replace(/[\r\n\t]+/g," ").trim()||r}function D(e){return e.trim()===b}function $(){return JSON.stringify({engine:"npm",runtime:"dotnet"},null,2)}function I(e,r){return JSON.stringify({kit_name:"dotnet.webapi.clean",runtime:"dotnet",framework:"dotnet",module_support:false,project_name:e.project_name,root_namespace:e.root_namespace,target_framework:e.target_framework,app_version:e.app_version,created_by:"workspai",workspai_version:r,rapidkit_version:r,created_at:new Date().toISOString()},null,2)}function P(e){return `<Project Sdk="Microsoft.NET.Sdk.Web">
1
+ import {b as b$1,c}from'./chunk-IBJEQHJR.js';import {h as h$1}from'./chunk-X6TNBARH.js';import {b as b$2,a}from'./chunk-TQEMLBAG.js';import {promises}from'fs';import o from'path';import i from'chalk';import S from'ora';import {execa}from'execa';var b="net8.0",j="8080";function y(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}function E(e,r){return e.trim().replace(/[^A-Za-z0-9_.]+/g,".").replace(/^\.+|\.+$/g,"").replace(/\.{2,}/g,".").split(".").map(a=>a.replace(/^[^A-Za-z_]+/,"").replace(/[^A-Za-z0-9_]/g,"")).filter(Boolean).join(".")||r}function _(e,r){return e.replace(/[\r\n\t]+/g," ").trim()||r}function D(e){return e.trim()===b}function $(){return JSON.stringify({engine:"npm",runtime:"dotnet"},null,2)}function I(e,r){return JSON.stringify({kit_name:"dotnet.webapi.clean",runtime:"dotnet",framework:"dotnet",module_support:false,project_name:e.project_name,root_namespace:e.root_namespace,target_framework:e.target_framework,app_version:e.app_version,created_by:"workspai",workspai_version:r,rapidkit_version:r,created_at:new Date().toISOString()},null,2)}function P(e){return `<Project Sdk="Microsoft.NET.Sdk.Web">
2
2
  <PropertyGroup>
3
3
  <TargetFramework>${e.target_framework}</TargetFramework>
4
4
  <Nullable>enable</Nullable>
@@ -417,9 +417,9 @@ Global
417
417
  {22222222-2222-2222-2222-222222222222} = {44444444-4444-4444-4444-444444444444}
418
418
  EndGlobalSection
419
419
  EndGlobal
420
- `.trimStart()}async function q(e,r){if(!r)try{if(await b$2(e)){console.log(i$1.gray("\u26A0 git init skipped (target is inside an existing git worktree)"));return}await execa("git",["init"],{cwd:e,stdio:"ignore",env:a()});}catch{console.log(i$1.gray("\u26A0 git init skipped (git not found or error)"));}}async function B(e){try{await execa("dotnet",["--version"],{cwd:e,timeout:3e3,stdio:"pipe"});}catch{console.log(i$1.yellow("\u26A0 .NET SDK not found in PATH - project scaffolded, but init/build need .NET 8+")),console.log(i$1.gray(" Install: https://dotnet.microsoft.com/download"));}}async function oe(e,r){let s=y(r.project_name)||"dotnet-api",c$1=E(r.root_namespace||`Workspai.${b$1(s)}`,"Workspai.App"),a=r.target_framework?.trim(),C=a&&D(a)?a:b,R=r.port&&/^\d+$/.test(r.port)?r.port:j,t={project_name:s,root_namespace:c$1,description:_(r.description||"","Production-ready ASP.NET Core Web API scaffolded by Workspai."),target_framework:C,app_version:r.app_version||"0.1.0",port:R,skipGit:r.skipGit??false,skipInstall:r.skipInstall??false},A=S(`Creating ASP.NET Core Web API project ${s}`).start();await promises.mkdir(e,{recursive:true}),await c(o.join(e,`${s}.sln`),H(t)),await c(o.join(e,"src",`${s}.csproj`),P(t)),await c(o.join(e,"src","Program.cs"),T(t)),await c(o.join(e,"src","Application","ApplicationInfoOptions.cs"),w(t)),await c(o.join(e,"src","Application","ApplicationServiceRegistration.cs"),x(t)),await c(o.join(e,"src","Application","SystemInfoService.cs"),v(t)),await c(o.join(e,"src","Infrastructure","InfrastructureServiceRegistration.cs"),N(t)),await c(o.join(e,"src","Presentation","PresentationServiceRegistration.cs"),h(t)),await c(o.join(e,"src","Presentation","SystemEndpoints.cs"),V(t)),await c(o.join(e,"src","appsettings.json"),g(t)),await c(o.join(e,"src","appsettings.Development.json"),g(t)),await c(o.join(e,"tests",`${s}.Tests.csproj`),k(t)),await c(o.join(e,"tests","RuntimeSmokeTests.cs"),L(t)),await c(o.join(e,"Dockerfile"),U(t)),await c(o.join(e,"docker-compose.yml"),O(t)),await c(o.join(e,"Makefile"),W(t)),await c(o.join(e,"rapidkit"),M(t)),await c(o.join(e,"rapidkit.cmd"),G(t)),await c(o.join(e,".env.example"),`ASPNETCORE_ENVIRONMENT=Development
420
+ `.trimStart()}async function q(e,r){if(!r)try{if(await b$2(e)){console.log(i.gray("\u26A0 git init skipped (target is inside an existing git worktree)"));return}await execa("git",["init"],{cwd:e,stdio:"ignore",env:a()});}catch{console.log(i.gray("\u26A0 git init skipped (git not found or error)"));}}async function B(e){try{await execa("dotnet",["--version"],{cwd:e,timeout:3e3,stdio:"pipe"});}catch{console.log(i.yellow("\u26A0 .NET SDK not found in PATH - project scaffolded, but init/build need .NET 8+")),console.log(i.gray(" Install: https://dotnet.microsoft.com/download"));}}async function oe(e,r){let s=y(r.project_name)||"dotnet-api",c$1=E(r.root_namespace||`Workspai.${b$1(s)}`,"Workspai.App"),a=r.target_framework?.trim(),C=a&&D(a)?a:b,R=r.port&&/^\d+$/.test(r.port)?r.port:j,t={project_name:s,root_namespace:c$1,description:_(r.description||"","Production-ready ASP.NET Core Web API scaffolded by Workspai."),target_framework:C,app_version:r.app_version||"0.1.0",port:R,skipGit:r.skipGit??false,skipInstall:r.skipInstall??false},A=S(`Creating ASP.NET Core Web API project ${s}`).start();await promises.mkdir(e,{recursive:true}),await c(o.join(e,`${s}.sln`),H(t)),await c(o.join(e,"src",`${s}.csproj`),P(t)),await c(o.join(e,"src","Program.cs"),T(t)),await c(o.join(e,"src","Application","ApplicationInfoOptions.cs"),w(t)),await c(o.join(e,"src","Application","ApplicationServiceRegistration.cs"),x(t)),await c(o.join(e,"src","Application","SystemInfoService.cs"),v(t)),await c(o.join(e,"src","Infrastructure","InfrastructureServiceRegistration.cs"),N(t)),await c(o.join(e,"src","Presentation","PresentationServiceRegistration.cs"),h(t)),await c(o.join(e,"src","Presentation","SystemEndpoints.cs"),V(t)),await c(o.join(e,"src","appsettings.json"),g(t)),await c(o.join(e,"src","appsettings.Development.json"),g(t)),await c(o.join(e,"tests",`${s}.Tests.csproj`),k(t)),await c(o.join(e,"tests","RuntimeSmokeTests.cs"),L(t)),await c(o.join(e,"Dockerfile"),U(t)),await c(o.join(e,"docker-compose.yml"),O(t)),await c(o.join(e,"Makefile"),W(t)),await c(o.join(e,"rapidkit"),M(t)),await c(o.join(e,"rapidkit.cmd"),G(t)),await c(o.join(e,".env.example"),`ASPNETCORE_ENVIRONMENT=Development
421
421
  PORT=${t.port}
422
- `),await c(o.join(e,".github","workflows","ci.yml"),F(t)),await c(o.join(e,".workspai","context.json"),$()),await c(o.join(e,".workspai","project.json"),I(t,i())),process.platform!=="win32"&&await promises.chmod(o.join(e,"rapidkit"),493),await q(e,t.skipGit),A.succeed("ASP.NET Core Web API project ready"),t.skipInstall||await B(e),console.log(i$1.green(`
422
+ `),await c(o.join(e,".github","workflows","ci.yml"),F(t)),await c(o.join(e,".workspai","context.json"),$()),await c(o.join(e,".workspai","project.json"),I(t,h$1())),process.platform!=="win32"&&await promises.chmod(o.join(e,"rapidkit"),493),await q(e,t.skipGit),A.succeed("ASP.NET Core Web API project ready"),t.skipInstall||await B(e),console.log(i.green(`
423
423
  \u2705 ASP.NET Core project ready!
424
- `)),console.log(i$1.gray("Next steps:")),console.log(i$1.white(` cd ${s}`)),console.log(i$1.white(" npx workspai init")),console.log(i$1.white(" npx workspai dev")),console.log(i$1.gray(`
425
- Endpoints: /health/live, /health/ready, /api/v1/system/info, /docs`)),console.log(i$1.gray("\u2139 RapidKit Core modules are not available for .NET projects yet."));}export{j as DEFAULT_DOTNET_PORT,b as DEFAULT_DOTNET_TARGET_FRAMEWORK,oe as generateDotnetWebApiCleanKit};
424
+ `)),console.log(i.gray("Next steps:")),console.log(i.white(` cd ${s}`)),console.log(i.white(" npx workspai init")),console.log(i.white(" npx workspai dev")),console.log(i.gray(`
425
+ Endpoints: /health/live, /health/ready, /api/v1/system/info, /docs`)),console.log(i.gray("\u2139 RapidKit Core modules are not available for .NET projects yet."));}export{j as DEFAULT_DOTNET_PORT,b as DEFAULT_DOTNET_TARGET_FRAMEWORK,oe as generateDotnetWebApiCleanKit};
@@ -0,0 +1 @@
1
+ function a(e){let n=[...e.status!==void 0?["status"]:[],...e.list?["list"]:[],...e.activate?["activate"]:[],...e.cancel?["cancel"]:[],...e.prepare?["prepare"]:[],...e.verify?["verify"]:[]];if(n.length>1)throw new Error(`Choose exactly one Goal lifecycle operation; received ${n.join(", ")}.`);let r=n[0];if(!r){if(!e.intent?.trim())throw new Error("Provide a plain-language intent or use one lifecycle operation.");if(e.run===false)throw new Error("--no-run is valid only with --verify.");return {operation:"plan",intent:e.intent.trim()}}if(e.intent?.trim())throw new Error(`Do not combine an intent with --${r}.`);if(e.scope||e.runtime||e.refresh||e.dryRun)throw new Error(`--${r} does not accept planning-only --scope, --runtime, --refresh, or --dry-run options.`);if(e.run===false&&r!=="verify")throw new Error("--no-run is valid only with --verify.");return {operation:r}}export{a as validateGoalCommandSelection};
@@ -0,0 +1 @@
1
+ import {b}from'./chunk-B6FJ6RG6.js';function c(e){let a=e.runtimeCandidates.length?e.runtimeCandidates.join(", "):e.runtime;return `${e.framework} \xB7 ${a}`}async function p(e){let a=await b([{type:"list",name:"mode",message:"Where should this Goal apply?",choices:[{label:"One project",hint:"Keep the Goal inside one canonical project boundary",value:"project"},{label:"Multiple projects",hint:"Select a bounded cross-project scope",value:"project-set"},{label:"Entire workspace",hint:`Apply the Goal to every project in ${e.workspaceName}`,value:"workspace"}]}]);if(a.mode==="workspace")return {kind:"workspace"};if(a.mode==="project")return {kind:"projects",projects:[(await b([{type:"list",name:"project",message:"Which project should this Goal target?",choices:e.projects.map(o=>({label:o.name,hint:c(o),value:o.name}))}])).project]};let s=await b([{type:"checkbox",name:"projects",message:"Which projects should this Goal target?",choices:e.projects.map(t=>({label:t.name,hint:c(t),value:t.name}))}]);if(s.projects.length<2)throw new Error("Select at least two projects for a multi-project Goal.");return {kind:"projects",projects:s.projects}}async function m(e){let a=new Map(e.runtimes.map(t=>[t,e.projects.filter(o=>o.runtimeCandidates.includes(t)).map(o=>o.name).sort()]));return (await b([{type:"list",name:"runtime",message:"Which canonical runtime should this coverage Goal measure?",choices:e.runtimes.map(t=>({label:t,hint:`Detected in ${a.get(t)?.join(", ")||e.workspaceName}`,value:t}))}])).runtime}export{m as selectGoalCoverageRuntimeInteractively,p as selectGoalScopeInteractively};
@@ -0,0 +1 @@
1
+ export{f as GOAL_INDEX_PATH,e as GOAL_INDEX_SCHEMA_VERSION,k as buildGoalLifecycleResult,l as inspectGoalLifecycle,p as linkGoalRepairTransaction,n as prepareGoalVerification,m as transitionGoalLifecycle,o as verifyGoalLifecycle}from'./chunk-KNTPDRZB.js';
@@ -0,0 +1 @@
1
+ import {c as c$5}from'./chunk-DIJGQUEV.js';import {c}from'./chunk-MDF2FBLS.js';import {j,i,d as d$1,f as f$2,c as c$3,e as e$1,h}from'./chunk-KNTPDRZB.js';export{b as GOAL_AGENT_HANDOFF_SCHEMA_VERSION,f as GOAL_INDEX_PATH,e as GOAL_INDEX_SCHEMA_VERSION,g as GOAL_LIFECYCLE_RESULT_SCHEMA_VERSION,d as GOAL_PACK_LAST_RUN_PATH,a as GOAL_PACK_SCHEMA_VERSION,c as GOAL_PLAN_RESULT_SCHEMA_VERSION}from'./chunk-KNTPDRZB.js';import {f as f$3}from'./chunk-4PUJVYRM.js';import {b}from'./chunk-GPOZILMY.js';import {a as a$1}from'./chunk-A4BK7C7M.js';import {c as c$4}from'./chunk-TFOOSYGO.js';import {d,c as c$1}from'./chunk-EWZZUQBR.js';import {c as c$2,f as f$1}from'./chunk-CCDGHPEJ.js';import {a}from'./chunk-AFIFZTOY.js';import {f,e}from'./chunk-NZ3WZYD5.js';import v from'path';import S from'fs-extra';var he=/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/,fe=/(?:^|\s)(?:\/(?:home|Users|private|var|tmp|mnt|opt|srv|root|workspace|workspaces|data|Volumes|etc|usr|run|dev|proc|sys)\/[^\s]+|[A-Za-z]:[\\/][^\s]+|\\\\[^\\\s]+\\[^\s]+)/,be=/(?:-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----|\b(?:github_pat_|gh[pousr]_|glpat-|npm_|xox[baprs]-|sk-(?:proj-)?)[A-Za-z0-9_-]{12,}|\b(?:AKIA|ASIA)[A-Z0-9]{16}\b|\bAIza[A-Za-z0-9_-]{20,}|\bBearer\s+[A-Za-z0-9._~+/-]{16,}|[a-z][a-z0-9+.-]*:\/\/[^\s:/]+:[^\s@/]+@|\b(?:password|passwd|secret|token|api[_-]?key)\s*[:=]\s*[^\s]{6,})/i,we=[{category:"test-coverage",patterns:[/\b(?:test\s+)?coverage\b/i,/\bcoverage\s+(?:to|above|at least)\b/i]},{category:"dependency-security",patterns:[/\b(?:dependency|dependencies|package|packages)\b.*\b(?:security|vulnerab|audit)\b/i,/\b(?:security|vulnerab|audit)\b.*\b(?:dependency|dependencies|package|packages)\b/i]},{category:"release-readiness",patterns:[/\brelease[ -]readiness\b/i,/\bready (?:this |the )?(?:workspace|project) for release\b/i,/\bprepare (?:this |the )?(?:workspace|project) for release\b/i,/\bprepare\b[^\n]{0,80}\bfor release\b/i]},{category:"defect-repair",patterns:[/\b(?:fix|repair|resolve|debug)\b.*\b(?:bug|error|failure|issue|regression)\b/i]},{category:"performance",patterns:[/\b(?:performance|latency|throughput|memory|cpu|optimi[sz]e|faster|slower)\b/i]},{category:"refactor",patterns:[/\b(?:refactor|restructure|decouple|extract|simplify|cleanup|clean up)\b/i]},{category:"documentation",patterns:[/\b(?:document|documentation|readme|guide|tutorial|docs)\b/i]},{category:"feature-change",patterns:[/\b(?:add|build|create|implement|introduce|support)\b/i]},{category:"system-understanding",patterns:[/\b(?:understand|explain|map|find|where|how|architecture|analy[sz]e|search)\b/i]}];function ke(e){if(typeof e!="string")throw new Error("Goal intent must be text.");let t=e.trim().replace(/\s+/g," ");if(!t)throw new Error("Goal intent cannot be empty.");if(t.length>2e3)throw new Error("Goal intent exceeds the 2000 character safety limit.");if(he.test(t))throw new Error("Goal intent contains unsupported control characters.");if(fe.test(t))throw new Error("Goal intent contains a machine-local absolute path. Use a workspace-relative path or project scope.");if(be.test(t))throw new Error("Goal intent appears to contain secret material and was not persisted.");return t}function ve(e){let t=e.match(/\b(?:coverage\D{0,24})?(100|\d{1,2})(?:\.\d+)?\s*%/i);if(!t||!/coverage/i.test(e))return null;let o=Number(t[1]);return Number.isFinite(o)&&o>=0&&o<=100?o:null}var te=[{runtime:"cpp",patterns:[/\bc\+\+/i,/\bcpp\b/i]},{runtime:"dotnet",patterns:[/\.net\b/i,/\bdotnet\b/i,/\bc#/i,/\bcsharp\b/i]},{runtime:"node",patterns:[/\bnode(?:\.js)?\b/i,/\btypescript\b/i,/\bjavascript\b/i,/\b(?:js|ts)\b/i]},{runtime:"python",patterns:[/\bpython\b/i,/\bpytest\b/i]},{runtime:"go",patterns:[/\bgolang\b/i,/\bgo(?:\s+(?:test|coverage|tests))\b/i]},{runtime:"java",patterns:[/\bjava\b/i,/\bjunit\b/i,/\bjacoco\b/i]},{runtime:"rust",patterns:[/\brust\b/i,/\bcargo\b/i]},{runtime:"php",patterns:[/\bphp\b/i,/\bphpunit\b/i]},{runtime:"ruby",patterns:[/\bruby\b/i,/\brspec\b/i]},{runtime:"kotlin",patterns:[/\bkotlin\b/i]},{runtime:"scala",patterns:[/\bscala\b/i]},{runtime:"clojure",patterns:[/\bclojure\b/i]},{runtime:"elixir",patterns:[/\belixir\b/i]},{runtime:"deno",patterns:[/\bdeno\b/i]},{runtime:"bun",patterns:[/\bbun\b/i]},{runtime:"c",patterns:[/\bc(?:\s+(?:test|coverage|tests|code))\b/i]}];function ye(e){return te.filter(t=>t.patterns.some(o=>o.test(e))).map(t=>t.runtime)}function $(e,t={}){let o=ke(e),r=we.filter(y=>y.patterns.some(k=>k.test(o))).map(y=>y.category),i=r[0]??"feature-change",l=ve(o),c=ye(o),p=c.length===0&&t.selectedCoverageRuntime?[t.selectedCoverageRuntime]:c,u=[...new Set((t.availableCoverageRuntimes??[]).filter(y=>te.some(k=>k.runtime===y)))].sort(),b=[];return r.length>1&&r[0]!=="test-coverage"&&b.push(`The intent also contains signals for: ${r.slice(1).join(", ")}.`),i==="test-coverage"&&l===null&&b.push("A numeric test coverage target is required for machine verification."),i==="test-coverage"&&p.length>1&&b.push(`The Goal names multiple coverage runtimes: ${p.join(", ")}. Select one runtime per Goal.`),i==="test-coverage"&&p.length===0&&u.length>1&&b.push(`Coverage scope is ambiguous across detected runtimes: ${u.join(", ")}. Name one runtime or language in the Goal.`),i==="test-coverage"&&p.length===1&&u.length>0&&!u.includes(p[0])&&b.push(`The requested ${p[0]} coverage runtime is not present in the selected scope. Detected runtimes: ${u.join(", ")}.`),{original:o,normalized:o.toLocaleLowerCase("en-US"),statement:o.replace(/[.!?]+$/,""),category:i,confidence:r.length===1?"high":r.length>1?"medium":"low",ambiguities:b,...l===null?{}:{requestedTarget:{metric:"test-coverage-percent",operator:"at-least",value:l,...p.length===1?{runtime:p[0]}:{}}}}}function re(e){let t={"test-coverage":["test suite coverage configuration instrumentation","CI tests LCOV Cobertura JaCoCo LLVM coverage"],"dependency-security":["dependency manifest lockfile security audit vulnerability"],"release-readiness":["release pipeline readiness gates build test deploy"],"defect-repair":["failure error test implementation call path"],"feature-change":["API implementation module dependency tests"],refactor:["module dependency ownership implementation tests"],performance:["performance benchmark latency throughput runtime"],documentation:["documentation README guide architecture decision"],"system-understanding":["architecture service API dependency ownership"]};return [...new Set([e.statement,...t[e.category]])].slice(0,3)}var oe="contracts/workspace-intelligence/goal-pack.v1.json",ne="contracts/workspace-intelligence/goal-agent-handoff.v1.json",Pe="contracts/workspace-intelligence/goal-plan-result.v1.json",ce="contracts/workspace-intelligence/goal-index.v1.json",le=new Set(["node","bun","deno","python","go","java","dotnet","rust","php","ruby","elixir","clojure","scala","kotlin","c","cpp"]);function ae(e){return e.split(v.sep).join("/")}function V(e,t){return v.resolve(t.absolutePath??v.join(e,t.path))}function se(e){let t=e.requested.trim().replace(/^project:/,"");if(!t)throw new Error("Project goal scope must name a project.");let o=v.isAbsolute(t)?v.resolve(t):null,r=e.model.projects.filter(i=>i.name===t||ae(i.path)===ae(t)||o!==null&&V(e.workspacePath,i)===o);if(r.length!==1)throw new Error(r.length===0?`Project goal scope was not found in the canonical model: ${t}`:`Project goal scope is ambiguous in the canonical model: ${t}`);return r[0]}async function je(e){let t=await a$1(e);if(t.status==="miss")throw new Error(`Canonical model and live graph evidence are required (${t.reason}). Run \`workspai workspace intelligence run --for-agent generic --strict --json\` or retry with --refresh.`);let{model:o,graph:r}=t;return a(o,"contracts/workspace-intelligence/workspace-model.v1.json","Goal source model"),a(r,"contracts/workspace-intelligence/workspace-knowledge-graph.v1.json","Goal source graph"),c$4(r,o),{model:o,graph:r}}function ie(e){let t=e.scope.trim();if(t==="workspace")return {kind:"workspace",projects:e.model.projects.map(r=>r.name).sort(),selectionSource:e.selectionSource,resolution:"selected"};let o=t.startsWith("projects:")?"projects:":t.startsWith("project:")&&t.slice(8).includes(",")?"project:":null;if(o){let r=t.slice(o.length).split(",").map(c=>c.trim()).filter(Boolean);if(r.length<2)throw new Error("A project-set Goal scope must name at least two projects.");let i=r.map(c=>se({workspacePath:e.workspacePath,model:e.model,requested:c})),l=[...new Set(i.map(c=>c.name))].sort();if(l.length!==r.length)throw new Error("A project-set Goal scope must not contain duplicate projects.");return {kind:"project-set",projects:l,selectionSource:e.selectionSource,resolution:"selected"}}if(t)return {kind:"project",projects:[se({workspacePath:e.workspacePath,model:e.model,requested:t}).name],selectionSource:e.selectionSource,resolution:"selected"};throw new Error("Goal scope cannot be empty.")}async function Ge(e){if(e.explicitScope?.trim())return {scope:ie({workspacePath:e.workspacePath,model:e.model,scope:e.explicitScope,selectionSource:"explicit"}),selectionRequired:false};if(e.invocationProjectPath){let t=v.resolve(e.invocationProjectPath),o=e.model.projects.filter(r=>V(e.workspacePath,r)===t);if(o.length!==1)throw new Error("The invocation project is not represented uniquely in the canonical workspace model. Refresh intelligence or pass --scope explicitly.");return {scope:{kind:"project",projects:[o[0].name],selectionSource:"invocation-project",resolution:"selected"},selectionRequired:false}}if(e.model.projects.length===1)return {scope:{kind:"project",projects:[e.model.projects[0].name],selectionSource:"single-project-workspace",resolution:"selected"},selectionRequired:false};if(e.selectScope){let t=await e.selectScope({workspaceName:e.model.workspace.name,projects:e.model.projects.map(r=>({name:r.name,runtime:r.runtime,runtimeCandidates:[...r.runtimeCandidates].sort(),framework:r.framework})).sort((r,i)=>r.name.localeCompare(i.name))}),o=t.kind==="workspace"?"workspace":t.projects.length===1?`project:${t.projects[0]}`:`projects:${t.projects.join(",")}`;return {scope:ie({workspacePath:e.workspacePath,model:e.model,scope:o,selectionSource:"interactive"}),selectionRequired:false}}return {scope:{kind:"workspace",projects:e.model.projects.map(t=>t.name).sort(),selectionSource:"workspace",resolution:"selection-required"},selectionRequired:true}}function Ae(e,t){if(t.kind==="workspace")return {entities:e.quality.entityCount,relationships:e.quality.relationCount,proofs:e.quality.proofCount,unresolved:e.quality.unknownCount,proofCoveragePercent:Number((e.quality.relationProofCoverageRatio*100).toFixed(2))};let o=new Set(t.projects),r=e.entities.filter(u=>u.projectId!==void 0&&o.has(u.projectId)),i=new Set(r.map(u=>u.id)),l=e.relations.filter(u=>i.has(u.from)||i.has(u.to)),c=new Set([...r.flatMap(u=>u.proofIds),...l.flatMap(u=>u.proofIds)]),p=l.filter(u=>u.proofIds.length>0).length;return {entities:r.length,relationships:l.length,proofs:c.size,unresolved:l.length-p,proofCoveragePercent:l.length===0?100:Number((p/l.length*100).toFixed(2))}}async function Ce(e$1){let t=v.join(e$1.workspacePath,e.intelligenceRun),o=await S.readJson(t).catch(()=>null),i=(Array.isArray(o?.stages)?o.stages:[]).filter(n=>n.status==="blocked"||n.status==="failed").map(n=>String(n.id??"unknown")).sort(),l=o?.status,c={status:l==="passed"?"passed":l==="blocked"||l==="failed"?"blocked":"unknown",artifact:e.intelligenceRun,blockedStages:i},p={status:"not-applicable",runtime:null,runtimeChoices:[],runner:null,existingEvidence:[],prerequisites:[]};if(e$1.intent.category==="test-coverage"){let n=e$1.intent.requestedTarget?.runtime;if(e$1.intent.ambiguities.some(P=>P.startsWith("Coverage scope is ambiguous")||P.startsWith("The Goal names multiple coverage runtimes")||P.startsWith("The selected projects do not share a common canonical coverage runtime")||P.startsWith("The requested ")))p={status:"requires-setup",runtime:n??null,runtimeChoices:e$1.coverageRuntimeChoices,runner:null,existingEvidence:[],prerequisites:["Select exactly one detected runtime or language for this coverage Goal."]};else {let P=n?e$1.projects.filter(a=>a.runtimeCandidates.includes(n)):e$1.projects,f=await Promise.all(P.map(async a=>({project:a,capability:await c$5(V(e$1.workspacePath,a),n??(le.has(a.runtime)?a.runtime:"unknown"))}))),s=f.map(a=>a.capability.status);p={status:s.includes("unsupported")?"unsupported":s.includes("requires-setup")?"requires-setup":"available",runtime:f.length===1?f[0].capability.runtime:[...new Set(f.map(a=>a.capability.runtime))].join(","),runtimeChoices:e$1.coverageRuntimeChoices,runner:f.length===1?f[0].capability.runner:[...new Set(f.flatMap(a=>a.capability.runner?[a.capability.runner]:[]))].join(",")||null,existingEvidence:f.flatMap(a=>a.capability.existingEvidence.map(g=>({project:a.project.name,...g}))).filter((a,g,L)=>L.findIndex(j=>j.project===a.project&&j.path===a.path&&j.sha256===a.sha256)===g).sort((a,g)=>a.project.localeCompare(g.project)||a.path.localeCompare(g.path)),prerequisites:[...new Set(f.flatMap(a=>a.capability.prerequisites))].sort()};}}let u=re(e$1.intent),b=u.map(n=>{let w=e$1.projects.map(s=>f$3(e$1.graph,{query:n,projectId:s.name,limit:20,relationsPerEntity:0,minimumTermMatches:2}).entities),P=[],f=new Set;for(let s=0;w.some(a=>s<a.length);s+=1)for(let a of w){let g=a[s];!g||f.has(g.id)||(f.add(g.id),P.push(g));}return P}),y={"test-coverage":["test-suite"],"dependency-security":["package","module"],"release-readiness":["pipeline","deployment","lifecycle-stage"],"defect-repair":["test-suite","lifecycle-stage"],"feature-change":["project","runtime-unit","api","package","module","test-suite"],refactor:["package","module","api","test-suite"],performance:["lifecycle-stage","test-suite","pipeline"],documentation:["document","decision"],"system-understanding":["project","service","api","package","protocol"]},k=new Set(e$1.projects.map(n=>n.name)),N=e$1.graph.entities.filter(n=>n.proofIds.length>0&&(!n.projectId||k.has(n.projectId))&&y[e$1.intent.category].includes(n.kind)).sort((n,w)=>y[e$1.intent.category].indexOf(n.kind)-y[e$1.intent.category].indexOf(w.kind)||n.label.localeCompare(w.label)),h=[],m=new Set,A=n=>{!n||h.length>=20||m.has(n.id)||(m.add(n.id),h.push(n));},C=(e$1.intent.statement.match(/[A-Za-z][A-Za-z0-9+#.-]{1,}/g)??[]).length>=2,x=C?b[0]??[]:[];for(let n of x.slice(0,12))A(n);if(!C)for(let n of N)A(n);for(let n=0;h.length<20&&b.slice(1).some(w=>n<w.length);n+=1)for(let w of b.slice(1))A(w[n]);if(C)for(let n of N)A(n);for(let n of x.slice(12))A(n);let d=h.map(n=>({entityId:n.id,kind:n.kind,label:n.label,proofIds:n.proofIds.slice(0,12)})),E=b[0]?.length??0;return {workspaceIntelligence:c,measurement:p,retrieval:{status:C&&E>=3?"grounded":d.length>0?"partial":"empty",strategy:"deterministic-category-v1",queries:u,anchors:d}}}async function Re(e){let t=v.join(e,f$2);if(!await S.pathExists(t))return {schemaVersion:e$1,generatedAt:new Date(0).toISOString(),activeGoalId:null,goals:[]};let o=await S.readJson(t);a(o,ce,"Goal index");try{i(o);}catch(r){let i=h(o);if(!(i!==null&&r instanceof Error&&r.message==="Goal index is inconsistent: activeGoalId must identify the only selected actionable lifecycle entry.")||!i)throw r;return i}return o}function Se(e,t,o){let r=e.goals.find(c=>c.id===t.id),i=t.state==="ready-to-plan",l={id:t.id,fingerprint:t.fingerprint,objective:t.intent.statement,category:t.intent.category,state:t.state,lifecycle:r?.lifecycle==="cancelled"?"cancelled":i?"active":"planned",scope:t.scope,createdAt:r?.createdAt??t.generatedAt,updatedAt:o,goalPack:t.artifacts.goalPack,agentHandoff:t.artifacts.agentHandoff,...r?.verifiedGoalId?{verifiedGoalId:r.verifiedGoalId}:{},...r?.repairTransactionId?{repairTransactionId:r.repairTransactionId}:{},...r?.repairTransactionIds?{repairTransactionIds:r.repairTransactionIds}:{},...r?.verificationReceipt?{verificationReceipt:r.verificationReceipt}:{}};return {schemaVersion:e$1,generatedAt:o,activeGoalId:l.lifecycle==="active"?t.id:e.activeGoalId===t.id?null:e.activeGoalId,goals:[...e.goals.filter(c=>c.id!==t.id).map(c=>l.lifecycle==="active"&&c.lifecycle==="active"?{...c,lifecycle:"planned",updatedAt:o}:c),l].sort((c,p)=>c.id.localeCompare(p.id))}}async function De(e$1){let t=b({startPath:v.resolve(e$1.startPath),explicitWorkspacePath:e$1.workspacePath,strict:true,requireProjectMembership:true});if(!t)throw new Error("No canonical Workspai workspace could be resolved.");let o=v.resolve(t.workspacePath);e$1.refresh&&await c({workspacePath:o,strict:false,agent:"generic"});let{model:r,graph:i$1}=await je(o),l=await Ge({workspacePath:o,invocationProjectPath:t.projectPath,model:r,explicitScope:e$1.scope,selectScope:e$1.selectScope}),c$4=l.scope,p=r.projects.filter(s=>c$4.projects.includes(s.name));if(p.length===0)throw new Error("A Goal Pack requires at least one registered project in its selected scope.");let u=e$1.maxAttempts??5;if(!Number.isInteger(u)||u<1||u>25)throw new Error("--max-attempts must be an integer from 1 to 25.");let b$1=new Date().toISOString(),y=d(r),k=p.map(s=>({name:s.name,runtimes:[...new Set(s.runtimeCandidates.filter(a=>le.has(a)))].sort()})),N=[...new Set(k.flatMap(s=>s.runtimes))].sort(),h=k.length<=1?N:k[0].runtimes.filter(s=>k.every(a=>a.runtimes.includes(s))),m=$(e$1.intent,{availableCoverageRuntimes:h,...e$1.runtime?{selectedCoverageRuntime:e$1.runtime}:h.length===1?{selectedCoverageRuntime:h[0]}:{}});if(e$1.runtime&&!h.includes(e$1.runtime)){let s=e$1.runtime,a=k.filter(g=>!g.runtimes.includes(s)).map(g=>g.name);throw new Error(p.length>1&&a.length>0?`--runtime ${e$1.runtime} is not canonical for every project in the selected Goal scope. Missing from: ${a.join(", ")}. Split the projects into runtime-compatible Goal scopes.`:`--runtime ${e$1.runtime} is not present in the canonical Workspace Model for the selected Goal scope. Available runtimes: ${h.join(", ")||"none"}.`)}if(e$1.runtime&&m.category!=="test-coverage")throw new Error("--runtime is valid only for a test-coverage Goal.");if(e$1.runtime&&m.requestedTarget?.runtime&&m.requestedTarget.runtime!==e$1.runtime)throw new Error(`--runtime ${e$1.runtime} conflicts with the ${m.requestedTarget.runtime} runtime named in the Goal intent.`);if(!l.selectionRequired&&m.category==="test-coverage"&&m.requestedTarget&&!m.requestedTarget.runtime&&h.length>1&&!e$1.runtime&&e$1.selectCoverageRuntime){let s=await e$1.selectCoverageRuntime({workspaceName:r.workspace.name,scope:c$4,projects:p.map(a=>({name:a.name,runtime:a.runtime,runtimeCandidates:[...a.runtimeCandidates].sort()})),runtimes:h});if(!h.includes(s))throw new Error("The selected coverage runtime is outside the canonical Goal scope.");m=$(e$1.intent,{availableCoverageRuntimes:h,selectedCoverageRuntime:s});}!l.selectionRequired&&m.category==="test-coverage"&&p.length>1&&h.length===0&&(m={...m,ambiguities:[`The selected projects do not share a common canonical coverage runtime: ${k.map(s=>`${s.name} (${s.runtimes.join(", ")||"none"})`).join("; ")}. Split them into runtime-compatible Goal scopes so every selected project is verified.`,...m.ambiguities]}),l.selectionRequired&&(m={...m,ambiguities:[`Goal scope is unresolved across ${c$4.projects.length} registered projects: ${c$4.projects.join(", ")}. Select one project, multiple projects, or the entire workspace.`,...m.ambiguities]});let A=await Ce({workspacePath:o,projects:p,graph:i$1,intent:m,coverageRuntimeChoices:h}),C={generatedAt:b$1,intent:m,workspaceName:r.workspace.name,scope:c$4,sourceBinding:{model:{artifact:e.model,schemaVersion:f.model,hashAlgorithm:"sha256",hashSemantics:"workspace-model-structural-v1",hash:y,generatedAt:r.generatedAt},graph:{artifact:e.knowledgeGraph,schemaVersion:f.knowledgeGraph,hashAlgorithm:"sha256",hashSemantics:"canonical-json-v1",hash:c$1(i$1),generatedAt:i$1.generatedAt,modelHash:i$1.source.hash,...i$1.source.inputs?.hash?{inputHash:i$1.source.inputs.hash}:{}}},preflight:A,baseline:{projectCount:p.length,runtimes:[...new Set(p.flatMap(s=>s.runtimeCandidates))].sort(),frameworks:[...new Set(p.map(s=>s.framework))].sort(),graph:Ae(i$1,c$4)},maxAttempts:u,consumer:e$1.consumer??"generic"},x={digestCanonical:c$1},{goalPack:d$2,handoff:E}=j(C,x);a(d$2,oe,"Goal Pack"),a(E,ne,"Goal agent handoff");let n=false,w=async()=>{let s=v.join(o,d$2.artifacts.goalPack),a$1=v.join(o,d$2.artifacts.agentHandoff),[g,L]=await Promise.all([S.pathExists(s),S.pathExists(a$1)]);if(g!==L)throw new Error(`Goal Pack instance is incomplete and cannot be resumed: ${d$2.id}`);if(!g)return;let[j$1,q]=await Promise.all([S.readJson(s),S.readJson(a$1)]);a(j$1,oe,"Persisted Goal Pack"),a(q,ne,"Persisted goal agent handoff");let z=j({...C,generatedAt:j$1.generatedAt,sourceBinding:j$1.sourceBinding},x);if(j$1.id!==d$2.id||q.goalId!==d$2.id||c$1(j$1)!==c$1(z.goalPack)||c$1(q)!==c$1(z.handoff))throw new Error(`Goal Pack instance failed immutable integrity validation: ${d$2.id}`);d$2=j$1,E=q,n=true;};if(e$1.dryRun)await w();else {let s=`.workspai/goals/${d$2.id}/publication`;await c$2(o,s,async()=>{await w();let a$1=Se(await Re(o),d$2,new Date().toISOString());a(a$1,ce,"Goal index"),i(a$1),await f$1(o,d$1,n?[{relativePath:d$1,payload:d$2},{relativePath:f$2,payload:a$1}]:[{relativePath:d$2.artifacts.goalPack,payload:d$2},{relativePath:d$2.artifacts.agentHandoff,payload:E},{relativePath:d$1,payload:d$2},{relativePath:f$2,payload:a$1}]);});}let P=[d$2.artifacts.goalPack,d$2.artifacts.agentHandoff,d$1,f$2],f$3={schemaVersion:c$3,result:d$2.state==="needs-confirmation"?"needs-confirmation":d$2.state==="blocked"?"blocked":d$2.state==="needs-evidence"?"needs-evidence":"planned",resolution:{source:t.source,invocationScope:t.projectPath?"project":"workspace"},goalPack:d$2,agentHandoff:E,writtenArtifacts:e$1.dryRun?[]:n?[d$1,f$2]:P,dryRun:e$1.dryRun===true,resumed:n};return a(f$3,Pe,"Goal plan result"),f$3}export{De as planGoalPack};
@@ -1,4 +1,4 @@
1
- import {c,b as b$1,d,e,f,a as a$1}from'./chunk-IBJEQHJR.js';import {i}from'./chunk-VRW6KXNK.js';import {b,a}from'./chunk-TQEMLBAG.js';import {promises}from'fs';import p from'path';import o from'chalk';import T from'ora';import {execa}from'execa';function q(e){return `package main
1
+ import {c,b as b$1,d,e,f,a as a$1}from'./chunk-IBJEQHJR.js';import {h}from'./chunk-X6TNBARH.js';import {b,a}from'./chunk-TQEMLBAG.js';import {promises}from'fs';import p from'path';import o from'chalk';import T from'ora';import {execa}from'execa';function q(e){return `package main
2
2
 
3
3
  import (
4
4
  "fmt"
@@ -1392,6 +1392,6 @@ issues:
1392
1392
  linters:
1393
1393
  - errcheck
1394
1394
  - wrapcheck
1395
- `}function z(){return JSON.stringify({engine:"npm",runtime:"go"},null,2)}function Z(e$1){return e({runtimeLabel:"Go/Fiber",projectName:e$1.project_name,fallbackDevCommand:'exec go run ./cmd/server "$@"'})}function ee(e){return f({runtimeLabel:"Go/Fiber",projectName:e.project_name})}function te(e,i){return JSON.stringify({kit_name:"gofiber.standard",runtime:"go",module_support:false,project_name:e.project_name,module_path:e.module_path,app_version:e.app_version,created_by:"workspai",workspai_version:i,rapidkit_version:i,created_at:new Date().toISOString()},null,2)}async function ce(e,i$1){let r={project_name:i$1.project_name,module_path:i$1.module_path||i$1.project_name,author:i$1.author||"Workspai User",description:i$1.description||`Go/Fiber REST API \u2014 ${i$1.project_name}`,go_version:i$1.go_version||a$1,app_version:i$1.app_version||"0.1.0",port:i$1.port||"3000",skipGit:i$1.skipGit??false,skipInstall:i$1.skipInstall??false},v=i();if(!r.skipInstall)try{await execa("go",["version"],{timeout:3e3});}catch{console.log(o.yellow("\n\u26A0 Go not found in PATH \u2014 project will be scaffolded, but `go mod tidy` requires Go 1.21+")),console.log(o.gray(` Install: https://go.dev/dl/
1395
+ `}function z(){return JSON.stringify({engine:"npm",runtime:"go"},null,2)}function Z(e$1){return e({runtimeLabel:"Go/Fiber",projectName:e$1.project_name,fallbackDevCommand:'exec go run ./cmd/server "$@"'})}function ee(e){return f({runtimeLabel:"Go/Fiber",projectName:e.project_name})}function te(e,i){return JSON.stringify({kit_name:"gofiber.standard",runtime:"go",module_support:false,project_name:e.project_name,module_path:e.module_path,app_version:e.app_version,created_by:"workspai",workspai_version:i,rapidkit_version:i,created_at:new Date().toISOString()},null,2)}async function ce(e,i){let r={project_name:i.project_name,module_path:i.module_path||i.project_name,author:i.author||"Workspai User",description:i.description||`Go/Fiber REST API \u2014 ${i.project_name}`,go_version:i.go_version||a$1,app_version:i.app_version||"0.1.0",port:i.port||"3000",skipGit:i.skipGit??false,skipInstall:i.skipInstall??false},v=h();if(!r.skipInstall)try{await execa("go",["version"],{timeout:3e3});}catch{console.log(o.yellow("\n\u26A0 Go not found in PATH \u2014 project will be scaffolded, but `go mod tidy` requires Go 1.21+")),console.log(o.gray(` Install: https://go.dev/dl/
1396
1396
  `));}let n=T(`Generating Go/Fiber project: ${r.project_name}\u2026`).start();try{let t=(S,_)=>c(p.join(e,S),_),w=p.join(e,"rapidkit"),R=p.join(e,"rapidkit.cmd");if(await Promise.all([t("cmd/server/main.go",q(r)),t("go.mod",O(r)),t("internal/config/config.go",y(r)),t("internal/server/server.go",C(r)),t("internal/middleware/requestid.go",P()),t("internal/middleware/requestid_test.go",D(r)),t("internal/apierr/apierr.go",M()),t("internal/apierr/apierr_test.go",B(r)),t("internal/handlers/health.go",N()),t("internal/handlers/health_test.go",E(r)),t("internal/handlers/example.go",j(r)),t("internal/handlers/example_test.go",H(r)),t("internal/config/config_test.go",U(r)),t("internal/middleware/cors.go",V()),t("internal/middleware/cors_test.go",J(r)),t("internal/middleware/ratelimit.go",K(r)),t("internal/middleware/ratelimit_test.go",X(r)),t("internal/server/server_test.go",W(r)),t("docs/doc.go",$(r)),t(".air.toml",Q(r)),t("Dockerfile",L()),t("docker-compose.yml",G(r)),t("Makefile",A(r)),t(".golangci.yml",Y(r.module_path)),t(".env.example",I(r)),t(".gitignore",k()),t(".github/workflows/ci.yml",F(r)),t("README.md",x(r)),t(".workspai/project.json",te(r,v)),t(".workspai/context.json",z()),t("rapidkit",Z(r)),t("rapidkit.cmd",ee(r))]),await promises.chmod(w,493),await promises.chmod(R,493),n.succeed(o.green(`Project created at ${e}`)),r.skipInstall)n.info(o.gray("Skipped Go dependency warm-up (--skip-install)."));else try{n.start("Fetching Go dependencies\u2026"),await execa("go",["mod","tidy"],{cwd:e,timeout:12e4}),n.succeed(o.gray("\u2713 go mod tidy completed"));}catch{n.warn(o.yellow("\u26A0 go mod tidy failed \u2014 run manually: go mod tidy"));}if(!r.skipGit)try{await b(e)?console.log(o.gray("\u26A0 git init skipped (target is inside an existing git worktree)")):(await execa("git",["init"],{cwd:e,env:a()}),await execa("git",["add","-A"],{cwd:e,env:a()}),await execa("git",["commit","-m","chore: initial scaffold (rapidkit gofiber.standard)"],{cwd:e,env:a()}),console.log(o.gray("\u2713 git repository initialized")));}catch{console.log(o.gray("\u26A0 git init skipped (git not found or error)"));}console.log(""),console.log(o.bold("\u2705 Go/Fiber project ready!")),console.log(""),console.log(o.cyan("Next steps:")),console.log(o.white(` cd ${r.project_name}`)),console.log(o.white(" make run # start dev server")),console.log(o.white(" make test # run tests")),console.log(""),console.log(o.gray("Server will listen on port "+r.port)),console.log(o.gray(" http://localhost:"+r.port+"/api/v1/health/live")),console.log(o.gray(" http://localhost:"+r.port+"/api/v1/health/ready")),console.log(""),console.log(o.yellow("\u2139 RapidKit Core modules are not available for Go projects (module system uses Python/pip).")),console.log("");}catch(t){throw n.fail(o.red("Failed to generate Go/Fiber project")),t}}
1397
1397
  export{ce as generateGoFiberKit};
@@ -1,4 +1,4 @@
1
- import {c as c$1,b as b$2,d,e,f,a as a$1}from'./chunk-IBJEQHJR.js';import {i}from'./chunk-VRW6KXNK.js';import {b as b$1,a}from'./chunk-TQEMLBAG.js';import {promises}from'fs';import c from'path';import o from'chalk';import O from'ora';import {execa}from'execa';function N(e){return `package main
1
+ import {c as c$1,b as b$2,d,e,f,a as a$1}from'./chunk-IBJEQHJR.js';import {h}from'./chunk-X6TNBARH.js';import {b as b$1,a}from'./chunk-TQEMLBAG.js';import {promises}from'fs';import c from'path';import o from'chalk';import O from'ora';import {execa}from'execa';function N(e){return `package main
2
2
 
3
3
  import (
4
4
  "context"
@@ -1454,6 +1454,6 @@ issues:
1454
1454
  linters:
1455
1455
  - errcheck
1456
1456
  - wrapcheck
1457
- `}function Y(){return JSON.stringify({engine:"npm",runtime:"go"},null,2)}function Z(e,n){return JSON.stringify({kit_name:"gogin.standard",runtime:"go",module_support:false,project_name:e.project_name,module_path:e.module_path,app_version:e.app_version,created_by:"workspai",workspai_version:n,rapidkit_version:n,created_at:new Date().toISOString()},null,2)}function ee(e$1){return e({runtimeLabel:"Go/Gin",projectName:e$1.project_name,fallbackDevCommand:'cd "$SCRIPT_DIR" && GIN_MODE=debug exec go run ./cmd/server "$@"'})}function te(e){return f({runtimeLabel:"Go/Gin",projectName:e.project_name})}async function ge(e,n){let r={project_name:n.project_name,module_path:n.module_path||n.project_name,author:n.author||"Workspai User",description:n.description||`Go/Gin REST API \u2014 ${n.project_name}`,go_version:n.go_version||a$1,app_version:n.app_version||"0.1.0",port:n.port||"8080",skipGit:n.skipGit??false,skipInstall:n.skipInstall??false},R=i();if(!r.skipInstall)try{await execa("go",["version"],{timeout:3e3});}catch{console.log(o.yellow("\n\u26A0 Go not found in PATH \u2014 project will be scaffolded, but `go mod tidy` requires Go 1.21+")),console.log(o.gray(` Install: https://go.dev/dl/
1458
- `));}let i$1=O(`Generating Go/Gin project: ${r.project_name}\u2026`).start();try{let t=(_,T)=>c$1(c.join(e,_),T),v=c.join(e,"rapidkit"),S=c.join(e,"rapidkit.cmd");if(await Promise.all([t("cmd/server/main.go",N(r)),t("go.mod",b(r)),t("internal/config/config.go",G(r)),t("internal/server/server.go",q(r)),t("internal/middleware/requestid.go",P()),t("internal/middleware/requestid_test.go",D(r)),t("internal/apierr/apierr.go",H()),t("internal/apierr/apierr_test.go",F(r)),t("internal/handlers/health.go",E()),t("internal/handlers/health_test.go",C(r)),t("internal/handlers/example.go",j(r)),t("internal/handlers/example_test.go",U(r)),t("internal/config/config_test.go",B(r)),t("internal/middleware/cors.go",V()),t("internal/middleware/cors_test.go",W(r)),t("internal/middleware/ratelimit.go",K(r)),t("internal/middleware/ratelimit_test.go",X(r)),t("internal/server/server_test.go",J(r)),t("docs/doc.go",$(r)),t(".air.toml",Q(r)),t("Dockerfile",L()),t("docker-compose.yml",y(r)),t("Makefile",I(r)),t(".golangci.yml",z(r.module_path)),t(".env.example",k(r)),t(".gitignore",x()),t(".github/workflows/ci.yml",M(r)),t("README.md",A(r)),t(".workspai/project.json",Z(r,R)),t(".workspai/context.json",Y()),t("rapidkit",ee(r)),t("rapidkit.cmd",te(r))]),await promises.chmod(v,493),await promises.chmod(S,493),i$1.succeed(o.green(`Project created at ${e}`)),r.skipInstall)i$1.info(o.gray("Skipped Go dependency warm-up (--skip-install)."));else try{i$1.start("Fetching Go dependencies\u2026"),await execa("go",["mod","tidy"],{cwd:e,timeout:12e4}),i$1.succeed(o.gray("\u2713 go mod tidy completed"));}catch{i$1.warn(o.yellow("\u26A0 go mod tidy failed \u2014 run manually: go mod tidy"));}if(!r.skipGit)try{await b$1(e)?console.log(o.gray("\u26A0 git init skipped (target is inside an existing git worktree)")):(await execa("git",["init"],{cwd:e,env:a()}),await execa("git",["add","-A"],{cwd:e,env:a()}),await execa("git",["commit","-m","chore: initial scaffold (rapidkit gogin.standard)"],{cwd:e,env:a()}),console.log(o.gray("\u2713 git repository initialized")));}catch{console.log(o.gray("\u26A0 git init skipped (git not found or error)"));}console.log(""),console.log(o.bold("\u2705 Go/Gin project ready!")),console.log(""),console.log(o.cyan("Next steps:")),console.log(o.white(` cd ${r.project_name}`)),console.log(o.white(" make run # start dev server")),console.log(o.white(" make test # run tests")),console.log(""),console.log(o.gray("Server will listen on port "+r.port)),console.log(o.gray(" http://localhost:"+r.port+"/api/v1/health/live")),console.log(o.gray(" http://localhost:"+r.port+"/api/v1/health/ready")),console.log(""),console.log(o.yellow("\u2139 RapidKit Core modules are not available for Go projects (module system uses Python/pip).")),console.log("");}catch(t){throw i$1.fail(o.red("Failed to generate Go/Gin project")),t}}
1457
+ `}function Y(){return JSON.stringify({engine:"npm",runtime:"go"},null,2)}function Z(e,n){return JSON.stringify({kit_name:"gogin.standard",runtime:"go",module_support:false,project_name:e.project_name,module_path:e.module_path,app_version:e.app_version,created_by:"workspai",workspai_version:n,rapidkit_version:n,created_at:new Date().toISOString()},null,2)}function ee(e$1){return e({runtimeLabel:"Go/Gin",projectName:e$1.project_name,fallbackDevCommand:'cd "$SCRIPT_DIR" && GIN_MODE=debug exec go run ./cmd/server "$@"'})}function te(e){return f({runtimeLabel:"Go/Gin",projectName:e.project_name})}async function ge(e,n){let r={project_name:n.project_name,module_path:n.module_path||n.project_name,author:n.author||"Workspai User",description:n.description||`Go/Gin REST API \u2014 ${n.project_name}`,go_version:n.go_version||a$1,app_version:n.app_version||"0.1.0",port:n.port||"8080",skipGit:n.skipGit??false,skipInstall:n.skipInstall??false},R=h();if(!r.skipInstall)try{await execa("go",["version"],{timeout:3e3});}catch{console.log(o.yellow("\n\u26A0 Go not found in PATH \u2014 project will be scaffolded, but `go mod tidy` requires Go 1.21+")),console.log(o.gray(` Install: https://go.dev/dl/
1458
+ `));}let i=O(`Generating Go/Gin project: ${r.project_name}\u2026`).start();try{let t=(_,T)=>c$1(c.join(e,_),T),v=c.join(e,"rapidkit"),S=c.join(e,"rapidkit.cmd");if(await Promise.all([t("cmd/server/main.go",N(r)),t("go.mod",b(r)),t("internal/config/config.go",G(r)),t("internal/server/server.go",q(r)),t("internal/middleware/requestid.go",P()),t("internal/middleware/requestid_test.go",D(r)),t("internal/apierr/apierr.go",H()),t("internal/apierr/apierr_test.go",F(r)),t("internal/handlers/health.go",E()),t("internal/handlers/health_test.go",C(r)),t("internal/handlers/example.go",j(r)),t("internal/handlers/example_test.go",U(r)),t("internal/config/config_test.go",B(r)),t("internal/middleware/cors.go",V()),t("internal/middleware/cors_test.go",W(r)),t("internal/middleware/ratelimit.go",K(r)),t("internal/middleware/ratelimit_test.go",X(r)),t("internal/server/server_test.go",J(r)),t("docs/doc.go",$(r)),t(".air.toml",Q(r)),t("Dockerfile",L()),t("docker-compose.yml",y(r)),t("Makefile",I(r)),t(".golangci.yml",z(r.module_path)),t(".env.example",k(r)),t(".gitignore",x()),t(".github/workflows/ci.yml",M(r)),t("README.md",A(r)),t(".workspai/project.json",Z(r,R)),t(".workspai/context.json",Y()),t("rapidkit",ee(r)),t("rapidkit.cmd",te(r))]),await promises.chmod(v,493),await promises.chmod(S,493),i.succeed(o.green(`Project created at ${e}`)),r.skipInstall)i.info(o.gray("Skipped Go dependency warm-up (--skip-install)."));else try{i.start("Fetching Go dependencies\u2026"),await execa("go",["mod","tidy"],{cwd:e,timeout:12e4}),i.succeed(o.gray("\u2713 go mod tidy completed"));}catch{i.warn(o.yellow("\u26A0 go mod tidy failed \u2014 run manually: go mod tidy"));}if(!r.skipGit)try{await b$1(e)?console.log(o.gray("\u26A0 git init skipped (target is inside an existing git worktree)")):(await execa("git",["init"],{cwd:e,env:a()}),await execa("git",["add","-A"],{cwd:e,env:a()}),await execa("git",["commit","-m","chore: initial scaffold (rapidkit gogin.standard)"],{cwd:e,env:a()}),console.log(o.gray("\u2713 git repository initialized")));}catch{console.log(o.gray("\u26A0 git init skipped (git not found or error)"));}console.log(""),console.log(o.bold("\u2705 Go/Gin project ready!")),console.log(""),console.log(o.cyan("Next steps:")),console.log(o.white(` cd ${r.project_name}`)),console.log(o.white(" make run # start dev server")),console.log(o.white(" make test # run tests")),console.log(""),console.log(o.gray("Server will listen on port "+r.port)),console.log(o.gray(" http://localhost:"+r.port+"/api/v1/health/live")),console.log(o.gray(" http://localhost:"+r.port+"/api/v1/health/ready")),console.log(""),console.log(o.yellow("\u2139 RapidKit Core modules are not available for Go projects (module system uses Python/pip).")),console.log("");}catch(t){throw i.fail(o.red("Failed to generate Go/Gin project")),t}}
1459
1459
  export{ge as generateGoGinKit};