create-hq 10.7.1 → 10.9.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 (56) hide show
  1. package/commands/invite.md +215 -0
  2. package/commands/promote.md +161 -0
  3. package/commands/team-sync.md +431 -0
  4. package/dist/__tests__/auth.test.d.ts +2 -0
  5. package/dist/__tests__/auth.test.d.ts.map +1 -0
  6. package/dist/__tests__/auth.test.js +201 -0
  7. package/dist/__tests__/auth.test.js.map +1 -0
  8. package/dist/__tests__/scaffold.test.js +14 -1
  9. package/dist/__tests__/scaffold.test.js.map +1 -1
  10. package/dist/admin-onboarding.d.ts.map +1 -1
  11. package/dist/admin-onboarding.js +11 -0
  12. package/dist/admin-onboarding.js.map +1 -1
  13. package/dist/auth.d.ts +58 -13
  14. package/dist/auth.d.ts.map +1 -1
  15. package/dist/auth.js +105 -29
  16. package/dist/auth.js.map +1 -1
  17. package/dist/fetch-template.d.ts +3 -3
  18. package/dist/fetch-template.d.ts.map +1 -1
  19. package/dist/fetch-template.js +93 -71
  20. package/dist/fetch-template.js.map +1 -1
  21. package/dist/git.d.ts +12 -1
  22. package/dist/git.d.ts.map +1 -1
  23. package/dist/git.js +40 -20
  24. package/dist/git.js.map +1 -1
  25. package/dist/index.js +0 -0
  26. package/dist/join-flow.d.ts.map +1 -1
  27. package/dist/join-flow.js +11 -0
  28. package/dist/join-flow.js.map +1 -1
  29. package/dist/scaffold.d.ts.map +1 -1
  30. package/dist/scaffold.js +48 -13
  31. package/dist/scaffold.js.map +1 -1
  32. package/dist/team-setup.d.ts +25 -0
  33. package/dist/team-setup.d.ts.map +1 -1
  34. package/dist/team-setup.js +113 -0
  35. package/dist/team-setup.js.map +1 -1
  36. package/dist/teams-flow.d.ts +7 -2
  37. package/dist/teams-flow.d.ts.map +1 -1
  38. package/dist/teams-flow.js +31 -8
  39. package/dist/teams-flow.js.map +1 -1
  40. package/dist/ui.d.ts +3 -0
  41. package/dist/ui.d.ts.map +1 -1
  42. package/dist/ui.js +79 -3
  43. package/dist/ui.js.map +1 -1
  44. package/package.json +3 -2
  45. package/dist/art.d.ts +0 -17
  46. package/dist/art.d.ts.map +0 -1
  47. package/dist/art.js +0 -171
  48. package/dist/art.js.map +0 -1
  49. package/dist/cloud.d.ts +0 -26
  50. package/dist/cloud.d.ts.map +0 -1
  51. package/dist/cloud.js +0 -126
  52. package/dist/cloud.js.map +0 -1
  53. package/dist/tui.d.ts +0 -8
  54. package/dist/tui.d.ts.map +0 -1
  55. package/dist/tui.js +0 -86
  56. package/dist/tui.js.map +0 -1
@@ -1,9 +1,17 @@
1
1
  import fs from "fs-extra";
2
2
  import * as path from "path";
3
3
  import * as os from "os";
4
- import { execSync } from "child_process";
4
+ import { exec } from "child_process";
5
+ import { promisify } from "util";
6
+ const execAsync = promisify(exec);
5
7
  const REPO = "indigoai-us/hq";
6
- const REPO_HTTPS = `https://github.com/${REPO}.git`;
8
+ function formatBytes(bytes) {
9
+ if (bytes < 1024)
10
+ return `${bytes} B`;
11
+ if (bytes < 1024 * 1024)
12
+ return `${(bytes / 1024).toFixed(0)} KB`;
13
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
14
+ }
7
15
  const GITHUB_API = "https://api.github.com";
8
16
  async function getLatestRelease() {
9
17
  const response = await fetch(`${GITHUB_API}/repos/${REPO}/releases/latest`, {
@@ -12,7 +20,8 @@ async function getLatestRelease() {
12
20
  if (!response.ok) {
13
21
  throw new Error(`GitHub API returned ${response.status}: ${response.statusText}`);
14
22
  }
15
- return (await response.json());
23
+ const data = (await response.json());
24
+ return data;
16
25
  }
17
26
  async function getTagRelease(tag) {
18
27
  const response = await fetch(`${GITHUB_API}/repos/${REPO}/releases/tags/${tag}`, {
@@ -21,9 +30,11 @@ async function getTagRelease(tag) {
21
30
  if (!response.ok) {
22
31
  throw new Error(`GitHub API returned ${response.status}: ${response.statusText}`);
23
32
  }
24
- return (await response.json());
33
+ const data = (await response.json());
34
+ return data;
25
35
  }
26
- async function downloadAndExtractViaApi(tarballUrl, targetDir) {
36
+ async function downloadAndExtractViaApi(tarballUrl, targetDir, onProgress) {
37
+ onProgress?.("Downloading HQ template...");
27
38
  const response = await fetch(tarballUrl, {
28
39
  headers: { Accept: "application/vnd.github+json" },
29
40
  redirect: "follow",
@@ -31,84 +42,83 @@ async function downloadAndExtractViaApi(tarballUrl, targetDir) {
31
42
  if (!response.ok) {
32
43
  throw new Error(`Failed to download tarball: ${response.status} ${response.statusText}`);
33
44
  }
34
- const buffer = await response.arrayBuffer();
35
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-"));
45
+ // Stream download with progress
46
+ const totalBytes = Number(response.headers.get("content-length")) || 0;
47
+ const chunks = [];
48
+ let downloadedBytes = 0;
49
+ if (response.body) {
50
+ const reader = response.body.getReader();
51
+ while (true) {
52
+ const { done, value } = await reader.read();
53
+ if (done)
54
+ break;
55
+ chunks.push(value);
56
+ downloadedBytes += value.length;
57
+ if (totalBytes > 0) {
58
+ onProgress?.(`Downloading HQ template... ${formatBytes(downloadedBytes)} / ${formatBytes(totalBytes)}`);
59
+ }
60
+ else {
61
+ onProgress?.(`Downloading HQ template... ${formatBytes(downloadedBytes)}`);
62
+ }
63
+ }
64
+ }
65
+ else {
66
+ // Fallback if body stream not available
67
+ const buf = await response.arrayBuffer();
68
+ chunks.push(new Uint8Array(buf));
69
+ }
70
+ const buffer = Buffer.concat(chunks);
71
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "create-hq-"));
36
72
  const tarPath = path.join(tmpDir, "hq.tar.gz");
37
73
  try {
38
- fs.writeFileSync(tarPath, Buffer.from(buffer));
39
- extractTemplateDirFromTar(tarPath, targetDir);
74
+ onProgress?.("Extracting template...");
75
+ await fs.writeFile(tarPath, buffer);
76
+ await extractTemplateDirFromTar(tarPath, targetDir, onProgress);
40
77
  }
41
78
  finally {
42
- fs.removeSync(tmpDir);
79
+ await fs.remove(tmpDir);
43
80
  }
44
81
  }
45
- function extractTemplateDirFromTar(tarPath, targetDir) {
82
+ async function extractTemplateDirFromTar(tarPath, targetDir, onProgress) {
46
83
  // The tarball contains a top-level directory like `indigoai-us-hq-<sha>/`
47
84
  // We need to find the `template/` subdirectory within that and extract it.
48
- const tmpExtract = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-extract-"));
85
+ const tmpExtract = await fs.mkdtemp(path.join(os.tmpdir(), "create-hq-extract-"));
49
86
  try {
50
- // tar is part of git for windows + present on macOS/Linux
51
- execSync(`tar -xzf "${tarPath}" -C "${tmpExtract}"`, { stdio: "pipe" });
52
- const entries = fs.readdirSync(tmpExtract);
87
+ // Extract the full tarball to a temp location
88
+ await execAsync(`tar -xzf "${tarPath}" -C "${tmpExtract}"`);
89
+ // Find the top-level directory created by GitHub's tarball
90
+ const entries = await fs.readdir(tmpExtract);
53
91
  if (entries.length === 0) {
54
92
  throw new Error("Tarball was empty");
55
93
  }
56
94
  const rootDir = path.join(tmpExtract, entries[0]);
57
95
  const templateSrc = path.join(rootDir, "template");
58
- if (!fs.existsSync(templateSrc)) {
96
+ if (!await fs.pathExists(templateSrc)) {
59
97
  throw new Error("template/ directory not found in HQ tarball");
60
98
  }
61
- fs.ensureDirSync(targetDir);
62
- fs.copySync(templateSrc, targetDir, { overwrite: true });
99
+ // Copy template contents to targetDir
100
+ onProgress?.("Copying template files...");
101
+ await fs.ensureDir(targetDir);
102
+ await fs.copy(templateSrc, targetDir, { overwrite: true });
63
103
  }
64
104
  finally {
65
- fs.removeSync(tmpExtract);
105
+ await fs.remove(tmpExtract);
66
106
  }
67
107
  }
68
- /**
69
- * Fallback: shallow git clone the public HQ repo and copy template/ out.
70
- * Used when the GitHub REST API tarball download fails (network, rate limit,
71
- * proxy issues). Requires git, which is checked as a hard dep before this
72
- * function is reached.
73
- */
74
- function fetchViaGitClone(targetDir, tag) {
75
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-git-"));
108
+ async function extractTemplateDirViaGhCli(tag, targetDir, onProgress) {
109
+ const ref = tag || "HEAD";
110
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "create-hq-gh-"));
111
+ const tarPath = path.join(tmpDir, "hq.tar.gz");
76
112
  try {
77
- if (tag) {
78
- // Clone with a specific tag (still shallow)
79
- execSync(`git clone --depth 1 --branch "${tag}" "${REPO_HTTPS}" "${tmpDir}"`, { stdio: "pipe" });
80
- }
81
- else {
82
- // Default branch shallow clone
83
- execSync(`git clone --depth 1 "${REPO_HTTPS}" "${tmpDir}"`, {
84
- stdio: "pipe",
85
- });
86
- }
87
- const templateSrc = path.join(tmpDir, "template");
88
- if (!fs.existsSync(templateSrc)) {
89
- throw new Error("template/ directory not found in cloned HQ repo");
90
- }
91
- fs.ensureDirSync(targetDir);
92
- fs.copySync(templateSrc, targetDir, { overwrite: true });
93
- // Best-effort version detection: read the cloned tag, or fall back
94
- let version = tag || "latest";
95
- if (!tag) {
96
- try {
97
- const described = execSync(`git -C "${tmpDir}" describe --tags --abbrev=0`, {
98
- stdio: "pipe",
99
- encoding: "utf-8",
100
- }).trim();
101
- if (described)
102
- version = described;
103
- }
104
- catch {
105
- // No tags reachable in shallow clone — keep "latest"
106
- }
107
- }
108
- return { version };
113
+ onProgress?.("Downloading via gh CLI...");
114
+ await execAsync(`gh api repos/${REPO}/tarball/${ref} > "${tarPath}"`, {
115
+ shell: "/bin/sh",
116
+ });
117
+ onProgress?.("Extracting template...");
118
+ await extractTemplateDirFromTar(tarPath, targetDir, onProgress);
109
119
  }
110
120
  finally {
111
- fs.removeSync(tmpDir);
121
+ await fs.remove(tmpDir);
112
122
  }
113
123
  }
114
124
  /**
@@ -116,36 +126,48 @@ function fetchViaGitClone(targetDir, tag) {
116
126
  *
117
127
  * Strategy:
118
128
  * 1. GitHub REST API → download tarball_url
119
- * 2. Fallback: `git clone --depth 1` (git is a hard dep, checked up front)
120
- * 3. If both fail: throw with manual instructions
129
+ * 2. Fallback: gh CLI (`gh api repos/indigoai-us/hq/tarball/{ref}`)
130
+ * 3. If both fail: throw with manual clone instructions
121
131
  *
122
132
  * Returns the version tag that was fetched.
123
133
  */
124
- export async function fetchTemplate(targetDir, tag) {
134
+ export async function fetchTemplate(targetDir, tag, onProgress) {
125
135
  let version = tag || "";
136
+ let tarballUrl = "";
126
137
  let apiError = null;
127
138
  // --- Attempt 1: GitHub API ---
128
139
  try {
140
+ onProgress?.("Resolving latest release...");
129
141
  const release = tag ? await getTagRelease(tag) : await getLatestRelease();
130
142
  version = release.tag_name;
131
- await downloadAndExtractViaApi(release.tarball_url, targetDir);
143
+ tarballUrl = release.tarball_url;
144
+ await downloadAndExtractViaApi(tarballUrl, targetDir, onProgress);
132
145
  return { version };
133
146
  }
134
147
  catch (err) {
135
148
  apiError = err;
136
149
  }
137
- // --- Attempt 2: git clone fallback ---
150
+ // --- Attempt 2: gh CLI fallback ---
138
151
  try {
139
- return fetchViaGitClone(targetDir, tag);
152
+ const ref = tag || "HEAD";
153
+ await extractTemplateDirViaGhCli(ref, targetDir, onProgress);
154
+ // If we got a version from the API response (even if download failed later), keep it.
155
+ // Otherwise mark as unknown.
156
+ if (!version) {
157
+ version = tag || "latest";
158
+ }
159
+ return { version };
140
160
  }
141
- catch (gitErr) {
161
+ catch (ghErr) {
162
+ // Both failed — provide a clear error message.
142
163
  const apiMsg = apiError instanceof Error ? apiError.message : String(apiError);
143
- const gitMsg = gitErr instanceof Error ? gitErr.message : String(gitErr);
164
+ const ghMsg = ghErr instanceof Error ? ghErr.message : String(ghErr);
144
165
  throw new Error(`Failed to fetch HQ template from GitHub.\n\n` +
145
166
  ` GitHub API error: ${apiMsg}\n` +
146
- ` git clone error: ${gitMsg}\n\n` +
147
- `Check your network connection and try again. To set up HQ manually:\n\n` +
148
- ` git clone https://github.com/${REPO}.git\n` +
167
+ ` gh CLI error: ${ghMsg}\n\n` +
168
+ `You appear to be offline or rate-limited.\n` +
169
+ `To set up HQ manually, clone the repo and copy the template directory:\n\n` +
170
+ ` git clone https://github.com/indigoai-us/hq.git\n` +
149
171
  ` cp -R hq/template ${targetDir}\n`);
150
172
  }
151
173
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-template.js","sourceRoot":"","sources":["../src/fetch-template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-template.js","sourceRoot":"","sources":["../src/fetch-template.ts"],"names":[],"mappings":"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"}
package/dist/git.d.ts CHANGED
@@ -1,3 +1,14 @@
1
- export declare function initGit(dir: string): void;
1
+ export interface GitInitResult {
2
+ initialized: boolean;
3
+ committed: boolean;
4
+ error?: string;
5
+ }
6
+ export declare function initGit(dir: string): Promise<GitInitResult>;
2
7
  export declare function hasGit(): boolean;
8
+ export declare function hasGitUser(): {
9
+ name: string | null;
10
+ email: string | null;
11
+ };
12
+ export declare function configureGitUser(name: string, email: string): Promise<void>;
13
+ export declare function gitCommit(dir: string, message: string): Promise<boolean>;
3
14
  //# sourceMappingURL=git.d.ts.map
package/dist/git.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAYA,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAwBzC;AAED,wBAAgB,MAAM,IAAI,OAAO,CAOhC"}
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsBjE;AAED,wBAAgB,MAAM,IAAI,OAAO,CAOhC;AAED,wBAAgB,UAAU,IAAI;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAU1E;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjF;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO9E"}
package/dist/git.js CHANGED
@@ -1,34 +1,28 @@
1
- import { execSync } from "child_process";
2
- function hasGitConfig(key, cwd) {
1
+ import { execSync, exec } from "child_process";
2
+ import { promisify } from "util";
3
+ const execAsync = promisify(exec);
4
+ export async function initGit(dir) {
3
5
  try {
4
- // Check both global and local config
5
- execSync(`git config ${key}`, { cwd, stdio: "pipe" });
6
- return true;
6
+ await execAsync("git init", { cwd: dir });
7
7
  }
8
8
  catch {
9
- return false;
9
+ return { initialized: false, committed: false, error: "git init failed" };
10
10
  }
11
- }
12
- export function initGit(dir) {
13
- execSync("git init", { cwd: dir, stdio: "pipe" });
14
- // Ensure user.email and user.name are set — use local config if global is missing
15
- if (!hasGitConfig("user.email", dir)) {
16
- execSync('git config user.email "hq-user@localhost"', { cwd: dir, stdio: "pipe" });
11
+ try {
12
+ await execAsync("git add -A", { cwd: dir });
17
13
  }
18
- if (!hasGitConfig("user.name", dir)) {
19
- execSync('git config user.name "HQ User"', { cwd: dir, stdio: "pipe" });
14
+ catch {
15
+ return { initialized: true, committed: false, error: "git add failed" };
20
16
  }
21
- execSync("git add -A", { cwd: dir, stdio: "pipe" });
22
17
  try {
23
- execSync('git commit -m "Initial HQ setup via create-hq"', {
18
+ await execAsync('git commit -m "Initial HQ setup via create-hq"', {
24
19
  cwd: dir,
25
- stdio: "pipe",
26
20
  });
21
+ return { initialized: true, committed: true };
27
22
  }
28
23
  catch (err) {
29
- const stderr = err.stderr?.toString() || "";
30
- const stdout = err.stdout?.toString() || "";
31
- throw new Error(`git commit failed: ${stderr || stdout || err.message}`);
24
+ const msg = err instanceof Error ? err.message : String(err);
25
+ return { initialized: true, committed: false, error: msg };
32
26
  }
33
27
  }
34
28
  export function hasGit() {
@@ -40,4 +34,30 @@ export function hasGit() {
40
34
  return false;
41
35
  }
42
36
  }
37
+ export function hasGitUser() {
38
+ let name = null;
39
+ let email = null;
40
+ try {
41
+ name = execSync("git config user.name", { stdio: "pipe", encoding: "utf-8" }).trim() || null;
42
+ }
43
+ catch { /* not configured */ }
44
+ try {
45
+ email = execSync("git config user.email", { stdio: "pipe", encoding: "utf-8" }).trim() || null;
46
+ }
47
+ catch { /* not configured */ }
48
+ return { name, email };
49
+ }
50
+ export async function configureGitUser(name, email) {
51
+ await execAsync(`git config --global user.name "${name}"`);
52
+ await execAsync(`git config --global user.email "${email}"`);
53
+ }
54
+ export async function gitCommit(dir, message) {
55
+ try {
56
+ await execAsync(`git commit -m "${message}"`, { cwd: dir });
57
+ return true;
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ }
43
63
  //# sourceMappingURL=git.js.map
package/dist/git.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,SAAS,YAAY,CAAC,GAAW,EAAE,GAAY;IAC7C,IAAI,CAAC;QACH,qCAAqC;QACrC,QAAQ,CAAC,cAAc,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,QAAQ,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAElD,kFAAkF;IAClF,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;QACrC,QAAQ,CAAC,2CAA2C,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;QACpC,QAAQ,CAAC,gCAAgC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,QAAQ,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,QAAQ,CAAC,gDAAgD,EAAE;YACzD,GAAG,EAAE,GAAG;YACR,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,CACxD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,IAAI,CAAC;QACH,QAAQ,CAAC,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"}
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"join-flow.d.ts","sourceRoot":"","sources":["../src/join-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAW5C,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAwED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA6HpC"}
1
+ {"version":3,"file":"join-flow.d.ts","sourceRoot":"","sources":["../src/join-flow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAY5C,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAwED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAwIpC"}
package/dist/join-flow.js CHANGED
@@ -18,6 +18,7 @@ import chalk from "chalk";
18
18
  import { ensureCompanyStructure } from "./company-template.js";
19
19
  import { stepStatus, success, warn, info, step } from "./ui.js";
20
20
  import { decodeInviteToken, checkRepoAccess, } from "./invite.js";
21
+ import { linkTeamCommands, installTeamCommands } from "./team-setup.js";
21
22
  // ─── Prompt helpers ─────────────────────────────────────────────────────────
22
23
  function prompt(question, defaultVal) {
23
24
  const rl = createInterface({ input: process.stdin, output: process.stdout });
@@ -180,6 +181,16 @@ export async function runJoinByInvite(auth, hqRoot, token) {
180
181
  return null;
181
182
  }
182
183
  }
184
+ // Install bundled team commands (invite, sync, promote)
185
+ const installed = installTeamCommands(hqRoot);
186
+ if (installed.length > 0) {
187
+ info(`Installed ${installed.length} team command${installed.length === 1 ? "" : "s"}: ${installed.join(", ")}`);
188
+ }
189
+ // Link team-distributed commands as slash commands
190
+ const symlinks = linkTeamCommands(hqRoot, payload.slug);
191
+ if (symlinks.linked.length > 0) {
192
+ info(`Linked ${symlinks.linked.length} team command${symlinks.linked.length === 1 ? "" : "s"}`);
193
+ }
183
194
  const repoUrl = `https://github.com/${payload.org}/${payload.repo}`;
184
195
  console.log();
185
196
  success(`Joined ${payload.teamName}!`);
@@ -1 +1 @@
1
- {"version":3,"file":"join-flow.js","sourceRoot":"","sources":["../src/join-flow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"join-flow.js","sourceRoot":"","sources":["../src/join-flow.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AA8BA,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,CAuRf"}
package/dist/scaffold.js CHANGED
@@ -3,10 +3,12 @@ import fs from "fs-extra";
3
3
  import { createInterface } from "readline";
4
4
  import { createRequire } from "node:module";
5
5
  import chalk from "chalk";
6
- import { banner, success, warn, info, nextSteps, stepStatus, teamOrientation, } from "./ui.js";
6
+ import { banner, success, warn, info, nextSteps, stepStatus, updateSpinnerText, teamOrientation, } from "./ui.js";
7
7
  import { checkDeps } from "./deps.js";
8
- import { initGit, hasGit } from "./git.js";
9
- import { execSync } from "child_process";
8
+ import { initGit, hasGit, hasGitUser, configureGitUser, gitCommit } from "./git.js";
9
+ import { exec } from "child_process";
10
+ import { promisify } from "util";
11
+ const execAsync = promisify(exec);
10
12
  import { fetchTemplate } from "./fetch-template.js";
11
13
  import { detectExistingSync } from "./cloud-sync.js";
12
14
  import { runTeamsFlow, authenticate } from "./teams-flow.js";
@@ -136,7 +138,9 @@ export async function scaffold(directory, options) {
136
138
  const fetchLabel = "Fetching HQ template from GitHub...";
137
139
  stepStatus(fetchLabel, "running");
138
140
  try {
139
- const { version } = await fetchTemplate(targetDir, options.tag);
141
+ const { version } = await fetchTemplate(targetDir, options.tag, (phase) => {
142
+ updateSpinnerText(fetchLabel, phase);
143
+ });
140
144
  hqVersion = version;
141
145
  const commandCount = fs.existsSync(path.join(targetDir, ".claude", "commands"))
142
146
  ? fs.readdirSync(path.join(targetDir, ".claude", "commands")).filter((f) => f.endsWith(".md")).length
@@ -157,13 +161,42 @@ export async function scaffold(directory, options) {
157
161
  const gitLabel = "Initializing git repository";
158
162
  stepStatus(gitLabel, "running");
159
163
  if (hasGit()) {
160
- try {
161
- initGit(targetDir);
164
+ const gitResult = await initGit(targetDir);
165
+ if (gitResult.committed) {
162
166
  stepStatus(gitLabel, "done");
163
167
  }
164
- catch (err) {
168
+ else if (gitResult.initialized) {
169
+ stepStatus(gitLabel, "done");
170
+ const gitUser = hasGitUser();
171
+ if (!gitUser.name || !gitUser.email) {
172
+ info("Git needs your name and email for commits");
173
+ const userName = await prompt("Your name", gitUser.name || "");
174
+ const userEmail = await prompt("Your email", gitUser.email || "");
175
+ if (userName && userEmail) {
176
+ const configLabel = "Configuring git";
177
+ stepStatus(configLabel, "running");
178
+ await configureGitUser(userName, userEmail);
179
+ stepStatus(configLabel, "done");
180
+ const commitLabel = "Creating initial commit";
181
+ stepStatus(commitLabel, "running");
182
+ const committed = await gitCommit(targetDir, "Initial HQ setup via create-hq");
183
+ if (committed) {
184
+ stepStatus(commitLabel, "done");
185
+ }
186
+ else {
187
+ stepStatus(commitLabel, "failed");
188
+ info("You can commit later: " + chalk.dim(`cd ${displayDir} && git add -A && git commit -m "Initial HQ setup"`));
189
+ }
190
+ }
191
+ }
192
+ else {
193
+ warn("Git repo initialized but initial commit failed");
194
+ info("You can commit later: " + chalk.dim(`cd ${displayDir} && git add -A && git commit -m "Initial HQ setup"`));
195
+ }
196
+ }
197
+ else {
165
198
  stepStatus(gitLabel, "failed");
166
- warn(`git init failed (non-fatal): ${err.message}`);
199
+ warn("Git initialization failed you can set it up later");
167
200
  }
168
201
  }
169
202
  else {
@@ -177,9 +210,9 @@ export async function scaffold(directory, options) {
177
210
  const computeChecksumsScript = path.join(targetDir, "scripts", "compute-checksums.sh");
178
211
  const coreIntegrityScript = path.join(targetDir, "scripts", "core-integrity.sh");
179
212
  if (fs.existsSync(computeChecksumsScript) && fs.existsSync(coreIntegrityScript)) {
180
- execSync("bash scripts/compute-checksums.sh", { cwd: targetDir, stdio: "pipe" });
213
+ await execAsync("bash scripts/compute-checksums.sh", { cwd: targetDir });
181
214
  try {
182
- execSync("bash scripts/core-integrity.sh", { cwd: targetDir, stdio: "pipe" });
215
+ await execAsync("bash scripts/core-integrity.sh", { cwd: targetDir });
183
216
  stepStatus(integrityLabel, "done");
184
217
  }
185
218
  catch {
@@ -238,12 +271,14 @@ export async function scaffold(directory, options) {
238
271
  // }
239
272
  // }
240
273
  // 11. qmd index
274
+ const indexLabel = "Indexing HQ for search";
275
+ stepStatus(indexLabel, "running");
241
276
  try {
242
- execSync("qmd index .", { cwd: targetDir, stdio: "pipe" });
243
- success("Indexed HQ for search");
277
+ await execAsync("qmd index .", { cwd: targetDir });
278
+ stepStatus(indexLabel, "done");
244
279
  }
245
280
  catch {
246
- // qmd not installed, skip silently — already warned in deps check
281
+ stepStatus(indexLabel, "failed");
247
282
  }
248
283
  // 12. Orientation
249
284
  console.log();