@staff0rd/assist 0.433.5 → 0.434.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/sessions/web/bundle.js +409 -409
- package/dist/index.js +151 -106
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Command } from "commander";
|
|
|
6
6
|
// package.json
|
|
7
7
|
var package_default = {
|
|
8
8
|
name: "@staff0rd/assist",
|
|
9
|
-
version: "0.
|
|
9
|
+
version: "0.434.0",
|
|
10
10
|
type: "module",
|
|
11
11
|
main: "dist/index.js",
|
|
12
12
|
bin: {
|
|
@@ -4198,7 +4198,7 @@ ${failed2.length} script(s) failed:`);
|
|
|
4198
4198
|
}
|
|
4199
4199
|
}
|
|
4200
4200
|
function runEntry(entry) {
|
|
4201
|
-
return new Promise((
|
|
4201
|
+
return new Promise((resolve20) => {
|
|
4202
4202
|
const startTime = Date.now();
|
|
4203
4203
|
const child = spawnCommand(
|
|
4204
4204
|
entry.fullCommand,
|
|
@@ -4210,7 +4210,7 @@ function runEntry(entry) {
|
|
|
4210
4210
|
child.on("close", (code) => {
|
|
4211
4211
|
const exitCode = code ?? 1;
|
|
4212
4212
|
flushIfFailed(exitCode, chunks);
|
|
4213
|
-
|
|
4213
|
+
resolve20({
|
|
4214
4214
|
script: entry.name,
|
|
4215
4215
|
code: exitCode,
|
|
4216
4216
|
durationMs: Date.now() - startTime
|
|
@@ -5357,8 +5357,8 @@ function spawnInherit(command, args, options2 = {}) {
|
|
|
5357
5357
|
env,
|
|
5358
5358
|
cwd: options2.cwd
|
|
5359
5359
|
});
|
|
5360
|
-
const done2 = new Promise((
|
|
5361
|
-
child.on("close", (code) =>
|
|
5360
|
+
const done2 = new Promise((resolve20, reject) => {
|
|
5361
|
+
child.on("close", (code) => resolve20(code ?? 0));
|
|
5362
5362
|
child.on("error", reject);
|
|
5363
5363
|
});
|
|
5364
5364
|
return { child, done: done2 };
|
|
@@ -6431,9 +6431,9 @@ Failed to launch Claude for ${context}: ${message2}`)
|
|
|
6431
6431
|
// src/commands/sessions/daemon/connectToDaemon.ts
|
|
6432
6432
|
import * as net from "net";
|
|
6433
6433
|
function connectToDaemon() {
|
|
6434
|
-
return new Promise((
|
|
6434
|
+
return new Promise((resolve20, reject) => {
|
|
6435
6435
|
const socket = net.connect(daemonPaths.socket);
|
|
6436
|
-
socket.once("connect", () =>
|
|
6436
|
+
socket.once("connect", () => resolve20(socket));
|
|
6437
6437
|
socket.once("error", reject);
|
|
6438
6438
|
});
|
|
6439
6439
|
}
|
|
@@ -6449,7 +6449,7 @@ async function isDaemonRunning() {
|
|
|
6449
6449
|
// src/commands/sessions/daemon/sendToDaemon.ts
|
|
6450
6450
|
var WRITE_TIMEOUT_MS = 500;
|
|
6451
6451
|
function sendToDaemon(message2) {
|
|
6452
|
-
return new Promise((
|
|
6452
|
+
return new Promise((resolve20, reject) => {
|
|
6453
6453
|
connectToDaemon().then((socket) => {
|
|
6454
6454
|
const timer = setTimeout(() => {
|
|
6455
6455
|
socket.destroy();
|
|
@@ -6463,7 +6463,7 @@ function sendToDaemon(message2) {
|
|
|
6463
6463
|
`, () => {
|
|
6464
6464
|
clearTimeout(timer);
|
|
6465
6465
|
socket.end();
|
|
6466
|
-
|
|
6466
|
+
resolve20();
|
|
6467
6467
|
});
|
|
6468
6468
|
}, reject);
|
|
6469
6469
|
});
|
|
@@ -6486,7 +6486,7 @@ function readSocketLines(socket, onLine) {
|
|
|
6486
6486
|
// src/commands/sessions/daemon/sendToDaemonAwaitAck.ts
|
|
6487
6487
|
var ACK_TIMEOUT_MS = 1e3;
|
|
6488
6488
|
function sendToDaemonAwaitAck(message2) {
|
|
6489
|
-
return new Promise((
|
|
6489
|
+
return new Promise((resolve20, reject) => {
|
|
6490
6490
|
connectToDaemon().then((socket) => {
|
|
6491
6491
|
let settled = false;
|
|
6492
6492
|
const finish = (error) => {
|
|
@@ -6495,7 +6495,7 @@ function sendToDaemonAwaitAck(message2) {
|
|
|
6495
6495
|
clearTimeout(timer);
|
|
6496
6496
|
socket.destroy();
|
|
6497
6497
|
if (error) reject(error);
|
|
6498
|
-
else
|
|
6498
|
+
else resolve20();
|
|
6499
6499
|
};
|
|
6500
6500
|
const timer = setTimeout(
|
|
6501
6501
|
() => finish(new Error("timed out awaiting daemon ack")),
|
|
@@ -6569,7 +6569,7 @@ async function deliverReliably(sessionId, status3, payload) {
|
|
|
6569
6569
|
}
|
|
6570
6570
|
}
|
|
6571
6571
|
function sleep(ms) {
|
|
6572
|
-
return new Promise((
|
|
6572
|
+
return new Promise((resolve20) => setTimeout(resolve20, ms));
|
|
6573
6573
|
}
|
|
6574
6574
|
function describeError(error) {
|
|
6575
6575
|
return error instanceof Error ? error.message : String(error);
|
|
@@ -8065,7 +8065,7 @@ function spawnDaemon(reason) {
|
|
|
8065
8065
|
child.unref();
|
|
8066
8066
|
}
|
|
8067
8067
|
function delay(ms) {
|
|
8068
|
-
return new Promise((
|
|
8068
|
+
return new Promise((resolve20) => setTimeout(resolve20, ms));
|
|
8069
8069
|
}
|
|
8070
8070
|
|
|
8071
8071
|
// src/shared/createBundleHandler.ts
|
|
@@ -8333,12 +8333,12 @@ async function loadVisibleItems(req) {
|
|
|
8333
8333
|
|
|
8334
8334
|
// src/commands/backlog/web/parseStatusBody.ts
|
|
8335
8335
|
function readBody(req) {
|
|
8336
|
-
return new Promise((
|
|
8336
|
+
return new Promise((resolve20, reject) => {
|
|
8337
8337
|
let body = "";
|
|
8338
8338
|
req.on("data", (chunk) => {
|
|
8339
8339
|
body += chunk.toString();
|
|
8340
8340
|
});
|
|
8341
|
-
req.on("end", () =>
|
|
8341
|
+
req.on("end", () => resolve20(body));
|
|
8342
8342
|
req.on("error", reject);
|
|
8343
8343
|
});
|
|
8344
8344
|
}
|
|
@@ -8620,6 +8620,64 @@ async function diff2(req, res) {
|
|
|
8620
8620
|
}
|
|
8621
8621
|
}
|
|
8622
8622
|
|
|
8623
|
+
// src/commands/sessions/web/fileContent.ts
|
|
8624
|
+
import { readFile, stat as stat2 } from "fs/promises";
|
|
8625
|
+
import { isAbsolute, relative as relative2, resolve as resolve9 } from "path";
|
|
8626
|
+
|
|
8627
|
+
// src/commands/sessions/web/windowsCwdToWslPath.ts
|
|
8628
|
+
function windowsCwdToWslPath(cwd) {
|
|
8629
|
+
const match = /^([A-Za-z]):[\\/](.*)$/.exec(cwd);
|
|
8630
|
+
if (!match) return cwd;
|
|
8631
|
+
const drive = match[1].toLowerCase();
|
|
8632
|
+
const rest = match[2].replace(/\\/g, "/");
|
|
8633
|
+
return `/mnt/${drive}/${rest}`;
|
|
8634
|
+
}
|
|
8635
|
+
|
|
8636
|
+
// src/commands/sessions/web/toGitCwd.ts
|
|
8637
|
+
function toGitCwd(cwd) {
|
|
8638
|
+
return detectPlatform() === "wsl" ? windowsCwdToWslPath(cwd) : cwd;
|
|
8639
|
+
}
|
|
8640
|
+
|
|
8641
|
+
// src/commands/sessions/web/fileContent.ts
|
|
8642
|
+
var MAX_FILE_BYTES = 2 * 1024 * 1024;
|
|
8643
|
+
function resolveWithinCwd(cwd, path71) {
|
|
8644
|
+
const root = resolve9(toGitCwd(cwd));
|
|
8645
|
+
const target = resolve9(root, path71);
|
|
8646
|
+
const rel = relative2(root, target);
|
|
8647
|
+
if (rel === "" || rel.startsWith("..") || isAbsolute(rel)) return null;
|
|
8648
|
+
return target;
|
|
8649
|
+
}
|
|
8650
|
+
async function fileContent(req, res) {
|
|
8651
|
+
const cwd = getCwdParam(req, res);
|
|
8652
|
+
if (!cwd) return;
|
|
8653
|
+
const path71 = new URL(req.url ?? "/", "http://localhost").searchParams.get(
|
|
8654
|
+
"path"
|
|
8655
|
+
);
|
|
8656
|
+
if (!path71) {
|
|
8657
|
+
respondJson(res, 400, { error: "Missing path" });
|
|
8658
|
+
return;
|
|
8659
|
+
}
|
|
8660
|
+
const target = resolveWithinCwd(cwd, path71);
|
|
8661
|
+
if (!target) {
|
|
8662
|
+
respondJson(res, 400, { error: "Path outside cwd" });
|
|
8663
|
+
return;
|
|
8664
|
+
}
|
|
8665
|
+
try {
|
|
8666
|
+
const info = await stat2(target);
|
|
8667
|
+
if (!info.isFile()) {
|
|
8668
|
+
respondJson(res, 404, { error: "File not found" });
|
|
8669
|
+
return;
|
|
8670
|
+
}
|
|
8671
|
+
if (info.size > MAX_FILE_BYTES) {
|
|
8672
|
+
respondJson(res, 413, { error: "File too large" });
|
|
8673
|
+
return;
|
|
8674
|
+
}
|
|
8675
|
+
respondJson(res, 200, { content: await readFile(target, "utf8") });
|
|
8676
|
+
} catch {
|
|
8677
|
+
respondJson(res, 404, { error: "File not found" });
|
|
8678
|
+
}
|
|
8679
|
+
}
|
|
8680
|
+
|
|
8623
8681
|
// src/shared/db/listBackups.ts
|
|
8624
8682
|
import { desc } from "drizzle-orm";
|
|
8625
8683
|
async function listBackups(db) {
|
|
@@ -8663,20 +8721,6 @@ function getHtml() {
|
|
|
8663
8721
|
</html>`;
|
|
8664
8722
|
}
|
|
8665
8723
|
|
|
8666
|
-
// src/commands/sessions/web/windowsCwdToWslPath.ts
|
|
8667
|
-
function windowsCwdToWslPath(cwd) {
|
|
8668
|
-
const match = /^([A-Za-z]):[\\/](.*)$/.exec(cwd);
|
|
8669
|
-
if (!match) return cwd;
|
|
8670
|
-
const drive = match[1].toLowerCase();
|
|
8671
|
-
const rest = match[2].replace(/\\/g, "/");
|
|
8672
|
-
return `/mnt/${drive}/${rest}`;
|
|
8673
|
-
}
|
|
8674
|
-
|
|
8675
|
-
// src/commands/sessions/web/toGitCwd.ts
|
|
8676
|
-
function toGitCwd(cwd) {
|
|
8677
|
-
return detectPlatform() === "wsl" ? windowsCwdToWslPath(cwd) : cwd;
|
|
8678
|
-
}
|
|
8679
|
-
|
|
8680
8724
|
// src/commands/sessions/web/handleServerRuns.ts
|
|
8681
8725
|
function getServerRuns(rawCwd) {
|
|
8682
8726
|
try {
|
|
@@ -9242,17 +9286,17 @@ async function stopDaemon() {
|
|
|
9242
9286
|
}
|
|
9243
9287
|
}
|
|
9244
9288
|
function closedBeforeTimeout(socket) {
|
|
9245
|
-
return new Promise((
|
|
9289
|
+
return new Promise((resolve20) => {
|
|
9246
9290
|
const timer = setTimeout(() => {
|
|
9247
9291
|
socket.destroy();
|
|
9248
|
-
|
|
9292
|
+
resolve20(false);
|
|
9249
9293
|
}, STOP_TIMEOUT_MS);
|
|
9250
9294
|
socket.resume();
|
|
9251
9295
|
socket.on("error", () => {
|
|
9252
9296
|
});
|
|
9253
9297
|
socket.once("close", () => {
|
|
9254
9298
|
clearTimeout(timer);
|
|
9255
|
-
|
|
9299
|
+
resolve20(true);
|
|
9256
9300
|
});
|
|
9257
9301
|
});
|
|
9258
9302
|
}
|
|
@@ -9303,8 +9347,8 @@ async function restartWeb(req, res, deps2 = {}) {
|
|
|
9303
9347
|
respondJson(res, 400, { error: "Invalid target" });
|
|
9304
9348
|
return;
|
|
9305
9349
|
}
|
|
9306
|
-
await new Promise((
|
|
9307
|
-
res.once("finish",
|
|
9350
|
+
await new Promise((resolve20) => {
|
|
9351
|
+
res.once("finish", resolve20);
|
|
9308
9352
|
respondJson(res, 200, { ok: true });
|
|
9309
9353
|
});
|
|
9310
9354
|
if (target === "daemon" || target === "both") {
|
|
@@ -9488,6 +9532,7 @@ var routes2 = {
|
|
|
9488
9532
|
"GET /api/github-url": githubUrl,
|
|
9489
9533
|
"GET /api/git-status": gitStatus,
|
|
9490
9534
|
"GET /api/diff": diff2,
|
|
9535
|
+
"GET /api/file": fileContent,
|
|
9491
9536
|
"GET /api/jira-site": jiraSite,
|
|
9492
9537
|
"GET /api/harness": harnessCapabilities,
|
|
9493
9538
|
"GET /api/pr-status": prStatus,
|
|
@@ -10275,7 +10320,7 @@ function registerExportCommand(cmd) {
|
|
|
10275
10320
|
}
|
|
10276
10321
|
|
|
10277
10322
|
// src/commands/backlog/import/index.ts
|
|
10278
|
-
import { readFile } from "fs/promises";
|
|
10323
|
+
import { readFile as readFile2 } from "fs/promises";
|
|
10279
10324
|
import chalk71 from "chalk";
|
|
10280
10325
|
|
|
10281
10326
|
// src/commands/backlog/dump/countCopyRows.ts
|
|
@@ -10452,7 +10497,7 @@ async function restore(client, parsed) {
|
|
|
10452
10497
|
|
|
10453
10498
|
// src/commands/backlog/import/index.ts
|
|
10454
10499
|
async function importBacklog(file, options2 = {}) {
|
|
10455
|
-
const raw = file ? await
|
|
10500
|
+
const raw = file ? await readFile2(file) : await readStdinBuffer();
|
|
10456
10501
|
const parsed = parseDump(raw);
|
|
10457
10502
|
validateDump(parsed);
|
|
10458
10503
|
const { tables } = parsed.header;
|
|
@@ -12396,7 +12441,7 @@ function findBuiltinDenyRaw(rawCommand) {
|
|
|
12396
12441
|
}
|
|
12397
12442
|
|
|
12398
12443
|
// src/shared/isApprovedRead.ts
|
|
12399
|
-
import { resolve as
|
|
12444
|
+
import { resolve as resolve11, sep } from "path";
|
|
12400
12445
|
|
|
12401
12446
|
// src/shared/tokenize.ts
|
|
12402
12447
|
function tokenize(command) {
|
|
@@ -12478,7 +12523,7 @@ function extractGraphqlQuery(args) {
|
|
|
12478
12523
|
|
|
12479
12524
|
// src/shared/loadCliReads.ts
|
|
12480
12525
|
import { existsSync as existsSync29, readFileSync as readFileSync23, writeFileSync as writeFileSync22 } from "fs";
|
|
12481
|
-
import { dirname as dirname21, resolve as
|
|
12526
|
+
import { dirname as dirname21, resolve as resolve10 } from "path";
|
|
12482
12527
|
import { fileURLToPath as fileURLToPath5 } from "url";
|
|
12483
12528
|
var __filename3 = fileURLToPath5(import.meta.url);
|
|
12484
12529
|
var __dirname4 = dirname21(__filename3);
|
|
@@ -12493,13 +12538,13 @@ var cachedReads;
|
|
|
12493
12538
|
var cachedWrites;
|
|
12494
12539
|
function getCliReadsLines() {
|
|
12495
12540
|
if (!cachedReads) {
|
|
12496
|
-
cachedReads = readLines(
|
|
12541
|
+
cachedReads = readLines(resolve10(packageRoot(), "allowed.cli-reads"));
|
|
12497
12542
|
}
|
|
12498
12543
|
return cachedReads;
|
|
12499
12544
|
}
|
|
12500
12545
|
function getCliWritesLines() {
|
|
12501
12546
|
if (!cachedWrites) {
|
|
12502
|
-
cachedWrites = readLines(
|
|
12547
|
+
cachedWrites = readLines(resolve10(packageRoot(), "allowed.cli-writes"));
|
|
12503
12548
|
}
|
|
12504
12549
|
return cachedWrites;
|
|
12505
12550
|
}
|
|
@@ -12508,7 +12553,7 @@ function loadCliReads() {
|
|
|
12508
12553
|
}
|
|
12509
12554
|
function saveCliReads(commands) {
|
|
12510
12555
|
writeFileSync22(
|
|
12511
|
-
|
|
12556
|
+
resolve10(packageRoot(), "allowed.cli-reads"),
|
|
12512
12557
|
`${commands.join("\n")}
|
|
12513
12558
|
`
|
|
12514
12559
|
);
|
|
@@ -12630,19 +12675,19 @@ function isCdToCwd(command) {
|
|
|
12630
12675
|
const parts = command.split(/\s+/);
|
|
12631
12676
|
if (parts[0] !== "cd" || parts.length > 2) return false;
|
|
12632
12677
|
if (parts.length === 1) return false;
|
|
12633
|
-
const resolved =
|
|
12634
|
-
return resolved ===
|
|
12678
|
+
const resolved = resolve11(normalizeMsysPath(parts[1]));
|
|
12679
|
+
return resolved === resolve11(process.cwd());
|
|
12635
12680
|
}
|
|
12636
12681
|
function isCdToReadAllowedDir(command) {
|
|
12637
12682
|
const parts = command.split(/\s+/);
|
|
12638
12683
|
if (parts[0] !== "cd" || parts.length !== 2) return void 0;
|
|
12639
|
-
const target =
|
|
12684
|
+
const target = resolve11(normalizeMsysPath(parts[1]));
|
|
12640
12685
|
for (const entry of readSettingsPerms("allow")) {
|
|
12641
12686
|
const m = entry.match(READ_RE);
|
|
12642
12687
|
if (!m) continue;
|
|
12643
12688
|
const base = globBaseDir(m[1]);
|
|
12644
12689
|
if (!base) continue;
|
|
12645
|
-
const resolved =
|
|
12690
|
+
const resolved = resolve11(normalizeMsysPath(base));
|
|
12646
12691
|
if (target === resolved || target.startsWith(resolved + sep)) {
|
|
12647
12692
|
return `cd to Read-allowed directory: ${entry}`;
|
|
12648
12693
|
}
|
|
@@ -12959,12 +13004,12 @@ function hasSubcommands(helpText) {
|
|
|
12959
13004
|
// src/commands/permitCliReads/runHelp.ts
|
|
12960
13005
|
import { exec as exec2 } from "child_process";
|
|
12961
13006
|
function runHelp(args) {
|
|
12962
|
-
return new Promise((
|
|
13007
|
+
return new Promise((resolve20) => {
|
|
12963
13008
|
exec2(
|
|
12964
13009
|
`${args.join(" ")} --help`,
|
|
12965
13010
|
{ encoding: "utf8", timeout: 3e4 },
|
|
12966
13011
|
(_err, stdout, stderr) => {
|
|
12967
|
-
|
|
13012
|
+
resolve20(stdout || stderr || "");
|
|
12968
13013
|
}
|
|
12969
13014
|
);
|
|
12970
13015
|
});
|
|
@@ -15285,10 +15330,10 @@ function findSlnFiles(dir, maxDepth, depth = 0) {
|
|
|
15285
15330
|
continue;
|
|
15286
15331
|
const full = path32.join(dir, entry);
|
|
15287
15332
|
try {
|
|
15288
|
-
const
|
|
15289
|
-
if (
|
|
15333
|
+
const stat3 = statSync5(full);
|
|
15334
|
+
if (stat3.isFile() && entry.endsWith(".sln")) {
|
|
15290
15335
|
results.push(full);
|
|
15291
|
-
} else if (
|
|
15336
|
+
} else if (stat3.isDirectory()) {
|
|
15292
15337
|
results.push(...findSlnFiles(full, maxDepth, depth + 1));
|
|
15293
15338
|
}
|
|
15294
15339
|
} catch {
|
|
@@ -16753,12 +16798,12 @@ function registerList(program2) {
|
|
|
16753
16798
|
|
|
16754
16799
|
// src/commands/mermaid/index.ts
|
|
16755
16800
|
import { mkdirSync as mkdirSync16, readdirSync as readdirSync9 } from "fs";
|
|
16756
|
-
import { resolve as
|
|
16801
|
+
import { resolve as resolve13 } from "path";
|
|
16757
16802
|
import chalk156 from "chalk";
|
|
16758
16803
|
|
|
16759
16804
|
// src/commands/mermaid/exportFile.ts
|
|
16760
16805
|
import { readFileSync as readFileSync36, writeFileSync as writeFileSync31 } from "fs";
|
|
16761
|
-
import { basename as basename11, extname as extname2, resolve as
|
|
16806
|
+
import { basename as basename11, extname as extname2, resolve as resolve12 } from "path";
|
|
16762
16807
|
import chalk155 from "chalk";
|
|
16763
16808
|
|
|
16764
16809
|
// src/commands/mermaid/renderBlock.ts
|
|
@@ -16806,7 +16851,7 @@ async function exportFile(file, outDir, krokiUrl, onlyIndex) {
|
|
|
16806
16851
|
for (const [i, source] of blocks.entries()) {
|
|
16807
16852
|
const idx = i + 1;
|
|
16808
16853
|
if (onlyIndex !== void 0 && idx !== onlyIndex) continue;
|
|
16809
|
-
const outPath =
|
|
16854
|
+
const outPath = resolve12(outDir, `${stem}-${idx}.svg`);
|
|
16810
16855
|
const svg = await renderBlock(krokiUrl, source);
|
|
16811
16856
|
writeFileSync31(outPath, svg, "utf8");
|
|
16812
16857
|
console.log(chalk155.green(` \u2192 ${outPath}`));
|
|
@@ -16820,7 +16865,7 @@ function extractMermaidBlocks(markdown) {
|
|
|
16820
16865
|
// src/commands/mermaid/index.ts
|
|
16821
16866
|
async function mermaidExport(file, options2 = {}) {
|
|
16822
16867
|
const { mermaid } = loadConfig();
|
|
16823
|
-
const outDir =
|
|
16868
|
+
const outDir = resolve13(process.cwd(), options2.out ?? ".");
|
|
16824
16869
|
mkdirSync16(outDir, { recursive: true });
|
|
16825
16870
|
if (options2.index !== void 0) {
|
|
16826
16871
|
if (!Number.isInteger(options2.index) || options2.index < 1) {
|
|
@@ -16945,7 +16990,7 @@ function createNetcapHandler(options2) {
|
|
|
16945
16990
|
}
|
|
16946
16991
|
|
|
16947
16992
|
// src/commands/netcap/prepareExtensionForLoad.ts
|
|
16948
|
-
import { cp, readFile as
|
|
16993
|
+
import { cp, readFile as readFile3, writeFile as writeFile3 } from "fs/promises";
|
|
16949
16994
|
import { networkInterfaces } from "os";
|
|
16950
16995
|
import { join as join47 } from "path";
|
|
16951
16996
|
import chalk157 from "chalk";
|
|
@@ -16971,7 +17016,7 @@ function lanIPv4() {
|
|
|
16971
17016
|
}
|
|
16972
17017
|
async function configureBackground(dir, host, port, filter) {
|
|
16973
17018
|
const file = join47(dir, "background.js");
|
|
16974
|
-
const source = await
|
|
17019
|
+
const source = await readFile3(file, "utf8");
|
|
16975
17020
|
await writeFile3(
|
|
16976
17021
|
file,
|
|
16977
17022
|
source.replace(
|
|
@@ -17010,7 +17055,7 @@ async function prepareExtensionForLoad(port, filter = "") {
|
|
|
17010
17055
|
}
|
|
17011
17056
|
|
|
17012
17057
|
// src/commands/netcap/resolveNetcapOutPath.ts
|
|
17013
|
-
import { isAbsolute, join as join49, resolve as
|
|
17058
|
+
import { isAbsolute as isAbsolute2, join as join49, resolve as resolve14 } from "path";
|
|
17014
17059
|
|
|
17015
17060
|
// src/commands/netcap/defaultCapturePath.ts
|
|
17016
17061
|
import { homedir as homedir19 } from "os";
|
|
@@ -17022,7 +17067,7 @@ function defaultCapturePath() {
|
|
|
17022
17067
|
// src/commands/netcap/resolveNetcapOutPath.ts
|
|
17023
17068
|
function resolveNetcapOutPath(out) {
|
|
17024
17069
|
if (!out) return defaultCapturePath();
|
|
17025
|
-
const dir =
|
|
17070
|
+
const dir = isAbsolute2(out) ? out : resolve14(process.cwd(), out);
|
|
17026
17071
|
return join49(dir, "capture.jsonl");
|
|
17027
17072
|
}
|
|
17028
17073
|
|
|
@@ -17113,25 +17158,25 @@ function isVisibleText(t) {
|
|
|
17113
17158
|
return /[a-zA-Z]{3,}/.test(t);
|
|
17114
17159
|
}
|
|
17115
17160
|
var isHashtag = (t) => /^#[A-Za-z0-9_]+$/.test(t);
|
|
17116
|
-
function collectRscText(v,
|
|
17161
|
+
function collectRscText(v, resolve20, sink2, seen) {
|
|
17117
17162
|
if (v == null) return;
|
|
17118
17163
|
if (typeof v === "string") {
|
|
17119
17164
|
if (isRscRef(v)) {
|
|
17120
17165
|
if (!seen.has(v)) {
|
|
17121
17166
|
seen.add(v);
|
|
17122
|
-
collectRscText(
|
|
17167
|
+
collectRscText(resolve20(v), resolve20, sink2, seen);
|
|
17123
17168
|
}
|
|
17124
17169
|
} else if (isHashtag(v)) sink2.hashtags.push(v);
|
|
17125
17170
|
else if (isVisibleText(v)) sink2.text.push(v);
|
|
17126
17171
|
return;
|
|
17127
17172
|
}
|
|
17128
17173
|
if (Array.isArray(v)) {
|
|
17129
|
-
for (const x of v) collectRscText(x,
|
|
17174
|
+
for (const x of v) collectRscText(x, resolve20, sink2, seen);
|
|
17130
17175
|
return;
|
|
17131
17176
|
}
|
|
17132
17177
|
if (typeof v === "object") {
|
|
17133
17178
|
for (const val of Object.values(v)) {
|
|
17134
|
-
collectRscText(val,
|
|
17179
|
+
collectRscText(val, resolve20, sink2, seen);
|
|
17135
17180
|
}
|
|
17136
17181
|
}
|
|
17137
17182
|
}
|
|
@@ -17163,7 +17208,7 @@ function visitObjects(root, fn) {
|
|
|
17163
17208
|
}
|
|
17164
17209
|
}
|
|
17165
17210
|
}
|
|
17166
|
-
function buildMentionMap(rows,
|
|
17211
|
+
function buildMentionMap(rows, resolve20) {
|
|
17167
17212
|
const map = /* @__PURE__ */ new Map();
|
|
17168
17213
|
visitObjects(rows, (o) => {
|
|
17169
17214
|
const url = profileActionUrl(o);
|
|
@@ -17171,7 +17216,7 @@ function buildMentionMap(rows, resolve19) {
|
|
|
17171
17216
|
const slug = slugFromProfileUrl(url);
|
|
17172
17217
|
if (!slug || map.has(slug)) return;
|
|
17173
17218
|
const sink2 = { text: [], hashtags: [] };
|
|
17174
|
-
collectRscText(o.children,
|
|
17219
|
+
collectRscText(o.children, resolve20, sink2, /* @__PURE__ */ new Set());
|
|
17175
17220
|
const name = sink2.text.join(" ").replace(/\s+/g, " ").trim();
|
|
17176
17221
|
map.set(slug, name ? { slug, name, url } : { slug, url });
|
|
17177
17222
|
});
|
|
@@ -17257,10 +17302,10 @@ function buildPost(raw, mentionMap, author) {
|
|
|
17257
17302
|
|
|
17258
17303
|
// src/commands/netcap/walkPostRow.ts
|
|
17259
17304
|
var isCommentary = (o) => asObject(o.viewTrackingSpecs)?.viewName === "feed-commentary";
|
|
17260
|
-
function walkPostRow(v,
|
|
17305
|
+
function walkPostRow(v, resolve20, raw) {
|
|
17261
17306
|
if (v == null || typeof v !== "object") return;
|
|
17262
17307
|
if (Array.isArray(v)) {
|
|
17263
|
-
for (const x of v) walkPostRow(x,
|
|
17308
|
+
for (const x of v) walkPostRow(x, resolve20, raw);
|
|
17264
17309
|
return;
|
|
17265
17310
|
}
|
|
17266
17311
|
const o = v;
|
|
@@ -17274,9 +17319,9 @@ function walkPostRow(v, resolve19, raw) {
|
|
|
17274
17319
|
}
|
|
17275
17320
|
if (isCommentary(o)) {
|
|
17276
17321
|
const sink2 = { text: raw.text, hashtags: raw.hashtags };
|
|
17277
|
-
collectRscText(o.children,
|
|
17322
|
+
collectRscText(o.children, resolve20, sink2, /* @__PURE__ */ new Set());
|
|
17278
17323
|
}
|
|
17279
|
-
for (const val of Object.values(o)) walkPostRow(val,
|
|
17324
|
+
for (const val of Object.values(o)) walkPostRow(val, resolve20, raw);
|
|
17280
17325
|
}
|
|
17281
17326
|
|
|
17282
17327
|
// src/commands/netcap/extractLinkedInPosts.ts
|
|
@@ -17290,8 +17335,8 @@ function findCommentaryRows(rows) {
|
|
|
17290
17335
|
}
|
|
17291
17336
|
function extractLinkedInPosts(flight, author = findAuthorSlug(flight)) {
|
|
17292
17337
|
const rows = parseRscRows(flight);
|
|
17293
|
-
const
|
|
17294
|
-
const mentionMap = buildMentionMap(rows,
|
|
17338
|
+
const resolve20 = makeRscResolver(rows);
|
|
17339
|
+
const mentionMap = buildMentionMap(rows, resolve20);
|
|
17295
17340
|
const posts = [];
|
|
17296
17341
|
for (const id of findCommentaryRows(rows)) {
|
|
17297
17342
|
const raw = {
|
|
@@ -17301,7 +17346,7 @@ function extractLinkedInPosts(flight, author = findAuthorSlug(flight)) {
|
|
|
17301
17346
|
links: [],
|
|
17302
17347
|
related: []
|
|
17303
17348
|
};
|
|
17304
|
-
walkPostRow(rows[id],
|
|
17349
|
+
walkPostRow(rows[id], resolve20, raw);
|
|
17305
17350
|
const post = buildPost(raw, mentionMap, author);
|
|
17306
17351
|
if (post) posts.push(post);
|
|
17307
17352
|
}
|
|
@@ -18600,7 +18645,7 @@ function parseIncoming(line, requestId) {
|
|
|
18600
18645
|
|
|
18601
18646
|
// src/commands/prs/requestPrDecision.ts
|
|
18602
18647
|
function requestPrDecision(request) {
|
|
18603
|
-
return new Promise((
|
|
18648
|
+
return new Promise((resolve20, reject) => {
|
|
18604
18649
|
connectToDaemon().then((socket) => {
|
|
18605
18650
|
let settled = false;
|
|
18606
18651
|
const finish = (error, decision) => {
|
|
@@ -18608,7 +18653,7 @@ function requestPrDecision(request) {
|
|
|
18608
18653
|
settled = true;
|
|
18609
18654
|
socket.destroy();
|
|
18610
18655
|
if (error) reject(error);
|
|
18611
|
-
else
|
|
18656
|
+
else resolve20(decision);
|
|
18612
18657
|
};
|
|
18613
18658
|
readSocketLines(socket, (line) => {
|
|
18614
18659
|
const incoming = parseIncoming(line, request.requestId);
|
|
@@ -19510,7 +19555,7 @@ function getViolations(pattern2, options2 = {}, maxLines = DEFAULT_MAX_LINES) {
|
|
|
19510
19555
|
|
|
19511
19556
|
// src/commands/refactor/check/index.ts
|
|
19512
19557
|
function runScript(script, cwd) {
|
|
19513
|
-
return new Promise((
|
|
19558
|
+
return new Promise((resolve20) => {
|
|
19514
19559
|
const child = spawn5("npm", ["run", script], {
|
|
19515
19560
|
stdio: "pipe",
|
|
19516
19561
|
shell: true,
|
|
@@ -19524,7 +19569,7 @@ function runScript(script, cwd) {
|
|
|
19524
19569
|
output += data.toString();
|
|
19525
19570
|
});
|
|
19526
19571
|
child.on("close", (code) => {
|
|
19527
|
-
|
|
19572
|
+
resolve20({ script, code: code ?? 1, output });
|
|
19528
19573
|
});
|
|
19529
19574
|
});
|
|
19530
19575
|
}
|
|
@@ -22336,12 +22381,12 @@ function onCloseResult(ctx, code) {
|
|
|
22336
22381
|
return { ...closed, stderr: ctx.stderr.value, stdout: ctx.stdout.value };
|
|
22337
22382
|
}
|
|
22338
22383
|
function waitForChildExit(ctx) {
|
|
22339
|
-
return new Promise((
|
|
22384
|
+
return new Promise((resolve20) => {
|
|
22340
22385
|
let settled = false;
|
|
22341
22386
|
const settle = (result) => {
|
|
22342
22387
|
if (settled) return;
|
|
22343
22388
|
settled = true;
|
|
22344
|
-
|
|
22389
|
+
resolve20(result);
|
|
22345
22390
|
};
|
|
22346
22391
|
ctx.child.on("error", (err) => settle(onErrorResult(ctx, err)));
|
|
22347
22392
|
ctx.child.on("close", (code) => settle(onCloseResult(ctx, code)));
|
|
@@ -23448,9 +23493,9 @@ function createReadlineInterface() {
|
|
|
23448
23493
|
});
|
|
23449
23494
|
}
|
|
23450
23495
|
function askQuestion(rl, question) {
|
|
23451
|
-
return new Promise((
|
|
23496
|
+
return new Promise((resolve20) => {
|
|
23452
23497
|
rl.question(question, (answer) => {
|
|
23453
|
-
|
|
23498
|
+
resolve20(answer.trim());
|
|
23454
23499
|
});
|
|
23455
23500
|
});
|
|
23456
23501
|
}
|
|
@@ -24215,7 +24260,7 @@ function extractCode(url, expectedState) {
|
|
|
24215
24260
|
return code;
|
|
24216
24261
|
}
|
|
24217
24262
|
function waitForCallback(port, expectedState) {
|
|
24218
|
-
return new Promise((
|
|
24263
|
+
return new Promise((resolve20, reject) => {
|
|
24219
24264
|
const timeout = setTimeout(() => {
|
|
24220
24265
|
server.close();
|
|
24221
24266
|
reject(new Error("Authorization timed out after 120 seconds"));
|
|
@@ -24232,7 +24277,7 @@ function waitForCallback(port, expectedState) {
|
|
|
24232
24277
|
const code = extractCode(url, expectedState);
|
|
24233
24278
|
respondHtml(res, 200, "Authorization successful!");
|
|
24234
24279
|
server.close();
|
|
24235
|
-
|
|
24280
|
+
resolve20(code);
|
|
24236
24281
|
} catch (error) {
|
|
24237
24282
|
respondHtml(res, 400, error.message);
|
|
24238
24283
|
server.close();
|
|
@@ -24497,7 +24542,7 @@ var rootConfigHelp = {
|
|
|
24497
24542
|
};
|
|
24498
24543
|
|
|
24499
24544
|
// src/commands/run/index.ts
|
|
24500
|
-
import { resolve as
|
|
24545
|
+
import { resolve as resolve16 } from "path";
|
|
24501
24546
|
|
|
24502
24547
|
// src/commands/run/findRunConfig.ts
|
|
24503
24548
|
function exitNoRunConfigs() {
|
|
@@ -24596,12 +24641,12 @@ function runPreCommands(pre, cwd) {
|
|
|
24596
24641
|
// src/commands/run/spawnRunCommand.ts
|
|
24597
24642
|
import { execFileSync as execFileSync10, spawn as spawn8 } from "child_process";
|
|
24598
24643
|
import { existsSync as existsSync54 } from "fs";
|
|
24599
|
-
import { dirname as dirname27, join as join64, resolve as
|
|
24644
|
+
import { dirname as dirname27, join as join64, resolve as resolve15 } from "path";
|
|
24600
24645
|
function resolveCommand2(command) {
|
|
24601
24646
|
if (process.platform !== "win32" || command !== "bash") return command;
|
|
24602
24647
|
try {
|
|
24603
24648
|
const gitPath = execFileSync10("where", ["git"], { encoding: "utf8" }).trim().split("\r\n")[0];
|
|
24604
|
-
const gitRoot =
|
|
24649
|
+
const gitRoot = resolve15(dirname27(gitPath), "..");
|
|
24605
24650
|
const gitBash = join64(gitRoot, "bin", "bash.exe");
|
|
24606
24651
|
if (existsSync54(gitBash)) return gitBash;
|
|
24607
24652
|
} catch {
|
|
@@ -24649,7 +24694,7 @@ function listRunConfigs(verbose) {
|
|
|
24649
24694
|
}
|
|
24650
24695
|
}
|
|
24651
24696
|
function execRunConfig(config, args) {
|
|
24652
|
-
const cwd = config.cwd ?
|
|
24697
|
+
const cwd = config.cwd ? resolve16(getConfigDir(), config.cwd) : void 0;
|
|
24653
24698
|
if (config.pre) runPreCommands(config.pre, cwd);
|
|
24654
24699
|
const resolved = resolveParams(config.params, args);
|
|
24655
24700
|
spawnRunCommand(
|
|
@@ -24889,7 +24934,7 @@ function registerRun(program2) {
|
|
|
24889
24934
|
import { execSync as execSync58 } from "child_process";
|
|
24890
24935
|
import { existsSync as existsSync56, mkdirSync as mkdirSync24, unlinkSync as unlinkSync21, writeFileSync as writeFileSync42 } from "fs";
|
|
24891
24936
|
import { tmpdir as tmpdir8 } from "os";
|
|
24892
|
-
import { join as join67, resolve as
|
|
24937
|
+
import { join as join67, resolve as resolve17 } from "path";
|
|
24893
24938
|
import chalk203 from "chalk";
|
|
24894
24939
|
|
|
24895
24940
|
// src/commands/screenshot/captureWindowPs1.ts
|
|
@@ -25023,7 +25068,7 @@ function buildOutputPath(outputDir, processName) {
|
|
|
25023
25068
|
mkdirSync24(outputDir, { recursive: true });
|
|
25024
25069
|
}
|
|
25025
25070
|
const timestamp6 = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
25026
|
-
return
|
|
25071
|
+
return resolve17(outputDir, `${processName}-${timestamp6}.png`);
|
|
25027
25072
|
}
|
|
25028
25073
|
function runPowerShellScript(processName, outputPath) {
|
|
25029
25074
|
const scriptPath = join67(tmpdir8(), `assist-screenshot-${Date.now()}.ps1`);
|
|
@@ -25039,7 +25084,7 @@ function runPowerShellScript(processName, outputPath) {
|
|
|
25039
25084
|
}
|
|
25040
25085
|
function screenshot(processName) {
|
|
25041
25086
|
const config = loadConfig();
|
|
25042
|
-
const outputDir =
|
|
25087
|
+
const outputDir = resolve17(config.screenshot.outputDir);
|
|
25043
25088
|
const outputPath = buildOutputPath(outputDir, processName);
|
|
25044
25089
|
console.log(chalk203.gray(`Capturing window for process "${processName}" ...`));
|
|
25045
25090
|
try {
|
|
@@ -25072,10 +25117,10 @@ var STATUS_TIMEOUT_MS = 5e3;
|
|
|
25072
25117
|
function queryDaemon(socket) {
|
|
25073
25118
|
socket.write(`${JSON.stringify({ type: "ping" })}
|
|
25074
25119
|
`);
|
|
25075
|
-
return new Promise((
|
|
25120
|
+
return new Promise((resolve20) => {
|
|
25076
25121
|
const result = { sessions: [] };
|
|
25077
25122
|
const pending = /* @__PURE__ */ new Set(["sessions", "pong"]);
|
|
25078
|
-
const timer = setTimeout(() =>
|
|
25123
|
+
const timer = setTimeout(() => resolve20(result), STATUS_TIMEOUT_MS);
|
|
25079
25124
|
const lines = createInterface5({ input: socket });
|
|
25080
25125
|
lines.on("error", () => {
|
|
25081
25126
|
});
|
|
@@ -25083,7 +25128,7 @@ function queryDaemon(socket) {
|
|
|
25083
25128
|
applyLine(result, pending, line);
|
|
25084
25129
|
if (pending.size === 0) {
|
|
25085
25130
|
clearTimeout(timer);
|
|
25086
|
-
|
|
25131
|
+
resolve20(result);
|
|
25087
25132
|
}
|
|
25088
25133
|
});
|
|
25089
25134
|
});
|
|
@@ -25277,8 +25322,8 @@ async function drainDaemon() {
|
|
|
25277
25322
|
function requestDrain(socket) {
|
|
25278
25323
|
socket.write(`${JSON.stringify({ type: "drain" })}
|
|
25279
25324
|
`);
|
|
25280
|
-
return new Promise((
|
|
25281
|
-
const timer = setTimeout(() =>
|
|
25325
|
+
return new Promise((resolve20) => {
|
|
25326
|
+
const timer = setTimeout(() => resolve20(0), DRAIN_TIMEOUT_MS);
|
|
25282
25327
|
const lines = createInterface6({ input: socket });
|
|
25283
25328
|
lines.on("error", () => {
|
|
25284
25329
|
});
|
|
@@ -25287,7 +25332,7 @@ function requestDrain(socket) {
|
|
|
25287
25332
|
const data = JSON.parse(line);
|
|
25288
25333
|
if (data.type === "drained") {
|
|
25289
25334
|
clearTimeout(timer);
|
|
25290
|
-
|
|
25335
|
+
resolve20(data.count ?? 0);
|
|
25291
25336
|
}
|
|
25292
25337
|
} catch {
|
|
25293
25338
|
}
|
|
@@ -25720,10 +25765,10 @@ function gitInvocation(cwd, args) {
|
|
|
25720
25765
|
}
|
|
25721
25766
|
function git3(cwd, args) {
|
|
25722
25767
|
const { file, argv, options: options2 } = gitInvocation(cwd, args);
|
|
25723
|
-
return new Promise((
|
|
25768
|
+
return new Promise((resolve20, reject) => {
|
|
25724
25769
|
execFile7(file, argv, options2, (error, stdout) => {
|
|
25725
25770
|
if (error) reject(error);
|
|
25726
|
-
else
|
|
25771
|
+
else resolve20(stdout.toString());
|
|
25727
25772
|
});
|
|
25728
25773
|
});
|
|
25729
25774
|
}
|
|
@@ -27632,7 +27677,7 @@ function windowsDaemonHost() {
|
|
|
27632
27677
|
var CONNECT_TIMEOUT_MS = 2e3;
|
|
27633
27678
|
var KEEPALIVE_PROBE_MS = 1e4;
|
|
27634
27679
|
function connectToWindowsDaemon() {
|
|
27635
|
-
return new Promise((
|
|
27680
|
+
return new Promise((resolve20, reject) => {
|
|
27636
27681
|
const socket = net2.connect(windowsDaemonPort(), windowsDaemonHost());
|
|
27637
27682
|
socket.setTimeout(CONNECT_TIMEOUT_MS);
|
|
27638
27683
|
socket.once("timeout", () => {
|
|
@@ -27642,7 +27687,7 @@ function connectToWindowsDaemon() {
|
|
|
27642
27687
|
socket.once("connect", () => {
|
|
27643
27688
|
socket.setTimeout(0);
|
|
27644
27689
|
socket.setKeepAlive(true, KEEPALIVE_PROBE_MS);
|
|
27645
|
-
|
|
27690
|
+
resolve20(socket);
|
|
27646
27691
|
});
|
|
27647
27692
|
socket.once("error", reject);
|
|
27648
27693
|
});
|
|
@@ -27720,7 +27765,7 @@ async function waitForWindowsDaemon() {
|
|
|
27720
27765
|
);
|
|
27721
27766
|
}
|
|
27722
27767
|
function delay2(ms) {
|
|
27723
|
-
return new Promise((
|
|
27768
|
+
return new Promise((resolve20) => setTimeout(resolve20, ms));
|
|
27724
27769
|
}
|
|
27725
27770
|
|
|
27726
27771
|
// src/commands/sessions/daemon/defaultConnect.ts
|
|
@@ -28001,7 +28046,7 @@ async function healWindowsDaemon() {
|
|
|
28001
28046
|
daemonLog("windows daemon: auto-heal: stale daemon stopped");
|
|
28002
28047
|
}
|
|
28003
28048
|
function runOnWindowsHost(command, timeoutMs) {
|
|
28004
|
-
return new Promise((
|
|
28049
|
+
return new Promise((resolve20, reject) => {
|
|
28005
28050
|
const child = spawn11("pwsh.exe", ["-Command", command], {
|
|
28006
28051
|
stdio: ["ignore", "pipe", "pipe"]
|
|
28007
28052
|
});
|
|
@@ -28021,7 +28066,7 @@ function runOnWindowsHost(command, timeoutMs) {
|
|
|
28021
28066
|
});
|
|
28022
28067
|
child.on("exit", (code) => {
|
|
28023
28068
|
clearTimeout(timer);
|
|
28024
|
-
if (code === 0)
|
|
28069
|
+
if (code === 0) resolve20();
|
|
28025
28070
|
else
|
|
28026
28071
|
reject(
|
|
28027
28072
|
new Error(
|
|
@@ -29355,16 +29400,16 @@ function buildLimitsSegment(rateLimits) {
|
|
|
29355
29400
|
|
|
29356
29401
|
// src/commands/readGitBranch.ts
|
|
29357
29402
|
import { readFileSync as readFileSync52, statSync as statSync12 } from "fs";
|
|
29358
|
-
import { isAbsolute as
|
|
29403
|
+
import { isAbsolute as isAbsolute3, join as join73, resolve as resolve18 } from "path";
|
|
29359
29404
|
function resolveGitDir(cwd) {
|
|
29360
29405
|
const dotGit = join73(cwd, ".git");
|
|
29361
|
-
let
|
|
29406
|
+
let stat3;
|
|
29362
29407
|
try {
|
|
29363
|
-
|
|
29408
|
+
stat3 = statSync12(dotGit);
|
|
29364
29409
|
} catch {
|
|
29365
29410
|
return null;
|
|
29366
29411
|
}
|
|
29367
|
-
if (
|
|
29412
|
+
if (stat3.isDirectory()) {
|
|
29368
29413
|
return dotGit;
|
|
29369
29414
|
}
|
|
29370
29415
|
let contents;
|
|
@@ -29378,7 +29423,7 @@ function resolveGitDir(cwd) {
|
|
|
29378
29423
|
return null;
|
|
29379
29424
|
}
|
|
29380
29425
|
const gitDir = match[1].trim();
|
|
29381
|
-
return
|
|
29426
|
+
return isAbsolute3(gitDir) ? gitDir : resolve18(cwd, gitDir);
|
|
29382
29427
|
}
|
|
29383
29428
|
function readGitBranch(cwd) {
|
|
29384
29429
|
const gitDir = resolveGitDir(cwd);
|