@vforsh/argus 0.1.19 → 0.1.20
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/.tsbuildinfo +1 -1
- package/dist/argus.js +257 -59
- package/dist/cli/register/extensionCommands.d.ts.map +1 -1
- package/dist/cli/register/extensionCommands.js +28 -3
- package/dist/cli/register/extensionCommands.js.map +1 -1
- package/dist/commands/extension/extensionId.d.ts +27 -0
- package/dist/commands/extension/extensionId.d.ts.map +1 -0
- package/dist/commands/extension/extensionId.js +37 -0
- package/dist/commands/extension/extensionId.js.map +1 -0
- package/dist/commands/extension/extensionPath.d.ts +15 -0
- package/dist/commands/extension/extensionPath.d.ts.map +1 -0
- package/dist/commands/extension/extensionPath.js +61 -0
- package/dist/commands/extension/extensionPath.js.map +1 -0
- package/dist/commands/extension/install.d.ts +16 -0
- package/dist/commands/extension/install.d.ts.map +1 -0
- package/dist/commands/extension/install.js +154 -0
- package/dist/commands/extension/install.js.map +1 -0
- package/dist/commands/extension/setup.d.ts +2 -1
- package/dist/commands/extension/setup.d.ts.map +1 -1
- package/dist/commands/extension/setup.js +5 -2
- package/dist/commands/extension/setup.js.map +1 -1
- package/dist/extension/dist/background/auth-header-monitor.js +77 -0
- package/dist/extension/dist/background/bridge-client.js +120 -0
- package/dist/extension/dist/background/cdp-proxy.js +201 -0
- package/dist/extension/dist/background/debugger-manager.js +296 -0
- package/dist/extension/dist/background/service-worker.js +2004 -0
- package/dist/extension/dist/background/service-worker.js.map +7 -0
- package/dist/extension/dist/popup/popup.js +730 -0
- package/dist/extension/dist/popup/popup.js.map +7 -0
- package/dist/extension/dist/popup/tabMarkup.js +104 -0
- package/dist/extension/dist/popup/viewState.js +60 -0
- package/dist/extension/dist/types/messages.js +5 -0
- package/dist/extension/icons/icon-128.png +0 -0
- package/dist/extension/icons/icon-16.png +0 -0
- package/dist/extension/icons/icon-48.png +0 -0
- package/dist/extension/manifest.json +26 -0
- package/dist/extension/src/popup/popup.html +756 -0
- package/dist/skill/argus/SKILL.md +3 -1
- package/dist/skill/argus/reference/EXTENSION.md +13 -8
- package/package.json +2 -2
package/dist/argus.js
CHANGED
|
@@ -5,29 +5,15 @@ var __getProtoOf = Object.getPrototypeOf;
|
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
6
6
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
function __accessProp(key) {
|
|
9
|
-
return this[key];
|
|
10
|
-
}
|
|
11
|
-
var __toESMCache_node;
|
|
12
|
-
var __toESMCache_esm;
|
|
13
8
|
var __toESM = (mod, isNodeMode, target) => {
|
|
14
|
-
var canCache = mod != null && typeof mod === "object";
|
|
15
|
-
if (canCache) {
|
|
16
|
-
var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
|
|
17
|
-
var cached = cache.get(mod);
|
|
18
|
-
if (cached)
|
|
19
|
-
return cached;
|
|
20
|
-
}
|
|
21
9
|
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
22
10
|
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
23
11
|
for (let key of __getOwnPropNames(mod))
|
|
24
12
|
if (!__hasOwnProp.call(to, key))
|
|
25
13
|
__defProp(to, key, {
|
|
26
|
-
get:
|
|
14
|
+
get: () => mod[key],
|
|
27
15
|
enumerable: true
|
|
28
16
|
});
|
|
29
|
-
if (canCache)
|
|
30
|
-
cache.set(mod, to);
|
|
31
17
|
return to;
|
|
32
18
|
};
|
|
33
19
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
@@ -2144,7 +2130,7 @@ var {
|
|
|
2144
2130
|
// package.json
|
|
2145
2131
|
var package_default = {
|
|
2146
2132
|
name: "@vforsh/argus",
|
|
2147
|
-
version: "0.1.
|
|
2133
|
+
version: "0.1.20",
|
|
2148
2134
|
repository: {
|
|
2149
2135
|
type: "git",
|
|
2150
2136
|
url: "git+https://github.com/vforsh/argus.git",
|
|
@@ -2180,7 +2166,7 @@ var package_default = {
|
|
|
2180
2166
|
scripts: {
|
|
2181
2167
|
clean: "node ../../scripts/clean-dist.mjs",
|
|
2182
2168
|
build: "npm run clean && tsc -b && bun run bundle",
|
|
2183
|
-
bundle: "bun build dist/bin.js --outfile dist/argus.js --target node --external esbuild && node ../../scripts/copy-argus-skill.mjs",
|
|
2169
|
+
bundle: "bun build dist/bin.js --outfile dist/argus.js --target node --external esbuild && node ../../scripts/copy-argus-skill.mjs && node ../../scripts/copy-argus-extension.mjs",
|
|
2184
2170
|
typecheck: "tsc -b --pretty false",
|
|
2185
2171
|
"chrome:start": "bun src/bin.ts chrome start"
|
|
2186
2172
|
}
|
|
@@ -49110,9 +49096,63 @@ var pluginCommands = [
|
|
|
49110
49096
|
}
|
|
49111
49097
|
];
|
|
49112
49098
|
|
|
49113
|
-
// dist/commands/extension/
|
|
49099
|
+
// dist/commands/extension/install.js
|
|
49100
|
+
import { spawn as spawn3 } from "node:child_process";
|
|
49101
|
+
|
|
49102
|
+
// dist/commands/extension/extensionId.js
|
|
49103
|
+
var ARGUS_EXTENSION_ID = "ibhecpfiodfmkpflcnnkkgnjifheefhb";
|
|
49104
|
+
|
|
49105
|
+
// dist/commands/extension/extensionPath.js
|
|
49114
49106
|
import fs17 from "node:fs";
|
|
49115
49107
|
import path22 from "node:path";
|
|
49108
|
+
import { fileURLToPath as fileURLToPath2 } from "node:url";
|
|
49109
|
+
var runExtensionPath = (options) => {
|
|
49110
|
+
const output = createOutput(options);
|
|
49111
|
+
const extensionDir = resolveExtensionDir();
|
|
49112
|
+
if (!extensionDir) {
|
|
49113
|
+
const message = `Packaged Argus extension not found. Checked:
|
|
49114
|
+
${resolveExtensionCandidates().join(`
|
|
49115
|
+
`)}`;
|
|
49116
|
+
if (options.json) {
|
|
49117
|
+
output.writeJson({ ok: false, error: { message } });
|
|
49118
|
+
} else {
|
|
49119
|
+
console.error(message);
|
|
49120
|
+
}
|
|
49121
|
+
process.exitCode = 2;
|
|
49122
|
+
return;
|
|
49123
|
+
}
|
|
49124
|
+
if (options.json) {
|
|
49125
|
+
output.writeJson({ ok: true, path: extensionDir });
|
|
49126
|
+
return;
|
|
49127
|
+
}
|
|
49128
|
+
output.writeHuman(extensionDir);
|
|
49129
|
+
};
|
|
49130
|
+
var resolveExtensionDir = () => {
|
|
49131
|
+
for (const candidate of resolveExtensionCandidates()) {
|
|
49132
|
+
if (isLoadableExtensionDir(candidate)) {
|
|
49133
|
+
return candidate;
|
|
49134
|
+
}
|
|
49135
|
+
}
|
|
49136
|
+
return null;
|
|
49137
|
+
};
|
|
49138
|
+
var isLoadableExtensionDir = (dir) => {
|
|
49139
|
+
return fs17.existsSync(path22.join(dir, "manifest.json")) && fs17.existsSync(path22.join(dir, "dist", "background", "service-worker.js"));
|
|
49140
|
+
};
|
|
49141
|
+
var resolveExtensionCandidates = () => {
|
|
49142
|
+
const moduleDir = path22.dirname(fileURLToPath2(import.meta.url));
|
|
49143
|
+
const candidates = [
|
|
49144
|
+
path22.resolve(moduleDir, "extension"),
|
|
49145
|
+
path22.resolve(moduleDir, "..", "..", "extension"),
|
|
49146
|
+
path22.resolve(moduleDir, "..", "extension"),
|
|
49147
|
+
path22.resolve(moduleDir, "..", "..", "..", "argus-extension"),
|
|
49148
|
+
path22.resolve(moduleDir, "..", "..", "..", "..", "argus-extension")
|
|
49149
|
+
];
|
|
49150
|
+
return [...new Set(candidates)];
|
|
49151
|
+
};
|
|
49152
|
+
|
|
49153
|
+
// dist/commands/extension/nativeHost.js
|
|
49154
|
+
import fs18 from "node:fs";
|
|
49155
|
+
import path23 from "node:path";
|
|
49116
49156
|
import os8 from "node:os";
|
|
49117
49157
|
import { execSync } from "node:child_process";
|
|
49118
49158
|
var BRIDGE_HOST_NAME = "com.vforsh.argus.bridge";
|
|
@@ -49122,21 +49162,21 @@ var HOST_NAMES = [BRIDGE_HOST_NAME, CONTROL_HOST_NAME];
|
|
|
49122
49162
|
var getManifestDir = (platform) => {
|
|
49123
49163
|
switch (platform) {
|
|
49124
49164
|
case "darwin":
|
|
49125
|
-
return
|
|
49165
|
+
return path23.join(os8.homedir(), "Library/Application Support/Google/Chrome/NativeMessagingHosts");
|
|
49126
49166
|
case "linux":
|
|
49127
|
-
return
|
|
49167
|
+
return path23.join(os8.homedir(), ".config/google-chrome/NativeMessagingHosts");
|
|
49128
49168
|
case "win32":
|
|
49129
|
-
return
|
|
49169
|
+
return path23.join(process.env.LOCALAPPDATA ?? os8.homedir(), "Google/Chrome/User Data/NativeMessagingHosts");
|
|
49130
49170
|
default:
|
|
49131
49171
|
throw new Error(`Unsupported platform: ${platform}`);
|
|
49132
49172
|
}
|
|
49133
49173
|
};
|
|
49134
49174
|
var getManifestPath = (platform, hostName = BRIDGE_HOST_NAME) => {
|
|
49135
|
-
return
|
|
49175
|
+
return path23.join(getManifestDir(platform), `${hostName}.json`);
|
|
49136
49176
|
};
|
|
49137
49177
|
var getWrapperPath = (platform, hostName = BRIDGE_HOST_NAME) => {
|
|
49138
49178
|
const filename = hostName === CONTROL_HOST_NAME ? "argus-native-control-host.sh" : "argus-native-host.sh";
|
|
49139
|
-
return
|
|
49179
|
+
return path23.join(getManifestDir(platform), filename);
|
|
49140
49180
|
};
|
|
49141
49181
|
var getPlatform = () => {
|
|
49142
49182
|
const platform = os8.platform();
|
|
@@ -49148,8 +49188,8 @@ var getPlatform = () => {
|
|
|
49148
49188
|
var findArgusExecutable = () => {
|
|
49149
49189
|
try {
|
|
49150
49190
|
const npmGlobalPrefix = execSync("npm config get prefix", { encoding: "utf8" }).trim();
|
|
49151
|
-
const globalBinPath =
|
|
49152
|
-
if (
|
|
49191
|
+
const globalBinPath = path23.join(npmGlobalPrefix, "bin", "argus");
|
|
49192
|
+
if (fs18.existsSync(globalBinPath)) {
|
|
49153
49193
|
return globalBinPath;
|
|
49154
49194
|
}
|
|
49155
49195
|
} catch {}
|
|
@@ -49162,7 +49202,7 @@ var findArgusExecutable = () => {
|
|
|
49162
49202
|
throw new Error("Could not find argus executable. Please install argus globally (npm install -g @vforsh/argus) or ensure it is in your PATH.");
|
|
49163
49203
|
};
|
|
49164
49204
|
var findNodePath = () => {
|
|
49165
|
-
return
|
|
49205
|
+
return fs18.realpathSync(process.execPath);
|
|
49166
49206
|
};
|
|
49167
49207
|
var createManifest = (extensionId, executablePath, hostName = BRIDGE_HOST_NAME) => {
|
|
49168
49208
|
return {
|
|
@@ -49180,16 +49220,16 @@ var createWrapperScript = (platform, executablePath, hostName = BRIDGE_HOST_NAME
|
|
|
49180
49220
|
const script = `#!/bin/bash
|
|
49181
49221
|
exec "${nodePath}" "${executablePath}" ${args}
|
|
49182
49222
|
`;
|
|
49183
|
-
|
|
49223
|
+
fs18.writeFileSync(wrapperPath, script, { mode: 493 });
|
|
49184
49224
|
return wrapperPath;
|
|
49185
49225
|
};
|
|
49186
49226
|
var installNativeHosts = (platform, extensionId, executablePath) => {
|
|
49187
|
-
|
|
49227
|
+
fs18.mkdirSync(getManifestDir(platform), { recursive: true });
|
|
49188
49228
|
return HOST_NAMES.map((hostName) => {
|
|
49189
49229
|
const wrapperPath = createWrapperScript(platform, executablePath, hostName);
|
|
49190
49230
|
const manifestPath = getManifestPath(platform, hostName);
|
|
49191
49231
|
const manifest = createManifest(extensionId, wrapperPath, hostName);
|
|
49192
|
-
|
|
49232
|
+
fs18.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
|
|
49193
49233
|
registerWindowsNativeHost(platform, hostName, manifestPath);
|
|
49194
49234
|
return { hostName, manifestPath, wrapperPath };
|
|
49195
49235
|
});
|
|
@@ -49209,8 +49249,8 @@ var removeNativeHosts = (platform) => {
|
|
|
49209
49249
|
var inspectNativeHost = (platform, hostName) => {
|
|
49210
49250
|
const manifestPath = getManifestPath(platform, hostName);
|
|
49211
49251
|
const wrapperPath = getWrapperPath(platform, hostName);
|
|
49212
|
-
const manifestExists =
|
|
49213
|
-
const wrapperExists =
|
|
49252
|
+
const manifestExists = fs18.existsSync(manifestPath);
|
|
49253
|
+
const wrapperExists = fs18.existsSync(wrapperPath);
|
|
49214
49254
|
const wrapperExecutable = wrapperExists && isWrapperExecutable(wrapperPath);
|
|
49215
49255
|
const manifest = manifestExists ? readManifest(manifestPath) : null;
|
|
49216
49256
|
const manifestValid = Boolean(manifest && manifest.name === hostName && manifest.type === "stdio" && Array.isArray(manifest.allowed_origins));
|
|
@@ -49231,7 +49271,7 @@ var inspectNativeHost = (platform, hostName) => {
|
|
|
49231
49271
|
};
|
|
49232
49272
|
var readManifest = (manifestPath) => {
|
|
49233
49273
|
try {
|
|
49234
|
-
const content =
|
|
49274
|
+
const content = fs18.readFileSync(manifestPath, "utf8");
|
|
49235
49275
|
return JSON.parse(content);
|
|
49236
49276
|
} catch {
|
|
49237
49277
|
return null;
|
|
@@ -49239,7 +49279,7 @@ var readManifest = (manifestPath) => {
|
|
|
49239
49279
|
};
|
|
49240
49280
|
var isWrapperExecutable = (wrapperPath) => {
|
|
49241
49281
|
try {
|
|
49242
|
-
|
|
49282
|
+
fs18.accessSync(wrapperPath, fs18.constants.X_OK);
|
|
49243
49283
|
return true;
|
|
49244
49284
|
} catch {
|
|
49245
49285
|
return false;
|
|
@@ -49260,10 +49300,10 @@ var extractExtensionId = (origin) => {
|
|
|
49260
49300
|
return match?.[1] ?? null;
|
|
49261
49301
|
};
|
|
49262
49302
|
var removeFileIfExists = (filePath) => {
|
|
49263
|
-
if (!
|
|
49303
|
+
if (!fs18.existsSync(filePath)) {
|
|
49264
49304
|
return false;
|
|
49265
49305
|
}
|
|
49266
|
-
|
|
49306
|
+
fs18.unlinkSync(filePath);
|
|
49267
49307
|
return true;
|
|
49268
49308
|
};
|
|
49269
49309
|
var registerWindowsNativeHost = (platform, hostName, manifestPath) => {
|
|
@@ -49283,10 +49323,145 @@ var unregisterWindowsNativeHost = (platform, hostName) => {
|
|
|
49283
49323
|
} catch {}
|
|
49284
49324
|
};
|
|
49285
49325
|
|
|
49326
|
+
// dist/commands/extension/install.js
|
|
49327
|
+
var DEFAULT_TIMEOUT_SECONDS = 120;
|
|
49328
|
+
var POLL_INTERVAL_MS = 700;
|
|
49329
|
+
var runExtensionInstall = async (options) => {
|
|
49330
|
+
const output = createOutput(options);
|
|
49331
|
+
let platform;
|
|
49332
|
+
try {
|
|
49333
|
+
platform = getPlatform();
|
|
49334
|
+
} catch (error) {
|
|
49335
|
+
return fail(output, error.message);
|
|
49336
|
+
}
|
|
49337
|
+
const extensionDir = resolveExtensionDir();
|
|
49338
|
+
if (!extensionDir) {
|
|
49339
|
+
return fail(output, "Packaged Argus extension not found. Build the CLI (npm run build:packages) or run from a built checkout.");
|
|
49340
|
+
}
|
|
49341
|
+
let executablePath;
|
|
49342
|
+
try {
|
|
49343
|
+
executablePath = findArgusExecutable();
|
|
49344
|
+
} catch (error) {
|
|
49345
|
+
return fail(output, error.message);
|
|
49346
|
+
}
|
|
49347
|
+
let hosts;
|
|
49348
|
+
try {
|
|
49349
|
+
hosts = installNativeHosts(platform, ARGUS_EXTENSION_ID, executablePath);
|
|
49350
|
+
} catch (error) {
|
|
49351
|
+
return fail(output, `Failed to install native hosts: ${error.message}`);
|
|
49352
|
+
}
|
|
49353
|
+
await pruneRegistry();
|
|
49354
|
+
let connected = await isControlConnected();
|
|
49355
|
+
const shouldOpen = options.open !== false && !connected;
|
|
49356
|
+
const opened = shouldOpen ? openExtensionsPage() : false;
|
|
49357
|
+
if (!output.json) {
|
|
49358
|
+
printSummary(output, { extensionDir, hosts, connected, opened, shouldOpen });
|
|
49359
|
+
}
|
|
49360
|
+
const shouldWait = options.wait !== false && !connected;
|
|
49361
|
+
if (shouldWait) {
|
|
49362
|
+
connected = await waitForControl(parseTimeoutMs2(options.timeout), output);
|
|
49363
|
+
}
|
|
49364
|
+
if (output.json) {
|
|
49365
|
+
output.writeJson({ success: true, extensionId: ARGUS_EXTENSION_ID, extensionPath: extensionDir, hosts, connected });
|
|
49366
|
+
if (!connected && shouldWait) {
|
|
49367
|
+
process.exitCode = 1;
|
|
49368
|
+
}
|
|
49369
|
+
return;
|
|
49370
|
+
}
|
|
49371
|
+
printResult(output, connected, shouldWait);
|
|
49372
|
+
};
|
|
49373
|
+
var isControlConnected = async () => {
|
|
49374
|
+
const { registry: registry2 } = await readRegistry();
|
|
49375
|
+
return Boolean(registry2.watchers[CONTROL_WATCHER_ID]);
|
|
49376
|
+
};
|
|
49377
|
+
var openExtensionsPage = () => {
|
|
49378
|
+
const chromeBin = resolveChromeBin();
|
|
49379
|
+
if (!chromeBin) {
|
|
49380
|
+
return false;
|
|
49381
|
+
}
|
|
49382
|
+
try {
|
|
49383
|
+
const child = spawn3(chromeBin, ["chrome://extensions/"], { stdio: "ignore", detached: true });
|
|
49384
|
+
child.unref();
|
|
49385
|
+
return true;
|
|
49386
|
+
} catch {
|
|
49387
|
+
return false;
|
|
49388
|
+
}
|
|
49389
|
+
};
|
|
49390
|
+
var waitForControl = async (timeoutMs, output) => {
|
|
49391
|
+
if (!output.json) {
|
|
49392
|
+
output.writeHuman(`Waiting for the extension to connect (up to ${Math.round(timeoutMs / 1000)}s)...`);
|
|
49393
|
+
}
|
|
49394
|
+
const deadline = Date.now() + timeoutMs;
|
|
49395
|
+
while (Date.now() < deadline) {
|
|
49396
|
+
if (await isControlConnected()) {
|
|
49397
|
+
return true;
|
|
49398
|
+
}
|
|
49399
|
+
await delay7(POLL_INTERVAL_MS);
|
|
49400
|
+
}
|
|
49401
|
+
return isControlConnected();
|
|
49402
|
+
};
|
|
49403
|
+
var printSummary = (output, info) => {
|
|
49404
|
+
output.writeHuman("");
|
|
49405
|
+
output.writeHuman("Argus extension setup");
|
|
49406
|
+
output.writeHuman("");
|
|
49407
|
+
output.writeHuman(` Native hosts: installed (${info.hosts.map((host) => host.hostName).join(", ")})`);
|
|
49408
|
+
output.writeHuman(` Extension ID: ${ARGUS_EXTENSION_ID}`);
|
|
49409
|
+
output.writeHuman(` Load unpacked: ${info.extensionDir}`);
|
|
49410
|
+
output.writeHuman("");
|
|
49411
|
+
if (info.connected) {
|
|
49412
|
+
return;
|
|
49413
|
+
}
|
|
49414
|
+
if (info.opened) {
|
|
49415
|
+
output.writeHuman('Opened chrome://extensions. Click "Load unpacked" and select the folder above.');
|
|
49416
|
+
} else if (info.shouldOpen) {
|
|
49417
|
+
output.writeHuman('Open chrome://extensions, then click "Load unpacked" and select the folder above.');
|
|
49418
|
+
} else {
|
|
49419
|
+
output.writeHuman('Open chrome://extensions and "Load unpacked" the folder above.');
|
|
49420
|
+
}
|
|
49421
|
+
output.writeHuman('(Enable Developer mode if the "Load unpacked" button is hidden.)');
|
|
49422
|
+
output.writeHuman("");
|
|
49423
|
+
};
|
|
49424
|
+
var printResult = (output, connected, waited) => {
|
|
49425
|
+
if (connected) {
|
|
49426
|
+
output.writeHuman("Extension connected.");
|
|
49427
|
+
output.writeHuman("");
|
|
49428
|
+
output.writeHuman("Try it:");
|
|
49429
|
+
output.writeHuman(" argus ext tabs");
|
|
49430
|
+
output.writeHuman("");
|
|
49431
|
+
return;
|
|
49432
|
+
}
|
|
49433
|
+
if (waited) {
|
|
49434
|
+
output.writeHuman("Extension did not connect yet.");
|
|
49435
|
+
output.writeHuman(" - If it is already loaded, open its popup or reload it in chrome://extensions.");
|
|
49436
|
+
output.writeHuman(" - Then check `argus extension status` and `argus ext doctor`.");
|
|
49437
|
+
output.writeHuman("");
|
|
49438
|
+
process.exitCode = 1;
|
|
49439
|
+
return;
|
|
49440
|
+
}
|
|
49441
|
+
output.writeHuman("Once loaded, verify with `argus ext tabs`.");
|
|
49442
|
+
output.writeHuman("");
|
|
49443
|
+
};
|
|
49444
|
+
var parseTimeoutMs2 = (value) => {
|
|
49445
|
+
const seconds = value ? Number.parseInt(value, 10) : DEFAULT_TIMEOUT_SECONDS;
|
|
49446
|
+
if (!Number.isFinite(seconds) || seconds < 5) {
|
|
49447
|
+
return DEFAULT_TIMEOUT_SECONDS * 1000;
|
|
49448
|
+
}
|
|
49449
|
+
return seconds * 1000;
|
|
49450
|
+
};
|
|
49451
|
+
var fail = (output, message) => {
|
|
49452
|
+
if (output.json) {
|
|
49453
|
+
output.writeJson({ success: false, error: { message } });
|
|
49454
|
+
} else {
|
|
49455
|
+
console.error(message);
|
|
49456
|
+
}
|
|
49457
|
+
process.exitCode = 1;
|
|
49458
|
+
};
|
|
49459
|
+
var delay7 = (ms3) => new Promise((resolve2) => setTimeout(resolve2, ms3));
|
|
49460
|
+
|
|
49286
49461
|
// dist/commands/extension/setup.js
|
|
49287
49462
|
var runExtensionSetup = async (options) => {
|
|
49288
49463
|
const output = createOutput(options);
|
|
49289
|
-
const
|
|
49464
|
+
const extensionId = options.extensionId ?? ARGUS_EXTENSION_ID;
|
|
49290
49465
|
let platform;
|
|
49291
49466
|
try {
|
|
49292
49467
|
platform = getPlatform();
|
|
@@ -49342,9 +49517,11 @@ var runExtensionSetup = async (options) => {
|
|
|
49342
49517
|
}
|
|
49343
49518
|
output.writeHuman("");
|
|
49344
49519
|
output.writeHuman("Next steps:");
|
|
49345
|
-
output.writeHuman(" 1.
|
|
49520
|
+
output.writeHuman(" 1. Load the unpacked extension from `argus extension path` (if not already loaded)");
|
|
49346
49521
|
output.writeHuman(" 2. Run `argus ext tabs` or open the extension popup and attach a tab");
|
|
49347
49522
|
output.writeHuman("");
|
|
49523
|
+
output.writeHuman("Tip: `argus extension install` does this end-to-end and waits for the extension to connect.");
|
|
49524
|
+
output.writeHuman("");
|
|
49348
49525
|
}
|
|
49349
49526
|
};
|
|
49350
49527
|
|
|
@@ -49733,7 +49910,7 @@ var waitForTabWatcher = async (controlWatcher, selector, tab, watcherId) => {
|
|
|
49733
49910
|
if (watcher) {
|
|
49734
49911
|
const status = await fetchStatus(watcher);
|
|
49735
49912
|
if (!status || !statusMatchesTabWatcher(status, latestTab ?? tab, latestTab?.watcherId === explicitWatcherId)) {
|
|
49736
|
-
await
|
|
49913
|
+
await delay8(WATCHER_POLL_INTERVAL_MS);
|
|
49737
49914
|
continue;
|
|
49738
49915
|
}
|
|
49739
49916
|
return { ok: true, watcher, status, tab: latestTab ?? tab };
|
|
@@ -49743,7 +49920,7 @@ var waitForTabWatcher = async (controlWatcher, selector, tab, watcherId) => {
|
|
|
49743
49920
|
if (lastResult.ok) {
|
|
49744
49921
|
return lastResult;
|
|
49745
49922
|
}
|
|
49746
|
-
await
|
|
49923
|
+
await delay8(WATCHER_POLL_INTERVAL_MS);
|
|
49747
49924
|
}
|
|
49748
49925
|
return lastResult;
|
|
49749
49926
|
};
|
|
@@ -49797,7 +49974,7 @@ var targetMatchesTab = (target, tab) => {
|
|
|
49797
49974
|
}
|
|
49798
49975
|
return Boolean(target.title && target.title === tab.title && target.url === tab.url);
|
|
49799
49976
|
};
|
|
49800
|
-
var
|
|
49977
|
+
var delay8 = (ms3) => new Promise((resolve2) => setTimeout(resolve2, ms3));
|
|
49801
49978
|
var formatError6 = (error) => error instanceof Error ? error.message : String(error);
|
|
49802
49979
|
|
|
49803
49980
|
// dist/commands/extension/show.js
|
|
@@ -50176,19 +50353,19 @@ var waitForSelectedTarget = async (watcher, target, options = {}) => {
|
|
|
50176
50353
|
const [status, targets] = await Promise.all([fetchWatcherStatus(watcher), fetchExtensionTargets(watcher)]);
|
|
50177
50354
|
if (!status.ok) {
|
|
50178
50355
|
lastError = status.error;
|
|
50179
|
-
await
|
|
50356
|
+
await delay9(intervalMs);
|
|
50180
50357
|
continue;
|
|
50181
50358
|
}
|
|
50182
50359
|
if (!targets.ok) {
|
|
50183
50360
|
lastError = targets.error;
|
|
50184
|
-
await
|
|
50361
|
+
await delay9(intervalMs);
|
|
50185
50362
|
continue;
|
|
50186
50363
|
}
|
|
50187
50364
|
const selected = targets.targets.find((entry) => entry.id === target.id && entry.attached === true);
|
|
50188
50365
|
if (selected && statusMatchesTarget(status.status, selected) && status.status.targetReady !== false) {
|
|
50189
50366
|
return { ok: true, status: status.status, target: selected };
|
|
50190
50367
|
}
|
|
50191
|
-
await
|
|
50368
|
+
await delay9(intervalMs);
|
|
50192
50369
|
}
|
|
50193
50370
|
return { ok: false, error: lastError };
|
|
50194
50371
|
};
|
|
@@ -50334,7 +50511,7 @@ var originOf = (url) => {
|
|
|
50334
50511
|
}
|
|
50335
50512
|
};
|
|
50336
50513
|
var shortenId = (id) => id.length > 18 ? `${id.slice(0, 14)}...` : id;
|
|
50337
|
-
var
|
|
50514
|
+
var delay9 = (ms3) => new Promise((resolve2) => setTimeout(resolve2, ms3));
|
|
50338
50515
|
var formatError8 = (error) => error instanceof Error ? error.message : String(error);
|
|
50339
50516
|
|
|
50340
50517
|
// dist/commands/extension/use.js
|
|
@@ -50750,22 +50927,43 @@ var extensionCommands = [
|
|
|
50750
50927
|
description: "Browser extension management",
|
|
50751
50928
|
subcommands: [
|
|
50752
50929
|
{
|
|
50753
|
-
name: "
|
|
50754
|
-
description: "
|
|
50930
|
+
name: "install",
|
|
50931
|
+
description: "Set up the extension end-to-end: install hosts, open chrome://extensions, wait for connect",
|
|
50932
|
+
options: [
|
|
50933
|
+
{ flags: "--no-open", description: "Do not open chrome://extensions automatically" },
|
|
50934
|
+
{ flags: "--no-wait", description: "Do not wait for the extension to connect" },
|
|
50935
|
+
{ flags: "--timeout <seconds>", description: "Seconds to wait for the extension to connect (default 120)" },
|
|
50936
|
+
jsonOption2
|
|
50937
|
+
],
|
|
50938
|
+
examples: ["argus extension install", "argus extension install --no-open", "argus extension install --no-wait --json"],
|
|
50939
|
+
action: async (options) => {
|
|
50940
|
+
await runExtensionInstall(options);
|
|
50941
|
+
}
|
|
50942
|
+
},
|
|
50943
|
+
{
|
|
50944
|
+
name: "setup [extensionId]",
|
|
50945
|
+
description: "Install native messaging host (uses the pinned extension ID by default)",
|
|
50755
50946
|
options: [jsonOption2],
|
|
50756
50947
|
configure: (command) => {
|
|
50757
50948
|
command.addHelpText("after", `
|
|
50758
|
-
|
|
50759
|
-
|
|
50760
|
-
|
|
50761
|
-
3. Load argus-extension as unpacked
|
|
50762
|
-
4. Copy the ID from the extension card
|
|
50949
|
+
The Argus extension pins a stable ID, so no argument is needed.
|
|
50950
|
+
Prefer \`argus extension install\` for the guided, end-to-end flow.
|
|
50951
|
+
Pass an explicit id only when loading a differently-keyed build.
|
|
50763
50952
|
`);
|
|
50764
50953
|
},
|
|
50765
50954
|
action: async (extensionId, options) => {
|
|
50766
50955
|
await runExtensionSetup({ extensionId, ...options });
|
|
50767
50956
|
}
|
|
50768
50957
|
},
|
|
50958
|
+
{
|
|
50959
|
+
name: "path",
|
|
50960
|
+
description: 'Print the path to the unpacked extension for chrome://extensions "Load unpacked"',
|
|
50961
|
+
options: [jsonOption2],
|
|
50962
|
+
examples: ["argus extension path", "argus extension path --json"],
|
|
50963
|
+
action: (options) => {
|
|
50964
|
+
runExtensionPath(options);
|
|
50965
|
+
}
|
|
50966
|
+
},
|
|
50769
50967
|
{
|
|
50770
50968
|
name: "remove",
|
|
50771
50969
|
description: "Uninstall native messaging host",
|
|
@@ -50923,9 +51121,9 @@ same sticky shown+focused lock as \`argus page show <watcherId>\`.
|
|
|
50923
51121
|
];
|
|
50924
51122
|
|
|
50925
51123
|
// dist/commands/skill.js
|
|
50926
|
-
import
|
|
50927
|
-
import
|
|
50928
|
-
import { fileURLToPath as
|
|
51124
|
+
import fs19 from "node:fs";
|
|
51125
|
+
import path24 from "node:path";
|
|
51126
|
+
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
50929
51127
|
var SKILL_PATH_PARTS = ["skill", "argus", "SKILL.md"];
|
|
50930
51128
|
var runSkill = (options) => {
|
|
50931
51129
|
const output = createOutput(options);
|
|
@@ -50950,18 +51148,18 @@ ${resolveArgusSkillCandidates().join(`
|
|
|
50950
51148
|
};
|
|
50951
51149
|
var resolveArgusSkillPath = () => {
|
|
50952
51150
|
for (const candidate of resolveArgusSkillCandidates()) {
|
|
50953
|
-
if (
|
|
51151
|
+
if (fs19.existsSync(candidate)) {
|
|
50954
51152
|
return candidate;
|
|
50955
51153
|
}
|
|
50956
51154
|
}
|
|
50957
51155
|
return null;
|
|
50958
51156
|
};
|
|
50959
51157
|
var resolveArgusSkillCandidates = () => {
|
|
50960
|
-
const moduleDir =
|
|
51158
|
+
const moduleDir = path24.dirname(fileURLToPath3(import.meta.url));
|
|
50961
51159
|
return [
|
|
50962
|
-
|
|
50963
|
-
|
|
50964
|
-
|
|
51160
|
+
path24.resolve(moduleDir, ...SKILL_PATH_PARTS),
|
|
51161
|
+
path24.resolve(moduleDir, "..", ...SKILL_PATH_PARTS),
|
|
51162
|
+
path24.resolve(moduleDir, "..", "..", "..", "..", ...SKILL_PATH_PARTS)
|
|
50965
51163
|
];
|
|
50966
51164
|
};
|
|
50967
51165
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensionCommands.d.ts","sourceRoot":"","sources":["../../../src/cli/register/extensionCommands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"extensionCommands.d.ts","sourceRoot":"","sources":["../../../src/cli/register/extensionCommands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AA6DjE,eAAO,MAAM,iBAAiB,EAAE,SAAS,sBAAsB,EA+L9D,CAAA"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { runExtensionInstall } from '../../commands/extension/install.js';
|
|
1
2
|
import { runExtensionSetup } from '../../commands/extension/setup.js';
|
|
3
|
+
import { runExtensionPath } from '../../commands/extension/extensionPath.js';
|
|
2
4
|
import { runExtensionRemove } from '../../commands/extension/remove.js';
|
|
3
5
|
import { runExtensionStatus } from '../../commands/extension/status.js';
|
|
4
6
|
import { runExtensionInfo } from '../../commands/extension/info.js';
|
|
@@ -56,16 +58,39 @@ export const extensionCommands = [
|
|
|
56
58
|
description: 'Browser extension management',
|
|
57
59
|
subcommands: [
|
|
58
60
|
{
|
|
59
|
-
name: '
|
|
60
|
-
description: '
|
|
61
|
+
name: 'install',
|
|
62
|
+
description: 'Set up the extension end-to-end: install hosts, open chrome://extensions, wait for connect',
|
|
63
|
+
options: [
|
|
64
|
+
{ flags: '--no-open', description: 'Do not open chrome://extensions automatically' },
|
|
65
|
+
{ flags: '--no-wait', description: 'Do not wait for the extension to connect' },
|
|
66
|
+
{ flags: '--timeout <seconds>', description: 'Seconds to wait for the extension to connect (default 120)' },
|
|
67
|
+
jsonOption,
|
|
68
|
+
],
|
|
69
|
+
examples: ['argus extension install', 'argus extension install --no-open', 'argus extension install --no-wait --json'],
|
|
70
|
+
action: async (options) => {
|
|
71
|
+
await runExtensionInstall(options);
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'setup [extensionId]',
|
|
76
|
+
description: 'Install native messaging host (uses the pinned extension ID by default)',
|
|
61
77
|
options: [jsonOption],
|
|
62
78
|
configure: (command) => {
|
|
63
|
-
command.addHelpText('after', '\
|
|
79
|
+
command.addHelpText('after', '\nThe Argus extension pins a stable ID, so no argument is needed.\nPrefer `argus extension install` for the guided, end-to-end flow.\nPass an explicit id only when loading a differently-keyed build.\n');
|
|
64
80
|
},
|
|
65
81
|
action: async (extensionId, options) => {
|
|
66
82
|
await runExtensionSetup({ extensionId, ...options });
|
|
67
83
|
},
|
|
68
84
|
},
|
|
85
|
+
{
|
|
86
|
+
name: 'path',
|
|
87
|
+
description: 'Print the path to the unpacked extension for chrome://extensions "Load unpacked"',
|
|
88
|
+
options: [jsonOption],
|
|
89
|
+
examples: ['argus extension path', 'argus extension path --json'],
|
|
90
|
+
action: (options) => {
|
|
91
|
+
runExtensionPath(options);
|
|
92
|
+
},
|
|
93
|
+
},
|
|
69
94
|
{
|
|
70
95
|
name: 'remove',
|
|
71
96
|
description: 'Uninstall native messaging host',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensionCommands.js","sourceRoot":"","sources":["../../../src/cli/register/extensionCommands.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"extensionCommands.js","sourceRoot":"","sources":["../../../src/cli/register/extensionCommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stable Chrome extension ID for the Argus CDP Bridge.
|
|
3
|
+
*
|
|
4
|
+
* The extension's `manifest.json` pins a public `key`, so Chrome derives this
|
|
5
|
+
* exact ID on every machine and install path (instead of a path-dependent id).
|
|
6
|
+
* Because the ID is constant, `argus extension setup`/`install` need no ID
|
|
7
|
+
* argument and the native messaging host manifest never has to be rewritten.
|
|
8
|
+
*
|
|
9
|
+
* Source of truth: `packages/argus-extension/key.pem` (gitignored). Regenerate
|
|
10
|
+
* both values with `bun run --cwd packages/argus-extension generate-key`, which
|
|
11
|
+
* updates the manifest `key` and prints the matching id. The drift guard in
|
|
12
|
+
* `packages/argus/test/extension-id.test.ts` keeps these three in sync.
|
|
13
|
+
*/
|
|
14
|
+
export declare const ARGUS_EXTENSION_ID = "ibhecpfiodfmkpflcnnkkgnjifheefhb";
|
|
15
|
+
/** Base64 SPKI public key pinned as the extension manifest `key` field. */
|
|
16
|
+
export declare const ARGUS_EXTENSION_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt1lmJWE8y/3by5FlIta/a35cckp3mOVkFSmn8imDO+6S4xsD7naFwonrRMlMMd6lljOBG+sa5YgiMEeR1XwwyZlSDqXIOaNdizChK8wjtjhYldRmax9NQCbhejFWRyIDsR+B7xmbRsroCnSG667JR6D3q8L5v2Qbd/4rH+zZniqUdZKOPJEyjOBEbWoytX3nTWbJvCy+AHznAtnkIWysQyibUkMIBxDGNBSpx507Cc6kMrWZpnCSkjKtRj7qLpMEat4xQdkOhh3mZCisSimQoMD2Axhnqmyacj8IoKDQX+xkb6qLArO7nWr6QD4rOVWrTdgSBg+4TfW3C2zDCP5UhwIDAQAB";
|
|
17
|
+
/**
|
|
18
|
+
* Derive a Chrome extension ID from a base64 SPKI public key, matching Chrome's
|
|
19
|
+
* algorithm: SHA-256 of the DER public key, first 16 bytes, each hex nibble
|
|
20
|
+
* mapped 0-f -> a-p.
|
|
21
|
+
*
|
|
22
|
+
* @param publicKeyBase64 - Base64-encoded DER (SPKI) public key, i.e. the value
|
|
23
|
+
* of the manifest `key` field.
|
|
24
|
+
* @returns The 32-character extension ID.
|
|
25
|
+
*/
|
|
26
|
+
export declare const deriveExtensionId: (publicKeyBase64: string) => string;
|
|
27
|
+
//# sourceMappingURL=extensionId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extensionId.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/extensionId.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,qCAAqC,CAAA;AAEpE,2EAA2E;AAC3E,eAAO,MAAM,0BAA0B,6YACoW,CAAA;AAE3Y;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAAI,iBAAiB,MAAM,KAAG,MAS3D,CAAA"}
|