create-hq 7.0.0 → 10.1.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.
- package/dist/__tests__/deps.test.d.ts +2 -0
- package/dist/__tests__/deps.test.d.ts.map +1 -0
- package/dist/__tests__/deps.test.js +176 -0
- package/dist/__tests__/deps.test.js.map +1 -0
- package/dist/__tests__/platform.test.d.ts +2 -0
- package/dist/__tests__/platform.test.d.ts.map +1 -0
- package/dist/__tests__/platform.test.js +127 -0
- package/dist/__tests__/platform.test.js.map +1 -0
- package/dist/auth.d.ts +32 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +156 -0
- package/dist/auth.js.map +1 -0
- package/dist/deps.d.ts +32 -2
- package/dist/deps.d.ts.map +1 -1
- package/dist/deps.js +180 -7
- package/dist/deps.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/packages.d.ts +71 -0
- package/dist/packages.d.ts.map +1 -0
- package/dist/packages.js +332 -0
- package/dist/packages.js.map +1 -0
- package/dist/platform.d.ts +9 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +69 -0
- package/dist/platform.js.map +1 -0
- package/dist/scaffold.d.ts +1 -0
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +58 -42
- package/dist/scaffold.js.map +1 -1
- package/dist/ui.js +1 -1
- package/dist/ui.js.map +1 -1
- package/package.json +4 -3
package/dist/packages.js
ADDED
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Package discovery, download, and installation for create-hq (US-008)
|
|
3
|
+
*
|
|
4
|
+
* Handles:
|
|
5
|
+
* - Public package discovery (GET /api/packages)
|
|
6
|
+
* - Entitlement check (GET /api/packages/my-entitlements)
|
|
7
|
+
* - Package download with SHA256 + RSA signature verification
|
|
8
|
+
* - Extraction to packages/installed/<slug>/
|
|
9
|
+
* - Registry.yaml update
|
|
10
|
+
* - Auto-merge for fresh HQ (register workers, commands, knowledge)
|
|
11
|
+
*/
|
|
12
|
+
import * as crypto from "crypto";
|
|
13
|
+
import * as fs from "fs";
|
|
14
|
+
import * as path from "path";
|
|
15
|
+
import * as os from "os";
|
|
16
|
+
import { execSync } from "child_process";
|
|
17
|
+
import chalk from "chalk";
|
|
18
|
+
// ─── Registry URL ────────────────────────────────────────────────────────────
|
|
19
|
+
const DEFAULT_REGISTRY_URL = "https://registry.hq.sh/api";
|
|
20
|
+
/**
|
|
21
|
+
* Read the registry URL from packages/sources.yaml in the target HQ dir.
|
|
22
|
+
* Falls back to the default registry URL if sources.yaml is not present
|
|
23
|
+
* (which is expected during initial scaffold before the template is fully
|
|
24
|
+
* written).
|
|
25
|
+
*/
|
|
26
|
+
export function getRegistryUrl(hqRoot) {
|
|
27
|
+
const sourcesPath = path.join(hqRoot, "packages", "sources.yaml");
|
|
28
|
+
if (fs.existsSync(sourcesPath)) {
|
|
29
|
+
const content = fs.readFileSync(sourcesPath, "utf-8");
|
|
30
|
+
// Simple YAML extraction — avoid adding js-yaml as dep to create-hq
|
|
31
|
+
const urlMatch = content.match(/url:\s*["']?([^\s"']+)/);
|
|
32
|
+
if (urlMatch?.[1]) {
|
|
33
|
+
return urlMatch[1];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return DEFAULT_REGISTRY_URL;
|
|
37
|
+
}
|
|
38
|
+
// ─── API client (lightweight, no class needed) ───────────────────────────────
|
|
39
|
+
async function apiGet(registryUrl, urlPath, authToken) {
|
|
40
|
+
const headers = { Accept: "application/json" };
|
|
41
|
+
if (authToken) {
|
|
42
|
+
headers["Authorization"] = `Bearer ${authToken}`;
|
|
43
|
+
}
|
|
44
|
+
const res = await fetch(`${registryUrl}${urlPath}`, {
|
|
45
|
+
method: "GET",
|
|
46
|
+
headers,
|
|
47
|
+
signal: AbortSignal.timeout(15_000),
|
|
48
|
+
});
|
|
49
|
+
if (!res.ok) {
|
|
50
|
+
const text = await res.text().catch(() => "");
|
|
51
|
+
throw new Error(`Registry API GET ${urlPath} failed (${res.status}): ${text}`);
|
|
52
|
+
}
|
|
53
|
+
return (await res.json());
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Fetch the public package catalog.
|
|
57
|
+
* Returns an empty array on failure (network down, etc.).
|
|
58
|
+
*/
|
|
59
|
+
export async function fetchPublicPackages(registryUrl) {
|
|
60
|
+
try {
|
|
61
|
+
const data = await apiGet(registryUrl, "/packages");
|
|
62
|
+
return data.packages ?? [];
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Fetch packages the authenticated user is entitled to.
|
|
70
|
+
* Returns an empty array on failure.
|
|
71
|
+
*/
|
|
72
|
+
export async function fetchEntitlements(registryUrl, authToken) {
|
|
73
|
+
try {
|
|
74
|
+
const data = await apiGet(registryUrl, "/packages/my-entitlements", authToken);
|
|
75
|
+
return data.entitlements ?? [];
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Build the combined package list for the TUI.
|
|
83
|
+
* Entitled packages are pre-checked; non-entitled are shown with lock icon.
|
|
84
|
+
*/
|
|
85
|
+
export function buildPackageChoices(allPackages, entitlements) {
|
|
86
|
+
const entitledSlugs = new Set(entitlements.map((e) => e.slug));
|
|
87
|
+
return allPackages.map((pkg) => ({
|
|
88
|
+
pkg,
|
|
89
|
+
entitled: entitledSlugs.has(pkg.slug),
|
|
90
|
+
selected: entitledSlugs.has(pkg.slug), // pre-check entitled packages
|
|
91
|
+
}));
|
|
92
|
+
}
|
|
93
|
+
// ─── Integrity verification ──────────────────────────────────────────────────
|
|
94
|
+
async function verifySha256(filePath, expectedHash) {
|
|
95
|
+
return new Promise((resolve, reject) => {
|
|
96
|
+
const hash = crypto.createHash("sha256");
|
|
97
|
+
const stream = fs.createReadStream(filePath);
|
|
98
|
+
stream.on("data", (chunk) => hash.update(chunk));
|
|
99
|
+
stream.on("end", () => {
|
|
100
|
+
const computed = hash.digest("hex");
|
|
101
|
+
resolve(computed === expectedHash.toLowerCase());
|
|
102
|
+
});
|
|
103
|
+
stream.on("error", reject);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
function verifyRsaSignature(sha256Hash, signature, hqRoot) {
|
|
107
|
+
const keyPath = path.resolve(hqRoot, "packages", ".keys", "registry-public.pem");
|
|
108
|
+
if (!fs.existsSync(keyPath)) {
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
const publicKey = fs.readFileSync(keyPath, "utf-8");
|
|
112
|
+
const verifier = crypto.createVerify("SHA256");
|
|
113
|
+
verifier.update(sha256Hash);
|
|
114
|
+
verifier.end();
|
|
115
|
+
return verifier.verify(publicKey, Buffer.from(signature, "base64"));
|
|
116
|
+
}
|
|
117
|
+
// ─── Download + extract ──────────────────────────────────────────────────────
|
|
118
|
+
async function getDownloadInfo(registryUrl, slug, authToken) {
|
|
119
|
+
return apiGet(registryUrl, `/packages/${encodeURIComponent(slug)}/download`, authToken);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Download, verify, and extract a single package into the target HQ.
|
|
123
|
+
* Returns true on success, false on failure (non-throwing for batch installs).
|
|
124
|
+
*/
|
|
125
|
+
export async function installPackage(registryUrl, slug, hqRoot, authToken) {
|
|
126
|
+
const tmpFile = path.resolve(os.tmpdir(), `hq-pkg-${slug}-${Date.now()}.tar.gz`);
|
|
127
|
+
try {
|
|
128
|
+
// 1. Get download URL
|
|
129
|
+
const download = await getDownloadInfo(registryUrl, slug, authToken);
|
|
130
|
+
// 2. Download
|
|
131
|
+
const response = await fetch(download.url, {
|
|
132
|
+
signal: AbortSignal.timeout(120_000),
|
|
133
|
+
});
|
|
134
|
+
if (!response.ok) {
|
|
135
|
+
throw new Error(`Download failed (${response.status})`);
|
|
136
|
+
}
|
|
137
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
138
|
+
fs.writeFileSync(tmpFile, buffer);
|
|
139
|
+
// 3. Verify SHA256
|
|
140
|
+
const hashValid = await verifySha256(tmpFile, download.sha256);
|
|
141
|
+
if (!hashValid) {
|
|
142
|
+
throw new Error("SHA256 hash mismatch — file may be corrupted or tampered with");
|
|
143
|
+
}
|
|
144
|
+
// 4. Verify RSA signature (warn-only, non-blocking)
|
|
145
|
+
if (download.signature) {
|
|
146
|
+
const sigValid = verifyRsaSignature(download.sha256, download.signature, hqRoot);
|
|
147
|
+
if (!sigValid) {
|
|
148
|
+
// Non-fatal — proceed with SHA256-only verification
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// 5. Extract to packages/installed/<slug>/
|
|
152
|
+
const installDir = path.resolve(hqRoot, "packages", "installed", slug);
|
|
153
|
+
if (fs.existsSync(installDir)) {
|
|
154
|
+
fs.rmSync(installDir, { recursive: true, force: true });
|
|
155
|
+
}
|
|
156
|
+
fs.mkdirSync(installDir, { recursive: true });
|
|
157
|
+
execSync(`tar -xzf "${tmpFile}" -C "${installDir}"`, { stdio: "pipe" });
|
|
158
|
+
// 6. Validate package.yaml slug
|
|
159
|
+
const packageYamlPath = path.resolve(installDir, "package.yaml");
|
|
160
|
+
if (fs.existsSync(packageYamlPath)) {
|
|
161
|
+
const pkgContent = fs.readFileSync(packageYamlPath, "utf-8");
|
|
162
|
+
const slugMatch = pkgContent.match(/^slug:\s*(.+)$/m);
|
|
163
|
+
if (slugMatch?.[1]?.trim() && slugMatch[1].trim() !== slug) {
|
|
164
|
+
fs.rmSync(installDir, { recursive: true, force: true });
|
|
165
|
+
throw new Error(`Package slug mismatch: expected "${slug}", got "${slugMatch[1].trim()}"`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// 7. Update registry.yaml
|
|
169
|
+
updateRegistry(hqRoot, slug, registryUrl);
|
|
170
|
+
// 8. Auto-merge into fresh HQ
|
|
171
|
+
autoMergePackage(installDir, hqRoot);
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
finally {
|
|
178
|
+
if (fs.existsSync(tmpFile)) {
|
|
179
|
+
fs.unlinkSync(tmpFile);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// ─── Registry.yaml update ────────────────────────────────────────────────────
|
|
184
|
+
function updateRegistry(hqRoot, slug, source) {
|
|
185
|
+
const registryPath = path.resolve(hqRoot, "packages", "registry.yaml");
|
|
186
|
+
const packagesDir = path.dirname(registryPath);
|
|
187
|
+
if (!fs.existsSync(packagesDir)) {
|
|
188
|
+
fs.mkdirSync(packagesDir, { recursive: true });
|
|
189
|
+
}
|
|
190
|
+
const now = new Date().toISOString();
|
|
191
|
+
// Read existing registry or create empty one
|
|
192
|
+
let entries = [];
|
|
193
|
+
if (fs.existsSync(registryPath)) {
|
|
194
|
+
const content = fs.readFileSync(registryPath, "utf-8");
|
|
195
|
+
// Simple YAML array parsing — each entry starts with "- slug:"
|
|
196
|
+
const existing = content.match(/^packages:/m) ? content : "";
|
|
197
|
+
if (existing) {
|
|
198
|
+
// Parse existing entries (basic approach without js-yaml dep)
|
|
199
|
+
try {
|
|
200
|
+
const lines = content.split("\n");
|
|
201
|
+
let current = null;
|
|
202
|
+
for (const line of lines) {
|
|
203
|
+
if (line.match(/^\s*-\s+\w+:/)) {
|
|
204
|
+
if (current)
|
|
205
|
+
entries.push(current);
|
|
206
|
+
current = {};
|
|
207
|
+
const kv = line.replace(/^\s*-\s+/, "").split(/:\s*/);
|
|
208
|
+
if (kv.length >= 2)
|
|
209
|
+
current[kv[0]] = kv.slice(1).join(":");
|
|
210
|
+
}
|
|
211
|
+
else if (line.match(/^\s+\w+:/) && current) {
|
|
212
|
+
const kv = line.trim().split(/:\s*/);
|
|
213
|
+
if (kv.length >= 2)
|
|
214
|
+
current[kv[0]] = kv.slice(1).join(":");
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (current)
|
|
218
|
+
entries.push(current);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
entries = [];
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// Remove existing entry for this slug
|
|
226
|
+
entries = entries.filter((e) => e.slug !== slug);
|
|
227
|
+
// Add new entry
|
|
228
|
+
entries.push({
|
|
229
|
+
slug,
|
|
230
|
+
name: slug,
|
|
231
|
+
version: "latest",
|
|
232
|
+
source,
|
|
233
|
+
installed_at: now,
|
|
234
|
+
updated_at: now,
|
|
235
|
+
});
|
|
236
|
+
// Write back as YAML
|
|
237
|
+
const yamlLines = ["packages:"];
|
|
238
|
+
for (const entry of entries) {
|
|
239
|
+
let first = true;
|
|
240
|
+
for (const [key, value] of Object.entries(entry)) {
|
|
241
|
+
if (first) {
|
|
242
|
+
yamlLines.push(` - ${key}: ${value}`);
|
|
243
|
+
first = false;
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
yamlLines.push(` ${key}: ${value}`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
fs.writeFileSync(registryPath, yamlLines.join("\n") + "\n", "utf-8");
|
|
251
|
+
}
|
|
252
|
+
// ─── Auto-merge for fresh HQ ────────────────────────────────────────────────
|
|
253
|
+
/**
|
|
254
|
+
* Merge package contents into a fresh HQ directory.
|
|
255
|
+
*
|
|
256
|
+
* Since this runs during initial scaffold (fresh HQ), there are no conflicts.
|
|
257
|
+
* Simply copies workers, commands, knowledge, and other assets into their
|
|
258
|
+
* standard locations.
|
|
259
|
+
*/
|
|
260
|
+
function autoMergePackage(installDir, hqRoot) {
|
|
261
|
+
// Workers: copy to workers/public/<worker-name>/
|
|
262
|
+
const workersDir = path.join(installDir, "workers");
|
|
263
|
+
if (fs.existsSync(workersDir)) {
|
|
264
|
+
const targetWorkersDir = path.join(hqRoot, "workers", "public");
|
|
265
|
+
copyDirContents(workersDir, targetWorkersDir);
|
|
266
|
+
}
|
|
267
|
+
// Commands: copy to .claude/commands/
|
|
268
|
+
const commandsDir = path.join(installDir, "commands");
|
|
269
|
+
if (fs.existsSync(commandsDir)) {
|
|
270
|
+
const targetCommandsDir = path.join(hqRoot, ".claude", "commands");
|
|
271
|
+
copyDirContents(commandsDir, targetCommandsDir);
|
|
272
|
+
}
|
|
273
|
+
// Knowledge: copy to knowledge/public/
|
|
274
|
+
const knowledgeDir = path.join(installDir, "knowledge");
|
|
275
|
+
if (fs.existsSync(knowledgeDir)) {
|
|
276
|
+
const targetKnowledgeDir = path.join(hqRoot, "knowledge", "public");
|
|
277
|
+
copyDirContents(knowledgeDir, targetKnowledgeDir);
|
|
278
|
+
}
|
|
279
|
+
// Skills: copy to .claude/skills/
|
|
280
|
+
const skillsDir = path.join(installDir, "skills");
|
|
281
|
+
if (fs.existsSync(skillsDir)) {
|
|
282
|
+
const targetSkillsDir = path.join(hqRoot, ".claude", "skills");
|
|
283
|
+
copyDirContents(skillsDir, targetSkillsDir);
|
|
284
|
+
}
|
|
285
|
+
// Policies: copy to .claude/policies/
|
|
286
|
+
const policiesDir = path.join(installDir, "policies");
|
|
287
|
+
if (fs.existsSync(policiesDir)) {
|
|
288
|
+
const targetPoliciesDir = path.join(hqRoot, ".claude", "policies");
|
|
289
|
+
copyDirContents(policiesDir, targetPoliciesDir);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function copyDirContents(src, dest) {
|
|
293
|
+
if (!fs.existsSync(dest)) {
|
|
294
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
295
|
+
}
|
|
296
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
297
|
+
for (const entry of entries) {
|
|
298
|
+
const srcPath = path.join(src, entry.name);
|
|
299
|
+
const destPath = path.join(dest, entry.name);
|
|
300
|
+
if (entry.isDirectory()) {
|
|
301
|
+
copyDirContents(srcPath, destPath);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
fs.copyFileSync(srcPath, destPath);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// ─── TUI display helpers ────────────────────────────────────────────────────
|
|
309
|
+
/** Format a package for display in the selection list. */
|
|
310
|
+
export function formatPackageChoice(choice) {
|
|
311
|
+
const { pkg, entitled } = choice;
|
|
312
|
+
if (entitled) {
|
|
313
|
+
return `${pkg.name} ${chalk.dim(`— ${pkg.description}`)}`;
|
|
314
|
+
}
|
|
315
|
+
// Non-entitled: lock icon + tier label
|
|
316
|
+
return `${chalk.dim("🔒")} ${chalk.dim(pkg.name)} ${chalk.dim(`— ${pkg.description}`)} ${chalk.yellow(`[${pkg.tier}]`)}`;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Install multiple packages in sequence, reporting progress.
|
|
320
|
+
* Returns the list of successfully installed slugs.
|
|
321
|
+
*/
|
|
322
|
+
export async function installSelectedPackages(registryUrl, slugs, hqRoot, authToken) {
|
|
323
|
+
const installed = [];
|
|
324
|
+
for (const slug of slugs) {
|
|
325
|
+
const ok = await installPackage(registryUrl, slug, hqRoot, authToken);
|
|
326
|
+
if (ok) {
|
|
327
|
+
installed.push(slug);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return installed;
|
|
331
|
+
}
|
|
332
|
+
//# sourceMappingURL=packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.js","sourceRoot":"","sources":["../src/packages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type SystemPackageManager = "brew" | "apt" | "dnf" | "yum" | "pacman" | null;
|
|
2
|
+
export type OsType = "macos" | "linux-debian" | "linux-fedora" | "linux-arch" | "linux" | "unix";
|
|
3
|
+
export interface PlatformInfo {
|
|
4
|
+
os: OsType;
|
|
5
|
+
packageManager: SystemPackageManager;
|
|
6
|
+
npmAvailable: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function detectPlatform(): PlatformInfo;
|
|
9
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;AAEpF,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAEjG,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,oBAAoB,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;CACvB;AAmDD,wBAAgB,cAAc,IAAI,YAAY,CAO7C"}
|
package/dist/platform.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
function hasBin(name) {
|
|
3
|
+
try {
|
|
4
|
+
execSync(`which ${name}`, { stdio: "pipe" });
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function detectOs() {
|
|
12
|
+
const platform = process.platform;
|
|
13
|
+
if (platform === "darwin")
|
|
14
|
+
return "macos";
|
|
15
|
+
if (platform !== "linux")
|
|
16
|
+
return "unix";
|
|
17
|
+
// Detect Linux distro family
|
|
18
|
+
try {
|
|
19
|
+
const release = execSync("cat /etc/os-release", { stdio: "pipe" }).toString();
|
|
20
|
+
if (/ID_LIKE=.*debian|ID=ubuntu|ID=debian/i.test(release))
|
|
21
|
+
return "linux-debian";
|
|
22
|
+
if (/ID_LIKE=.*fedora|ID_LIKE=.*rhel|ID=fedora/i.test(release))
|
|
23
|
+
return "linux-fedora";
|
|
24
|
+
if (/ID=arch|ID_LIKE=.*arch/i.test(release))
|
|
25
|
+
return "linux-arch";
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// /etc/os-release missing — generic linux
|
|
29
|
+
}
|
|
30
|
+
return "linux";
|
|
31
|
+
}
|
|
32
|
+
function detectSystemPm(os) {
|
|
33
|
+
switch (os) {
|
|
34
|
+
case "macos":
|
|
35
|
+
return hasBin("brew") ? "brew" : null;
|
|
36
|
+
case "linux-debian":
|
|
37
|
+
return hasBin("apt") ? "apt" : null;
|
|
38
|
+
case "linux-fedora":
|
|
39
|
+
if (hasBin("dnf"))
|
|
40
|
+
return "dnf";
|
|
41
|
+
if (hasBin("yum"))
|
|
42
|
+
return "yum";
|
|
43
|
+
return null;
|
|
44
|
+
case "linux-arch":
|
|
45
|
+
return hasBin("pacman") ? "pacman" : null;
|
|
46
|
+
default:
|
|
47
|
+
// Best-effort for generic linux/unix
|
|
48
|
+
if (hasBin("apt"))
|
|
49
|
+
return "apt";
|
|
50
|
+
if (hasBin("dnf"))
|
|
51
|
+
return "dnf";
|
|
52
|
+
if (hasBin("yum"))
|
|
53
|
+
return "yum";
|
|
54
|
+
if (hasBin("pacman"))
|
|
55
|
+
return "pacman";
|
|
56
|
+
if (hasBin("brew"))
|
|
57
|
+
return "brew";
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function detectPlatform() {
|
|
62
|
+
const os = detectOs();
|
|
63
|
+
return {
|
|
64
|
+
os,
|
|
65
|
+
packageManager: detectSystemPm(os),
|
|
66
|
+
npmAvailable: hasBin("npm"),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAYzC,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,CAAC;QACH,QAAQ,CAAC,SAAS,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IAExC,6BAA6B;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC9E,IAAI,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,cAAc,CAAC;QACjF,IAAI,4CAA4C,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,cAAc,CAAC;QACtF,IAAI,yBAAyB,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,OAAO,YAAY,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,EAAU;IAChC,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACxC,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,KAAK,cAAc;YACjB,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,KAAK,YAAY;YACf,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C;YACE,qCAAqC;YACrC,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChC,IAAI,MAAM,CAAC,QAAQ,CAAC;gBAAE,OAAO,QAAQ,CAAC;YACtC,IAAI,MAAM,CAAC,MAAM,CAAC;gBAAE,OAAO,MAAM,CAAC;YAClC,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtB,OAAO;QACL,EAAE;QACF,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC;QAClC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC;KAC5B,CAAC;AACJ,CAAC"}
|
package/dist/scaffold.d.ts
CHANGED
package/dist/scaffold.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/scaffold.js
CHANGED
|
@@ -46,27 +46,54 @@ export async function scaffold(directory, options) {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
// 2. Fetch template from GitHub
|
|
50
|
-
const fetchLabel = "Fetching HQ template from GitHub...";
|
|
51
|
-
stepStatus(fetchLabel, "running");
|
|
49
|
+
// 2. Fetch template (from local path or GitHub)
|
|
52
50
|
let hqVersion = "";
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
51
|
+
if (options.localTemplate) {
|
|
52
|
+
const localLabel = "Copying local HQ template...";
|
|
53
|
+
stepStatus(localLabel, "running");
|
|
54
|
+
try {
|
|
55
|
+
const templateSrc = path.resolve(options.localTemplate);
|
|
56
|
+
if (!fs.existsSync(templateSrc)) {
|
|
57
|
+
throw new Error(`Local template not found: ${templateSrc}`);
|
|
58
|
+
}
|
|
59
|
+
fs.ensureDirSync(targetDir);
|
|
60
|
+
fs.copySync(templateSrc, targetDir, { overwrite: true });
|
|
61
|
+
hqVersion = "local";
|
|
62
|
+
const commandCount = fs.existsSync(path.join(targetDir, ".claude", "commands"))
|
|
63
|
+
? fs.readdirSync(path.join(targetDir, ".claude", "commands")).filter((f) => f.endsWith(".md")).length
|
|
64
|
+
: 0;
|
|
65
|
+
const workerCount = fs.existsSync(path.join(targetDir, "workers"))
|
|
66
|
+
? fs.readdirSync(path.join(targetDir, "workers"), { recursive: true })
|
|
67
|
+
.filter((f) => String(f).endsWith("worker.yaml")).length
|
|
68
|
+
: 0;
|
|
69
|
+
stepStatus(localLabel, "done");
|
|
70
|
+
success(`HQ template (local) (${commandCount} commands, ${workerCount} workers)`);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
stepStatus(localLabel, "failed");
|
|
74
|
+
throw err;
|
|
75
|
+
}
|
|
66
76
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
77
|
+
else {
|
|
78
|
+
const fetchLabel = "Fetching HQ template from GitHub...";
|
|
79
|
+
stepStatus(fetchLabel, "running");
|
|
80
|
+
try {
|
|
81
|
+
const { version } = await fetchTemplate(targetDir, options.tag);
|
|
82
|
+
hqVersion = version;
|
|
83
|
+
const commandCount = fs.existsSync(path.join(targetDir, ".claude", "commands"))
|
|
84
|
+
? fs.readdirSync(path.join(targetDir, ".claude", "commands")).filter((f) => f.endsWith(".md")).length
|
|
85
|
+
: 0;
|
|
86
|
+
const workerCount = fs.existsSync(path.join(targetDir, "workers"))
|
|
87
|
+
? fs.readdirSync(path.join(targetDir, "workers"), { recursive: true })
|
|
88
|
+
.filter((f) => String(f).endsWith("worker.yaml")).length
|
|
89
|
+
: 0;
|
|
90
|
+
stepStatus(fetchLabel, "done");
|
|
91
|
+
success(`HQ template ${version} (${commandCount} commands, ${workerCount} workers)`);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
stepStatus(fetchLabel, "failed");
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
70
97
|
}
|
|
71
98
|
// 3. Git init
|
|
72
99
|
const gitLabel = "Initializing git repository";
|
|
@@ -109,34 +136,23 @@ export async function scaffold(directory, options) {
|
|
|
109
136
|
}
|
|
110
137
|
// 5. Check dependencies
|
|
111
138
|
const depsLabel = "Checking dependencies";
|
|
112
|
-
stepStatus(depsLabel, "running");
|
|
113
139
|
if (!options.skipDeps) {
|
|
114
|
-
checkDeps
|
|
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
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
stepStatus(depsLabel, "running");
|
|
148
|
+
stepStatus(depsLabel, "done");
|
|
115
149
|
}
|
|
116
|
-
stepStatus(depsLabel, "done");
|
|
117
150
|
// 6. Smart cloud sync detection
|
|
118
151
|
const alreadySynced = await detectExistingSync(targetDir);
|
|
119
152
|
if (alreadySynced) {
|
|
120
153
|
success("Cloud sync already configured — skipping setup");
|
|
121
154
|
}
|
|
122
|
-
// 7.
|
|
123
|
-
if (!options.skipCli) {
|
|
124
|
-
console.log();
|
|
125
|
-
const installCli = await confirm("Install @indigoai-us/hq-cli globally for module management?");
|
|
126
|
-
if (installCli) {
|
|
127
|
-
const cliLabel = "Installing @indigoai-us/hq-cli";
|
|
128
|
-
stepStatus(cliLabel, "running");
|
|
129
|
-
try {
|
|
130
|
-
execSync("npm install -g @indigoai-us/hq-cli", { stdio: "pipe" });
|
|
131
|
-
stepStatus(cliLabel, "done");
|
|
132
|
-
}
|
|
133
|
-
catch {
|
|
134
|
-
stepStatus(cliLabel, "failed");
|
|
135
|
-
warn("Failed to install @indigoai-us/hq-cli — you can install it later with: npm install -g @indigoai-us/hq-cli");
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
// 8. Cloud sync setup
|
|
155
|
+
// 7. Cloud sync setup
|
|
140
156
|
if (!options.skipSync && !alreadySynced) {
|
|
141
157
|
console.log();
|
|
142
158
|
const setupSync = await confirm("Set up cloud sync? (enables mobile access via hq.indigoai.com)");
|
|
@@ -145,7 +161,7 @@ export async function scaffold(directory, options) {
|
|
|
145
161
|
step("Run: hq sync init");
|
|
146
162
|
}
|
|
147
163
|
}
|
|
148
|
-
//
|
|
164
|
+
// 8. Index with qmd
|
|
149
165
|
try {
|
|
150
166
|
execSync("qmd index .", { cwd: targetDir, stdio: "pipe" });
|
|
151
167
|
success("Indexed HQ for search");
|
|
@@ -153,7 +169,7 @@ export async function scaffold(directory, options) {
|
|
|
153
169
|
catch {
|
|
154
170
|
// qmd not installed, skip silently — already warned in deps check
|
|
155
171
|
}
|
|
156
|
-
//
|
|
172
|
+
// 9. Next steps
|
|
157
173
|
nextSteps(displayDir);
|
|
158
174
|
}
|
|
159
175
|
//# sourceMappingURL=scaffold.js.map
|
package/dist/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.js
CHANGED
|
@@ -20,7 +20,7 @@ export function banner(installerVersion, hqVersion) {
|
|
|
20
20
|
console.log(c(" _______________ ______________ ______________"));
|
|
21
21
|
console.log(c("_____________ ___________ __________________ ____________"));
|
|
22
22
|
console.log();
|
|
23
|
-
console.log(d(" Personal OS for AI Workers"));
|
|
23
|
+
console.log(d(" HQ by Indigo — Personal OS for AI Workers"));
|
|
24
24
|
console.log();
|
|
25
25
|
const parts = [];
|
|
26
26
|
if (installerVersion) {
|