@indigoai-us/hq-cli 5.5.0 → 5.5.2

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 (103) hide show
  1. package/dist/bin/hq-auth-refresh.js +0 -0
  2. package/dist/commands/add.d.ts.map +1 -1
  3. package/dist/commands/add.js +2 -1
  4. package/dist/commands/add.js.map +1 -1
  5. package/dist/commands/auth.d.ts +0 -3
  6. package/dist/commands/auth.d.ts.map +1 -1
  7. package/dist/commands/auth.js +0 -3
  8. package/dist/commands/auth.js.map +1 -1
  9. package/dist/commands/cloud.d.ts +12 -2
  10. package/dist/commands/cloud.d.ts.map +1 -1
  11. package/dist/commands/cloud.js +112 -80
  12. package/dist/commands/cloud.js.map +1 -1
  13. package/dist/commands/list.d.ts.map +1 -1
  14. package/dist/commands/list.js +18 -1
  15. package/dist/commands/list.js.map +1 -1
  16. package/dist/commands/login.d.ts +1 -1
  17. package/dist/commands/login.d.ts.map +1 -1
  18. package/dist/commands/login.js +28 -9
  19. package/dist/commands/login.js.map +1 -1
  20. package/dist/commands/logout.d.ts +1 -1
  21. package/dist/commands/logout.d.ts.map +1 -1
  22. package/dist/commands/logout.js +8 -3
  23. package/dist/commands/logout.js.map +1 -1
  24. package/dist/commands/onboard.d.ts +23 -0
  25. package/dist/commands/onboard.d.ts.map +1 -0
  26. package/dist/commands/onboard.js +142 -0
  27. package/dist/commands/onboard.js.map +1 -0
  28. package/dist/commands/pack-install.d.ts +44 -0
  29. package/dist/commands/pack-install.d.ts.map +1 -0
  30. package/dist/commands/pack-install.js +513 -0
  31. package/dist/commands/pack-install.js.map +1 -0
  32. package/dist/commands/pkg-install.d.ts.map +1 -1
  33. package/dist/commands/pkg-install.js +20 -8
  34. package/dist/commands/pkg-install.js.map +1 -1
  35. package/dist/commands/pkg-list.js +4 -4
  36. package/dist/commands/pkg-list.js.map +1 -1
  37. package/dist/commands/pkg-update.js +3 -3
  38. package/dist/commands/pkg-update.js.map +1 -1
  39. package/dist/commands/secrets.d.ts +3 -0
  40. package/dist/commands/secrets.d.ts.map +1 -0
  41. package/dist/commands/secrets.js +521 -0
  42. package/dist/commands/secrets.js.map +1 -0
  43. package/dist/commands/sync.d.ts.map +1 -1
  44. package/dist/commands/sync.js +10 -2
  45. package/dist/commands/sync.js.map +1 -1
  46. package/dist/commands/team-sync.d.ts.map +1 -1
  47. package/dist/commands/team-sync.js +6 -6
  48. package/dist/commands/team-sync.js.map +1 -1
  49. package/dist/commands/whoami.d.ts +1 -1
  50. package/dist/commands/whoami.d.ts.map +1 -1
  51. package/dist/commands/whoami.js +23 -7
  52. package/dist/commands/whoami.js.map +1 -1
  53. package/dist/index.js +7 -1
  54. package/dist/index.js.map +1 -1
  55. package/dist/strategies/link.d.ts +2 -2
  56. package/dist/strategies/link.d.ts.map +1 -1
  57. package/dist/strategies/link.js.map +1 -1
  58. package/dist/strategies/merge.d.ts +2 -2
  59. package/dist/strategies/merge.d.ts.map +1 -1
  60. package/dist/strategies/merge.js.map +1 -1
  61. package/dist/types.d.ts +37 -3
  62. package/dist/types.d.ts.map +1 -1
  63. package/dist/types.js +6 -0
  64. package/dist/types.js.map +1 -1
  65. package/dist/utils/cognito-session.d.ts +18 -7
  66. package/dist/utils/cognito-session.d.ts.map +1 -1
  67. package/dist/utils/cognito-session.js +35 -8
  68. package/dist/utils/cognito-session.js.map +1 -1
  69. package/dist/utils/manifest.d.ts +13 -0
  70. package/dist/utils/manifest.d.ts.map +1 -1
  71. package/dist/utils/manifest.js +24 -1
  72. package/dist/utils/manifest.js.map +1 -1
  73. package/dist/utils/secrets-cache.d.ts +7 -0
  74. package/dist/utils/secrets-cache.d.ts.map +1 -0
  75. package/dist/utils/secrets-cache.js +134 -0
  76. package/dist/utils/secrets-cache.js.map +1 -0
  77. package/package.json +15 -5
  78. package/src/commands/add.ts +7 -6
  79. package/src/commands/auth.ts +0 -3
  80. package/src/commands/cloud.ts +214 -101
  81. package/src/commands/list.ts +20 -1
  82. package/src/commands/login.ts +28 -9
  83. package/src/commands/logout.ts +8 -3
  84. package/src/commands/onboard.ts +193 -0
  85. package/src/commands/pack-install.ts +667 -0
  86. package/src/commands/pkg-install.ts +34 -16
  87. package/src/commands/pkg-list.ts +4 -4
  88. package/src/commands/pkg-update.ts +3 -3
  89. package/src/commands/secrets.ts +670 -0
  90. package/src/commands/sync.ts +20 -4
  91. package/src/commands/team-sync.ts +7 -8
  92. package/src/commands/whoami.ts +22 -7
  93. package/src/index.ts +9 -1
  94. package/src/strategies/link.ts +2 -2
  95. package/src/strategies/merge.ts +2 -2
  96. package/src/types.ts +54 -4
  97. package/src/utils/cognito-session.ts +46 -14
  98. package/src/utils/manifest.test.ts +148 -0
  99. package/src/utils/manifest.ts +22 -1
  100. package/src/utils/secrets-cache.ts +129 -0
  101. package/tsconfig.json +2 -1
  102. package/src/utils/auth.ts +0 -193
  103. package/src/utils/token-store.ts +0 -83
@@ -0,0 +1,513 @@
1
+ /**
2
+ * hq install <source> — content-pack installer (US-003, hq-core v12.0.0+)
3
+ *
4
+ * Source patterns and transports:
5
+ * @scope/name[@version] → npm (default pin = latest, frozen on install)
6
+ * https://... | git@... | *.git → git (SHA-pinned by default; --branch to follow)
7
+ * github:owner/repo[#...] → git (sugar — expands to https://github.com/owner/repo.git)
8
+ * ./path | ../path | /path | file:... → local (path recorded as-is)
9
+ *
10
+ * Git fragment grammar (after '#'):
11
+ * '#<ref>' → whole repo at ref (tag / branch / SHA)
12
+ * '#<subpath>' → subdirectory of repo at default branch
13
+ * '#<subpath>@<ref>' → subdirectory at ref
14
+ * Fragment disambiguation: if the token after '#' contains '/' it's a subpath;
15
+ * otherwise it's a ref. Subpath enables monorepo-hosted packs (e.g.
16
+ * 'github:indigoai-us/hq#packages/hq-pack-gstack@abc1234') without a separate
17
+ * registry or release tarball.
18
+ *
19
+ * Distinct from pkg-install.ts (entitlement-gated registry flow against the
20
+ * proprietary HQ registry — that still runs for plain slugs). Spec:
21
+ * knowledge/public/hq-core/package-yaml-spec.md.
22
+ *
23
+ * Flow:
24
+ * 1. Classify source → transport
25
+ * 2. Fetch payload to tmpdir (npm pack | git clone | rsync)
26
+ * 3. Parse + validate package.yaml (10 checks from spec)
27
+ * 4. Evaluate `conditional` predicate — skip if exits non-zero
28
+ * 5. Confirm hooks if `contributes.hooks` non-empty (unless --allow-hooks)
29
+ * 6. Move into packages/{name}/
30
+ * 7. Append entry to modules.yaml with strategy: package
31
+ * 8. Run scan-packages.sh to wire contributions into host paths
32
+ */
33
+ import * as fs from 'fs';
34
+ import * as os from 'os';
35
+ import * as path from 'path';
36
+ import * as readline from 'readline';
37
+ import * as yaml from 'js-yaml';
38
+ import { execFileSync, spawnSync } from 'child_process';
39
+ import chalk from 'chalk';
40
+ import semverSatisfies from 'semver/functions/satisfies.js';
41
+ import semverValid from 'semver/functions/valid.js';
42
+ import semverValidRange from 'semver/ranges/valid.js';
43
+ import { findHqRoot, readManifest, writeManifest, } from '../utils/manifest.js';
44
+ function classify(source) {
45
+ if (source.startsWith('@'))
46
+ return 'npm';
47
+ if (source.startsWith('http://') ||
48
+ source.startsWith('https://') ||
49
+ source.startsWith('git@') ||
50
+ source.startsWith('git://') ||
51
+ source.startsWith('github:') ||
52
+ source.endsWith('.git') ||
53
+ /\.git#/.test(source)) {
54
+ return 'git';
55
+ }
56
+ // A '#' fragment is only meaningful to git (ref / subpath). If we see one
57
+ // on a file: or path source, the caller means "clone this local git repo"
58
+ // — route to git. Local transport does not consume fragments.
59
+ if (source.includes('#')) {
60
+ return 'git';
61
+ }
62
+ if (source.startsWith('./') ||
63
+ source.startsWith('../') ||
64
+ source.startsWith('/') ||
65
+ source.startsWith('file:')) {
66
+ return 'local';
67
+ }
68
+ // Fallback: bare slug — caller (dispatcher) routes those to legacy flow.
69
+ throw new Error(`Cannot classify source "${source}" as pack (npm @scope/name, git URL, or path). ` +
70
+ `Bare slugs go through the registry (Cognito) flow.`);
71
+ }
72
+ /**
73
+ * Expand 'github:owner/repo' shorthand to a cloneable URL. Passes anything
74
+ * else through unchanged. Separate from classify() so the transport-dispatch
75
+ * stays readable.
76
+ */
77
+ function expandGithubShorthand(url) {
78
+ if (!url.startsWith('github:'))
79
+ return url;
80
+ const slug = url.slice('github:'.length);
81
+ if (!/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/.test(slug)) {
82
+ throw new Error(`github: shorthand must be 'github:owner/repo' (got 'github:${slug}')`);
83
+ }
84
+ return `https://github.com/${slug}.git`;
85
+ }
86
+ /**
87
+ * Parse a git source's '#<...>' fragment into { url, subpath, ref }.
88
+ * Disambiguation: fragment containing '/' is a subpath (optionally with
89
+ * '@<ref>' suffix); fragment without '/' is a ref.
90
+ */
91
+ function parseGitFragment(source) {
92
+ const hashAt = source.indexOf('#');
93
+ if (hashAt < 0)
94
+ return { url: source };
95
+ const url = source.slice(0, hashAt);
96
+ const frag = source.slice(hashAt + 1);
97
+ if (frag.includes('/')) {
98
+ // subpath[@ref]
99
+ const atAt = frag.lastIndexOf('@');
100
+ if (atAt > 0) {
101
+ return { url, subpath: frag.slice(0, atAt), ref: frag.slice(atAt + 1) };
102
+ }
103
+ return { url, subpath: frag };
104
+ }
105
+ return { url, ref: frag || undefined };
106
+ }
107
+ /**
108
+ * sourceMatchesPackPattern — exported for the dispatcher in pkg-install.ts
109
+ * so it can decide whether to route to the new content-pack handler or fall
110
+ * back to the legacy registry flow.
111
+ */
112
+ export function sourceMatchesPackPattern(source) {
113
+ try {
114
+ classify(source);
115
+ return true;
116
+ }
117
+ catch {
118
+ return false;
119
+ }
120
+ }
121
+ function fetchNpm(source, tmpDir) {
122
+ // Use `npm pack` to grab the tarball without actually installing anything.
123
+ // Capture output to get the produced filename. Arguments are passed as an
124
+ // argv array — never interpolated into a shell string — so `source` cannot
125
+ // break out even if it contains metacharacters.
126
+ const out = execFileSync('npm', ['pack', '--silent', '--pack-destination', tmpDir, source], { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'inherit'] });
127
+ const tarball = out.trim().split('\n').filter(Boolean).pop();
128
+ if (!tarball) {
129
+ throw new Error(`npm pack produced no tarball for "${source}"`);
130
+ }
131
+ const tarballPath = path.join(tmpDir, tarball);
132
+ const extractDir = path.join(tmpDir, 'extracted');
133
+ fs.mkdirSync(extractDir, { recursive: true });
134
+ execFileSync('tar', ['-xzf', tarballPath, '-C', extractDir], {
135
+ stdio: 'inherit',
136
+ });
137
+ // npm tarballs unpack into ./package/
138
+ const payloadDir = path.join(extractDir, 'package');
139
+ if (!fs.existsSync(payloadDir)) {
140
+ throw new Error(`npm tarball layout unexpected — no "package/" in ${tarballPath}`);
141
+ }
142
+ // Freeze version from the resolved tarball filename when caller passed e.g.
143
+ // '@scope/name' (no @version) — fall back to the source string.
144
+ // npm pack writes the filename as scope-name-version.tgz (no leading @).
145
+ const m = /([0-9]+\.[0-9]+\.[0-9]+[^.]*)\.tgz$/.exec(tarball);
146
+ const resolvedSource = m ? `${stripVersion(source)}@${m[1]}` : source;
147
+ return { payloadDir, resolvedSource };
148
+ }
149
+ function stripVersion(src) {
150
+ // '@scope/name@1.0.0' → '@scope/name'
151
+ const at = src.lastIndexOf('@');
152
+ if (at > 0)
153
+ return src.slice(0, at);
154
+ return src;
155
+ }
156
+ function fetchGit(source, tmpDir, followBranch) {
157
+ const parsed = parseGitFragment(source);
158
+ const url = expandGithubShorthand(parsed.url);
159
+ const { subpath, ref } = parsed;
160
+ // Defensive: subpath must not escape the clone root.
161
+ if (subpath) {
162
+ if (subpath.startsWith('/') ||
163
+ subpath.split('/').some((seg) => seg === '..' || seg === '')) {
164
+ throw new Error(`Invalid subpath "${subpath}" — must be a relative path within the repo.`);
165
+ }
166
+ }
167
+ // Defensive: reject refs that would be ambiguous or shell-dangerous.
168
+ // `git` itself would tolerate most of these, but refusing them early avoids
169
+ // having to reason about quoting later.
170
+ if (ref && /[\s;&|`$<>(){}\\]/.test(ref)) {
171
+ throw new Error(`Invalid ref "${ref}" — contains disallowed characters.`);
172
+ }
173
+ const cloneDir = path.join(tmpDir, 'clone');
174
+ // Disambiguate ref=branch-or-tag vs. ref=SHA authoritatively via `git
175
+ // ls-remote`. Hex-shaped branch names (e.g. `deadbeef`) previously got
176
+ // silently downgraded to the "no --branch" path by a heuristic regex;
177
+ // that is now fixed. Arguments are passed as argv; no shell.
178
+ const refIsNamedRef = !!ref && isNamedRef(url, ref);
179
+ const cloneArgs = ['clone', '--depth', '1'];
180
+ if (refIsNamedRef)
181
+ cloneArgs.push('--branch', ref);
182
+ cloneArgs.push(url, cloneDir);
183
+ execFileSync('git', cloneArgs, { stdio: 'inherit' });
184
+ if (ref && !refIsNamedRef) {
185
+ // SHA (or something ls-remote didn't recognize as a ref). Try a direct
186
+ // checkout first — works if the SHA happens to be HEAD of the default
187
+ // branch — otherwise unshallow and retry.
188
+ try {
189
+ execFileSync('git', ['-C', cloneDir, 'checkout', ref], {
190
+ stdio: 'inherit',
191
+ });
192
+ }
193
+ catch {
194
+ execFileSync('git', ['-C', cloneDir, 'fetch', '--unshallow', 'origin'], {
195
+ stdio: 'inherit',
196
+ });
197
+ execFileSync('git', ['-C', cloneDir, 'checkout', ref], {
198
+ stdio: 'inherit',
199
+ });
200
+ }
201
+ }
202
+ const resolvedSha = execFileSync('git', ['-C', cloneDir, 'rev-parse', 'HEAD'], { encoding: 'utf-8' }).trim();
203
+ // If a subpath is specified, the payload is only that subdirectory.
204
+ let payloadDir = cloneDir;
205
+ if (subpath) {
206
+ const subAbs = path.join(cloneDir, subpath);
207
+ if (!fs.existsSync(subAbs) || !fs.statSync(subAbs).isDirectory()) {
208
+ throw new Error(`subpath "${subpath}" not found in ${url}@${resolvedSha.slice(0, 7)}`);
209
+ }
210
+ payloadDir = path.join(tmpDir, 'payload');
211
+ fs.mkdirSync(payloadDir, { recursive: true });
212
+ rsyncDir(subAbs, payloadDir);
213
+ }
214
+ else {
215
+ // Drop .git — the pack should be file content, not a nested repo
216
+ fs.rmSync(path.join(cloneDir, '.git'), { recursive: true, force: true });
217
+ }
218
+ // Recorded source shape:
219
+ // with subpath: url#subpath@<sha|ref>
220
+ // without subpath: url#<sha|ref>
221
+ // --branch opt-in follows the ref by name; default SHA-pins.
222
+ const recordedRef = followBranch && ref ? ref : resolvedSha;
223
+ const resolvedSource = subpath
224
+ ? `${parsed.url}#${subpath}@${recordedRef}`
225
+ : `${parsed.url}#${recordedRef}`;
226
+ return { payloadDir, resolvedSource, resolvedSha };
227
+ }
228
+ function fetchLocal(source, tmpDir) {
229
+ const clean = source.startsWith('file:') ? source.slice('file:'.length) : source;
230
+ const abs = path.resolve(process.cwd(), clean);
231
+ if (!fs.existsSync(abs) || !fs.statSync(abs).isDirectory()) {
232
+ throw new Error(`Local path not a directory: ${abs}`);
233
+ }
234
+ const payloadDir = path.join(tmpDir, 'local');
235
+ fs.mkdirSync(payloadDir, { recursive: true });
236
+ rsyncDir(abs, payloadDir);
237
+ return { payloadDir, resolvedSource: clean };
238
+ }
239
+ /**
240
+ * Invoke rsync with an argv array (no shell). Trailing slashes on the source
241
+ * path are preserved by passing the exact strings through execFileSync.
242
+ */
243
+ function rsyncDir(src, dest) {
244
+ const srcSlashed = src.endsWith('/') ? src : `${src}/`;
245
+ const destSlashed = dest.endsWith('/') ? dest : `${dest}/`;
246
+ execFileSync('rsync', [
247
+ '-a',
248
+ '--exclude=.git',
249
+ '--exclude=node_modules',
250
+ '--exclude=.DS_Store',
251
+ srcSlashed,
252
+ destSlashed,
253
+ ], { stdio: 'inherit' });
254
+ }
255
+ /**
256
+ * Ask git whether <ref> resolves as a named branch or tag on <url>. Returns
257
+ * true only when ls-remote prints a matching refs/heads/<ref> or
258
+ * refs/tags/<ref>. Anything else (including hex-shaped branch names that
259
+ * happen to be missing, network failures, or explicit SHAs) falls through to
260
+ * the SHA-checkout path. Uses argv — no shell.
261
+ */
262
+ function isNamedRef(url, ref) {
263
+ try {
264
+ const out = execFileSync('git', ['ls-remote', '--heads', '--tags', url, ref], { encoding: 'utf-8', stdio: ['ignore', 'pipe', 'ignore'] });
265
+ return out.trim().length > 0;
266
+ }
267
+ catch {
268
+ return false;
269
+ }
270
+ }
271
+ // ---------------------------------------------------------------------------
272
+ // Manifest validation (spec §Validation, 10 checks)
273
+ // ---------------------------------------------------------------------------
274
+ function validateManifest(payloadDir, hqVersion) {
275
+ // 1. parse
276
+ const manifestPath = path.join(payloadDir, 'package.yaml');
277
+ if (!fs.existsSync(manifestPath)) {
278
+ throw new Error('package.yaml missing from pack payload');
279
+ }
280
+ let parsed;
281
+ try {
282
+ parsed = yaml.load(fs.readFileSync(manifestPath, 'utf-8'));
283
+ }
284
+ catch (e) {
285
+ throw new Error(`package.yaml invalid YAML: ${e.message}`);
286
+ }
287
+ const m = parsed;
288
+ if (!m || typeof m !== 'object') {
289
+ throw new Error('package.yaml must be a YAML mapping');
290
+ }
291
+ // 2. name
292
+ if (!m.name || !/^hq-pack-[a-z0-9][a-z0-9-]*$/.test(m.name)) {
293
+ throw new Error(`Invalid pack name "${m.name}" — must match ^hq-pack-[a-z0-9][a-z0-9-]*$`);
294
+ }
295
+ // 3. version
296
+ if (!m.version || !semverValid(m.version)) {
297
+ throw new Error(`Invalid version "${m.version}" — must be valid semver`);
298
+ }
299
+ // 4. publisher
300
+ if (!m.publisher || !/^@[a-z0-9][a-z0-9-]*$/i.test(m.publisher)) {
301
+ throw new Error(`Invalid publisher "${m.publisher}" — must be a valid npm scope starting with @`);
302
+ }
303
+ // 5. access
304
+ if (m.access !== 'public' && m.access !== 'private') {
305
+ throw new Error(`access must be "public" or "private" (got "${m.access}")`);
306
+ }
307
+ // 6. requires.hqCore
308
+ const range = m.requires?.hqCore;
309
+ if (!range || !semverValidRange(range)) {
310
+ throw new Error(`requires.hqCore must be a valid semver range (got "${range}")`);
311
+ }
312
+ if (hqVersion && !semverSatisfies(hqVersion, range)) {
313
+ throw new Error(`Host hqCore ${hqVersion} does not satisfy pack requirement ${range}`);
314
+ }
315
+ // 7. contributes has at least one non-empty subfield
316
+ const contributes = (m.contributes ?? {});
317
+ const nonEmpty = Object.values(contributes).some((v) => Array.isArray(v) && v.length > 0);
318
+ if (!nonEmpty) {
319
+ throw new Error('contributes must have at least one non-empty subfield');
320
+ }
321
+ // 10. payload files exist (hooks check happens separately in step 8)
322
+ const subpaths = {
323
+ workers: (i) => path.join('workers', i),
324
+ knowledge: (i) => path.join('knowledge', i),
325
+ skills: (i) => path.join('skills', i),
326
+ commands: (i) => path.join('commands', `${i}.md`),
327
+ hooks: (i) => path.join('hooks', `${i}.sh`),
328
+ policies: (i) => path.join('policies', `${i}.md`),
329
+ scripts: (i) => path.join('scripts', i),
330
+ };
331
+ for (const [key, items] of Object.entries(contributes)) {
332
+ if (!Array.isArray(items))
333
+ continue;
334
+ for (const item of items) {
335
+ const rel = subpaths[key](item);
336
+ const abs = path.join(payloadDir, rel);
337
+ if (!fs.existsSync(abs)) {
338
+ throw new Error(`contributes.${key} declares "${item}" but payload file missing: ${rel}`);
339
+ }
340
+ }
341
+ }
342
+ return m;
343
+ }
344
+ function readHqVersion(hqRoot) {
345
+ const p = path.join(hqRoot, 'core.yaml');
346
+ if (!fs.existsSync(p))
347
+ return null;
348
+ try {
349
+ const c = yaml.load(fs.readFileSync(p, 'utf-8'));
350
+ return c?.hqVersion ?? null;
351
+ }
352
+ catch {
353
+ return null;
354
+ }
355
+ }
356
+ // ---------------------------------------------------------------------------
357
+ // Hooks confirmation
358
+ // ---------------------------------------------------------------------------
359
+ async function confirmHooks(pkg, allowHooks) {
360
+ const hooks = pkg.contributes.hooks ?? [];
361
+ if (hooks.length === 0)
362
+ return true;
363
+ if (allowHooks) {
364
+ console.log(chalk.yellow(`--allow-hooks set; installing ${hooks.length} hook(s) without prompting.`));
365
+ return true;
366
+ }
367
+ console.log('');
368
+ console.log(chalk.yellow(`Pack ${pkg.publisher}/${pkg.name} declares ${hooks.length} hook(s):`));
369
+ for (const h of hooks)
370
+ console.log(chalk.yellow(` - ${h}.sh`));
371
+ console.log(chalk.yellow('These run automatically on tool events with your shell permissions.'));
372
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
373
+ const answer = await new Promise((resolve) => {
374
+ rl.question('Install anyway? [y/N] ', (a) => {
375
+ rl.close();
376
+ resolve(a);
377
+ });
378
+ });
379
+ return /^(y|yes)$/i.test(answer.trim());
380
+ }
381
+ // ---------------------------------------------------------------------------
382
+ // Conditional predicate
383
+ //
384
+ // `package.yaml:conditional` is arbitrary bash sourced from a remote pack.
385
+ // Evaluating it is effectively code execution — same trust surface as the
386
+ // post-install hooks. We therefore gate it behind the same confirmation flow:
387
+ // a pack with a `conditional` must be approved (interactively) or run under
388
+ // `--allow-hooks` (ambient trust, e.g. `create-hq --full`).
389
+ // ---------------------------------------------------------------------------
390
+ async function confirmConditional(pkg, allowHooks) {
391
+ if (!pkg.conditional)
392
+ return true;
393
+ if (allowHooks)
394
+ return true;
395
+ console.log('');
396
+ console.log(chalk.yellow(`Pack ${pkg.publisher}/${pkg.name} declares a conditional predicate:`));
397
+ console.log(chalk.yellow(` $ ${pkg.conditional}`));
398
+ console.log(chalk.yellow('This runs as bash with your shell permissions before install proceeds.'));
399
+ const rl = readline.createInterface({
400
+ input: process.stdin,
401
+ output: process.stdout,
402
+ });
403
+ const answer = await new Promise((resolve) => {
404
+ rl.question('Evaluate predicate? [y/N] ', (a) => {
405
+ rl.close();
406
+ resolve(a);
407
+ });
408
+ });
409
+ return /^(y|yes)$/i.test(answer.trim());
410
+ }
411
+ function evalConditional(expr) {
412
+ const r = spawnSync('bash', ['-c', expr], { stdio: 'ignore' });
413
+ return r.status === 0;
414
+ }
415
+ // ---------------------------------------------------------------------------
416
+ // Move into packages/ + update modules.yaml + scan
417
+ // ---------------------------------------------------------------------------
418
+ function installToPackages(payloadDir, pkg, hqRoot) {
419
+ const packagesDir = path.join(hqRoot, 'packages');
420
+ fs.mkdirSync(packagesDir, { recursive: true });
421
+ const destDir = path.join(packagesDir, pkg.name);
422
+ if (fs.existsSync(destDir)) {
423
+ fs.rmSync(destDir, { recursive: true, force: true });
424
+ }
425
+ // rsync preserves modes/symlinks; tar also works. argv form — no shell.
426
+ const srcSlashed = payloadDir.endsWith('/') ? payloadDir : `${payloadDir}/`;
427
+ const destSlashed = destDir.endsWith('/') ? destDir : `${destDir}/`;
428
+ execFileSync('rsync', ['-a', srcSlashed, destSlashed], { stdio: 'inherit' });
429
+ return destDir;
430
+ }
431
+ function updateModulesYaml(hqRoot, pkg, fetched) {
432
+ const manifest = readManifest(hqRoot) ?? { version: '1', modules: [] };
433
+ // Drop any existing entry for this pack (idempotent re-install)
434
+ manifest.modules = manifest.modules.filter((m) => m.name !== pkg.name);
435
+ const entry = {
436
+ name: pkg.name,
437
+ strategy: 'package',
438
+ source: fetched.resolvedSource,
439
+ version: pkg.version,
440
+ installed_at: path.posix.join('packages', pkg.name),
441
+ installed_at_iso: new Date().toISOString(),
442
+ access: pkg.access === 'public' ? 'public' : undefined,
443
+ };
444
+ if (fetched.resolvedSha)
445
+ entry.resolved_sha = fetched.resolvedSha;
446
+ manifest.modules.push(entry);
447
+ writeManifest(hqRoot, manifest);
448
+ }
449
+ function runScanPackages(hqRoot) {
450
+ const script = path.join(hqRoot, 'scripts', 'scan-packages.sh');
451
+ if (!fs.existsSync(script)) {
452
+ console.log(chalk.dim(` (scripts/scan-packages.sh not present — skipping auto-wire; ` +
453
+ `will run on next session start)`));
454
+ return;
455
+ }
456
+ const r = spawnSync('bash', [script], {
457
+ cwd: hqRoot,
458
+ env: { ...process.env, HQ_ROOT: hqRoot },
459
+ stdio: 'inherit',
460
+ });
461
+ if (r.status !== 0) {
462
+ console.log(chalk.yellow(' scan-packages.sh exited non-zero; see output above.'));
463
+ }
464
+ }
465
+ export async function installPack(source, opts = {}) {
466
+ const transport = classify(source);
467
+ const hqRoot = findHqRoot();
468
+ const hqVersion = readHqVersion(hqRoot);
469
+ console.log(chalk.dim(`→ transport: ${transport}; source: ${source}`));
470
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'hq-pack-'));
471
+ try {
472
+ let fetched;
473
+ switch (transport) {
474
+ case 'npm':
475
+ fetched = fetchNpm(source, tmpDir);
476
+ break;
477
+ case 'git':
478
+ fetched = fetchGit(source, tmpDir, opts.followBranch ?? false);
479
+ break;
480
+ case 'local':
481
+ fetched = fetchLocal(source, tmpDir);
482
+ break;
483
+ }
484
+ const pkg = validateManifest(fetched.payloadDir, hqVersion);
485
+ if (pkg.conditional) {
486
+ const allowed = await confirmConditional(pkg, opts.allowHooks ?? false);
487
+ if (!allowed) {
488
+ console.log(chalk.red('Install aborted (conditional predicate not approved).'));
489
+ return;
490
+ }
491
+ const ok = evalConditional(pkg.conditional);
492
+ if (!ok) {
493
+ console.log(chalk.yellow(`Skipping ${pkg.name}: conditional "${pkg.conditional}" returned non-zero.`));
494
+ return;
495
+ }
496
+ }
497
+ const confirmed = await confirmHooks(pkg, opts.allowHooks ?? false);
498
+ if (!confirmed) {
499
+ console.log(chalk.red('Install aborted (hooks denied).'));
500
+ return;
501
+ }
502
+ const destDir = installToPackages(fetched.payloadDir, pkg, hqRoot);
503
+ updateModulesYaml(hqRoot, pkg, fetched);
504
+ runScanPackages(hqRoot);
505
+ console.log(chalk.green(`\n✓ Installed ${pkg.name}@${pkg.version} → ${path.relative(hqRoot, destDir)}/`));
506
+ console.log(chalk.dim(` Wired ${Object.values(pkg.contributes).flat().filter(Boolean).length} ` +
507
+ `contribution(s) into host-side paths.`));
508
+ }
509
+ finally {
510
+ fs.rmSync(tmpDir, { recursive: true, force: true });
511
+ }
512
+ }
513
+ //# sourceMappingURL=pack-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack-install.js","sourceRoot":"","sources":["../../src/commands/pack-install.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pkg-install.d.ts","sourceRoot":"","sources":["../../src/commands/pkg-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAgBnE"}
1
+ {"version":3,"file":"pkg-install.d.ts","sourceRoot":"","sources":["../../src/commands/pkg-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAiCnE"}
@@ -18,19 +18,31 @@ import * as path from 'path';
18
18
  import * as yaml from 'js-yaml';
19
19
  import { execSync } from 'child_process';
20
20
  import chalk from 'chalk';
21
- import { getAuthToken } from '../utils/auth.js';
21
+ import { ensureCognitoToken } from '../utils/cognito-session.js';
22
22
  import { findHqRoot } from '../utils/hq-root.js';
23
23
  import { getRegistryUrl, RegistryClient, } from '../utils/registry-client.js';
24
24
  import { verifySha256, verifyRsaSignature } from '../utils/integrity.js';
25
25
  import { addToRegistry } from '../utils/registry.js';
26
+ import { installPack, sourceMatchesPackPattern } from './pack-install.js';
26
27
  export function registerPackageInstallCommand(parent) {
27
28
  parent
28
- .command('install <slug>')
29
- .description('Install a package from the registry')
30
- .option('--company <co>', 'Scope the package to a specific company')
31
- .action(async (slug, opts) => {
29
+ .command('install <source>')
30
+ .description('Install a package. Sources: bare slug (registry, Cognito-gated), ' +
31
+ '@scope/name[@ver] (npm pack), git URL[#ref], or local path.')
32
+ .option('--company <co>', 'Scope the package to a specific company (registry flow only)')
33
+ .option('--allow-hooks', 'Skip the hooks confirmation prompt (content-pack flow)')
34
+ .option('--branch', 'Follow a ref instead of SHA-pinning (git content-pack flow)')
35
+ .action(async (source, opts) => {
32
36
  try {
33
- await installPackage(slug, opts.company);
37
+ if (sourceMatchesPackPattern(source)) {
38
+ await installPack(source, {
39
+ allowHooks: opts.allowHooks,
40
+ followBranch: opts.branch,
41
+ });
42
+ }
43
+ else {
44
+ await installPackage(source, opts.company);
45
+ }
34
46
  }
35
47
  catch (error) {
36
48
  console.error(chalk.red('Install failed:'), error instanceof Error ? error.message : 'Unknown error');
@@ -40,9 +52,9 @@ export function registerPackageInstallCommand(parent) {
40
52
  }
41
53
  async function installPackage(slug, company) {
42
54
  // 1. Auth
43
- const token = await getAuthToken();
55
+ const accessToken = await ensureCognitoToken();
44
56
  const registryUrl = getRegistryUrl();
45
- const client = new RegistryClient(registryUrl, token.clerk_session_token);
57
+ const client = new RegistryClient(registryUrl, accessToken);
46
58
  // 2. Check entitlement
47
59
  console.log(chalk.dim(`Checking entitlement for ${slug}...`));
48
60
  const entitlement = await client.checkEntitlement(slug);
@@ -1 +1 @@
1
- {"version":3,"file":"pkg-install.js","sourceRoot":"","sources":["../../src/commands/pkg-install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pkg-install.js","sourceRoot":"","sources":["../../src/commands/pkg-install.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  import chalk from 'chalk';
7
7
  import { findHqRoot } from '../utils/hq-root.js';
8
8
  import { readRegistry } from '../utils/registry.js';
9
- import { loadToken, isTokenExpired } from '../utils/token-store.js';
9
+ import { loadCachedTokens, isExpiring } from '@indigoai-us/hq-cloud';
10
10
  import { getRegistryUrl, RegistryClient, } from '../utils/registry-client.js';
11
11
  export function registerPackageListCommand(parent) {
12
12
  parent
@@ -43,10 +43,10 @@ async function listPackages() {
43
43
  let entitlements = [];
44
44
  let offline = false;
45
45
  try {
46
- const token = await loadToken();
47
- if (token && !isTokenExpired(token)) {
46
+ const cached = loadCachedTokens();
47
+ if (cached && !isExpiring(cached, 120)) {
48
48
  const registryUrl = getRegistryUrl();
49
- const client = new RegistryClient(registryUrl, token.clerk_session_token);
49
+ const client = new RegistryClient(registryUrl, cached.accessToken);
50
50
  const result = await client.getMyEntitlements();
51
51
  entitlements = result.entitlements;
52
52
  }