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.
- package/dist/admin-onboarding.d.ts +42 -0
- package/dist/admin-onboarding.d.ts.map +1 -0
- package/dist/admin-onboarding.js +460 -0
- package/dist/admin-onboarding.js.map +1 -0
- package/dist/art.d.ts +17 -0
- package/dist/art.d.ts.map +1 -0
- package/dist/art.js +171 -0
- package/dist/art.js.map +1 -0
- package/dist/auth.d.ts +60 -23
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +219 -116
- package/dist/auth.js.map +1 -1
- package/dist/cloud.d.ts +26 -0
- package/dist/cloud.d.ts.map +1 -0
- package/dist/cloud.js +126 -0
- package/dist/cloud.js.map +1 -0
- package/dist/company-template.d.ts +34 -0
- package/dist/company-template.d.ts.map +1 -0
- package/dist/company-template.js +142 -0
- package/dist/company-template.js.map +1 -0
- package/dist/deps.d.ts +2 -0
- package/dist/deps.d.ts.map +1 -1
- package/dist/deps.js +42 -30
- package/dist/deps.js.map +1 -1
- package/dist/fetch-template.d.ts +2 -2
- package/dist/fetch-template.d.ts.map +1 -1
- package/dist/fetch-template.js +54 -38
- package/dist/fetch-template.js.map +1 -1
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +28 -4
- package/dist/git.js.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/invite-command.d.ts +10 -0
- package/dist/invite-command.d.ts.map +1 -0
- package/dist/invite-command.js +110 -0
- package/dist/invite-command.js.map +1 -0
- package/dist/invite.d.ts +91 -0
- package/dist/invite.d.ts.map +1 -0
- package/dist/invite.js +230 -0
- package/dist/invite.js.map +1 -0
- package/dist/join-flow.d.ts +32 -0
- package/dist/join-flow.d.ts.map +1 -0
- package/dist/join-flow.js +194 -0
- package/dist/join-flow.js.map +1 -0
- package/dist/platform.d.ts +2 -2
- package/dist/platform.d.ts.map +1 -1
- package/dist/platform.js +14 -1
- package/dist/platform.js.map +1 -1
- package/dist/scaffold.d.ts +4 -1
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +152 -41
- package/dist/scaffold.js.map +1 -1
- package/dist/team-setup.d.ts +58 -0
- package/dist/team-setup.d.ts.map +1 -0
- package/dist/team-setup.js +237 -0
- package/dist/team-setup.js.map +1 -0
- package/dist/teams-flow.d.ts +36 -0
- package/dist/teams-flow.d.ts.map +1 -0
- package/dist/teams-flow.js +134 -0
- package/dist/teams-flow.js.map +1 -0
- package/dist/tui.d.ts +8 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +86 -0
- package/dist/tui.js.map +1 -0
- package/dist/ui.d.ts +17 -0
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +45 -0
- package/dist/ui.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Company / team-repo template generator.
|
|
3
|
+
*
|
|
4
|
+
* When an admin creates a new team, we need to seed the new {org}/hq private
|
|
5
|
+
* repo with a baseline directory structure that mirrors what /newcompany
|
|
6
|
+
* produces. This module renders that structure into a target directory
|
|
7
|
+
* (which is then committed and pushed to the new GitHub repo).
|
|
8
|
+
*
|
|
9
|
+
* No filesystem dependencies on the core HQ template — these files are
|
|
10
|
+
* synthesized in code so the seed is version-locked with the create-hq
|
|
11
|
+
* release the user just installed.
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from "fs";
|
|
14
|
+
import * as path from "path";
|
|
15
|
+
const COMPANY_SUBDIRS = [
|
|
16
|
+
"knowledge",
|
|
17
|
+
"settings",
|
|
18
|
+
"data",
|
|
19
|
+
"workers",
|
|
20
|
+
"repos",
|
|
21
|
+
"projects",
|
|
22
|
+
"policies",
|
|
23
|
+
];
|
|
24
|
+
const GITIGNORE = `# Local secrets and caches — never commit
|
|
25
|
+
settings/*.local.*
|
|
26
|
+
settings/.env*
|
|
27
|
+
data/cache/
|
|
28
|
+
data/tmp/
|
|
29
|
+
*.log
|
|
30
|
+
.DS_Store
|
|
31
|
+
Thumbs.db
|
|
32
|
+
`;
|
|
33
|
+
function readme(meta) {
|
|
34
|
+
return `# ${meta.team_name}
|
|
35
|
+
|
|
36
|
+
HQ Teams workspace for **${meta.org_login}**.
|
|
37
|
+
|
|
38
|
+
## What is this?
|
|
39
|
+
|
|
40
|
+
This repository is the shared workspace for the **${meta.team_name}** HQ team.
|
|
41
|
+
Members of the \`${meta.org_login}\` GitHub organization with access to this
|
|
42
|
+
repo will see its contents inside their local HQ at:
|
|
43
|
+
|
|
44
|
+
\`\`\`
|
|
45
|
+
companies/${meta.team_slug}/
|
|
46
|
+
\`\`\`
|
|
47
|
+
|
|
48
|
+
## Structure
|
|
49
|
+
|
|
50
|
+
| Directory | Purpose |
|
|
51
|
+
|-----------|---------|
|
|
52
|
+
| \`knowledge/\` | Shared docs, references, and qmd-indexed content |
|
|
53
|
+
| \`settings/\` | Team-scoped credentials and config (gitignore secrets) |
|
|
54
|
+
| \`data/\` | Exports, datasets, and reports |
|
|
55
|
+
| \`workers/\` | Custom worker definitions for this team |
|
|
56
|
+
| \`repos/\` | References to repos the team owns |
|
|
57
|
+
| \`projects/\` | Active projects with PRDs and stories |
|
|
58
|
+
| \`policies/\` | Team policies (auto-loaded by Claude Code) |
|
|
59
|
+
|
|
60
|
+
## Adding members
|
|
61
|
+
|
|
62
|
+
Anyone with access to this repository on GitHub will automatically pick up
|
|
63
|
+
this workspace when they run \`npx create-hq\`. To add a teammate, grant them
|
|
64
|
+
access through the \`${meta.org_login}\` GitHub organization or directly to
|
|
65
|
+
this repository.
|
|
66
|
+
|
|
67
|
+
## Created
|
|
68
|
+
|
|
69
|
+
- Created by: @${meta.created_by}
|
|
70
|
+
- Created at: ${meta.created_at}
|
|
71
|
+
- Seeded from: create-hq / HQ template ${meta.hq_version}
|
|
72
|
+
`;
|
|
73
|
+
}
|
|
74
|
+
function knowledgeReadme(meta) {
|
|
75
|
+
return `# ${meta.team_name} Knowledge
|
|
76
|
+
|
|
77
|
+
This is the shared knowledge base for the ${meta.team_name} HQ team.
|
|
78
|
+
|
|
79
|
+
Drop markdown files here to share docs, references, and conventions across
|
|
80
|
+
the team. Indexed by qmd for semantic + full-text search.
|
|
81
|
+
`;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Render the company template into targetDir. Creates the directory if it
|
|
85
|
+
* does not exist. Will not overwrite existing files (idempotent on re-runs).
|
|
86
|
+
*/
|
|
87
|
+
export function writeCompanyTemplate(targetDir, meta) {
|
|
88
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
89
|
+
// Subdirectories with .gitkeep
|
|
90
|
+
for (const sub of COMPANY_SUBDIRS) {
|
|
91
|
+
const dir = path.join(targetDir, sub);
|
|
92
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
93
|
+
const gitkeep = path.join(dir, ".gitkeep");
|
|
94
|
+
if (!fs.existsSync(gitkeep)) {
|
|
95
|
+
fs.writeFileSync(gitkeep, "", "utf-8");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// README.md
|
|
99
|
+
const readmePath = path.join(targetDir, "README.md");
|
|
100
|
+
if (!fs.existsSync(readmePath)) {
|
|
101
|
+
fs.writeFileSync(readmePath, readme(meta), "utf-8");
|
|
102
|
+
}
|
|
103
|
+
// team.json
|
|
104
|
+
const teamJsonPath = path.join(targetDir, "team.json");
|
|
105
|
+
if (!fs.existsSync(teamJsonPath)) {
|
|
106
|
+
fs.writeFileSync(teamJsonPath, JSON.stringify(meta, null, 2) + "\n", "utf-8");
|
|
107
|
+
}
|
|
108
|
+
// knowledge/README.md (replaces .gitkeep there)
|
|
109
|
+
const knowledgeReadmePath = path.join(targetDir, "knowledge", "README.md");
|
|
110
|
+
if (!fs.existsSync(knowledgeReadmePath)) {
|
|
111
|
+
fs.writeFileSync(knowledgeReadmePath, knowledgeReadme(meta), "utf-8");
|
|
112
|
+
// Remove the redundant .gitkeep now that there's a real file
|
|
113
|
+
const gitkeep = path.join(targetDir, "knowledge", ".gitkeep");
|
|
114
|
+
if (fs.existsSync(gitkeep)) {
|
|
115
|
+
try {
|
|
116
|
+
fs.unlinkSync(gitkeep);
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// ignore
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// .gitignore
|
|
124
|
+
const gitignorePath = path.join(targetDir, ".gitignore");
|
|
125
|
+
if (!fs.existsSync(gitignorePath)) {
|
|
126
|
+
fs.writeFileSync(gitignorePath, GITIGNORE, "utf-8");
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Ensure all standard company subdirectories exist inside targetDir
|
|
131
|
+
* without overwriting any existing files. Used after cloning a team repo
|
|
132
|
+
* to fill in any directories the upstream repo doesn't have yet.
|
|
133
|
+
*/
|
|
134
|
+
export function ensureCompanyStructure(targetDir) {
|
|
135
|
+
for (const sub of COMPANY_SUBDIRS) {
|
|
136
|
+
const dir = path.join(targetDir, sub);
|
|
137
|
+
if (!fs.existsSync(dir)) {
|
|
138
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=company-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"company-template.js","sourceRoot":"","sources":["../src/company-template.ts"],"names":[],"mappings":"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"}
|
package/dist/deps.d.ts
CHANGED
package/dist/deps.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE/E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;CAClC;AA8FD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,YAAY,GACrB,MAAM,GAAG,IAAI,CAef;AAgCD,wBAAsB,SAAS,IAAI,OAAO,CAAC;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAgFnE"}
|
package/dist/deps.js
CHANGED
|
@@ -4,6 +4,7 @@ import chalk from "chalk";
|
|
|
4
4
|
import { success, warn, info } from "./ui.js";
|
|
5
5
|
import { detectPlatform } from "./platform.js";
|
|
6
6
|
const deps = [
|
|
7
|
+
// ── Core (required — installer blocks if missing) ──────────────────────
|
|
7
8
|
{
|
|
8
9
|
name: "Node.js",
|
|
9
10
|
command: "node --version",
|
|
@@ -12,6 +13,29 @@ const deps = [
|
|
|
12
13
|
autoInstallable: false,
|
|
13
14
|
installCommands: {},
|
|
14
15
|
},
|
|
16
|
+
{
|
|
17
|
+
name: "git",
|
|
18
|
+
command: "git --version",
|
|
19
|
+
required: true,
|
|
20
|
+
installHint: "https://git-scm.com/downloads",
|
|
21
|
+
autoInstallable: false,
|
|
22
|
+
installCommands: {},
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: "gh CLI",
|
|
26
|
+
command: "gh --version",
|
|
27
|
+
required: true,
|
|
28
|
+
installHint: "https://cli.github.com",
|
|
29
|
+
autoInstallable: true,
|
|
30
|
+
installCommands: {
|
|
31
|
+
brew: "brew install gh",
|
|
32
|
+
apt: "sudo apt install gh",
|
|
33
|
+
dnf: "sudo dnf install gh",
|
|
34
|
+
pacman: "sudo pacman -S github-cli",
|
|
35
|
+
winget: "winget install --id GitHub.cli -e",
|
|
36
|
+
choco: "choco install gh -y",
|
|
37
|
+
},
|
|
38
|
+
},
|
|
15
39
|
{
|
|
16
40
|
name: "Claude Code CLI",
|
|
17
41
|
command: "claude --version",
|
|
@@ -22,10 +46,11 @@ const deps = [
|
|
|
22
46
|
npm: "npm install -g @anthropic-ai/claude-code",
|
|
23
47
|
},
|
|
24
48
|
},
|
|
49
|
+
// ── Optional (installer continues if missing) ──────────────────────────
|
|
25
50
|
{
|
|
26
51
|
name: "qmd (search)",
|
|
27
52
|
command: "qmd --version",
|
|
28
|
-
required:
|
|
53
|
+
required: false,
|
|
29
54
|
installHint: "npm install -g @tobilu/qmd",
|
|
30
55
|
autoInstallable: true,
|
|
31
56
|
installCommands: {
|
|
@@ -35,27 +60,16 @@ const deps = [
|
|
|
35
60
|
{
|
|
36
61
|
name: "yq",
|
|
37
62
|
command: "yq --version",
|
|
38
|
-
required:
|
|
39
|
-
installHint: "
|
|
63
|
+
required: false,
|
|
64
|
+
installHint: "https://github.com/mikefarah/yq#install",
|
|
40
65
|
autoInstallable: true,
|
|
41
66
|
installCommands: {
|
|
42
67
|
brew: "brew install yq",
|
|
43
68
|
apt: "sudo snap install yq",
|
|
44
69
|
dnf: "sudo dnf install yq",
|
|
45
70
|
pacman: "sudo pacman -S yq",
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
{
|
|
49
|
-
name: "gh CLI",
|
|
50
|
-
command: "gh --version",
|
|
51
|
-
required: false,
|
|
52
|
-
installHint: "brew install gh",
|
|
53
|
-
autoInstallable: true,
|
|
54
|
-
installCommands: {
|
|
55
|
-
brew: "brew install gh",
|
|
56
|
-
apt: "sudo apt install gh",
|
|
57
|
-
dnf: "sudo dnf install gh",
|
|
58
|
-
pacman: "sudo pacman -S github-cli",
|
|
71
|
+
winget: "winget install --id MikeFarah.yq -e",
|
|
72
|
+
choco: "choco install yq -y",
|
|
59
73
|
},
|
|
60
74
|
},
|
|
61
75
|
{
|
|
@@ -99,11 +113,7 @@ export function getInstallCommand(dep, platform) {
|
|
|
99
113
|
}
|
|
100
114
|
function checkCommand(command) {
|
|
101
115
|
try {
|
|
102
|
-
const output = execSync(command, {
|
|
103
|
-
stdio: "pipe",
|
|
104
|
-
encoding: "utf-8",
|
|
105
|
-
timeout: 10_000, // 10s — prevents hanging on slow commands (e.g. claude --version)
|
|
106
|
-
});
|
|
116
|
+
const output = execSync(command, { stdio: "pipe", encoding: "utf-8" });
|
|
107
117
|
const version = output.trim().split("\n")[0];
|
|
108
118
|
return version;
|
|
109
119
|
}
|
|
@@ -150,7 +160,7 @@ export async function checkDeps() {
|
|
|
150
160
|
// Can offer auto-install
|
|
151
161
|
const defaultYes = dep.required;
|
|
152
162
|
const optionalTag = dep.required ? "" : " (optional)";
|
|
153
|
-
const accepted = await confirm(
|
|
163
|
+
const accepted = await confirm(`${dep.name} not found.${optionalTag} Install now? [${installCmd}]`, defaultYes);
|
|
154
164
|
if (accepted) {
|
|
155
165
|
info(`Running: ${installCmd}`);
|
|
156
166
|
try {
|
|
@@ -166,23 +176,25 @@ export async function checkDeps() {
|
|
|
166
176
|
results.push({ name: dep.name, required: dep.required, status: "just-installed", version: recheck, installHint: dep.installHint });
|
|
167
177
|
continue;
|
|
168
178
|
}
|
|
169
|
-
else {
|
|
170
|
-
warn(`${dep.name} install failed —
|
|
179
|
+
else if (dep.required) {
|
|
180
|
+
warn(`${dep.name} install failed — this is required to continue`);
|
|
171
181
|
results.push({ name: dep.name, required: dep.required, status: "missing", installHint: dep.installHint });
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
182
|
+
allRequired = false;
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
info(`${dep.name} install didn't stick — you can install it later: ${dep.installHint}`);
|
|
186
|
+
results.push({ name: dep.name, required: dep.required, status: "skipped", installHint: dep.installHint });
|
|
175
187
|
}
|
|
176
188
|
}
|
|
177
189
|
else {
|
|
178
190
|
// User declined
|
|
179
191
|
if (dep.required) {
|
|
180
|
-
warn(`${dep.name}
|
|
192
|
+
warn(`${dep.name} is required — can't continue without it`);
|
|
181
193
|
results.push({ name: dep.name, required: dep.required, status: "missing", installHint: dep.installHint });
|
|
182
194
|
allRequired = false;
|
|
183
195
|
}
|
|
184
196
|
else {
|
|
185
|
-
info(`${dep.name}
|
|
197
|
+
info(`${dep.name} skipped — you can install it later: ${dep.installHint}`);
|
|
186
198
|
results.push({ name: dep.name, required: dep.required, status: "skipped", installHint: dep.installHint });
|
|
187
199
|
}
|
|
188
200
|
}
|
|
@@ -196,7 +208,7 @@ export async function checkDeps() {
|
|
|
196
208
|
allRequired = false;
|
|
197
209
|
}
|
|
198
210
|
else {
|
|
199
|
-
info(`${dep.name} (optional) — ${dep.installHint}`);
|
|
211
|
+
info(`${dep.name} (optional) — install later: ${dep.installHint}`);
|
|
200
212
|
results.push({ name: dep.name, required: dep.required, status: "skipped", installHint: dep.installHint });
|
|
201
213
|
}
|
|
202
214
|
}
|
package/dist/deps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../src/deps.ts"],"names":[],"mappings":"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"}
|
package/dist/fetch-template.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Strategy:
|
|
5
5
|
* 1. GitHub REST API → download tarball_url
|
|
6
|
-
* 2. Fallback:
|
|
7
|
-
* 3. If both fail: throw with manual
|
|
6
|
+
* 2. Fallback: `git clone --depth 1` (git is a hard dep, checked up front)
|
|
7
|
+
* 3. If both fail: throw with manual instructions
|
|
8
8
|
*
|
|
9
9
|
* Returns the version tag that was fetched.
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-template.d.ts","sourceRoot":"","sources":["../src/fetch-template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch-template.d.ts","sourceRoot":"","sources":["../src/fetch-template.ts"],"names":[],"mappings":"AAqIA;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B9B"}
|
package/dist/fetch-template.js
CHANGED
|
@@ -3,6 +3,7 @@ import * as path from "path";
|
|
|
3
3
|
import * as os from "os";
|
|
4
4
|
import { execSync } from "child_process";
|
|
5
5
|
const REPO = "indigoai-us/hq";
|
|
6
|
+
const REPO_HTTPS = `https://github.com/${REPO}.git`;
|
|
6
7
|
const GITHUB_API = "https://api.github.com";
|
|
7
8
|
async function getLatestRelease() {
|
|
8
9
|
const response = await fetch(`${GITHUB_API}/repos/${REPO}/releases/latest`, {
|
|
@@ -11,8 +12,7 @@ async function getLatestRelease() {
|
|
|
11
12
|
if (!response.ok) {
|
|
12
13
|
throw new Error(`GitHub API returned ${response.status}: ${response.statusText}`);
|
|
13
14
|
}
|
|
14
|
-
|
|
15
|
-
return data;
|
|
15
|
+
return (await response.json());
|
|
16
16
|
}
|
|
17
17
|
async function getTagRelease(tag) {
|
|
18
18
|
const response = await fetch(`${GITHUB_API}/repos/${REPO}/releases/tags/${tag}`, {
|
|
@@ -21,8 +21,7 @@ async function getTagRelease(tag) {
|
|
|
21
21
|
if (!response.ok) {
|
|
22
22
|
throw new Error(`GitHub API returned ${response.status}: ${response.statusText}`);
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
return data;
|
|
24
|
+
return (await response.json());
|
|
26
25
|
}
|
|
27
26
|
async function downloadAndExtractViaApi(tarballUrl, targetDir) {
|
|
28
27
|
const response = await fetch(tarballUrl, {
|
|
@@ -48,9 +47,8 @@ function extractTemplateDirFromTar(tarPath, targetDir) {
|
|
|
48
47
|
// We need to find the `template/` subdirectory within that and extract it.
|
|
49
48
|
const tmpExtract = fs.mkdtempSync(path.join(os.tmpdir(), "create-hq-extract-"));
|
|
50
49
|
try {
|
|
51
|
-
//
|
|
50
|
+
// tar is part of git for windows + present on macOS/Linux
|
|
52
51
|
execSync(`tar -xzf "${tarPath}" -C "${tmpExtract}"`, { stdio: "pipe" });
|
|
53
|
-
// Find the top-level directory created by GitHub's tarball
|
|
54
52
|
const entries = fs.readdirSync(tmpExtract);
|
|
55
53
|
if (entries.length === 0) {
|
|
56
54
|
throw new Error("Tarball was empty");
|
|
@@ -60,7 +58,6 @@ function extractTemplateDirFromTar(tarPath, targetDir) {
|
|
|
60
58
|
if (!fs.existsSync(templateSrc)) {
|
|
61
59
|
throw new Error("template/ directory not found in HQ tarball");
|
|
62
60
|
}
|
|
63
|
-
// Copy template contents to targetDir
|
|
64
61
|
fs.ensureDirSync(targetDir);
|
|
65
62
|
fs.copySync(templateSrc, targetDir, { overwrite: true });
|
|
66
63
|
}
|
|
@@ -68,17 +65,47 @@ function extractTemplateDirFromTar(tarPath, targetDir) {
|
|
|
68
65
|
fs.removeSync(tmpExtract);
|
|
69
66
|
}
|
|
70
67
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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-"));
|
|
75
76
|
try {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
stdio: "pipe"
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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 };
|
|
82
109
|
}
|
|
83
110
|
finally {
|
|
84
111
|
fs.removeSync(tmpDir);
|
|
@@ -89,47 +116,36 @@ function extractTemplateDirViaGhCli(tag, targetDir) {
|
|
|
89
116
|
*
|
|
90
117
|
* Strategy:
|
|
91
118
|
* 1. GitHub REST API → download tarball_url
|
|
92
|
-
* 2. Fallback:
|
|
93
|
-
* 3. If both fail: throw with manual
|
|
119
|
+
* 2. Fallback: `git clone --depth 1` (git is a hard dep, checked up front)
|
|
120
|
+
* 3. If both fail: throw with manual instructions
|
|
94
121
|
*
|
|
95
122
|
* Returns the version tag that was fetched.
|
|
96
123
|
*/
|
|
97
124
|
export async function fetchTemplate(targetDir, tag) {
|
|
98
125
|
let version = tag || "";
|
|
99
|
-
let tarballUrl = "";
|
|
100
126
|
let apiError = null;
|
|
101
127
|
// --- Attempt 1: GitHub API ---
|
|
102
128
|
try {
|
|
103
129
|
const release = tag ? await getTagRelease(tag) : await getLatestRelease();
|
|
104
130
|
version = release.tag_name;
|
|
105
|
-
|
|
106
|
-
await downloadAndExtractViaApi(tarballUrl, targetDir);
|
|
131
|
+
await downloadAndExtractViaApi(release.tarball_url, targetDir);
|
|
107
132
|
return { version };
|
|
108
133
|
}
|
|
109
134
|
catch (err) {
|
|
110
135
|
apiError = err;
|
|
111
136
|
}
|
|
112
|
-
// --- Attempt 2:
|
|
137
|
+
// --- Attempt 2: git clone fallback ---
|
|
113
138
|
try {
|
|
114
|
-
|
|
115
|
-
extractTemplateDirViaGhCli(ref, targetDir);
|
|
116
|
-
// If we got a version from the API response (even if download failed later), keep it.
|
|
117
|
-
// Otherwise mark as unknown.
|
|
118
|
-
if (!version) {
|
|
119
|
-
version = tag || "latest";
|
|
120
|
-
}
|
|
121
|
-
return { version };
|
|
139
|
+
return fetchViaGitClone(targetDir, tag);
|
|
122
140
|
}
|
|
123
|
-
catch (
|
|
124
|
-
// Both failed — provide a clear error message.
|
|
141
|
+
catch (gitErr) {
|
|
125
142
|
const apiMsg = apiError instanceof Error ? apiError.message : String(apiError);
|
|
126
|
-
const
|
|
143
|
+
const gitMsg = gitErr instanceof Error ? gitErr.message : String(gitErr);
|
|
127
144
|
throw new Error(`Failed to fetch HQ template from GitHub.\n\n` +
|
|
128
145
|
` GitHub API error: ${apiMsg}\n` +
|
|
129
|
-
`
|
|
130
|
-
`
|
|
131
|
-
`
|
|
132
|
-
` git clone https://github.com/indigoai-us/hq.git\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` +
|
|
133
149
|
` cp -R hq/template ${targetDir}\n`);
|
|
134
150
|
}
|
|
135
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-template.js","sourceRoot":"","sources":["../src/fetch-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,IAAI,GAAG,gBAAgB,CAAC;AAC9B,MAAM,UAAU,GAAG,wBAAwB,CAAC;AAO5C,KAAK,UAAU,gBAAgB;IAC7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,UAAU,UAAU,IAAI,kBAAkB,EAAE;QAC1E,OAAO,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE;KACnD,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,
|
|
1
|
+
{"version":3,"file":"fetch-template.js","sourceRoot":"","sources":["../src/fetch-template.ts"],"names":[],"mappings":"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"}
|
package/dist/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/git.js
CHANGED
|
@@ -1,11 +1,35 @@
|
|
|
1
1
|
import { execSync } from "child_process";
|
|
2
|
+
function hasGitConfig(key, cwd) {
|
|
3
|
+
try {
|
|
4
|
+
// Check both global and local config
|
|
5
|
+
execSync(`git config ${key}`, { cwd, stdio: "pipe" });
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
2
12
|
export function initGit(dir) {
|
|
3
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" });
|
|
17
|
+
}
|
|
18
|
+
if (!hasGitConfig("user.name", dir)) {
|
|
19
|
+
execSync('git config user.name "HQ User"', { cwd: dir, stdio: "pipe" });
|
|
20
|
+
}
|
|
4
21
|
execSync("git add -A", { cwd: dir, stdio: "pipe" });
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
22
|
+
try {
|
|
23
|
+
execSync('git commit -m "Initial HQ setup via create-hq"', {
|
|
24
|
+
cwd: dir,
|
|
25
|
+
stdio: "pipe",
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
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}`);
|
|
32
|
+
}
|
|
9
33
|
}
|
|
10
34
|
export function hasGit() {
|
|
11
35
|
try {
|
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,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,QAAQ,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;
|
|
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"}
|