@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.
- package/dist/commands/hq/configure/telegram.d.ts +7 -0
- package/dist/commands/hq/configure/telegram.d.ts.map +1 -0
- package/dist/commands/hq/configure/telegram.js +24 -0
- package/dist/commands/hq/configure/telegram.js.map +1 -0
- package/dist/commands/hq/setup.d.ts +2 -2
- package/dist/commands/hq/setup.d.ts.map +1 -1
- package/dist/commands/hq/setup.js +24 -33
- package/dist/commands/hq/setup.js.map +1 -1
- package/dist/commands/hq/spawn.d.ts +4 -0
- package/dist/commands/hq/spawn.d.ts.map +1 -1
- package/dist/commands/hq/spawn.js +32 -8
- package/dist/commands/hq/spawn.js.map +1 -1
- package/dist/commands/hq/start.d.ts +4 -2
- package/dist/commands/hq/start.d.ts.map +1 -1
- package/dist/commands/hq/start.js +49 -82
- package/dist/commands/hq/start.js.map +1 -1
- package/dist/commands/hq/status.js +2 -2
- package/dist/commands/hq/status.js.map +1 -1
- package/dist/commands/hq/stop-all.js +1 -1
- package/dist/commands/hq/stop-all.js.map +1 -1
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +30 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.js +2 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/services/claude.d.ts +17 -3
- package/dist/services/claude.d.ts.map +1 -1
- package/dist/services/claude.js +26 -10
- package/dist/services/claude.js.map +1 -1
- package/dist/services/telegram.d.ts +1 -1
- package/dist/services/telegram.d.ts.map +1 -1
- package/dist/services/telegram.js +3 -16
- package/dist/services/telegram.js.map +1 -1
- package/dist/services/tmux.d.ts +2 -0
- package/dist/services/tmux.d.ts.map +1 -1
- package/dist/services/tmux.js +22 -0
- package/dist/services/tmux.js.map +1 -1
- package/dist/utils/banner.d.ts.map +1 -1
- package/dist/utils/banner.js +20 -46
- package/dist/utils/banner.js.map +1 -1
- package/oclif.manifest.json +88 -27
- package/package.json +6 -1
- package/dist/config/setup.d.ts +0 -4
- package/dist/config/setup.d.ts.map +0 -1
- package/dist/config/setup.js +0 -148
- package/dist/config/setup.js.map +0 -1
- package/dist/utils/trust.d.ts +0 -13
- package/dist/utils/trust.d.ts.map +0 -1
- package/dist/utils/trust.js +0 -29
- package/dist/utils/trust.js.map +0 -1
|
@@ -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 {
|
|
2
|
-
export default class Setup extends
|
|
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":"
|
|
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
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
static
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
|
34
|
-
|
|
35
|
-
|
|
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,
|
|
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,
|
|
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
|
-
|
|
94
|
+
resume: flags.resume,
|
|
72
95
|
permissionMode: flags["permission-mode"] ?? config.claude.permission_mode,
|
|
73
96
|
telegramBotToken: telegramEnv?.TELEGRAM_BOT_TOKEN,
|
|
74
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
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
|
-
|
|
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
|
-
|
|
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":"
|
|
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 {
|
|
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 --
|
|
24
|
-
"<%= config.bin %> hq start --
|
|
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
|
-
|
|
30
|
-
description: "
|
|
31
|
-
|
|
32
|
-
|
|
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
|
|
50
|
+
description: "Permission mode for the Claude session",
|
|
36
51
|
options: ["default", "acceptEdits", "plan", "auto"],
|
|
37
52
|
default: undefined,
|
|
38
53
|
}),
|
|
39
|
-
|
|
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
|
|
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
|
-
"
|
|
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
|
-
|
|
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
|
-
|
|
84
|
-
capacity,
|
|
108
|
+
resume: !flags.fresh,
|
|
85
109
|
permissionMode,
|
|
86
110
|
telegramBotToken: telegramEnv?.TELEGRAM_BOT_TOKEN,
|
|
87
|
-
|
|
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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,
|
|
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.
|
|
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,
|
|
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.
|
|
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,
|
|
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"}
|
package/dist/config/index.d.ts
CHANGED
|
@@ -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"}
|