@hypercli/hq 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/hq/attach.d.ts.map +1 -1
- package/dist/commands/hq/attach.js +8 -3
- package/dist/commands/hq/attach.js.map +1 -1
- package/dist/commands/hq/spawn.d.ts.map +1 -1
- package/dist/commands/hq/spawn.js +1 -2
- package/dist/commands/hq/spawn.js.map +1 -1
- package/dist/commands/hq/start.d.ts.map +1 -1
- package/dist/commands/hq/start.js +45 -11
- package/dist/commands/hq/start.js.map +1 -1
- package/dist/commands/hq/stop.d.ts.map +1 -1
- package/dist/commands/hq/stop.js +7 -3
- package/dist/commands/hq/stop.js.map +1 -1
- package/dist/commands/hq/web.d.ts +7 -0
- package/dist/commands/hq/web.d.ts.map +1 -0
- package/dist/commands/hq/web.js +45 -0
- package/dist/commands/hq/web.js.map +1 -0
- package/dist/config/setup.d.ts +4 -0
- package/dist/config/setup.d.ts.map +1 -0
- package/dist/config/setup.js +148 -0
- package/dist/config/setup.js.map +1 -0
- package/dist/services/claude.d.ts +16 -8
- package/dist/services/claude.d.ts.map +1 -1
- package/dist/services/claude.js +16 -9
- package/dist/services/claude.js.map +1 -1
- package/dist/services/tmux.d.ts +5 -0
- package/dist/services/tmux.d.ts.map +1 -1
- package/dist/services/tmux.js +13 -0
- package/dist/services/tmux.js.map +1 -1
- package/dist/utils/banner.d.ts.map +1 -1
- package/dist/utils/banner.js +1 -0
- package/dist/utils/banner.js.map +1 -1
- package/dist/utils/trust.d.ts +10 -0
- package/dist/utils/trust.d.ts.map +1 -0
- package/dist/utils/trust.js +41 -0
- package/dist/utils/trust.js.map +1 -0
- package/oclif.manifest.json +36 -4
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/attach.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"attach.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/attach.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,WAAW,CAAC,OAAO,MAAM,CAAC;IAC7D,OAAgB,WAAW,SAAkC;IAE7D,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,IAAI;;MAKlB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiB1B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { execFileSync } from "node:child_process";
|
|
2
2
|
import { Args } from "@oclif/core";
|
|
3
|
+
import { configExists, loadConfig } from "#config/index";
|
|
3
4
|
import { BaseCommand } from "#lib/base-command";
|
|
4
5
|
import * as tmux from "#services/tmux";
|
|
5
6
|
export default class Attach extends BaseCommand {
|
|
@@ -10,14 +11,18 @@ export default class Attach extends BaseCommand {
|
|
|
10
11
|
];
|
|
11
12
|
static args = {
|
|
12
13
|
session: Args.string({
|
|
13
|
-
description: "Session name or project name (default:
|
|
14
|
+
description: "Session name or project name (default: HQ session from config)",
|
|
14
15
|
required: false,
|
|
15
16
|
}),
|
|
16
17
|
};
|
|
17
18
|
async run() {
|
|
18
19
|
const { args } = await this.parse(Attach);
|
|
19
|
-
let target = args.session
|
|
20
|
-
if (!target
|
|
20
|
+
let target = args.session;
|
|
21
|
+
if (!target) {
|
|
22
|
+
// Use the configured HQ session name
|
|
23
|
+
target = configExists() ? loadConfig().hq.name : "Hyper HQ";
|
|
24
|
+
}
|
|
25
|
+
else if (!target.startsWith("hq") && !target.startsWith("Hyper")) {
|
|
21
26
|
target = `hq-${target}`;
|
|
22
27
|
}
|
|
23
28
|
if (!tmux.sessionExists(target)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../src/commands/hq/attach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,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,8BAA8B,CAAC;IAE7D,MAAM,CAAU,QAAQ,GAAG;QAC1B,6BAA6B;QAC7B,wCAAwC;KACxC,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACtB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"attach.js","sourceRoot":"","sources":["../../../src/commands/hq/attach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,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,8BAA8B,CAAC;IAE7D,MAAM,CAAU,QAAQ,GAAG;QAC1B,6BAA6B;QAC7B,wCAAwC;KACxC,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACtB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,gEAAgE;YAC7E,QAAQ,EAAE,KAAK;SACf,CAAC;KACF,CAAC;IAEF,KAAK,CAAC,GAAG;QACR,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,qCAAqC;YACrC,MAAM,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAC7D,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,YAAY,MAAM,4DAA4D,CAAC,CAAC;QAC5F,CAAC;QAED,YAAY,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACtE,CAAC"}
|
|
@@ -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,WAMtB;IAEF,OAAgB,IAAI;;MAKlB;IAGF,OAAgB,MAAM,UAAS;IAE/B,OAAgB,KAAK;;;;;;;;;MAsBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
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;CAsF1B"}
|
|
@@ -96,11 +96,10 @@ export default class Spawn extends BaseCommand {
|
|
|
96
96
|
telegramBotToken: telegramEnv?.TELEGRAM_BOT_TOKEN,
|
|
97
97
|
channels,
|
|
98
98
|
extraArgs: extraClaudeArgs,
|
|
99
|
-
logFile,
|
|
100
99
|
});
|
|
101
100
|
log(`Spawning Claude session for: ${projectName}`);
|
|
102
101
|
log(`Working directory: ${workDir}`);
|
|
103
|
-
tmux.createSession({ name: sessionName, cwd: workDir, command });
|
|
102
|
+
tmux.createSession({ name: sessionName, cwd: workDir, command, logFile });
|
|
104
103
|
if (tmux.waitAndVerify(sessionName) === "dead") {
|
|
105
104
|
this.error(`Session '${sessionName}' exited immediately after starting.
|
|
106
105
|
Check the log for details: ${logFile}
|
|
@@ -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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"}
|
|
@@ -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":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAmChD,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;CAiI1B"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
2
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
3
4
|
import { resolve } from "node:path";
|
|
4
5
|
import * as p from "@clack/prompts";
|
|
5
6
|
import { Flags } from "@oclif/core";
|
|
6
|
-
import { generateHqClaudeMd } from "create-hyper-hq/setup/claude-md";
|
|
7
|
+
import { generateHqClaudeMd, generateHqConfigSkill, } from "create-hyper-hq/setup/claude-md";
|
|
7
8
|
import { isWorkspaceTrusted, trustWorkspace } from "create-hyper-hq/setup/trust";
|
|
8
9
|
import { runConfigWizard } from "create-hyper-hq/setup/wizard";
|
|
9
10
|
import { configExists, loadConfig } from "#config/index";
|
|
@@ -14,6 +15,8 @@ import * as tmux from "#services/tmux";
|
|
|
14
15
|
import { renderBanner } from "#utils/banner";
|
|
15
16
|
import { log } from "#utils/log";
|
|
16
17
|
import { LOG_DIR } from "#utils/paths";
|
|
18
|
+
const TELEGRAM_ENV_FILE = resolve(homedir(), ".claude", "channels", "telegram", ".env");
|
|
19
|
+
const TELEGRAM_ACCESS_FILE = resolve(homedir(), ".claude", "channels", "telegram", "access.json");
|
|
17
20
|
function isHyperOnPath() {
|
|
18
21
|
const result = spawnSync("which", ["hyper"], { encoding: "utf-8" });
|
|
19
22
|
return result.status === 0;
|
|
@@ -24,6 +27,21 @@ async function ensureConfig() {
|
|
|
24
27
|
await runConfigWizard();
|
|
25
28
|
return loadConfig();
|
|
26
29
|
}
|
|
30
|
+
function detectTelegramState() {
|
|
31
|
+
if (!existsSync(TELEGRAM_ENV_FILE))
|
|
32
|
+
return "not-configured";
|
|
33
|
+
if (!existsSync(TELEGRAM_ACCESS_FILE))
|
|
34
|
+
return "configured-unpaired";
|
|
35
|
+
try {
|
|
36
|
+
const access = JSON.parse(readFileSync(TELEGRAM_ACCESS_FILE, "utf-8"));
|
|
37
|
+
const hasUsers = (access.allowFrom ?? []).length > 0;
|
|
38
|
+
const hasGroups = Object.keys(access.groups ?? {}).length > 0;
|
|
39
|
+
return hasUsers || hasGroups ? "paired" : "configured-unpaired";
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return "configured-unpaired";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
27
45
|
export default class Start extends BaseCommand {
|
|
28
46
|
static description = "Start the HQ session — always-on Claude Code command center";
|
|
29
47
|
static examples = [
|
|
@@ -43,7 +61,7 @@ export default class Start extends BaseCommand {
|
|
|
43
61
|
default: false,
|
|
44
62
|
}),
|
|
45
63
|
yolo: Flags.boolean({
|
|
46
|
-
description: "Skip
|
|
64
|
+
description: "Skip permission checks — HQ runs autonomously on startup",
|
|
47
65
|
default: false,
|
|
48
66
|
}),
|
|
49
67
|
"permission-mode": Flags.string({
|
|
@@ -79,12 +97,19 @@ export default class Start extends BaseCommand {
|
|
|
79
97
|
mkdirSync(hqDir, { recursive: true });
|
|
80
98
|
log(`Created HQ directory: ${hqDir}`);
|
|
81
99
|
}
|
|
82
|
-
//
|
|
100
|
+
// Always regenerate CLAUDE.md — content varies based on flags and detected state
|
|
83
101
|
const claudeMdPath = resolve(hqDir, "CLAUDE.md");
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
102
|
+
const telegramState = detectTelegramState();
|
|
103
|
+
writeFileSync(claudeMdPath, generateHqClaudeMd({
|
|
104
|
+
projectsRoot: config.projects_root,
|
|
105
|
+
sessionName,
|
|
106
|
+
autonomous: flags.yolo,
|
|
107
|
+
telegramState,
|
|
108
|
+
}), "utf-8");
|
|
109
|
+
// Generate /hq:config skill
|
|
110
|
+
const skillDir = resolve(hqDir, ".claude", "skills", "hq-config");
|
|
111
|
+
mkdirSync(skillDir, { recursive: true });
|
|
112
|
+
writeFileSync(resolve(skillDir, "SKILL.md"), generateHqConfigSkill(), "utf-8");
|
|
88
113
|
// Ensure workspace trust for both HQ dir and projects root
|
|
89
114
|
for (const dir of [hqDir, config.projects_root]) {
|
|
90
115
|
if (!isWorkspaceTrusted(dir)) {
|
|
@@ -93,8 +118,8 @@ export default class Start extends BaseCommand {
|
|
|
93
118
|
}
|
|
94
119
|
}
|
|
95
120
|
if (tmux.sessionExists(sessionName)) {
|
|
96
|
-
log(`Session '${sessionName}' is already running.
|
|
97
|
-
|
|
121
|
+
log(`Session '${sessionName}' is already running. Attaching...`);
|
|
122
|
+
tmux.attachSession(sessionName);
|
|
98
123
|
}
|
|
99
124
|
mkdirSync(LOG_DIR, { recursive: true });
|
|
100
125
|
// Enable Telegram channel if configured and not explicitly disabled
|
|
@@ -110,11 +135,10 @@ export default class Start extends BaseCommand {
|
|
|
110
135
|
telegramBotToken: telegramEnv?.TELEGRAM_BOT_TOKEN,
|
|
111
136
|
channels,
|
|
112
137
|
extraArgs: extraClaudeArgs,
|
|
113
|
-
logFile,
|
|
114
138
|
});
|
|
115
139
|
const cwd = hqDir;
|
|
116
140
|
log(`Starting HQ session: ${sessionName}`);
|
|
117
|
-
tmux.createSession({ name: sessionName, cwd, command });
|
|
141
|
+
tmux.createSession({ name: sessionName, cwd, command, logFile });
|
|
118
142
|
// Verify the session actually survived startup
|
|
119
143
|
if (tmux.waitAndVerify(sessionName) === "dead") {
|
|
120
144
|
let lastError = "";
|
|
@@ -138,8 +162,18 @@ Common causes:
|
|
|
138
162
|
}
|
|
139
163
|
// Session survived — disable remain-on-exit so panes clean up normally
|
|
140
164
|
tmux.disableRemainOnExit(sessionName);
|
|
165
|
+
// Enable remote control before the startup prompt — /remote-control is a
|
|
166
|
+
// Claude Code slash command that Claude can't invoke programmatically.
|
|
167
|
+
tmux.sendKeys(sessionName, `/remote-control ${sessionName}`);
|
|
168
|
+
// Send initial prompt so Claude reads CLAUDE.md and runs startup steps
|
|
169
|
+
tmux.sendKeys(sessionName, "you are online, follow your On Startup instructions");
|
|
141
170
|
// Show welcome banner
|
|
142
171
|
this.log(renderBanner({ config, sessionName, logFile }));
|
|
172
|
+
this.log("Attaching to HQ session. To detach without stopping: Ctrl+B, then D\n");
|
|
173
|
+
// Auto-attach so the user lands inside the Claude session.
|
|
174
|
+
// Claude's CLAUDE.md has startup instructions tailored to the
|
|
175
|
+
// current state (Telegram pairing, --yolo mode, etc.)
|
|
176
|
+
tmux.attachSession(sessionName);
|
|
143
177
|
}
|
|
144
178
|
}
|
|
145
179
|
//# 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,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/commands/hq/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/stop.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/stop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW,CAAC,OAAO,IAAI,CAAC;IACzD,OAAgB,WAAW,SAAwB;IAEnD,OAAgB,QAAQ,WAAyE;IAEjG,OAAgB,IAAI;;MAKlB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB1B"}
|
package/dist/commands/hq/stop.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Args } from "@oclif/core";
|
|
2
|
+
import { configExists, loadConfig } from "#config/index";
|
|
2
3
|
import { BaseCommand } from "#lib/base-command";
|
|
3
4
|
import * as tmux from "#services/tmux";
|
|
4
5
|
import { log } from "#utils/log";
|
|
@@ -7,14 +8,17 @@ export default class Stop extends BaseCommand {
|
|
|
7
8
|
static examples = ["<%= config.bin %> hq stop", "<%= config.bin %> hq stop my-project"];
|
|
8
9
|
static args = {
|
|
9
10
|
session: Args.string({
|
|
10
|
-
description: "Session name or project name (default:
|
|
11
|
+
description: "Session name or project name (default: HQ session from config)",
|
|
11
12
|
required: false,
|
|
12
13
|
}),
|
|
13
14
|
};
|
|
14
15
|
async run() {
|
|
15
16
|
const { args } = await this.parse(Stop);
|
|
16
|
-
let target = args.session
|
|
17
|
-
if (!target
|
|
17
|
+
let target = args.session;
|
|
18
|
+
if (!target) {
|
|
19
|
+
target = configExists() ? loadConfig().hq.name : "Hyper HQ";
|
|
20
|
+
}
|
|
21
|
+
else if (!target.startsWith("hq") && !target.startsWith("Hyper")) {
|
|
18
22
|
target = `hq-${target}`;
|
|
19
23
|
}
|
|
20
24
|
if (tmux.killSession(target)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/hq/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,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,IAAK,SAAQ,WAAwB;IACzD,MAAM,CAAU,WAAW,GAAG,oBAAoB,CAAC;IAEnD,MAAM,CAAU,QAAQ,GAAG,CAAC,2BAA2B,EAAE,sCAAsC,CAAC,CAAC;IAEjG,MAAM,CAAU,IAAI,GAAG;QACtB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../../src/commands/hq/stop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,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,IAAK,SAAQ,WAAwB;IACzD,MAAM,CAAU,WAAW,GAAG,oBAAoB,CAAC;IAEnD,MAAM,CAAU,QAAQ,GAAG,CAAC,2BAA2B,EAAE,sCAAsC,CAAC,CAAC;IAEjG,MAAM,CAAU,IAAI,GAAG;QACtB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,gEAAgE;YAC7E,QAAQ,EAAE,KAAK;SACf,CAAC;KACF,CAAC;IAEF,KAAK,CAAC,GAAG;QACR,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAC7D,CAAC;aAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpE,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,GAAG,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,KAAK,CAAC,YAAY,MAAM,aAAa,CAAC,CAAC;QAC7C,CAAC;IACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../src/commands/hq/web.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAYhD,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAW,CAAC,OAAO,GAAG,CAAC;IACvD,OAAgB,WAAW,SACsD;IAEjF,OAAgB,QAAQ,WAAgC;IAElD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiC1B"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { configExists, loadConfig } from "#config/index";
|
|
5
|
+
import { BaseCommand } from "#lib/base-command";
|
|
6
|
+
import * as tmux from "#services/tmux";
|
|
7
|
+
import { LOG_DIR } from "#utils/paths";
|
|
8
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: strip ANSI escape codes from tmux output
|
|
9
|
+
const BRIDGE_URL_RE = /https:\/\/claude\.ai\/code\?bridge=[^\s\x1b]*/g;
|
|
10
|
+
function extractBridgeUrl(text) {
|
|
11
|
+
const matches = text.match(BRIDGE_URL_RE);
|
|
12
|
+
return matches && matches.length > 0 ? matches[matches.length - 1] : null;
|
|
13
|
+
}
|
|
14
|
+
export default class Web extends BaseCommand {
|
|
15
|
+
static description = "Open the HQ session in claude.ai/code (requires /remote-control to be active)";
|
|
16
|
+
static examples = ["<%= config.bin %> hq web"];
|
|
17
|
+
async run() {
|
|
18
|
+
const sessionName = configExists() ? loadConfig().hq.name : "Hyper HQ";
|
|
19
|
+
if (!tmux.sessionExists(sessionName)) {
|
|
20
|
+
this.error(`HQ session '${sessionName}' is not running. Start it first with: hyper hq start`);
|
|
21
|
+
}
|
|
22
|
+
// Try to find the bridge URL from tmux pane content first
|
|
23
|
+
let bridgeUrl = null;
|
|
24
|
+
const paneContent = tmux.capturePane(sessionName);
|
|
25
|
+
if (paneContent) {
|
|
26
|
+
bridgeUrl = extractBridgeUrl(paneContent);
|
|
27
|
+
}
|
|
28
|
+
// Fall back to log file
|
|
29
|
+
if (!bridgeUrl) {
|
|
30
|
+
try {
|
|
31
|
+
const logFile = resolve(LOG_DIR, `${sessionName}.log`);
|
|
32
|
+
const logContent = readFileSync(logFile, "utf-8");
|
|
33
|
+
bridgeUrl = extractBridgeUrl(logContent);
|
|
34
|
+
}
|
|
35
|
+
catch { }
|
|
36
|
+
}
|
|
37
|
+
if (!bridgeUrl) {
|
|
38
|
+
this.error(`No bridge URL found. Make sure /remote-control is active in the HQ session.\n` +
|
|
39
|
+
` Attach to check: hyper hq attach`);
|
|
40
|
+
}
|
|
41
|
+
this.log(`Opening: ${bridgeUrl}`);
|
|
42
|
+
execSync(`open '${bridgeUrl}'`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/commands/hq/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,oGAAoG;AACpG,MAAM,aAAa,GAAG,gDAAgD,CAAC;AAEvE,SAAS,gBAAgB,CAAC,IAAY;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC1C,OAAO,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,WAAuB;IACvD,MAAM,CAAU,WAAW,GAC1B,+EAA+E,CAAC;IAEjF,MAAM,CAAU,QAAQ,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExD,KAAK,CAAC,GAAG;QACR,MAAM,WAAW,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;QAEvE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,eAAe,WAAW,uDAAuD,CAAC,CAAC;QAC/F,CAAC;QAED,0DAA0D;QAC1D,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,WAAW,EAAE,CAAC;YACjB,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC;QAED,wBAAwB;QACxB,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,WAAW,MAAM,CAAC,CAAC;gBACvD,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAClD,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACX,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,CACT,+EAA+E;gBAC9E,oCAAoC,CACrC,CAAC;QACH,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC;QAClC,QAAQ,CAAC,SAAS,SAAS,GAAG,CAAC,CAAC;IACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/config/setup.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAO5C,wBAAsB,QAAQ,CAAC,KAAK,UAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6K/D;AAGD,eAAO,MAAM,gBAAgB,yBAAwB,CAAC"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { chmodSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
import * as p from "@clack/prompts";
|
|
5
|
+
import { isWorkspaceTrusted, trustWorkspace } from "../utils/trust.js";
|
|
6
|
+
import { CONFIG_PATH, configExists, loadConfig } from "./index.js";
|
|
7
|
+
function expandHome(path) {
|
|
8
|
+
if (path.startsWith("~/"))
|
|
9
|
+
return resolve(homedir(), path.slice(2));
|
|
10
|
+
return path;
|
|
11
|
+
}
|
|
12
|
+
export async function runSetup(force = false) {
|
|
13
|
+
if (!force && configExists()) {
|
|
14
|
+
return loadConfig();
|
|
15
|
+
}
|
|
16
|
+
p.intro("Welcome to Hyper HQ — Claude Code Command Center");
|
|
17
|
+
p.note("No configuration file found.\n" + "Let's get you set up. This will only take a moment.", "First-time setup");
|
|
18
|
+
// Step 1: Projects root
|
|
19
|
+
const projectsRoot = await p.text({
|
|
20
|
+
message: "Where do your projects live?",
|
|
21
|
+
placeholder: "~/work",
|
|
22
|
+
defaultValue: "~/work",
|
|
23
|
+
validate(value) {
|
|
24
|
+
if (!value?.trim())
|
|
25
|
+
return "Please enter a path";
|
|
26
|
+
return undefined;
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
if (p.isCancel(projectsRoot)) {
|
|
30
|
+
p.cancel("Setup cancelled.");
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
const expandedRoot = expandHome(projectsRoot);
|
|
34
|
+
// Step 2: Ensure directory exists
|
|
35
|
+
if (!existsSync(expandedRoot)) {
|
|
36
|
+
const create = await p.confirm({
|
|
37
|
+
message: `Directory ${expandedRoot} doesn't exist. Create it?`,
|
|
38
|
+
initialValue: true,
|
|
39
|
+
});
|
|
40
|
+
if (p.isCancel(create) || !create) {
|
|
41
|
+
p.cancel("Setup cancelled.");
|
|
42
|
+
process.exit(0);
|
|
43
|
+
}
|
|
44
|
+
mkdirSync(expandedRoot, { recursive: true });
|
|
45
|
+
p.log.success(`Created ${expandedRoot}`);
|
|
46
|
+
}
|
|
47
|
+
// Step 3: HQ directory
|
|
48
|
+
const hqDir = await p.text({
|
|
49
|
+
message: "Where should the HQ session folder live?",
|
|
50
|
+
placeholder: "./hyper-hq",
|
|
51
|
+
defaultValue: "./hyper-hq",
|
|
52
|
+
validate(value) {
|
|
53
|
+
if (!value?.trim())
|
|
54
|
+
return "Please enter a path";
|
|
55
|
+
return undefined;
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
if (p.isCancel(hqDir)) {
|
|
59
|
+
p.cancel("Setup cancelled.");
|
|
60
|
+
process.exit(0);
|
|
61
|
+
}
|
|
62
|
+
// Resolve hq dir relative to projects root
|
|
63
|
+
const expandedHqDir = hqDir.startsWith("/") ? hqDir : resolve(expandedRoot, hqDir);
|
|
64
|
+
if (!existsSync(expandedHqDir)) {
|
|
65
|
+
mkdirSync(expandedHqDir, { recursive: true });
|
|
66
|
+
p.log.success(`Created HQ directory: ${expandedHqDir}`);
|
|
67
|
+
}
|
|
68
|
+
// Step 4: Workspace trust — auto-trust both HQ dir and projects root
|
|
69
|
+
for (const dir of [expandedHqDir, expandedRoot]) {
|
|
70
|
+
if (!isWorkspaceTrusted(dir)) {
|
|
71
|
+
trustWorkspace(dir);
|
|
72
|
+
p.log.success(`Trusted ${dir} for Claude Code.`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Step 5: Telegram
|
|
76
|
+
const useTelegram = await p.confirm({
|
|
77
|
+
message: "Do you want to enable Telegram integration?",
|
|
78
|
+
initialValue: false,
|
|
79
|
+
});
|
|
80
|
+
if (p.isCancel(useTelegram)) {
|
|
81
|
+
p.cancel("Setup cancelled.");
|
|
82
|
+
process.exit(0);
|
|
83
|
+
}
|
|
84
|
+
let hqBotToken = "";
|
|
85
|
+
if (useTelegram) {
|
|
86
|
+
p.note("1. Open Telegram and message @BotFather\n" +
|
|
87
|
+
"2. Send /newbot and follow the prompts\n" +
|
|
88
|
+
"3. Copy the token BotFather gives you", "Create a Telegram bot");
|
|
89
|
+
const token = await p.text({
|
|
90
|
+
message: "Paste your Telegram bot token:",
|
|
91
|
+
placeholder: "your-bot-token-from-botfather",
|
|
92
|
+
validate(value) {
|
|
93
|
+
if (!value?.trim())
|
|
94
|
+
return "Please enter a token";
|
|
95
|
+
if (!value?.includes(":"))
|
|
96
|
+
return "That doesn't look like a bot token (should contain a colon)";
|
|
97
|
+
return undefined;
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
if (p.isCancel(token)) {
|
|
101
|
+
p.cancel("Setup cancelled.");
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
hqBotToken = token;
|
|
105
|
+
}
|
|
106
|
+
// Build TOML config
|
|
107
|
+
const lines = [
|
|
108
|
+
"# Hyper HQ — Claude Code Command Center",
|
|
109
|
+
"",
|
|
110
|
+
`projects_root = "${projectsRoot}"`,
|
|
111
|
+
"",
|
|
112
|
+
"[hq]",
|
|
113
|
+
'name = "hyper-hq"',
|
|
114
|
+
`dir = "${hqDir}"`,
|
|
115
|
+
'spawn_mode = "same-dir"',
|
|
116
|
+
"capacity = 32",
|
|
117
|
+
"",
|
|
118
|
+
"[claude]",
|
|
119
|
+
'permission_mode = "default"',
|
|
120
|
+
"",
|
|
121
|
+
"[telegram]",
|
|
122
|
+
];
|
|
123
|
+
if (hqBotToken) {
|
|
124
|
+
lines.push(`hq_bot_token = "${hqBotToken}"`);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
lines.push("# Telegram is disabled. To enable later, add:");
|
|
128
|
+
lines.push('# hq_bot_token = "YOUR_BOT_TOKEN"');
|
|
129
|
+
}
|
|
130
|
+
lines.push("", "[telegram.project_bots]", "# Add dedicated bots for specific projects:", '# my-project = "BOT_TOKEN"', "", "# [projects.my-org]", '# type = "group" # Treat subfolders as separate projects', "");
|
|
131
|
+
const configContent = lines.join("\n");
|
|
132
|
+
// Write config
|
|
133
|
+
const configDir = dirname(CONFIG_PATH);
|
|
134
|
+
if (!existsSync(configDir)) {
|
|
135
|
+
mkdirSync(configDir, { recursive: true });
|
|
136
|
+
}
|
|
137
|
+
writeFileSync(CONFIG_PATH, configContent, { encoding: "utf-8", mode: 0o600 });
|
|
138
|
+
chmodSync(CONFIG_PATH, 0o600);
|
|
139
|
+
p.note(CONFIG_PATH, "Config saved to");
|
|
140
|
+
if (!useTelegram) {
|
|
141
|
+
p.log.info("Telegram is disabled. Sessions will use Remote Control only (claude.ai/code + mobile).");
|
|
142
|
+
p.log.info("You can enable Telegram later by adding a bot token to your config file.");
|
|
143
|
+
}
|
|
144
|
+
return loadConfig();
|
|
145
|
+
}
|
|
146
|
+
// Backwards compat — start.ts calls this
|
|
147
|
+
export const runSetupIfNeeded = () => runSetup(false);
|
|
148
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/config/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,19 +7,27 @@ export interface ClaudeCommandOpts {
|
|
|
7
7
|
channels?: string[];
|
|
8
8
|
/** Extra args passed through to `claude` verbatim */
|
|
9
9
|
extraArgs?: string[];
|
|
10
|
-
logFile: string;
|
|
11
10
|
}
|
|
12
11
|
/**
|
|
13
12
|
* Build the command to start an interactive Claude session.
|
|
14
13
|
*
|
|
15
|
-
*
|
|
16
|
-
* -
|
|
17
|
-
* - Remote control works (via /remote-control after launch)
|
|
18
|
-
* - Session resume works (via --resume)
|
|
19
|
-
* - Both channels and remote control coexist in the same session
|
|
14
|
+
* Architecture decision: we use `claude` (interactive mode) instead of
|
|
15
|
+
* `claude remote-control` (subcommand) because:
|
|
20
16
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
17
|
+
* - `claude remote-control` is a standalone server that accepts sessions
|
|
18
|
+
* from claude.ai/code, but it does NOT support --channels for Telegram.
|
|
19
|
+
* - `claude` (interactive) supports --channels AND the /remote-control
|
|
20
|
+
* slash command, giving us BOTH Telegram and web access in one session.
|
|
21
|
+
*
|
|
22
|
+
* Flow:
|
|
23
|
+
* 1. Start `claude --channels plugin:telegram@... --continue`
|
|
24
|
+
* 2. The CLAUDE.md instructs Claude to run `/remote-control <name>`
|
|
25
|
+
* on startup, which enables claude.ai/code access.
|
|
26
|
+
* 3. Result: one session with Telegram channels + web remote control.
|
|
27
|
+
*
|
|
28
|
+
* IMPORTANT: Do NOT pipe stdout (e.g. `| tee`). Claude interactive mode
|
|
29
|
+
* requires a TTY — piping strips it and the process dies immediately.
|
|
30
|
+
* Use tmux `pipe-pane` for logging instead (see tmux.createSession).
|
|
23
31
|
*/
|
|
24
32
|
export declare function buildClaudeCommand(opts: ClaudeCommandOpts): string;
|
|
25
33
|
//# sourceMappingURL=claude.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/services/claude.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/services/claude.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAQD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAqClE"}
|
package/dist/services/claude.js
CHANGED
|
@@ -6,14 +6,23 @@ function shellEscape(value) {
|
|
|
6
6
|
/**
|
|
7
7
|
* Build the command to start an interactive Claude session.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* -
|
|
11
|
-
* - Remote control works (via /remote-control after launch)
|
|
12
|
-
* - Session resume works (via --resume)
|
|
13
|
-
* - Both channels and remote control coexist in the same session
|
|
9
|
+
* Architecture decision: we use `claude` (interactive mode) instead of
|
|
10
|
+
* `claude remote-control` (subcommand) because:
|
|
14
11
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
12
|
+
* - `claude remote-control` is a standalone server that accepts sessions
|
|
13
|
+
* from claude.ai/code, but it does NOT support --channels for Telegram.
|
|
14
|
+
* - `claude` (interactive) supports --channels AND the /remote-control
|
|
15
|
+
* slash command, giving us BOTH Telegram and web access in one session.
|
|
16
|
+
*
|
|
17
|
+
* Flow:
|
|
18
|
+
* 1. Start `claude --channels plugin:telegram@... --continue`
|
|
19
|
+
* 2. The CLAUDE.md instructs Claude to run `/remote-control <name>`
|
|
20
|
+
* on startup, which enables claude.ai/code access.
|
|
21
|
+
* 3. Result: one session with Telegram channels + web remote control.
|
|
22
|
+
*
|
|
23
|
+
* IMPORTANT: Do NOT pipe stdout (e.g. `| tee`). Claude interactive mode
|
|
24
|
+
* requires a TTY — piping strips it and the process dies immediately.
|
|
25
|
+
* Use tmux `pipe-pane` for logging instead (see tmux.createSession).
|
|
17
26
|
*/
|
|
18
27
|
export function buildClaudeCommand(opts) {
|
|
19
28
|
const parts = [];
|
|
@@ -42,8 +51,6 @@ export function buildClaudeCommand(opts) {
|
|
|
42
51
|
if (opts.extraArgs && opts.extraArgs.length > 0) {
|
|
43
52
|
parts.push(...opts.extraArgs);
|
|
44
53
|
}
|
|
45
|
-
// Pipe to log file
|
|
46
|
-
parts.push(`2>&1 | tee -a '${shellEscape(opts.logFile)}'`);
|
|
47
54
|
return parts.join(" ");
|
|
48
55
|
}
|
|
49
56
|
//# sourceMappingURL=claude.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/services/claude.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/services/claude.ts"],"names":[],"mappings":"AAWA,wEAAwE;AACxE,SAAS,WAAW,CAAC,KAAa;IACjC,8DAA8D;IAC9D,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAuB;IACzD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,+EAA+E;IAC/E,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAE7C,qCAAqC;IACrC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAErB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,WAAW,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEjD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,qBAAqB,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,kCAAkC;IAClC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;IACF,CAAC;IAED,qCAAqC;IACrC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC"}
|
package/dist/services/tmux.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export declare function createSession(opts: {
|
|
|
11
11
|
name: string;
|
|
12
12
|
cwd: string;
|
|
13
13
|
command: string;
|
|
14
|
+
logFile?: string;
|
|
14
15
|
}): void;
|
|
15
16
|
/**
|
|
16
17
|
* Wait and verify a session's command is still running.
|
|
@@ -24,4 +25,8 @@ export declare function listSessions(prefix?: string): TmuxSession[];
|
|
|
24
25
|
export declare function listHqSessions(): TmuxSession[];
|
|
25
26
|
export declare function disableRemainOnExit(name: string): void;
|
|
26
27
|
export declare function attachSession(name: string): never;
|
|
28
|
+
/** Capture the full scrollback + visible content of a tmux pane */
|
|
29
|
+
export declare function capturePane(name: string): string | null;
|
|
30
|
+
/** Send keystrokes to a tmux pane (simulates typing + Enter) */
|
|
31
|
+
export declare function sendKeys(name: string, text: string): void;
|
|
27
32
|
//# sourceMappingURL=tmux.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux.d.ts","sourceRoot":"","sources":["../../src/services/tmux.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAWD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"tmux.d.ts","sourceRoot":"","sources":["../../src/services/tmux.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAWD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,IAAI,CAwBP;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,SAAS,GAAG,MAAM,CAkBhF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,YAAY,CAAC,MAAM,SAAU,GAAG,WAAW,EAAE,CAkB5D;AAED,kFAAkF;AAClF,wBAAgB,cAAc,IAAI,WAAW,EAAE,CAqB9C;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAGjD;AAED,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGvD;AAED,gEAAgE;AAChE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEzD"}
|
package/dist/services/tmux.js
CHANGED
|
@@ -33,6 +33,10 @@ export function createSession(opts) {
|
|
|
33
33
|
}
|
|
34
34
|
// Keep the pane alive after the command exits so we can detect failures
|
|
35
35
|
run(["set-option", "-t", opts.name, "remain-on-exit", "on"]);
|
|
36
|
+
// Use pipe-pane for logging — this preserves the TTY (unlike shell pipes)
|
|
37
|
+
if (opts.logFile) {
|
|
38
|
+
run(["pipe-pane", "-t", opts.name, "-o", `cat >> '${opts.logFile}'`]);
|
|
39
|
+
}
|
|
36
40
|
}
|
|
37
41
|
/**
|
|
38
42
|
* Wait and verify a session's command is still running.
|
|
@@ -106,4 +110,13 @@ export function attachSession(name) {
|
|
|
106
110
|
execFileSync("tmux", ["attach", "-t", name], { stdio: "inherit" });
|
|
107
111
|
process.exit(0);
|
|
108
112
|
}
|
|
113
|
+
/** Capture the full scrollback + visible content of a tmux pane */
|
|
114
|
+
export function capturePane(name) {
|
|
115
|
+
const result = run(["capture-pane", "-t", name, "-p", "-S", "-"]);
|
|
116
|
+
return result.ok ? result.stdout : null;
|
|
117
|
+
}
|
|
118
|
+
/** Send keystrokes to a tmux pane (simulates typing + Enter) */
|
|
119
|
+
export function sendKeys(name, text) {
|
|
120
|
+
run(["send-keys", "-t", name, text, "Enter"]);
|
|
121
|
+
}
|
|
109
122
|
//# sourceMappingURL=tmux.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../src/services/tmux.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAS7D,2EAA2E;AAC3E,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,GAAG,CAAC,IAAc;IAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9D,OAAO;QACN,EAAE,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QACvB,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACpC,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;KACpC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACzC,OAAO,GAAG,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"tmux.js","sourceRoot":"","sources":["../../src/services/tmux.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAmBpD,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,QAAQ,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAmBpD,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,QAAQ,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CAChB,GAAG,MAAM,CAuCT"}
|
package/dist/utils/banner.js
CHANGED
|
@@ -41,6 +41,7 @@ export function renderBanner(opts) {
|
|
|
41
41
|
{ key: "Connect", value: connectValue },
|
|
42
42
|
]);
|
|
43
43
|
const commands = keyValue([
|
|
44
|
+
{ key: "hyper hq web", value: "Open HQ in claude.ai/code" },
|
|
44
45
|
{ key: "hyper hq list", value: "List projects" },
|
|
45
46
|
{ key: "hyper hq spawn <name>", value: "Start project session" },
|
|
46
47
|
{ key: "hyper hq status", value: "Show running sessions" },
|
package/dist/utils/banner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/utils/banner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a directory (or any ancestor) is trusted by Claude Code.
|
|
3
|
+
* Trust is stored in ~/.claude.json under projects[path].hasTrustDialogAccepted.
|
|
4
|
+
*/
|
|
5
|
+
export declare function isWorkspaceTrusted(dir: string): boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Trust a directory for Claude Code by setting hasTrustDialogAccepted in ~/.claude.json.
|
|
8
|
+
*/
|
|
9
|
+
export declare function trustWorkspace(dir: string): void;
|
|
10
|
+
//# sourceMappingURL=trust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../../src/utils/trust.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAUvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAMhD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, resolve } from "node:path";
|
|
4
|
+
const CLAUDE_JSON_PATH = resolve(homedir(), ".claude.json");
|
|
5
|
+
function readClaudeJson() {
|
|
6
|
+
if (!existsSync(CLAUDE_JSON_PATH))
|
|
7
|
+
return {};
|
|
8
|
+
return JSON.parse(readFileSync(CLAUDE_JSON_PATH, "utf-8"));
|
|
9
|
+
}
|
|
10
|
+
function writeClaudeJson(data) {
|
|
11
|
+
writeFileSync(CLAUDE_JSON_PATH, JSON.stringify(data, null, 2), "utf-8");
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Check if a directory (or any ancestor) is trusted by Claude Code.
|
|
15
|
+
* Trust is stored in ~/.claude.json under projects[path].hasTrustDialogAccepted.
|
|
16
|
+
*/
|
|
17
|
+
export function isWorkspaceTrusted(dir) {
|
|
18
|
+
const data = readClaudeJson();
|
|
19
|
+
if (!data.projects)
|
|
20
|
+
return false;
|
|
21
|
+
let current = dir;
|
|
22
|
+
while (current !== "/") {
|
|
23
|
+
if (data.projects[current]?.hasTrustDialogAccepted === true)
|
|
24
|
+
return true;
|
|
25
|
+
current = dirname(current);
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Trust a directory for Claude Code by setting hasTrustDialogAccepted in ~/.claude.json.
|
|
31
|
+
*/
|
|
32
|
+
export function trustWorkspace(dir) {
|
|
33
|
+
const data = readClaudeJson();
|
|
34
|
+
if (!data.projects)
|
|
35
|
+
data.projects = {};
|
|
36
|
+
if (!data.projects[dir])
|
|
37
|
+
data.projects[dir] = {};
|
|
38
|
+
data.projects[dir].hasTrustDialogAccepted = true;
|
|
39
|
+
writeClaudeJson(data);
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=trust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/utils/trust.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AAO5D,SAAS,cAAc;IACtB,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,eAAe,CAAC,IAAgB;IACxC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC7C,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAEjC,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,OAAO,OAAO,KAAK,GAAG,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,sBAAsB,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACzE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;IAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,sBAAsB,GAAG,IAAI,CAAC;IACjD,eAAe,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC"}
|
package/oclif.manifest.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"aliases": [],
|
|
5
5
|
"args": {
|
|
6
6
|
"session": {
|
|
7
|
-
"description": "Session name or project name (default:
|
|
7
|
+
"description": "Session name or project name (default: HQ session from config)",
|
|
8
8
|
"name": "session",
|
|
9
9
|
"required": false
|
|
10
10
|
}
|
|
@@ -291,7 +291,7 @@
|
|
|
291
291
|
"type": "boolean"
|
|
292
292
|
},
|
|
293
293
|
"yolo": {
|
|
294
|
-
"description": "Skip
|
|
294
|
+
"description": "Skip permission checks — HQ runs autonomously on startup",
|
|
295
295
|
"name": "yolo",
|
|
296
296
|
"allowNo": false,
|
|
297
297
|
"type": "boolean"
|
|
@@ -407,7 +407,7 @@
|
|
|
407
407
|
"aliases": [],
|
|
408
408
|
"args": {
|
|
409
409
|
"session": {
|
|
410
|
-
"description": "Session name or project name (default:
|
|
410
|
+
"description": "Session name or project name (default: HQ session from config)",
|
|
411
411
|
"name": "session",
|
|
412
412
|
"required": false
|
|
413
413
|
}
|
|
@@ -442,6 +442,38 @@
|
|
|
442
442
|
"stop.js"
|
|
443
443
|
]
|
|
444
444
|
},
|
|
445
|
+
"hq:web": {
|
|
446
|
+
"aliases": [],
|
|
447
|
+
"args": {},
|
|
448
|
+
"description": "Open the HQ session in claude.ai/code (requires /remote-control to be active)",
|
|
449
|
+
"examples": [
|
|
450
|
+
"<%= config.bin %> hq web"
|
|
451
|
+
],
|
|
452
|
+
"flags": {
|
|
453
|
+
"debug": {
|
|
454
|
+
"char": "d",
|
|
455
|
+
"description": "Enable debug output",
|
|
456
|
+
"name": "debug",
|
|
457
|
+
"allowNo": false,
|
|
458
|
+
"type": "boolean"
|
|
459
|
+
}
|
|
460
|
+
},
|
|
461
|
+
"hasDynamicHelp": false,
|
|
462
|
+
"hiddenAliases": [],
|
|
463
|
+
"id": "hq:web",
|
|
464
|
+
"pluginAlias": "@hypercli/hq",
|
|
465
|
+
"pluginName": "@hypercli/hq",
|
|
466
|
+
"pluginType": "core",
|
|
467
|
+
"strict": true,
|
|
468
|
+
"enableJsonFlag": false,
|
|
469
|
+
"isESM": true,
|
|
470
|
+
"relativePath": [
|
|
471
|
+
"dist",
|
|
472
|
+
"commands",
|
|
473
|
+
"hq",
|
|
474
|
+
"web.js"
|
|
475
|
+
]
|
|
476
|
+
},
|
|
445
477
|
"hq:configure:telegram": {
|
|
446
478
|
"aliases": [],
|
|
447
479
|
"args": {},
|
|
@@ -476,5 +508,5 @@
|
|
|
476
508
|
]
|
|
477
509
|
}
|
|
478
510
|
},
|
|
479
|
-
"version": "0.
|
|
511
|
+
"version": "0.3.0"
|
|
480
512
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hypercli/hq",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Claude Code session management for HyperDev — always-on control plane",
|
|
6
6
|
"keywords": [
|
|
@@ -74,9 +74,9 @@
|
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
76
|
"@clack/prompts": "^1.1.0",
|
|
77
|
-
"@hypercli/ui": "^0.
|
|
77
|
+
"@hypercli/ui": "^0.3.0",
|
|
78
78
|
"@oclif/core": "^4",
|
|
79
|
-
"create-hyper-hq": "^0.
|
|
79
|
+
"create-hyper-hq": "^0.3.0",
|
|
80
80
|
"smol-toml": "^1"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|