@vforsh/argus 0.1.15 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/argus.js +691 -285
  3. package/dist/cli/register/registerEval.d.ts.map +1 -1
  4. package/dist/cli/register/registerEval.js +6 -0
  5. package/dist/cli/register/registerEval.js.map +1 -1
  6. package/dist/cli/register/registerExtension.d.ts.map +1 -1
  7. package/dist/cli/register/registerExtension.js +24 -1
  8. package/dist/cli/register/registerExtension.js.map +1 -1
  9. package/dist/cli/register/registerWatcher.d.ts.map +1 -1
  10. package/dist/cli/register/registerWatcher.js +1 -0
  11. package/dist/cli/register/registerWatcher.js.map +1 -1
  12. package/dist/commands/eval.d.ts +2 -0
  13. package/dist/commands/eval.d.ts.map +1 -1
  14. package/dist/commands/eval.js.map +1 -1
  15. package/dist/commands/evalBundle.d.ts +17 -0
  16. package/dist/commands/evalBundle.d.ts.map +1 -0
  17. package/dist/commands/evalBundle.js +119 -0
  18. package/dist/commands/evalBundle.js.map +1 -0
  19. package/dist/commands/evalShared.d.ts +1 -0
  20. package/dist/commands/evalShared.d.ts.map +1 -1
  21. package/dist/commands/evalShared.js +21 -3
  22. package/dist/commands/evalShared.js.map +1 -1
  23. package/dist/commands/evalUntil.d.ts +2 -0
  24. package/dist/commands/evalUntil.d.ts.map +1 -1
  25. package/dist/commands/evalUntil.js.map +1 -1
  26. package/dist/commands/extension/attach.d.ts +12 -0
  27. package/dist/commands/extension/attach.d.ts.map +1 -0
  28. package/dist/commands/extension/attach.js +175 -0
  29. package/dist/commands/extension/attach.js.map +1 -0
  30. package/dist/commands/extension/info.d.ts.map +1 -1
  31. package/dist/commands/extension/info.js +13 -33
  32. package/dist/commands/extension/info.js.map +1 -1
  33. package/dist/commands/extension/nativeHost.d.ts +35 -5
  34. package/dist/commands/extension/nativeHost.d.ts.map +1 -1
  35. package/dist/commands/extension/nativeHost.js +95 -12
  36. package/dist/commands/extension/nativeHost.js.map +1 -1
  37. package/dist/commands/extension/remove.d.ts.map +1 -1
  38. package/dist/commands/extension/remove.js +18 -38
  39. package/dist/commands/extension/remove.js.map +1 -1
  40. package/dist/commands/extension/resolveExtensionWatcher.d.ts +1 -1
  41. package/dist/commands/extension/resolveExtensionWatcher.d.ts.map +1 -1
  42. package/dist/commands/extension/resolveExtensionWatcher.js +15 -29
  43. package/dist/commands/extension/resolveExtensionWatcher.js.map +1 -1
  44. package/dist/commands/extension/setup.d.ts.map +1 -1
  45. package/dist/commands/extension/setup.js +20 -35
  46. package/dist/commands/extension/setup.js.map +1 -1
  47. package/dist/commands/extension/status.d.ts.map +1 -1
  48. package/dist/commands/extension/status.js +12 -38
  49. package/dist/commands/extension/status.js.map +1 -1
  50. package/dist/commands/watcherNativeHost.d.ts +1 -0
  51. package/dist/commands/watcherNativeHost.d.ts.map +1 -1
  52. package/dist/commands/watcherNativeHost.js +8 -2
  53. package/dist/commands/watcherNativeHost.js.map +1 -1
  54. package/package.json +3 -2
@@ -1,8 +1,9 @@
1
1
  import { pruneRegistry } from '../../registry.js';
2
2
  import { fetchWatcherJson } from '../../watchers/requestWatcher.js';
3
+ import { CONTROL_WATCHER_ID } from './nativeHost.js';
3
4
  /**
4
5
  * Resolve a watcher that is known to be backed by the Chrome extension transport.
5
- * When id is omitted, mirror the generic watcher heuristics but only across extension watchers.
6
+ * When id is omitted, use the browser-level control watcher.
6
7
  */
7
8
  export const resolveExtensionWatcher = async (input) => {
8
9
  let registry;
@@ -27,38 +28,23 @@ export const resolveExtensionWatcher = async (input) => {
27
28
  if (extensionWatchers.length === 0) {
28
29
  return {
29
30
  ok: false,
30
- error: 'No extension-backed watchers found. Attach a tab in the extension popup first.',
31
+ error: 'No extension-backed watchers found. Reload the extension after `argus extension setup`, or attach a tab in the extension popup.',
31
32
  exitCode: 2,
32
33
  };
33
34
  }
34
- const reachability = await Promise.all(extensionWatchers.map(async (watcher) => ({
35
- watcher,
36
- status: await checkWatcherStatus(watcher),
37
- })));
38
- const attached = reachability.filter((entry) => entry.status.ok && entry.status.status.attached);
39
- if (attached.length === 1) {
40
- return { ok: true, watcher: attached[0].watcher, registry };
41
- }
42
- const cwd = process.cwd();
43
- const cwdMatches = extensionWatchers.filter((watcher) => watcher.cwd === cwd);
44
- const attachedCwdMatches = attached.filter((entry) => entry.watcher.cwd === cwd);
45
- if (attachedCwdMatches.length === 1) {
46
- return { ok: true, watcher: attachedCwdMatches[0].watcher, registry };
47
- }
48
- if (attached.length > 1) {
49
- return { ok: false, error: 'Watcher id required.', exitCode: 2, candidates: attached.map((entry) => entry.watcher) };
50
- }
51
- if (cwdMatches.length === 1) {
52
- return { ok: true, watcher: cwdMatches[0], registry };
53
- }
54
- if (cwdMatches.length > 1) {
55
- return { ok: false, error: 'Watcher id required.', exitCode: 2, candidates: cwdMatches };
56
- }
57
- const reachable = reachability.filter((entry) => entry.status.ok);
58
- if (reachable.length === 1) {
59
- return { ok: true, watcher: reachable[0].watcher, registry };
35
+ const controlWatcher = registry.watchers[CONTROL_WATCHER_ID];
36
+ if (controlWatcher?.source === 'extension') {
37
+ const status = await checkWatcherStatus(controlWatcher);
38
+ if (status.ok) {
39
+ return { ok: true, watcher: controlWatcher, registry };
40
+ }
60
41
  }
61
- return { ok: false, error: 'Watcher id required.', exitCode: 2, candidates: extensionWatchers };
42
+ return {
43
+ ok: false,
44
+ error: 'extension-control watcher is unavailable. Reload the extension after `argus extension setup`.',
45
+ exitCode: 2,
46
+ candidates: extensionWatchers,
47
+ };
62
48
  };
63
49
  const getExtensionWatchers = (watchers) => watchers.filter((watcher) => watcher.source === 'extension');
64
50
  const checkWatcherStatus = async (watcher) => {
@@ -1 +1 @@
1
- {"version":3,"file":"resolveExtensionWatcher.js","sourceRoot":"","sources":["../../../src/commands/extension/resolveExtensionWatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveExtensionWatcher.js","sourceRoot":"","sources":["../../../src/commands/extension/resolveExtensionWatcher.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/setup.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAU,SAAS,qBAAqB,KAAG,OAAO,CAAC,IAAI,CAoFpF,CAAA"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/setup.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAU,SAAS,qBAAqB,KAAG,OAAO,CAAC,IAAI,CAmEpF,CAAA"}
@@ -1,7 +1,5 @@
1
- import fs from 'node:fs';
2
- import { execSync } from 'node:child_process';
3
1
  import { createOutput } from '../../output/io.js';
4
- import { HOST_NAME, getPlatform, getManifestDir, getManifestPath, getWrapperPath, findArgusExecutable, createManifest, createWrapperScript, shortenPath, } from './nativeHost.js';
2
+ import { getPlatform, findArgusExecutable, installNativeHosts, shortenPath } from './nativeHost.js';
5
3
  export const runExtensionSetup = async (options) => {
6
4
  const output = createOutput(options);
7
5
  const { extensionId } = options;
@@ -19,11 +17,6 @@ export const runExtensionSetup = async (options) => {
19
17
  process.exitCode = 1;
20
18
  return;
21
19
  }
22
- const manifestDir = getManifestDir(platform);
23
- const manifestPath = getManifestPath(platform);
24
- const wrapperPath = getWrapperPath(platform);
25
- // Ensure directory exists
26
- fs.mkdirSync(manifestDir, { recursive: true });
27
20
  // Find argus executable
28
21
  let executablePath;
29
22
  try {
@@ -39,50 +32,42 @@ export const runExtensionSetup = async (options) => {
39
32
  process.exitCode = 1;
40
33
  return;
41
34
  }
42
- // Create wrapper script
43
- createWrapperScript(platform, executablePath);
44
- // Create manifest
45
- const manifest = createManifest(extensionId, wrapperPath);
46
- fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
47
- // Windows: Add registry key
48
- if (platform === 'win32') {
49
- const regKey = `HKCU\\Software\\Google\\Chrome\\NativeMessagingHosts\\${HOST_NAME}`;
50
- try {
51
- execSync(`reg add "${regKey}" /ve /t REG_SZ /d "${manifestPath}" /f`, { stdio: 'pipe' });
35
+ let installedHosts;
36
+ try {
37
+ installedHosts = installNativeHosts(platform, extensionId, executablePath);
38
+ }
39
+ catch (error) {
40
+ if (options.json) {
41
+ output.writeJson({ success: false, error: `Failed to install native hosts: ${error.message}` });
52
42
  }
53
- catch (error) {
54
- if (options.json) {
55
- output.writeJson({ success: false, error: `Failed to add registry key: ${error.message}` });
56
- }
57
- else {
58
- console.error('Failed to add registry key:', error);
59
- }
60
- process.exitCode = 1;
61
- return;
43
+ else {
44
+ console.error('Failed to install native hosts:', error);
62
45
  }
46
+ process.exitCode = 1;
47
+ return;
63
48
  }
64
49
  if (options.json) {
65
50
  output.writeJson({
66
51
  success: true,
67
- hostName: HOST_NAME,
68
52
  extensionId,
69
- manifestPath,
70
- wrapperPath,
53
+ hosts: installedHosts,
71
54
  argusPath: executablePath,
72
55
  });
73
56
  }
74
57
  else {
75
58
  output.writeHuman('');
76
- output.writeHuman('Native messaging host installed');
59
+ output.writeHuman('Native messaging hosts installed');
77
60
  output.writeHuman('');
78
- output.writeHuman(` Host name: ${HOST_NAME}`);
79
61
  output.writeHuman(` Extension ID: ${extensionId}`);
80
- output.writeHuman(` Manifest: ${shortenPath(manifestPath)}`);
81
- output.writeHuman(` Wrapper: ${shortenPath(wrapperPath)}`);
62
+ for (const host of installedHosts) {
63
+ output.writeHuman(` Host name: ${host.hostName}`);
64
+ output.writeHuman(` Manifest: ${shortenPath(host.manifestPath)}`);
65
+ output.writeHuman(` Wrapper: ${shortenPath(host.wrapperPath)}`);
66
+ }
82
67
  output.writeHuman('');
83
68
  output.writeHuman('Next steps:');
84
69
  output.writeHuman(' 1. Reload the extension in chrome://extensions');
85
- output.writeHuman(' 2. Open the extension popup and attach a tab');
70
+ output.writeHuman(' 2. Run `argus ext tabs` or open the extension popup and attach a tab');
86
71
  output.writeHuman('');
87
72
  }
88
73
  };
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/extension/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/extension/setup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/status.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,sBAAsB,GAAG;IACpC,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,SAAS,sBAAsB,KAAG,OAAO,CAAC,IAAI,CAkFtF,CAAA"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/extension/status.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,sBAAsB,GAAG;IACpC,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,SAAS,sBAAsB,KAAG,OAAO,CAAC,IAAI,CAuDtF,CAAA"}
@@ -1,6 +1,5 @@
1
- import fs from 'node:fs';
2
1
  import { createOutput } from '../../output/io.js';
3
- import { HOST_NAME, getPlatform, getManifestPath, getWrapperPath, readManifest, isWrapperExecutable } from './nativeHost.js';
2
+ import { getPlatform, inspectNativeHosts } from './nativeHost.js';
4
3
  export const runExtensionStatus = async (options) => {
5
4
  const output = createOutput(options);
6
5
  let platform;
@@ -17,40 +16,14 @@ export const runExtensionStatus = async (options) => {
17
16
  process.exitCode = 1;
18
17
  return;
19
18
  }
20
- const manifestPath = getManifestPath(platform);
21
- const wrapperPath = getWrapperPath(platform);
22
- const manifestExists = fs.existsSync(manifestPath);
23
- const wrapperExists = fs.existsSync(wrapperPath);
24
- const wrapperExecutable = wrapperExists && isWrapperExecutable(wrapperPath);
25
- let manifest = null;
26
- let manifestValid = false;
27
- let extensionId = null;
28
- if (manifestExists) {
29
- manifest = readManifest(manifestPath);
30
- if (manifest && manifest.name === HOST_NAME && manifest.type === 'stdio' && Array.isArray(manifest.allowed_origins)) {
31
- manifestValid = true;
32
- const origin = manifest.allowed_origins[0];
33
- if (origin) {
34
- const match = origin.match(/^chrome-extension:\/\/([^/]+)\/$/);
35
- if (match) {
36
- extensionId = match[1];
37
- }
38
- }
39
- }
40
- }
41
- const configured = manifestExists && manifestValid && wrapperExists && wrapperExecutable;
19
+ const hosts = inspectNativeHosts(platform);
20
+ const configured = hosts.every((host) => host.configured);
21
+ const extensionId = hosts.find((host) => host.extensionId)?.extensionId ?? null;
42
22
  if (options.json) {
43
23
  output.writeJson({
44
24
  configured,
45
- hostName: HOST_NAME,
46
- manifestPath,
47
- wrapperPath,
48
- manifestExists,
49
- manifestValid,
50
- wrapperExists,
51
- wrapperExecutable,
25
+ hosts,
52
26
  extensionId,
53
- argusPath: manifest?.path ?? null,
54
27
  });
55
28
  if (!configured) {
56
29
  process.exitCode = 1;
@@ -59,17 +32,18 @@ export const runExtensionStatus = async (options) => {
59
32
  }
60
33
  output.writeHuman('');
61
34
  if (configured) {
62
- output.writeHuman('Native messaging host is configured');
35
+ output.writeHuman('Native messaging hosts are configured');
63
36
  output.writeHuman('');
64
- output.writeHuman(` Manifest: exists`);
65
- output.writeHuman(` Wrapper: exists, executable`);
66
37
  output.writeHuman(` Extension ID: ${extensionId}`);
67
38
  }
68
39
  else {
69
- output.writeHuman('Native messaging host not configured');
40
+ output.writeHuman('Native messaging hosts not configured');
70
41
  output.writeHuman('');
71
- output.writeHuman(` Manifest: ${manifestExists ? (manifestValid ? 'exists' : 'exists, invalid') : 'not found'}`);
72
- output.writeHuman(` Wrapper: ${wrapperExists ? (wrapperExecutable ? 'exists, executable' : 'exists, not executable') : 'not found'}`);
42
+ for (const host of hosts) {
43
+ output.writeHuman(` ${host.hostName}`);
44
+ output.writeHuman(` Manifest: ${host.manifestExists ? (host.manifestValid ? 'exists' : 'exists, invalid') : 'not found'}`);
45
+ output.writeHuman(` Wrapper: ${host.wrapperExists ? (host.wrapperExecutable ? 'exists, executable' : 'exists, not executable') : 'not found'}`);
46
+ }
73
47
  if (extensionId) {
74
48
  output.writeHuman(` Extension ID: ${extensionId}`);
75
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/extension/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/extension/status.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@
7
7
  */
8
8
  export type NativeHostOptions = {
9
9
  id?: string;
10
+ role?: string;
10
11
  json?: boolean;
11
12
  };
12
13
  export declare const runWatcherNativeHost: (options: NativeHostOptions) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"watcherNativeHost.d.ts","sourceRoot":"","sources":["../../src/commands/watcherNativeHost.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAU,SAAS,iBAAiB,KAAG,OAAO,CAAC,IAAI,CAoDnF,CAAA"}
1
+ {"version":3,"file":"watcherNativeHost.d.ts","sourceRoot":"","sources":["../../src/commands/watcherNativeHost.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,MAAM,iBAAiB,GAAG;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAU,SAAS,iBAAiB,KAAG,OAAO,CAAC,IAAI,CA0DnF,CAAA"}
@@ -8,15 +8,21 @@
8
8
  import { startWatcher } from '@vforsh/argus-watcher';
9
9
  export const runWatcherNativeHost = async (options) => {
10
10
  const watcherId = options.id?.trim() || 'extension';
11
+ const role = options.role?.trim() || 'tab';
12
+ if (role !== 'tab' && role !== 'control') {
13
+ console.error(`Invalid native host role: ${role}. Expected "tab" or "control".`);
14
+ process.exit(2);
15
+ }
11
16
  let handle;
12
17
  try {
13
18
  handle = await startWatcher({
14
19
  id: watcherId,
15
20
  source: 'extension',
21
+ extensionRole: role,
16
22
  host: '127.0.0.1',
17
23
  port: 0,
18
24
  net: { enabled: true },
19
- pageIndicator: { enabled: true },
25
+ pageIndicator: { enabled: role === 'tab' },
20
26
  });
21
27
  }
22
28
  catch (error) {
@@ -25,7 +31,7 @@ export const runWatcherNativeHost = async (options) => {
25
31
  process.exit(1);
26
32
  }
27
33
  // Log to stderr for debugging (stdout is reserved for Native Messaging)
28
- console.error(`[NativeHost] Watcher started: id=${handle.watcher.id} port=${handle.watcher.port}`);
34
+ console.error(`[NativeHost] Watcher started: id=${handle.watcher.id} role=${role} port=${handle.watcher.port}`);
29
35
  const cleanup = async () => {
30
36
  try {
31
37
  await handle.close();
@@ -1 +1 @@
1
- {"version":3,"file":"watcherNativeHost.js","sourceRoot":"","sources":["../../src/commands/watcherNativeHost.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAA;AAOxE,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAA0B,EAAiB,EAAE;IACvF,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,WAAW,CAAA;IAEnD,IAAI,MAAqB,CAAA;IACzB,IAAI,CAAC;QACJ,MAAM,GAAG,MAAM,YAAY,CAAC;YAC3B,EAAE,EAAE,SAAS;YACb,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACtB,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SAChC,CAAC,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,6DAA6D;QAC7D,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IAED,wEAAwE;IACxE,OAAO,CAAC,KAAK,CAAC,oCAAoC,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAElG,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACzC,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;IACF,CAAC,CAAA;IACD,IAAI,YAAY,GAAG,KAAK,CAAA;IACxB,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC3B,IAAI,YAAY,EAAE,CAAC;YAClB,OAAM;QACP,CAAC;QACD,YAAY,GAAG,IAAI,CAAA;QACnB,KAAK,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAA;IAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACzB,QAAQ,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QAC1B,QAAQ,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IAEF,gFAAgF;IAChF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACjC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAEnC,mEAAmE;IACnE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AAC5B,CAAC,CAAA"}
1
+ {"version":3,"file":"watcherNativeHost.js","sourceRoot":"","sources":["../../src/commands/watcherNativeHost.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAsB,MAAM,uBAAuB,CAAA;AAQxE,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAA0B,EAAiB,EAAE;IACvF,MAAM,SAAS,GAAG,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,WAAW,CAAA;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,CAAA;IAC1C,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,6BAA6B,IAAI,gCAAgC,CAAC,CAAA;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,MAAqB,CAAA;IACzB,IAAI,CAAC;QACJ,MAAM,GAAG,MAAM,YAAY,CAAC;YAC3B,EAAE,EAAE,SAAS;YACb,MAAM,EAAE,WAAW;YACnB,aAAa,EAAE,IAAI;YACnB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,CAAC;YACP,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACtB,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,KAAK,KAAK,EAAE;SAC1C,CAAC,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,6DAA6D;QAC7D,OAAO,CAAC,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IAED,wEAAwE;IACxE,OAAO,CAAC,KAAK,CAAC,oCAAoC,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,IAAI,SAAS,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAE/G,MAAM,OAAO,GAAG,KAAK,IAAmB,EAAE;QACzC,IAAI,CAAC;YACJ,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QACrB,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;IACF,CAAC,CAAA;IACD,IAAI,YAAY,GAAG,KAAK,CAAA;IACxB,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC3B,IAAI,YAAY,EAAE,CAAC;YAClB,OAAM;QACP,CAAC;QACD,YAAY,GAAG,IAAI,CAAA;QACnB,KAAK,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAA;IAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACzB,QAAQ,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QAC1B,QAAQ,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IAEF,gFAAgF;IAChF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACjC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAEnC,mEAAmE;IACnE,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;AAC5B,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vforsh/argus",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/vforsh/argus.git",
@@ -28,12 +28,13 @@
28
28
  "dependencies": {
29
29
  "@vforsh/argus-plugin-api": "workspace:*",
30
30
  "commander": "14.0.2",
31
+ "esbuild": "0.25.12",
31
32
  "prettier": "3.7.4"
32
33
  },
33
34
  "scripts": {
34
35
  "clean": "node ../../scripts/clean-dist.mjs",
35
36
  "build": "npm run clean && tsc -b && bun run bundle",
36
- "bundle": "bun build dist/bin.js --outfile dist/argus.js --target node",
37
+ "bundle": "bun build dist/bin.js --outfile dist/argus.js --target node --external esbuild",
37
38
  "typecheck": "tsc -b --pretty false",
38
39
  "chrome:start": "bun src/bin.ts chrome start"
39
40
  }