create-hq 10.1.0 → 10.7.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.
Files changed (58) 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 +445 -0
  4. package/dist/admin-onboarding.js.map +1 -0
  5. package/dist/auth.d.ts +60 -23
  6. package/dist/auth.d.ts.map +1 -1
  7. package/dist/auth.js +219 -116
  8. package/dist/auth.js.map +1 -1
  9. package/dist/company-template.d.ts +34 -0
  10. package/dist/company-template.d.ts.map +1 -0
  11. package/dist/company-template.js +142 -0
  12. package/dist/company-template.js.map +1 -0
  13. package/dist/deps.d.ts +2 -0
  14. package/dist/deps.d.ts.map +1 -1
  15. package/dist/deps.js +42 -30
  16. package/dist/deps.js.map +1 -1
  17. package/dist/fetch-template.d.ts +2 -2
  18. package/dist/fetch-template.d.ts.map +1 -1
  19. package/dist/fetch-template.js +54 -38
  20. package/dist/fetch-template.js.map +1 -1
  21. package/dist/git.d.ts.map +1 -1
  22. package/dist/git.js +28 -4
  23. package/dist/git.js.map +1 -1
  24. package/dist/index.js +18 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/invite-command.d.ts +10 -0
  27. package/dist/invite-command.d.ts.map +1 -0
  28. package/dist/invite-command.js +110 -0
  29. package/dist/invite-command.js.map +1 -0
  30. package/dist/invite.d.ts +91 -0
  31. package/dist/invite.d.ts.map +1 -0
  32. package/dist/invite.js +230 -0
  33. package/dist/invite.js.map +1 -0
  34. package/dist/join-flow.d.ts +32 -0
  35. package/dist/join-flow.d.ts.map +1 -0
  36. package/dist/join-flow.js +194 -0
  37. package/dist/join-flow.js.map +1 -0
  38. package/dist/platform.d.ts +2 -2
  39. package/dist/platform.d.ts.map +1 -1
  40. package/dist/platform.js +14 -1
  41. package/dist/platform.js.map +1 -1
  42. package/dist/scaffold.d.ts +4 -1
  43. package/dist/scaffold.d.ts.map +1 -1
  44. package/dist/scaffold.js +152 -41
  45. package/dist/scaffold.js.map +1 -1
  46. package/dist/team-setup.d.ts +58 -0
  47. package/dist/team-setup.d.ts.map +1 -0
  48. package/dist/team-setup.js +237 -0
  49. package/dist/team-setup.js.map +1 -0
  50. package/dist/teams-flow.d.ts +36 -0
  51. package/dist/teams-flow.d.ts.map +1 -0
  52. package/dist/teams-flow.js +134 -0
  53. package/dist/teams-flow.js.map +1 -0
  54. package/dist/ui.d.ts +17 -0
  55. package/dist/ui.d.ts.map +1 -1
  56. package/dist/ui.js +35 -0
  57. package/dist/ui.js.map +1 -1
  58. package/package.json +49 -49
@@ -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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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Member team discovery + clone flow.
3
+ *
4
+ * For users who already have access to one or more HQ team repos via the
5
+ * hq-team-sync GitHub App, enumerate their installations, find the {org}/hq
6
+ * repo for each, present a checklist, and clone the selected repos into
7
+ * companies/{slug}/.
8
+ *
9
+ * No backend involved — all data comes from api.github.com using the user's
10
+ * GitHub App user token.
11
+ */
12
+ import { type GitHubAuth } from "./auth.js";
13
+ export interface DiscoveredTeam {
14
+ /** Org login (used as companies/{slug}/ directory name) */
15
+ slug: string;
16
+ /** Display name (defaults to org login). */
17
+ name: string;
18
+ /** GitHub HTML URL for the team repo. */
19
+ repoHtmlUrl: string;
20
+ /** HTTPS clone URL. */
21
+ cloneUrl: string;
22
+ /** GitHub installation ID for the App on this org. */
23
+ installationId: number;
24
+ }
25
+ export interface MemberJoinResult {
26
+ joined: DiscoveredTeam[];
27
+ skipped: DiscoveredTeam[];
28
+ failed: {
29
+ team: DiscoveredTeam;
30
+ error: string;
31
+ }[];
32
+ }
33
+ /**
34
+ * Enumerate the user's HQ team memberships by walking their App installations.
35
+ * Returns one DiscoveredTeam per hq-* repo found across all installed orgs.
36
+ */
37
+ export declare function discoverTeams(auth: GitHubAuth): Promise<DiscoveredTeam[]>;
38
+ /**
39
+ * Present discovered teams as a numbered list with all pre-selected, and
40
+ * let the user deselect any they want to skip.
41
+ *
42
+ * Input format:
43
+ * - empty / "all" → keep all
44
+ * - "none" → skip all
45
+ * - "1,3" → deselect entries 1 and 3
46
+ */
47
+ export declare function selectTeams(teams: DiscoveredTeam[]): Promise<{
48
+ selected: DiscoveredTeam[];
49
+ skipped: DiscoveredTeam[];
50
+ }>;
51
+ /**
52
+ * Discover, select, and clone team repos for an authenticated member.
53
+ *
54
+ * Returns a result with joined / skipped / failed lists. Returns null if
55
+ * the user has no HQ teams at all (caller can route to admin onboarding).
56
+ */
57
+ export declare function runMemberJoin(auth: GitHubAuth, hqRoot: string): Promise<MemberJoinResult | null>;
58
+ //# sourceMappingURL=team-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-setup.d.ts","sourceRoot":"","sources":["../src/team-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,EACL,KAAK,UAAU,EAGhB,MAAM,WAAW,CAAC;AA6BnB,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,EAAE;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACnD;AA4FD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAwB/E;AAID;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,cAAc,EAAE,GACtB,OAAO,CAAC;IAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CA8CpE;AAoCD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAkDlC"}
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Member team discovery + clone flow.
3
+ *
4
+ * For users who already have access to one or more HQ team repos via the
5
+ * hq-team-sync GitHub App, enumerate their installations, find the {org}/hq
6
+ * repo for each, present a checklist, and clone the selected repos into
7
+ * companies/{slug}/.
8
+ *
9
+ * No backend involved — all data comes from api.github.com using the user's
10
+ * GitHub App user token.
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 { HQ_GITHUB_APP_SLUG, githubApi, } from "./auth.js";
19
+ import { ensureCompanyStructure } from "./company-template.js";
20
+ import { stepStatus, success, warn, info } from "./ui.js";
21
+ // ─── Prompt helper ──────────────────────────────────────────────────────────
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
+ // ─── Git with embedded token (mirrors admin-onboarding.ts) ──────────────────
33
+ function runGitWithToken(args, cwd, auth) {
34
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-git-"));
35
+ const isWindows = process.platform === "win32";
36
+ const askpassPath = path.join(tmpDir, isWindows ? "askpass.cmd" : "askpass.sh");
37
+ try {
38
+ if (isWindows) {
39
+ fs.writeFileSync(askpassPath, `@echo off\nif "%~1"=="" (echo %GIT_TOKEN%) else (echo %GIT_TOKEN%)\n`, "utf-8");
40
+ }
41
+ else {
42
+ fs.writeFileSync(askpassPath, `#!/bin/sh\necho "$GIT_TOKEN"\n`, "utf-8");
43
+ fs.chmodSync(askpassPath, 0o700);
44
+ }
45
+ execSync(`git ${args.join(" ")}`, {
46
+ cwd,
47
+ stdio: "pipe",
48
+ env: {
49
+ ...process.env,
50
+ GIT_TOKEN: auth.access_token,
51
+ GIT_ASKPASS: askpassPath,
52
+ GIT_TERMINAL_PROMPT: "0",
53
+ GCM_INTERACTIVE: "never",
54
+ },
55
+ });
56
+ }
57
+ finally {
58
+ try {
59
+ fs.rmSync(tmpDir, { recursive: true, force: true });
60
+ }
61
+ catch {
62
+ // ignore
63
+ }
64
+ }
65
+ }
66
+ function tokenAuthUrl(cloneUrl) {
67
+ const u = new URL(cloneUrl);
68
+ u.username = "x-access-token";
69
+ return u.toString();
70
+ }
71
+ // ─── Discovery ──────────────────────────────────────────────────────────────
72
+ async function fetchHqInstallations(auth) {
73
+ const data = await githubApi("/user/installations?per_page=100", auth);
74
+ return (data.installations ?? []).filter((i) => i.app_slug === HQ_GITHUB_APP_SLUG);
75
+ }
76
+ async function findHqReposInInstallation(auth, installation) {
77
+ // GitHub App user token can list repos accessible through this installation
78
+ const data = await githubApi(`/user/installations/${installation.id}/repositories?per_page=100`, auth);
79
+ const repos = data.repositories ?? [];
80
+ // Match repos named hq-* (e.g. hq-indigo, hq-frogbear)
81
+ return repos.filter((r) => /^hq-.+$/i.test(r.name));
82
+ }
83
+ /**
84
+ * Derive a team slug from the repo name. Repo naming convention: hq-{teamSlug}.
85
+ * e.g. "hq-indigo" → "indigo", "hq-frogbear" → "frogbear"
86
+ */
87
+ function teamSlugFromRepoName(repoName) {
88
+ return repoName.replace(/^hq-/i, "").toLowerCase();
89
+ }
90
+ /**
91
+ * Enumerate the user's HQ team memberships by walking their App installations.
92
+ * Returns one DiscoveredTeam per hq-* repo found across all installed orgs.
93
+ */
94
+ export async function discoverTeams(auth) {
95
+ const installations = await fetchHqInstallations(auth);
96
+ const teams = [];
97
+ for (const inst of installations) {
98
+ try {
99
+ const repos = await findHqReposInInstallation(auth, inst);
100
+ for (const repo of repos) {
101
+ const slug = teamSlugFromRepoName(repo.name);
102
+ teams.push({
103
+ slug,
104
+ name: `${inst.account.login}/${slug}`,
105
+ repoHtmlUrl: repo.html_url,
106
+ cloneUrl: repo.clone_url,
107
+ installationId: inst.id,
108
+ });
109
+ }
110
+ }
111
+ catch {
112
+ // Per-installation errors should not abort the whole discovery
113
+ continue;
114
+ }
115
+ }
116
+ return teams;
117
+ }
118
+ // ─── Selection UI ───────────────────────────────────────────────────────────
119
+ /**
120
+ * Present discovered teams as a numbered list with all pre-selected, and
121
+ * let the user deselect any they want to skip.
122
+ *
123
+ * Input format:
124
+ * - empty / "all" → keep all
125
+ * - "none" → skip all
126
+ * - "1,3" → deselect entries 1 and 3
127
+ */
128
+ export async function selectTeams(teams) {
129
+ if (teams.length === 0) {
130
+ return { selected: [], skipped: [] };
131
+ }
132
+ if (teams.length === 1) {
133
+ console.log();
134
+ console.log(chalk.bold(" Found 1 HQ team:"));
135
+ console.log(chalk.green(" [✓] ") + chalk.white(teams[0].name));
136
+ console.log();
137
+ const answer = await prompt(`Set up ${chalk.cyan(teams[0].name)}? (Y/n)`, "y");
138
+ if (answer.toLowerCase().startsWith("y")) {
139
+ return { selected: [teams[0]], skipped: [] };
140
+ }
141
+ return { selected: [], skipped: [teams[0]] };
142
+ }
143
+ console.log();
144
+ console.log(chalk.bold(` Found ${teams.length} HQ teams (all pre-selected):`));
145
+ for (let i = 0; i < teams.length; i++) {
146
+ console.log(chalk.green(" [✓] ") + chalk.cyan(`${i + 1}. `) + chalk.white(teams[i].name));
147
+ }
148
+ console.log();
149
+ console.log(chalk.dim(" Press Enter to set up all, or type numbers to skip (e.g. 2,3)"));
150
+ const answer = await prompt("Skip");
151
+ if (!answer || answer.toLowerCase() === "all") {
152
+ return { selected: [...teams], skipped: [] };
153
+ }
154
+ if (answer.toLowerCase() === "none") {
155
+ return { selected: [], skipped: [...teams] };
156
+ }
157
+ const skipIdx = new Set(answer
158
+ .split(",")
159
+ .map((s) => parseInt(s.trim(), 10) - 1)
160
+ .filter((n) => Number.isInteger(n) && n >= 0 && n < teams.length));
161
+ const selected = teams.filter((_, i) => !skipIdx.has(i));
162
+ const skipped = teams.filter((_, i) => skipIdx.has(i));
163
+ return { selected, skipped };
164
+ }
165
+ // ─── Clone ──────────────────────────────────────────────────────────────────
166
+ function cloneTeam(team, hqRoot, auth) {
167
+ const companiesDir = path.join(hqRoot, "companies");
168
+ if (!fs.existsSync(companiesDir)) {
169
+ fs.mkdirSync(companiesDir, { recursive: true });
170
+ }
171
+ const companyDir = path.join(companiesDir, team.slug);
172
+ if (fs.existsSync(companyDir) && fs.readdirSync(companyDir).length > 0) {
173
+ throw new Error(`companies/${team.slug}/ already exists and is not empty`);
174
+ }
175
+ const remoteUrl = tokenAuthUrl(team.cloneUrl);
176
+ runGitWithToken(["clone", `"${remoteUrl}"`, `"${companyDir}"`], companiesDir, auth);
177
+ // Strip token from stored remote URL
178
+ execSync(`git remote set-url origin "${team.cloneUrl}"`, {
179
+ cwd: companyDir,
180
+ stdio: "pipe",
181
+ });
182
+ // Make sure all standard subdirs exist
183
+ ensureCompanyStructure(companyDir);
184
+ return companyDir;
185
+ }
186
+ // ─── Main flow ──────────────────────────────────────────────────────────────
187
+ /**
188
+ * Discover, select, and clone team repos for an authenticated member.
189
+ *
190
+ * Returns a result with joined / skipped / failed lists. Returns null if
191
+ * the user has no HQ teams at all (caller can route to admin onboarding).
192
+ */
193
+ export async function runMemberJoin(auth, hqRoot) {
194
+ const discoveryLabel = "Looking up your HQ teams";
195
+ stepStatus(discoveryLabel, "running");
196
+ let teams;
197
+ try {
198
+ teams = await discoverTeams(auth);
199
+ stepStatus(discoveryLabel, "done");
200
+ }
201
+ catch (err) {
202
+ stepStatus(discoveryLabel, "failed");
203
+ const message = err instanceof Error ? err.message : String(err);
204
+ warn(`Could not look up your teams: ${message}`);
205
+ return null;
206
+ }
207
+ if (teams.length === 0) {
208
+ return null;
209
+ }
210
+ const { selected, skipped } = await selectTeams(teams);
211
+ if (selected.length === 0) {
212
+ info("No teams selected — continuing.");
213
+ return { joined: [], skipped, failed: [] };
214
+ }
215
+ const joined = [];
216
+ const failed = [];
217
+ for (const team of selected) {
218
+ const label = `Cloning ${team.name} → companies/${team.slug}`;
219
+ stepStatus(label, "running");
220
+ try {
221
+ cloneTeam(team, hqRoot, auth);
222
+ stepStatus(label, "done");
223
+ joined.push(team);
224
+ }
225
+ catch (err) {
226
+ stepStatus(label, "failed");
227
+ const message = err instanceof Error ? err.message : String(err);
228
+ warn(`Could not set up ${team.name}: ${message}`);
229
+ failed.push({ team, error: message });
230
+ }
231
+ }
232
+ if (joined.length > 0) {
233
+ success(`${joined.length} team${joined.length === 1 ? "" : "s"} ready`);
234
+ }
235
+ return { joined, skipped, failed };
236
+ }
237
+ //# sourceMappingURL=team-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-setup.js","sourceRoot":"","sources":["../src/team-setup.ts"],"names":[],"mappings":"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"}