@indigoai-us/hq-cli 5.71.0 → 5.73.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 (116) hide show
  1. package/dist/bin/hq-auth-refresh.js +1 -4
  2. package/dist/cli-version.js +1 -4
  3. package/dist/commands/__fixtures__/make-tar.js +1 -4
  4. package/dist/commands/_patterns.js +1 -4
  5. package/dist/commands/add.js +1 -4
  6. package/dist/commands/agents.js +1 -4
  7. package/dist/commands/api-keys.js +1 -4
  8. package/dist/commands/auth.js +1 -4
  9. package/dist/commands/billing.js +1 -4
  10. package/dist/commands/channels.js +1 -4
  11. package/dist/commands/cloud-demote.js +1 -4
  12. package/dist/commands/cloud-provision.js +1 -4
  13. package/dist/commands/cloud.js +1 -4
  14. package/dist/commands/company.js +1 -4
  15. package/dist/commands/creators.js +1 -4
  16. package/dist/commands/crm.js +1 -4
  17. package/dist/commands/db-migrate.js +1 -4
  18. package/dist/commands/db-provision.js +1 -4
  19. package/dist/commands/db-sql.js +1 -4
  20. package/dist/commands/db-status.js +1 -4
  21. package/dist/commands/db.js +1 -4
  22. package/dist/commands/dm.js +1 -4
  23. package/dist/commands/feedback.js +1 -4
  24. package/dist/commands/files-browse.js +1 -4
  25. package/dist/commands/files.js +1 -4
  26. package/dist/commands/group-grants.js +1 -4
  27. package/dist/commands/groups.js +1 -4
  28. package/dist/commands/integrations.js +1 -4
  29. package/dist/commands/list.js +1 -4
  30. package/dist/commands/login.js +1 -4
  31. package/dist/commands/logout.js +1 -4
  32. package/dist/commands/mcp-registration.js +1 -4
  33. package/dist/commands/mcp-status.js +1 -4
  34. package/dist/commands/meetings.js +1 -4
  35. package/dist/commands/members.js +1 -4
  36. package/dist/commands/onboard-identity-guard.js +1 -4
  37. package/dist/commands/onboard-join.js +1 -4
  38. package/dist/commands/onboard-warning.js +1 -4
  39. package/dist/commands/onboard.js +1 -4
  40. package/dist/commands/outposts.d.ts +30 -1
  41. package/dist/commands/outposts.js +221 -10
  42. package/dist/commands/pack-install.js +1 -4
  43. package/dist/commands/packs.js +1 -4
  44. package/dist/commands/people.js +1 -4
  45. package/dist/commands/pkg-install.js +1 -4
  46. package/dist/commands/pkg-list.js +1 -4
  47. package/dist/commands/pkg-remove.js +1 -4
  48. package/dist/commands/pkg-update.js +1 -4
  49. package/dist/commands/publish.js +1 -4
  50. package/dist/commands/reindex.js +1 -4
  51. package/dist/commands/rescue.js +1 -4
  52. package/dist/commands/run.js +1 -4
  53. package/dist/commands/safe-extract.js +1 -4
  54. package/dist/commands/secrets-scope.js +1 -4
  55. package/dist/commands/secrets.js +1 -4
  56. package/dist/commands/signals.js +1 -4
  57. package/dist/commands/skill.js +1 -4
  58. package/dist/commands/sources.js +1 -4
  59. package/dist/commands/sync-mode.js +1 -4
  60. package/dist/commands/sync-narrow.js +1 -4
  61. package/dist/commands/sync.js +1 -4
  62. package/dist/commands/team-sync.js +1 -4
  63. package/dist/commands/update.js +1 -4
  64. package/dist/commands/whoami.js +1 -4
  65. package/dist/commands/workers.js +1 -4
  66. package/dist/index.js +1 -4
  67. package/dist/lib/db/control-plane.js +1 -4
  68. package/dist/lib/db/local.js +1 -4
  69. package/dist/lib/db/migrate.js +1 -4
  70. package/dist/lib/db/paths.js +1 -4
  71. package/dist/lib/db/remote-engine.js +1 -4
  72. package/dist/lib/db/remote-sql.js +1 -4
  73. package/dist/lib/db/sql.js +1 -4
  74. package/dist/lib/local-tree-diff.js +1 -4
  75. package/dist/lib/narrow-hint-banner.js +1 -4
  76. package/dist/main.js +1 -4
  77. package/dist/node-preflight.js +1 -4
  78. package/dist/run/discover-schemas.js +1 -4
  79. package/dist/run/hq-plugin.js +1 -4
  80. package/dist/sentry-before-send.js +1 -4
  81. package/dist/sentry-dsn.generated.js +1 -4
  82. package/dist/sentry.js +1 -4
  83. package/dist/strategies/link.js +1 -4
  84. package/dist/strategies/merge.js +1 -4
  85. package/dist/types.js +1 -4
  86. package/dist/utils/billing-gate.js +1 -4
  87. package/dist/utils/breadcrumb-buffer.js +1 -4
  88. package/dist/utils/cli-telemetry.js +1 -4
  89. package/dist/utils/cognito-session.js +1 -4
  90. package/dist/utils/contribution-table.js +1 -4
  91. package/dist/utils/environmental-error.js +1 -4
  92. package/dist/utils/epipe.js +1 -4
  93. package/dist/utils/feedback-diagnostics.js +1 -4
  94. package/dist/utils/feedback-screenshots.js +1 -4
  95. package/dist/utils/feedback-versions.js +1 -4
  96. package/dist/utils/git.js +1 -4
  97. package/dist/utils/integrity.js +1 -4
  98. package/dist/utils/intercepted-process-exit.js +1 -4
  99. package/dist/utils/login-provider.js +1 -4
  100. package/dist/utils/manifest.js +1 -4
  101. package/dist/utils/pack-contributions.js +1 -4
  102. package/dist/utils/people.js +1 -4
  103. package/dist/utils/registry-client.js +1 -4
  104. package/dist/utils/registry.js +1 -4
  105. package/dist/utils/sandbox-runner-client.js +1 -4
  106. package/dist/utils/secrets-cache.js +1 -4
  107. package/dist/utils/sentry-identity.js +1 -4
  108. package/dist/utils/vault-api.js +1 -4
  109. package/dist/utils/version-check.js +1 -4
  110. package/dist/utils/version-gate.js +1 -4
  111. package/package.json +3 -2
  112. package/scripts/chmod-bins.mjs +49 -0
  113. package/src/commands/outposts-replica-sync.test.ts +272 -0
  114. package/src/commands/outposts.test.ts +32 -0
  115. package/src/commands/outposts.ts +330 -7
  116. package/src/packaging.test.ts +55 -0
@@ -73,6 +73,13 @@ export declare function listOutposts(token: string): Promise<OutpostSummary[]>;
73
73
  export declare function getOutpostStatus(token: string, outpostId?: string): Promise<Record<string, unknown>>;
74
74
  export declare function enableCodex(token: string, outpostId?: string): Promise<Record<string, unknown>>;
75
75
  export declare function regenerateLoginUrl(token: string, outpostId?: string): Promise<Record<string, unknown>>;
76
+ /**
77
+ * Hand the box the one-time Claude sign-in code the operator got from the login
78
+ * URL. hq-pro stores it as the row's pending code; the box polls for it, feeds
79
+ * it to `claude`, and flips itself `awaiting-claude-login → ready`. This is the
80
+ * terminal-native equivalent of pasting the code into the web console.
81
+ */
82
+ export declare function submitLoginCode(token: string, code: string, outpostId?: string): Promise<Record<string, unknown>>;
76
83
  export declare function destroyOutpost(token: string, outpostId?: string): Promise<Record<string, unknown>>;
77
84
  /** Result of `POST /outpost/exec` — a terminal SSM invocation on the box. */
78
85
  export interface OutpostExecResult {
@@ -188,5 +195,27 @@ export interface SelfDeployDependencies {
188
195
  defaultHqRoot: () => string;
189
196
  invokingUser: () => string;
190
197
  }
191
- export declare function registerOutpostsCommand(program: Command, selfDeployOverrides?: Partial<SelfDeployDependencies>): void;
198
+ /**
199
+ * The extra local surface `replica-sync` needs on top of the self-deploy set:
200
+ * two filesystem probes for the repos clone. Kept as an extension so the
201
+ * `self-deploy` dependency surface stays minimal.
202
+ */
203
+ export interface ReplicaSyncDependencies extends SelfDeployDependencies {
204
+ pathExists: (p: string) => boolean;
205
+ mkdirp: (p: string) => void;
206
+ }
207
+ /** One repo entry resolved from `personal/data/repos.yaml`. */
208
+ export interface ReplicaRepo {
209
+ url: string;
210
+ visibility: "public" | "private";
211
+ name: string;
212
+ }
213
+ /**
214
+ * Parse `personal/data/repos.yaml` into a clone list. Pure + exported for
215
+ * tests. Mirrors setup.sh's `clone_repos`: `visibility` defaults to public,
216
+ * `name` defaults to the URL basename. Malformed entries are skipped, never
217
+ * thrown.
218
+ */
219
+ export declare function parseReposManifest(yamlText: string): ReplicaRepo[];
220
+ export declare function registerOutpostsCommand(program: Command, selfDeployOverrides?: Partial<ReplicaSyncDependencies>): void;
192
221
  //# sourceMappingURL=outposts.d.ts.map
@@ -20,8 +20,6 @@
20
20
  * web console can't rename them either), so this CLI wraps only the lifecycle
21
21
  * and status routes that exist. Renaming an Outpost is not a backend capability.
22
22
  */
23
-
24
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="839f8f76-584d-5ea8-b86e-a92a55c32a16")}catch(e){}}();
25
23
  import chalk from "chalk";
26
24
  import { spawnSync } from "node:child_process";
27
25
  import * as fs from "node:fs";
@@ -29,6 +27,7 @@ import * as os from "node:os";
29
27
  import * as path from "node:path";
30
28
  import * as readline from "node:readline";
31
29
  import { randomBytes } from "node:crypto";
30
+ import * as yaml from "js-yaml";
32
31
  import { loadCachedTokens } from "@indigoai-us/hq-cloud";
33
32
  import { ensureCognitoToken } from "../utils/cognito-session.js";
34
33
  import { vaultApiFetch } from "../utils/vault-api.js";
@@ -117,6 +116,21 @@ export async function regenerateLoginUrl(token, outpostId) {
117
116
  query: outpostId ? { outpostId } : undefined,
118
117
  });
119
118
  }
119
+ /**
120
+ * Hand the box the one-time Claude sign-in code the operator got from the login
121
+ * URL. hq-pro stores it as the row's pending code; the box polls for it, feeds
122
+ * it to `claude`, and flips itself `awaiting-claude-login → ready`. This is the
123
+ * terminal-native equivalent of pasting the code into the web console.
124
+ */
125
+ export async function submitLoginCode(token, code, outpostId) {
126
+ return outpostRequest({
127
+ token,
128
+ path: "/outpost/login-code",
129
+ method: "POST",
130
+ body: { code },
131
+ query: outpostId ? { outpostId } : undefined,
132
+ });
133
+ }
120
134
  export async function destroyOutpost(token, outpostId) {
121
135
  return outpostRequest({
122
136
  token,
@@ -506,9 +520,161 @@ async function selfDeployOutpost(opts, deps) {
506
520
  console.log(chalk.dim("Check it with: systemctl status outpost-sync.service"));
507
521
  console.log(chalk.dim("It is unregistered and unmanaged by hq-pro (no console entry or remote management)."));
508
522
  }
523
+ const defaultReplicaSyncDependencies = {
524
+ ...defaultSelfDeployDependencies,
525
+ pathExists: (p) => fs.existsSync(p),
526
+ mkdirp: (p) => {
527
+ fs.mkdirSync(p, { recursive: true });
528
+ },
529
+ };
530
+ function repoNameFromUrl(url) {
531
+ const tail = url.split("/").pop() ?? "";
532
+ return tail.replace(/\.git$/, "").trim();
533
+ }
534
+ /**
535
+ * A repo `name` becomes a path segment under repos/<visibility>/. A synced
536
+ * repos.yaml is operator data, but a malformed or hostile name must never
537
+ * escape that directory, so constrain it to a single, non-traversal component.
538
+ */
539
+ function isSafePathComponent(value) {
540
+ return (value.length > 0 &&
541
+ !value.includes("/") &&
542
+ !value.includes("\\") &&
543
+ value !== "." &&
544
+ value !== "..");
545
+ }
546
+ /**
547
+ * Parse `personal/data/repos.yaml` into a clone list. Pure + exported for
548
+ * tests. Mirrors setup.sh's `clone_repos`: `visibility` defaults to public,
549
+ * `name` defaults to the URL basename. Malformed entries are skipped, never
550
+ * thrown.
551
+ */
552
+ export function parseReposManifest(yamlText) {
553
+ let doc;
554
+ try {
555
+ doc = yaml.load(yamlText);
556
+ }
557
+ catch {
558
+ return [];
559
+ }
560
+ const rawRepos = doc?.repos;
561
+ if (!Array.isArray(rawRepos))
562
+ return [];
563
+ const out = [];
564
+ for (const entry of rawRepos) {
565
+ if (!entry || typeof entry !== "object")
566
+ continue;
567
+ const e = entry;
568
+ const url = typeof e.url === "string" ? e.url.trim() : "";
569
+ if (!url)
570
+ continue;
571
+ const visibility = e.visibility === "private" ? "private" : "public";
572
+ const name = typeof e.name === "string" && e.name.trim()
573
+ ? e.name.trim()
574
+ : repoNameFromUrl(url);
575
+ if (!isSafePathComponent(name))
576
+ continue;
577
+ out.push({ url, visibility, name });
578
+ }
579
+ return out;
580
+ }
581
+ /**
582
+ * Best-effort spawn: log a one-line outcome and carry on. NEVER throws and
583
+ * NEVER echoes child output — the same secret-safety stance as `runChecked`,
584
+ * since these children (auth refresh, secrets exec) touch credentials.
585
+ */
586
+ function runBestEffort(deps, command, args, description, options) {
587
+ let result;
588
+ try {
589
+ result = deps.spawnSync(command, args, options ?? { stdio: "inherit" });
590
+ }
591
+ catch {
592
+ console.warn(`replica-sync: ${description} could not run — continuing.`);
593
+ return false;
594
+ }
595
+ if (!result || result.error || result.status !== 0) {
596
+ console.warn(`replica-sync: ${description} did not complete cleanly — continuing.`);
597
+ return false;
598
+ }
599
+ return true;
600
+ }
601
+ /**
602
+ * Authenticate `gh` for private clones by streaming GITHUB_TOKEN through the
603
+ * vault into the child's ENV ONLY, unsetting it in-shell, and piping it to
604
+ * `gh auth login --with-token` over stdin. The token never touches argv or
605
+ * this process's logs. Mirrors personal/scripts/setup.sh's `configure_gh`.
606
+ */
607
+ function authGitHubViaVault(deps) {
608
+ const ghLogin = [
609
+ 'TOKEN="$GITHUB_TOKEN"',
610
+ "unset GITHUB_TOKEN",
611
+ 'printf "%s" "$TOKEN" | gh auth login --with-token',
612
+ ].join("\n");
613
+ const authed = runBestEffort(deps, "hq", ["secrets", "--personal", "exec", "--only", "GITHUB_TOKEN", "--", "bash", "-c", ghLogin], "GitHub auth via vault");
614
+ if (authed) {
615
+ // Let plain `git clone https://github.com/...` reuse gh's token so private
616
+ // repos don't prompt for a username/password.
617
+ runBestEffort(deps, "gh", ["auth", "setup-git"], "gh auth setup-git");
618
+ }
619
+ }
620
+ /** Clone any repos from `personal/data/repos.yaml` that aren't on disk yet. */
621
+ function replicateRepos(deps, hqRoot) {
622
+ const manifestPath = path.join(hqRoot, "personal", "data", "repos.yaml");
623
+ let manifestText;
624
+ try {
625
+ manifestText = deps.readTextFile(manifestPath);
626
+ }
627
+ catch {
628
+ console.log("replica-sync: no personal/data/repos.yaml — skipping repo clone.");
629
+ return;
630
+ }
631
+ const repos = parseReposManifest(manifestText);
632
+ if (repos.length === 0) {
633
+ console.log("replica-sync: repos.yaml lists no repos — skipping.");
634
+ return;
635
+ }
636
+ const missing = repos.filter((repo) => !deps.pathExists(path.join(hqRoot, "repos", repo.visibility, repo.name, ".git")));
637
+ if (missing.length === 0) {
638
+ console.log("replica-sync: all repos already present.");
639
+ return;
640
+ }
641
+ // Private repos need gh auth first; public-only manifests skip the vault call.
642
+ if (missing.some((repo) => repo.visibility === "private")) {
643
+ authGitHubViaVault(deps);
644
+ }
645
+ for (const repo of missing) {
646
+ deps.mkdirp(path.join(hqRoot, "repos", repo.visibility));
647
+ const dest = path.join(hqRoot, "repos", repo.visibility, repo.name);
648
+ console.log(`replica-sync: cloning ${repo.visibility}/${repo.name}…`);
649
+ runBestEffort(deps, "git", ["clone", "--recurse-submodules", repo.url, dest], `clone ${repo.visibility}/${repo.name}`);
650
+ }
651
+ }
652
+ async function replicaSyncOutpost(opts, deps) {
653
+ const hqRoot = opts.hqRoot ?? deps.defaultHqRoot();
654
+ // Gate: only replicate on a box that has an HQ session. A box that was never
655
+ // signed in has nothing to pull — exit cleanly so the timer stays green.
656
+ const session = deps.loadCachedTokens();
657
+ if (!session?.refreshToken) {
658
+ console.log("replica-sync: no HQ session on this box yet — nothing to replicate.");
659
+ return;
660
+ }
661
+ // Auth refresh gates the run: if the seeded refresh token is dead, every
662
+ // authenticated step below (pull, secrets exec) would just cascade 401s.
663
+ // Stop the cycle cleanly instead — the timer retries next tick.
664
+ if (!runBestEffort(deps, "hq", ["auth", "refresh"], "HQ auth refresh")) {
665
+ console.warn("replica-sync: auth refresh failed — skipping this cycle (token likely expired).");
666
+ return;
667
+ }
668
+ runBestEffort(deps, "hq", ["sync", "pull", "--personal", "--hq-root", hqRoot, "--on-conflict", "keep"], "personal vault pull");
669
+ // rescue lays down the core kernel and expects companies/ to exist.
670
+ deps.mkdirp(path.join(hqRoot, "companies"));
671
+ runBestEffort(deps, "hq", ["rescue", "--hq-root", hqRoot, "--yes"], "HQ kernel rescue");
672
+ replicateRepos(deps, hqRoot);
673
+ console.log("replica-sync: complete.");
674
+ }
509
675
  export function registerOutpostsCommand(program, selfDeployOverrides = {}) {
510
- const selfDeployDependencies = {
511
- ...defaultSelfDeployDependencies,
676
+ const deps = {
677
+ ...defaultReplicaSyncDependencies,
512
678
  ...selfDeployOverrides,
513
679
  };
514
680
  const outposts = program
@@ -518,15 +684,29 @@ export function registerOutpostsCommand(program, selfDeployOverrides = {}) {
518
684
  .command("self-deploy", { hidden: true })
519
685
  .description("Configure this EC2 host as a locally self-hosted HQ outpost")
520
686
  .option("--yes", "Skip the self-hosting confirmation")
521
- .option("--hq-root <path>", "HQ root to sync", selfDeployDependencies.defaultHqRoot())
687
+ .option("--hq-root <path>", "HQ root to sync", deps.defaultHqRoot())
522
688
  .action(async (opts) => {
523
689
  try {
524
- await selfDeployOutpost(opts, selfDeployDependencies);
690
+ await selfDeployOutpost(opts, deps);
525
691
  }
526
692
  catch (err) {
527
693
  fail(err);
528
694
  }
529
695
  });
696
+ outposts
697
+ .command("replica-sync", { hidden: true })
698
+ .description("Replicate your full HQ onto this box (personal pull + core rescue + repos). Runs on a timer.")
699
+ .option("--hq-root <path>", "HQ root to replicate into", deps.defaultHqRoot())
700
+ .action(async (opts) => {
701
+ // Best-effort background job: never hard-fail the systemd unit on a
702
+ // transient step. Swallow, log, and exit 0.
703
+ try {
704
+ await replicaSyncOutpost(opts, deps);
705
+ }
706
+ catch (err) {
707
+ console.warn(`replica-sync: unexpected error — ${err instanceof Error ? err.message : String(err)}`);
708
+ }
709
+ });
530
710
  outposts
531
711
  .command("provision")
532
712
  .alias("create")
@@ -846,8 +1026,40 @@ export function registerOutpostsCommand(program, selfDeployOverrides = {}) {
846
1026
  process.stdout.write(JSON.stringify(result, null, 2) + "\n");
847
1027
  return;
848
1028
  }
849
- console.log(chalk.green("Login-URL regeneration requested. The box mints a fresh URL shortly" +
850
- "check `hq outposts status` to pick it up."));
1029
+ console.log(chalk.green("Login-URL regeneration requested. The box mints a fresh URL shortly."));
1030
+ console.log(chalk.dim("Next: `hq outposts status" +
1031
+ (opts.id ? ` --id ${opts.id}` : "") +
1032
+ "` to read the login URL, open it and sign in, then paste the code back with " +
1033
+ "`hq outposts login-code <code>" +
1034
+ (opts.id ? ` --id ${opts.id}` : "") +
1035
+ "`."));
1036
+ }
1037
+ catch (err) {
1038
+ fail(err);
1039
+ }
1040
+ });
1041
+ outposts
1042
+ .command("login-code <code>")
1043
+ .description("Submit the Claude sign-in code for an Outpost that is awaiting login")
1044
+ .option("--id <outpostId>", "Outpost id (defaults to your primary box)")
1045
+ .option("--json", "Emit raw JSON")
1046
+ .action(async function (code, opts) {
1047
+ try {
1048
+ const trimmed = code.trim();
1049
+ if (!trimmed) {
1050
+ console.error(chalk.red("Provide the sign-in code: hq outposts login-code <code>"));
1051
+ process.exit(1);
1052
+ }
1053
+ const token = await ensureCognitoToken();
1054
+ const result = await submitLoginCode(token, trimmed, opts.id);
1055
+ if (opts.json) {
1056
+ process.stdout.write(JSON.stringify(result, null, 2) + "\n");
1057
+ return;
1058
+ }
1059
+ console.log(chalk.green("Code submitted — the box will finish signing in shortly."));
1060
+ console.log(chalk.dim("Track it: `hq outposts status" +
1061
+ (opts.id ? ` --id ${opts.id}` : "") +
1062
+ "` (it flips to `ready` once Claude auth completes)."));
851
1063
  }
852
1064
  catch (err) {
853
1065
  fail(err);
@@ -885,5 +1097,4 @@ export function registerOutpostsCommand(program, selfDeployOverrides = {}) {
885
1097
  }
886
1098
  });
887
1099
  }
888
- //# sourceMappingURL=outposts.js.map
889
- //# debugId=839f8f76-584d-5ea8-b86e-a92a55c32a16
1100
+ //# sourceMappingURL=outposts.js.map
@@ -33,8 +33,6 @@
33
33
  * registry file under the v12 layout. (`hq update <pack>` re-resolves source
34
34
  * from each pack's package.yaml; rationale lives in the layout-fix PR.)
35
35
  */
36
-
37
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a90272ca-94a1-5905-85f8-af12a01cb58a")}catch(e){}}();
38
36
  import * as fs from 'fs';
39
37
  import * as os from 'os';
40
38
  import * as path from 'path';
@@ -1699,5 +1697,4 @@ export async function installPack(source, opts = {}) {
1699
1697
  fs.rmSync(tmpDir, { recursive: true, force: true });
1700
1698
  }
1701
1699
  }
1702
- //# sourceMappingURL=pack-install.js.map
1703
- //# debugId=a90272ca-94a1-5905-85f8-af12a01cb58a
1700
+ //# sourceMappingURL=pack-install.js.map
@@ -16,8 +16,6 @@
16
16
  *
17
17
  * Spec: knowledge/public/hq-core/package-yaml-spec.md.
18
18
  */
19
-
20
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b743f774-8d9b-594b-9ce4-e7f5a44faca0")}catch(e){}}();
21
19
  import * as fs from 'fs';
22
20
  import * as path from 'path';
23
21
  import * as readline from 'readline';
@@ -469,5 +467,4 @@ export function registerPacksCommand(parent) {
469
467
  }
470
468
  });
471
469
  }
472
- //# sourceMappingURL=packs.js.map
473
- //# debugId=b743f774-8d9b-594b-9ce4-e7f5a44faca0
470
+ //# sourceMappingURL=packs.js.map
@@ -11,8 +11,6 @@
11
11
  * roster for exactly ONE company (the active company, or the one named by
12
12
  * `--company`); nothing reads across company boundaries.
13
13
  */
14
-
15
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="555055d9-98e2-5fcd-b736-4b1df12daf4d")}catch(e){}}();
16
14
  import * as fs from "fs";
17
15
  import { Option } from "commander";
18
16
  import chalk from "chalk";
@@ -292,5 +290,4 @@ export function registerPeopleCommand(program, deps = {}) {
292
290
  }
293
291
  });
294
292
  }
295
- //# sourceMappingURL=people.js.map
296
- //# debugId=555055d9-98e2-5fcd-b736-4b1df12daf4d
293
+ //# sourceMappingURL=people.js.map
@@ -12,8 +12,6 @@
12
12
  * 8. Update packages/registry.yaml
13
13
  * 9. Print next-step message
14
14
  */
15
-
16
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ccc2e70c-f577-5a47-9a29-31a206194392")}catch(e){}}();
17
15
  import * as fs from 'fs';
18
16
  import * as os from 'os';
19
17
  import * as path from 'path';
@@ -165,5 +163,4 @@ async function installPackage(slug, company) {
165
163
  }
166
164
  }
167
165
  }
168
- //# sourceMappingURL=pkg-install.js.map
169
- //# debugId=ccc2e70c-f577-5a47-9a29-31a206194392
166
+ //# sourceMappingURL=pkg-install.js.map
@@ -4,11 +4,8 @@
4
4
  * Package installs use the content-pack installer, so this command delegates
5
5
  * to the same list view as `hq packs list`.
6
6
  */
7
-
8
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="96eb060c-c1d0-5874-918f-e818f92c6242")}catch(e){}}();
9
7
  import { registerPacksListCommand } from './packs.js';
10
8
  export function registerPackageListCommand(parent) {
11
9
  registerPacksListCommand(parent);
12
10
  }
13
- //# sourceMappingURL=pkg-list.js.map
14
- //# debugId=96eb060c-c1d0-5874-918f-e818f92c6242
11
+ //# sourceMappingURL=pkg-list.js.map
@@ -5,8 +5,6 @@
5
5
  * 2. Remove entry from packages/registry.yaml
6
6
  * 3. Print next-step message
7
7
  */
8
-
9
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e44da498-3e38-5643-b124-49aa2e91f42b")}catch(e){}}();
10
8
  import * as fs from 'fs';
11
9
  import * as path from 'path';
12
10
  import chalk from 'chalk';
@@ -52,5 +50,4 @@ async function removePackage(slug) {
52
50
  console.log(chalk.green(`\nRemoved ${slug}.`));
53
51
  console.log(chalk.cyan('Run /package-remove ' + slug + ' in Claude to clean up merged content.'));
54
52
  }
55
- //# sourceMappingURL=pkg-remove.js.map
56
- //# debugId=e44da498-3e38-5643-b124-49aa2e91f42b
53
+ //# sourceMappingURL=pkg-remove.js.map
@@ -4,8 +4,6 @@
4
4
  * If no slug: check all installed packages for updates.
5
5
  * If slug given: update only that package.
6
6
  */
7
-
8
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="35fae6a0-f8e1-5fde-90d8-34ae4adb3c1c")}catch(e){}}();
9
7
  import * as fs from 'fs';
10
8
  import * as os from 'os';
11
9
  import * as path from 'path';
@@ -123,5 +121,4 @@ async function updatePackages(slug) {
123
121
  }
124
122
  console.log(`\n${updatedCount} package(s) updated${updatedCount > 0 ? '.' : ' — everything is current.'}`);
125
123
  }
126
- //# sourceMappingURL=pkg-update.js.map
127
- //# debugId=35fae6a0-f8e1-5fde-90d8-34ae4adb3c1c
124
+ //# sourceMappingURL=pkg-update.js.map
@@ -27,8 +27,6 @@
27
27
  * - pack-install.ts:validateManifest (the 10 validation rules)
28
28
  * - manifest.ts (modules.yaml read/write for provenance)
29
29
  */
30
-
31
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e2f6607e-188c-57f9-beba-a81488d15225")}catch(e){}}();
32
30
  import * as fs from 'fs';
33
31
  import * as os from 'os';
34
32
  import * as path from 'path';
@@ -405,5 +403,4 @@ export function registerPublishCommand(program) {
405
403
  }
406
404
  });
407
405
  }
408
- //# sourceMappingURL=publish.js.map
409
- //# debugId=e2f6607e-188c-57f9-beba-a81488d15225
406
+ //# sourceMappingURL=publish.js.map
@@ -1,5 +1,3 @@
1
-
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="91aee9b3-dd72-5f05-99a8-d23b37f5eabe")}catch(e){}}();
3
1
  import { reindex } from '@indigoai-us/hq-cloud';
4
2
  export function registerReindexCommand(program) {
5
3
  program
@@ -34,5 +32,4 @@ export function registerReindexCommand(program) {
34
32
  process.exit(status);
35
33
  });
36
34
  }
37
- //# sourceMappingURL=reindex.js.map
38
- //# debugId=91aee9b3-dd72-5f05-99a8-d23b37f5eabe
35
+ //# sourceMappingURL=reindex.js.map
@@ -1,5 +1,3 @@
1
-
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="e0da62c9-7fd5-5514-b2d0-1b5b76ebcd21")}catch(e){}}();
3
1
  import { spawnSync } from 'child_process';
4
2
  import * as fs from 'fs';
5
3
  import * as path from 'path';
@@ -157,5 +155,4 @@ export function registerRescueCommand(program) {
157
155
  }
158
156
  });
159
157
  }
160
- //# sourceMappingURL=rescue.js.map
161
- //# debugId=e0da62c9-7fd5-5514-b2d0-1b5b76ebcd21
158
+ //# sourceMappingURL=rescue.js.map
@@ -1,5 +1,3 @@
1
-
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="26bb7e02-3864-5c66-8232-3abc8fc17dc1")}catch(e){}}();
3
1
  import { spawn } from 'node:child_process';
4
2
  import * as path from 'node:path';
5
3
  import * as fs from 'node:fs';
@@ -144,5 +142,4 @@ export function registerRunCommand(program) {
144
142
  }
145
143
  });
146
144
  }
147
- //# sourceMappingURL=run.js.map
148
- //# debugId=26bb7e02-3864-5c66-8232-3abc8fc17dc1
145
+ //# sourceMappingURL=run.js.map
@@ -32,8 +32,6 @@
32
32
  * actually written (we do NOT rely solely on the pre-flight scan or on the
33
33
  * tar binary's own protections).
34
34
  */
35
-
36
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="372e4f76-03b2-5287-ac66-249543f88937")}catch(e){}}();
37
35
  import { execFileSync } from 'child_process';
38
36
  import * as fs from 'fs';
39
37
  import * as path from 'path';
@@ -343,5 +341,4 @@ export function safeExtractTarball(tarballPath, finalDir, opts = {}) {
343
341
  }
344
342
  }
345
343
  }
346
- //# sourceMappingURL=safe-extract.js.map
347
- //# debugId=372e4f76-03b2-5287-ac66-249543f88937
344
+ //# sourceMappingURL=safe-extract.js.map
@@ -1,6 +1,4 @@
1
1
  /** Human label for a secrets scope: "your personal vault" or "company <slug-or-uid>". */
2
-
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="718913a3-f80f-5bff-928e-a7aa9f51dd0d")}catch(e){}}();
4
2
  export function describeSecretsScope(ref) {
5
3
  if (ref.personal)
6
4
  return "your personal vault";
@@ -15,5 +13,4 @@ export function formatSecretsListHeader(scope) {
15
13
  export function formatSecretsListEmpty(scope) {
16
14
  return `No secrets found for ${scope}.`;
17
15
  }
18
- //# sourceMappingURL=secrets-scope.js.map
19
- //# debugId=718913a3-f80f-5bff-928e-a7aa9f51dd0d
16
+ //# sourceMappingURL=secrets-scope.js.map
@@ -1,5 +1,3 @@
1
-
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="136bd272-0091-5fce-9a93-a2a375f98b38")}catch(e){}}();
3
1
  import chalk from "chalk";
4
2
  import * as readline from "node:readline";
5
3
  import { spawn } from "node:child_process";
@@ -1396,5 +1394,4 @@ export function registerSecretsCommand(program) {
1396
1394
  console.log(chalk.green("Secrets cache cleared."));
1397
1395
  });
1398
1396
  }
1399
- //# sourceMappingURL=secrets.js.map
1400
- //# debugId=136bd272-0091-5fce-9a93-a2a375f98b38
1397
+ //# sourceMappingURL=secrets.js.map
@@ -19,8 +19,6 @@
19
19
  * agents can't fabricate a signal type even if they bypass the CLI's
20
20
  * --type flag parsing.
21
21
  */
22
-
23
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="395fa417-375a-55e7-b881-e65431742835")}catch(e){}}();
24
22
  import * as fs from "node:fs";
25
23
  import * as path from "node:path";
26
24
  import chalk from "chalk";
@@ -241,5 +239,4 @@ export function registerSignalsCommand(program) {
241
239
  .option("--format <fmt>", "Output format: table | json (default: table for TTY, json piped)")
242
240
  .action(withErrorHandling(async (options) => runEntities(options)));
243
241
  }
244
- //# sourceMappingURL=signals.js.map
245
- //# debugId=395fa417-375a-55e7-b881-e65431742835
242
+ //# sourceMappingURL=signals.js.map
@@ -32,8 +32,6 @@
32
32
  * derived `authorPersonUid`; the CLI never sends an author. An optional
33
33
  * `--note` rides as `authorNote` (the change's rationale / failure context).
34
34
  */
35
-
36
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="5bdf8a18-3088-5615-b596-9be2c9fdb5cc")}catch(e){}}();
37
35
  import * as fs from "node:fs";
38
36
  import * as path from "node:path";
39
37
  import { createHash } from "node:crypto";
@@ -589,5 +587,4 @@ export function registerSkillCommand(program, deps = {}) {
589
587
  });
590
588
  return skill;
591
589
  }
592
- //# sourceMappingURL=skill.js.map
593
- //# debugId=5bdf8a18-3088-5615-b596-9be2c9fdb5cc
590
+ //# sourceMappingURL=skill.js.map
@@ -17,8 +17,6 @@
17
17
  * --format 'table' when stdout is a TTY, 'json' when piped.
18
18
  * --limit 50.
19
19
  */
20
-
21
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1123e933-4c37-5679-ae51-84cffd42e31b")}catch(e){}}();
22
20
  import * as fs from "node:fs";
23
21
  import * as path from "node:path";
24
22
  import chalk from "chalk";
@@ -251,5 +249,4 @@ export function registerSourcesCommand(program) {
251
249
  .option("--format <fmt>", "Output format: table | json (default: table for TTY, json piped)")
252
250
  .action(withErrorHandling(async (options) => runEntities(options)));
253
251
  }
254
- //# sourceMappingURL=sources.js.map
255
- //# debugId=1123e933-4c37-5679-ae51-84cffd42e31b
252
+ //# sourceMappingURL=sources.js.map
@@ -30,8 +30,6 @@
30
30
  * in package.json — revert that line to `^5.20.0` (or whatever the
31
31
  * published cut is) once US-004 ships to npm.
32
32
  */
33
-
34
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="534a51ec-53e8-5cde-98c6-5ffc1741d2c1")}catch(e){}}();
35
33
  import chalk from "chalk";
36
34
  import * as fs from "node:fs";
37
35
  import * as path from "node:path";
@@ -245,5 +243,4 @@ export function registerSyncModeCommand(syncCmd) {
245
243
  }
246
244
  });
247
245
  }
248
- //# sourceMappingURL=sync-mode.js.map
249
- //# debugId=534a51ec-53e8-5cde-98c6-5ffc1741d2c1
246
+ //# sourceMappingURL=sync-mode.js.map
@@ -36,8 +36,6 @@
36
36
  * release is unpublished, hq-cli pins `@indigoai-us/hq-cloud` to
37
37
  * `file:../hq-cloud` via `pnpm.overrides`.
38
38
  */
39
-
40
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8cdf980e-e3cf-585c-b2e5-1615765675a1")}catch(e){}}();
41
39
  import chalk from "chalk";
42
40
  import * as readline from "node:readline";
43
41
  import * as fs from "node:fs";
@@ -334,5 +332,4 @@ export function registerSyncNarrowCommand(syncCmd) {
334
332
  }
335
333
  });
336
334
  }
337
- //# sourceMappingURL=sync-narrow.js.map
338
- //# debugId=8cdf980e-e3cf-585c-b2e5-1615765675a1
335
+ //# sourceMappingURL=sync-narrow.js.map
@@ -1,8 +1,6 @@
1
1
  /**
2
2
  * hq modules sync command (US-004)
3
3
  */
4
-
5
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="abaf6ba7-702e-53e3-9d38-21182f05e529")}catch(e){}}();
6
4
  import * as fs from 'fs';
7
5
  import * as path from 'path';
8
6
  import { findHqRoot, readManifest, readLock, writeLock, getModulesDir, } from '../utils/manifest.js';
@@ -111,5 +109,4 @@ export function registerSyncCommand(program) {
111
109
  }
112
110
  });
113
111
  }
114
- //# sourceMappingURL=sync.js.map
115
- //# debugId=abaf6ba7-702e-53e3-9d38-21182f05e529
112
+ //# sourceMappingURL=sync.js.map