everyapp 0.3.0-rc.2 → 0.3.0-rc.3

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 (103) hide show
  1. package/dist/access-FZ2ARRET.js +1 -0
  2. package/dist/activity-2RGC4KBA.js +14 -0
  3. package/dist/ai-ZGVUY7AM.js +5 -0
  4. package/dist/apps-IKTWTDHD.js +14 -0
  5. package/dist/{chunk-4JRIS6S6.js → chunk-36VCEEIH.js} +1 -1
  6. package/dist/{chunk-N5GQLGEC.js → chunk-3GZA6EEZ.js} +1 -1
  7. package/dist/{chunk-ONLNJXVQ.js → chunk-475IB5UG.js} +3 -3
  8. package/dist/chunk-4MMHVIHT.js +20 -0
  9. package/dist/{chunk-W3JCQHHU.js → chunk-52NQ23OH.js} +1 -1
  10. package/dist/chunk-6ILATTGU.js +34 -0
  11. package/dist/{chunk-CZXHKPRZ.js → chunk-7BC42ZUS.js} +1 -1
  12. package/dist/{chunk-CB4U7H2G.js → chunk-7SCPBFKI.js} +1 -1
  13. package/dist/{chunk-5PTNYZK6.js → chunk-AEYRJ3TD.js} +3 -3
  14. package/dist/{chunk-23HJ5I2A.js → chunk-AIDX5IYA.js} +1 -1
  15. package/dist/{chunk-OM2HDWVP.js → chunk-CGFABBZA.js} +1 -1
  16. package/dist/{chunk-PNLU5U3P.js → chunk-DB5CMXEV.js} +1 -1
  17. package/dist/{chunk-ELK7QZ2M.js → chunk-DONNKBKB.js} +1 -1
  18. package/dist/{chunk-AGTCKFRB.js → chunk-EEF4FY26.js} +1 -1
  19. package/dist/chunk-EJE6K5GO.js +146 -0
  20. package/dist/chunk-HHVABFYD.js +1 -0
  21. package/dist/chunk-HT76NR3O.js +1 -0
  22. package/dist/chunk-IWP4Q3KV.js +15 -0
  23. package/dist/{chunk-ZFCUH5PK.js → chunk-J2XKGQO7.js} +1 -1
  24. package/dist/{chunk-OP4DYXYI.js → chunk-JBTV62V7.js} +1 -1
  25. package/dist/chunk-JT3R24Y7.js +1 -0
  26. package/dist/{chunk-ZEXVHB22.js → chunk-KS7DIYIJ.js} +1 -1
  27. package/dist/{chunk-H7PDL3X5.js → chunk-KTX5YGBL.js} +1 -1
  28. package/dist/{chunk-J35DDCNU.js → chunk-LKI3XV7I.js} +1 -1
  29. package/dist/{chunk-T2GD7RHS.js → chunk-LTMQP62I.js} +1 -1
  30. package/dist/{chunk-WOVS3GV5.js → chunk-LTYAIGEB.js} +4 -4
  31. package/dist/{chunk-CCWBPAKH.js → chunk-MLZJBYSY.js} +1 -1
  32. package/dist/chunk-NXO2BC3M.js +57 -0
  33. package/dist/{chunk-RMF4YGD6.js → chunk-OHDR7JWQ.js} +39 -38
  34. package/dist/{chunk-6OGVO7QK.js → chunk-ONGI463M.js} +1 -1
  35. package/dist/chunk-Q44H7KLY.js +1 -0
  36. package/dist/{chunk-6PGUCTJ6.js → chunk-RXSJENSN.js} +1 -1
  37. package/dist/{chunk-CZTEDWZ2.js → chunk-SMCUCFS4.js} +1 -1
  38. package/dist/{chunk-2Y5Q6A5K.js → chunk-TQWCYF2T.js} +1 -1
  39. package/dist/chunk-U4ATZJEU.js +6 -0
  40. package/dist/{chunk-YHJZMJYZ.js → chunk-UEQMNXMZ.js} +1 -1
  41. package/dist/{chunk-LXYMDZER.js → chunk-VX4Z3D7A.js} +1 -1
  42. package/dist/{chunk-IFCPALVC.js → chunk-WTKBB5HE.js} +23 -23
  43. package/dist/{chunk-PS7S74DG.js → chunk-WV4G6E4T.js} +1 -1
  44. package/dist/{chunk-IUOBIB5M.js → chunk-WY2V27RK.js} +1 -1
  45. package/dist/{chunk-TLRM3P7V.js → chunk-XEPXX3AI.js} +1 -1
  46. package/dist/chunk-Y6CGMZEB.js +1 -0
  47. package/dist/{chunk-J455FAEN.js → chunk-YCADEJVJ.js} +5 -5
  48. package/dist/{chunk-HOUHG236.js → chunk-ZCJTJDAI.js} +1 -1
  49. package/dist/{chunk-H6QQMY7B.js → chunk-ZH6IAPVK.js} +1 -1
  50. package/dist/{configure-F7UZCJUG.js → configure-EJKUEVYS.js} +1 -1
  51. package/dist/{create-2E5HVWYK.js → create-BKEFXQ5N.js} +1 -1
  52. package/dist/{db-HEQVTDTM.js → db-66QZCKMG.js} +1 -1
  53. package/dist/delete-JR5R2OHE.js +3 -0
  54. package/dist/deploy-G4NB5R2P.js +1 -0
  55. package/dist/{dev-JL3ZP5BT.js → dev-EFDXNBFY.js} +43 -43
  56. package/dist/{email-RLZFUFUN.js → email-LAQDDSYC.js} +1 -1
  57. package/dist/{events-2V5VRBWP.js → events-RRF7OOCI.js} +1 -1
  58. package/dist/{groups-HDG5DVFY.js → groups-CFTGDYZU.js} +1 -1
  59. package/dist/index.js +89 -83
  60. package/dist/install-GXMHD5XS.js +1 -0
  61. package/dist/{login-KHJBC64Z.js → login-YWNHPSC2.js} +1 -1
  62. package/dist/mcp-72WLLKTK.js +1 -0
  63. package/dist/provider-IPV6BDP3.js +13 -0
  64. package/dist/release-4T7BVUZ5.js +1 -0
  65. package/dist/{restore-FFGYV7NO.js → restore-BWPOK4UP.js} +1 -1
  66. package/dist/secret-NLQQNZMK.js +1 -0
  67. package/dist/setup-6PNOX4NZ.js +1 -0
  68. package/dist/{signin-AP3D4XM4.js → signin-X4Z42R7E.js} +1 -1
  69. package/dist/status-VEUCYFRY.js +4 -0
  70. package/dist/teardown-J4CP2EI5.js +22 -0
  71. package/dist/update-NU2SFDNF.js +1 -0
  72. package/dist/{workspace-CJC5I66L.js → workspace-ZLKGLW35.js} +1 -1
  73. package/package.json +4 -4
  74. package/skills/build-every-app/SKILL.md +4 -1
  75. package/skills/build-every-app/patterns.md +6 -0
  76. package/skills/everyapp/SKILL.md +18 -8
  77. package/skills/everyapp/mcp.md +4 -2
  78. package/skills/everyapp/setup/README.md +2 -0
  79. package/skills/everyapp/setup/ai-gateway.md +117 -0
  80. package/skills/everyapp/setup/ai.md +139 -0
  81. package/skills/everyapp/setup/providers.md +26 -8
  82. package/dist/access-LGEN3ABJ.js +0 -1
  83. package/dist/activity-RSD4D66F.js +0 -12
  84. package/dist/apps-4RCFXT74.js +0 -13
  85. package/dist/chunk-EGEWRFVY.js +0 -1
  86. package/dist/chunk-FJJSSVET.js +0 -33
  87. package/dist/chunk-GKBPYVP3.js +0 -25
  88. package/dist/chunk-JYKRUS5C.js +0 -1
  89. package/dist/chunk-LYNBZ7RV.js +0 -57
  90. package/dist/chunk-M2QQ2UD7.js +0 -132
  91. package/dist/chunk-NFU4YFXB.js +0 -1
  92. package/dist/chunk-ZECBN24L.js +0 -15
  93. package/dist/delete-XCSIQIRS.js +0 -3
  94. package/dist/deploy-3QOZEZHC.js +0 -1
  95. package/dist/install-Z5FYXUYM.js +0 -1
  96. package/dist/mcp-EFDUKJ5V.js +0 -1
  97. package/dist/provider-EOI5PTFH.js +0 -13
  98. package/dist/release-74J5ZIL3.js +0 -1
  99. package/dist/secret-7FKKTLHB.js +0 -1
  100. package/dist/setup-PAKRCAFO.js +0 -1
  101. package/dist/status-RMWNHOEK.js +0 -4
  102. package/dist/teardown-E4JNKAZJ.js +0 -22
  103. package/dist/update-DWVZFNPS.js +0 -1
@@ -1,4 +1,4 @@
1
- import"./chunk-5PTNYZK6.js";import{a as ee,b as ne,d as te,g as O}from"./chunk-PS7S74DG.js";import"./chunk-YHJZMJYZ.js";import"./chunk-N5GQLGEC.js";import"./chunk-W3JCQHHU.js";import{b as Z}from"./chunk-ZECBN24L.js";import{g as q}from"./chunk-HOUHG236.js";import{ha as B,ia as W,ja as z,ka as J,qa as K,sa as Q}from"./chunk-RMF4YGD6.js";import"./chunk-NFU4YFXB.js";import"./chunk-T2GD7RHS.js";import{c as G}from"./chunk-H7PDL3X5.js";import{a as P}from"./chunk-CCWBPAKH.js";import"./chunk-JYKRUS5C.js";import{Bb as h,Ea as k,Fb as H,c as u,d as V,pc as X,rc as Y,wc as D}from"./chunk-LYNBZ7RV.js";import ce from"node:path";import{stripVTControlCharacters as me}from"node:util";import d from"chalk";var se="email.update";async function Me(e){await D(e,n=>pe({flags:e,out:n,senders:e.sender?.length?e.sender:void 0,inbound:e.inbound?.length?e.inbound:void 0,enableRouting:e["enable-email-routing"]}))}async function De(e,...n){await D(e,s=>ue({flags:e,out:s,lists:n}))}async function Oe(e){await D(e,n=>fe({flags:e,out:n}))}function ie(e,n){let s=[...new Set(k(e,n))];if(s.length===0)return;let a=e==="senders"?"--sender":"--inbound",t=e==="senders"?"EMAIL_SENDER_INVALID":"EMAIL_INBOUND_INVALID";if(s.length>1)throw new h(t,[`${s.length} problems with ${a}`,...s.map(l=>`\u2022 ${l}`)].join(`
1
+ import"./chunk-AEYRJ3TD.js";import{a as ee,b as ne,d as te,g as O}from"./chunk-WV4G6E4T.js";import"./chunk-UEQMNXMZ.js";import"./chunk-3GZA6EEZ.js";import"./chunk-52NQ23OH.js";import{b as Z}from"./chunk-IWP4Q3KV.js";import{g as q}from"./chunk-ZCJTJDAI.js";import{ia as B,ja as W,ka as z,la as J,ra as K,ta as Q}from"./chunk-OHDR7JWQ.js";import"./chunk-HT76NR3O.js";import"./chunk-LTMQP62I.js";import{c as G}from"./chunk-KTX5YGBL.js";import{a as P}from"./chunk-MLZJBYSY.js";import"./chunk-JT3R24Y7.js";import{Ic as X,Ja as k,Kc as Y,Pc as D,Ub as h,Yb as H,c as u,d as V}from"./chunk-NXO2BC3M.js";import ce from"node:path";import{stripVTControlCharacters as me}from"node:util";import d from"chalk";var se="email.update";async function Me(e){await D(e,n=>pe({flags:e,out:n,senders:e.sender?.length?e.sender:void 0,inbound:e.inbound?.length?e.inbound:void 0,enableRouting:e["enable-email-routing"]}))}async function De(e,...n){await D(e,s=>ue({flags:e,out:s,lists:n}))}async function Oe(e){await D(e,n=>fe({flags:e,out:n}))}function ie(e,n){let s=[...new Set(k(e,n))];if(s.length===0)return;let a=e==="senders"?"--sender":"--inbound",t=e==="senders"?"EMAIL_SENDER_INVALID":"EMAIL_INBOUND_INVALID";if(s.length>1)throw new h(t,[`${s.length} problems with ${a}`,...s.map(l=>`\u2022 ${l}`)].join(`
2
2
  `),{data:{problems:s}});let[p,c]=s[0].split(": "),A=k(e,n.map(l=>l.toLowerCase())).length===0;throw new h(t,c?`${p}
3
3
  ${c.charAt(0).toUpperCase()}${c.slice(1)}`:p,{...A?{rerun:V([],{argv:process.argv.slice(2).map(l=>n.includes(l)?l.toLowerCase():l)})}:{},data:{problems:s}})}async function pe(e){let{senders:n,inbound:s}=e;if(n===void 0&&s===void 0)throw new h("EMAIL_NOTHING_TO_SET","Name what to set: --sender, --inbound, or both",{rerun:`${u} email set --help`});n!==void 0&&ie("senders",n),s!==void 0&&ie("inbound",s);let a=await F(e),t=O(a),p={rerun:`${u} deploy`,rerunNote:"then this command again"};if(n!==void 0&&!t.sends)throw new h("EMAIL_NOT_DECLARED",`${a.id} can't send mail yet
4
4
  everyapp.config.ts doesn't list email in its capabilities.`,{fix:'add capabilities: { email: { access: "write" } } to everyapp.config.ts',...p});if(s!==void 0&&!t.receives)throw new h("EMAIL_INBOUND_NOT_DECLARED",`${a.id} can't receive mail yet
@@ -1,4 +1,4 @@
1
- import{a as g,b as re,c as S,d as O,e as E,f as l,g as L,h as b,j as de,k as me}from"./chunk-CB4U7H2G.js";import"./chunk-M2QQ2UD7.js";import{a as z}from"./chunk-4JRIS6S6.js";import{D as W,E as Y,F as H,G as K,H as Q,I as X,J as B,K as J,L as Z,M as ee,N as te,O as ie,S as ne,T as se,U as ae,x as j,y as q}from"./chunk-RMF4YGD6.js";import"./chunk-NFU4YFXB.js";import"./chunk-T2GD7RHS.js";import{a as V,g as U}from"./chunk-CCWBPAKH.js";import"./chunk-JYKRUS5C.js";import{Bb as y,Ja as I,Ma as P,Sa as G,c,f as $,lc as F,oc as oe,pc as D,qb as M,wc as u}from"./chunk-LYNBZ7RV.js";import{text as ge}from"node:stream/consumers";import he from"chalk";var R="events.add",Ee=/^[a-z][a-z0-9+.-]*:\/\//i;async function be(){return process.stdin.isTTY?null:ge(process.stdin)}async function Te(e){let i=e.flags["secret-from-env"];if(i){let n=(e.env??process.env)[i];if(!n)throw new y("SECRET_EMPTY",`$${i} is empty or not set`,{fix:`export ${i} first, or name another variable with --secret-from-env`});return n}let t=await(e.readStdin??be)();if(t!==null){let n=t.replace(/\r?\n$/,"");if(n)return n}let o=e.interactive??V(e.flags.json??!1);if(t!==null||!o)throw new y("SECRET_VALUE_REQUIRED",`Can't ask for the signing secret without a terminal
1
+ import{a as g,b as re,c as S,d as O,e as E,f as l,g as L,h as b,j as de,k as me}from"./chunk-7SCPBFKI.js";import"./chunk-EJE6K5GO.js";import"./chunk-CGFABBZA.js";import{a as z}from"./chunk-36VCEEIH.js";import{E as W,F as Y,G as H,H as K,I as Q,J as X,K as B,L as J,M as Z,N as ee,O as te,P as ie,T as ne,U as se,V as ae,x as j,y as q}from"./chunk-OHDR7JWQ.js";import"./chunk-HT76NR3O.js";import"./chunk-LTMQP62I.js";import{a as V,g as U}from"./chunk-MLZJBYSY.js";import"./chunk-JT3R24Y7.js";import{Db as M,Ec as F,Hc as oe,Ic as D,Pc as u,Sa as I,Ub as y,Wa as P,bb as G,c,f as $}from"./chunk-NXO2BC3M.js";import{text as ge}from"node:stream/consumers";import he from"chalk";var R="events.add",Ee=/^[a-z][a-z0-9+.-]*:\/\//i;async function be(){return process.stdin.isTTY?null:ge(process.stdin)}async function Te(e){let i=e.flags["secret-from-env"];if(i){let n=(e.env??process.env)[i];if(!n)throw new y("SECRET_EMPTY",`$${i} is empty or not set`,{fix:`export ${i} first, or name another variable with --secret-from-env`});return n}let t=await(e.readStdin??be)();if(t!==null){let n=t.replace(/\r?\n$/,"");if(n)return n}let o=e.interactive??V(e.flags.json??!1);if(t!==null||!o)throw new y("SECRET_VALUE_REQUIRED",`Can't ask for the signing secret without a terminal
2
2
  Pipe it in, or name the environment variable holding it with --secret-from-env.`,{fix:"leave --secret out to have one made, or add --secret-from-env <VAR>"});return(e.prompt??(()=>U("Signing secret",{context:["16 to 128 printable characters. Receivers check X-EveryApp-Signature with it."]})))()}async function pe(e,i){let{flags:t,out:o}=e,n=t.secret===!0||t["secret-from-env"]!==void 0;if(n&&i!==void 0&&!Ee.test(i.trim()))throw new y("VALUE_ON_COMMAND_LINE",`--secret takes no value on the command line
3
3
  It lands in the shell's history and the process list: rotate it if it was real. Nothing was added.`,{fix:"give --secret alone: it asks at a hidden prompt, or reads the secret piped in or from --secret-from-env <VAR>"});if(i!==void 0&&t.email!==void 0)throw new y("EVENT_SINK_CONFLICT",`Give a webhook URL or --email, not both
4
4
  A subscription delivers one way: a signed POST to a URL, or mail to the organization's owners (and admins).`,{fix:"add one subscription for each"});if(t.email!==void 0&&n)throw new y("EVENT_SINK_CONFLICT",`An email subscription has no signing secret
@@ -1,4 +1,4 @@
1
- import{a as h,b as D,e as E,g as M,h as v,j as G}from"./chunk-ELK7QZ2M.js";import{A as j,h as C,t as W,u as I,v as z,w as A,x as O,y as x,z as F}from"./chunk-M2QQ2UD7.js";import"./chunk-RMF4YGD6.js";import"./chunk-NFU4YFXB.js";import"./chunk-T2GD7RHS.js";import{i as P}from"./chunk-CCWBPAKH.js";import"./chunk-JYKRUS5C.js";import{Bb as S,c as y,f as g,pc as f,wc as w}from"./chunk-LYNBZ7RV.js";import u from"chalk";var c="workspace.update";async function ee(e){await w(e,n=>N({flags:e,out:n}))}async function te(e,n){await w(e,o=>U({flags:e,out:o},n))}async function ae(e,n){await w(e,o=>R({flags:e,out:o},n))}async function oe(e,n){await w(e,o=>L({flags:e,out:o},n))}async function ne(e,n){await w(e,o=>q({flags:e,out:o},n))}async function se(e,n){await w(e,o=>_({flags:e,out:o},n))}var $=e=>({id:e.id,name:e.name,description:e.description,members:e.memberCount,apps:e.appCount,createdAt:new Date(e.createdAt).toISOString()});async function N(e){let{out:n}=e,{ws:o}=await h(e),r=await W(o),s=f(["GROUP","MEMBERS","APPS","DESCRIPTION","ID"],r.map(t=>[t.name,String(t.memberCount),String(t.appCount),t.description??u.dim("\u2013"),u.dim(t.id)]));n.emit({type:"done",message:`${g(r.length,"group")} in ${o.organization.name}`,display:r.length>0?s.join(`
1
+ import{a as h,b as D,e as E,g as M,h as v,j as G}from"./chunk-DONNKBKB.js";import{A as z,B as A,C as O,D as x,E as F,F as j,m as C,y as W,z as I}from"./chunk-EJE6K5GO.js";import"./chunk-CGFABBZA.js";import"./chunk-36VCEEIH.js";import"./chunk-OHDR7JWQ.js";import"./chunk-HT76NR3O.js";import"./chunk-LTMQP62I.js";import{i as P}from"./chunk-MLZJBYSY.js";import"./chunk-JT3R24Y7.js";import{Ic as f,Pc as w,Ub as S,c as y,f as g}from"./chunk-NXO2BC3M.js";import u from"chalk";var c="workspace.update";async function ee(e){await w(e,n=>N({flags:e,out:n}))}async function te(e,n){await w(e,o=>U({flags:e,out:o},n))}async function ae(e,n){await w(e,o=>R({flags:e,out:o},n))}async function oe(e,n){await w(e,o=>L({flags:e,out:o},n))}async function ne(e,n){await w(e,o=>q({flags:e,out:o},n))}async function se(e,n){await w(e,o=>_({flags:e,out:o},n))}var $=e=>({id:e.id,name:e.name,description:e.description,members:e.memberCount,apps:e.appCount,createdAt:new Date(e.createdAt).toISOString()});async function N(e){let{out:n}=e,{ws:o}=await h(e),r=await W(o),s=f(["GROUP","MEMBERS","APPS","DESCRIPTION","ID"],r.map(t=>[t.name,String(t.memberCount),String(t.appCount),t.description??u.dim("\u2013"),u.dim(t.id)]));n.emit({type:"done",message:`${g(r.length,"group")} in ${o.organization.name}`,display:r.length>0?s.join(`
2
2
  `):u.dim(`No groups in ${o.organization.name} yet: ${y} workspace group create <name>`),data:{organization:o.organization,groups:r.map($)}})}async function U(e,n){let{out:o,flags:r}=e,{ws:s}=await h(e);o.emit({type:"step",step:c,status:"start",message:`Creating the group ${n}...`});let t=await I(s,{name:n,description:r.description});o.emit({type:"step",step:c,status:"ok",message:`Created ${t.name}`,data:{groupId:t.id}}),o.emit({type:"done",message:`Created the group ${t.name} (${t.id}) in ${s.organization.name}.`,data:{organization:s.organization,group:$(t),next:[{command:`${y} workspace group members ${T(t.name)} --add <email>`,note:"who is in it"},{command:`${y} workspace group apps ${T(t.name)} --add <app>`,note:"which apps it opens"}]}})}var T=e=>/^[\w.-]+$/.test(e)?e:`'${e.replace(/'/g,"'\\''")}'`;async function R(e,n){let{out:o,flags:r}=e;if(r.name===void 0&&r.description===void 0)throw new S("NOTHING_TO_SET","Nothing to set: give --name or --description");let{ws:s}=await h(e);o.emit({type:"step",step:c,status:"start",message:`Updating ${n}...`});let t=await z(s,n,{name:r.name,description:r.description});o.emit({type:"step",step:c,status:"ok",message:`Updated ${t.name}`,data:{groupId:t.id}}),o.emit({type:"done",message:`${t.name} (${t.id}): ${t.description?`"${t.description}"`:"no description"}.`,data:{organization:s.organization,group:$(t)}})}async function L(e,n){let{out:o,flags:r}=e,{ws:s}=await h(e),t=await C(s,n);await P({yes:r.yes,interactive:D(e),confirm:e.confirm,question:`Delete the group ${t.name}?`,unattended:"Deleting a group needs confirmation at a terminal, or --yes",context:[`It has ${g(t.memberCount,"member")} and opens ${g(t.appCount,"app")}; what it granted ends with it.`],cancelled:"Cancelled. Nothing deleted.",data:{groupId:t.id,name:t.name}}),o.emit({type:"step",step:c,status:"start",message:`Deleting ${t.name}...`}),await A(s,t.id),o.emit({type:"step",step:c,status:"ok",message:`Deleted ${t.name}`,data:{groupId:t.id}});let i=[`Deleted the group ${t.name} from ${s.organization.name}.`,`Its ${g(t.memberCount,"member")} keep their direct grants and other groups; the ${g(t.appCount,"app")} it opened are no longer open through it.`];o.emit({type:"done",message:i.join(`
3
3
  `),display:[i[0],u.dim(i[1])].join(`
4
4
  `),data:{organization:s.organization,group:$(t)}})}async function q(e,n){let{out:o,flags:r}=e,{change:s}=G(r),{ws:t}=await h(e),i=await C(t,n),p=[],m=[],d;s?(o.emit({type:"step",step:c,status:"start",message:`Changing who is in ${i.name}...`}),{added:p,removed:m,members:d}=await x(t,i,s),o.emit({type:"step",step:c,status:"ok",message:`${i.name}: ${g(p.length,"member")} added, ${m.length} removed`,data:{groupId:i.id,added:p.length,removed:m.length}})):d=await O(t,i);let l=d.filter(a=>a.inGroup),b=f(["EMAIL","ROLE","STATUS","IN GROUP"],d.map(a=>[a.email,a.primaryRole??a.role,M(a),a.inGroup?u.green("yes"):u.dim("no")])),k=s?`${i.name}: added ${p.length>0?p.map(a=>a.email).join(", "):"nobody"}, removed ${m.length>0?m.map(a=>a.email).join(", "):"nobody"}; ${g(l.length,"member")} in it now.`:`${g(l.length,"member")} in ${i.name}, of ${d.length} in ${t.organization.name}.`;o.emit({type:"done",message:k,display:[k,b.join(`