create-hq 10.1.0 → 10.7.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 (70) hide show
  1. package/dist/admin-onboarding.d.ts +42 -0
  2. package/dist/admin-onboarding.d.ts.map +1 -0
  3. package/dist/admin-onboarding.js +460 -0
  4. package/dist/admin-onboarding.js.map +1 -0
  5. package/dist/art.d.ts +17 -0
  6. package/dist/art.d.ts.map +1 -0
  7. package/dist/art.js +171 -0
  8. package/dist/art.js.map +1 -0
  9. package/dist/auth.d.ts +60 -23
  10. package/dist/auth.d.ts.map +1 -1
  11. package/dist/auth.js +219 -116
  12. package/dist/auth.js.map +1 -1
  13. package/dist/cloud.d.ts +26 -0
  14. package/dist/cloud.d.ts.map +1 -0
  15. package/dist/cloud.js +126 -0
  16. package/dist/cloud.js.map +1 -0
  17. package/dist/company-template.d.ts +34 -0
  18. package/dist/company-template.d.ts.map +1 -0
  19. package/dist/company-template.js +142 -0
  20. package/dist/company-template.js.map +1 -0
  21. package/dist/deps.d.ts +2 -0
  22. package/dist/deps.d.ts.map +1 -1
  23. package/dist/deps.js +42 -30
  24. package/dist/deps.js.map +1 -1
  25. package/dist/fetch-template.d.ts +2 -2
  26. package/dist/fetch-template.d.ts.map +1 -1
  27. package/dist/fetch-template.js +54 -38
  28. package/dist/fetch-template.js.map +1 -1
  29. package/dist/git.d.ts.map +1 -1
  30. package/dist/git.js +28 -4
  31. package/dist/git.js.map +1 -1
  32. package/dist/index.js +18 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/invite-command.d.ts +10 -0
  35. package/dist/invite-command.d.ts.map +1 -0
  36. package/dist/invite-command.js +110 -0
  37. package/dist/invite-command.js.map +1 -0
  38. package/dist/invite.d.ts +91 -0
  39. package/dist/invite.d.ts.map +1 -0
  40. package/dist/invite.js +230 -0
  41. package/dist/invite.js.map +1 -0
  42. package/dist/join-flow.d.ts +32 -0
  43. package/dist/join-flow.d.ts.map +1 -0
  44. package/dist/join-flow.js +194 -0
  45. package/dist/join-flow.js.map +1 -0
  46. package/dist/platform.d.ts +2 -2
  47. package/dist/platform.d.ts.map +1 -1
  48. package/dist/platform.js +14 -1
  49. package/dist/platform.js.map +1 -1
  50. package/dist/scaffold.d.ts +4 -1
  51. package/dist/scaffold.d.ts.map +1 -1
  52. package/dist/scaffold.js +152 -41
  53. package/dist/scaffold.js.map +1 -1
  54. package/dist/team-setup.d.ts +58 -0
  55. package/dist/team-setup.d.ts.map +1 -0
  56. package/dist/team-setup.js +237 -0
  57. package/dist/team-setup.js.map +1 -0
  58. package/dist/teams-flow.d.ts +36 -0
  59. package/dist/teams-flow.d.ts.map +1 -0
  60. package/dist/teams-flow.js +134 -0
  61. package/dist/teams-flow.js.map +1 -0
  62. package/dist/tui.d.ts +8 -0
  63. package/dist/tui.d.ts.map +1 -0
  64. package/dist/tui.js +86 -0
  65. package/dist/tui.js.map +1 -0
  66. package/dist/ui.d.ts +17 -0
  67. package/dist/ui.d.ts.map +1 -1
  68. package/dist/ui.js +45 -0
  69. package/dist/ui.js.map +1 -1
  70. package/package.json +1 -1
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Join-via-invite flow for HQ Teams members.
3
+ *
4
+ * When a member has an invite token (from an admin), this flow:
5
+ * 1. Decodes the token to get team coordinates
6
+ * 2. Authenticates via GitHub device flow
7
+ * 3. Checks org membership / repo access (waits if invite is pending)
8
+ * 4. Clones the team repo into companies/{slug}/
9
+ *
10
+ * This is the primary path for non-technical users who received an invite.
11
+ */
12
+ import * as fs from "fs";
13
+ import * as path from "path";
14
+ import * as os from "os";
15
+ import { execSync } from "child_process";
16
+ import { createInterface } from "readline";
17
+ import chalk from "chalk";
18
+ import { ensureCompanyStructure } from "./company-template.js";
19
+ import { stepStatus, success, warn, info, step } from "./ui.js";
20
+ import { decodeInviteToken, checkRepoAccess, } from "./invite.js";
21
+ // ─── Prompt helpers ─────────────────────────────────────────────────────────
22
+ function prompt(question, defaultVal) {
23
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
24
+ const suffix = defaultVal ? ` (${defaultVal})` : "";
25
+ return new Promise((resolve) => {
26
+ rl.question(` ? ${question}${suffix} `, (answer) => {
27
+ rl.close();
28
+ resolve(answer.trim() || defaultVal || "");
29
+ });
30
+ });
31
+ }
32
+ function pause(message) {
33
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
34
+ return new Promise((resolve) => {
35
+ rl.question(` ${message}`, () => {
36
+ rl.close();
37
+ resolve();
38
+ });
39
+ });
40
+ }
41
+ // ─── Git helpers (same as team-setup.ts / admin-onboarding.ts) ──────────────
42
+ function runGitWithToken(args, cwd, auth) {
43
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-git-"));
44
+ const isWindows = process.platform === "win32";
45
+ const askpassPath = path.join(tmpDir, isWindows ? "askpass.cmd" : "askpass.sh");
46
+ try {
47
+ if (isWindows) {
48
+ fs.writeFileSync(askpassPath, `@echo off\nif "%~1"=="" (echo %GIT_TOKEN%) else (echo %GIT_TOKEN%)\n`, "utf-8");
49
+ }
50
+ else {
51
+ fs.writeFileSync(askpassPath, `#!/bin/sh\necho "$GIT_TOKEN"\n`, "utf-8");
52
+ fs.chmodSync(askpassPath, 0o700);
53
+ }
54
+ execSync(`git -c credential.helper= ${args.join(" ")}`, {
55
+ cwd,
56
+ stdio: "pipe",
57
+ env: {
58
+ ...process.env,
59
+ GIT_TOKEN: auth.access_token,
60
+ GIT_ASKPASS: askpassPath,
61
+ GIT_TERMINAL_PROMPT: "0",
62
+ GCM_INTERACTIVE: "never",
63
+ },
64
+ });
65
+ }
66
+ finally {
67
+ try {
68
+ fs.rmSync(tmpDir, { recursive: true, force: true });
69
+ }
70
+ catch {
71
+ // ignore
72
+ }
73
+ }
74
+ }
75
+ function tokenAuthUrl(cloneUrl) {
76
+ const u = new URL(cloneUrl);
77
+ u.username = "x-access-token";
78
+ return u.toString();
79
+ }
80
+ // ─── Main flow ──────────────────────────────────────────────────────────────
81
+ /**
82
+ * Run the join-via-invite flow.
83
+ *
84
+ * @param auth - Authenticated GitHub user (already signed in)
85
+ * @param hqRoot - Local HQ root directory (where companies/ lives)
86
+ * @param token - The invite token string (hq_...) or raw base64
87
+ * @returns - Result on success, null on failure/abort
88
+ */
89
+ export async function runJoinByInvite(auth, hqRoot, token) {
90
+ // 1. Decode token
91
+ const payload = decodeInviteToken(token);
92
+ if (!payload) {
93
+ warn("Invalid invite code. Check that you copied it correctly and try again.");
94
+ return null;
95
+ }
96
+ console.log();
97
+ console.log(chalk.bold(" Joining a team"));
98
+ console.log();
99
+ console.log(` ${chalk.dim("Team:")} ${chalk.cyan(payload.teamName)}`);
100
+ console.log(` ${chalk.dim("Org:")} ${payload.org}`);
101
+ console.log(` ${chalk.dim("Invited by:")} @${payload.invitedBy}`);
102
+ console.log();
103
+ // 2. Check repo access (proves org membership + repo visibility)
104
+ const accessLabel = `Checking access to ${payload.org}/${payload.repo}`;
105
+ stepStatus(accessLabel, "running");
106
+ let hasAccess = await checkRepoAccess(auth, payload.org, payload.repo);
107
+ if (!hasAccess) {
108
+ stepStatus(accessLabel, "failed");
109
+ console.log();
110
+ // Guide the user to accept the org invite
111
+ info("You don't have access to this team's repository yet.");
112
+ console.log();
113
+ step("Check your email for a GitHub organization invite from " + chalk.cyan(payload.org));
114
+ step("Accept the invite, then come back here.");
115
+ console.log();
116
+ // Give them up to 3 chances to retry
117
+ for (let attempt = 1; attempt <= 3; attempt++) {
118
+ await pause(`Press Enter after accepting the invite (attempt ${attempt}/3)... `);
119
+ stepStatus(`Re-checking access (attempt ${attempt})`, "running");
120
+ hasAccess = await checkRepoAccess(auth, payload.org, payload.repo);
121
+ if (hasAccess) {
122
+ stepStatus(`Re-checking access (attempt ${attempt})`, "done");
123
+ break;
124
+ }
125
+ else {
126
+ stepStatus(`Re-checking access (attempt ${attempt})`, "failed");
127
+ if (attempt < 3) {
128
+ console.log();
129
+ info("Still no access. Make sure you:");
130
+ step(`Accepted the org invite from ${payload.org} (check email from GitHub)`);
131
+ step("Are signed in to GitHub with the same account you accepted the invite on");
132
+ console.log();
133
+ }
134
+ }
135
+ }
136
+ if (!hasAccess) {
137
+ console.log();
138
+ warn("Could not access the team repository after 3 attempts.");
139
+ info(`Your GitHub username is @${auth.login}`);
140
+ info(`Ask @${payload.invitedBy} to add @${auth.login} to the ${payload.org} organization.`);
141
+ info("Then run create-hq again with the same invite code.");
142
+ return null;
143
+ }
144
+ }
145
+ else {
146
+ stepStatus(accessLabel, "done");
147
+ }
148
+ // 3. Clone the repo into companies/{slug}/
149
+ const companiesDir = path.join(hqRoot, "companies");
150
+ if (!fs.existsSync(companiesDir)) {
151
+ fs.mkdirSync(companiesDir, { recursive: true });
152
+ }
153
+ const companyDir = path.join(companiesDir, payload.slug);
154
+ if (fs.existsSync(companyDir) && fs.readdirSync(companyDir).length > 0) {
155
+ info(`companies/${payload.slug}/ already exists — skipping clone.`);
156
+ }
157
+ else {
158
+ const cloneLabel = `Cloning ${payload.teamName} into companies/${payload.slug}`;
159
+ stepStatus(cloneLabel, "running");
160
+ try {
161
+ const remoteUrl = tokenAuthUrl(payload.cloneUrl);
162
+ runGitWithToken(["clone", `"${remoteUrl}"`, `"${companyDir}"`], companiesDir, auth);
163
+ // Strip the token from the stored remote URL
164
+ execSync(`git remote set-url origin "${payload.cloneUrl}"`, {
165
+ cwd: companyDir,
166
+ stdio: "pipe",
167
+ });
168
+ // Ensure standard company subdirectories exist
169
+ ensureCompanyStructure(companyDir);
170
+ stepStatus(cloneLabel, "done");
171
+ }
172
+ catch (err) {
173
+ stepStatus(cloneLabel, "failed");
174
+ const message = err instanceof Error ? err.message : String(err);
175
+ warn(`Could not clone team repo: ${message}`);
176
+ // Provide actionable guidance
177
+ console.log();
178
+ info("This usually means the repository doesn't exist or your access isn't set up yet.");
179
+ info(`Ask @${payload.invitedBy} to verify the repo exists at: https://github.com/${payload.org}/${payload.repo}`);
180
+ return null;
181
+ }
182
+ }
183
+ const repoUrl = `https://github.com/${payload.org}/${payload.repo}`;
184
+ console.log();
185
+ success(`Joined ${payload.teamName}!`);
186
+ info(`Team workspace: companies/${payload.slug}/`);
187
+ return {
188
+ slug: payload.slug,
189
+ teamName: payload.teamName,
190
+ companyDir,
191
+ repoUrl,
192
+ };
193
+ }
194
+ //# sourceMappingURL=join-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-flow.js","sourceRoot":"","sources":["../src/join-flow.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- export type SystemPackageManager = "brew" | "apt" | "dnf" | "yum" | "pacman" | null;
2
- export type OsType = "macos" | "linux-debian" | "linux-fedora" | "linux-arch" | "linux" | "unix";
1
+ export type SystemPackageManager = "brew" | "apt" | "dnf" | "yum" | "pacman" | "winget" | "choco" | null;
2
+ export type OsType = "macos" | "linux-debian" | "linux-fedora" | "linux-arch" | "linux" | "windows" | "unix";
3
3
  export interface PlatformInfo {
4
4
  os: OsType;
5
5
  packageManager: SystemPackageManager;
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEpF,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjG,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,oBAAoB,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;CACvB;AAmDD,wBAAgB,cAAc,IAAI,YAAY,CAO7C"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC;AAEzG,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7G,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,oBAAoB,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;CACvB;AA4DD,wBAAgB,cAAc,IAAI,YAAY,CAO7C"}
package/dist/platform.js CHANGED
@@ -1,7 +1,12 @@
1
1
  import { execSync } from "child_process";
2
2
  function hasBin(name) {
3
3
  try {
4
- execSync(`which ${name}`, { stdio: "pipe" });
4
+ if (process.platform === "win32") {
5
+ execSync(`where ${name}`, { stdio: "pipe" });
6
+ }
7
+ else {
8
+ execSync(`which ${name}`, { stdio: "pipe" });
9
+ }
5
10
  return true;
6
11
  }
7
12
  catch {
@@ -10,6 +15,8 @@ function hasBin(name) {
10
15
  }
11
16
  function detectOs() {
12
17
  const platform = process.platform;
18
+ if (platform === "win32")
19
+ return "windows";
13
20
  if (platform === "darwin")
14
21
  return "macos";
15
22
  if (platform !== "linux")
@@ -31,6 +38,12 @@ function detectOs() {
31
38
  }
32
39
  function detectSystemPm(os) {
33
40
  switch (os) {
41
+ case "windows":
42
+ if (hasBin("winget"))
43
+ return "winget";
44
+ if (hasBin("choco"))
45
+ return "choco";
46
+ return null;
34
47
  case "macos":
35
48
  return hasBin("brew") ? "brew" : null;
36
49
  case "linux-debian":
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAYzC,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,CAAC;QACH,QAAQ,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IAExC,6BAA6B;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9E,IAAI,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,cAAc,CAAC;QACjF,IAAI,4CAA4C,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,cAAc,CAAC;QACtF,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,YAAY,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,EAAU;IAChC,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,KAAK,cAAc;YACjB,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,KAAK,YAAY;YACf,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C;YACE,qCAAqC;YACrC,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,MAAM,CAAC,QAAQ,CAAC;gBAAE,OAAO,QAAQ,CAAC;YACtC,IAAI,MAAM,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;YAClC,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtB,OAAO;QACL,EAAE;QACF,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;QAClC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;KAC5B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,12 @@ interface ScaffoldOptions {
2
2
  skipDeps?: boolean;
3
3
  skipCli?: boolean;
4
4
  skipSync?: boolean;
5
+ skipPackages?: boolean;
5
6
  tag?: string;
6
7
  localTemplate?: string;
8
+ join?: string;
9
+ invite?: string;
7
10
  }
8
- export declare function scaffold(directory: string, options: ScaffoldOptions): Promise<void>;
11
+ export declare function scaffold(directory: string | undefined, options: ScaffoldOptions): Promise<void>;
9
12
  export {};
10
13
  //# sourceMappingURL=scaffold.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAcA,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAoBD,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA0Jf"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AA0BA,UAAU,eAAe;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAoDD,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAwPf"}
package/dist/scaffold.js CHANGED
@@ -2,12 +2,14 @@ import * as path from "path";
2
2
  import fs from "fs-extra";
3
3
  import { createInterface } from "readline";
4
4
  import { createRequire } from "node:module";
5
- import { banner, success, warn, step, nextSteps, stepStatus } from "./ui.js";
5
+ import chalk from "chalk";
6
+ import { banner, success, warn, info, nextSteps, stepStatus, teamOrientation, } from "./ui.js";
6
7
  import { checkDeps } from "./deps.js";
7
8
  import { initGit, hasGit } from "./git.js";
8
9
  import { execSync } from "child_process";
9
10
  import { fetchTemplate } from "./fetch-template.js";
10
11
  import { detectExistingSync } from "./cloud-sync.js";
12
+ import { runTeamsFlow, authenticate } from "./teams-flow.js";
11
13
  const require = createRequire(import.meta.url);
12
14
  const pkg = require("../package.json");
13
15
  async function prompt(question, defaultVal) {
@@ -27,15 +29,61 @@ async function confirm(question, defaultYes = true) {
27
29
  return defaultYes;
28
30
  return answer.toLowerCase().startsWith("y");
29
31
  }
32
+ /**
33
+ * Cascading entry-mode selection:
34
+ * 1. HQ Teams account? yes → teams-existing
35
+ * 2. Create one? yes → teams-new
36
+ * 3. Personal HQ instead? yes → personal
37
+ * no → exit
38
+ */
39
+ async function chooseEntryMode() {
40
+ console.log();
41
+ const hasTeamsAccount = await confirm(`${chalk.bold("Do you have an HQ Teams account?")}`, false);
42
+ if (hasTeamsAccount)
43
+ return "teams-existing";
44
+ const wantsTeam = await confirm(`${chalk.bold("Would you like to create an HQ Teams account?")}`, true);
45
+ if (wantsTeam)
46
+ return "teams-new";
47
+ const wantsPersonal = await confirm(`${chalk.bold("Set up a personal HQ instead?")}`, true);
48
+ if (wantsPersonal)
49
+ return "personal";
50
+ return "exit";
51
+ }
30
52
  export async function scaffold(directory, options) {
31
- // Show banner with installer version; hqVersion will be added after template fetch
32
53
  banner(pkg.version);
33
- // 1. Resolve target directory
34
- const targetDir = path.resolve(directory);
35
- const displayDir = directory.startsWith("/")
36
- ? directory
54
+ // 1. Entry mode — if --invite or --join is provided, force teams-existing
55
+ const inviteToken = options.invite || options.join;
56
+ const mode = inviteToken ? "teams-existing" : await chooseEntryMode();
57
+ if (mode === "exit") {
58
+ console.log();
59
+ info("No problem — come back any time with: npx create-hq");
60
+ process.exit(0);
61
+ }
62
+ // 2. Authenticate immediately if teams (pure HTTP — no local deps needed)
63
+ let teamsAuth = null;
64
+ if (mode === "teams-existing" || mode === "teams-new") {
65
+ teamsAuth = await authenticate();
66
+ if (!teamsAuth) {
67
+ console.log();
68
+ warn("GitHub sign-in is required for HQ Teams.");
69
+ const fallback = await confirm("Set up a personal HQ instead?", true);
70
+ if (!fallback) {
71
+ info("No problem — come back any time with: npx create-hq");
72
+ process.exit(0);
73
+ }
74
+ // Fall through to personal mode
75
+ }
76
+ }
77
+ // 3. Resolve target directory (prompt if not provided)
78
+ let dir = directory;
79
+ if (!dir) {
80
+ console.log();
81
+ dir = await prompt("Where should HQ be installed?", "hq");
82
+ }
83
+ const targetDir = path.resolve(dir);
84
+ const displayDir = dir.startsWith("/")
85
+ ? dir
37
86
  : path.relative(process.cwd(), targetDir) || ".";
38
- // Check if directory already exists
39
87
  if (fs.existsSync(targetDir)) {
40
88
  const contents = fs.readdirSync(targetDir);
41
89
  if (contents.length > 0) {
@@ -46,7 +94,17 @@ export async function scaffold(directory, options) {
46
94
  }
47
95
  }
48
96
  }
49
- // 2. Fetch template (from local path or GitHub)
97
+ // 4. Dependency check (no spinner checkDeps is interactive with prompts)
98
+ if (!options.skipDeps) {
99
+ const { allRequired } = await checkDeps();
100
+ if (!allRequired) {
101
+ console.log();
102
+ warn("Required dependencies are missing — cannot continue.");
103
+ info("Install the missing dependencies above, then run create-hq again.");
104
+ process.exit(1);
105
+ }
106
+ }
107
+ // 4. Fetch core HQ template (every user gets this — personal or team)
50
108
  let hqVersion = "";
51
109
  if (options.localTemplate) {
52
110
  const localLabel = "Copying local HQ template...";
@@ -95,26 +153,30 @@ export async function scaffold(directory, options) {
95
153
  throw err;
96
154
  }
97
155
  }
98
- // 3. Git init
156
+ // 5. Git init the root HQ (no remote — root HQ is always local-only)
99
157
  const gitLabel = "Initializing git repository";
100
158
  stepStatus(gitLabel, "running");
101
159
  if (hasGit()) {
102
- initGit(targetDir);
103
- stepStatus(gitLabel, "done");
160
+ try {
161
+ initGit(targetDir);
162
+ stepStatus(gitLabel, "done");
163
+ }
164
+ catch (err) {
165
+ stepStatus(gitLabel, "failed");
166
+ warn(`git init failed (non-fatal): ${err.message}`);
167
+ }
104
168
  }
105
169
  else {
106
170
  stepStatus(gitLabel, "failed");
107
171
  warn("git not found — skipping git init");
108
172
  }
109
- // 4. Governance bootstrap — compute checksums and verify integrity
173
+ // 6. Governance bootstrap — checksums + integrity verification
110
174
  const integrityLabel = "Verifying kernel integrity";
111
175
  stepStatus(integrityLabel, "running");
112
176
  try {
113
177
  const computeChecksumsScript = path.join(targetDir, "scripts", "compute-checksums.sh");
114
178
  const coreIntegrityScript = path.join(targetDir, "scripts", "core-integrity.sh");
115
- const hasComputeChecksums = fs.existsSync(computeChecksumsScript);
116
- const hasCoreIntegrity = fs.existsSync(coreIntegrityScript);
117
- if (hasComputeChecksums && hasCoreIntegrity) {
179
+ if (fs.existsSync(computeChecksumsScript) && fs.existsSync(coreIntegrityScript)) {
118
180
  execSync("bash scripts/compute-checksums.sh", { cwd: targetDir, stdio: "pipe" });
119
181
  try {
120
182
  execSync("bash scripts/core-integrity.sh", { cwd: targetDir, stdio: "pipe" });
@@ -126,42 +188,56 @@ export async function scaffold(directory, options) {
126
188
  }
127
189
  }
128
190
  else {
129
- // Scripts not present in this template version — skip silently
130
191
  stepStatus(integrityLabel, "done");
131
192
  }
132
193
  }
133
194
  catch {
134
195
  stepStatus(integrityLabel, "failed");
135
- // governance bootstrap should never abort the scaffold
136
- }
137
- // 5. Check dependencies
138
- const depsLabel = "Checking dependencies";
139
- if (!options.skipDeps) {
140
- // No spinner here — checkDeps uses interactive readline prompts.
141
- // An ora spinner would overwrite the prompt line, making it look stuck.
142
- step(depsLabel);
143
- await checkDeps();
144
- success(depsLabel);
145
196
  }
146
- else {
147
- stepStatus(depsLabel, "running");
148
- stepStatus(depsLabel, "done");
149
- }
150
- // 6. Smart cloud sync detection
197
+ // 7. Cloud sync detection
151
198
  const alreadySynced = await detectExistingSync(targetDir);
152
199
  if (alreadySynced) {
153
200
  success("Cloud sync already configured — skipping setup");
154
201
  }
155
- // 7. Cloud sync setup
156
- if (!options.skipSync && !alreadySynced) {
157
- console.log();
158
- const setupSync = await confirm("Set up cloud sync? (enables mobile access via hq.indigoai.com)");
159
- if (setupSync) {
160
- step("Cloud sync setup will be available after running /setup in Claude Code");
161
- step("Run: hq sync init");
202
+ // 8. Teams flow (only if auth succeeded earlier)
203
+ let teamsResult = null;
204
+ if (teamsAuth && (mode === "teams-existing" || mode === "teams-new")) {
205
+ teamsResult = await runTeamsFlow(mode === "teams-existing" ? "existing" : "new", targetDir, hqVersion, teamsAuth, inviteToken);
206
+ if (!teamsResult) {
207
+ console.log();
208
+ warn("Team setup did not complete — your personal HQ is still set up correctly.");
162
209
  }
163
210
  }
164
- // 8. Index with qmd
211
+ // 9. Optional: install hq-cli globally (disabled for now)
212
+ // if (!options.skipCli) {
213
+ // console.log();
214
+ // const installCli = await confirm(
215
+ // "Install @indigoai-us/hq-cli globally for module management?"
216
+ // );
217
+ // if (installCli) {
218
+ // const cliLabel = "Installing @indigoai-us/hq-cli";
219
+ // stepStatus(cliLabel, "running");
220
+ // try {
221
+ // execSync("npm install -g @indigoai-us/hq-cli", { stdio: "pipe" });
222
+ // stepStatus(cliLabel, "done");
223
+ // } catch {
224
+ // stepStatus(cliLabel, "failed");
225
+ // warn("Failed to install @indigoai-us/hq-cli — install manually with: npm install -g @indigoai-us/hq-cli");
226
+ // }
227
+ // }
228
+ // }
229
+ // 10. Cloud sync setup (disabled for now)
230
+ // if (!options.skipSync && !alreadySynced) {
231
+ // console.log();
232
+ // const setupSync = await confirm(
233
+ // "Set up cloud sync? (enables mobile access via hq.indigoai.com)"
234
+ // );
235
+ // if (setupSync) {
236
+ // step("Cloud sync setup will be available after running /setup in Claude Code");
237
+ // step("Run: hq sync init");
238
+ // }
239
+ // }
240
+ // 11. qmd index
165
241
  try {
166
242
  execSync("qmd index .", { cwd: targetDir, stdio: "pipe" });
167
243
  success("Indexed HQ for search");
@@ -169,7 +245,42 @@ export async function scaffold(directory, options) {
169
245
  catch {
170
246
  // qmd not installed, skip silently — already warned in deps check
171
247
  }
172
- // 9. Next steps
173
- nextSteps(displayDir);
248
+ // 12. Orientation
249
+ console.log();
250
+ if (teamsResult?.admin) {
251
+ teamOrientation({
252
+ mode: "admin",
253
+ displayDir,
254
+ teamName: teamsResult.admin.team.team_name,
255
+ teamSlug: teamsResult.admin.team.team_slug,
256
+ orgLogin: teamsResult.admin.team.org_login,
257
+ repoUrl: teamsResult.admin.repoHtmlUrl,
258
+ });
259
+ }
260
+ else if (teamsResult?.joinedByInvite) {
261
+ teamOrientation({
262
+ mode: "member",
263
+ displayDir,
264
+ teams: [{
265
+ name: teamsResult.joinedByInvite.teamName,
266
+ slug: teamsResult.joinedByInvite.slug,
267
+ repoUrl: teamsResult.joinedByInvite.repoUrl,
268
+ }],
269
+ });
270
+ }
271
+ else if (teamsResult?.member && teamsResult.member.joined.length > 0) {
272
+ teamOrientation({
273
+ mode: "member",
274
+ displayDir,
275
+ teams: teamsResult.member.joined.map((t) => ({
276
+ name: t.name,
277
+ slug: t.slug,
278
+ repoUrl: t.repoHtmlUrl,
279
+ })),
280
+ });
281
+ }
282
+ else {
283
+ nextSteps(displayDir);
284
+ }
174
285
  }
175
286
  //# sourceMappingURL=scaffold.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}