@hypercli/hq 0.1.4 → 0.2.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 (51) hide show
  1. package/dist/commands/hq/configure/telegram.d.ts +7 -0
  2. package/dist/commands/hq/configure/telegram.d.ts.map +1 -0
  3. package/dist/commands/hq/configure/telegram.js +24 -0
  4. package/dist/commands/hq/configure/telegram.js.map +1 -0
  5. package/dist/commands/hq/setup.d.ts +2 -2
  6. package/dist/commands/hq/setup.d.ts.map +1 -1
  7. package/dist/commands/hq/setup.js +24 -33
  8. package/dist/commands/hq/setup.js.map +1 -1
  9. package/dist/commands/hq/spawn.d.ts +4 -0
  10. package/dist/commands/hq/spawn.d.ts.map +1 -1
  11. package/dist/commands/hq/spawn.js +32 -8
  12. package/dist/commands/hq/spawn.js.map +1 -1
  13. package/dist/commands/hq/start.d.ts +4 -2
  14. package/dist/commands/hq/start.d.ts.map +1 -1
  15. package/dist/commands/hq/start.js +49 -82
  16. package/dist/commands/hq/start.js.map +1 -1
  17. package/dist/commands/hq/status.js +2 -2
  18. package/dist/commands/hq/status.js.map +1 -1
  19. package/dist/commands/hq/stop-all.js +1 -1
  20. package/dist/commands/hq/stop-all.js.map +1 -1
  21. package/dist/config/index.d.ts +5 -0
  22. package/dist/config/index.d.ts.map +1 -1
  23. package/dist/config/index.js +30 -1
  24. package/dist/config/index.js.map +1 -1
  25. package/dist/config/schema.js +2 -2
  26. package/dist/config/schema.js.map +1 -1
  27. package/dist/services/claude.d.ts +17 -3
  28. package/dist/services/claude.d.ts.map +1 -1
  29. package/dist/services/claude.js +26 -10
  30. package/dist/services/claude.js.map +1 -1
  31. package/dist/services/telegram.d.ts +1 -1
  32. package/dist/services/telegram.d.ts.map +1 -1
  33. package/dist/services/telegram.js +3 -16
  34. package/dist/services/telegram.js.map +1 -1
  35. package/dist/services/tmux.d.ts +2 -0
  36. package/dist/services/tmux.d.ts.map +1 -1
  37. package/dist/services/tmux.js +22 -0
  38. package/dist/services/tmux.js.map +1 -1
  39. package/dist/utils/banner.d.ts.map +1 -1
  40. package/dist/utils/banner.js +20 -46
  41. package/dist/utils/banner.js.map +1 -1
  42. package/oclif.manifest.json +88 -27
  43. package/package.json +6 -1
  44. package/dist/config/setup.d.ts +0 -4
  45. package/dist/config/setup.d.ts.map +0 -1
  46. package/dist/config/setup.js +0 -148
  47. package/dist/config/setup.js.map +0 -1
  48. package/dist/utils/trust.d.ts +0 -13
  49. package/dist/utils/trust.d.ts.map +0 -1
  50. package/dist/utils/trust.js +0 -29
  51. package/dist/utils/trust.js.map +0 -1
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from "#lib/base-command";
2
+ export default class ConfigureTelegram extends BaseCommand<typeof ConfigureTelegram> {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=telegram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../../../src/commands/hq/configure/telegram.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAW,CAAC,OAAO,iBAAiB,CAAC;IACnF,OAAgB,WAAW,SAA2C;IACtE,OAAgB,QAAQ,WAA+C;IAEjE,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkB1B"}
@@ -0,0 +1,24 @@
1
+ import * as p from "@clack/prompts";
2
+ import { configureTelegram } from "create-hyper-hq/setup/wizard";
3
+ import { configExists, loadConfig, updateConfigTelegram } from "#config/index";
4
+ import { BaseCommand } from "#lib/base-command";
5
+ export default class ConfigureTelegram extends BaseCommand {
6
+ static description = "Configure Telegram integration for HQ";
7
+ static examples = ["<%= config.bin %> hq configure telegram"];
8
+ async run() {
9
+ await this.parse(ConfigureTelegram);
10
+ if (!configExists()) {
11
+ this.error("HQ is not configured yet. Run 'hyper hq setup' first.");
12
+ }
13
+ const config = loadConfig();
14
+ const result = await configureTelegram({
15
+ currentToken: config.telegram?.hq_bot_token,
16
+ });
17
+ if (result.token !== undefined) {
18
+ updateConfigTelegram(result.token);
19
+ p.log.success("Telegram configuration updated.");
20
+ p.log.info("Restart HQ to apply changes: hyper hq stop-all && hyper hq start");
21
+ }
22
+ }
23
+ }
24
+ //# sourceMappingURL=telegram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../../src/commands/hq/configure/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,WAAqC;IACnF,MAAM,CAAU,WAAW,GAAG,uCAAuC,CAAC;IACtE,MAAM,CAAU,QAAQ,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAEvE,KAAK,CAAC,GAAG;QACR,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAEpC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACtC,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY;SAC3C,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;YACjD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAChF,CAAC;IACF,CAAC"}
@@ -1,5 +1,5 @@
1
- import { Command } from "@oclif/core";
2
- export default class Setup extends Command {
1
+ import { BaseCommand } from "#lib/base-command";
2
+ export default class Setup extends BaseCommand<typeof Setup> {
3
3
  static description: string;
4
4
  static examples: string[];
5
5
  run(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACzC,OAAgB,WAAW,SAAkD;IAC7E,OAAgB,QAAQ,WAA2C;IAE7D,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsC1B"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/setup.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW,CAAC,OAAO,KAAK,CAAC;IAC3D,OAAgB,WAAW,SAAoC;IAC/D,OAAgB,QAAQ,WAAkC;IAEpD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA0B1B"}
@@ -1,38 +1,29 @@
1
- import { spawnSync } from "node:child_process";
2
- import { Command } from "@oclif/core";
3
- import { runSetup } from "../../config/setup.js";
4
- export default class Setup extends Command {
5
- static description = "Set up HQ — check dependencies and configure";
6
- static examples = ["<%= config.bin %> <%= command.id %>"];
1
+ import * as p from "@clack/prompts";
2
+ import { runConfigWizard } from "create-hyper-hq/setup/wizard";
3
+ import { configExists, loadConfig } from "#config/index";
4
+ import { BaseCommand } from "#lib/base-command";
5
+ export default class Setup extends BaseCommand {
6
+ static description = "Set up HQ configure settings";
7
+ static examples = ["<%= config.bin %> hq setup"];
7
8
  async run() {
8
- // Check tmux
9
- const tmux = spawnSync("which", ["tmux"], { encoding: "utf-8" });
10
- if (tmux.status !== 0) {
11
- this.warn("tmux is not installed. HQ requires tmux to manage sessions.");
12
- this.log(" Install: https://github.com/tmux/tmux/wiki/Installing");
13
- }
14
- // Check claude
15
- const claude = spawnSync("which", ["claude"], { encoding: "utf-8" });
16
- if (claude.status !== 0) {
17
- this.warn("Claude CLI is not installed. HQ requires claude to run sessions.");
18
- this.log(" Install: https://claude.ai/code");
19
- }
20
- // Check claude auth
21
- if (claude.status === 0) {
22
- const auth = spawnSync("claude", ["auth", "status"], {
23
- encoding: "utf-8",
24
- });
25
- if (auth.status !== 0) {
26
- this.log("\nClaude is not authenticated. Running 'claude auth login'...\n");
27
- spawnSync("claude", ["auth", "login"], { stdio: "inherit" });
28
- }
29
- }
30
- // Run config wizard (force mode — always run even if config exists)
31
- await runSetup(true);
9
+ await this.parse(Setup);
10
+ // Pass existing config for re-run safety
11
+ const existing = configExists() ? loadConfig() : undefined;
12
+ await runConfigWizard({
13
+ existing: existing
14
+ ? {
15
+ projectsRoot: existing.projects_root,
16
+ hqDir: existing.hq.dir,
17
+ telegramToken: existing.telegram?.hq_bot_token,
18
+ }
19
+ : undefined,
20
+ });
32
21
  // Offer to start HQ
33
- const { confirm } = await import("@clack/prompts");
34
- const startNow = await confirm({ message: "Start HQ now?" });
35
- if (startNow === true) {
22
+ const startNow = await p.confirm({ message: "Start HQ now?" });
23
+ if (p.isCancel(startNow))
24
+ return;
25
+ if (startNow) {
26
+ const { spawnSync } = await import("node:child_process");
36
27
  spawnSync("hyper", ["hq", "start"], { stdio: "inherit" });
37
28
  }
38
29
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/hq/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACzC,MAAM,CAAU,WAAW,GAAG,8CAA8C,CAAC;IAC7E,MAAM,CAAU,QAAQ,GAAG,CAAC,qCAAqC,CAAC,CAAC;IAEnE,KAAK,CAAC,GAAG;QACR,aAAa;QACb,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;YACzE,IAAI,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACrE,CAAC;QAED,eAAe;QACf,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;YAC9E,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAC/C,CAAC;QAED,oBAAoB;QACpB,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACpD,QAAQ,EAAE,OAAO;aACjB,CAAC,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;gBAC5E,SAAS,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC9D,CAAC;QACF,CAAC;QAED,oEAAoE;QACpE,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QAErB,oBAAoB;QACpB,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QAC7D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACvB,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/hq/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAyB;IAC3D,MAAM,CAAU,WAAW,GAAG,gCAAgC,CAAC;IAC/D,MAAM,CAAU,QAAQ,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAE1D,KAAK,CAAC,GAAG;QACR,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExB,yCAAyC;QACzC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAE3D,MAAM,eAAe,CAAC;YACrB,QAAQ,EAAE,QAAQ;gBACjB,CAAC,CAAC;oBACA,YAAY,EAAE,QAAQ,CAAC,aAAa;oBACpC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG;oBACtB,aAAa,EAAE,QAAQ,CAAC,QAAQ,EAAE,YAAY;iBAC9C;gBACF,CAAC,CAAC,SAAS;SACZ,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO;QACjC,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;YACzD,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC"}
@@ -5,11 +5,15 @@ export default class Spawn extends BaseCommand<typeof Spawn> {
5
5
  static args: {
6
6
  project: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
7
  };
8
+ static strict: boolean;
8
9
  static flags: {
9
10
  worktree: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
11
  "new-worktree": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
12
  "permission-mode": import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
13
  name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
+ resume: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ yolo: import("@oclif/core/interfaces").BooleanFlag<boolean>;
16
+ telegram: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
17
  debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
18
  };
15
19
  run(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/spawn.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAShD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW,CAAC,OAAO,KAAK,CAAC;IAC3D,OAAgB,WAAW,SAA8C;IAEzE,OAAgB,QAAQ,WAKtB;IAEF,OAAgB,IAAI;;MAKlB;IAEF,OAAgB,KAAK;;;;;;MASnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8E1B"}
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/spawn.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAShD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW,CAAC,OAAO,KAAK,CAAC;IAC3D,OAAgB,WAAW,SAA8C;IAEzE,OAAgB,QAAQ,WAMtB;IAEF,OAAgB,IAAI;;MAKlB;IAGF,OAAgB,MAAM,UAAS;IAE/B,OAAgB,KAAK;;;;;;;;;MAsBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuF1B"}
@@ -5,9 +5,9 @@ import { loadConfig } from "#config/index";
5
5
  import { BaseCommand } from "#lib/base-command";
6
6
  import { buildClaudeCommand } from "#services/claude";
7
7
  import { createWorktree, findWorktreePath, resolveProjectDir } from "#services/projects";
8
- import { getProjectTelegramEnv } from "#services/telegram";
9
- import { sanitizeSessionName } from "#services/tmux";
8
+ import { getProjectTelegramEnv, TELEGRAM_CHANNEL_PLUGIN } from "#services/telegram";
10
9
  import * as tmux from "#services/tmux";
10
+ import { sanitizeSessionName } from "#services/tmux";
11
11
  import { log } from "#utils/log";
12
12
  import { LOG_DIR } from "#utils/paths";
13
13
  export default class Spawn extends BaseCommand {
@@ -17,6 +17,7 @@ export default class Spawn extends BaseCommand {
17
17
  "<%= config.bin %> hq spawn my-project --worktree feat-auth",
18
18
  "<%= config.bin %> hq spawn my-project --new-worktree feat-login",
19
19
  "<%= config.bin %> hq spawn /absolute/path/to/project",
20
+ "<%= config.bin %> hq spawn my-project -- --dangerously-skip-permissions",
20
21
  ];
21
22
  static args = {
22
23
  project: Args.string({
@@ -24,6 +25,8 @@ export default class Spawn extends BaseCommand {
24
25
  required: true,
25
26
  }),
26
27
  };
28
+ // Allow extra args after -- to pass through to claude
29
+ static strict = false;
27
30
  static flags = {
28
31
  ...BaseCommand.baseFlags,
29
32
  worktree: Flags.string({ description: "Use an existing worktree (branch name)" }),
@@ -33,10 +36,27 @@ export default class Spawn extends BaseCommand {
33
36
  options: ["default", "acceptEdits", "plan", "auto"],
34
37
  }),
35
38
  name: Flags.string({ description: "Custom session name" }),
39
+ resume: Flags.boolean({
40
+ description: "Resume the previous session for this project",
41
+ default: false,
42
+ }),
43
+ yolo: Flags.boolean({
44
+ description: "Skip all permission checks (alias for -- --dangerously-skip-permissions)",
45
+ default: false,
46
+ }),
47
+ telegram: Flags.boolean({
48
+ description: "Enable Telegram channel (enabled by default when configured)",
49
+ default: true,
50
+ allowNo: true,
51
+ }),
36
52
  };
37
53
  async run() {
38
- const { args, flags } = await this.parse(Spawn);
54
+ const { args, flags, argv } = await this.parse(Spawn);
55
+ const extraClaudeArgs = argv;
39
56
  const config = loadConfig();
57
+ if (flags.yolo) {
58
+ extraClaudeArgs.push("--dangerously-skip-permissions");
59
+ }
40
60
  const projectDir = resolveProjectDir(args.project, config);
41
61
  const projectName = args.project.startsWith("/") ? basename(args.project) : args.project;
42
62
  if (!existsSync(projectDir)) {
@@ -64,14 +84,18 @@ export default class Spawn extends BaseCommand {
64
84
  return;
65
85
  }
66
86
  mkdirSync(LOG_DIR, { recursive: true });
67
- const telegramEnv = getProjectTelegramEnv(projectName, config);
87
+ const telegramEnv = flags.telegram ? getProjectTelegramEnv(projectName, config) : null;
88
+ const channels = [];
89
+ if (telegramEnv)
90
+ channels.push(TELEGRAM_CHANNEL_PLUGIN);
68
91
  const logFile = resolve(LOG_DIR, `${sessionName}.log`);
69
92
  const command = buildClaudeCommand({
70
93
  name: sessionName,
71
- spawnMode: "same-dir",
94
+ resume: flags.resume,
72
95
  permissionMode: flags["permission-mode"] ?? config.claude.permission_mode,
73
96
  telegramBotToken: telegramEnv?.TELEGRAM_BOT_TOKEN,
74
- telegramStateDir: telegramEnv?.TELEGRAM_STATE_DIR,
97
+ channels,
98
+ extraArgs: extraClaudeArgs,
75
99
  logFile,
76
100
  });
77
101
  log(`Spawning Claude session for: ${projectName}`);
@@ -82,9 +106,9 @@ export default class Spawn extends BaseCommand {
82
106
  Check the log for details: ${logFile}
83
107
 
84
108
  Common causes:
85
- - Remote Control is not enabled on your account
86
109
  - Claude CLI is not authenticated (run: claude auth login)
87
- - The claude command is not found (check your PATH)`);
110
+ - The claude command is not found (check your PATH)
111
+ - Telegram plugin not installed (run: claude plugin install telegram@claude-plugins-official)`);
88
112
  }
89
113
  tmux.disableRemainOnExit(sessionName);
90
114
  log("");
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/commands/hq/spawn.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/commands/hq/spawn.ts"],"names":[],"mappings":"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"}
@@ -2,11 +2,13 @@ import { BaseCommand } from "#lib/base-command";
2
2
  export default class Start extends BaseCommand<typeof Start> {
3
3
  static description: string;
4
4
  static examples: string[];
5
+ static strict: boolean;
5
6
  static flags: {
6
7
  name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
- "spawn-mode": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
+ fresh: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ yolo: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
10
  "permission-mode": import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
- capacity: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
11
+ telegram: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
12
  debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
13
  };
12
14
  run(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/start.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAchD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW,CAAC,OAAO,KAAK,CAAC;IAC3D,OAAgB,WAAW,SAAiE;IAE5F,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;;MAcnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAkG1B"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/start.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAmBhD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,WAAW,CAAC,OAAO,KAAK,CAAC;IAC3D,OAAgB,WAAW,SAAiE;IAE5F,OAAgB,QAAQ,WAMtB;IAGF,OAAgB,MAAM,UAAS;IAE/B,OAAgB,KAAK;;;;;;;MAqBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyG1B"}
@@ -3,54 +3,75 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
3
  import { resolve } from "node:path";
4
4
  import * as p from "@clack/prompts";
5
5
  import { Flags } from "@oclif/core";
6
- import { runSetupIfNeeded } from "#config/setup";
6
+ import { generateHqClaudeMd } from "create-hyper-hq/setup/claude-md";
7
+ import { isWorkspaceTrusted, trustWorkspace } from "create-hyper-hq/setup/trust";
8
+ import { runConfigWizard } from "create-hyper-hq/setup/wizard";
9
+ import { configExists, loadConfig } from "#config/index";
7
10
  import { BaseCommand } from "#lib/base-command";
8
11
  import { buildClaudeCommand } from "#services/claude";
9
- import { getHqTelegramEnv } from "#services/telegram";
12
+ import { getHqTelegramEnv, TELEGRAM_CHANNEL_PLUGIN } from "#services/telegram";
10
13
  import * as tmux from "#services/tmux";
11
14
  import { renderBanner } from "#utils/banner";
12
15
  import { log } from "#utils/log";
13
16
  import { LOG_DIR } from "#utils/paths";
14
- import { isWorkspaceTrusted, trustWorkspace } from "#utils/trust";
15
17
  function isHyperOnPath() {
16
18
  const result = spawnSync("which", ["hyper"], { encoding: "utf-8" });
17
19
  return result.status === 0;
18
20
  }
21
+ async function ensureConfig() {
22
+ if (configExists())
23
+ return loadConfig();
24
+ await runConfigWizard();
25
+ return loadConfig();
26
+ }
19
27
  export default class Start extends BaseCommand {
20
28
  static description = "Start the HQ session — always-on Claude Code command center";
21
29
  static examples = [
22
30
  "<%= config.bin %> hq start",
23
- "<%= config.bin %> hq start --spawn-mode worktree",
24
- "<%= config.bin %> hq start --capacity 16",
31
+ "<%= config.bin %> hq start --yolo",
32
+ "<%= config.bin %> hq start --fresh",
33
+ "<%= config.bin %> hq start --no-telegram",
34
+ "<%= config.bin %> hq start -- --model opus",
25
35
  ];
36
+ // Allow extra args after -- to pass through to claude
37
+ static strict = false;
26
38
  static flags = {
27
39
  ...BaseCommand.baseFlags,
28
40
  name: Flags.string({ description: "Custom session name", default: undefined }),
29
- "spawn-mode": Flags.string({
30
- description: "How new sessions are created",
31
- options: ["same-dir", "worktree", "session"],
32
- default: undefined,
41
+ fresh: Flags.boolean({
42
+ description: "Start a new session instead of resuming the previous one",
43
+ default: false,
44
+ }),
45
+ yolo: Flags.boolean({
46
+ description: "Skip all permission checks (alias for -- --dangerously-skip-permissions)",
47
+ default: false,
33
48
  }),
34
49
  "permission-mode": Flags.string({
35
- description: "Permission mode for sessions",
50
+ description: "Permission mode for the Claude session",
36
51
  options: ["default", "acceptEdits", "plan", "auto"],
37
52
  default: undefined,
38
53
  }),
39
- capacity: Flags.integer({ description: "Max concurrent sessions", default: undefined }),
54
+ telegram: Flags.boolean({
55
+ description: "Enable Telegram channel (enabled by default when configured)",
56
+ default: true,
57
+ allowNo: true,
58
+ }),
40
59
  };
41
60
  async run() {
42
- const { flags } = await this.parse(Start);
43
- const config = await runSetupIfNeeded();
61
+ const { flags, argv } = await this.parse(Start);
62
+ const extraClaudeArgs = argv;
63
+ const config = await ensureConfig();
44
64
  const sessionName = flags.name ?? config.hq.name;
45
- const spawnMode = flags["spawn-mode"] ?? config.hq.spawn_mode;
46
- const capacity = flags.capacity ?? config.hq.capacity;
47
65
  const permissionMode = flags["permission-mode"] ?? config.claude.permission_mode;
66
+ // --yolo injects --dangerously-skip-permissions
67
+ if (flags.yolo) {
68
+ extraClaudeArgs.push("--dangerously-skip-permissions");
69
+ }
48
70
  // Suggest global install if not on PATH
49
71
  if (!isHyperOnPath()) {
50
72
  p.log.warning("Hyper CLI is not installed globally. The HQ session won't be able to run hyper commands.\n" +
51
73
  " Install globally:\n\n" +
52
- " npm install -g @hypercli/cli\n" +
53
- " # or: bun install -g @hypercli/cli\n");
74
+ " bun install -g @hypercli/cli\n");
54
75
  }
55
76
  // Ensure HQ directory exists
56
77
  const hqDir = config.hq.dir;
@@ -61,7 +82,7 @@ export default class Start extends BaseCommand {
61
82
  // Generate CLAUDE.md for the HQ session if not present
62
83
  const claudeMdPath = resolve(hqDir, "CLAUDE.md");
63
84
  if (!existsSync(claudeMdPath)) {
64
- writeFileSync(claudeMdPath, generateHqClaudeMd(config.projects_root), "utf-8");
85
+ writeFileSync(claudeMdPath, generateHqClaudeMd(config.projects_root, sessionName), "utf-8");
65
86
  log("Generated CLAUDE.md for HQ session.");
66
87
  }
67
88
  // Ensure workspace trust for both HQ dir and projects root
@@ -76,15 +97,19 @@ export default class Start extends BaseCommand {
76
97
  return;
77
98
  }
78
99
  mkdirSync(LOG_DIR, { recursive: true });
79
- const telegramEnv = config.telegram.hq_bot_token ? getHqTelegramEnv(config) : null;
100
+ // Enable Telegram channel if configured and not explicitly disabled
101
+ const telegramEnv = flags.telegram && config.telegram.hq_bot_token ? getHqTelegramEnv(config) : null;
102
+ const channels = [];
103
+ if (telegramEnv)
104
+ channels.push(TELEGRAM_CHANNEL_PLUGIN);
80
105
  const logFile = resolve(LOG_DIR, `${sessionName}.log`);
81
106
  const command = buildClaudeCommand({
82
107
  name: sessionName,
83
- spawnMode,
84
- capacity,
108
+ resume: !flags.fresh,
85
109
  permissionMode,
86
110
  telegramBotToken: telegramEnv?.TELEGRAM_BOT_TOKEN,
87
- telegramStateDir: telegramEnv?.TELEGRAM_STATE_DIR,
111
+ channels,
112
+ extraArgs: extraClaudeArgs,
88
113
  logFile,
89
114
  });
90
115
  const cwd = hqDir;
@@ -106,10 +131,10 @@ ${lastError}
106
131
  Full log: ${logFile}
107
132
 
108
133
  Common causes:
109
- - Remote Control is not enabled on your account
110
134
  - Claude CLI is not authenticated (run: claude auth login)
111
135
  - Workspace not trusted (run: cd <dir> && claude)
112
- - The claude command is not found (check your PATH)`);
136
+ - The claude command is not found (check your PATH)
137
+ - Telegram plugin not installed (run: claude plugin install telegram@claude-plugins-official)`);
113
138
  }
114
139
  // Session survived — disable remain-on-exit so panes clean up normally
115
140
  tmux.disableRemainOnExit(sessionName);
@@ -117,62 +142,4 @@ Common causes:
117
142
  this.log(renderBanner({ config, sessionName, logFile }));
118
143
  }
119
144
  }
120
- function generateHqClaudeMd(projectsRoot) {
121
- return `# Hyper HQ — Claude Code Command Center
122
-
123
- You are **Hyper HQ**, an always-running Claude Code instance that serves as a command center.
124
- Calm, decisive, and always in control.
125
-
126
- ## Your Role
127
-
128
- You are a persistent Claude Code session running in remote-control server mode.
129
- Users connect to you from claude.ai/code, mobile apps, or via Telegram.
130
-
131
- ## On Startup
132
-
133
- When this session first starts, immediately:
134
- 1. If Telegram is available, use the \`reply\` tool to send: "Hyper HQ is online. Ready for orders."
135
- 2. Run \`hyper hq list --json\` to get the current project inventory.
136
-
137
- ## Capabilities
138
-
139
- 1. **Spawn new Claude sessions** for any project using the \`hyper hq\` CLI
140
- 2. **Receive and act on messages** via Telegram (if configured)
141
- 3. **Manage running sessions** — start, stop, check status
142
- 4. **Coordinate work** across multiple projects
143
-
144
- ## Key Commands
145
-
146
- \`\`\`bash
147
- hyper hq spawn <project> # Spawn session for a project
148
- hyper hq spawn <project> --worktree <branch> # Spawn on existing worktree
149
- hyper hq spawn <project> --new-worktree <branch> # Create worktree + spawn
150
- hyper hq status # Check all running sessions
151
- hyper hq stop <project> # Stop a session
152
- hyper hq stop-all # Stop everything
153
- hyper hq list # List all projects and worktrees
154
- hyper hq list --json # JSON output for parsing
155
- hyper hq config # Show current configuration
156
- \`\`\`
157
-
158
- ## Handling Requests
159
-
160
- When a user asks to open/start/spawn a session:
161
-
162
- 1. Parse the request for: **project name** and optionally **worktree** (existing or new)
163
- 2. Run \`hyper hq list --json\` to verify the project exists
164
- 3. Run the appropriate spawn command
165
- 4. Reply with confirmation, session name, and remind them to check **claude.ai/code**
166
-
167
- ## Important Notes
168
-
169
- - Projects root: ${projectsRoot}
170
- - Logs: ~/.config/hyper/logs/
171
- - The \`wt\` (worktrunk) command manages worktrees
172
- - Config: ~/.config/hyper/hq.toml
173
-
174
- ## Package Management
175
- - Use bun, never npm
176
- `;
177
- }
178
145
  //# sourceMappingURL=start.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/hq/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/hq/start.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ export default class Status extends BaseCommand {
10
10
  };
11
11
  async run() {
12
12
  const { flags } = await this.parse(Status);
13
- const sessions = tmux.listSessions("hq");
13
+ const sessions = tmux.listHqSessions();
14
14
  if (flags.json) {
15
15
  this.log(JSON.stringify(sessions, null, 2));
16
16
  return;
@@ -24,7 +24,7 @@ export default class Status extends BaseCommand {
24
24
  return;
25
25
  }
26
26
  for (const session of sessions) {
27
- const isHq = session.name === "hyper-hq";
27
+ const isHq = session.name === "Hyper HQ" || session.name === "hyper-hq";
28
28
  const status = session.attached ? "ATTACHED" : "ONLINE";
29
29
  const tag = isHq ? " (HQ)" : "";
30
30
  this.log(` ${session.name.padEnd(24)} ${status.padEnd(10)} ${session.created}${tag}`);
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/hq/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAA0B;IAC7D,MAAM,CAAU,WAAW,GAAG,0BAA0B,CAAC;IAEzD,MAAM,CAAU,QAAQ,GAAG,CAAC,6BAA6B,EAAE,oCAAoC,CAAC,CAAC;IAEjG,MAAM,CAAU,KAAK,GAAG;QACvB,GAAG,WAAW,CAAC,SAAS;QACxB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KACtE,CAAC;IAEF,KAAK,CAAC,GAAG;QACR,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAExB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAC7C,OAAO;QACR,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC;YACzC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC;QACxF,CAAC;IACF,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/hq/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAA0B;IAC7D,MAAM,CAAU,WAAW,GAAG,0BAA0B,CAAC;IAEzD,MAAM,CAAU,QAAQ,GAAG,CAAC,6BAA6B,EAAE,oCAAoC,CAAC,CAAC;IAEjG,MAAM,CAAU,KAAK,GAAG;QACvB,GAAG,WAAW,CAAC,SAAS;QACxB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KACtE,CAAC;IAEF,KAAK,CAAC,GAAG;QACR,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEvC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACR,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAExB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAC7C,OAAO;QACR,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU,CAAC;YACxE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;YACxD,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,CAAC;QACxF,CAAC;IACF,CAAC"}
@@ -6,7 +6,7 @@ export default class StopAll extends BaseCommand {
6
6
  static examples = ["<%= config.bin %> hq stop-all"];
7
7
  async run() {
8
8
  await this.parse(StopAll);
9
- const sessions = tmux.listSessions("hq");
9
+ const sessions = tmux.listHqSessions();
10
10
  if (sessions.length === 0) {
11
11
  this.log("No HQ sessions running");
12
12
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"stop-all.js","sourceRoot":"","sources":["../../../src/commands/hq/stop-all.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAA2B;IAC/D,MAAM,CAAU,WAAW,GAAG,8BAA8B,CAAC;IAE7D,MAAM,CAAU,QAAQ,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7D,KAAK,CAAC,GAAG;QACR,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACnC,OAAO;QACR,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,GAAG,CAAC,YAAY,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;IACF,CAAC"}
1
+ {"version":3,"file":"stop-all.js","sourceRoot":"","sources":["../../../src/commands/hq/stop-all.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAA2B;IAC/D,MAAM,CAAU,WAAW,GAAG,8BAA8B,CAAC;IAE7D,MAAM,CAAU,QAAQ,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7D,KAAK,CAAC,GAAG;QACR,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAEvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACnC,OAAO;QACR,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,GAAG,CAAC,YAAY,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;IACF,CAAC"}
@@ -2,5 +2,10 @@ import { type HqConfig } from "./schema.js";
2
2
  declare const CONFIG_PATH: string;
3
3
  export declare function configExists(): boolean;
4
4
  export declare function loadConfig(): HqConfig;
5
+ /**
6
+ * Update the telegram bot token in hq.toml without destroying comments.
7
+ * Uses regex replacement for surgical update.
8
+ */
9
+ export declare function updateConfigTelegram(token: string): void;
5
10
  export { CONFIG_PATH };
6
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5D,QAAA,MAAM,WAAW,QAA8C,CAAC;AAgChE,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,UAAU,IAAI,QAAQ,CAiCrC;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5D,QAAA,MAAM,WAAW,QAA8C,CAAC;AAgChE,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,UAAU,IAAI,QAAQ,CAiCrC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CA0BxD;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}