create-hq 10.10.0 → 10.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commands/{team-sync.md → sync-team.md} +167 -6
- package/dist/__tests__/auth.test.js +176 -186
- package/dist/__tests__/auth.test.js.map +1 -1
- package/dist/__tests__/scaffold.test.js +5 -3
- package/dist/__tests__/scaffold.test.js.map +1 -1
- package/dist/auth.d.ts +57 -129
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +81 -370
- package/dist/auth.js.map +1 -1
- package/dist/fetch-template.d.ts +7 -2
- package/dist/fetch-template.d.ts.map +1 -1
- package/dist/fetch-template.js +27 -15
- package/dist/fetch-template.js.map +1 -1
- package/dist/index.js +7 -17
- package/dist/index.js.map +1 -1
- package/dist/packages.d.ts.map +1 -1
- package/dist/packages.js +1 -1
- package/dist/packages.js.map +1 -1
- package/dist/recommended-packages.d.ts +93 -0
- package/dist/recommended-packages.d.ts.map +1 -0
- package/dist/recommended-packages.js +221 -0
- package/dist/recommended-packages.js.map +1 -0
- package/dist/scaffold.d.ts +4 -2
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +127 -232
- package/dist/scaffold.js.map +1 -1
- package/dist/ui.d.ts +0 -17
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +0 -45
- package/dist/ui.js.map +1 -1
- package/package.json +2 -1
- package/dist/admin-onboarding.d.ts +0 -44
- package/dist/admin-onboarding.d.ts.map +0 -1
- package/dist/admin-onboarding.js +0 -530
- package/dist/admin-onboarding.js.map +0 -1
- package/dist/company-template.d.ts +0 -34
- package/dist/company-template.d.ts.map +0 -1
- package/dist/company-template.js +0 -142
- package/dist/company-template.js.map +0 -1
- package/dist/invite-command.d.ts +0 -10
- package/dist/invite-command.d.ts.map +0 -1
- package/dist/invite-command.js +0 -110
- package/dist/invite-command.js.map +0 -1
- package/dist/invite.d.ts +0 -91
- package/dist/invite.d.ts.map +0 -1
- package/dist/invite.js +0 -230
- package/dist/invite.js.map +0 -1
- package/dist/join-flow.d.ts +0 -32
- package/dist/join-flow.d.ts.map +0 -1
- package/dist/join-flow.js +0 -315
- package/dist/join-flow.js.map +0 -1
- package/dist/team-setup.d.ts +0 -83
- package/dist/team-setup.d.ts.map +0 -1
- package/dist/team-setup.js +0 -353
- package/dist/team-setup.js.map +0 -1
- package/dist/teams-flow.d.ts +0 -41
- package/dist/teams-flow.d.ts.map +0 -1
- package/dist/teams-flow.js +0 -173
- package/dist/teams-flow.js.map +0 -1
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAiB,MAAM,KAAK,CAAC;AAEpC,gFAAgF;AAEhF,MAAM,UAAU,MAAM,CAAC,gBAAyB,EAAE,SAAkB;IAClE,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;IACpB,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO;IAE9B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iCAAiC,CAAC,GAAG,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,uCAAuC,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,4DAA4D,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kEAAkE,CAAC,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,gBAAgB,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,gBAAgB,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,MAAM,YAAY,GAAa;IAC7B,8BAA8B;IAC9B,4CAA4C;IAC5C,+BAA+B;IAC/B,qCAAqC;IACrC,mCAAmC;IACnC,0BAA0B;IAC1B,8BAA8B;IAC9B,iCAAiC;IACjC,yBAAyB;IACzB,0BAA0B;IAC1B,iCAAiC;IACjC,+BAA+B;IAC/B,4BAA4B;IAC5B,mCAAmC;IACnC,iCAAiC;CAClC,CAAC;AAEF,IAAI,aAAa,GAAG,CAAC,CAAC;AAEtB,SAAS,cAAc;IACrB,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9D,aAAa,EAAE,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gFAAgF;AAEhF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;AACxC,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0C,CAAC;AAEzE,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,KAAK,EAAE,CAAC;QACV,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,KAAa,EACb,MAAiD;IAEjD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACpD,MAAM;QAER,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,2CAA2C;YAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,QAAQ;gBAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC9B,aAAa,CAAC,KAAK,CAAC,CAAC;YAErB,MAAM,OAAO,GAAG,GAAG,CAAC;gBAClB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;gBACxB,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE,MAAM;aACd,CAAC,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE7B,kEAAkE;YAClE,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;oBAC7B,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC/C,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,EAAE,CAAC;gBACN,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,EAAE,EAAE,CAAC;gBACP,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5B,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACxD,CAAC;YACD,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,IAAY;IAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,OAAO,EAAE,CAAC;QACZ,uEAAuE;QACvE,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,+EAA+E;AAE/E,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,KAAa,EAAE,KAAa;IACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC;IAE/C,6DAA6D;IAC7D,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,KAAa;IAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK,EAAE,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7F,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;AAC7C,CAAC;AAmBD,MAAM,UAAU,eAAe,CAAC,IAA4B;IAC1D,MAAM,CAAC,GAAG,EAAE,CAAC;IACb,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7F,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAEhC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACvF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QACzG,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,MAAM,CAAC,GAAG,EAAE,CAAC;IACb,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,GAAW,EAAE,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7F,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACvF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-hq",
|
|
3
|
-
"version": "10.
|
|
3
|
+
"version": "10.12.0",
|
|
4
4
|
"description": "Create a new HQ by Indigo — Personal OS for AI Workers",
|
|
5
5
|
"bin": {
|
|
6
6
|
"create-hq": "./dist/index.js"
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"test:containers": "vitest run test/container.test.ts"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
+
"@indigoai-us/hq-cloud": "^5.1.9",
|
|
21
22
|
"chalk": "^5.3.0",
|
|
22
23
|
"commander": "^12.1.0",
|
|
23
24
|
"fs-extra": "^11.2.0",
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Admin onboarding flow — for users creating a brand new HQ team.
|
|
3
|
-
*
|
|
4
|
-
* Steps:
|
|
5
|
-
* 1. Ensure a `gh` CLI token for org discovery (prompt login if needed)
|
|
6
|
-
* 2. List ALL user's GitHub orgs via gh token (full visibility)
|
|
7
|
-
* 3. Let user pick an existing org or create a new one (browser hand-off)
|
|
8
|
-
* 4. Verify the HQ App is installed on the chosen org (browser hand-off if not)
|
|
9
|
-
* 5. Prompt for team name (default = org display name)
|
|
10
|
-
* 6. Create the {org}/hq private repo
|
|
11
|
-
* 7. Seed the repo locally with the company template + push
|
|
12
|
-
* 8. Clone the repo into companies/{slug}/ as a nested git
|
|
13
|
-
* 9. Return team metadata for the orientation summary
|
|
14
|
-
*/
|
|
15
|
-
import { type GitHubAuth } from "./auth.js";
|
|
16
|
-
import { type TeamMetadata } from "./company-template.js";
|
|
17
|
-
export interface AdminOnboardingResult {
|
|
18
|
-
team: TeamMetadata;
|
|
19
|
-
/** Local path where the team repo was cloned. */
|
|
20
|
-
companyDir: string;
|
|
21
|
-
/** GitHub HTML URL for the new team repo. */
|
|
22
|
-
repoHtmlUrl: string;
|
|
23
|
-
}
|
|
24
|
-
export declare function slugify(input: string): string;
|
|
25
|
-
/**
|
|
26
|
-
* Run the admin onboarding flow.
|
|
27
|
-
*
|
|
28
|
-
* @param preAuth - Pre-existing App auth (from "existing" path), or null
|
|
29
|
-
* if coming from the "new" path (auth deferred until after org selection)
|
|
30
|
-
* @param hqRoot - Local HQ root directory (where companies/ lives)
|
|
31
|
-
* @param hqVersion - HQ template version (for team metadata)
|
|
32
|
-
*/
|
|
33
|
-
export declare function runAdminOnboarding(preAuth: GitHubAuth | null, hqRoot: string, hqVersion: string): Promise<AdminOnboardingResult | null>;
|
|
34
|
-
/**
|
|
35
|
-
* Interactive invite generation for a single member. Prompts for email,
|
|
36
|
-
* sends org invite, generates token, and prints instructions.
|
|
37
|
-
*/
|
|
38
|
-
export declare function generateInviteInteractive(auth: GitHubAuth, meta: TeamMetadata, cloneUrl: string): Promise<void>;
|
|
39
|
-
/**
|
|
40
|
-
* Invite loop — asks "Invite a team member?" and repeats until the admin
|
|
41
|
-
* says no. Used after team creation and from the standalone invite command.
|
|
42
|
-
*/
|
|
43
|
-
export declare function inviteLoop(auth: GitHubAuth, meta: TeamMetadata, cloneUrl: string): Promise<void>;
|
|
44
|
-
//# sourceMappingURL=admin-onboarding.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin-onboarding.d.ts","sourceRoot":"","sources":["../src/admin-onboarding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,OAAO,EACL,KAAK,UAAU,EAOhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAwChF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AA6MD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM7C;AAID;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,UAAU,GAAG,IAAI,EAC1B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAySvC;AAID;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
package/dist/admin-onboarding.js
DELETED
|
@@ -1,530 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Admin onboarding flow — for users creating a brand new HQ team.
|
|
3
|
-
*
|
|
4
|
-
* Steps:
|
|
5
|
-
* 1. Ensure a `gh` CLI token for org discovery (prompt login if needed)
|
|
6
|
-
* 2. List ALL user's GitHub orgs via gh token (full visibility)
|
|
7
|
-
* 3. Let user pick an existing org or create a new one (browser hand-off)
|
|
8
|
-
* 4. Verify the HQ App is installed on the chosen org (browser hand-off if not)
|
|
9
|
-
* 5. Prompt for team name (default = org display name)
|
|
10
|
-
* 6. Create the {org}/hq private repo
|
|
11
|
-
* 7. Seed the repo locally with the company template + push
|
|
12
|
-
* 8. Clone the repo into companies/{slug}/ as a nested git
|
|
13
|
-
* 9. Return team metadata for the orientation summary
|
|
14
|
-
*/
|
|
15
|
-
import * as fs from "fs";
|
|
16
|
-
import * as path from "path";
|
|
17
|
-
import * as os from "os";
|
|
18
|
-
import * as crypto from "crypto";
|
|
19
|
-
import { execSync } from "child_process";
|
|
20
|
-
import { createInterface } from "readline";
|
|
21
|
-
import chalk from "chalk";
|
|
22
|
-
import { HQ_GITHUB_APP_SLUG, githubApi, openBrowser, getGhCliToken, fetchAdminOrgsWithToken, startGitHubDeviceFlow, } from "./auth.js";
|
|
23
|
-
import { writeCompanyTemplate } from "./company-template.js";
|
|
24
|
-
import { stepStatus, success, warn, info } from "./ui.js";
|
|
25
|
-
import { linkTeamCommands, installTeamCommands } from "./team-setup.js";
|
|
26
|
-
import { encodeInviteToken, printInviteSummary, openInviteEmail, formatInviteMessage, copyToClipboard, sendOrgInviteByEmail, } from "./invite.js";
|
|
27
|
-
// ─── Prompt helpers ─────────────────────────────────────────────────────────
|
|
28
|
-
function prompt(question, defaultVal) {
|
|
29
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
30
|
-
const suffix = defaultVal ? ` (${defaultVal})` : "";
|
|
31
|
-
return new Promise((resolve) => {
|
|
32
|
-
rl.question(` ? ${question}${suffix} `, (answer) => {
|
|
33
|
-
rl.close();
|
|
34
|
-
resolve(answer.trim() || defaultVal || "");
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
function pause(message) {
|
|
39
|
-
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
40
|
-
return new Promise((resolve) => {
|
|
41
|
-
rl.question(` ${message} `, () => {
|
|
42
|
-
rl.close();
|
|
43
|
-
resolve();
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
// ─── GitHub helpers ─────────────────────────────────────────────────────────
|
|
48
|
-
/**
|
|
49
|
-
* Ensure we have a `gh` CLI token for org discovery.
|
|
50
|
-
*
|
|
51
|
-
* The GitHub App user-to-server token can only see orgs where the App is
|
|
52
|
-
* already installed — a chicken-and-egg problem when the user wants to pick
|
|
53
|
-
* an org to install the App on. The `gh` CLI token (OAuth with `read:org`)
|
|
54
|
-
* sees ALL the user's orgs regardless of App installations.
|
|
55
|
-
*
|
|
56
|
-
* Flow:
|
|
57
|
-
* 1. Try `gh auth token` — if it works, we're done
|
|
58
|
-
* 2. If `gh` isn't installed or not logged in, prompt the user to log in
|
|
59
|
-
* 3. Retry after they confirm — if still no token, return null (caller
|
|
60
|
-
* will guide user to create an org or abort)
|
|
61
|
-
*/
|
|
62
|
-
async function ensureGhToken() {
|
|
63
|
-
const existing = getGhCliToken();
|
|
64
|
-
if (existing)
|
|
65
|
-
return existing;
|
|
66
|
-
// gh not available or not logged in — guide the user
|
|
67
|
-
console.log();
|
|
68
|
-
info("HQ needs access to your GitHub organizations to continue.");
|
|
69
|
-
info("The fastest way is to sign into the GitHub CLI:");
|
|
70
|
-
console.log();
|
|
71
|
-
console.log(chalk.cyan(" gh auth login"));
|
|
72
|
-
console.log();
|
|
73
|
-
await pause("Run that command in another terminal, then press Enter...");
|
|
74
|
-
// Retry after user says they logged in
|
|
75
|
-
const token = getGhCliToken();
|
|
76
|
-
if (token)
|
|
77
|
-
return token;
|
|
78
|
-
// Still no luck — one more attempt with installation help
|
|
79
|
-
console.log();
|
|
80
|
-
info("Still can't detect a GitHub CLI session.");
|
|
81
|
-
info("If you don't have the GitHub CLI installed:");
|
|
82
|
-
console.log(chalk.cyan(" https://cli.github.com"));
|
|
83
|
-
console.log();
|
|
84
|
-
const retry = await prompt("Try again after installing/logging in? (Y/n)", "y");
|
|
85
|
-
if (!retry.toLowerCase().startsWith("y"))
|
|
86
|
-
return null;
|
|
87
|
-
await pause("Press Enter when ready...");
|
|
88
|
-
return getGhCliToken();
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Fetch the orgs the user is an active admin of, using their `gh` CLI token.
|
|
92
|
-
*
|
|
93
|
-
* Always uses a user-scoped token (from `gh auth token`) so we see ALL
|
|
94
|
-
* the user's orgs — not just orgs where the HQ App is installed.
|
|
95
|
-
* Returns an empty array if the token is unavailable or the user has no orgs.
|
|
96
|
-
*/
|
|
97
|
-
async function fetchAdminOrgs(ghToken) {
|
|
98
|
-
return fetchAdminOrgsWithToken(ghToken);
|
|
99
|
-
}
|
|
100
|
-
async function fetchInstallations(auth) {
|
|
101
|
-
const data = await githubApi("/user/installations?per_page=100", auth);
|
|
102
|
-
return data.installations ?? [];
|
|
103
|
-
}
|
|
104
|
-
function findHqInstallation(installations, orgLogin) {
|
|
105
|
-
return (installations.find((i) => i.app_slug === HQ_GITHUB_APP_SLUG &&
|
|
106
|
-
i.account?.login?.toLowerCase() === orgLogin.toLowerCase()) ?? null);
|
|
107
|
-
}
|
|
108
|
-
async function createOrgRepo(auth, orgLogin, repoName, description) {
|
|
109
|
-
return githubApi(`/orgs/${orgLogin}/repos`, auth, {
|
|
110
|
-
method: "POST",
|
|
111
|
-
body: JSON.stringify({
|
|
112
|
-
name: repoName,
|
|
113
|
-
private: true,
|
|
114
|
-
description,
|
|
115
|
-
auto_init: false,
|
|
116
|
-
has_issues: true,
|
|
117
|
-
has_projects: false,
|
|
118
|
-
has_wiki: false,
|
|
119
|
-
}),
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
async function getExistingRepo(auth, orgLogin, repoName) {
|
|
123
|
-
try {
|
|
124
|
-
return await githubApi(`/repos/${orgLogin}/${repoName}`, auth);
|
|
125
|
-
}
|
|
126
|
-
catch {
|
|
127
|
-
return null;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
// ─── Git helpers ────────────────────────────────────────────────────────────
|
|
131
|
-
/**
|
|
132
|
-
* Run a git command, embedding the user's GitHub token via a one-shot
|
|
133
|
-
* credential helper so the token never appears in argv or remote URLs.
|
|
134
|
-
*
|
|
135
|
-
* The token is passed via an environment variable to a tiny inline askpass
|
|
136
|
-
* script written to a temp file, which git invokes via GIT_ASKPASS.
|
|
137
|
-
*/
|
|
138
|
-
function runGitWithToken(args, cwd, auth, inputEnv = {}) {
|
|
139
|
-
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-git-"));
|
|
140
|
-
const isWindows = process.platform === "win32";
|
|
141
|
-
const askpassPath = path.join(tmpDir, isWindows ? "askpass.cmd" : "askpass.sh");
|
|
142
|
-
try {
|
|
143
|
-
if (isWindows) {
|
|
144
|
-
// Windows batch script: stdout the token (for Password) or username
|
|
145
|
-
fs.writeFileSync(askpassPath, `@echo off\nif "%~1"=="" (echo %GIT_TOKEN%) else (echo %GIT_TOKEN%)\n`, "utf-8");
|
|
146
|
-
}
|
|
147
|
-
else {
|
|
148
|
-
fs.writeFileSync(askpassPath, `#!/bin/sh\necho "$GIT_TOKEN"\n`, "utf-8");
|
|
149
|
-
fs.chmodSync(askpassPath, 0o700);
|
|
150
|
-
}
|
|
151
|
-
execSync(`git -c credential.helper= ${args.join(" ")}`, {
|
|
152
|
-
cwd,
|
|
153
|
-
stdio: "pipe",
|
|
154
|
-
env: {
|
|
155
|
-
...process.env,
|
|
156
|
-
...inputEnv,
|
|
157
|
-
GIT_TOKEN: auth.access_token,
|
|
158
|
-
GIT_ASKPASS: askpassPath,
|
|
159
|
-
GIT_TERMINAL_PROMPT: "0",
|
|
160
|
-
// Prevent any system credential helper from caching the token
|
|
161
|
-
GCM_INTERACTIVE: "never",
|
|
162
|
-
},
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
finally {
|
|
166
|
-
try {
|
|
167
|
-
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
168
|
-
}
|
|
169
|
-
catch {
|
|
170
|
-
// ignore
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Build an HTTPS URL with the username embedded so git's askpass only
|
|
176
|
-
* needs to provide the password (the token). We use "x-access-token" as
|
|
177
|
-
* the username — GitHub's recommended convention for token auth.
|
|
178
|
-
*/
|
|
179
|
-
function tokenAuthUrl(cloneUrl) {
|
|
180
|
-
const u = new URL(cloneUrl);
|
|
181
|
-
u.username = "x-access-token";
|
|
182
|
-
// Don't put the token in the URL — askpass handles it
|
|
183
|
-
return u.toString();
|
|
184
|
-
}
|
|
185
|
-
// ─── Slug helper ────────────────────────────────────────────────────────────
|
|
186
|
-
export function slugify(input) {
|
|
187
|
-
return input
|
|
188
|
-
.toLowerCase()
|
|
189
|
-
.replace(/[^a-z0-9-]+/g, "-")
|
|
190
|
-
.replace(/^-+|-+$/g, "")
|
|
191
|
-
.slice(0, 50) || "team";
|
|
192
|
-
}
|
|
193
|
-
// ─── Main flow ──────────────────────────────────────────────────────────────
|
|
194
|
-
/**
|
|
195
|
-
* Run the admin onboarding flow.
|
|
196
|
-
*
|
|
197
|
-
* @param preAuth - Pre-existing App auth (from "existing" path), or null
|
|
198
|
-
* if coming from the "new" path (auth deferred until after org selection)
|
|
199
|
-
* @param hqRoot - Local HQ root directory (where companies/ lives)
|
|
200
|
-
* @param hqVersion - HQ template version (for team metadata)
|
|
201
|
-
*/
|
|
202
|
-
export async function runAdminOnboarding(preAuth, hqRoot, hqVersion) {
|
|
203
|
-
console.log();
|
|
204
|
-
console.log(chalk.bold(" Create a new HQ team"));
|
|
205
|
-
console.log();
|
|
206
|
-
// 1. Get a gh CLI token for org discovery (sees ALL user's orgs)
|
|
207
|
-
const ghToken = await ensureGhToken();
|
|
208
|
-
if (!ghToken) {
|
|
209
|
-
warn("GitHub CLI is needed to list your organizations.");
|
|
210
|
-
info("Install it from " + chalk.cyan("https://cli.github.com") + " then run " + chalk.cyan("gh auth login"));
|
|
211
|
-
info("After that, run create-hq again.");
|
|
212
|
-
return null;
|
|
213
|
-
}
|
|
214
|
-
// 2. Fetch admin orgs using the gh token
|
|
215
|
-
const orgsLabel = "Looking up your GitHub organizations";
|
|
216
|
-
stepStatus(orgsLabel, "running");
|
|
217
|
-
let orgs = await fetchAdminOrgs(ghToken);
|
|
218
|
-
stepStatus(orgsLabel, "done");
|
|
219
|
-
// 3. Pick or create org
|
|
220
|
-
let chosenOrg = null;
|
|
221
|
-
while (!chosenOrg) {
|
|
222
|
-
if (orgs.length === 0) {
|
|
223
|
-
console.log();
|
|
224
|
-
info("You aren't an admin of any GitHub organization yet.");
|
|
225
|
-
info("HQ Teams need a GitHub org to host the shared workspace repo.");
|
|
226
|
-
console.log();
|
|
227
|
-
const create = await prompt("Open browser to create one now? (Y/n)", "y");
|
|
228
|
-
if (!create.toLowerCase().startsWith("y")) {
|
|
229
|
-
warn("Skipping team creation — you can run create-hq again after creating an org.");
|
|
230
|
-
return null;
|
|
231
|
-
}
|
|
232
|
-
openBrowser("https://github.com/organizations/new");
|
|
233
|
-
await pause("Press Enter when you have finished creating the org...");
|
|
234
|
-
stepStatus("Re-checking organizations", "running");
|
|
235
|
-
orgs = await fetchAdminOrgs(ghToken);
|
|
236
|
-
stepStatus("Re-checking organizations", "done");
|
|
237
|
-
continue;
|
|
238
|
-
}
|
|
239
|
-
console.log();
|
|
240
|
-
console.log(chalk.bold(" Choose an organization:"));
|
|
241
|
-
for (let i = 0; i < orgs.length; i++) {
|
|
242
|
-
console.log(chalk.cyan(` [${i + 1}] `) + chalk.white(orgs[i].login));
|
|
243
|
-
}
|
|
244
|
-
console.log(chalk.cyan(` [${orgs.length + 1}] `) + chalk.dim("Create a new GitHub organization"));
|
|
245
|
-
console.log();
|
|
246
|
-
const answer = await prompt(`Select (1-${orgs.length + 1})`, "1");
|
|
247
|
-
const idx = parseInt(answer, 10) - 1;
|
|
248
|
-
if (idx === orgs.length) {
|
|
249
|
-
// Create new org
|
|
250
|
-
openBrowser("https://github.com/organizations/new");
|
|
251
|
-
await pause("Press Enter when you have finished creating the org...");
|
|
252
|
-
stepStatus("Re-checking organizations", "running");
|
|
253
|
-
orgs = await fetchAdminOrgs(ghToken);
|
|
254
|
-
stepStatus("Re-checking organizations", "done");
|
|
255
|
-
continue;
|
|
256
|
-
}
|
|
257
|
-
if (idx < 0 || idx >= orgs.length) {
|
|
258
|
-
warn("Invalid selection. Try again.");
|
|
259
|
-
continue;
|
|
260
|
-
}
|
|
261
|
-
chosenOrg = orgs[idx];
|
|
262
|
-
}
|
|
263
|
-
// 4. Authenticate with the HQ App (deferred until after org selection)
|
|
264
|
-
// The App token is needed for installation checks and repo management.
|
|
265
|
-
// By deferring, we avoid the chicken-and-egg: user sees all orgs first
|
|
266
|
-
// (via gh token), picks one, THEN authorizes the App for that org.
|
|
267
|
-
let auth = preAuth;
|
|
268
|
-
if (!auth) {
|
|
269
|
-
console.log();
|
|
270
|
-
info(`Now authorize the HQ App to manage repos in ${chalk.cyan(chosenOrg.login)}.`);
|
|
271
|
-
try {
|
|
272
|
-
auth = await startGitHubDeviceFlow();
|
|
273
|
-
}
|
|
274
|
-
catch (err) {
|
|
275
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
276
|
-
warn(`GitHub App authorization failed: ${message}`);
|
|
277
|
-
return null;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
// 5. Verify HQ App is installed on the chosen org
|
|
281
|
-
let installation = null;
|
|
282
|
-
while (!installation) {
|
|
283
|
-
const installLabel = `Checking HQ App on ${chosenOrg.login}`;
|
|
284
|
-
stepStatus(installLabel, "running");
|
|
285
|
-
const installations = await fetchInstallations(auth);
|
|
286
|
-
installation = findHqInstallation(installations, chosenOrg.login);
|
|
287
|
-
if (installation) {
|
|
288
|
-
stepStatus(installLabel, "done");
|
|
289
|
-
break;
|
|
290
|
-
}
|
|
291
|
-
stepStatus(installLabel, "failed");
|
|
292
|
-
console.log();
|
|
293
|
-
info(`The HQ GitHub App isn't installed on ${chalk.cyan(chosenOrg.login)} yet.`);
|
|
294
|
-
info("Installing it gives HQ permission to manage the team workspace repo.");
|
|
295
|
-
console.log();
|
|
296
|
-
console.log();
|
|
297
|
-
info("We'll open the HQ App install page.");
|
|
298
|
-
info(chalk.bold(`Select "${chosenOrg.login}" from the list of organizations.`));
|
|
299
|
-
console.log();
|
|
300
|
-
const openIt = await prompt("Open the install page now? (Y/n)", "y");
|
|
301
|
-
if (openIt.toLowerCase().startsWith("y")) {
|
|
302
|
-
// /installations/select_target always shows the org picker, even when
|
|
303
|
-
// the App is already installed on a different org (unlike /installations/new
|
|
304
|
-
// which redirects to the existing installation's config page).
|
|
305
|
-
openBrowser(`https://github.com/apps/${HQ_GITHUB_APP_SLUG}/installations/select_target`);
|
|
306
|
-
}
|
|
307
|
-
await pause("Press Enter when the App has been installed...");
|
|
308
|
-
}
|
|
309
|
-
// 6. Prompt for team name
|
|
310
|
-
console.log();
|
|
311
|
-
const defaultName = chosenOrg.login;
|
|
312
|
-
const teamName = (await prompt("Team name", defaultName)) || defaultName;
|
|
313
|
-
const teamSlug = slugify(teamName);
|
|
314
|
-
const teamId = crypto.randomUUID();
|
|
315
|
-
const meta = {
|
|
316
|
-
team_id: teamId,
|
|
317
|
-
team_name: teamName,
|
|
318
|
-
team_slug: teamSlug,
|
|
319
|
-
org_login: chosenOrg.login,
|
|
320
|
-
org_id: chosenOrg.id,
|
|
321
|
-
created_by: auth.login,
|
|
322
|
-
created_at: new Date().toISOString(),
|
|
323
|
-
hq_version: hqVersion,
|
|
324
|
-
};
|
|
325
|
-
// 7. Create the {org}/hq-{teamSlug} repo
|
|
326
|
-
const repoName = `hq-${teamSlug}`;
|
|
327
|
-
const repoLabel = `Creating ${chosenOrg.login}/${repoName} private repo`;
|
|
328
|
-
stepStatus(repoLabel, "running");
|
|
329
|
-
let repo = null;
|
|
330
|
-
try {
|
|
331
|
-
repo = await createOrgRepo(auth, chosenOrg.login, repoName, `HQ Teams workspace for ${teamName}`);
|
|
332
|
-
stepStatus(repoLabel, "done");
|
|
333
|
-
}
|
|
334
|
-
catch (err) {
|
|
335
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
336
|
-
if (message.includes("422") && /already exists/i.test(message)) {
|
|
337
|
-
// Repo already exists — could be from a prior run. Confirm before reusing.
|
|
338
|
-
stepStatus(repoLabel, "done");
|
|
339
|
-
console.log();
|
|
340
|
-
info(`${chosenOrg.login}/${repoName} already exists.`);
|
|
341
|
-
const reuse = await prompt("Reuse this repo? (Y/n)", "y");
|
|
342
|
-
if (!reuse.toLowerCase().startsWith("y")) {
|
|
343
|
-
warn("Aborting — choose a different team name next time to avoid the conflict.");
|
|
344
|
-
return null;
|
|
345
|
-
}
|
|
346
|
-
repo = await getExistingRepo(auth, chosenOrg.login, repoName);
|
|
347
|
-
if (!repo) {
|
|
348
|
-
stepStatus(repoLabel, "failed");
|
|
349
|
-
warn(`Could not load existing ${chosenOrg.login}/${repoName}: ${message}`);
|
|
350
|
-
return null;
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
else {
|
|
354
|
-
stepStatus(repoLabel, "failed");
|
|
355
|
-
warn(`Could not create repo: ${message}`);
|
|
356
|
-
return null;
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
// 8. Seed locally and push
|
|
360
|
-
const seedLabel = "Seeding team workspace";
|
|
361
|
-
stepStatus(seedLabel, "running");
|
|
362
|
-
const seedDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-seed-"));
|
|
363
|
-
try {
|
|
364
|
-
// git init in seed dir
|
|
365
|
-
execSync(`git init -b main`, { cwd: seedDir, stdio: "pipe" });
|
|
366
|
-
execSync(`git config user.email "${auth.email || `${auth.login}@users.noreply.github.com`}"`, {
|
|
367
|
-
cwd: seedDir,
|
|
368
|
-
stdio: "pipe",
|
|
369
|
-
});
|
|
370
|
-
execSync(`git config user.name "${auth.name || auth.login}"`, {
|
|
371
|
-
cwd: seedDir,
|
|
372
|
-
stdio: "pipe",
|
|
373
|
-
});
|
|
374
|
-
writeCompanyTemplate(seedDir, meta);
|
|
375
|
-
execSync(`git add -A`, { cwd: seedDir, stdio: "pipe" });
|
|
376
|
-
execSync(`git commit -m "chore: bootstrap HQ team workspace"`, { cwd: seedDir, stdio: "pipe" });
|
|
377
|
-
const remoteUrl = tokenAuthUrl(repo.clone_url);
|
|
378
|
-
execSync(`git remote add origin "${remoteUrl}"`, { cwd: seedDir, stdio: "pipe" });
|
|
379
|
-
runGitWithToken(["push", "-u", "origin", "main"], seedDir, auth);
|
|
380
|
-
stepStatus(seedLabel, "done");
|
|
381
|
-
}
|
|
382
|
-
catch (err) {
|
|
383
|
-
stepStatus(seedLabel, "failed");
|
|
384
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
385
|
-
warn(`Failed to seed team repo: ${message}`);
|
|
386
|
-
return null;
|
|
387
|
-
}
|
|
388
|
-
finally {
|
|
389
|
-
try {
|
|
390
|
-
fs.rmSync(seedDir, { recursive: true, force: true });
|
|
391
|
-
}
|
|
392
|
-
catch {
|
|
393
|
-
// ignore
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
// 9. Clone into companies/{slug}/
|
|
397
|
-
const companiesDir = path.join(hqRoot, "companies");
|
|
398
|
-
if (!fs.existsSync(companiesDir)) {
|
|
399
|
-
fs.mkdirSync(companiesDir, { recursive: true });
|
|
400
|
-
}
|
|
401
|
-
const companyDir = path.join(companiesDir, teamSlug);
|
|
402
|
-
if (fs.existsSync(companyDir) && fs.readdirSync(companyDir).length > 0) {
|
|
403
|
-
warn(`companies/${teamSlug}/ already exists and is not empty — skipping clone.`);
|
|
404
|
-
}
|
|
405
|
-
else {
|
|
406
|
-
const cloneLabel = `Cloning into companies/${teamSlug}`;
|
|
407
|
-
stepStatus(cloneLabel, "running");
|
|
408
|
-
try {
|
|
409
|
-
const remoteUrl = tokenAuthUrl(repo.clone_url);
|
|
410
|
-
runGitWithToken(["clone", `"${remoteUrl}"`, `"${companyDir}"`], companiesDir, auth);
|
|
411
|
-
// Strip token from the stored remote URL
|
|
412
|
-
execSync(`git remote set-url origin "${repo.clone_url}"`, {
|
|
413
|
-
cwd: companyDir,
|
|
414
|
-
stdio: "pipe",
|
|
415
|
-
});
|
|
416
|
-
stepStatus(cloneLabel, "done");
|
|
417
|
-
}
|
|
418
|
-
catch (err) {
|
|
419
|
-
stepStatus(cloneLabel, "failed");
|
|
420
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
421
|
-
warn(`Could not clone into companies/${teamSlug}/: ${message}`);
|
|
422
|
-
// Team repo was created on GitHub — still return success so the user
|
|
423
|
-
// gets the admin orientation (with repo URL) instead of generic next steps.
|
|
424
|
-
// They can clone manually later.
|
|
425
|
-
console.log();
|
|
426
|
-
success(`Team "${teamName}" created at ${repo.html_url}`);
|
|
427
|
-
info("Local clone failed — clone manually with:");
|
|
428
|
-
info(` git clone ${repo.clone_url} companies/${teamSlug}`);
|
|
429
|
-
// Still offer invite generation
|
|
430
|
-
await inviteLoop(auth, meta, repo.clone_url);
|
|
431
|
-
return {
|
|
432
|
-
team: meta,
|
|
433
|
-
companyDir,
|
|
434
|
-
repoHtmlUrl: repo.html_url,
|
|
435
|
-
};
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
// Install bundled team commands (invite, sync, promote)
|
|
439
|
-
const installed = installTeamCommands(hqRoot);
|
|
440
|
-
if (installed.length > 0) {
|
|
441
|
-
info(`Installed ${installed.length} team command${installed.length === 1 ? "" : "s"}: ${installed.join(", ")}`);
|
|
442
|
-
}
|
|
443
|
-
// Link team-distributed commands as slash commands
|
|
444
|
-
const symlinks = linkTeamCommands(hqRoot, teamSlug);
|
|
445
|
-
if (symlinks.linked.length > 0) {
|
|
446
|
-
info(`Linked ${symlinks.linked.length} team command${symlinks.linked.length === 1 ? "" : "s"}`);
|
|
447
|
-
}
|
|
448
|
-
console.log();
|
|
449
|
-
success(`Team "${teamName}" created — ${repo.html_url}`);
|
|
450
|
-
// 10. Offer to generate member invites
|
|
451
|
-
await inviteLoop(auth, meta, repo.clone_url);
|
|
452
|
-
return {
|
|
453
|
-
team: meta,
|
|
454
|
-
companyDir,
|
|
455
|
-
repoHtmlUrl: repo.html_url,
|
|
456
|
-
};
|
|
457
|
-
}
|
|
458
|
-
// ─── Invite generation (used by admin onboarding + standalone) ──────────────
|
|
459
|
-
/**
|
|
460
|
-
* Interactive invite generation for a single member. Prompts for email,
|
|
461
|
-
* sends org invite, generates token, and prints instructions.
|
|
462
|
-
*/
|
|
463
|
-
export async function generateInviteInteractive(auth, meta, cloneUrl) {
|
|
464
|
-
const payload = {
|
|
465
|
-
org: meta.org_login,
|
|
466
|
-
repo: `hq-${meta.team_slug}`,
|
|
467
|
-
slug: meta.team_slug,
|
|
468
|
-
teamName: meta.team_name,
|
|
469
|
-
cloneUrl,
|
|
470
|
-
invitedBy: auth.login,
|
|
471
|
-
};
|
|
472
|
-
const token = encodeInviteToken(payload);
|
|
473
|
-
// Ask for email — used for the mailto invite, not for API calls
|
|
474
|
-
const email = await prompt("New member's email (or press Enter to skip)");
|
|
475
|
-
printInviteSummary(payload, token, false, email || undefined);
|
|
476
|
-
// Copy invite message to clipboard
|
|
477
|
-
const msg = formatInviteMessage(payload, token, email || undefined);
|
|
478
|
-
const copied = copyToClipboard(msg);
|
|
479
|
-
// Try to open mailto: with pre-populated email (works well on macOS/first use)
|
|
480
|
-
if (email) {
|
|
481
|
-
openInviteEmail(payload, token, email);
|
|
482
|
-
}
|
|
483
|
-
// Always show clipboard status — mailto: is unreliable on Windows after first use
|
|
484
|
-
if (copied) {
|
|
485
|
-
success("Invite message copied to clipboard — if your email client didn't open, just paste into a new email and send.");
|
|
486
|
-
}
|
|
487
|
-
else if (!email) {
|
|
488
|
-
info("No email provided — share the invite message above via email, Slack, or text.");
|
|
489
|
-
}
|
|
490
|
-
// Send the GitHub org invite via API (required for the member to accept)
|
|
491
|
-
if (email) {
|
|
492
|
-
const result = await sendOrgInviteByEmail(auth, meta.org_login, email);
|
|
493
|
-
if (result.ok) {
|
|
494
|
-
success(`GitHub org invite sent to ${email}`);
|
|
495
|
-
}
|
|
496
|
-
else {
|
|
497
|
-
warn(`Could not send org invite automatically: ${result.error}`);
|
|
498
|
-
console.log();
|
|
499
|
-
info(`Send the invite manually (required for access):`);
|
|
500
|
-
info(` https://github.com/orgs/${meta.org_login}/people`);
|
|
501
|
-
info(` Click "Invite member" and enter: ${email}`);
|
|
502
|
-
}
|
|
503
|
-
}
|
|
504
|
-
else {
|
|
505
|
-
console.log();
|
|
506
|
-
info(`Send them a GitHub org invite (required for access):`);
|
|
507
|
-
info(` https://github.com/orgs/${meta.org_login}/people`);
|
|
508
|
-
info(` Click "Invite member" and enter their email or GitHub username`);
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
/**
|
|
512
|
-
* Invite loop — asks "Invite a team member?" and repeats until the admin
|
|
513
|
-
* says no. Used after team creation and from the standalone invite command.
|
|
514
|
-
*/
|
|
515
|
-
export async function inviteLoop(auth, meta, cloneUrl) {
|
|
516
|
-
let first = true;
|
|
517
|
-
while (true) {
|
|
518
|
-
console.log();
|
|
519
|
-
const question = first
|
|
520
|
-
? "Invite a team member now? (Y/n)"
|
|
521
|
-
: "Invite another team member? (y/N)";
|
|
522
|
-
const defaultAnswer = first ? "y" : "n";
|
|
523
|
-
const answer = await prompt(question, defaultAnswer);
|
|
524
|
-
if (!answer.toLowerCase().startsWith("y"))
|
|
525
|
-
break;
|
|
526
|
-
await generateInviteInteractive(auth, meta, cloneUrl);
|
|
527
|
-
first = false;
|
|
528
|
-
}
|
|
529
|
-
}
|
|
530
|
-
//# sourceMappingURL=admin-onboarding.js.map
|