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.
Files changed (59) hide show
  1. package/commands/{team-sync.md → sync-team.md} +167 -6
  2. package/dist/__tests__/auth.test.js +176 -186
  3. package/dist/__tests__/auth.test.js.map +1 -1
  4. package/dist/__tests__/scaffold.test.js +5 -3
  5. package/dist/__tests__/scaffold.test.js.map +1 -1
  6. package/dist/auth.d.ts +57 -129
  7. package/dist/auth.d.ts.map +1 -1
  8. package/dist/auth.js +81 -370
  9. package/dist/auth.js.map +1 -1
  10. package/dist/fetch-template.d.ts +7 -2
  11. package/dist/fetch-template.d.ts.map +1 -1
  12. package/dist/fetch-template.js +27 -15
  13. package/dist/fetch-template.js.map +1 -1
  14. package/dist/index.js +7 -17
  15. package/dist/index.js.map +1 -1
  16. package/dist/packages.d.ts.map +1 -1
  17. package/dist/packages.js +1 -1
  18. package/dist/packages.js.map +1 -1
  19. package/dist/recommended-packages.d.ts +93 -0
  20. package/dist/recommended-packages.d.ts.map +1 -0
  21. package/dist/recommended-packages.js +221 -0
  22. package/dist/recommended-packages.js.map +1 -0
  23. package/dist/scaffold.d.ts +4 -2
  24. package/dist/scaffold.d.ts.map +1 -1
  25. package/dist/scaffold.js +127 -232
  26. package/dist/scaffold.js.map +1 -1
  27. package/dist/ui.d.ts +0 -17
  28. package/dist/ui.d.ts.map +1 -1
  29. package/dist/ui.js +0 -45
  30. package/dist/ui.js.map +1 -1
  31. package/package.json +2 -1
  32. package/dist/admin-onboarding.d.ts +0 -44
  33. package/dist/admin-onboarding.d.ts.map +0 -1
  34. package/dist/admin-onboarding.js +0 -530
  35. package/dist/admin-onboarding.js.map +0 -1
  36. package/dist/company-template.d.ts +0 -34
  37. package/dist/company-template.d.ts.map +0 -1
  38. package/dist/company-template.js +0 -142
  39. package/dist/company-template.js.map +0 -1
  40. package/dist/invite-command.d.ts +0 -10
  41. package/dist/invite-command.d.ts.map +0 -1
  42. package/dist/invite-command.js +0 -110
  43. package/dist/invite-command.js.map +0 -1
  44. package/dist/invite.d.ts +0 -91
  45. package/dist/invite.d.ts.map +0 -1
  46. package/dist/invite.js +0 -230
  47. package/dist/invite.js.map +0 -1
  48. package/dist/join-flow.d.ts +0 -32
  49. package/dist/join-flow.d.ts.map +0 -1
  50. package/dist/join-flow.js +0 -315
  51. package/dist/join-flow.js.map +0 -1
  52. package/dist/team-setup.d.ts +0 -83
  53. package/dist/team-setup.d.ts.map +0 -1
  54. package/dist/team-setup.js +0 -353
  55. package/dist/team-setup.js.map +0 -1
  56. package/dist/teams-flow.d.ts +0 -41
  57. package/dist/teams-flow.d.ts.map +0 -1
  58. package/dist/teams-flow.js +0 -173
  59. package/dist/teams-flow.js.map +0 -1
@@ -1,83 +0,0 @@
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
- * Install the bundled team management commands into .claude/commands/.
35
- * These ship with the create-hq npm package (in commands/) and are only
36
- * installed when a user joins or creates a team.
37
- *
38
- * Returns the list of files installed (skips files that already exist).
39
- */
40
- export declare function installTeamCommands(hqRoot: string): string[];
41
- export interface SymlinkResult {
42
- linked: string[];
43
- alreadyLinked: string[];
44
- skipped: string[];
45
- unlinked: string[];
46
- }
47
- /**
48
- * Link team-distributed commands into .claude/commands/ so they're
49
- * discoverable as slash commands. Mirrors the logic in /sync (Section 5).
50
- *
51
- * Naming convention: {slug}--{command}.md (double-dash separates team from command).
52
- * Symlinks use relative paths so they work regardless of HQ's absolute location.
53
- *
54
- * @param hqRoot - The HQ root directory
55
- * @param slug - Team slug (companies/{slug}/)
56
- */
57
- export declare function linkTeamCommands(hqRoot: string, slug: string): SymlinkResult;
58
- /**
59
- * Enumerate the user's HQ team memberships by walking their App installations.
60
- * Returns one DiscoveredTeam per hq-* repo found across all installed orgs.
61
- */
62
- export declare function discoverTeams(auth: GitHubAuth): Promise<DiscoveredTeam[]>;
63
- /**
64
- * Present discovered teams as a numbered list with all pre-selected, and
65
- * let the user deselect any they want to skip.
66
- *
67
- * Input format:
68
- * - empty / "all" → keep all
69
- * - "none" → skip all
70
- * - "1,3" → deselect entries 1 and 3
71
- */
72
- export declare function selectTeams(teams: DiscoveredTeam[]): Promise<{
73
- selected: DiscoveredTeam[];
74
- skipped: DiscoveredTeam[];
75
- }>;
76
- /**
77
- * Discover, select, and clone team repos for an authenticated member.
78
- *
79
- * Returns a result with joined / skipped / failed lists. Returns null if
80
- * the user has no HQ teams at all (caller can route to admin onboarding).
81
- */
82
- export declare function runMemberJoin(auth: GitHubAuth, hqRoot: string): Promise<MemberJoinResult | null>;
83
- //# sourceMappingURL=team-setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"team-setup.d.ts","sourceRoot":"","sources":["../src/team-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,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;AAOD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAyB5D;AAID,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CAiE5E;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,CA4DlC"}
@@ -1,353 +0,0 @@
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 { fileURLToPath } from "url";
16
- import { execSync } from "child_process";
17
- import { createInterface } from "readline";
18
- import chalk from "chalk";
19
- const __filename = fileURLToPath(import.meta.url);
20
- const __dirname = path.dirname(__filename);
21
- import { HQ_GITHUB_APP_SLUG, githubApi, } from "./auth.js";
22
- import { ensureCompanyStructure } from "./company-template.js";
23
- import { stepStatus, success, warn, info } from "./ui.js";
24
- // ─── Bundled Team Commands ──────────────────────────────────────────────────
25
- /** Team-specific commands bundled with create-hq (not part of core HQ template). */
26
- const TEAM_COMMANDS = ["invite.md", "team-sync.md", "promote.md"];
27
- /**
28
- * Install the bundled team management commands into .claude/commands/.
29
- * These ship with the create-hq npm package (in commands/) and are only
30
- * installed when a user joins or creates a team.
31
- *
32
- * Returns the list of files installed (skips files that already exist).
33
- */
34
- export function installTeamCommands(hqRoot) {
35
- const hqCommandsDir = path.join(hqRoot, ".claude", "commands");
36
- if (!fs.existsSync(hqCommandsDir)) {
37
- fs.mkdirSync(hqCommandsDir, { recursive: true });
38
- }
39
- // Resolve the bundled commands directory relative to this module.
40
- // In the built package: dist/team-setup.js → ../commands/
41
- const bundledDir = path.resolve(__dirname, "..", "commands");
42
- if (!fs.existsSync(bundledDir)) {
43
- // Fallback: running from source (ts-node / vitest)
44
- // src/team-setup.ts → ../commands/
45
- return [];
46
- }
47
- const installed = [];
48
- for (const file of TEAM_COMMANDS) {
49
- const src = path.join(bundledDir, file);
50
- const dest = path.join(hqCommandsDir, file);
51
- if (!fs.existsSync(src))
52
- continue;
53
- if (fs.existsSync(dest))
54
- continue; // don't overwrite — user may have customized
55
- fs.copyFileSync(src, dest);
56
- installed.push(file);
57
- }
58
- return installed;
59
- }
60
- /**
61
- * Link team-distributed commands into .claude/commands/ so they're
62
- * discoverable as slash commands. Mirrors the logic in /sync (Section 5).
63
- *
64
- * Naming convention: {slug}--{command}.md (double-dash separates team from command).
65
- * Symlinks use relative paths so they work regardless of HQ's absolute location.
66
- *
67
- * @param hqRoot - The HQ root directory
68
- * @param slug - Team slug (companies/{slug}/)
69
- */
70
- export function linkTeamCommands(hqRoot, slug) {
71
- const result = { linked: [], alreadyLinked: [], skipped: [], unlinked: [] };
72
- const teamCommandsDir = path.join(hqRoot, "companies", slug, ".claude", "commands");
73
- const hqCommandsDir = path.join(hqRoot, ".claude", "commands");
74
- // Ensure .claude/commands/ exists
75
- if (!fs.existsSync(hqCommandsDir)) {
76
- fs.mkdirSync(hqCommandsDir, { recursive: true });
77
- }
78
- // Scan for team commands
79
- if (!fs.existsSync(teamCommandsDir)) {
80
- return result;
81
- }
82
- const teamFiles = fs.readdirSync(teamCommandsDir).filter((f) => f.endsWith(".md"));
83
- if (teamFiles.length === 0) {
84
- return result;
85
- }
86
- // Create symlinks for new commands
87
- for (const file of teamFiles) {
88
- const symlinkName = `${slug}--${file}`;
89
- const symlinkPath = path.join(hqCommandsDir, symlinkName);
90
- // Relative path from .claude/commands/ to companies/{slug}/.claude/commands/
91
- const relativeSrc = path.join("..", "..", "companies", slug, ".claude", "commands", file);
92
- if (fs.existsSync(symlinkPath)) {
93
- const stats = fs.lstatSync(symlinkPath);
94
- if (stats.isSymbolicLink()) {
95
- const target = fs.readlinkSync(symlinkPath);
96
- if (target === relativeSrc) {
97
- result.alreadyLinked.push(symlinkName);
98
- continue;
99
- }
100
- }
101
- // Exists but is not the right symlink — skip to avoid collision
102
- result.skipped.push(symlinkName);
103
- continue;
104
- }
105
- try {
106
- fs.symlinkSync(relativeSrc, symlinkPath);
107
- result.linked.push(symlinkName);
108
- }
109
- catch {
110
- result.skipped.push(symlinkName);
111
- }
112
- }
113
- // Remove stale symlinks for this team
114
- const teamPattern = `${slug}--`;
115
- const existing = fs.readdirSync(hqCommandsDir).filter((f) => f.startsWith(teamPattern));
116
- const expectedNames = new Set(teamFiles.map((f) => `${slug}--${f}`));
117
- for (const link of existing) {
118
- const linkPath = path.join(hqCommandsDir, link);
119
- const stats = fs.lstatSync(linkPath);
120
- if (stats.isSymbolicLink() && !expectedNames.has(link)) {
121
- fs.unlinkSync(linkPath);
122
- result.unlinked.push(link);
123
- }
124
- }
125
- return result;
126
- }
127
- // ─── Prompt helper ──────────────────────────────────────────────────────────
128
- function prompt(question, defaultVal) {
129
- const rl = createInterface({ input: process.stdin, output: process.stdout });
130
- const suffix = defaultVal ? ` (${defaultVal})` : "";
131
- return new Promise((resolve) => {
132
- rl.question(` ? ${question}${suffix} `, (answer) => {
133
- rl.close();
134
- resolve(answer.trim() || defaultVal || "");
135
- });
136
- });
137
- }
138
- // ─── Git with embedded token (mirrors admin-onboarding.ts) ──────────────────
139
- function runGitWithToken(args, cwd, auth) {
140
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-git-"));
141
- const isWindows = process.platform === "win32";
142
- const askpassPath = path.join(tmpDir, isWindows ? "askpass.cmd" : "askpass.sh");
143
- try {
144
- if (isWindows) {
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
- GIT_TOKEN: auth.access_token,
157
- GIT_ASKPASS: askpassPath,
158
- GIT_TERMINAL_PROMPT: "0",
159
- GCM_INTERACTIVE: "never",
160
- },
161
- });
162
- }
163
- finally {
164
- try {
165
- fs.rmSync(tmpDir, { recursive: true, force: true });
166
- }
167
- catch {
168
- // ignore
169
- }
170
- }
171
- }
172
- function tokenAuthUrl(cloneUrl) {
173
- const u = new URL(cloneUrl);
174
- u.username = "x-access-token";
175
- return u.toString();
176
- }
177
- // ─── Discovery ──────────────────────────────────────────────────────────────
178
- async function fetchHqInstallations(auth) {
179
- const data = await githubApi("/user/installations?per_page=100", auth);
180
- return (data.installations ?? []).filter((i) => i.app_slug === HQ_GITHUB_APP_SLUG);
181
- }
182
- async function findHqReposInInstallation(auth, installation) {
183
- // GitHub App user token can list repos accessible through this installation
184
- const data = await githubApi(`/user/installations/${installation.id}/repositories?per_page=100`, auth);
185
- const repos = data.repositories ?? [];
186
- // Match repos named hq-* (e.g. hq-indigo, hq-frogbear)
187
- return repos.filter((r) => /^hq-.+$/i.test(r.name));
188
- }
189
- /**
190
- * Derive a team slug from the repo name. Repo naming convention: hq-{teamSlug}.
191
- * e.g. "hq-indigo" → "indigo", "hq-frogbear" → "frogbear"
192
- */
193
- function teamSlugFromRepoName(repoName) {
194
- return repoName.replace(/^hq-/i, "").toLowerCase();
195
- }
196
- /**
197
- * Enumerate the user's HQ team memberships by walking their App installations.
198
- * Returns one DiscoveredTeam per hq-* repo found across all installed orgs.
199
- */
200
- export async function discoverTeams(auth) {
201
- const installations = await fetchHqInstallations(auth);
202
- const teams = [];
203
- for (const inst of installations) {
204
- try {
205
- const repos = await findHqReposInInstallation(auth, inst);
206
- for (const repo of repos) {
207
- const slug = teamSlugFromRepoName(repo.name);
208
- teams.push({
209
- slug,
210
- name: `${inst.account.login}/${slug}`,
211
- repoHtmlUrl: repo.html_url,
212
- cloneUrl: repo.clone_url,
213
- installationId: inst.id,
214
- });
215
- }
216
- }
217
- catch {
218
- // Per-installation errors should not abort the whole discovery
219
- continue;
220
- }
221
- }
222
- return teams;
223
- }
224
- // ─── Selection UI ───────────────────────────────────────────────────────────
225
- /**
226
- * Present discovered teams as a numbered list with all pre-selected, and
227
- * let the user deselect any they want to skip.
228
- *
229
- * Input format:
230
- * - empty / "all" → keep all
231
- * - "none" → skip all
232
- * - "1,3" → deselect entries 1 and 3
233
- */
234
- export async function selectTeams(teams) {
235
- if (teams.length === 0) {
236
- return { selected: [], skipped: [] };
237
- }
238
- if (teams.length === 1) {
239
- console.log();
240
- console.log(chalk.bold(" Found 1 HQ team:"));
241
- console.log(chalk.green(" [✓] ") + chalk.white(teams[0].name));
242
- console.log();
243
- const answer = await prompt(`Set up ${chalk.cyan(teams[0].name)}? (Y/n)`, "y");
244
- if (answer.toLowerCase().startsWith("y")) {
245
- return { selected: [teams[0]], skipped: [] };
246
- }
247
- return { selected: [], skipped: [teams[0]] };
248
- }
249
- console.log();
250
- console.log(chalk.bold(` Found ${teams.length} HQ teams (all pre-selected):`));
251
- for (let i = 0; i < teams.length; i++) {
252
- console.log(chalk.green(" [✓] ") + chalk.cyan(`${i + 1}. `) + chalk.white(teams[i].name));
253
- }
254
- console.log();
255
- console.log(chalk.dim(" Press Enter to set up all, or type numbers to skip (e.g. 2,3)"));
256
- const answer = await prompt("Skip");
257
- if (!answer || answer.toLowerCase() === "all") {
258
- return { selected: [...teams], skipped: [] };
259
- }
260
- if (answer.toLowerCase() === "none") {
261
- return { selected: [], skipped: [...teams] };
262
- }
263
- const skipIdx = new Set(answer
264
- .split(",")
265
- .map((s) => parseInt(s.trim(), 10) - 1)
266
- .filter((n) => Number.isInteger(n) && n >= 0 && n < teams.length));
267
- const selected = teams.filter((_, i) => !skipIdx.has(i));
268
- const skipped = teams.filter((_, i) => skipIdx.has(i));
269
- return { selected, skipped };
270
- }
271
- // ─── Clone ──────────────────────────────────────────────────────────────────
272
- function cloneTeam(team, hqRoot, auth) {
273
- const companiesDir = path.join(hqRoot, "companies");
274
- if (!fs.existsSync(companiesDir)) {
275
- fs.mkdirSync(companiesDir, { recursive: true });
276
- }
277
- const companyDir = path.join(companiesDir, team.slug);
278
- if (fs.existsSync(companyDir) && fs.readdirSync(companyDir).length > 0) {
279
- throw new Error(`companies/${team.slug}/ already exists and is not empty`);
280
- }
281
- const remoteUrl = tokenAuthUrl(team.cloneUrl);
282
- runGitWithToken(["clone", `"${remoteUrl}"`, `"${companyDir}"`], companiesDir, auth);
283
- // Strip token from stored remote URL
284
- execSync(`git remote set-url origin "${team.cloneUrl}"`, {
285
- cwd: companyDir,
286
- stdio: "pipe",
287
- });
288
- // Make sure all standard subdirs exist
289
- ensureCompanyStructure(companyDir);
290
- return companyDir;
291
- }
292
- // ─── Main flow ──────────────────────────────────────────────────────────────
293
- /**
294
- * Discover, select, and clone team repos for an authenticated member.
295
- *
296
- * Returns a result with joined / skipped / failed lists. Returns null if
297
- * the user has no HQ teams at all (caller can route to admin onboarding).
298
- */
299
- export async function runMemberJoin(auth, hqRoot) {
300
- const discoveryLabel = "Looking up your HQ teams";
301
- stepStatus(discoveryLabel, "running");
302
- let teams;
303
- try {
304
- teams = await discoverTeams(auth);
305
- stepStatus(discoveryLabel, "done");
306
- }
307
- catch (err) {
308
- stepStatus(discoveryLabel, "failed");
309
- const message = err instanceof Error ? err.message : String(err);
310
- warn(`Could not look up your teams: ${message}`);
311
- return null;
312
- }
313
- if (teams.length === 0) {
314
- return null;
315
- }
316
- const { selected, skipped } = await selectTeams(teams);
317
- if (selected.length === 0) {
318
- info("No teams selected — continuing.");
319
- return { joined: [], skipped, failed: [] };
320
- }
321
- const joined = [];
322
- const failed = [];
323
- for (const team of selected) {
324
- const label = `Cloning ${team.name} → companies/${team.slug}`;
325
- stepStatus(label, "running");
326
- try {
327
- cloneTeam(team, hqRoot, auth);
328
- stepStatus(label, "done");
329
- // Install bundled team commands (invite, sync, promote)
330
- const installed = installTeamCommands(hqRoot);
331
- if (installed.length > 0) {
332
- info(`Installed ${installed.length} team command${installed.length === 1 ? "" : "s"}: ${installed.join(", ")}`);
333
- }
334
- // Link team-distributed commands as slash commands
335
- const symlinks = linkTeamCommands(hqRoot, team.slug);
336
- if (symlinks.linked.length > 0) {
337
- info(`Linked ${symlinks.linked.length} team command${symlinks.linked.length === 1 ? "" : "s"} from ${team.name}`);
338
- }
339
- joined.push(team);
340
- }
341
- catch (err) {
342
- stepStatus(label, "failed");
343
- const message = err instanceof Error ? err.message : String(err);
344
- warn(`Could not set up ${team.name}: ${message}`);
345
- failed.push({ team, error: message });
346
- }
347
- }
348
- if (joined.length > 0) {
349
- success(`${joined.length} team${joined.length === 1 ? "" : "s"} ready`);
350
- }
351
- return { joined, skipped, failed };
352
- }
353
- //# sourceMappingURL=team-setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"team-setup.js","sourceRoot":"","sources":["../src/team-setup.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Teams flow router.
3
- *
4
- * Called by scaffold.ts after the user opts into the HQ Teams path. Handles:
5
- * - Reusing or refreshing GitHub auth
6
- * - Routing: invite code → join-by-invite, discovery → auto-discovery, new → admin onboarding
7
- *
8
- * The team setup happens *after* core HQ has been installed, so all paths
9
- * receive a fully scaffolded hqRoot to drop companies/{slug}/ into.
10
- */
11
- import { type GitHubAuth } from "./auth.js";
12
- import { type AdminOnboardingResult } from "./admin-onboarding.js";
13
- import { type MemberJoinResult } from "./team-setup.js";
14
- import { type JoinByInviteResult } from "./join-flow.js";
15
- export type TeamsFlowMode = "existing" | "new";
16
- export interface TeamsFlowResult {
17
- auth: GitHubAuth;
18
- member: MemberJoinResult | null;
19
- admin: AdminOnboardingResult | null;
20
- /** Set when the member joined via an invite token. */
21
- joinedByInvite: JoinByInviteResult | null;
22
- }
23
- /**
24
- * Authenticate the user, reusing a stored HQ App token if it's still valid.
25
- *
26
- * Priority:
27
- * 1. ~/.hq/app-token.json — cached HQ App token from a previous session
28
- * 2. Device flow — browser-based OAuth through the hq-team-sync GitHub App
29
- *
30
- * The user's existing `gh` CLI auth is never read or modified.
31
- */
32
- export declare function authenticate(): Promise<GitHubAuth | null>;
33
- /**
34
- * Run the teams flow. The mode determines the entry point:
35
- * - "existing": user said they have an HQ Teams account → prompt for invite code, then discovery
36
- * - "new": user wants to create a new team → admin onboarding
37
- *
38
- * @param joinToken - Pre-supplied invite token (from --join flag). Skips the invite code prompt.
39
- */
40
- export declare function runTeamsFlow(mode: TeamsFlowMode, hqRoot: string, hqVersion: string, preAuth?: GitHubAuth, joinToken?: string): Promise<TeamsFlowResult | null>;
41
- //# sourceMappingURL=teams-flow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"teams-flow.d.ts","sourceRoot":"","sources":["../src/teams-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EACL,KAAK,UAAU,EAOhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAsB,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAmB,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAI1E,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,KAAK,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACpC,sDAAsD;IACtD,cAAc,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC3C;AAoBD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAsD/D;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,aAAa,EACnB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,UAAU,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA0EjC"}