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.
- package/LICENSE +21 -0
- package/README.md +76 -0
- package/dist/commands/autostart.d.ts +3 -0
- package/dist/commands/autostart.d.ts.map +1 -0
- package/dist/commands/autostart.js +57 -0
- package/dist/commands/autostart.js.map +1 -0
- package/dist/commands/daemon.d.ts +31 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +131 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/setup.d.ts +5 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +158 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +89 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/uninstall.d.ts +7 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +13 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/crypto/encryption.d.ts +11 -0
- package/dist/crypto/encryption.d.ts.map +1 -0
- package/dist/crypto/encryption.js +57 -0
- package/dist/crypto/encryption.js.map +1 -0
- package/dist/hooks/hook-handler.d.ts +18 -0
- package/dist/hooks/hook-handler.d.ts.map +1 -0
- package/dist/hooks/hook-handler.js +256 -0
- package/dist/hooks/hook-handler.js.map +1 -0
- package/dist/hooks/hook-manager.d.ts +22 -0
- package/dist/hooks/hook-manager.d.ts.map +1 -0
- package/dist/hooks/hook-manager.js +133 -0
- package/dist/hooks/hook-manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +88 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications/fcm-client.d.ts +15 -0
- package/dist/notifications/fcm-client.d.ts.map +1 -0
- package/dist/notifications/fcm-client.js +72 -0
- package/dist/notifications/fcm-client.js.map +1 -0
- package/dist/notifications/ntfy-client.d.ts +6 -0
- package/dist/notifications/ntfy-client.d.ts.map +1 -0
- package/dist/notifications/ntfy-client.js +51 -0
- package/dist/notifications/ntfy-client.js.map +1 -0
- package/dist/relay/relay-handler.d.ts +51 -0
- package/dist/relay/relay-handler.d.ts.map +1 -0
- package/dist/relay/relay-handler.js +325 -0
- package/dist/relay/relay-handler.js.map +1 -0
- package/dist/sessions/keystroke-injector.d.ts +4 -0
- package/dist/sessions/keystroke-injector.d.ts.map +1 -0
- package/dist/sessions/keystroke-injector.js +216 -0
- package/dist/sessions/keystroke-injector.js.map +1 -0
- package/dist/sessions/process-detector.d.ts +27 -0
- package/dist/sessions/process-detector.d.ts.map +1 -0
- package/dist/sessions/process-detector.js +180 -0
- package/dist/sessions/process-detector.js.map +1 -0
- package/dist/sessions/session-manager.d.ts +37 -0
- package/dist/sessions/session-manager.d.ts.map +1 -0
- package/dist/sessions/session-manager.js +90 -0
- package/dist/sessions/session-manager.js.map +1 -0
- package/dist/sessions/session-poller.d.ts +18 -0
- package/dist/sessions/session-poller.d.ts.map +1 -0
- package/dist/sessions/session-poller.js +73 -0
- package/dist/sessions/session-poller.js.map +1 -0
- package/dist/sessions/session-watcher.d.ts +20 -0
- package/dist/sessions/session-watcher.d.ts.map +1 -0
- package/dist/sessions/session-watcher.js +71 -0
- package/dist/sessions/session-watcher.js.map +1 -0
- package/dist/sessions/tmux-bridge.d.ts +11 -0
- package/dist/sessions/tmux-bridge.d.ts.map +1 -0
- package/dist/sessions/tmux-bridge.js +67 -0
- package/dist/sessions/tmux-bridge.js.map +1 -0
- package/dist/tunnel/tunnel-manager.d.ts +8 -0
- package/dist/tunnel/tunnel-manager.d.ts.map +1 -0
- package/dist/tunnel/tunnel-manager.js +57 -0
- package/dist/tunnel/tunnel-manager.js.map +1 -0
- package/dist/tunnel/websocket-server.d.ts +48 -0
- package/dist/tunnel/websocket-server.d.ts.map +1 -0
- package/dist/tunnel/websocket-server.js +173 -0
- package/dist/tunnel/websocket-server.js.map +1 -0
- package/dist/types.d.ts +37 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config.d.ts +23 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +54 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +9 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +11 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/qr.d.ts +19 -0
- package/dist/utils/qr.d.ts.map +1 -0
- package/dist/utils/qr.js +17 -0
- package/dist/utils/qr.js.map +1 -0
- 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"}
|
package/dist/utils/qr.js
ADDED
|
@@ -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
|
+
}
|