@burdenoff/cli-sdk 2026.928.1 → 2026.1021.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 (236) hide show
  1. package/dist/chunk-IZXPWPKX.js +32 -0
  2. package/dist/chunk-NLEVVDXR.js +1 -0
  3. package/dist/core/index.cjs +7 -7
  4. package/dist/core/index.d.cts +2 -2
  5. package/dist/core/index.d.ts +2 -2
  6. package/dist/core/index.js +1 -1
  7. package/dist/index.cjs +7 -7
  8. package/dist/index.d.cts +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/{module-DxCuik6L.d.cts → module-DOIiVaXQ.d.cts} +4 -1
  12. package/dist/{module-DxCuik6L.d.ts → module-DOIiVaXQ.d.ts} +4 -1
  13. package/dist/modules/adaptercloud/index.cjs +2 -2
  14. package/dist/modules/adaptercloud/index.d.cts +1 -1
  15. package/dist/modules/adaptercloud/index.d.ts +1 -1
  16. package/dist/modules/adaptercloud/index.js +1 -1
  17. package/dist/modules/artistrybase/index.cjs +6 -6
  18. package/dist/modules/artistrybase/index.d.cts +1 -1
  19. package/dist/modules/artistrybase/index.d.ts +1 -1
  20. package/dist/modules/artistrybase/index.js +1 -1
  21. package/dist/modules/assethandler/index.cjs +2 -2
  22. package/dist/modules/assethandler/index.d.cts +1 -1
  23. package/dist/modules/assethandler/index.d.ts +1 -1
  24. package/dist/modules/assethandler/index.js +1 -1
  25. package/dist/modules/atheletebridge/index.cjs +4 -4
  26. package/dist/modules/atheletebridge/index.d.cts +1 -1
  27. package/dist/modules/atheletebridge/index.d.ts +1 -1
  28. package/dist/modules/atheletebridge/index.js +1 -1
  29. package/dist/modules/auth/index.cjs +34 -34
  30. package/dist/modules/auth/index.d.cts +1 -1
  31. package/dist/modules/auth/index.d.ts +1 -1
  32. package/dist/modules/auth/index.js +30 -30
  33. package/dist/modules/billing/index.cjs +3 -3
  34. package/dist/modules/billing/index.d.cts +1 -1
  35. package/dist/modules/billing/index.d.ts +1 -1
  36. package/dist/modules/billing/index.js +1 -1
  37. package/dist/modules/brainyrich/index.cjs +4 -4
  38. package/dist/modules/brainyrich/index.d.cts +1 -1
  39. package/dist/modules/brainyrich/index.d.ts +1 -1
  40. package/dist/modules/brainyrich/index.js +1 -1
  41. package/dist/modules/buildmyiq/index.cjs +3 -3
  42. package/dist/modules/buildmyiq/index.d.cts +1 -1
  43. package/dist/modules/buildmyiq/index.d.ts +1 -1
  44. package/dist/modules/buildmyiq/index.js +1 -1
  45. package/dist/modules/channels/index.cjs +7 -7
  46. package/dist/modules/channels/index.d.cts +1 -1
  47. package/dist/modules/channels/index.d.ts +1 -1
  48. package/dist/modules/channels/index.js +1 -1
  49. package/dist/modules/collabkin/index.cjs +11 -11
  50. package/dist/modules/collabkin/index.d.cts +1 -1
  51. package/dist/modules/collabkin/index.d.ts +1 -1
  52. package/dist/modules/collabkin/index.js +1 -1
  53. package/dist/modules/comradecircle/index.cjs +5 -5
  54. package/dist/modules/comradecircle/index.d.cts +1 -1
  55. package/dist/modules/comradecircle/index.d.ts +1 -1
  56. package/dist/modules/comradecircle/index.js +1 -1
  57. package/dist/modules/conversations/index.cjs +8 -8
  58. package/dist/modules/conversations/index.d.cts +1 -1
  59. package/dist/modules/conversations/index.d.ts +1 -1
  60. package/dist/modules/conversations/index.js +1 -1
  61. package/dist/modules/coolandlovely/index.cjs +4 -4
  62. package/dist/modules/coolandlovely/index.d.cts +1 -1
  63. package/dist/modules/coolandlovely/index.d.ts +1 -1
  64. package/dist/modules/coolandlovely/index.js +1 -1
  65. package/dist/modules/cosmicintersection/index.cjs +4 -4
  66. package/dist/modules/cosmicintersection/index.d.cts +1 -1
  67. package/dist/modules/cosmicintersection/index.d.ts +1 -1
  68. package/dist/modules/cosmicintersection/index.js +1 -1
  69. package/dist/modules/crewfoundry/index.cjs +4 -4
  70. package/dist/modules/crewfoundry/index.d.cts +1 -1
  71. package/dist/modules/crewfoundry/index.d.ts +1 -1
  72. package/dist/modules/crewfoundry/index.js +1 -1
  73. package/dist/modules/devportal/index.cjs +5 -5
  74. package/dist/modules/devportal/index.d.cts +1 -1
  75. package/dist/modules/devportal/index.d.ts +1 -1
  76. package/dist/modules/devportal/index.js +1 -1
  77. package/dist/modules/ecoimpacthub/index.cjs +2 -2
  78. package/dist/modules/ecoimpacthub/index.d.cts +1 -1
  79. package/dist/modules/ecoimpacthub/index.d.ts +1 -1
  80. package/dist/modules/ecoimpacthub/index.js +1 -1
  81. package/dist/modules/eventfullymanaged/index.cjs +21 -21
  82. package/dist/modules/eventfullymanaged/index.d.cts +1 -1
  83. package/dist/modules/eventfullymanaged/index.d.ts +1 -1
  84. package/dist/modules/eventfullymanaged/index.js +1 -1
  85. package/dist/modules/export/index.cjs +3 -3
  86. package/dist/modules/export/index.d.cts +1 -1
  87. package/dist/modules/export/index.d.ts +1 -1
  88. package/dist/modules/export/index.js +1 -1
  89. package/dist/modules/files/index.cjs +9 -9
  90. package/dist/modules/files/index.d.cts +1 -1
  91. package/dist/modules/files/index.d.ts +1 -1
  92. package/dist/modules/files/index.js +1 -1
  93. package/dist/modules/fluidgrids/index.cjs +401 -0
  94. package/dist/modules/fluidgrids/index.d.cts +7 -0
  95. package/dist/modules/fluidgrids/index.d.ts +7 -0
  96. package/dist/modules/fluidgrids/index.js +401 -0
  97. package/dist/modules/ggnomad/index.cjs +5 -5
  98. package/dist/modules/ggnomad/index.d.cts +1 -1
  99. package/dist/modules/ggnomad/index.d.ts +1 -1
  100. package/dist/modules/ggnomad/index.js +1 -1
  101. package/dist/modules/govcitizenhub/index.cjs +4 -4
  102. package/dist/modules/govcitizenhub/index.d.cts +1 -1
  103. package/dist/modules/govcitizenhub/index.d.ts +1 -1
  104. package/dist/modules/govcitizenhub/index.js +1 -1
  105. package/dist/modules/groups/index.cjs +4 -4
  106. package/dist/modules/groups/index.d.cts +1 -1
  107. package/dist/modules/groups/index.d.ts +1 -1
  108. package/dist/modules/groups/index.js +1 -1
  109. package/dist/modules/headshotmarketing/index.cjs +1 -1
  110. package/dist/modules/headshotmarketing/index.d.cts +1 -1
  111. package/dist/modules/headshotmarketing/index.d.ts +1 -1
  112. package/dist/modules/headshotmarketing/index.js +1 -1
  113. package/dist/modules/health/index.d.cts +1 -1
  114. package/dist/modules/health/index.d.ts +1 -1
  115. package/dist/modules/hookmovies/index.cjs +7 -7
  116. package/dist/modules/hookmovies/index.d.cts +1 -1
  117. package/dist/modules/hookmovies/index.d.ts +1 -1
  118. package/dist/modules/hookmovies/index.js +1 -1
  119. package/dist/modules/housingvista/index.cjs +7 -7
  120. package/dist/modules/housingvista/index.d.cts +1 -1
  121. package/dist/modules/housingvista/index.d.ts +1 -1
  122. package/dist/modules/housingvista/index.js +1 -1
  123. package/dist/modules/integrations/index.cjs +5 -5
  124. package/dist/modules/integrations/index.d.cts +1 -1
  125. package/dist/modules/integrations/index.d.ts +1 -1
  126. package/dist/modules/integrations/index.js +1 -1
  127. package/dist/modules/intelwatchtower/index.cjs +4 -4
  128. package/dist/modules/intelwatchtower/index.d.cts +1 -1
  129. package/dist/modules/intelwatchtower/index.d.ts +1 -1
  130. package/dist/modules/intelwatchtower/index.js +1 -1
  131. package/dist/modules/kadaikodi/index.cjs +2 -2
  132. package/dist/modules/kadaikodi/index.d.cts +1 -1
  133. package/dist/modules/kadaikodi/index.d.ts +1 -1
  134. package/dist/modules/kadaikodi/index.js +1 -1
  135. package/dist/modules/labsofscience/index.cjs +4 -4
  136. package/dist/modules/labsofscience/index.d.cts +1 -1
  137. package/dist/modules/labsofscience/index.d.ts +1 -1
  138. package/dist/modules/labsofscience/index.js +1 -1
  139. package/dist/modules/manufacturedops/index.cjs +6 -6
  140. package/dist/modules/manufacturedops/index.d.cts +1 -1
  141. package/dist/modules/manufacturedops/index.d.ts +1 -1
  142. package/dist/modules/manufacturedops/index.js +1 -1
  143. package/dist/modules/movethewheels/index.cjs +1 -1
  144. package/dist/modules/movethewheels/index.d.cts +1 -1
  145. package/dist/modules/movethewheels/index.d.ts +1 -1
  146. package/dist/modules/movethewheels/index.js +1 -1
  147. package/dist/modules/mybodyshield/index.cjs +6 -6
  148. package/dist/modules/mybodyshield/index.d.cts +1 -1
  149. package/dist/modules/mybodyshield/index.d.ts +1 -1
  150. package/dist/modules/mybodyshield/index.js +1 -1
  151. package/dist/modules/notifications/index.cjs +5 -5
  152. package/dist/modules/notifications/index.d.cts +1 -1
  153. package/dist/modules/notifications/index.d.ts +1 -1
  154. package/dist/modules/notifications/index.js +1 -1
  155. package/dist/modules/organizations/index.d.cts +1 -1
  156. package/dist/modules/organizations/index.d.ts +1 -1
  157. package/dist/modules/organizations/index.js +1 -1
  158. package/dist/modules/planmagnet/index.cjs +23 -23
  159. package/dist/modules/planmagnet/index.d.cts +1 -1
  160. package/dist/modules/planmagnet/index.d.ts +1 -1
  161. package/dist/modules/planmagnet/index.js +1 -1
  162. package/dist/modules/products/index.cjs +4 -4
  163. package/dist/modules/products/index.d.cts +1 -1
  164. package/dist/modules/products/index.d.ts +1 -1
  165. package/dist/modules/products/index.js +1 -1
  166. package/dist/modules/proserviceworld/index.cjs +2 -2
  167. package/dist/modules/proserviceworld/index.d.cts +1 -1
  168. package/dist/modules/proserviceworld/index.d.ts +1 -1
  169. package/dist/modules/proserviceworld/index.js +1 -1
  170. package/dist/modules/rbac/index.cjs +2 -2
  171. package/dist/modules/rbac/index.d.cts +1 -1
  172. package/dist/modules/rbac/index.d.ts +1 -1
  173. package/dist/modules/rbac/index.js +1 -1
  174. package/dist/modules/sandbox/index.cjs +4 -4
  175. package/dist/modules/sandbox/index.d.cts +1 -1
  176. package/dist/modules/sandbox/index.d.ts +1 -1
  177. package/dist/modules/sandbox/index.js +1 -1
  178. package/dist/modules/scheduler/index.cjs +5 -5
  179. package/dist/modules/scheduler/index.d.cts +1 -1
  180. package/dist/modules/scheduler/index.d.ts +1 -1
  181. package/dist/modules/scheduler/index.js +1 -1
  182. package/dist/modules/security/index.cjs +7 -7
  183. package/dist/modules/security/index.d.cts +1 -1
  184. package/dist/modules/security/index.d.ts +1 -1
  185. package/dist/modules/security/index.js +1 -1
  186. package/dist/modules/semanticfed/index.cjs +7 -7
  187. package/dist/modules/semanticfed/index.d.cts +1 -1
  188. package/dist/modules/semanticfed/index.d.ts +1 -1
  189. package/dist/modules/semanticfed/index.js +1 -1
  190. package/dist/modules/store/index.cjs +7 -7
  191. package/dist/modules/store/index.d.cts +1 -1
  192. package/dist/modules/store/index.d.ts +1 -1
  193. package/dist/modules/store/index.js +1 -1
  194. package/dist/modules/subscriberbot/index.cjs +2 -2
  195. package/dist/modules/subscriberbot/index.d.cts +1 -1
  196. package/dist/modules/subscriberbot/index.d.ts +1 -1
  197. package/dist/modules/subscriberbot/index.js +1 -1
  198. package/dist/modules/support/index.cjs +2 -2
  199. package/dist/modules/support/index.d.cts +1 -1
  200. package/dist/modules/support/index.d.ts +1 -1
  201. package/dist/modules/support/index.js +1 -1
  202. package/dist/modules/tags/index.cjs +2 -2
  203. package/dist/modules/tags/index.d.cts +1 -1
  204. package/dist/modules/tags/index.d.ts +1 -1
  205. package/dist/modules/tags/index.js +1 -1
  206. package/dist/modules/technospam/index.cjs +4 -4
  207. package/dist/modules/technospam/index.d.cts +1 -1
  208. package/dist/modules/technospam/index.d.ts +1 -1
  209. package/dist/modules/technospam/index.js +1 -1
  210. package/dist/modules/theculturepost/index.cjs +3 -3
  211. package/dist/modules/theculturepost/index.d.cts +1 -1
  212. package/dist/modules/theculturepost/index.d.ts +1 -1
  213. package/dist/modules/theculturepost/index.js +1 -1
  214. package/dist/modules/theglobalfuel/index.cjs +3 -3
  215. package/dist/modules/theglobalfuel/index.d.cts +1 -1
  216. package/dist/modules/theglobalfuel/index.d.ts +1 -1
  217. package/dist/modules/theglobalfuel/index.js +1 -1
  218. package/dist/modules/timecampus/index.cjs +7 -7
  219. package/dist/modules/timecampus/index.d.cts +1 -1
  220. package/dist/modules/timecampus/index.d.ts +1 -1
  221. package/dist/modules/timecampus/index.js +1 -1
  222. package/dist/modules/tours/index.cjs +2 -2
  223. package/dist/modules/tours/index.d.cts +1 -1
  224. package/dist/modules/tours/index.d.ts +1 -1
  225. package/dist/modules/tours/index.js +1 -1
  226. package/dist/modules/vibecontrols/index.cjs +1 -1
  227. package/dist/modules/vibecontrols/index.d.cts +1 -1
  228. package/dist/modules/vibecontrols/index.d.ts +1 -1
  229. package/dist/modules/vibecontrols/index.js +1 -1
  230. package/dist/modules/workspaces/index.cjs +15 -15
  231. package/dist/modules/workspaces/index.d.cts +1 -1
  232. package/dist/modules/workspaces/index.d.ts +1 -1
  233. package/dist/modules/workspaces/index.js +11 -11
  234. package/package.json +1 -1
  235. package/dist/chunk-TCBALVP4.js +0 -32
  236. package/dist/chunk-WXDQ3S5J.js +0 -1
@@ -1,80 +1,80 @@
1
- import {Lc,Mc}from'../../chunk-REBBLQFS.js';import {a,g,t,e,l,v,f,i,w,C,o,h,u,c,p,n,m,k,B}from'../../chunk-WXDQ3S5J.js';import {q,o as o$1,f as f$1,h as h$1,g as g$1,d,i as i$1,e as e$1}from'../../chunk-TCBALVP4.js';function X(s){let u$1=s.command("auth").description("Authentication commands");u$1.command("login").description("Authenticate with VibeControls").option("--client-credentials","Authenticate as an app with client ID and secret").option("--workspace-id <id>","Workspace ID (for app auth)").action(async i=>{try{i.clientCredentials?await Ce(i.workspaceId):await Ue();}catch(r){g(r);}}),u$1.command("logout").description("Revoke tokens and clear stored auth").action(async()=>{try{if(t()?.accessToken)try{await e(Lc);}catch{l("Server-side logout failed, clearing local tokens");}v(),f(),i("Logged out successfully");}catch(i){g(i);}}),u$1.command("status").description("Show current auth state").option("-f, --format <format>","Output format (json, table)").action(i=>{let r=t(),p=w(),I=!!r?.accessToken,m=r?.accessToken?C(r):false,f=r?.expiresAt?o(new Date(r.expiresAt).toISOString()):"-",h$1=r?.authMethod==="client_credentials"?"Client Credentials":"OAuth2 Device Code",e=r?.workspaceTokenExpiresAt?o(new Date(r.workspaceTokenExpiresAt).toISOString()):"-";h(i,{authenticated:I,method:h$1,expired:m,expiresAt:f,workspaceId:r?.workspaceId??"-",organizationId:r?.organizationId??"-",workspaceTokenExpiresAt:e,workspaceEndpoint:p.workspaceEndpoint,globalEndpoint:p.globalEndpoint},{headers:["Key","Value"],rows:[["Authenticated",String(I)],["Method",h$1],["Expired",String(m)],["Expires At",f],["Workspace ID",r?.workspaceId??"-"],["Organization ID",r?.organizationId??"-"],["Workspace Token Expires",e],["Workspace Endpoint",p.workspaceEndpoint],["Global Endpoint",p.globalEndpoint]]});}),u$1.command("token").description("Print access token to stdout").option("--workspace","Print workspace token instead").action(i=>{let r=t();if(i.workspace){if(!r?.workspaceToken)throw new o$1("No workspace token. Set a workspace: vibecontrols workspace set <id>");process.stdout.write(r.workspaceToken);return}if(!r?.accessToken)throw new o$1("Not authenticated. Run: vibecontrols auth login");process.stdout.write(r.accessToken);}),u$1.command("refresh").description("Force token refresh").action(async()=>{try{let i$1=t();if(!i$1?.refreshToken&&i$1?.authMethod!=="client_credentials")throw new o$1("No refresh token available. Run: vibecontrols auth login");if(i$1?.authMethod==="client_credentials"&&i$1.clientId&&i$1.clientSecret){let I=w(),m=await f$1(I.globalEndpoint,i$1.clientId,i$1.clientSecret);u({...i$1,accessToken:m.accessToken,expiresAt:Date.now()+m.expiresIn*1e3}),f(),i("App token refreshed successfully"),i$1.workspaceId&&i$1.organizationId&&await J();return}let p=(await e(Mc,{token:i$1.refreshToken})).refreshToken;u({...i$1,accessToken:p.accessToken,refreshToken:p.refreshToken,expiresAt:Date.now()+p.expiresIn*1e3}),f(),i("Token refreshed successfully"),i$1.workspaceId&&i$1.organizationId&&await J();}catch(i){g(i);}});}async function J(){let s=t();if(!s?.accessToken||!s.workspaceId||!s.organizationId)return;let u$1=w();try{let i$1=await g$1(u$1.workspaceEndpoint,s.accessToken,s.workspaceId,s.organizationId);u({...s,workspaceToken:i$1.token,workspaceTokenExpiresAt:new Date(i$1.expiresAt).getTime()}),f(),i("Workspace token refreshed");}catch{l("Workspace token refresh failed \u2014 workspace operations may require re-login");}}async function Ue(){let s=w(),{oidcIssuer:u$1,clientId:i$2}=B(),r={...s,oidcIssuer:u$1,clientId:i$2};k("Starting device code authentication...");let p=await d(r);console.log(""),console.log(` Open: ${p.verificationUri}`),console.log(` Code: ${p.userCode}`),console.log(""),await i$1(p.verificationUriComplete??p.verificationUri)?k("Browser opened"):l("Could not open browser \u2014 open the URL manually"),k("Waiting for authorization...");let m=await e$1(p.deviceCode,p.interval,r),f$1=m.accessToken,h=Date.now()+m.expiresIn*1e3;k("Fetching workspaces...");try{let e=await h$1(s.globalEndpoint,f$1);if(e.length===0){u({accessToken:f$1,refreshToken:m.refreshToken,expiresAt:h,authMethod:"device_code"}),f(),i("Authentication successful (no workspaces found)");return}let t=e[0];if(e.length>1){console.log(`
2
- Available workspaces:`),e.forEach((O,$)=>console.log(` ${$+1}. ${O.name} (${O.slug})`));let A=(await import('readline')).createInterface({input:process.stdin,output:process.stdout}),g=await new Promise(O=>{A.question(`
3
- Select workspace [1-${e.length}]: `,$=>{A.close(),O($.trim());});}),S=parseInt(g,10)-1;S>=0&&S<e.length&&(t=e[S]);}k(`Using workspace: ${t.name} (${t.id})`);let n=await g$1(s.workspaceEndpoint,f$1,t.id,t.organizationId);u({accessToken:f$1,refreshToken:m.refreshToken,expiresAt:h,workspaceToken:n.token,workspaceTokenExpiresAt:new Date(n.expiresAt).getTime(),workspaceId:t.id,organizationId:t.organizationId,authMethod:"device_code"}),f(),i("Authentication successful");}catch(e){u({accessToken:f$1,refreshToken:m.refreshToken,expiresAt:h,authMethod:"device_code"}),f(),i("Authentication successful"),l(`Workspace token not obtained: ${e instanceof Error?e.message:String(e)}`),k("Set workspace manually: vibecontrols workspace set <id>");}}async function Ce(s){let u$1=w(),r=(await import('readline')).createInterface({input:process.stdin,output:process.stdout}),p=await new Promise(A=>{r.question("Client ID: ",g=>A(g.trim()));}),I=await new Promise(A=>{r.question("Client Secret: ",g=>{r.close(),A(g.trim());});});if(!p||!I)throw new o$1("Client ID and secret cannot be empty");k("Authenticating app...");let m=await f$1(u$1.globalEndpoint,p,I),f$2=m.accessToken,h=Date.now()+m.expiresIn*1e3,e,t,n=s,l$1;if(n)try{let g=(await h$1(u$1.globalEndpoint,f$2)).find(S=>S.id===n);if(g){l$1=g.organizationId;let S=await g$1(u$1.workspaceEndpoint,f$2,n,l$1);e=S.token,t=new Date(S.expiresAt).getTime(),k(`Workspace token issued for: ${g.name}`);}else l(`Workspace ${n} not found \u2014 skipping workspace token`),n=void 0;}catch(A){l(`Workspace token failed: ${A instanceof Error?A.message:String(A)}`);}u({accessToken:f$2,refreshToken:"",expiresAt:h,workspaceToken:e,workspaceTokenExpiresAt:t,workspaceId:n,organizationId:l$1,authMethod:"client_credentials",clientId:p,clientSecret:I}),f(),i("App authentication successful");}var Q=`
1
+ import {Lc,Mc}from'../../chunk-REBBLQFS.js';import {a,s,g,t,e,l,v,f,i,w,C,o,h,u,c,p,n,m,k,B}from'../../chunk-NLEVVDXR.js';import {q,o as o$1,f as f$1,h as h$1,g as g$1,d,i as i$1,e as e$1}from'../../chunk-IZXPWPKX.js';function Q(s$1){let u$1=s$1.command("auth").description("Authentication commands");u$1.command("login").description(`Authenticate with ${s().productName}`).option("--client-credentials","Authenticate as an app with client ID and secret").option("--workspace-id <id>","Workspace ID (for app auth)").action(async i=>{try{i.clientCredentials?await Pe(i.workspaceId):await Ce();}catch(r){g(r);}}),u$1.command("logout").description("Revoke tokens and clear stored auth").action(async()=>{try{if(t()?.accessToken)try{await e(Lc);}catch{l("Server-side logout failed, clearing local tokens");}v(),f(),i("Logged out successfully");}catch(i){g(i);}}),u$1.command("status").description("Show current auth state").option("-f, --format <format>","Output format (json, table)").action(i=>{let r=t(),p=w(),I=!!r?.accessToken,m=r?.accessToken?C(r):false,f=r?.expiresAt?o(new Date(r.expiresAt).toISOString()):"-",h$1=r?.authMethod==="client_credentials"?"Client Credentials":"OAuth2 Device Code",e=r?.workspaceTokenExpiresAt?o(new Date(r.workspaceTokenExpiresAt).toISOString()):"-";h(i,{authenticated:I,method:h$1,expired:m,expiresAt:f,workspaceId:r?.workspaceId??"-",organizationId:r?.organizationId??"-",workspaceTokenExpiresAt:e,workspaceEndpoint:p.workspaceEndpoint,globalEndpoint:p.globalEndpoint},{headers:["Key","Value"],rows:[["Authenticated",String(I)],["Method",h$1],["Expired",String(m)],["Expires At",f],["Workspace ID",r?.workspaceId??"-"],["Organization ID",r?.organizationId??"-"],["Workspace Token Expires",e],["Workspace Endpoint",p.workspaceEndpoint],["Global Endpoint",p.globalEndpoint]]});}),u$1.command("token").description("Print access token to stdout").option("--workspace","Print workspace token instead").action(i=>{let r=t();if(i.workspace){if(!r?.workspaceToken)throw new o$1(`No workspace token. Set a workspace: ${s().productName} workspace set <id>`);process.stdout.write(r.workspaceToken);return}if(!r?.accessToken)throw new o$1(`Not authenticated. Run: ${s().productName} auth login`);process.stdout.write(r.accessToken);}),u$1.command("refresh").description("Force token refresh").action(async()=>{try{let i$1=t();if(!i$1?.refreshToken&&i$1?.authMethod!=="client_credentials")throw new o$1(`No refresh token available. Run: ${s().productName} auth login`);if(i$1?.authMethod==="client_credentials"&&i$1.clientId&&i$1.clientSecret){let I=w(),m=await f$1(I.globalEndpoint,i$1.clientId,i$1.clientSecret);u({...i$1,accessToken:m.accessToken,expiresAt:Date.now()+m.expiresIn*1e3}),f(),i("App token refreshed successfully"),i$1.workspaceId&&i$1.organizationId&&await X();return}let p=(await e(Mc,{token:i$1.refreshToken})).refreshToken;u({...i$1,accessToken:p.accessToken,refreshToken:p.refreshToken,expiresAt:Date.now()+p.expiresIn*1e3}),f(),i("Token refreshed successfully"),i$1.workspaceId&&i$1.organizationId&&await X();}catch(i){g(i);}});}async function X(){let s=t();if(!s?.accessToken||!s.workspaceId||!s.organizationId)return;let u$1=w();try{let i$1=await g$1(u$1.workspaceEndpoint,s.accessToken,s.workspaceId,s.organizationId);u({...s,workspaceToken:i$1.token,workspaceTokenExpiresAt:new Date(i$1.expiresAt).getTime()}),f(),i("Workspace token refreshed");}catch{l("Workspace token refresh failed \u2014 workspace operations may require re-login");}}async function Ce(){let s$1=w(),{oidcIssuer:u$1,clientId:i$2}=B(),r={...s$1,oidcIssuer:u$1,clientId:i$2};k("Starting device code authentication...");let p=await d(r);console.log(""),console.log(` Open: ${p.verificationUri}`),console.log(` Code: ${p.userCode}`),console.log(""),await i$1(p.verificationUriComplete??p.verificationUri)?k("Browser opened"):l("Could not open browser \u2014 open the URL manually"),k("Waiting for authorization...");let m=await e$1(p.deviceCode,p.interval,r),f$1=m.accessToken,h=Date.now()+m.expiresIn*1e3;k("Fetching workspaces...");try{let e=await h$1(s$1.globalEndpoint,f$1);if(e.length===0){u({accessToken:f$1,refreshToken:m.refreshToken,expiresAt:h,authMethod:"device_code"}),f(),i("Authentication successful (no workspaces found)");return}let t=e[0];if(e.length>1){console.log(`
2
+ Available workspaces:`),e.forEach(($,N)=>console.log(` ${N+1}. ${$.name} (${$.slug})`));let A=(await import('readline')).createInterface({input:process.stdin,output:process.stdout}),g=await new Promise($=>{A.question(`
3
+ Select workspace [1-${e.length}]: `,N=>{A.close(),$(N.trim());});}),S=parseInt(g,10)-1;S>=0&&S<e.length&&(t=e[S]);}k(`Using workspace: ${t.name} (${t.id})`);let n=await g$1(s$1.workspaceEndpoint,f$1,t.id,t.organizationId);u({accessToken:f$1,refreshToken:m.refreshToken,expiresAt:h,workspaceToken:n.token,workspaceTokenExpiresAt:new Date(n.expiresAt).getTime(),workspaceId:t.id,organizationId:t.organizationId,authMethod:"device_code"}),f(),i("Authentication successful");}catch(e){u({accessToken:f$1,refreshToken:m.refreshToken,expiresAt:h,authMethod:"device_code"}),f(),i("Authentication successful"),l(`Workspace token not obtained: ${e instanceof Error?e.message:String(e)}`),k(`Set workspace manually: ${s().productName} workspace set <id>`);}}async function Pe(s){let u$1=w(),r=(await import('readline')).createInterface({input:process.stdin,output:process.stdout}),p=await new Promise(A=>{r.question("Client ID: ",g=>A(g.trim()));}),I=await new Promise(A=>{r.question("Client Secret: ",g=>{r.close(),A(g.trim());});});if(!p||!I)throw new o$1("Client ID and secret cannot be empty");k("Authenticating app...");let m=await f$1(u$1.globalEndpoint,p,I),f$2=m.accessToken,h=Date.now()+m.expiresIn*1e3,e,t,n=s,l$1;if(n)try{let g=(await h$1(u$1.globalEndpoint,f$2)).find(S=>S.id===n);if(g){l$1=g.organizationId;let S=await g$1(u$1.workspaceEndpoint,f$2,n,l$1);e=S.token,t=new Date(S.expiresAt).getTime(),k(`Workspace token issued for: ${g.name}`);}else l(`Workspace ${n} not found \u2014 skipping workspace token`),n=void 0;}catch(A){l(`Workspace token failed: ${A instanceof Error?A.message:String(A)}`);}u({accessToken:f$2,refreshToken:"",expiresAt:h,workspaceToken:e,workspaceTokenExpiresAt:t,workspaceId:n,organizationId:l$1,authMethod:"client_credentials",clientId:p,clientSecret:I}),f(),i("App authentication successful");}var Z=`
4
4
  query currentUser {
5
5
  currentUser {
6
6
  id email firstName lastName username phoneNumber name
7
7
  emailVerified mfaEnabled isAdmin role status createdAt lastLoginAt
8
8
  }
9
9
  }
10
- `,Z=`
10
+ `,ee=`
11
11
  mutation updateCurrentUserProfile($input: UpdateUserInput!) {
12
12
  updateCurrentUserProfile(input: $input) {
13
13
  id name firstName lastName username phoneNumber timezone language
14
14
  }
15
15
  }
16
- `,K=`
16
+ `,L=`
17
17
  query authAuditLogs($pagination: PaginationInput) {
18
18
  authAuditLogs(pagination: $pagination) {
19
19
  id action resource resourceType resourceId description
20
20
  ipAddress userAgent metadata createdAt
21
21
  }
22
22
  }
23
- `,ee=`
23
+ `,te=`
24
24
  query activeSessions($pagination: PaginationInput) {
25
25
  activeSessions(pagination: $pagination) {
26
26
  id status ipAddress userAgent location lastActivityAt expiresAt createdAt isCurrent
27
27
  }
28
28
  }
29
- `,te=`
29
+ `,ne=`
30
30
  query currentUserMFAMethods($pagination: PaginationInput) {
31
31
  currentUserMFAMethods(pagination: $pagination) {
32
32
  id method status createdAt updatedAt
33
33
  }
34
34
  }
35
- `,ne=`
35
+ `,ie=`
36
36
  mutation setupMFA($method: MFAMethod!) {
37
37
  setupMFA(method: $method) {
38
38
  method backupCodes qrCode secret
39
39
  }
40
40
  }
41
- `;var ie=`
41
+ `;var re=`
42
42
  mutation enableMFA($code: String!) {
43
43
  enableMFA(code: $code)
44
44
  }
45
- `,re=`
45
+ `,oe=`
46
46
  mutation disableMFA {
47
47
  disableMFA
48
48
  }
49
- `,oe=`
49
+ `,se=`
50
50
  query myApiKeys($pagination: PaginationInput) {
51
51
  myApiKeys(pagination: $pagination) {
52
52
  id name prefix appId appName scopes expiresAt lastUsedAt createdAt
53
53
  }
54
54
  }
55
- `,se=`
55
+ `,ae=`
56
56
  query appApiKeys($appId: ID!, $pagination: PaginationInput) {
57
57
  appApiKeys(appId: $appId, pagination: $pagination) {
58
58
  id name prefix appId appName scopes expiresAt lastUsedAt createdAt
59
59
  }
60
60
  }
61
- `,ae=`
61
+ `,ce=`
62
62
  mutation generateAPIKey($input: GenerateAPIKeyInput!) {
63
63
  generateAPIKey(input: $input) {
64
64
  keyId apiKey apiSecret
65
65
  }
66
66
  }
67
- `;var ce=`
67
+ `;var pe=`
68
68
  mutation revokeAPIKey($keyId: String!) {
69
69
  revokeAPIKey(keyId: $keyId)
70
70
  }
71
- `,pe=`
71
+ `,de=`
72
72
  mutation rotateAPIKey($keyId: String!) {
73
73
  rotateAPIKey(keyId: $keyId) {
74
74
  apiSecret
75
75
  }
76
76
  }
77
- `,de=`
77
+ `,me=`
78
78
  query currentUserDelegations($pagination: PaginationInput) {
79
79
  currentUserDelegations(pagination: $pagination) {
80
80
  id appId userId grantedBy grantedAt expiresAt scopes workspaceIds
@@ -82,79 +82,79 @@ Select workspace [1-${e.length}]: `,$=>{A.close(),O($.trim());});}),S=parseInt(g
82
82
  app { id name }
83
83
  }
84
84
  }
85
- `,me=`
85
+ `,ue=`
86
86
  mutation grantDelegation($input: GrantDelegationInput!) {
87
87
  grantDelegation(input: $input) {
88
88
  id appId userId grantedBy grantedAt expiresAt scopes workspaceIds status
89
89
  }
90
90
  }
91
- `,ue=`
91
+ `,le=`
92
92
  mutation revokeDelegation($id: ID!, $reason: String) {
93
93
  revokeDelegation(id: $id, reason: $reason)
94
94
  }
95
- `,le=`
95
+ `,ge=`
96
96
  query currentUserApps($pagination: PaginationInput) {
97
97
  currentUserApps(pagination: $pagination) {
98
98
  id clientId name description type actorType status ownerUserId
99
99
  redirectUris scopes createdAt updatedAt
100
100
  }
101
101
  }
102
- `,ge=`
102
+ `,fe=`
103
103
  query app($id: ID!) {
104
104
  app(id: $id) {
105
105
  id clientId name description type actorType status ownerUserId redirectUris scopes
106
106
  }
107
107
  }
108
- `,fe=`
108
+ `,Ae=`
109
109
  mutation createApp($input: CreateAppInput!) {
110
110
  createApp(input: $input) {
111
111
  app { id clientId name type status }
112
112
  clientSecret
113
113
  }
114
114
  }
115
- `,Ae=`
115
+ `,Ie=`
116
116
  mutation updateApp($id: ID!, $input: UpdateAppInput!) {
117
117
  updateApp(id: $id, input: $input) {
118
118
  id name description redirectUris scopes status
119
119
  }
120
120
  }
121
- `,Ie=`
121
+ `,he=`
122
122
  mutation deactivateApp($id: ID!) {
123
123
  deactivateApp(id: $id)
124
124
  }
125
- `,he=`
125
+ `,ye=`
126
126
  query getSSOConfig($tenantId: String!) {
127
127
  getSSOConfig(tenantId: $tenantId) {
128
128
  id identifier tenantId entityId ssoUrl sloUrl certificate enabled metadata
129
129
  }
130
130
  }
131
- `,ye=`
131
+ `,we=`
132
132
  mutation saveSSOConfig($tenantId: String!, $input: SSOConfigInput!) {
133
133
  saveSSOConfig(tenantId: $tenantId, input: $input) {
134
134
  id identifier entityId ssoUrl sloUrl certificate enabled
135
135
  }
136
136
  }
137
- `,we=`
137
+ `,ke=`
138
138
  mutation deleteSSOConfig($tenantId: String!) {
139
139
  deleteSSOConfig(tenantId: $tenantId)
140
140
  }
141
- `,ke=`
141
+ `,Ee=`
142
142
  query users($filter: UserFilterInput, $pagination: PaginationInput) {
143
143
  users(filter: $filter, pagination: $pagination) {
144
144
  users { id email firstName lastName username role status createdAt }
145
145
  totalCount hasMore
146
146
  }
147
147
  }
148
- `,Ee=`
148
+ `,Se=`
149
149
  query user($id: ID!) {
150
150
  user(id: $id) {
151
151
  id email firstName lastName username role status emailVerified lastLoginAt
152
152
  }
153
153
  }
154
- `,Se=`
154
+ `,Te=`
155
155
  mutation updateUser($id: ID!, $input: AdminUpdateUserInput!) {
156
156
  updateUser(id: $id, input: $input) {
157
157
  id email firstName lastName username role status
158
158
  }
159
159
  }
160
- `;function Te(s){let u=s.command("profile").description("Current user profile");u.command("show").description("Show current user").option("-f, --format <format>").action(async e=>{try{let t=await c(Q);h(e,t.currentUser);}catch(t){g(t);}}),u.command("update").description("Update current user profile").option("--first-name <s>").option("--last-name <s>").option("--name <s>").option("--username <s>").option("--phone <s>").option("--timezone <s>").option("--language <s>").option("-f, --format <format>").action(async e=>{try{let t={};if(e.firstName&&(t.firstName=e.firstName),e.lastName&&(t.lastName=e.lastName),e.name&&(t.name=e.name),e.username&&(t.username=e.username),e.phone&&(t.phoneNumber=e.phone),e.timezone&&(t.timezone=e.timezone),e.language&&(t.language=e.language),!Object.keys(t).length)throw new o$1("No updates specified");let n=await c(Z,{input:t});i("Profile updated"),h(e,n.updateCurrentUserProfile);}catch(t){g(t);}});let i$1=s.command("security").description("Account security overview");i$1.command("audit-log").description("Recent auth audit events for the current user").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(K,{pagination:{limit:e.limit,offset:0}});h(e,t.authAuditLogs,{headers:["When","Action","Resource","IP"],rows:t.authAuditLogs.map(n=>[o(n.createdAt),n.action,n.resource??"-",n.ipAddress??"-"])});}catch(t){g(t);}}),i$1.command("sessions").description("Active sessions for the current user").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(ee,{pagination:{limit:e.limit,offset:0}});h(e,t.activeSessions,{headers:["ID","Status","IP","LastActivity","Current"],rows:t.activeSessions.map(n$1=>[p(n$1.id,12),n(n$1.status),n$1.ipAddress??"-",o(n$1.lastActivityAt),String(!!n$1.isCurrent)])});}catch(t){g(t);}});let r=s.command("mfa").description("Multi-factor authentication");r.command("list").description("List MFA methods enrolled for the current user").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(te,{pagination:{limit:e.limit,offset:0}});h(e,t.currentUserMFAMethods,{headers:["Method","Status","Created"],rows:t.currentUserMFAMethods.map(n$1=>[n$1.method,n(n$1.status),o(n$1.createdAt)])});}catch(t){g(t);}}),r.command("enroll").description("Begin MFA enrollment (TOTP/SMS/EMAIL)").requiredOption("--method <m>","TOTP|SMS|EMAIL").option("-f, --format <format>").action(async e=>{try{let t=await c(ne,{method:e.method.toUpperCase()});e.format?h(e,t.setupMFA):(i("MFA enrollment started"),m(t.setupMFA),k("Save your backup codes; verify with `auth mfa verify --code <CODE>`."));}catch(t){g(t);}}),r.command("verify").description("Verify MFA enrollment code").requiredOption("--code <code>").action(async e=>{try{await c(ie,{code:e.code}),i("MFA enabled");}catch(t){g(t);}}),r.command("disable").description("Disable MFA for the current user").action(async()=>{try{await c(re),i("MFA disabled");}catch(e){g(e);}});let p$1=s.command("api-keys").description("API key management");p$1.command("list").description("List your API keys").option("--app <id>","Restrict to keys for an app id").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=e.app?se:oe,n=e.app?{appId:e.app,pagination:{limit:e.limit,offset:0}}:{pagination:{limit:e.limit,offset:0}},l=await c(t,n),A=l.myApiKeys??l.appApiKeys??[];h(e,A,{headers:["ID","Name","Prefix","App","Scopes","LastUsed"],rows:A.map(g=>[p(g.id,12),g.name??"-",g.prefix??"-",g.appName??"-",Array.isArray(g.scopes)?g.scopes.join(","):"-",o(g.lastUsedAt)])});}catch(t){g(t);}}),p$1.command("create").description("Generate a new API key").requiredOption("--name <name>").requiredOption("--app <appId>","Owning app id").option("--scope <scope>","Comma-separated scopes").option("--expires <iso>","ISO expiry").option("-f, --format <format>").action(async e=>{try{let t={name:e.name,appId:e.app,scope:e.scope?e.scope.split(","):void 0,expiresAt:e.expires},n=await c(ae,{input:t});i("API key generated. Store the secret \u2014 it is only shown once."),m(n.generateAPIKey);}catch(t){g(t);}}),p$1.command("revoke").description("Revoke an API key").argument("<keyId>").action(async e=>{try{await c(ce,{keyId:e}),i("API key revoked");}catch(t){g(t);}}),p$1.command("rotate").description("Rotate an API key (returns new secret)").argument("<keyId>").action(async e=>{try{let t=await c(pe,{keyId:e});i("API key rotated"),m(t.rotateAPIKey);}catch(t){g(t);}}),s.command("audit-log").description("Auth audit log").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(K,{pagination:{limit:e.limit,offset:0}});h(e,t.authAuditLogs);}catch(t){g(t);}});let I=s.command("delegations").description("Delegation management");I.command("list").description("Delegations granted to the current user").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(de,{pagination:{limit:e.limit,offset:0}});h(e,t.currentUserDelegations);}catch(t){g(t);}}),I.command("grant").description("Grant a delegation to an app").requiredOption("--app <appId>").requiredOption("--user <userId>","User to delegate as").option("--scope <s>","Comma-separated scopes").option("--workspace <ids>","Comma-separated workspace ids").option("--expires <iso>").option("-f, --format <format>").action(async e=>{try{let t={appId:e.app,userId:e.user,scopes:e.scope?e.scope.split(","):void 0,workspaceIds:e.workspace?e.workspace.split(","):void 0,expiresAt:e.expires},n=await c(me,{input:t});i("Delegation granted"),h(e,n.grantDelegation);}catch(t){g(t);}}),I.command("revoke").description("Revoke a delegation").argument("<id>").option("--reason <text>").action(async(e,t)=>{try{await c(ue,{id:e,reason:t.reason}),i("Delegation revoked");}catch(n){g(n);}});let m$1=s.command("apps").description("OAuth/system app management");m$1.command("list").description("Apps owned by the current user").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(le,{pagination:{limit:e.limit,offset:0}});h(e,t.currentUserApps,{headers:["ID","ClientID","Name","Type","Status"],rows:t.currentUserApps.map(n$1=>[p(n$1.id,12),p(n$1.clientId,24),n$1.name??"-",n$1.type??"-",n(n$1.status)])});}catch(t){g(t);}}),m$1.command("get").description("Get an app by id").argument("<id>").option("-f, --format <format>").action(async(e,t)=>{try{let n=await c(ge,{id:e});if(!n.app)throw new o$1(`App ${e} not found`);h(t,n.app);}catch(n){g(n);}}),m$1.command("create").description("Create an OAuth app").requiredOption("--name <s>").option("--description <s>").option("--type <t>","OAUTH|SYSTEM","OAUTH").option("--actor-type <t>","USER|APP|SERVICE","APP").option("--redirect <urls>","Comma-separated redirect URIs").option("--scopes <s>","Comma-separated scopes").option("-f, --format <format>").action(async e=>{try{let t={name:e.name,description:e.description,type:(e.type??"OAUTH").toUpperCase(),actorType:(e.actorType??"APP").toUpperCase(),redirectUris:e.redirect?e.redirect.split(","):void 0,scopes:e.scopes?e.scopes.split(","):void 0},n=await c(fe,{input:t});i("App created. Client secret only shown once."),m(n.createApp);}catch(t){g(t);}}),m$1.command("update").description("Update an app").argument("<id>").option("--name <s>").option("--description <s>").option("--redirect <urls>","Comma-separated redirect URIs").option("--scopes <s>","Comma-separated scopes").option("--status <s>").option("-f, --format <format>").action(async(e,t)=>{try{let n={};if(t.name&&(n.name=t.name),t.description!==void 0&&(n.description=t.description),t.redirect&&(n.redirectUris=t.redirect.split(",")),t.scopes&&(n.scopes=t.scopes.split(",")),t.status&&(n.status=t.status.toUpperCase()),!Object.keys(n).length)throw new o$1("No updates specified");let l=await c(Ae,{id:e,input:n});i("App updated"),h(t,l.updateApp);}catch(n){g(n);}}),m$1.command("deactivate").description("Deactivate an app").argument("<id>").action(async e=>{try{await c(Ie,{id:e}),i("App deactivated");}catch(t){g(t);}});let f=s.command("sso").description("SSO (SAML/OIDC) configuration");f.command("get").description("Get SSO config for a tenant").requiredOption("--tenant <id>").option("-f, --format <format>").action(async e=>{try{let t=await c(he,{tenantId:e.tenant});h(e,t.getSSOConfig);}catch(t){g(t);}}),f.command("save").description("Save (upsert) SSO config for a tenant").requiredOption("--tenant <id>").requiredOption("--entity <s>","EntityID / Issuer").requiredOption("--sso-url <url>").option("--slo-url <url>").option("--certificate <pem>","X.509 certificate PEM").option("--enabled","Enable after save",false).option("-f, --format <format>").action(async e=>{try{let t={entityId:e.entity,ssoUrl:e.ssoUrl,sloUrl:e.sloUrl,certificate:e.certificate,enabled:!!e.enabled},n=await c(ye,{tenantId:e.tenant,input:t});i("SSO config saved"),h(e,n.saveSSOConfig);}catch(t){g(t);}}),f.command("delete").description("Delete SSO config for a tenant").requiredOption("--tenant <id>").action(async e=>{try{await c(we,{tenantId:e.tenant}),i("SSO config deleted");}catch(t){g(t);}});let h$1=s.command("users").description("User admin (requires admin permissions)");h$1.command("list").description("List users (admin)").option("--email <s>").option("--username <s>").option("--role <s>").option("--status <s>").option("--search <s>").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t={};e.email&&(t.email=e.email),e.username&&(t.username=e.username),e.role&&(t.role=e.role.toUpperCase()),e.status&&(t.status=e.status.toUpperCase()),e.search&&(t.search=e.search);let n$1=await c(ke,{filter:Object.keys(t).length?t:void 0,pagination:{limit:e.limit,offset:0}});h(e,n$1.users.users,{headers:["ID","Email","Username","Role","Status","Created"],rows:n$1.users.users.map(l=>[p(l.id,12),l.email,l.username??"-",l.role??"-",n(l.status),o(l.createdAt)])});}catch(t){g(t);}}),h$1.command("get").description("Get user by id (admin)").argument("<id>").option("-f, --format <format>").action(async(e,t)=>{try{let n=await c(Ee,{id:e});if(!n.user)throw new o$1(`User ${e} not found`);h(t,n.user);}catch(n){g(n);}}),h$1.command("update").description("Update a user (admin)").argument("<id>").option("--first-name <s>").option("--last-name <s>").option("--username <s>").option("--phone <s>").option("--role <s>").option("--status <s>").option("--email-verified <bool>").option("-f, --format <format>").action(async(e,t)=>{try{let n={};if(t.firstName&&(n.firstName=t.firstName),t.lastName&&(n.lastName=t.lastName),t.username&&(n.username=t.username),t.phone&&(n.phoneNumber=t.phone),t.role&&(n.role=t.role.toUpperCase()),t.status&&(n.status=t.status.toUpperCase()),t.emailVerified!==void 0&&(n.emailVerified=t.emailVerified==="true"),!Object.keys(n).length)throw new o$1("No updates specified");let l=await c(Se,{id:e,input:n});i("User updated"),h(t,l.updateUser);}catch(n){g(n);}});}var Re={id:"auth",version:"1.0.0",displayName:"Authentication",register(s,u){a(u),X(s);let i=s.commands.find(r=>r.name()==="auth");if(!i)throw new q("auth command group missing after registerAuthCommands");Te(i);}},Ye=Re;export{Ye as default};
160
+ `;function Ue(s){let u=s.command("profile").description("Current user profile");u.command("show").description("Show current user").option("-f, --format <format>").action(async e=>{try{let t=await c(Z);h(e,t.currentUser);}catch(t){g(t);}}),u.command("update").description("Update current user profile").option("--first-name <s>").option("--last-name <s>").option("--name <s>").option("--username <s>").option("--phone <s>").option("--timezone <s>").option("--language <s>").option("-f, --format <format>").action(async e=>{try{let t={};if(e.firstName&&(t.firstName=e.firstName),e.lastName&&(t.lastName=e.lastName),e.name&&(t.name=e.name),e.username&&(t.username=e.username),e.phone&&(t.phoneNumber=e.phone),e.timezone&&(t.timezone=e.timezone),e.language&&(t.language=e.language),!Object.keys(t).length)throw new o$1("No updates specified");let n=await c(ee,{input:t});i("Profile updated"),h(e,n.updateCurrentUserProfile);}catch(t){g(t);}});let i$1=s.command("security").description("Account security overview");i$1.command("audit-log").description("Recent auth audit events for the current user").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(L,{pagination:{limit:e.limit,offset:0}});h(e,t.authAuditLogs,{headers:["When","Action","Resource","IP"],rows:t.authAuditLogs.map(n=>[o(n.createdAt),n.action,n.resource??"-",n.ipAddress??"-"])});}catch(t){g(t);}}),i$1.command("sessions").description("Active sessions for the current user").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(te,{pagination:{limit:e.limit,offset:0}});h(e,t.activeSessions,{headers:["ID","Status","IP","LastActivity","Current"],rows:t.activeSessions.map(n$1=>[p(n$1.id,12),n(n$1.status),n$1.ipAddress??"-",o(n$1.lastActivityAt),String(!!n$1.isCurrent)])});}catch(t){g(t);}});let r=s.command("mfa").description("Multi-factor authentication");r.command("list").description("List MFA methods enrolled for the current user").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(ne,{pagination:{limit:e.limit,offset:0}});h(e,t.currentUserMFAMethods,{headers:["Method","Status","Created"],rows:t.currentUserMFAMethods.map(n$1=>[n$1.method,n(n$1.status),o(n$1.createdAt)])});}catch(t){g(t);}}),r.command("enroll").description("Begin MFA enrollment (TOTP/SMS/EMAIL)").requiredOption("--method <m>","TOTP|SMS|EMAIL").option("-f, --format <format>").action(async e=>{try{let t=await c(ie,{method:e.method.toUpperCase()});e.format?h(e,t.setupMFA):(i("MFA enrollment started"),m(t.setupMFA),k("Save your backup codes; verify with `auth mfa verify --code <CODE>`."));}catch(t){g(t);}}),r.command("verify").description("Verify MFA enrollment code").requiredOption("--code <code>").action(async e=>{try{await c(re,{code:e.code}),i("MFA enabled");}catch(t){g(t);}}),r.command("disable").description("Disable MFA for the current user").action(async()=>{try{await c(oe),i("MFA disabled");}catch(e){g(e);}});let p$1=s.command("api-keys").description("API key management");p$1.command("list").description("List your API keys").option("--app <id>","Restrict to keys for an app id").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=e.app?ae:se,n=e.app?{appId:e.app,pagination:{limit:e.limit,offset:0}}:{pagination:{limit:e.limit,offset:0}},l=await c(t,n),A=l.myApiKeys??l.appApiKeys??[];h(e,A,{headers:["ID","Name","Prefix","App","Scopes","LastUsed"],rows:A.map(g=>[p(g.id,12),g.name??"-",g.prefix??"-",g.appName??"-",Array.isArray(g.scopes)?g.scopes.join(","):"-",o(g.lastUsedAt)])});}catch(t){g(t);}}),p$1.command("create").description("Generate a new API key").requiredOption("--name <name>").requiredOption("--app <appId>","Owning app id").option("--scope <scope>","Comma-separated scopes").option("--expires <iso>","ISO expiry").option("-f, --format <format>").action(async e=>{try{let t={name:e.name,appId:e.app,scope:e.scope?e.scope.split(","):void 0,expiresAt:e.expires},n=await c(ce,{input:t});i("API key generated. Store the secret \u2014 it is only shown once."),m(n.generateAPIKey);}catch(t){g(t);}}),p$1.command("revoke").description("Revoke an API key").argument("<keyId>").action(async e=>{try{await c(pe,{keyId:e}),i("API key revoked");}catch(t){g(t);}}),p$1.command("rotate").description("Rotate an API key (returns new secret)").argument("<keyId>").action(async e=>{try{let t=await c(de,{keyId:e});i("API key rotated"),m(t.rotateAPIKey);}catch(t){g(t);}}),s.command("audit-log").description("Auth audit log").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(L,{pagination:{limit:e.limit,offset:0}});h(e,t.authAuditLogs);}catch(t){g(t);}});let I=s.command("delegations").description("Delegation management");I.command("list").description("Delegations granted to the current user").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(me,{pagination:{limit:e.limit,offset:0}});h(e,t.currentUserDelegations);}catch(t){g(t);}}),I.command("grant").description("Grant a delegation to an app").requiredOption("--app <appId>").requiredOption("--user <userId>","User to delegate as").option("--scope <s>","Comma-separated scopes").option("--workspace <ids>","Comma-separated workspace ids").option("--expires <iso>").option("-f, --format <format>").action(async e=>{try{let t={appId:e.app,userId:e.user,scopes:e.scope?e.scope.split(","):void 0,workspaceIds:e.workspace?e.workspace.split(","):void 0,expiresAt:e.expires},n=await c(ue,{input:t});i("Delegation granted"),h(e,n.grantDelegation);}catch(t){g(t);}}),I.command("revoke").description("Revoke a delegation").argument("<id>").option("--reason <text>").action(async(e,t)=>{try{await c(le,{id:e,reason:t.reason}),i("Delegation revoked");}catch(n){g(n);}});let m$1=s.command("apps").description("OAuth/system app management");m$1.command("list").description("Apps owned by the current user").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t=await c(ge,{pagination:{limit:e.limit,offset:0}});h(e,t.currentUserApps,{headers:["ID","ClientID","Name","Type","Status"],rows:t.currentUserApps.map(n$1=>[p(n$1.id,12),p(n$1.clientId,24),n$1.name??"-",n$1.type??"-",n(n$1.status)])});}catch(t){g(t);}}),m$1.command("get").description("Get an app by id").argument("<id>").option("-f, --format <format>").action(async(e,t)=>{try{let n=await c(fe,{id:e});if(!n.app)throw new o$1(`App ${e} not found`);h(t,n.app);}catch(n){g(n);}}),m$1.command("create").description("Create an OAuth app").requiredOption("--name <s>").option("--description <s>").option("--type <t>","OAUTH|SYSTEM","OAUTH").option("--actor-type <t>","USER|APP|SERVICE","APP").option("--redirect <urls>","Comma-separated redirect URIs").option("--scopes <s>","Comma-separated scopes").option("-f, --format <format>").action(async e=>{try{let t={name:e.name,description:e.description,type:(e.type??"OAUTH").toUpperCase(),actorType:(e.actorType??"APP").toUpperCase(),redirectUris:e.redirect?e.redirect.split(","):void 0,scopes:e.scopes?e.scopes.split(","):void 0},n=await c(Ae,{input:t});i("App created. Client secret only shown once."),m(n.createApp);}catch(t){g(t);}}),m$1.command("update").description("Update an app").argument("<id>").option("--name <s>").option("--description <s>").option("--redirect <urls>","Comma-separated redirect URIs").option("--scopes <s>","Comma-separated scopes").option("--status <s>").option("-f, --format <format>").action(async(e,t)=>{try{let n={};if(t.name&&(n.name=t.name),t.description!==void 0&&(n.description=t.description),t.redirect&&(n.redirectUris=t.redirect.split(",")),t.scopes&&(n.scopes=t.scopes.split(",")),t.status&&(n.status=t.status.toUpperCase()),!Object.keys(n).length)throw new o$1("No updates specified");let l=await c(Ie,{id:e,input:n});i("App updated"),h(t,l.updateApp);}catch(n){g(n);}}),m$1.command("deactivate").description("Deactivate an app").argument("<id>").action(async e=>{try{await c(he,{id:e}),i("App deactivated");}catch(t){g(t);}});let f=s.command("sso").description("SSO (SAML/OIDC) configuration");f.command("get").description("Get SSO config for a tenant").requiredOption("--tenant <id>").option("-f, --format <format>").action(async e=>{try{let t=await c(ye,{tenantId:e.tenant});h(e,t.getSSOConfig);}catch(t){g(t);}}),f.command("save").description("Save (upsert) SSO config for a tenant").requiredOption("--tenant <id>").requiredOption("--entity <s>","EntityID / Issuer").requiredOption("--sso-url <url>").option("--slo-url <url>").option("--certificate <pem>","X.509 certificate PEM").option("--enabled","Enable after save",false).option("-f, --format <format>").action(async e=>{try{let t={entityId:e.entity,ssoUrl:e.ssoUrl,sloUrl:e.sloUrl,certificate:e.certificate,enabled:!!e.enabled},n=await c(we,{tenantId:e.tenant,input:t});i("SSO config saved"),h(e,n.saveSSOConfig);}catch(t){g(t);}}),f.command("delete").description("Delete SSO config for a tenant").requiredOption("--tenant <id>").action(async e=>{try{await c(ke,{tenantId:e.tenant}),i("SSO config deleted");}catch(t){g(t);}});let h$1=s.command("users").description("User admin (requires admin permissions)");h$1.command("list").description("List users (admin)").option("--email <s>").option("--username <s>").option("--role <s>").option("--status <s>").option("--search <s>").option("--limit <n>","Page size",e=>parseInt(e,10),50).option("-f, --format <format>").action(async e=>{try{let t={};e.email&&(t.email=e.email),e.username&&(t.username=e.username),e.role&&(t.role=e.role.toUpperCase()),e.status&&(t.status=e.status.toUpperCase()),e.search&&(t.search=e.search);let n$1=await c(Ee,{filter:Object.keys(t).length?t:void 0,pagination:{limit:e.limit,offset:0}});h(e,n$1.users.users,{headers:["ID","Email","Username","Role","Status","Created"],rows:n$1.users.users.map(l=>[p(l.id,12),l.email,l.username??"-",l.role??"-",n(l.status),o(l.createdAt)])});}catch(t){g(t);}}),h$1.command("get").description("Get user by id (admin)").argument("<id>").option("-f, --format <format>").action(async(e,t)=>{try{let n=await c(Se,{id:e});if(!n.user)throw new o$1(`User ${e} not found`);h(t,n.user);}catch(n){g(n);}}),h$1.command("update").description("Update a user (admin)").argument("<id>").option("--first-name <s>").option("--last-name <s>").option("--username <s>").option("--phone <s>").option("--role <s>").option("--status <s>").option("--email-verified <bool>").option("-f, --format <format>").action(async(e,t)=>{try{let n={};if(t.firstName&&(n.firstName=t.firstName),t.lastName&&(n.lastName=t.lastName),t.username&&(n.username=t.username),t.phone&&(n.phoneNumber=t.phone),t.role&&(n.role=t.role.toUpperCase()),t.status&&(n.status=t.status.toUpperCase()),t.emailVerified!==void 0&&(n.emailVerified=t.emailVerified==="true"),!Object.keys(n).length)throw new o$1("No updates specified");let l=await c(Te,{id:e,input:n});i("User updated"),h(t,l.updateUser);}catch(n){g(n);}});}var _e={id:"auth",version:"1.0.0",displayName:"Authentication",register(s,u){a(u),Q(s);let i=s.commands.find(r=>r.name()==="auth");if(!i)throw new q("auth command group missing after registerAuthCommands");Ue(i);}},He=_e;export{He as default};
@@ -1,10 +1,10 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var p=class extends Error{exitCode;hint;constructor(i,d){super(i),this.name="CliUserError",this.exitCode=d?.exitCode??1,this.hint=d?.hint;}};var l=class extends Error{cause;constructor(i,d){super(i),this.name="CliInternalError",this.cause=d;}};var b=null;function P(r){b=r;}function g(){if(!b)throw new l("vibecontrols module helpers used before setHelpersContext was called");return b}async function s(r,i){return g().gql.global.request(r,i)}function a(r){let i=r instanceof Error?r.message:String(r);throw new p(i)}function c(r,i,d){g().output.formatAndOutput(r,i,d);}function f(r){g().output.printSuccess(r);}function D(r){g().output.printInfo(r);}function I(r){return g().output.formatStatus(r)}function x(r){return g().output.formatDate(r)}function m(r,i){return g().output.truncate(r,i)}var k=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var d=class extends Error{exitCode;hint;constructor(i,p){super(i),this.name="CliUserError",this.exitCode=p?.exitCode??1,this.hint=p?.hint;}};var l=class extends Error{cause;constructor(i,p){super(i),this.name="CliInternalError",this.cause=p;}};var b=null;function P(o){b=o;}function g(){if(!b)throw new l("vibecontrols module helpers used before setHelpersContext was called");return b}async function s(o,i){return g().gql.global.request(o,i)}function a(o){let i=o instanceof Error?o.message:String(o);throw new d(i)}function c(o,i,p){g().output.formatAndOutput(o,i,p);}function f(o){g().output.printSuccess(o);}function O(o){g().output.printInfo(o);}function I(o){return g().output.formatStatus(o)}function x(o){return g().output.formatDate(o)}function m(o,i){return g().output.truncate(o,i)}var k=`
2
2
  query GetDefaultBillingAccount {
3
3
  getDefaultBillingAccount {
4
4
  id creditAmount currency
5
5
  }
6
6
  }
7
- `,O=`
7
+ `,D=`
8
8
  query GetActiveSubscriptions($billingAccountId: ID!) {
9
9
  getActiveSubscriptions(billingAccountId: $billingAccountId) {
10
10
  id status seatCount nextBillingDate
@@ -102,4 +102,4 @@
102
102
  id name limits currentUsageSum reusable
103
103
  }
104
104
  }
105
- `;async function w(){let r=await s(k);if(!r.getDefaultBillingAccount?.id)throw new p("No default billing account on file. Pass --account <id> explicitly.");return r.getDefaultBillingAccount.id}function z(r){let i=r.command("billing").description("Billing: subscriptions, invoices, credits"),d=i.command("subscriptions").description("Subscriptions");d.command("list").description("List active subscriptions").option("--account <id>","Billing account id (defaults to current)").option("-f, --format <format>").action(async t=>{try{let e=t.account??await w(),n=await s(O,{billingAccountId:e});c(t,n.getActiveSubscriptions,{headers:["ID","Status","Plan","Seats","NextBilling"],rows:n.getActiveSubscriptions.map(o=>[m(o.id,12),I(o.status),o.plan?.name??"-",String(o.seatCount??"-"),x(o.nextBillingDate)])});}catch(e){a(e);}}),d.command("get").description("Get a subscription").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(R,{id:t});if(!n.getSubscription)throw new p(`Subscription ${t} not found`);c(e,n.getSubscription);}catch(n){a(n);}}),d.command("upgrade").description("Change subscription seat count").argument("<id>").requiredOption("--seats <n>","Target seat count",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let n={subscriptionId:t,seatCount:e.seats},o=await s(_,{input:n});f(`Seat count updated to ${o.updateSubscriptionSeats.seatCount}`),c(e,o.updateSubscriptionSeats);}catch(n){a(n);}}),d.command("cancel").description("Cancel a subscription").argument("<id>").option("--reason <s>").action(async(t,e)=>{try{let n={subscriptionId:t,reason:e.reason},o=await s($,{input:n});f("Subscription canceled"),c({},o.cancelSubscription);}catch(n){a(n);}});let T=i.command("plans").description("Plans");T.command("list").description("List available plans").option("--product <id>").option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product);let n=await s(L,{filter:Object.keys(e).length?e:void 0});c(t,n.getAllPlans,{headers:["ID","Name","Price","Currency","Duration"],rows:n.getAllPlans.map(o=>[m(o.id,12),o.name,String(o.price??"-"),o.currency??"-",o.duration??"-"])});}catch(e){a(e);}}),T.command("get").description("Get a plan").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(N,{id:t});if(!n.getPlan)throw new p(`Plan ${t} not found`);c(e,n.getPlan);}catch(n){a(n);}}),i.command("addons").description("Addons").command("list").description("List addons").option("--product <id>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product);let n=await s(q,{filter:Object.keys(e).length?e:void 0,limit:t.limit});c(t,n.getAllAddOns);}catch(e){a(e);}});let y=i.command("invoices").description("Invoices");y.command("list").description("List invoices").option("--account <id>").option("--page <n>","",t=>parseInt(t,10),1).option("--page-size <n>","",t=>parseInt(t,10),20).option("-f, --format <format>").action(async t=>{try{let e=t.account??await w(),n=await s(G,{billingAccountId:e,page:t.page,pageSize:t.pageSize});c(t,n.getPaginatedInvoices.invoices,{headers:["ID","#","Status","Total","Currency","Paid"],rows:n.getPaginatedInvoices.invoices.map(o=>[m(o.id,12),o.invoiceNumber??"-",I(o.status),String(o.total??"-"),o.currency??"-",x(o.paidAt)])});}catch(e){a(e);}}),y.command("get").description("Get an invoice").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(A,{id:t});if(!n.getInvoice)throw new p(`Invoice ${t} not found`);c(e,n.getInvoice);}catch(n){a(n);}}),y.command("download").description("Print invoice PDF URL (browser-only download)").argument("<id>").action(async t=>{try{let e=await s(A,{id:t});if(!e.getInvoice?.pdfUrl)throw new p(`Invoice ${t} has no pdfUrl`);D("PDF URL:"),console.log(e.getInvoice.pdfUrl);}catch(e){a(e);}});let h=i.command("payment-methods").description("Payment methods");h.command("list").description("List payment methods").option("--account <id>").option("-f, --format <format>").action(async t=>{try{let e=t.account??await w(),n=await s(M,{billingAccountId:e});c(t,n.getPaymentMethods,{headers:["ID","Type","Brand","Last4","Default","Verified"],rows:n.getPaymentMethods.map(o=>[m(o.id,12),o.type,o.brand??"-",o.last4??"-",String(!!o.isDefault),String(!!o.isVerified)])});}catch(e){a(e);}}),h.command("add").description("Add a payment method (card metadata only \u2014 providers handle secrets)").requiredOption("--type <t>","CREDIT_CARD|BANK|UPI","CREDIT_CARD").requiredOption("--last4 <s>").option("--brand <s>","Visa|MasterCard|...").option("--expiry-month <n>","",t=>parseInt(t,10)).option("--expiry-year <n>","",t=>parseInt(t,10)).option("--account <id>").option("--default","Make it the default").option("-f, --format <format>").action(async t=>{try{let n={billingAccountId:t.account??await w(),type:t.type.toUpperCase(),last4:t.last4,brand:t.brand,expiryMonth:t.expiryMonth,expiryYear:t.expiryYear,isDefault:!!t.default},o=await s(U,{input:n});f("Payment method added"),c(t,o.addPaymentMethod);}catch(e){a(e);}}),h.command("remove").description("Remove a payment method").argument("<id>").action(async t=>{try{await s(F,{id:t}),f("Payment method removed");}catch(e){a(e);}});let C=i.command("credits").description("Credits & withdrawal");C.command("balance").description("Show current credit balance").option("-f, --format <format>").action(async t=>{try{let e=await s(k);c(t,e.getDefaultBillingAccount);}catch(e){a(e);}}),C.command("grant").description("Grant credits to a billing account (admin)").requiredOption("--account <id>").requiredOption("--amount <n>","Amount",t=>parseFloat(t)).option("--reason <s>").action(async t=>{try{let e={billingAccountId:t.account,amount:t.amount,reason:t.reason??"cli-grant"};await s(B,{input:e}),f("Credits granted");}catch(e){a(e);}}),C.command("withdraw").description("Request a credit withdrawal").requiredOption("--account <id>").requiredOption("--amount <n>","Amount",t=>parseFloat(t)).requiredOption("--payout <id>","Payout account id").action(async t=>{try{let e={billingAccountId:t.account,creditAmount:t.amount,payoutAccountId:t.payout};await s(W,{input:e}),f("Withdrawal requested");}catch(e){a(e);}}),i.command("refunds").description("Pending refunds").option("--page <n>","",t=>parseInt(t,10),0).option("--page-size <n>","",t=>parseInt(t,10),20).option("-f, --format <format>").action(async t=>{try{let e=await s(j,{page:t.page,pageSize:t.pageSize});c(t,e.getPendingRefunds.records);}catch(e){a(e);}}),i.command("quota").description("Quotas for a subscription").argument("<subscriptionId>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(V,{subscriptionId:t});c(e,n.getAllQuotasOfSub);}catch(n){a(n);}});}var it={id:"billing",version:"1.0.0",displayName:"Billing",dependsOn:["auth"],register(r,i){P(i),z(r);}},we=it;module.exports=we;
105
+ `;async function w(){let o=await s(k);if(!o.getDefaultBillingAccount?.id)throw new d("No default billing account on file. Pass --account <id> explicitly.");return o.getDefaultBillingAccount.id}function z(o){let i=o.command("billing").description("Billing: subscriptions, invoices, credits"),p=i.command("subscriptions").description("Subscriptions");p.command("list").description("List active subscriptions").option("--account <id>","Billing account id (defaults to current)").option("-f, --format <format>").action(async t=>{try{let e=t.account??await w(),n=await s(D,{billingAccountId:e});c(t,n.getActiveSubscriptions,{headers:["ID","Status","Plan","Seats","NextBilling"],rows:n.getActiveSubscriptions.map(r=>[m(r.id,12),I(r.status),r.plan?.name??"-",String(r.seatCount??"-"),x(r.nextBillingDate)])});}catch(e){a(e);}}),p.command("get").description("Get a subscription").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(R,{id:t});if(!n.getSubscription)throw new d(`Subscription ${t} not found`);c(e,n.getSubscription);}catch(n){a(n);}}),p.command("upgrade").description("Change subscription seat count").argument("<id>").requiredOption("--seats <n>","Target seat count",t=>parseInt(t,10)).option("-f, --format <format>").action(async(t,e)=>{try{let n={subscriptionId:t,seatCount:e.seats},r=await s(_,{input:n});f(`Seat count updated to ${r.updateSubscriptionSeats.seatCount}`),c(e,r.updateSubscriptionSeats);}catch(n){a(n);}}),p.command("cancel").description("Cancel a subscription").argument("<id>").option("--reason <s>").action(async(t,e)=>{try{let n={subscriptionId:t,reason:e.reason},r=await s($,{input:n});f("Subscription canceled"),c({},r.cancelSubscription);}catch(n){a(n);}});let T=i.command("plans").description("Plans");T.command("list").description("List available plans").option("--product <id>").option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product);let n=await s(L,{filter:Object.keys(e).length?e:void 0});c(t,n.getAllPlans,{headers:["ID","Name","Price","Currency","Duration"],rows:n.getAllPlans.map(r=>[m(r.id,12),r.name,String(r.price??"-"),r.currency??"-",r.duration??"-"])});}catch(e){a(e);}}),T.command("get").description("Get a plan").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(N,{id:t});if(!n.getPlan)throw new d(`Plan ${t} not found`);c(e,n.getPlan);}catch(n){a(n);}}),i.command("addons").description("Addons").command("list").description("List addons").option("--product <id>").option("--limit <n>","Page size",t=>parseInt(t,10),50).option("-f, --format <format>").action(async t=>{try{let e={};t.product&&(e.productId=t.product);let n=await s(q,{filter:Object.keys(e).length?e:void 0,limit:t.limit});c(t,n.getAllAddOns);}catch(e){a(e);}});let h=i.command("invoices").description("Invoices");h.command("list").description("List invoices").option("--account <id>").option("--page <n>","",t=>parseInt(t,10),1).option("--page-size <n>","",t=>parseInt(t,10),20).option("-f, --format <format>").action(async t=>{try{let e=t.account??await w(),n=await s(G,{billingAccountId:e,page:t.page,pageSize:t.pageSize});c(t,n.getPaginatedInvoices.invoices,{headers:["ID","#","Status","Total","Currency","Paid"],rows:n.getPaginatedInvoices.invoices.map(r=>[m(r.id,12),r.invoiceNumber??"-",I(r.status),String(r.total??"-"),r.currency??"-",x(r.paidAt)])});}catch(e){a(e);}}),h.command("get").description("Get an invoice").argument("<id>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(A,{id:t});if(!n.getInvoice)throw new d(`Invoice ${t} not found`);c(e,n.getInvoice);}catch(n){a(n);}}),h.command("download").description("Print invoice PDF URL (browser-only download)").argument("<id>").action(async t=>{try{let e=await s(A,{id:t});if(!e.getInvoice?.pdfUrl)throw new d(`Invoice ${t} has no pdfUrl`);O("PDF URL:"),console.log(e.getInvoice.pdfUrl);}catch(e){a(e);}});let y=i.command("payment-methods").description("Payment methods");y.command("list").description("List payment methods").option("--account <id>").option("-f, --format <format>").action(async t=>{try{let e=t.account??await w(),n=await s(M,{billingAccountId:e});c(t,n.getPaymentMethods,{headers:["ID","Type","Brand","Last4","Default","Verified"],rows:n.getPaymentMethods.map(r=>[m(r.id,12),r.type,r.brand??"-",r.last4??"-",String(!!r.isDefault),String(!!r.isVerified)])});}catch(e){a(e);}}),y.command("add").description("Add a payment method (card metadata only \u2014 providers handle secrets)").requiredOption("--type <t>","CREDIT_CARD|BANK|UPI","CREDIT_CARD").requiredOption("--last4 <s>").option("--brand <s>","Visa|MasterCard|...").option("--expiry-month <n>","",t=>parseInt(t,10)).option("--expiry-year <n>","",t=>parseInt(t,10)).option("--account <id>").option("--default","Make it the default").option("-f, --format <format>").action(async t=>{try{let n={billingAccountId:t.account??await w(),type:t.type.toUpperCase(),last4:t.last4,brand:t.brand,expiryMonth:t.expiryMonth,expiryYear:t.expiryYear,isDefault:!!t.default},r=await s(U,{input:n});f("Payment method added"),c(t,r.addPaymentMethod);}catch(e){a(e);}}),y.command("remove").description("Remove a payment method").argument("<id>").action(async t=>{try{await s(F,{id:t}),f("Payment method removed");}catch(e){a(e);}});let C=i.command("credits").description("Credits & withdrawal");C.command("balance").description("Show current credit balance").option("-f, --format <format>").action(async t=>{try{let e=await s(k);c(t,e.getDefaultBillingAccount);}catch(e){a(e);}}),C.command("grant").description("Grant credits to a billing account (admin)").requiredOption("--account <id>").requiredOption("--amount <n>","Amount",t=>parseFloat(t)).option("--reason <s>").action(async t=>{try{let e={billingAccountId:t.account,amount:t.amount,reason:t.reason??"cli-grant"};await s(B,{input:e}),f("Credits granted");}catch(e){a(e);}}),C.command("withdraw").description("Request a credit withdrawal").requiredOption("--account <id>").requiredOption("--amount <n>","Amount",t=>parseFloat(t)).requiredOption("--payout <id>","Payout account id").action(async t=>{try{let e={billingAccountId:t.account,creditAmount:t.amount,payoutAccountId:t.payout};await s(W,{input:e}),f("Withdrawal requested");}catch(e){a(e);}}),i.command("refunds").description("Pending refunds").option("--page <n>","",t=>parseInt(t,10),0).option("--page-size <n>","",t=>parseInt(t,10),20).option("-f, --format <format>").action(async t=>{try{let e=await s(j,{page:t.page,pageSize:t.pageSize});c(t,e.getPendingRefunds.records);}catch(e){a(e);}}),i.command("quota").description("Quotas for a subscription").argument("<subscriptionId>").option("-f, --format <format>").action(async(t,e)=>{try{let n=await s(V,{subscriptionId:t});c(e,n.getAllQuotasOfSub);}catch(n){a(n);}});}var it={id:"billing",version:"1.0.0",displayName:"Billing",dependsOn:["auth"],register(o,i){P(i),z(o);}},we=it;module.exports=we;
@@ -1,4 +1,4 @@
1
- import { C as CliModule } from '../../module-DxCuik6L.cjs';
1
+ import { C as CliModule } from '../../module-DOIiVaXQ.cjs';
2
2
  import 'commander';
3
3
  import 'graphql-request';
4
4
 
@@ -1,4 +1,4 @@
1
- import { C as CliModule } from '../../module-DxCuik6L.js';
1
+ import { C as CliModule } from '../../module-DOIiVaXQ.js';
2
2
  import 'commander';
3
3
  import 'graphql-request';
4
4
 
@@ -1,4 +1,4 @@
1
- import {a,c,h as h$1,p,n,o,g,i,k}from'../../chunk-WXDQ3S5J.js';import {o as o$1}from'../../chunk-TCBALVP4.js';var A=`
1
+ import {a,c,h as h$1,p,n,o,g,i,k}from'../../chunk-NLEVVDXR.js';import {o as o$1}from'../../chunk-IZXPWPKX.js';var A=`
2
2
  query GetDefaultBillingAccount {
3
3
  getDefaultBillingAccount {
4
4
  id creditAmount currency
@@ -1,11 +1,11 @@
1
- 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(n,t){super(n),this.name="CliUserError",this.exitCode=t?.exitCode??1,this.hint=t?.hint;}},C=class extends u{constructor(n,t){super(n,{exitCode:2,hint:t?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},I=class extends Error{cause;constructor(n,t){super(n),this.name="CliInternalError",this.cause=t;}};var A=null;function O(a){A=a;}function b(){if(!A)throw new I("vibecontrols module helpers used before setHelpersContext was called");return A}function Ht(){let a=b();if(!a.auth.isAuthenticated())throw new C(`Authentication required. Run \`${a.productName} auth login\`.`)}async function s(a,n){return Ht(),b().gql.workspace.request(a,n)}async function w(a,n){return b().gql.workspaceAuthOnly.request(a,n)}function r(a){let n=a instanceof Error?a.message:String(a);throw new u(n)}function i(a,n,t){b().output.formatAndOutput(a,n,t);}function c(a){b().output.printSuccess(a);}function p(a,n){return b().output.truncate(a,n)}var k=`
1
+ 'use strict';require('graphql-request'),require('cross-fetch'),require('commander');var u=class extends Error{exitCode;hint;constructor(n,t){super(n),this.name="CliUserError",this.exitCode=t?.exitCode??1,this.hint=t?.hint;}},C=class extends u{constructor(n,t){super(n,{exitCode:2,hint:t?.hint??"Run `<product> auth login` to authenticate."}),this.name="CliAuthError";}},I=class extends Error{cause;constructor(n,t){super(n),this.name="CliInternalError",this.cause=t;}};var A=null;function O(a){A=a;}function b(){if(!A)throw new I("vibecontrols module helpers used before setHelpersContext was called");return A}function Ht(){let a=b();if(!a.auth.isAuthenticated())throw new C("Authentication required.",{hint:`Run \`${a.productName} auth login\` to authenticate.`})}async function s(a,n){return Ht(),b().gql.workspace.request(a,n)}async function w(a,n){return b().gql.workspaceAuthOnly.request(a,n)}function r(a){let n=a instanceof Error?a.message:String(a);throw new u(n)}function i(a,n,t){b().output.formatAndOutput(a,n,t);}function c(a){b().output.printSuccess(a);}function p(a,n){return b().output.truncate(a,n)}var k=`
2
2
  query BrainyrichGetHousehold($id: ID!) {
3
3
  braHousehold(id: $id) {
4
4
  id name advisorId aum currency riskProfile status notes
5
5
  primaryContactName primaryContactEmail tags createdAt updatedAt workspaceId
6
6
  }
7
7
  }
8
- `,D=`
8
+ `,P=`
9
9
  query BrainyrichListHouseholds($status: BraHouseholdStatus, $pagination: PaginationInput) {
10
10
  braListHouseholds(status: $status, pagination: $pagination) {
11
11
  items {
@@ -15,7 +15,7 @@
15
15
  pageInfo { cursor hasMore }
16
16
  }
17
17
  }
18
- `,P=`
18
+ `,D=`
19
19
  mutation BrainyrichCreateHousehold($input: BraCreateHouseholdInput!) {
20
20
  braCreateHousehold(input: $input) {
21
21
  id name advisorId aum currency riskProfile status notes
@@ -337,4 +337,4 @@
337
337
  query BrainyrichHealth {
338
338
  braHealth
339
339
  }
340
- `;function h(a,n){try{return JSON.parse(n)}catch{throw new u(`--${a} must be valid JSON`)}}function m(a){let n=Number.parseInt(a,10);if(Number.isNaN(n))throw new u(`Expected an integer but got "${a}"`);return n}function d(a){let n=Number.parseFloat(a);if(Number.isNaN(n))throw new u(`Expected a number but got "${a}"`);return n}function y(a){return a.split(",").map(n=>n.trim()).filter(n=>n.length>0)}function ht(a){let n=a.command("households").description("Brainyrich advisory households");n.command("list").description("List households").option("--status <s>","PROSPECT|ONBOARDING|ACTIVE|INACTIVE").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(D,{status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListHouseholds.items,{headers:["ID","Name","Status","Risk","AUM","Currency"],rows:e.braListHouseholds.items.map(o=>[p(o.id,12),o.name,o.status??"-",o.riskProfile??"-",o.aum!=null?String(o.aum):"-",o.currency??"-"])});}catch(e){r(e);}}),n.command("get").description("Get a household by id").argument("<id>","Household ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(k,{id:t});if(!o.braHousehold)throw new u(`Household ${t} not found`);i(e,o.braHousehold);}catch(o){r(o);}}),n.command("create").description("Create a household").requiredOption("--name <name>","Household name").option("--advisor <id>","Advisor user ID").option("--currency <c>","Currency code").option("--risk-profile <r>","CONSERVATIVE|MODERATE|BALANCED|GROWTH|AGGRESSIVE").option("--status <s>","PROSPECT|ONBOARDING|ACTIVE|INACTIVE").option("--primary-contact-name <s>","Primary contact name").option("--primary-contact-email <s>","Primary contact email").option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.advisor&&(e.advisorId=t.advisor),t.currency&&(e.currency=t.currency),t.riskProfile&&(e.riskProfile=t.riskProfile.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.primaryContactName&&(e.primaryContactName=t.primaryContactName),t.primaryContactEmail&&(e.primaryContactEmail=t.primaryContactEmail),t.notes&&(e.notes=t.notes),t.tags&&(e.tags=y(t.tags));let o=await s(P,{input:e});c(`Household created: ${o.braCreateHousehold.name}`),i(t,o.braCreateHousehold);}catch(e){r(e);}}),n.command("update").description("Update a household").argument("<id>","Household ID").option("--name <name>","Household name").option("--aum <n>","Assets under management",d).option("--currency <c>","Currency code").option("--risk-profile <r>","CONSERVATIVE|MODERATE|BALANCED|GROWTH|AGGRESSIVE").option("--status <s>","PROSPECT|ONBOARDING|ACTIVE|INACTIVE").option("--primary-contact-name <s>","Primary contact name").option("--primary-contact-email <s>","Primary contact email").option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o={};if(e.name&&(o.name=e.name),e.aum!==void 0&&(o.aum=e.aum),e.currency&&(o.currency=e.currency),e.riskProfile&&(o.riskProfile=e.riskProfile.toUpperCase()),e.status&&(o.status=e.status.toUpperCase()),e.primaryContactName!==void 0&&(o.primaryContactName=e.primaryContactName),e.primaryContactEmail!==void 0&&(o.primaryContactEmail=e.primaryContactEmail),e.notes!==void 0&&(o.notes=e.notes),e.tags&&(o.tags=y(e.tags)),!Object.keys(o).length)throw new u("No updates specified");let f=await s(R,{id:t,input:o});c("Household updated"),i(e,f.braUpdateHousehold);}catch(o){r(o);}}),n.command("archive").description("Archive a household").argument("<id>","Household ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(x,{id:t});c(`Household archived: ${o.braArchiveHousehold}`),i(e,{archived:o.braArchiveHousehold});}catch(o){r(o);}});}function yt(a){let n=a.command("accounts").description("Brainyrich financial accounts");n.command("list").description("List accounts").option("--household <id>","Filter by household ID").option("--status <s>","ACTIVE|ARCHIVED|CLOSED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(L,{householdId:t.household,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListAccounts.items,{headers:["ID","Name","Type","Status","Cash","Currency"],rows:e.braListAccounts.items.map(o=>[p(o.id,12),o.name,o.type??"-",o.status??"-",o.cashBalance!=null?String(o.cashBalance):"-",o.currency??"-"])});}catch(e){r(e);}}),n.command("get").description("Get an account by id").argument("<id>","Account ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(S,{id:t});if(!o.braAccount)throw new u(`Account ${t} not found`);i(e,o.braAccount);}catch(o){r(o);}}),n.command("create").description("Create an account").requiredOption("--name <name>","Account name").option("--owner <id>","Owner user ID").option("--household <id>","Household ID").option("--type <t>","BANK|BROKERAGE|RETIREMENT|CRYPTO|REAL_ESTATE|LIABILITY|CASH|ALTERNATIVE").option("--status <s>","ACTIVE|ARCHIVED|CLOSED").option("--currency <c>","Currency code").option("--cash-balance <n>","Cash balance",d).option("--institution <s>","Institution name").option("--account-mask <s>","Account mask").option("--manual","Mark as manually-tracked").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.owner&&(e.ownerId=t.owner),t.household&&(e.householdId=t.household),t.type&&(e.type=t.type.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.currency&&(e.currency=t.currency),t.cashBalance!==void 0&&(e.cashBalance=t.cashBalance),t.institution&&(e.institution=t.institution),t.accountMask&&(e.accountMask=t.accountMask),t.manual&&(e.isManual=!0);let o=await s(v,{input:e});c(`Account created: ${o.braCreateAccount.name}`),i(t,o.braCreateAccount);}catch(e){r(e);}}),n.command("update").description("Update an account").argument("<id>","Account ID").option("--name <name>","Account name").option("--household <id>","Household ID").option("--type <t>","BANK|BROKERAGE|RETIREMENT|CRYPTO|REAL_ESTATE|LIABILITY|CASH|ALTERNATIVE").option("--status <s>","ACTIVE|ARCHIVED|CLOSED").option("--currency <c>","Currency code").option("--cash-balance <n>","Cash balance",d).option("--institution <s>","Institution name").option("--account-mask <s>","Account mask").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o={};if(e.name&&(o.name=e.name),e.household&&(o.householdId=e.household),e.type&&(o.type=e.type.toUpperCase()),e.status&&(o.status=e.status.toUpperCase()),e.currency&&(o.currency=e.currency),e.cashBalance!==void 0&&(o.cashBalance=e.cashBalance),e.institution!==void 0&&(o.institution=e.institution),e.accountMask!==void 0&&(o.accountMask=e.accountMask),!Object.keys(o).length)throw new u("No updates specified");let f=await s($,{id:t,input:o});c("Account updated"),i(e,f.braUpdateAccount);}catch(o){r(o);}}),n.command("archive").description("Archive an account").argument("<id>","Account ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(N,{id:t});c(`Account archived: ${o.braArchiveAccount}`),i(e,{archived:o.braArchiveAccount});}catch(o){r(o);}});}function It(a){let n=a.command("holdings").description("Brainyrich account holdings");n.command("list").description("List holdings for an account or portfolio").option("--account <id>","Filter by account ID").option("--portfolio <id>","Filter by portfolio ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(G,{accountId:t.account,portfolioId:t.portfolio});i(t,e.braListHoldings,{headers:["ID","Symbol","Class","Qty","Last","Market Value"],rows:e.braListHoldings.map(o=>[p(o.id,12),o.symbol,o.assetClass??"-",o.quantity!=null?String(o.quantity):"-",o.lastPrice!=null?String(o.lastPrice):"-",o.marketValue!=null?String(o.marketValue):"-"])});}catch(e){r(e);}}),n.command("create").description("Create a holding").requiredOption("--account <id>","Account ID").requiredOption("--symbol <s>","Ticker symbol").option("--portfolio <id>","Portfolio ID").option("--name <s>","Display name").option("--asset-class <c>","EQUITY|FIXED_INCOME|CASH|REAL_ESTATE|COMMODITY|CRYPTO|ALTERNATIVE").option("--quantity <n>","Quantity",d).option("--cost-basis <n>","Cost basis",d).option("--last-price <n>","Last price",d).option("--currency <c>","Currency code").option("--as-of <iso>","As-of date (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let e={accountId:t.account,symbol:t.symbol};t.portfolio&&(e.portfolioId=t.portfolio),t.name&&(e.name=t.name),t.assetClass&&(e.assetClass=t.assetClass.toUpperCase()),t.quantity!==void 0&&(e.quantity=t.quantity),t.costBasis!==void 0&&(e.costBasis=t.costBasis),t.lastPrice!==void 0&&(e.lastPrice=t.lastPrice),t.currency&&(e.currency=t.currency),t.asOf&&(e.asOf=t.asOf);let o=await s(H,{input:e});c(`Holding created: ${o.braCreateHolding.symbol}`),i(t,o.braCreateHolding);}catch(e){r(e);}}),n.command("update").description("Update a holding").argument("<id>","Holding ID").option("--name <s>","Display name").option("--asset-class <c>","EQUITY|FIXED_INCOME|CASH|REAL_ESTATE|COMMODITY|CRYPTO|ALTERNATIVE").option("--quantity <n>","Quantity",d).option("--cost-basis <n>","Cost basis",d).option("--last-price <n>","Last price",d).option("--portfolio <id>","Portfolio ID").option("--as-of <iso>","As-of date (ISO)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o={};if(e.name!==void 0&&(o.name=e.name),e.assetClass&&(o.assetClass=e.assetClass.toUpperCase()),e.quantity!==void 0&&(o.quantity=e.quantity),e.costBasis!==void 0&&(o.costBasis=e.costBasis),e.lastPrice!==void 0&&(o.lastPrice=e.lastPrice),e.portfolio&&(o.portfolioId=e.portfolio),e.asOf&&(o.asOf=e.asOf),!Object.keys(o).length)throw new u("No updates specified");let f=await s(_,{id:t,input:o});c("Holding updated"),i(e,f.braUpdateHolding);}catch(o){r(o);}}),n.command("delete").description("Delete a holding").argument("<id>","Holding ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(U,{id:t});c(`Holding deleted: ${o.braDeleteHolding}`),i(e,{deleted:o.braDeleteHolding});}catch(o){r(o);}});}function Ct(a){let n=a.command("portfolios").description("Brainyrich portfolios");n.command("list").description("List portfolios").option("--household <id>","Filter by household ID").option("--status <s>","DRAFT|ACTIVE|ARCHIVED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(q,{householdId:t.household,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListPortfolios.items,{headers:["ID","Name","Status","Currency","Drift %"],rows:e.braListPortfolios.items.map(o=>[p(o.id,12),o.name,o.status??"-",o.baseCurrency??"-",o.driftThresholdPct!=null?String(o.driftThresholdPct):"-"])});}catch(e){r(e);}}),n.command("get").description("Get a portfolio by id").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(B,{id:t});if(!o.braPortfolio)throw new u(`Portfolio ${t} not found`);i(e,o.braPortfolio);}catch(o){r(o);}}),n.command("create").description("Create a portfolio").requiredOption("--name <name>","Portfolio name").option("--owner <id>","Owner user ID").option("--household <id>","Household ID").option("--description <s>","Description").option("--base-currency <c>","Base currency code").option("--drift-threshold-pct <n>","Drift threshold %",d).option("--model-portfolio <id>","Model portfolio ID").option("--target-allocation <json>","Target allocation JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.owner&&(e.ownerId=t.owner),t.household&&(e.householdId=t.household),t.description&&(e.description=t.description),t.baseCurrency&&(e.baseCurrency=t.baseCurrency),t.driftThresholdPct!==void 0&&(e.driftThresholdPct=t.driftThresholdPct),t.modelPortfolio&&(e.modelPortfolioId=t.modelPortfolio),t.targetAllocation&&(e.targetAllocation=h("target-allocation",t.targetAllocation)),t.tags&&(e.tags=y(t.tags));let o=await s(M,{input:e});c(`Portfolio created: ${o.braCreatePortfolio.name}`),i(t,o.braCreatePortfolio);}catch(e){r(e);}}),n.command("update").description("Update a portfolio").argument("<id>","Portfolio ID").option("--name <name>","Portfolio name").option("--description <s>","Description").option("--status <s>","DRAFT|ACTIVE|ARCHIVED").option("--base-currency <c>","Base currency code").option("--drift-threshold-pct <n>","Drift threshold %",d).option("--model-portfolio <id>","Model portfolio ID").option("--target-allocation <json>","Target allocation JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o={};if(e.name&&(o.name=e.name),e.description!==void 0&&(o.description=e.description),e.status&&(o.status=e.status.toUpperCase()),e.baseCurrency&&(o.baseCurrency=e.baseCurrency),e.driftThresholdPct!==void 0&&(o.driftThresholdPct=e.driftThresholdPct),e.modelPortfolio&&(o.modelPortfolioId=e.modelPortfolio),e.targetAllocation&&(o.targetAllocation=h("target-allocation",e.targetAllocation)),e.tags&&(o.tags=y(e.tags)),!Object.keys(o).length)throw new u("No updates specified");let f=await s(F,{id:t,input:o});c("Portfolio updated"),i(e,f.braUpdatePortfolio);}catch(o){r(o);}}),n.command("archive").description("Archive a portfolio").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(j,{id:t});c(`Portfolio archived: ${o.braArchivePortfolio}`),i(e,{archived:o.braArchivePortfolio});}catch(o){r(o);}});}function bt(a){let n=a.command("model-portfolios").description("Brainyrich model portfolios");n.command("list").description("List model portfolios").option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(W);i(t,e.braListModelPortfolios,{headers:["ID","Name","Risk","Currency","Active"],rows:e.braListModelPortfolios.map(o=>[p(o.id,12),o.name,o.riskProfile??"-",o.baseCurrency??"-",o.isActive?"yes":"no"])});}catch(e){r(e);}}),n.command("get").description("Get a model portfolio by id").argument("<id>","Model portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(V,{id:t});if(!o.braModelPortfolio)throw new u(`Model portfolio ${t} not found`);i(e,o.braModelPortfolio);}catch(o){r(o);}}),n.command("create").description("Create a model portfolio").requiredOption("--name <name>","Model portfolio name").option("--description <s>","Description").option("--base-currency <c>","Base currency code").option("--risk-profile <r>","CONSERVATIVE|MODERATE|BALANCED|GROWTH|AGGRESSIVE").option("--allocations <json>","Allocations JSON array: [{ assetClass, targetPct }]").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};if(t.description&&(e.description=t.description),t.baseCurrency&&(e.baseCurrency=t.baseCurrency),t.riskProfile&&(e.riskProfile=t.riskProfile.toUpperCase()),t.allocations){let f=h("allocations",t.allocations);if(!Array.isArray(f))throw new u("--allocations must be a JSON array");e.allocations=f;}let o=await s(J,{input:e});c(`Model portfolio created: ${o.braCreateModelPortfolio.name}`),i(t,o.braCreateModelPortfolio);}catch(e){r(e);}});}function At(a){let n=a.command("goals").description("Brainyrich financial goals");n.command("list").description("List goals").option("--household <id>","Filter by household ID").option("--status <s>","ACTIVE|ON_HOLD|ACHIEVED|ABANDONED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(K,{householdId:t.household,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListGoals.items,{headers:["ID","Name","Type","Status","Target","Projection"],rows:e.braListGoals.items.map(o=>[p(o.id,12),o.name,o.type??"-",o.status??"-",o.targetAmount!=null?String(o.targetAmount):"-",o.projection??"-"])});}catch(e){r(e);}}),n.command("get").description("Get a goal by id").argument("<id>","Goal ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(Y,{id:t});if(!o.braGoal)throw new u(`Goal ${t} not found`);i(e,o.braGoal);}catch(o){r(o);}}),n.command("create").description("Create a goal").requiredOption("--name <name>","Goal name").requiredOption("--target-amount <n>","Target amount",d).requiredOption("--target-date <iso>","Target date (ISO)").option("--owner <id>","Owner user ID").option("--household <id>","Household ID").option("--type <t>","RETIREMENT|EDUCATION|HOME|EMERGENCY_FUND|MAJOR_PURCHASE|WEALTH_GROWTH|CUSTOM").option("--currency <c>","Currency code").option("--monthly-contribution <n>","Monthly contribution",d).option("--priority <n>","Priority",m).option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,targetAmount:t.targetAmount,targetDate:t.targetDate};t.owner&&(e.ownerId=t.owner),t.household&&(e.householdId=t.household),t.type&&(e.type=t.type.toUpperCase()),t.currency&&(e.currency=t.currency),t.monthlyContribution!==void 0&&(e.monthlyContribution=t.monthlyContribution),t.priority!==void 0&&(e.priority=t.priority),t.notes&&(e.notes=t.notes),t.tags&&(e.tags=y(t.tags));let o=await s(Q,{input:e});c(`Goal created: ${o.braCreateGoal.name}`),i(t,o.braCreateGoal);}catch(e){r(e);}}),n.command("update").description("Update a goal").argument("<id>","Goal ID").option("--name <name>","Goal name").option("--type <t>","RETIREMENT|EDUCATION|HOME|EMERGENCY_FUND|MAJOR_PURCHASE|WEALTH_GROWTH|CUSTOM").option("--status <s>","ACTIVE|ON_HOLD|ACHIEVED|ABANDONED").option("--currency <c>","Currency code").option("--target-amount <n>","Target amount",d).option("--target-date <iso>","Target date (ISO)").option("--monthly-contribution <n>","Monthly contribution",d).option("--priority <n>","Priority",m).option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o={};if(e.name&&(o.name=e.name),e.type&&(o.type=e.type.toUpperCase()),e.status&&(o.status=e.status.toUpperCase()),e.currency&&(o.currency=e.currency),e.targetAmount!==void 0&&(o.targetAmount=e.targetAmount),e.targetDate&&(o.targetDate=e.targetDate),e.monthlyContribution!==void 0&&(o.monthlyContribution=e.monthlyContribution),e.priority!==void 0&&(o.priority=e.priority),e.notes!==void 0&&(o.notes=e.notes),e.tags&&(o.tags=y(e.tags)),!Object.keys(o).length)throw new u("No updates specified");let f=await s(X,{id:t,input:o});c("Goal updated"),i(e,f.braUpdateGoal);}catch(o){r(o);}}),n.command("archive").description("Archive a goal").argument("<id>","Goal ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(Z,{id:t});c(`Goal archived: ${o.braArchiveGoal}`),i(e,{archived:o.braArchiveGoal});}catch(o){r(o);}}),n.command("recalc-projection").description("Recompute a goal's projection from a funded amount").argument("<id>","Goal ID").requiredOption("--funded-amount <n>","Funded amount",d).option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(tt,{id:t,fundedAmount:e.fundedAmount});c(`Projection: ${o.braRecalcGoalProjection.projection??"-"}`),i(e,o.braRecalcGoalProjection);}catch(o){r(o);}}),n.command("list-fundings").description("List fundings linked to a goal").requiredOption("--goal <id>","Goal ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(z,{goalId:t.goal});i(t,e.braListGoalFundings,{headers:["ID","Account","Allocation %","Fixed"],rows:e.braListGoalFundings.map(o=>[p(o.id,12),p(o.accountId,12),o.allocationPct!=null?String(o.allocationPct):"-",o.fixedAmount!=null?String(o.fixedAmount):"-"])});}catch(e){r(e);}}),n.command("link-funding").description("Link an account funding to a goal").requiredOption("--goal <id>","Goal ID").requiredOption("--account <id>","Account ID").option("--allocation-pct <n>","Allocation percentage",d).option("--fixed-amount <n>","Fixed amount",d).option("-f, --format <format>","Output format").action(async t=>{try{let e={goalId:t.goal,accountId:t.account};t.allocationPct!==void 0&&(e.allocationPct=t.allocationPct),t.fixedAmount!==void 0&&(e.fixedAmount=t.fixedAmount);let o=await s(et,{input:e});c("Funding linked"),i(t,o.braLinkGoalFunding);}catch(e){r(e);}}),n.command("unlink-funding").description("Unlink a funding from a goal").argument("<id>","Funding ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(ot,{id:t});c(`Funding unlinked: ${o.braUnlinkGoalFunding}`),i(e,{unlinked:o.braUnlinkGoalFunding});}catch(o){r(o);}});}function wt(a){let n=a.command("transactions").description("Brainyrich account transactions");n.command("list").description("List transactions").option("--account <id>","Filter by account ID").option("--type <t>","BUY|SELL|DIVIDEND|INTEREST|DEPOSIT|WITHDRAWAL|FEE|TRANSFER").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(nt,{accountId:t.account,type:t.type?t.type.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListTransactions.items,{headers:["ID","Type","Symbol","Qty","Amount","Trade Date"],rows:e.braListTransactions.items.map(o=>[p(o.id,12),o.type,o.symbol??"-",o.quantity!=null?String(o.quantity):"-",o.amount!=null?String(o.amount):"-",o.tradeDate??"-"])});}catch(e){r(e);}}),n.command("record").description("Record a transaction").requiredOption("--account <id>","Account ID").requiredOption("--type <t>","BUY|SELL|DIVIDEND|INTEREST|DEPOSIT|WITHDRAWAL|FEE|TRANSFER").requiredOption("--trade-date <iso>","Trade date (ISO)").option("--holding <id>","Holding ID").option("--symbol <s>","Ticker symbol").option("--quantity <n>","Quantity",d).option("--price <n>","Price",d).option("--amount <n>","Amount",d).option("--fee <n>","Fee",d).option("--currency <c>","Currency code").option("--settle-date <iso>","Settlement date (ISO)").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async t=>{try{let e={accountId:t.account,type:t.type.toUpperCase(),tradeDate:t.tradeDate};t.holding&&(e.holdingId=t.holding),t.symbol&&(e.symbol=t.symbol),t.quantity!==void 0&&(e.quantity=t.quantity),t.price!==void 0&&(e.price=t.price),t.amount!==void 0&&(e.amount=t.amount),t.fee!==void 0&&(e.fee=t.fee),t.currency&&(e.currency=t.currency),t.settleDate&&(e.settleDate=t.settleDate),t.notes&&(e.notes=t.notes);let o=await s(rt,{input:e});c(`Transaction recorded: ${o.braRecordTransaction.type}`),i(t,o.braRecordTransaction);}catch(e){r(e);}});}function Et(a){let n=a.command("insights").description("Brainyrich advisory insights");n.command("list").description("List insights").option("--status <s>","OPEN|ACKNOWLEDGED|RESOLVED|DISMISSED").option("--severity <s>","INFO|LOW|MEDIUM|HIGH|CRITICAL").option("--subject-id <id>","Filter by subject ID").option("--subject-type <t>","Filter by subject type").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(at,{status:t.status?t.status.toUpperCase():void 0,severity:t.severity?t.severity.toUpperCase():void 0,subjectId:t.subjectId,subjectType:t.subjectType,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListInsights.items,{headers:["ID","Title","Type","Severity","Status"],rows:e.braListInsights.items.map(o=>[p(o.id,12),o.title,o.type,o.severity??"-",o.status??"-"])});}catch(e){r(e);}}),n.command("get").description("Get an insight by id").argument("<id>","Insight ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(it,{id:t});if(!o.braInsight)throw new u(`Insight ${t} not found`);i(e,o.braInsight);}catch(o){r(o);}}),n.command("create").description("Create an insight").requiredOption("--title <t>","Title").requiredOption("--type <t>","DRIFT|CASH_DRAG|CONCENTRATION_RISK|FEE_ANOMALY|TAX_OPPORTUNITY|GOAL_AT_RISK|REBALANCE_DUE").requiredOption("--subject-id <id>","Subject ID").requiredOption("--subject-type <t>","Subject type").option("--severity <s>","INFO|LOW|MEDIUM|HIGH|CRITICAL").option("--detail <s>","Detail").option("--owner <id>","Owner user ID").option("--metrics <json>","Metrics JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title,type:t.type.toUpperCase(),subjectId:t.subjectId,subjectType:t.subjectType};t.severity&&(e.severity=t.severity.toUpperCase()),t.detail&&(e.detail=t.detail),t.owner&&(e.ownerId=t.owner),t.metrics&&(e.metrics=h("metrics",t.metrics));let o=await s(st,{input:e});c(`Insight created: ${o.braCreateInsight.title}`),i(t,o.braCreateInsight);}catch(e){r(e);}}),n.command("acknowledge").description("Acknowledge an insight").argument("<id>","Insight ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(ct,{id:t});c(`Insight acknowledged: ${o.braAcknowledgeInsight.status??"-"}`),i(e,o.braAcknowledgeInsight);}catch(o){r(o);}}),n.command("dismiss").description("Dismiss an insight").argument("<id>","Insight ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(ut,{id:t});c(`Insight dismissed: ${o.braDismissInsight.status??"-"}`),i(e,o.braDismissInsight);}catch(o){r(o);}}),n.command("resolve").description("Resolve an insight").argument("<id>","Insight ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(dt,{id:t});c(`Insight resolved: ${o.braResolveInsight.status??"-"}`),i(e,o.braResolveInsight);}catch(o){r(o);}});}function Tt(a){let n=a.command("rebalances").description("Brainyrich rebalance proposals");n.command("list").description("List rebalance proposals").option("--portfolio <id>","Filter by portfolio ID").option("--household <id>","Filter by household ID").option("--status <s>","DRAFT|PROPOSED|APPROVED|REJECTED|EXECUTED|CANCELLED").option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(lt,{portfolioId:t.portfolio,householdId:t.household,status:t.status?t.status.toUpperCase():void 0});i(t,e.braListRebalanceProposals,{headers:["ID","Portfolio","Status","Drift %","Rationale"],rows:e.braListRebalanceProposals.map(o=>[p(o.id,12),p(o.portfolioId,12),o.status,o.driftPct!=null?String(o.driftPct):"-",p(o.rationale??"-",30)])});}catch(e){r(e);}}),n.command("create").description("Create a rebalance proposal").requiredOption("--portfolio <id>","Portfolio ID").option("--household <id>","Household ID").option("--drift-pct <n>","Drift percentage",d).option("--rationale <s>","Rationale").option("--trades <json>","Trades JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={portfolioId:t.portfolio};t.household&&(e.householdId=t.household),t.driftPct!==void 0&&(e.driftPct=t.driftPct),t.rationale&&(e.rationale=t.rationale),t.trades&&(e.trades=h("trades",t.trades));let o=await s(pt,{input:e});c(`Rebalance proposal created: ${o.braCreateRebalanceProposal.id}`),i(t,o.braCreateRebalanceProposal);}catch(e){r(e);}}),n.command("transition").description("Advance a rebalance proposal through its review lifecycle").argument("<id>","Proposal ID").requiredOption("--status <s>","DRAFT|PROPOSED|APPROVED|REJECTED|EXECUTED|CANCELLED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(mt,{id:t,status:e.status.toUpperCase()});c(`Proposal status set to ${o.braTransitionRebalanceProposal.status}`),i(e,o.braTransitionRebalanceProposal);}catch(o){r(o);}});}function Ot(a){a.command("analytics").description("Brainyrich net-worth analytics & health").command("net-worth").description("Net-worth summary (totals + breakdown by asset class)").option("--owner <id>","Owner user ID (defaults to the calling actor)").option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(ft,{ownerId:t.owner});i(t,e.braNetWorthSummary);}catch(e){r(e);}}),a.command("health").description("Brainyrich service health check (public)").option("-f, --format <format>","Output format").action(async t=>{try{let e=await w(gt);c(e.braHealth),i(t,{health:e.braHealth});}catch(e){r(e);}});}var _t={id:"brainyrich",version:"1.0.0",displayName:"Brainyrich",dependsOn:["auth","workspaces"],register(a,n){O(n);let t=a.command("brainyrich").description("Brainyrich wealth-management platform");ht(t),yt(t),It(t),Ct(t),bt(t),At(t),wt(t),Et(t),Tt(t),Ot(t);}},Go=_t;module.exports=Go;
340
+ `;function h(a,n){try{return JSON.parse(n)}catch{throw new u(`--${a} must be valid JSON`)}}function m(a){let n=Number.parseInt(a,10);if(Number.isNaN(n))throw new u(`Expected an integer but got "${a}"`);return n}function d(a){let n=Number.parseFloat(a);if(Number.isNaN(n))throw new u(`Expected a number but got "${a}"`);return n}function y(a){return a.split(",").map(n=>n.trim()).filter(n=>n.length>0)}function ht(a){let n=a.command("households").description("Brainyrich advisory households");n.command("list").description("List households").option("--status <s>","PROSPECT|ONBOARDING|ACTIVE|INACTIVE").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(P,{status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListHouseholds.items,{headers:["ID","Name","Status","Risk","AUM","Currency"],rows:e.braListHouseholds.items.map(o=>[p(o.id,12),o.name,o.status??"-",o.riskProfile??"-",o.aum!=null?String(o.aum):"-",o.currency??"-"])});}catch(e){r(e);}}),n.command("get").description("Get a household by id").argument("<id>","Household ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(k,{id:t});if(!o.braHousehold)throw new u(`Household ${t} not found`);i(e,o.braHousehold);}catch(o){r(o);}}),n.command("create").description("Create a household").requiredOption("--name <name>","Household name").option("--advisor <id>","Advisor user ID").option("--currency <c>","Currency code").option("--risk-profile <r>","CONSERVATIVE|MODERATE|BALANCED|GROWTH|AGGRESSIVE").option("--status <s>","PROSPECT|ONBOARDING|ACTIVE|INACTIVE").option("--primary-contact-name <s>","Primary contact name").option("--primary-contact-email <s>","Primary contact email").option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.advisor&&(e.advisorId=t.advisor),t.currency&&(e.currency=t.currency),t.riskProfile&&(e.riskProfile=t.riskProfile.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.primaryContactName&&(e.primaryContactName=t.primaryContactName),t.primaryContactEmail&&(e.primaryContactEmail=t.primaryContactEmail),t.notes&&(e.notes=t.notes),t.tags&&(e.tags=y(t.tags));let o=await s(D,{input:e});c(`Household created: ${o.braCreateHousehold.name}`),i(t,o.braCreateHousehold);}catch(e){r(e);}}),n.command("update").description("Update a household").argument("<id>","Household ID").option("--name <name>","Household name").option("--aum <n>","Assets under management",d).option("--currency <c>","Currency code").option("--risk-profile <r>","CONSERVATIVE|MODERATE|BALANCED|GROWTH|AGGRESSIVE").option("--status <s>","PROSPECT|ONBOARDING|ACTIVE|INACTIVE").option("--primary-contact-name <s>","Primary contact name").option("--primary-contact-email <s>","Primary contact email").option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o={};if(e.name&&(o.name=e.name),e.aum!==void 0&&(o.aum=e.aum),e.currency&&(o.currency=e.currency),e.riskProfile&&(o.riskProfile=e.riskProfile.toUpperCase()),e.status&&(o.status=e.status.toUpperCase()),e.primaryContactName!==void 0&&(o.primaryContactName=e.primaryContactName),e.primaryContactEmail!==void 0&&(o.primaryContactEmail=e.primaryContactEmail),e.notes!==void 0&&(o.notes=e.notes),e.tags&&(o.tags=y(e.tags)),!Object.keys(o).length)throw new u("No updates specified");let f=await s(R,{id:t,input:o});c("Household updated"),i(e,f.braUpdateHousehold);}catch(o){r(o);}}),n.command("archive").description("Archive a household").argument("<id>","Household ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(x,{id:t});c(`Household archived: ${o.braArchiveHousehold}`),i(e,{archived:o.braArchiveHousehold});}catch(o){r(o);}});}function yt(a){let n=a.command("accounts").description("Brainyrich financial accounts");n.command("list").description("List accounts").option("--household <id>","Filter by household ID").option("--status <s>","ACTIVE|ARCHIVED|CLOSED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(L,{householdId:t.household,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListAccounts.items,{headers:["ID","Name","Type","Status","Cash","Currency"],rows:e.braListAccounts.items.map(o=>[p(o.id,12),o.name,o.type??"-",o.status??"-",o.cashBalance!=null?String(o.cashBalance):"-",o.currency??"-"])});}catch(e){r(e);}}),n.command("get").description("Get an account by id").argument("<id>","Account ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(S,{id:t});if(!o.braAccount)throw new u(`Account ${t} not found`);i(e,o.braAccount);}catch(o){r(o);}}),n.command("create").description("Create an account").requiredOption("--name <name>","Account name").option("--owner <id>","Owner user ID").option("--household <id>","Household ID").option("--type <t>","BANK|BROKERAGE|RETIREMENT|CRYPTO|REAL_ESTATE|LIABILITY|CASH|ALTERNATIVE").option("--status <s>","ACTIVE|ARCHIVED|CLOSED").option("--currency <c>","Currency code").option("--cash-balance <n>","Cash balance",d).option("--institution <s>","Institution name").option("--account-mask <s>","Account mask").option("--manual","Mark as manually-tracked").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.owner&&(e.ownerId=t.owner),t.household&&(e.householdId=t.household),t.type&&(e.type=t.type.toUpperCase()),t.status&&(e.status=t.status.toUpperCase()),t.currency&&(e.currency=t.currency),t.cashBalance!==void 0&&(e.cashBalance=t.cashBalance),t.institution&&(e.institution=t.institution),t.accountMask&&(e.accountMask=t.accountMask),t.manual&&(e.isManual=!0);let o=await s(v,{input:e});c(`Account created: ${o.braCreateAccount.name}`),i(t,o.braCreateAccount);}catch(e){r(e);}}),n.command("update").description("Update an account").argument("<id>","Account ID").option("--name <name>","Account name").option("--household <id>","Household ID").option("--type <t>","BANK|BROKERAGE|RETIREMENT|CRYPTO|REAL_ESTATE|LIABILITY|CASH|ALTERNATIVE").option("--status <s>","ACTIVE|ARCHIVED|CLOSED").option("--currency <c>","Currency code").option("--cash-balance <n>","Cash balance",d).option("--institution <s>","Institution name").option("--account-mask <s>","Account mask").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o={};if(e.name&&(o.name=e.name),e.household&&(o.householdId=e.household),e.type&&(o.type=e.type.toUpperCase()),e.status&&(o.status=e.status.toUpperCase()),e.currency&&(o.currency=e.currency),e.cashBalance!==void 0&&(o.cashBalance=e.cashBalance),e.institution!==void 0&&(o.institution=e.institution),e.accountMask!==void 0&&(o.accountMask=e.accountMask),!Object.keys(o).length)throw new u("No updates specified");let f=await s($,{id:t,input:o});c("Account updated"),i(e,f.braUpdateAccount);}catch(o){r(o);}}),n.command("archive").description("Archive an account").argument("<id>","Account ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(N,{id:t});c(`Account archived: ${o.braArchiveAccount}`),i(e,{archived:o.braArchiveAccount});}catch(o){r(o);}});}function It(a){let n=a.command("holdings").description("Brainyrich account holdings");n.command("list").description("List holdings for an account or portfolio").option("--account <id>","Filter by account ID").option("--portfolio <id>","Filter by portfolio ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(G,{accountId:t.account,portfolioId:t.portfolio});i(t,e.braListHoldings,{headers:["ID","Symbol","Class","Qty","Last","Market Value"],rows:e.braListHoldings.map(o=>[p(o.id,12),o.symbol,o.assetClass??"-",o.quantity!=null?String(o.quantity):"-",o.lastPrice!=null?String(o.lastPrice):"-",o.marketValue!=null?String(o.marketValue):"-"])});}catch(e){r(e);}}),n.command("create").description("Create a holding").requiredOption("--account <id>","Account ID").requiredOption("--symbol <s>","Ticker symbol").option("--portfolio <id>","Portfolio ID").option("--name <s>","Display name").option("--asset-class <c>","EQUITY|FIXED_INCOME|CASH|REAL_ESTATE|COMMODITY|CRYPTO|ALTERNATIVE").option("--quantity <n>","Quantity",d).option("--cost-basis <n>","Cost basis",d).option("--last-price <n>","Last price",d).option("--currency <c>","Currency code").option("--as-of <iso>","As-of date (ISO)").option("-f, --format <format>","Output format").action(async t=>{try{let e={accountId:t.account,symbol:t.symbol};t.portfolio&&(e.portfolioId=t.portfolio),t.name&&(e.name=t.name),t.assetClass&&(e.assetClass=t.assetClass.toUpperCase()),t.quantity!==void 0&&(e.quantity=t.quantity),t.costBasis!==void 0&&(e.costBasis=t.costBasis),t.lastPrice!==void 0&&(e.lastPrice=t.lastPrice),t.currency&&(e.currency=t.currency),t.asOf&&(e.asOf=t.asOf);let o=await s(H,{input:e});c(`Holding created: ${o.braCreateHolding.symbol}`),i(t,o.braCreateHolding);}catch(e){r(e);}}),n.command("update").description("Update a holding").argument("<id>","Holding ID").option("--name <s>","Display name").option("--asset-class <c>","EQUITY|FIXED_INCOME|CASH|REAL_ESTATE|COMMODITY|CRYPTO|ALTERNATIVE").option("--quantity <n>","Quantity",d).option("--cost-basis <n>","Cost basis",d).option("--last-price <n>","Last price",d).option("--portfolio <id>","Portfolio ID").option("--as-of <iso>","As-of date (ISO)").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o={};if(e.name!==void 0&&(o.name=e.name),e.assetClass&&(o.assetClass=e.assetClass.toUpperCase()),e.quantity!==void 0&&(o.quantity=e.quantity),e.costBasis!==void 0&&(o.costBasis=e.costBasis),e.lastPrice!==void 0&&(o.lastPrice=e.lastPrice),e.portfolio&&(o.portfolioId=e.portfolio),e.asOf&&(o.asOf=e.asOf),!Object.keys(o).length)throw new u("No updates specified");let f=await s(_,{id:t,input:o});c("Holding updated"),i(e,f.braUpdateHolding);}catch(o){r(o);}}),n.command("delete").description("Delete a holding").argument("<id>","Holding ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(U,{id:t});c(`Holding deleted: ${o.braDeleteHolding}`),i(e,{deleted:o.braDeleteHolding});}catch(o){r(o);}});}function Ct(a){let n=a.command("portfolios").description("Brainyrich portfolios");n.command("list").description("List portfolios").option("--household <id>","Filter by household ID").option("--status <s>","DRAFT|ACTIVE|ARCHIVED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(q,{householdId:t.household,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListPortfolios.items,{headers:["ID","Name","Status","Currency","Drift %"],rows:e.braListPortfolios.items.map(o=>[p(o.id,12),o.name,o.status??"-",o.baseCurrency??"-",o.driftThresholdPct!=null?String(o.driftThresholdPct):"-"])});}catch(e){r(e);}}),n.command("get").description("Get a portfolio by id").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(B,{id:t});if(!o.braPortfolio)throw new u(`Portfolio ${t} not found`);i(e,o.braPortfolio);}catch(o){r(o);}}),n.command("create").description("Create a portfolio").requiredOption("--name <name>","Portfolio name").option("--owner <id>","Owner user ID").option("--household <id>","Household ID").option("--description <s>","Description").option("--base-currency <c>","Base currency code").option("--drift-threshold-pct <n>","Drift threshold %",d).option("--model-portfolio <id>","Model portfolio ID").option("--target-allocation <json>","Target allocation JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};t.owner&&(e.ownerId=t.owner),t.household&&(e.householdId=t.household),t.description&&(e.description=t.description),t.baseCurrency&&(e.baseCurrency=t.baseCurrency),t.driftThresholdPct!==void 0&&(e.driftThresholdPct=t.driftThresholdPct),t.modelPortfolio&&(e.modelPortfolioId=t.modelPortfolio),t.targetAllocation&&(e.targetAllocation=h("target-allocation",t.targetAllocation)),t.tags&&(e.tags=y(t.tags));let o=await s(M,{input:e});c(`Portfolio created: ${o.braCreatePortfolio.name}`),i(t,o.braCreatePortfolio);}catch(e){r(e);}}),n.command("update").description("Update a portfolio").argument("<id>","Portfolio ID").option("--name <name>","Portfolio name").option("--description <s>","Description").option("--status <s>","DRAFT|ACTIVE|ARCHIVED").option("--base-currency <c>","Base currency code").option("--drift-threshold-pct <n>","Drift threshold %",d).option("--model-portfolio <id>","Model portfolio ID").option("--target-allocation <json>","Target allocation JSON").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o={};if(e.name&&(o.name=e.name),e.description!==void 0&&(o.description=e.description),e.status&&(o.status=e.status.toUpperCase()),e.baseCurrency&&(o.baseCurrency=e.baseCurrency),e.driftThresholdPct!==void 0&&(o.driftThresholdPct=e.driftThresholdPct),e.modelPortfolio&&(o.modelPortfolioId=e.modelPortfolio),e.targetAllocation&&(o.targetAllocation=h("target-allocation",e.targetAllocation)),e.tags&&(o.tags=y(e.tags)),!Object.keys(o).length)throw new u("No updates specified");let f=await s(F,{id:t,input:o});c("Portfolio updated"),i(e,f.braUpdatePortfolio);}catch(o){r(o);}}),n.command("archive").description("Archive a portfolio").argument("<id>","Portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(j,{id:t});c(`Portfolio archived: ${o.braArchivePortfolio}`),i(e,{archived:o.braArchivePortfolio});}catch(o){r(o);}});}function bt(a){let n=a.command("model-portfolios").description("Brainyrich model portfolios");n.command("list").description("List model portfolios").option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(W);i(t,e.braListModelPortfolios,{headers:["ID","Name","Risk","Currency","Active"],rows:e.braListModelPortfolios.map(o=>[p(o.id,12),o.name,o.riskProfile??"-",o.baseCurrency??"-",o.isActive?"yes":"no"])});}catch(e){r(e);}}),n.command("get").description("Get a model portfolio by id").argument("<id>","Model portfolio ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(V,{id:t});if(!o.braModelPortfolio)throw new u(`Model portfolio ${t} not found`);i(e,o.braModelPortfolio);}catch(o){r(o);}}),n.command("create").description("Create a model portfolio").requiredOption("--name <name>","Model portfolio name").option("--description <s>","Description").option("--base-currency <c>","Base currency code").option("--risk-profile <r>","CONSERVATIVE|MODERATE|BALANCED|GROWTH|AGGRESSIVE").option("--allocations <json>","Allocations JSON array: [{ assetClass, targetPct }]").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name};if(t.description&&(e.description=t.description),t.baseCurrency&&(e.baseCurrency=t.baseCurrency),t.riskProfile&&(e.riskProfile=t.riskProfile.toUpperCase()),t.allocations){let f=h("allocations",t.allocations);if(!Array.isArray(f))throw new u("--allocations must be a JSON array");e.allocations=f;}let o=await s(J,{input:e});c(`Model portfolio created: ${o.braCreateModelPortfolio.name}`),i(t,o.braCreateModelPortfolio);}catch(e){r(e);}});}function At(a){let n=a.command("goals").description("Brainyrich financial goals");n.command("list").description("List goals").option("--household <id>","Filter by household ID").option("--status <s>","ACTIVE|ON_HOLD|ACHIEVED|ABANDONED").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(K,{householdId:t.household,status:t.status?t.status.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListGoals.items,{headers:["ID","Name","Type","Status","Target","Projection"],rows:e.braListGoals.items.map(o=>[p(o.id,12),o.name,o.type??"-",o.status??"-",o.targetAmount!=null?String(o.targetAmount):"-",o.projection??"-"])});}catch(e){r(e);}}),n.command("get").description("Get a goal by id").argument("<id>","Goal ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(Y,{id:t});if(!o.braGoal)throw new u(`Goal ${t} not found`);i(e,o.braGoal);}catch(o){r(o);}}),n.command("create").description("Create a goal").requiredOption("--name <name>","Goal name").requiredOption("--target-amount <n>","Target amount",d).requiredOption("--target-date <iso>","Target date (ISO)").option("--owner <id>","Owner user ID").option("--household <id>","Household ID").option("--type <t>","RETIREMENT|EDUCATION|HOME|EMERGENCY_FUND|MAJOR_PURCHASE|WEALTH_GROWTH|CUSTOM").option("--currency <c>","Currency code").option("--monthly-contribution <n>","Monthly contribution",d).option("--priority <n>","Priority",m).option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async t=>{try{let e={name:t.name,targetAmount:t.targetAmount,targetDate:t.targetDate};t.owner&&(e.ownerId=t.owner),t.household&&(e.householdId=t.household),t.type&&(e.type=t.type.toUpperCase()),t.currency&&(e.currency=t.currency),t.monthlyContribution!==void 0&&(e.monthlyContribution=t.monthlyContribution),t.priority!==void 0&&(e.priority=t.priority),t.notes&&(e.notes=t.notes),t.tags&&(e.tags=y(t.tags));let o=await s(Q,{input:e});c(`Goal created: ${o.braCreateGoal.name}`),i(t,o.braCreateGoal);}catch(e){r(e);}}),n.command("update").description("Update a goal").argument("<id>","Goal ID").option("--name <name>","Goal name").option("--type <t>","RETIREMENT|EDUCATION|HOME|EMERGENCY_FUND|MAJOR_PURCHASE|WEALTH_GROWTH|CUSTOM").option("--status <s>","ACTIVE|ON_HOLD|ACHIEVED|ABANDONED").option("--currency <c>","Currency code").option("--target-amount <n>","Target amount",d).option("--target-date <iso>","Target date (ISO)").option("--monthly-contribution <n>","Monthly contribution",d).option("--priority <n>","Priority",m).option("--notes <s>","Notes").option("--tags <csv>","Comma-separated tags").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o={};if(e.name&&(o.name=e.name),e.type&&(o.type=e.type.toUpperCase()),e.status&&(o.status=e.status.toUpperCase()),e.currency&&(o.currency=e.currency),e.targetAmount!==void 0&&(o.targetAmount=e.targetAmount),e.targetDate&&(o.targetDate=e.targetDate),e.monthlyContribution!==void 0&&(o.monthlyContribution=e.monthlyContribution),e.priority!==void 0&&(o.priority=e.priority),e.notes!==void 0&&(o.notes=e.notes),e.tags&&(o.tags=y(e.tags)),!Object.keys(o).length)throw new u("No updates specified");let f=await s(X,{id:t,input:o});c("Goal updated"),i(e,f.braUpdateGoal);}catch(o){r(o);}}),n.command("archive").description("Archive a goal").argument("<id>","Goal ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(Z,{id:t});c(`Goal archived: ${o.braArchiveGoal}`),i(e,{archived:o.braArchiveGoal});}catch(o){r(o);}}),n.command("recalc-projection").description("Recompute a goal's projection from a funded amount").argument("<id>","Goal ID").requiredOption("--funded-amount <n>","Funded amount",d).option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(tt,{id:t,fundedAmount:e.fundedAmount});c(`Projection: ${o.braRecalcGoalProjection.projection??"-"}`),i(e,o.braRecalcGoalProjection);}catch(o){r(o);}}),n.command("list-fundings").description("List fundings linked to a goal").requiredOption("--goal <id>","Goal ID").option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(z,{goalId:t.goal});i(t,e.braListGoalFundings,{headers:["ID","Account","Allocation %","Fixed"],rows:e.braListGoalFundings.map(o=>[p(o.id,12),p(o.accountId,12),o.allocationPct!=null?String(o.allocationPct):"-",o.fixedAmount!=null?String(o.fixedAmount):"-"])});}catch(e){r(e);}}),n.command("link-funding").description("Link an account funding to a goal").requiredOption("--goal <id>","Goal ID").requiredOption("--account <id>","Account ID").option("--allocation-pct <n>","Allocation percentage",d).option("--fixed-amount <n>","Fixed amount",d).option("-f, --format <format>","Output format").action(async t=>{try{let e={goalId:t.goal,accountId:t.account};t.allocationPct!==void 0&&(e.allocationPct=t.allocationPct),t.fixedAmount!==void 0&&(e.fixedAmount=t.fixedAmount);let o=await s(et,{input:e});c("Funding linked"),i(t,o.braLinkGoalFunding);}catch(e){r(e);}}),n.command("unlink-funding").description("Unlink a funding from a goal").argument("<id>","Funding ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(ot,{id:t});c(`Funding unlinked: ${o.braUnlinkGoalFunding}`),i(e,{unlinked:o.braUnlinkGoalFunding});}catch(o){r(o);}});}function wt(a){let n=a.command("transactions").description("Brainyrich account transactions");n.command("list").description("List transactions").option("--account <id>","Filter by account ID").option("--type <t>","BUY|SELL|DIVIDEND|INTEREST|DEPOSIT|WITHDRAWAL|FEE|TRANSFER").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(nt,{accountId:t.account,type:t.type?t.type.toUpperCase():void 0,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListTransactions.items,{headers:["ID","Type","Symbol","Qty","Amount","Trade Date"],rows:e.braListTransactions.items.map(o=>[p(o.id,12),o.type,o.symbol??"-",o.quantity!=null?String(o.quantity):"-",o.amount!=null?String(o.amount):"-",o.tradeDate??"-"])});}catch(e){r(e);}}),n.command("record").description("Record a transaction").requiredOption("--account <id>","Account ID").requiredOption("--type <t>","BUY|SELL|DIVIDEND|INTEREST|DEPOSIT|WITHDRAWAL|FEE|TRANSFER").requiredOption("--trade-date <iso>","Trade date (ISO)").option("--holding <id>","Holding ID").option("--symbol <s>","Ticker symbol").option("--quantity <n>","Quantity",d).option("--price <n>","Price",d).option("--amount <n>","Amount",d).option("--fee <n>","Fee",d).option("--currency <c>","Currency code").option("--settle-date <iso>","Settlement date (ISO)").option("--notes <s>","Notes").option("-f, --format <format>","Output format").action(async t=>{try{let e={accountId:t.account,type:t.type.toUpperCase(),tradeDate:t.tradeDate};t.holding&&(e.holdingId=t.holding),t.symbol&&(e.symbol=t.symbol),t.quantity!==void 0&&(e.quantity=t.quantity),t.price!==void 0&&(e.price=t.price),t.amount!==void 0&&(e.amount=t.amount),t.fee!==void 0&&(e.fee=t.fee),t.currency&&(e.currency=t.currency),t.settleDate&&(e.settleDate=t.settleDate),t.notes&&(e.notes=t.notes);let o=await s(rt,{input:e});c(`Transaction recorded: ${o.braRecordTransaction.type}`),i(t,o.braRecordTransaction);}catch(e){r(e);}});}function Et(a){let n=a.command("insights").description("Brainyrich advisory insights");n.command("list").description("List insights").option("--status <s>","OPEN|ACKNOWLEDGED|RESOLVED|DISMISSED").option("--severity <s>","INFO|LOW|MEDIUM|HIGH|CRITICAL").option("--subject-id <id>","Filter by subject ID").option("--subject-type <t>","Filter by subject type").option("--limit <n>","Page size",m,50).option("--offset <n>","Offset",m,0).option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(at,{status:t.status?t.status.toUpperCase():void 0,severity:t.severity?t.severity.toUpperCase():void 0,subjectId:t.subjectId,subjectType:t.subjectType,pagination:{limit:t.limit,offset:t.offset}});i(t,e.braListInsights.items,{headers:["ID","Title","Type","Severity","Status"],rows:e.braListInsights.items.map(o=>[p(o.id,12),o.title,o.type,o.severity??"-",o.status??"-"])});}catch(e){r(e);}}),n.command("get").description("Get an insight by id").argument("<id>","Insight ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(it,{id:t});if(!o.braInsight)throw new u(`Insight ${t} not found`);i(e,o.braInsight);}catch(o){r(o);}}),n.command("create").description("Create an insight").requiredOption("--title <t>","Title").requiredOption("--type <t>","DRIFT|CASH_DRAG|CONCENTRATION_RISK|FEE_ANOMALY|TAX_OPPORTUNITY|GOAL_AT_RISK|REBALANCE_DUE").requiredOption("--subject-id <id>","Subject ID").requiredOption("--subject-type <t>","Subject type").option("--severity <s>","INFO|LOW|MEDIUM|HIGH|CRITICAL").option("--detail <s>","Detail").option("--owner <id>","Owner user ID").option("--metrics <json>","Metrics JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={title:t.title,type:t.type.toUpperCase(),subjectId:t.subjectId,subjectType:t.subjectType};t.severity&&(e.severity=t.severity.toUpperCase()),t.detail&&(e.detail=t.detail),t.owner&&(e.ownerId=t.owner),t.metrics&&(e.metrics=h("metrics",t.metrics));let o=await s(st,{input:e});c(`Insight created: ${o.braCreateInsight.title}`),i(t,o.braCreateInsight);}catch(e){r(e);}}),n.command("acknowledge").description("Acknowledge an insight").argument("<id>","Insight ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(ct,{id:t});c(`Insight acknowledged: ${o.braAcknowledgeInsight.status??"-"}`),i(e,o.braAcknowledgeInsight);}catch(o){r(o);}}),n.command("dismiss").description("Dismiss an insight").argument("<id>","Insight ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(ut,{id:t});c(`Insight dismissed: ${o.braDismissInsight.status??"-"}`),i(e,o.braDismissInsight);}catch(o){r(o);}}),n.command("resolve").description("Resolve an insight").argument("<id>","Insight ID").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(dt,{id:t});c(`Insight resolved: ${o.braResolveInsight.status??"-"}`),i(e,o.braResolveInsight);}catch(o){r(o);}});}function Tt(a){let n=a.command("rebalances").description("Brainyrich rebalance proposals");n.command("list").description("List rebalance proposals").option("--portfolio <id>","Filter by portfolio ID").option("--household <id>","Filter by household ID").option("--status <s>","DRAFT|PROPOSED|APPROVED|REJECTED|EXECUTED|CANCELLED").option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(lt,{portfolioId:t.portfolio,householdId:t.household,status:t.status?t.status.toUpperCase():void 0});i(t,e.braListRebalanceProposals,{headers:["ID","Portfolio","Status","Drift %","Rationale"],rows:e.braListRebalanceProposals.map(o=>[p(o.id,12),p(o.portfolioId,12),o.status,o.driftPct!=null?String(o.driftPct):"-",p(o.rationale??"-",30)])});}catch(e){r(e);}}),n.command("create").description("Create a rebalance proposal").requiredOption("--portfolio <id>","Portfolio ID").option("--household <id>","Household ID").option("--drift-pct <n>","Drift percentage",d).option("--rationale <s>","Rationale").option("--trades <json>","Trades JSON").option("-f, --format <format>","Output format").action(async t=>{try{let e={portfolioId:t.portfolio};t.household&&(e.householdId=t.household),t.driftPct!==void 0&&(e.driftPct=t.driftPct),t.rationale&&(e.rationale=t.rationale),t.trades&&(e.trades=h("trades",t.trades));let o=await s(pt,{input:e});c(`Rebalance proposal created: ${o.braCreateRebalanceProposal.id}`),i(t,o.braCreateRebalanceProposal);}catch(e){r(e);}}),n.command("transition").description("Advance a rebalance proposal through its review lifecycle").argument("<id>","Proposal ID").requiredOption("--status <s>","DRAFT|PROPOSED|APPROVED|REJECTED|EXECUTED|CANCELLED").option("-f, --format <format>","Output format").action(async(t,e)=>{try{let o=await s(mt,{id:t,status:e.status.toUpperCase()});c(`Proposal status set to ${o.braTransitionRebalanceProposal.status}`),i(e,o.braTransitionRebalanceProposal);}catch(o){r(o);}});}function Ot(a){a.command("analytics").description("Brainyrich net-worth analytics & health").command("net-worth").description("Net-worth summary (totals + breakdown by asset class)").option("--owner <id>","Owner user ID (defaults to the calling actor)").option("-f, --format <format>","Output format").action(async t=>{try{let e=await s(ft,{ownerId:t.owner});i(t,e.braNetWorthSummary);}catch(e){r(e);}}),a.command("health").description("Brainyrich service health check (public)").option("-f, --format <format>","Output format").action(async t=>{try{let e=await w(gt);c(e.braHealth),i(t,{health:e.braHealth});}catch(e){r(e);}});}var _t={id:"brainyrich",version:"1.0.0",displayName:"Brainyrich",dependsOn:["auth","workspaces"],register(a,n){O(n);let t=a.command("brainyrich").description("Brainyrich wealth-management platform");ht(t),yt(t),It(t),Ct(t),bt(t),At(t),wt(t),Et(t),Tt(t),Ot(t);}},Go=_t;module.exports=Go;
@@ -1,4 +1,4 @@
1
- import { C as CliModule } from '../../module-DxCuik6L.cjs';
1
+ import { C as CliModule } from '../../module-DOIiVaXQ.cjs';
2
2
  import 'commander';
3
3
  import 'graphql-request';
4
4
 
@@ -1,4 +1,4 @@
1
- import { C as CliModule } from '../../module-DxCuik6L.js';
1
+ import { C as CliModule } from '../../module-DOIiVaXQ.js';
2
2
  import 'commander';
3
3
  import 'graphql-request';
4
4
 
@@ -1,4 +1,4 @@
1
- import {a,b,h as h$1,p as p$1,g,i,d as d$1}from'../../chunk-WXDQ3S5J.js';import {o}from'../../chunk-TCBALVP4.js';var C=`
1
+ import {a,b,h as h$1,p as p$1,g,i,d as d$1}from'../../chunk-NLEVVDXR.js';import {o}from'../../chunk-IZXPWPKX.js';var C=`
2
2
  query BrainyrichGetHousehold($id: ID!) {
3
3
  braHousehold(id: $id) {
4
4
  id name advisorId aum currency riskProfile status notes