agentvigil 1.0.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.
Files changed (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +76 -0
  3. package/dist/commands/autostart.d.ts +3 -0
  4. package/dist/commands/autostart.d.ts.map +1 -0
  5. package/dist/commands/autostart.js +57 -0
  6. package/dist/commands/autostart.js.map +1 -0
  7. package/dist/commands/daemon.d.ts +31 -0
  8. package/dist/commands/daemon.d.ts.map +1 -0
  9. package/dist/commands/daemon.js +131 -0
  10. package/dist/commands/daemon.js.map +1 -0
  11. package/dist/commands/setup.d.ts +5 -0
  12. package/dist/commands/setup.d.ts.map +1 -0
  13. package/dist/commands/setup.js +158 -0
  14. package/dist/commands/setup.js.map +1 -0
  15. package/dist/commands/start.d.ts +2 -0
  16. package/dist/commands/start.d.ts.map +1 -0
  17. package/dist/commands/start.js +89 -0
  18. package/dist/commands/start.js.map +1 -0
  19. package/dist/commands/uninstall.d.ts +7 -0
  20. package/dist/commands/uninstall.d.ts.map +1 -0
  21. package/dist/commands/uninstall.js +13 -0
  22. package/dist/commands/uninstall.js.map +1 -0
  23. package/dist/crypto/encryption.d.ts +11 -0
  24. package/dist/crypto/encryption.d.ts.map +1 -0
  25. package/dist/crypto/encryption.js +57 -0
  26. package/dist/crypto/encryption.js.map +1 -0
  27. package/dist/hooks/hook-handler.d.ts +18 -0
  28. package/dist/hooks/hook-handler.d.ts.map +1 -0
  29. package/dist/hooks/hook-handler.js +256 -0
  30. package/dist/hooks/hook-handler.js.map +1 -0
  31. package/dist/hooks/hook-manager.d.ts +22 -0
  32. package/dist/hooks/hook-manager.d.ts.map +1 -0
  33. package/dist/hooks/hook-manager.js +133 -0
  34. package/dist/hooks/hook-manager.js.map +1 -0
  35. package/dist/index.d.ts +3 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +88 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/notifications/fcm-client.d.ts +15 -0
  40. package/dist/notifications/fcm-client.d.ts.map +1 -0
  41. package/dist/notifications/fcm-client.js +72 -0
  42. package/dist/notifications/fcm-client.js.map +1 -0
  43. package/dist/notifications/ntfy-client.d.ts +6 -0
  44. package/dist/notifications/ntfy-client.d.ts.map +1 -0
  45. package/dist/notifications/ntfy-client.js +51 -0
  46. package/dist/notifications/ntfy-client.js.map +1 -0
  47. package/dist/relay/relay-handler.d.ts +51 -0
  48. package/dist/relay/relay-handler.d.ts.map +1 -0
  49. package/dist/relay/relay-handler.js +325 -0
  50. package/dist/relay/relay-handler.js.map +1 -0
  51. package/dist/sessions/keystroke-injector.d.ts +4 -0
  52. package/dist/sessions/keystroke-injector.d.ts.map +1 -0
  53. package/dist/sessions/keystroke-injector.js +216 -0
  54. package/dist/sessions/keystroke-injector.js.map +1 -0
  55. package/dist/sessions/process-detector.d.ts +27 -0
  56. package/dist/sessions/process-detector.d.ts.map +1 -0
  57. package/dist/sessions/process-detector.js +180 -0
  58. package/dist/sessions/process-detector.js.map +1 -0
  59. package/dist/sessions/session-manager.d.ts +37 -0
  60. package/dist/sessions/session-manager.d.ts.map +1 -0
  61. package/dist/sessions/session-manager.js +90 -0
  62. package/dist/sessions/session-manager.js.map +1 -0
  63. package/dist/sessions/session-poller.d.ts +18 -0
  64. package/dist/sessions/session-poller.d.ts.map +1 -0
  65. package/dist/sessions/session-poller.js +73 -0
  66. package/dist/sessions/session-poller.js.map +1 -0
  67. package/dist/sessions/session-watcher.d.ts +20 -0
  68. package/dist/sessions/session-watcher.d.ts.map +1 -0
  69. package/dist/sessions/session-watcher.js +71 -0
  70. package/dist/sessions/session-watcher.js.map +1 -0
  71. package/dist/sessions/tmux-bridge.d.ts +11 -0
  72. package/dist/sessions/tmux-bridge.d.ts.map +1 -0
  73. package/dist/sessions/tmux-bridge.js +67 -0
  74. package/dist/sessions/tmux-bridge.js.map +1 -0
  75. package/dist/tunnel/tunnel-manager.d.ts +8 -0
  76. package/dist/tunnel/tunnel-manager.d.ts.map +1 -0
  77. package/dist/tunnel/tunnel-manager.js +57 -0
  78. package/dist/tunnel/tunnel-manager.js.map +1 -0
  79. package/dist/tunnel/websocket-server.d.ts +48 -0
  80. package/dist/tunnel/websocket-server.d.ts.map +1 -0
  81. package/dist/tunnel/websocket-server.js +173 -0
  82. package/dist/tunnel/websocket-server.js.map +1 -0
  83. package/dist/types.d.ts +37 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +2 -0
  86. package/dist/types.js.map +1 -0
  87. package/dist/utils/config.d.ts +23 -0
  88. package/dist/utils/config.d.ts.map +1 -0
  89. package/dist/utils/config.js +54 -0
  90. package/dist/utils/config.js.map +1 -0
  91. package/dist/utils/logger.d.ts +9 -0
  92. package/dist/utils/logger.d.ts.map +1 -0
  93. package/dist/utils/logger.js +11 -0
  94. package/dist/utils/logger.js.map +1 -0
  95. package/dist/utils/qr.d.ts +19 -0
  96. package/dist/utils/qr.d.ts.map +1 -0
  97. package/dist/utils/qr.js +17 -0
  98. package/dist/utils/qr.js.map +1 -0
  99. package/package.json +67 -0
@@ -0,0 +1,23 @@
1
+ export interface PairedDevice {
2
+ name: string;
3
+ device_id: string;
4
+ public_key: string;
5
+ shared_secret: string;
6
+ paired_at: string;
7
+ }
8
+ export interface Config {
9
+ version: number;
10
+ device_id: string;
11
+ ntfy_topic: string;
12
+ paired_devices: PairedDevice[];
13
+ ws_port: number;
14
+ tunnel_url?: string;
15
+ /** Phone's FCM registration token — enables direct push when the app is killed. */
16
+ fcm_token?: string;
17
+ }
18
+ export declare function createDefaultConfig(): Config;
19
+ export declare function getConfig(): Promise<Config>;
20
+ export declare function saveConfig(config: Config): Promise<void>;
21
+ export declare function ensureCloudflared(): Promise<boolean>;
22
+ export declare function isCloudflaredInstalled(): Promise<boolean>;
23
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAQ5C;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAajD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG9D;AAQD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO1D;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAEzD"}
@@ -0,0 +1,54 @@
1
+ import fs from 'node:fs/promises';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { execFile } from 'node:child_process';
5
+ import { randomBytes } from 'node:crypto';
6
+ import { v4 as uuidv4 } from 'uuid';
7
+ import { logger } from './logger.js';
8
+ const CONFIG_DIR = path.join(os.homedir(), '.agentvigil');
9
+ const CONFIG_PATH = path.join(CONFIG_DIR, 'config.json');
10
+ export function createDefaultConfig() {
11
+ return {
12
+ version: 1,
13
+ device_id: uuidv4(),
14
+ ntfy_topic: `agentvigil-${randomBytes(16).toString('hex')}`,
15
+ paired_devices: [],
16
+ ws_port: 3847,
17
+ };
18
+ }
19
+ export async function getConfig() {
20
+ try {
21
+ const raw = await fs.readFile(CONFIG_PATH, 'utf8');
22
+ return JSON.parse(raw);
23
+ }
24
+ catch (err) {
25
+ if (err.code !== 'ENOENT') {
26
+ logger.warn('~/.agentvigil/config.json is malformed — backing it up and starting fresh');
27
+ await fs.copyFile(CONFIG_PATH, `${CONFIG_PATH}.bak`).catch(() => { });
28
+ }
29
+ const config = createDefaultConfig();
30
+ await saveConfig(config);
31
+ return config;
32
+ }
33
+ }
34
+ export async function saveConfig(config) {
35
+ await fs.mkdir(CONFIG_DIR, { recursive: true });
36
+ await fs.writeFile(CONFIG_PATH, JSON.stringify(config, null, 2), 'utf8');
37
+ }
38
+ function commandExists(command) {
39
+ return new Promise((resolve) => {
40
+ execFile('which', [command], (error) => resolve(!error));
41
+ });
42
+ }
43
+ export async function ensureCloudflared() {
44
+ if (await commandExists('cloudflared'))
45
+ return true;
46
+ logger.warn('cloudflared not found');
47
+ logger.info('Install with: brew install cloudflared');
48
+ logger.info('Or: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/');
49
+ return false;
50
+ }
51
+ export function isCloudflaredInstalled() {
52
+ return commandExists('cloudflared');
53
+ }
54
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAqBzD,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,MAAM,EAAE;QACnB,UAAU,EAAE,cAAc,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QAC3D,cAAc,EAAE,EAAE;QAClB,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAW,CAAC;IACnC,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;YACzF,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,WAAW,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc;IAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,MAAM,aAAa,CAAC,aAAa,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpD,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACrC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACtD,MAAM,CAAC,IAAI,CAAC,8FAA8F,CAAC,CAAC;IAC5G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,aAAa,CAAC,aAAa,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const logger: {
2
+ info: (msg: string, ...args: any[]) => void;
3
+ success: (msg: string, ...args: any[]) => void;
4
+ warn: (msg: string, ...args: any[]) => void;
5
+ error: (msg: string, ...args: any[]) => void;
6
+ dim: (msg: string, ...args: any[]) => void;
7
+ banner: (msg: string) => void;
8
+ };
9
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,MAAM;gBACF,MAAM,WAAW,GAAG,EAAE;mBACtB,MAAM,WAAW,GAAG,EAAE;gBACtB,MAAM,WAAW,GAAG,EAAE;iBACtB,MAAM,WAAW,GAAG,EAAE;eACtB,MAAM,WAAW,GAAG,EAAE;kBACtB,MAAM;CACtB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import chalk from 'chalk';
2
+ const timestamp = () => new Date().toISOString().substring(11, 23);
3
+ export const logger = {
4
+ info: (msg, ...args) => console.log(`${chalk.dim(timestamp())} ${chalk.blue('ℹ')} ${msg}`, ...args),
5
+ success: (msg, ...args) => console.log(`${chalk.dim(timestamp())} ${chalk.green('✓')} ${msg}`, ...args),
6
+ warn: (msg, ...args) => console.warn(`${chalk.dim(timestamp())} ${chalk.yellow('⚠')} ${msg}`, ...args),
7
+ error: (msg, ...args) => console.error(`${chalk.dim(timestamp())} ${chalk.red('✗')} ${msg}`, ...args),
8
+ dim: (msg, ...args) => console.log(`${chalk.dim(timestamp())} ${chalk.dim(msg)}`, ...args),
9
+ banner: (msg) => console.log('\n' + chalk.bold.cyan(msg) + '\n'),
10
+ };
11
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAK,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IACrH,OAAO,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IACtH,IAAI,EAAK,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IACxH,KAAK,EAAI,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IACtH,GAAG,EAAM,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC;IAC7G,MAAM,EAAG,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CAC1E,CAAC"}
@@ -0,0 +1,19 @@
1
+ declare const QR_PAYLOAD_VERSION = 1;
2
+ export interface QrPayload {
3
+ v: typeof QR_PAYLOAD_VERSION;
4
+ wss: string;
5
+ ntfy: string;
6
+ device_id: string;
7
+ pub_key: string;
8
+ expires: string;
9
+ }
10
+ export interface QrPayloadInput {
11
+ tunnelUrl: string;
12
+ ntfyTopic: string;
13
+ deviceId: string;
14
+ publicKey: string;
15
+ }
16
+ export declare function buildQrPayload(input: QrPayloadInput): QrPayload;
17
+ export declare function generateQrCode(payload: QrPayload): void;
18
+ export {};
19
+ //# sourceMappingURL=qr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.d.ts","sourceRoot":"","sources":["../../src/utils/qr.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,kBAAkB,IAAI,CAAC;AAG7B,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,OAAO,kBAAkB,CAAC;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,CAS/D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,IAAI,CAEvD"}
@@ -0,0 +1,17 @@
1
+ import qrcodeTerminal from 'qrcode-terminal';
2
+ const QR_PAYLOAD_VERSION = 1;
3
+ const EXPIRY_MS = 5 * 60 * 1000;
4
+ export function buildQrPayload(input) {
5
+ return {
6
+ v: QR_PAYLOAD_VERSION,
7
+ wss: input.tunnelUrl,
8
+ ntfy: input.ntfyTopic,
9
+ device_id: input.deviceId,
10
+ pub_key: input.publicKey,
11
+ expires: new Date(Date.now() + EXPIRY_MS).toISOString(),
12
+ };
13
+ }
14
+ export function generateQrCode(payload) {
15
+ qrcodeTerminal.generate(JSON.stringify(payload), { small: true });
16
+ }
17
+ //# sourceMappingURL=qr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.js","sourceRoot":"","sources":["../../src/utils/qr.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAE7C,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAkBhC,MAAM,UAAU,cAAc,CAAC,KAAqB;IAClD,OAAO;QACL,CAAC,EAAE,kBAAkB;QACrB,GAAG,EAAE,KAAK,CAAC,SAAS;QACpB,IAAI,EAAE,KAAK,CAAC,SAAS;QACrB,SAAS,EAAE,KAAK,CAAC,QAAQ;QACzB,OAAO,EAAE,KAAK,CAAC,SAAS;QACxB,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,WAAW,EAAE;KACxD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAkB;IAC/C,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACpE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "agentvigil",
3
+ "version": "1.0.0",
4
+ "description": "Fleet watchdog for AI coding agent sessions — monitor Claude Code, Codex and Amp from your phone",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "agentvigil": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist/",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "homepage": "https://agentvigil.app",
16
+ "bugs": {
17
+ "url": "https://github.com/mdusaama0/agentvigil-mac/issues"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/mdusaama0/agentvigil-mac.git"
22
+ },
23
+ "author": "Md Usama",
24
+ "scripts": {
25
+ "build": "tsc",
26
+ "dev": "tsx watch src/index.ts",
27
+ "start": "node dist/index.js",
28
+ "setup": "tsx src/index.ts setup",
29
+ "lint": "eslint src/",
30
+ "test": "vitest run",
31
+ "prepublishOnly": "npm run build"
32
+ },
33
+ "keywords": [
34
+ "claude-code",
35
+ "ai-agent",
36
+ "developer-tools"
37
+ ],
38
+ "license": "MIT",
39
+ "dependencies": {
40
+ "axios": "^1.7.7",
41
+ "chalk": "^5.3.0",
42
+ "chokidar": "^3.6.0",
43
+ "commander": "^12.1.0",
44
+ "firebase-admin": "^14.0.0",
45
+ "node-fetch": "^3.3.2",
46
+ "node-pty": "^1.0.0",
47
+ "ora": "^8.1.0",
48
+ "qrcode-terminal": "^0.12.0",
49
+ "tweetnacl": "^1.0.3",
50
+ "tweetnacl-util": "^0.15.1",
51
+ "uuid": "^10.0.0",
52
+ "ws": "^8.18.0"
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "^22.7.4",
56
+ "@types/uuid": "^10.0.0",
57
+ "@types/ws": "^8.5.12",
58
+ "eslint": "^9.11.1",
59
+ "tsx": "^4.19.1",
60
+ "typescript": "^5.6.2",
61
+ "typescript-eslint": "^8.61.0",
62
+ "vitest": "^2.1.1"
63
+ },
64
+ "engines": {
65
+ "node": ">=18.0.0"
66
+ }
67
+ }