visionclaw 0.1.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/README.md +116 -0
- package/dist/agent/context.d.ts +56 -0
- package/dist/agent/context.d.ts.map +1 -0
- package/dist/agent/context.js +142 -0
- package/dist/agent/context.js.map +1 -0
- package/dist/agent/loop.d.ts +18 -0
- package/dist/agent/loop.d.ts.map +1 -0
- package/dist/agent/loop.js +323 -0
- package/dist/agent/loop.js.map +1 -0
- package/dist/agent/session.d.ts +49 -0
- package/dist/agent/session.d.ts.map +1 -0
- package/dist/agent/session.js +200 -0
- package/dist/agent/session.js.map +1 -0
- package/dist/agent/system-prompt.d.ts +10 -0
- package/dist/agent/system-prompt.d.ts.map +1 -0
- package/dist/agent/system-prompt.js +167 -0
- package/dist/agent/system-prompt.js.map +1 -0
- package/dist/calendar/google-calendar.d.ts +46 -0
- package/dist/calendar/google-calendar.d.ts.map +1 -0
- package/dist/calendar/google-calendar.js +132 -0
- package/dist/calendar/google-calendar.js.map +1 -0
- package/dist/calendar/scheduler.d.ts +7 -0
- package/dist/calendar/scheduler.d.ts.map +1 -0
- package/dist/calendar/scheduler.js +33 -0
- package/dist/calendar/scheduler.js.map +1 -0
- package/dist/channels/discord.d.ts +19 -0
- package/dist/channels/discord.d.ts.map +1 -0
- package/dist/channels/discord.js +169 -0
- package/dist/channels/discord.js.map +1 -0
- package/dist/channels/gmail.d.ts +31 -0
- package/dist/channels/gmail.d.ts.map +1 -0
- package/dist/channels/gmail.js +300 -0
- package/dist/channels/gmail.js.map +1 -0
- package/dist/channels/interface.d.ts +45 -0
- package/dist/channels/interface.d.ts.map +1 -0
- package/dist/channels/interface.js +2 -0
- package/dist/channels/interface.js.map +1 -0
- package/dist/channels/manager.d.ts +36 -0
- package/dist/channels/manager.d.ts.map +1 -0
- package/dist/channels/manager.js +108 -0
- package/dist/channels/manager.js.map +1 -0
- package/dist/channels/queue.d.ts +17 -0
- package/dist/channels/queue.d.ts.map +1 -0
- package/dist/channels/queue.js +85 -0
- package/dist/channels/queue.js.map +1 -0
- package/dist/channels/slack.d.ts +17 -0
- package/dist/channels/slack.d.ts.map +1 -0
- package/dist/channels/slack.js +142 -0
- package/dist/channels/slack.js.map +1 -0
- package/dist/channels/sms.d.ts +19 -0
- package/dist/channels/sms.d.ts.map +1 -0
- package/dist/channels/sms.js +111 -0
- package/dist/channels/sms.js.map +1 -0
- package/dist/channels/telegram.d.ts +28 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/channels/telegram.js +246 -0
- package/dist/channels/telegram.js.map +1 -0
- package/dist/channels/whatsapp.d.ts +28 -0
- package/dist/channels/whatsapp.d.ts.map +1 -0
- package/dist/channels/whatsapp.js +292 -0
- package/dist/channels/whatsapp.js.map +1 -0
- package/dist/config/index.d.ts +24 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +104 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/types.d.ts +227 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +45 -0
- package/dist/config/types.js.map +1 -0
- package/dist/files.d.ts +20 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +82 -0
- package/dist/files.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +76 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +384 -0
- package/dist/logger.js.map +1 -0
- package/dist/memory/store.d.ts +24 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +71 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/obs/server.d.ts +10 -0
- package/dist/obs/server.d.ts.map +1 -0
- package/dist/obs/server.js +406 -0
- package/dist/obs/server.js.map +1 -0
- package/dist/onboarding/google-auth.d.ts +11 -0
- package/dist/onboarding/google-auth.d.ts.map +1 -0
- package/dist/onboarding/google-auth.js +113 -0
- package/dist/onboarding/google-auth.js.map +1 -0
- package/dist/onboarding/index.d.ts +2 -0
- package/dist/onboarding/index.d.ts.map +1 -0
- package/dist/onboarding/index.js +213 -0
- package/dist/onboarding/index.js.map +1 -0
- package/dist/onboarding/macos-permissions.d.ts +37 -0
- package/dist/onboarding/macos-permissions.d.ts.map +1 -0
- package/dist/onboarding/macos-permissions.js +207 -0
- package/dist/onboarding/macos-permissions.js.map +1 -0
- package/dist/skills/install.d.ts +7 -0
- package/dist/skills/install.d.ts.map +1 -0
- package/dist/skills/install.js +63 -0
- package/dist/skills/install.js.map +1 -0
- package/dist/tools/browser.d.ts +7 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +202 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/calendar.d.ts +12 -0
- package/dist/tools/calendar.d.ts.map +1 -0
- package/dist/tools/calendar.js +210 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/computer-use.d.ts +28 -0
- package/dist/tools/computer-use.d.ts.map +1 -0
- package/dist/tools/computer-use.js +311 -0
- package/dist/tools/computer-use.js.map +1 -0
- package/dist/tools/coordinate-resolver.d.ts +26 -0
- package/dist/tools/coordinate-resolver.d.ts.map +1 -0
- package/dist/tools/coordinate-resolver.js +157 -0
- package/dist/tools/coordinate-resolver.js.map +1 -0
- package/dist/tools/desktop-executor.d.ts +52 -0
- package/dist/tools/desktop-executor.d.ts.map +1 -0
- package/dist/tools/desktop-executor.js +202 -0
- package/dist/tools/desktop-executor.js.map +1 -0
- package/dist/tools/finish.d.ts +5 -0
- package/dist/tools/finish.d.ts.map +1 -0
- package/dist/tools/finish.js +18 -0
- package/dist/tools/finish.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +37 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory.d.ts +14 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +269 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/notify.d.ts +12 -0
- package/dist/tools/notify.d.ts.map +1 -0
- package/dist/tools/notify.js +108 -0
- package/dist/tools/notify.js.map +1 -0
- package/dist/tools/screenshot.d.ts +7 -0
- package/dist/tools/screenshot.d.ts.map +1 -0
- package/dist/tools/screenshot.js +189 -0
- package/dist/tools/screenshot.js.map +1 -0
- package/dist/tools/skill.d.ts +8 -0
- package/dist/tools/skill.d.ts.map +1 -0
- package/dist/tools/skill.js +133 -0
- package/dist/tools/skill.js.map +1 -0
- package/dist/tools/upgrade.d.ts +5 -0
- package/dist/tools/upgrade.d.ts.map +1 -0
- package/dist/tools/upgrade.js +89 -0
- package/dist/tools/upgrade.js.map +1 -0
- package/dist/tools/wait.d.ts +5 -0
- package/dist/tools/wait.d.ts.map +1 -0
- package/dist/tools/wait.js +21 -0
- package/dist/tools/wait.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type VisionClawConfig, type GoogleTokens } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Set the active profile. Must be called before any config access.
|
|
4
|
+
* Profile names must be lowercase alphanumeric with hyphens.
|
|
5
|
+
*/
|
|
6
|
+
export declare function setProfile(name: string): void;
|
|
7
|
+
export declare function getProfile(): string;
|
|
8
|
+
export declare function getBaseDir(): string;
|
|
9
|
+
export declare function getProfilesDir(): string;
|
|
10
|
+
export declare function getConfigDir(): string;
|
|
11
|
+
export declare function getConfigFile(): string;
|
|
12
|
+
export declare function getTokensFile(): string;
|
|
13
|
+
export declare function getSessionFile(): string;
|
|
14
|
+
export declare function getSkillsDir(): string;
|
|
15
|
+
export declare function getMemoriesDir(): string;
|
|
16
|
+
export declare function ensureConfigDir(): void;
|
|
17
|
+
export declare function configExists(): boolean;
|
|
18
|
+
export declare function loadConfig(): VisionClawConfig;
|
|
19
|
+
export declare function saveConfig(config: VisionClawConfig): void;
|
|
20
|
+
export declare function loadGoogleTokens(): GoogleTokens;
|
|
21
|
+
export declare function saveGoogleTokens(tokens: GoogleTokens): void;
|
|
22
|
+
export declare function loadSessionId(): string | null;
|
|
23
|
+
export declare function saveSessionId(sessionId: string): void;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AAOpB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAO7C;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,eAAe,IAAI,IAAI,CAatC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED,wBAAgB,UAAU,IAAI,gBAAgB,CAS7C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAGzD;AAED,wBAAgB,gBAAgB,IAAI,YAAY,CAS/C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAG3D;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAY7C;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAOrD"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import { VisionClawConfigSchema, GoogleTokensSchema, } from "./types.js";
|
|
5
|
+
const BASE_DIR = path.join(os.homedir(), ".visionclaw");
|
|
6
|
+
const PROFILES_DIR = path.join(BASE_DIR, "profiles");
|
|
7
|
+
let currentProfile = "default";
|
|
8
|
+
/**
|
|
9
|
+
* Set the active profile. Must be called before any config access.
|
|
10
|
+
* Profile names must be lowercase alphanumeric with hyphens.
|
|
11
|
+
*/
|
|
12
|
+
export function setProfile(name) {
|
|
13
|
+
if (!/^[a-z0-9][a-z0-9-]*$/.test(name)) {
|
|
14
|
+
throw new Error(`Invalid profile name "${name}". Use lowercase letters, numbers, and hyphens.`);
|
|
15
|
+
}
|
|
16
|
+
currentProfile = name;
|
|
17
|
+
}
|
|
18
|
+
export function getProfile() {
|
|
19
|
+
return currentProfile;
|
|
20
|
+
}
|
|
21
|
+
export function getBaseDir() {
|
|
22
|
+
return BASE_DIR;
|
|
23
|
+
}
|
|
24
|
+
export function getProfilesDir() {
|
|
25
|
+
return PROFILES_DIR;
|
|
26
|
+
}
|
|
27
|
+
export function getConfigDir() {
|
|
28
|
+
return path.join(PROFILES_DIR, currentProfile);
|
|
29
|
+
}
|
|
30
|
+
export function getConfigFile() {
|
|
31
|
+
return path.join(getConfigDir(), "config.json");
|
|
32
|
+
}
|
|
33
|
+
export function getTokensFile() {
|
|
34
|
+
return path.join(getConfigDir(), "google-tokens.json");
|
|
35
|
+
}
|
|
36
|
+
export function getSessionFile() {
|
|
37
|
+
return path.join(getConfigDir(), "session.json");
|
|
38
|
+
}
|
|
39
|
+
export function getSkillsDir() {
|
|
40
|
+
return path.join(getConfigDir(), ".claude", "skills");
|
|
41
|
+
}
|
|
42
|
+
export function getMemoriesDir() {
|
|
43
|
+
return path.join(getConfigDir(), "memories");
|
|
44
|
+
}
|
|
45
|
+
export function ensureConfigDir() {
|
|
46
|
+
const configDir = getConfigDir();
|
|
47
|
+
if (!fs.existsSync(configDir)) {
|
|
48
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
49
|
+
}
|
|
50
|
+
const skillsDir = getSkillsDir();
|
|
51
|
+
if (!fs.existsSync(skillsDir)) {
|
|
52
|
+
fs.mkdirSync(skillsDir, { recursive: true });
|
|
53
|
+
}
|
|
54
|
+
const memoriesDir = getMemoriesDir();
|
|
55
|
+
if (!fs.existsSync(memoriesDir)) {
|
|
56
|
+
fs.mkdirSync(memoriesDir, { recursive: true });
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function configExists() {
|
|
60
|
+
return fs.existsSync(getConfigFile());
|
|
61
|
+
}
|
|
62
|
+
export function loadConfig() {
|
|
63
|
+
const configFile = getConfigFile();
|
|
64
|
+
if (!fs.existsSync(configFile)) {
|
|
65
|
+
throw new Error(`Config not found at ${configFile}. Run 'visionclaw --profile ${currentProfile}' to start onboarding.`);
|
|
66
|
+
}
|
|
67
|
+
const raw = JSON.parse(fs.readFileSync(configFile, "utf-8"));
|
|
68
|
+
return VisionClawConfigSchema.parse(raw);
|
|
69
|
+
}
|
|
70
|
+
export function saveConfig(config) {
|
|
71
|
+
ensureConfigDir();
|
|
72
|
+
fs.writeFileSync(getConfigFile(), JSON.stringify(config, null, 2), "utf-8");
|
|
73
|
+
}
|
|
74
|
+
export function loadGoogleTokens() {
|
|
75
|
+
const tokensFile = getTokensFile();
|
|
76
|
+
if (!fs.existsSync(tokensFile)) {
|
|
77
|
+
throw new Error(`Google tokens not found at ${tokensFile}. Run onboarding again.`);
|
|
78
|
+
}
|
|
79
|
+
const raw = JSON.parse(fs.readFileSync(tokensFile, "utf-8"));
|
|
80
|
+
return GoogleTokensSchema.parse(raw);
|
|
81
|
+
}
|
|
82
|
+
export function saveGoogleTokens(tokens) {
|
|
83
|
+
ensureConfigDir();
|
|
84
|
+
fs.writeFileSync(getTokensFile(), JSON.stringify(tokens, null, 2), "utf-8");
|
|
85
|
+
}
|
|
86
|
+
export function loadSessionId() {
|
|
87
|
+
const sessionFile = getSessionFile();
|
|
88
|
+
if (!fs.existsSync(sessionFile)) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
const raw = JSON.parse(fs.readFileSync(sessionFile, "utf-8"));
|
|
93
|
+
const parsed = raw;
|
|
94
|
+
return parsed.sessionId ?? null;
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export function saveSessionId(sessionId) {
|
|
101
|
+
ensureConfigDir();
|
|
102
|
+
fs.writeFileSync(getSessionFile(), JSON.stringify({ sessionId, updatedAt: new Date().toISOString() }, null, 2), "utf-8");
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const GoogleTokensSchema: z.ZodObject<{
|
|
3
|
+
access_token: z.ZodString;
|
|
4
|
+
refresh_token: z.ZodString;
|
|
5
|
+
token_type: z.ZodDefault<z.ZodString>;
|
|
6
|
+
expiry_date: z.ZodNumber;
|
|
7
|
+
scope: z.ZodString;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
access_token: string;
|
|
10
|
+
refresh_token: string;
|
|
11
|
+
token_type: string;
|
|
12
|
+
expiry_date: number;
|
|
13
|
+
scope: string;
|
|
14
|
+
}, {
|
|
15
|
+
access_token: string;
|
|
16
|
+
refresh_token: string;
|
|
17
|
+
expiry_date: number;
|
|
18
|
+
scope: string;
|
|
19
|
+
token_type?: string | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
export type GoogleTokens = z.infer<typeof GoogleTokensSchema>;
|
|
22
|
+
export declare const ChannelConfigSchema: z.ZodObject<{
|
|
23
|
+
telegram: z.ZodOptional<z.ZodObject<{
|
|
24
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
25
|
+
botToken: z.ZodOptional<z.ZodString>;
|
|
26
|
+
allowedChatIds: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
|
|
27
|
+
}, "strip", z.ZodTypeAny, {
|
|
28
|
+
enabled: boolean;
|
|
29
|
+
allowedChatIds: number[];
|
|
30
|
+
botToken?: string | undefined;
|
|
31
|
+
}, {
|
|
32
|
+
enabled?: boolean | undefined;
|
|
33
|
+
botToken?: string | undefined;
|
|
34
|
+
allowedChatIds?: number[] | undefined;
|
|
35
|
+
}>>;
|
|
36
|
+
discord: z.ZodOptional<z.ZodObject<{
|
|
37
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
38
|
+
botToken: z.ZodOptional<z.ZodString>;
|
|
39
|
+
allowedChannelIds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
40
|
+
}, "strip", z.ZodTypeAny, {
|
|
41
|
+
enabled: boolean;
|
|
42
|
+
allowedChannelIds: string[];
|
|
43
|
+
botToken?: string | undefined;
|
|
44
|
+
}, {
|
|
45
|
+
enabled?: boolean | undefined;
|
|
46
|
+
botToken?: string | undefined;
|
|
47
|
+
allowedChannelIds?: string[] | undefined;
|
|
48
|
+
}>>;
|
|
49
|
+
}, "strip", z.ZodTypeAny, {
|
|
50
|
+
telegram?: {
|
|
51
|
+
enabled: boolean;
|
|
52
|
+
allowedChatIds: number[];
|
|
53
|
+
botToken?: string | undefined;
|
|
54
|
+
} | undefined;
|
|
55
|
+
discord?: {
|
|
56
|
+
enabled: boolean;
|
|
57
|
+
allowedChannelIds: string[];
|
|
58
|
+
botToken?: string | undefined;
|
|
59
|
+
} | undefined;
|
|
60
|
+
}, {
|
|
61
|
+
telegram?: {
|
|
62
|
+
enabled?: boolean | undefined;
|
|
63
|
+
botToken?: string | undefined;
|
|
64
|
+
allowedChatIds?: number[] | undefined;
|
|
65
|
+
} | undefined;
|
|
66
|
+
discord?: {
|
|
67
|
+
enabled?: boolean | undefined;
|
|
68
|
+
botToken?: string | undefined;
|
|
69
|
+
allowedChannelIds?: string[] | undefined;
|
|
70
|
+
} | undefined;
|
|
71
|
+
}>;
|
|
72
|
+
export type ChannelConfig = z.infer<typeof ChannelConfigSchema>;
|
|
73
|
+
export declare const ObsConfigSchema: z.ZodObject<{
|
|
74
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
75
|
+
host: z.ZodDefault<z.ZodString>;
|
|
76
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
77
|
+
bufferSize: z.ZodDefault<z.ZodNumber>;
|
|
78
|
+
}, "strip", z.ZodTypeAny, {
|
|
79
|
+
enabled: boolean;
|
|
80
|
+
host: string;
|
|
81
|
+
port: number;
|
|
82
|
+
bufferSize: number;
|
|
83
|
+
}, {
|
|
84
|
+
enabled?: boolean | undefined;
|
|
85
|
+
host?: string | undefined;
|
|
86
|
+
port?: number | undefined;
|
|
87
|
+
bufferSize?: number | undefined;
|
|
88
|
+
}>;
|
|
89
|
+
export type ObsConfig = z.infer<typeof ObsConfigSchema>;
|
|
90
|
+
export declare const VisionClawConfigSchema: z.ZodObject<{
|
|
91
|
+
agentName: z.ZodDefault<z.ZodString>;
|
|
92
|
+
ownerName: z.ZodDefault<z.ZodString>;
|
|
93
|
+
ownerEmail: z.ZodOptional<z.ZodString>;
|
|
94
|
+
gmail: z.ZodString;
|
|
95
|
+
googleClientId: z.ZodString;
|
|
96
|
+
googleClientSecret: z.ZodString;
|
|
97
|
+
phoneNumber: z.ZodOptional<z.ZodString>;
|
|
98
|
+
anthropicApiKey: z.ZodString;
|
|
99
|
+
channels: z.ZodDefault<z.ZodObject<{
|
|
100
|
+
telegram: z.ZodOptional<z.ZodObject<{
|
|
101
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
102
|
+
botToken: z.ZodOptional<z.ZodString>;
|
|
103
|
+
allowedChatIds: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
|
|
104
|
+
}, "strip", z.ZodTypeAny, {
|
|
105
|
+
enabled: boolean;
|
|
106
|
+
allowedChatIds: number[];
|
|
107
|
+
botToken?: string | undefined;
|
|
108
|
+
}, {
|
|
109
|
+
enabled?: boolean | undefined;
|
|
110
|
+
botToken?: string | undefined;
|
|
111
|
+
allowedChatIds?: number[] | undefined;
|
|
112
|
+
}>>;
|
|
113
|
+
discord: z.ZodOptional<z.ZodObject<{
|
|
114
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
115
|
+
botToken: z.ZodOptional<z.ZodString>;
|
|
116
|
+
allowedChannelIds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
117
|
+
}, "strip", z.ZodTypeAny, {
|
|
118
|
+
enabled: boolean;
|
|
119
|
+
allowedChannelIds: string[];
|
|
120
|
+
botToken?: string | undefined;
|
|
121
|
+
}, {
|
|
122
|
+
enabled?: boolean | undefined;
|
|
123
|
+
botToken?: string | undefined;
|
|
124
|
+
allowedChannelIds?: string[] | undefined;
|
|
125
|
+
}>>;
|
|
126
|
+
}, "strip", z.ZodTypeAny, {
|
|
127
|
+
telegram?: {
|
|
128
|
+
enabled: boolean;
|
|
129
|
+
allowedChatIds: number[];
|
|
130
|
+
botToken?: string | undefined;
|
|
131
|
+
} | undefined;
|
|
132
|
+
discord?: {
|
|
133
|
+
enabled: boolean;
|
|
134
|
+
allowedChannelIds: string[];
|
|
135
|
+
botToken?: string | undefined;
|
|
136
|
+
} | undefined;
|
|
137
|
+
}, {
|
|
138
|
+
telegram?: {
|
|
139
|
+
enabled?: boolean | undefined;
|
|
140
|
+
botToken?: string | undefined;
|
|
141
|
+
allowedChatIds?: number[] | undefined;
|
|
142
|
+
} | undefined;
|
|
143
|
+
discord?: {
|
|
144
|
+
enabled?: boolean | undefined;
|
|
145
|
+
botToken?: string | undefined;
|
|
146
|
+
allowedChannelIds?: string[] | undefined;
|
|
147
|
+
} | undefined;
|
|
148
|
+
}>>;
|
|
149
|
+
obs: z.ZodDefault<z.ZodObject<{
|
|
150
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
151
|
+
host: z.ZodDefault<z.ZodString>;
|
|
152
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
153
|
+
bufferSize: z.ZodDefault<z.ZodNumber>;
|
|
154
|
+
}, "strip", z.ZodTypeAny, {
|
|
155
|
+
enabled: boolean;
|
|
156
|
+
host: string;
|
|
157
|
+
port: number;
|
|
158
|
+
bufferSize: number;
|
|
159
|
+
}, {
|
|
160
|
+
enabled?: boolean | undefined;
|
|
161
|
+
host?: string | undefined;
|
|
162
|
+
port?: number | undefined;
|
|
163
|
+
bufferSize?: number | undefined;
|
|
164
|
+
}>>;
|
|
165
|
+
heartbeatIntervalMs: z.ZodDefault<z.ZodNumber>;
|
|
166
|
+
skillsDir: z.ZodOptional<z.ZodString>;
|
|
167
|
+
}, "strip", z.ZodTypeAny, {
|
|
168
|
+
agentName: string;
|
|
169
|
+
ownerName: string;
|
|
170
|
+
gmail: string;
|
|
171
|
+
googleClientId: string;
|
|
172
|
+
googleClientSecret: string;
|
|
173
|
+
anthropicApiKey: string;
|
|
174
|
+
channels: {
|
|
175
|
+
telegram?: {
|
|
176
|
+
enabled: boolean;
|
|
177
|
+
allowedChatIds: number[];
|
|
178
|
+
botToken?: string | undefined;
|
|
179
|
+
} | undefined;
|
|
180
|
+
discord?: {
|
|
181
|
+
enabled: boolean;
|
|
182
|
+
allowedChannelIds: string[];
|
|
183
|
+
botToken?: string | undefined;
|
|
184
|
+
} | undefined;
|
|
185
|
+
};
|
|
186
|
+
obs: {
|
|
187
|
+
enabled: boolean;
|
|
188
|
+
host: string;
|
|
189
|
+
port: number;
|
|
190
|
+
bufferSize: number;
|
|
191
|
+
};
|
|
192
|
+
heartbeatIntervalMs: number;
|
|
193
|
+
ownerEmail?: string | undefined;
|
|
194
|
+
phoneNumber?: string | undefined;
|
|
195
|
+
skillsDir?: string | undefined;
|
|
196
|
+
}, {
|
|
197
|
+
gmail: string;
|
|
198
|
+
googleClientId: string;
|
|
199
|
+
googleClientSecret: string;
|
|
200
|
+
anthropicApiKey: string;
|
|
201
|
+
agentName?: string | undefined;
|
|
202
|
+
ownerName?: string | undefined;
|
|
203
|
+
ownerEmail?: string | undefined;
|
|
204
|
+
phoneNumber?: string | undefined;
|
|
205
|
+
channels?: {
|
|
206
|
+
telegram?: {
|
|
207
|
+
enabled?: boolean | undefined;
|
|
208
|
+
botToken?: string | undefined;
|
|
209
|
+
allowedChatIds?: number[] | undefined;
|
|
210
|
+
} | undefined;
|
|
211
|
+
discord?: {
|
|
212
|
+
enabled?: boolean | undefined;
|
|
213
|
+
botToken?: string | undefined;
|
|
214
|
+
allowedChannelIds?: string[] | undefined;
|
|
215
|
+
} | undefined;
|
|
216
|
+
} | undefined;
|
|
217
|
+
obs?: {
|
|
218
|
+
enabled?: boolean | undefined;
|
|
219
|
+
host?: string | undefined;
|
|
220
|
+
port?: number | undefined;
|
|
221
|
+
bufferSize?: number | undefined;
|
|
222
|
+
} | undefined;
|
|
223
|
+
heartbeatIntervalMs?: number | undefined;
|
|
224
|
+
skillsDir?: string | undefined;
|
|
225
|
+
}>;
|
|
226
|
+
export type VisionClawConfig = z.infer<typeof VisionClawConfigSchema>;
|
|
227
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAM7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAK1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAExD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAajC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const GoogleTokensSchema = z.object({
|
|
3
|
+
access_token: z.string(),
|
|
4
|
+
refresh_token: z.string(),
|
|
5
|
+
token_type: z.string().default("Bearer"),
|
|
6
|
+
expiry_date: z.number(),
|
|
7
|
+
scope: z.string(),
|
|
8
|
+
});
|
|
9
|
+
export const ChannelConfigSchema = z.object({
|
|
10
|
+
telegram: z
|
|
11
|
+
.object({
|
|
12
|
+
enabled: z.boolean().default(false),
|
|
13
|
+
botToken: z.string().optional(),
|
|
14
|
+
allowedChatIds: z.array(z.number()).default([]),
|
|
15
|
+
})
|
|
16
|
+
.optional(),
|
|
17
|
+
discord: z
|
|
18
|
+
.object({
|
|
19
|
+
enabled: z.boolean().default(false),
|
|
20
|
+
botToken: z.string().optional(),
|
|
21
|
+
allowedChannelIds: z.array(z.string()).default([]),
|
|
22
|
+
})
|
|
23
|
+
.optional(),
|
|
24
|
+
});
|
|
25
|
+
export const ObsConfigSchema = z.object({
|
|
26
|
+
enabled: z.boolean().default(true),
|
|
27
|
+
host: z.string().default("127.0.0.1"),
|
|
28
|
+
port: z.number().int().default(3101),
|
|
29
|
+
bufferSize: z.number().int().default(1000),
|
|
30
|
+
});
|
|
31
|
+
export const VisionClawConfigSchema = z.object({
|
|
32
|
+
agentName: z.string().default("VisionClaw"),
|
|
33
|
+
ownerName: z.string().default(""),
|
|
34
|
+
ownerEmail: z.string().optional(),
|
|
35
|
+
gmail: z.string().email(),
|
|
36
|
+
googleClientId: z.string(),
|
|
37
|
+
googleClientSecret: z.string(),
|
|
38
|
+
phoneNumber: z.string().optional(),
|
|
39
|
+
anthropicApiKey: z.string(),
|
|
40
|
+
channels: ChannelConfigSchema.default({}),
|
|
41
|
+
obs: ObsConfigSchema.default({}),
|
|
42
|
+
heartbeatIntervalMs: z.number().default(5 * 60 * 1000), // 5 minutes
|
|
43
|
+
skillsDir: z.string().optional(),
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CAClB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KAChD,CAAC;SACD,QAAQ,EAAE;IACb,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KACnD,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAC3C,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;IACzB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE;IAC3B,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;IACzC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAChC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,YAAY;IACpE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC"}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initialize the S3 client for media uploads.
|
|
3
|
+
* Reads S3 config from environment variables.
|
|
4
|
+
*/
|
|
5
|
+
export declare function initScreenshotUploader(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Upload any media buffer to S3 and return a public URL.
|
|
8
|
+
*
|
|
9
|
+
* @param buffer - The file content
|
|
10
|
+
* @param filename - Filename (used as S3 key suffix)
|
|
11
|
+
* @param contentType - MIME type (e.g. "image/png", "audio/ogg")
|
|
12
|
+
* @returns Public URL on success, null on failure
|
|
13
|
+
*/
|
|
14
|
+
export declare function uploadMedia(buffer: Buffer, filename: string, contentType: string): Promise<string | null>;
|
|
15
|
+
/**
|
|
16
|
+
* Upload a PNG screenshot to S3. Thin wrapper around uploadMedia
|
|
17
|
+
* with SHA-256 dedup caching for identical consecutive screenshots.
|
|
18
|
+
*/
|
|
19
|
+
export declare function uploadScreenshot(pngBase64: string): Promise<string | null>;
|
|
20
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAsB7C;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA0BxB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAyBxB"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
|
|
2
|
+
import crypto from "node:crypto";
|
|
3
|
+
import { logger } from "./logger.js";
|
|
4
|
+
let s3 = null;
|
|
5
|
+
let bucket = null;
|
|
6
|
+
let publicEndpoint = null;
|
|
7
|
+
// Screenshot dedup cache
|
|
8
|
+
let lastScreenshotHash = null;
|
|
9
|
+
let lastScreenshotUrl = null;
|
|
10
|
+
/**
|
|
11
|
+
* Initialize the S3 client for media uploads.
|
|
12
|
+
* Reads S3 config from environment variables.
|
|
13
|
+
*/
|
|
14
|
+
export function initScreenshotUploader() {
|
|
15
|
+
const region = process.env.S3_REGION;
|
|
16
|
+
const accessKeyId = process.env.S3_ACCESS_KEY_ID;
|
|
17
|
+
const secretAccessKey = process.env.S3_SECRET_ACCESS_KEY;
|
|
18
|
+
bucket = process.env.S3_BUCKET ?? null;
|
|
19
|
+
publicEndpoint = process.env.GRU_PUBLIC_CONTENT_ENDPOINT ?? null;
|
|
20
|
+
if (!region || !accessKeyId || !secretAccessKey || !bucket) {
|
|
21
|
+
logger.warn("S3 credentials not configured (S3_REGION, S3_BUCKET, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY). Media uploads will be unavailable.");
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
publicEndpoint ??= `https://${bucket}.s3.amazonaws.com`;
|
|
25
|
+
s3 = new S3Client({
|
|
26
|
+
region,
|
|
27
|
+
credentials: { accessKeyId, secretAccessKey },
|
|
28
|
+
});
|
|
29
|
+
logger.debug(`S3 media uploader initialized: ${bucket} (${region})`);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Upload any media buffer to S3 and return a public URL.
|
|
33
|
+
*
|
|
34
|
+
* @param buffer - The file content
|
|
35
|
+
* @param filename - Filename (used as S3 key suffix)
|
|
36
|
+
* @param contentType - MIME type (e.g. "image/png", "audio/ogg")
|
|
37
|
+
* @returns Public URL on success, null on failure
|
|
38
|
+
*/
|
|
39
|
+
export async function uploadMedia(buffer, filename, contentType) {
|
|
40
|
+
if (!s3 || !bucket || !publicEndpoint) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const key = `visionclaw/media/${Date.now()}-${filename}`;
|
|
45
|
+
await s3.send(new PutObjectCommand({
|
|
46
|
+
Bucket: bucket,
|
|
47
|
+
Key: key,
|
|
48
|
+
Body: buffer,
|
|
49
|
+
ContentType: contentType,
|
|
50
|
+
}));
|
|
51
|
+
const url = `${publicEndpoint}/${key}`;
|
|
52
|
+
logger.debug(`Media uploaded to S3: ${key} (${buffer.length} bytes)`);
|
|
53
|
+
return url;
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
logger.warn(`S3 media upload failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Upload a PNG screenshot to S3. Thin wrapper around uploadMedia
|
|
62
|
+
* with SHA-256 dedup caching for identical consecutive screenshots.
|
|
63
|
+
*/
|
|
64
|
+
export async function uploadScreenshot(pngBase64) {
|
|
65
|
+
if (!s3 || !bucket || !publicEndpoint) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
// Hash to detect duplicates
|
|
69
|
+
const hash = crypto.createHash("sha256").update(pngBase64).digest("hex");
|
|
70
|
+
if (hash === lastScreenshotHash && lastScreenshotUrl) {
|
|
71
|
+
logger.debug("Screenshot unchanged, reusing cached URL");
|
|
72
|
+
return lastScreenshotUrl;
|
|
73
|
+
}
|
|
74
|
+
const buffer = Buffer.from(pngBase64, "base64");
|
|
75
|
+
const url = await uploadMedia(buffer, `screenshot-${hash.slice(0, 8)}.png`, "image/png");
|
|
76
|
+
if (url) {
|
|
77
|
+
lastScreenshotHash = hash;
|
|
78
|
+
lastScreenshotUrl = url;
|
|
79
|
+
}
|
|
80
|
+
return url;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,IAAI,EAAE,GAAoB,IAAI,CAAC;AAC/B,IAAI,MAAM,GAAkB,IAAI,CAAC;AACjC,IAAI,cAAc,GAAkB,IAAI,CAAC;AAEzC,yBAAyB;AACzB,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAC7C,IAAI,iBAAiB,GAAkB,IAAI,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IACjD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACzD,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC;IACvC,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC;IAEjE,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CACT,kIAAkI,CACnI,CAAC;QACF,OAAO;IACT,CAAC;IAED,cAAc,KAAK,WAAW,MAAM,mBAAmB,CAAC;IAExD,EAAE,GAAG,IAAI,QAAQ,CAAC;QAChB,MAAM;QACN,WAAW,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE;KAC9C,CAAC,CAAC;IAEH,MAAM,CAAC,KAAK,CAAC,kCAAkC,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,QAAgB,EAChB,WAAmB;IAEnB,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,oBAAoB,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;QAEzD,MAAM,EAAE,CAAC,IAAI,CACX,IAAI,gBAAgB,CAAC;YACnB,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,WAAW;SACzB,CAAC,CACH,CAAC;QAEF,MAAM,GAAG,GAAG,GAAG,cAAc,IAAI,GAAG,EAAE,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,yBAAyB,GAAG,KAAK,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;QACtE,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CACT,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9E,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB;IAEjB,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4BAA4B;IAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzE,IAAI,IAAI,KAAK,kBAAkB,IAAI,iBAAiB,EAAE,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACzD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,WAAW,CAC3B,MAAM,EACN,cAAc,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EACpC,WAAW,CACZ,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,kBAAkB,GAAG,IAAI,CAAC;QAC1B,iBAAiB,GAAG,GAAG,CAAC;IAC1B,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
import { setProfile, getProfile, configExists, loadConfig } from "./config/index.js";
|
|
4
|
+
import { logger } from "./logger.js";
|
|
5
|
+
import { runOnboarding } from "./onboarding/index.js";
|
|
6
|
+
import { installBuiltinSkills } from "./skills/install.js";
|
|
7
|
+
import { startAgentLoop } from "./agent/loop.js";
|
|
8
|
+
import { startObsServer } from "./obs/server.js";
|
|
9
|
+
function parseProfileArg() {
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
const idx = args.indexOf("--profile");
|
|
12
|
+
if (idx !== -1 && idx + 1 < args.length) {
|
|
13
|
+
return args[idx + 1];
|
|
14
|
+
}
|
|
15
|
+
return "default";
|
|
16
|
+
}
|
|
17
|
+
async function main() {
|
|
18
|
+
// Parse --profile before anything else
|
|
19
|
+
const profile = parseProfileArg();
|
|
20
|
+
setProfile(profile);
|
|
21
|
+
logger.init();
|
|
22
|
+
logger.system(`VisionClaw - Personal Desktop Agent`);
|
|
23
|
+
logger.system(`Profile: ${getProfile()}\n`);
|
|
24
|
+
// If no config exists for this profile, run onboarding
|
|
25
|
+
if (!configExists()) {
|
|
26
|
+
logger.system(`No configuration found for profile "${profile}". Starting onboarding...\n`);
|
|
27
|
+
await runOnboarding();
|
|
28
|
+
logger.system("\nOnboarding complete! Starting agent...\n");
|
|
29
|
+
}
|
|
30
|
+
// Install/update built-in skills (safe to call on every startup)
|
|
31
|
+
installBuiltinSkills();
|
|
32
|
+
const config = loadConfig();
|
|
33
|
+
logger.system(`Agent identity: ${config.gmail}`);
|
|
34
|
+
logger.system(`Heartbeat interval: ${config.heartbeatIntervalMs / 1000}s`);
|
|
35
|
+
logger.system("");
|
|
36
|
+
// Start runtime observability server (advanced config; not part of onboarding)
|
|
37
|
+
if (config.obs?.enabled) {
|
|
38
|
+
startObsServer({
|
|
39
|
+
host: config.obs.host,
|
|
40
|
+
port: config.obs.port,
|
|
41
|
+
bufferSize: config.obs.bufferSize,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Cache display size for computer_use tools (macOS)
|
|
45
|
+
const { initDisplaySize } = await import("./tools/desktop-executor.js");
|
|
46
|
+
await initDisplaySize();
|
|
47
|
+
// Start the main agent loop
|
|
48
|
+
await startAgentLoop(config);
|
|
49
|
+
}
|
|
50
|
+
main().catch((err) => {
|
|
51
|
+
logger.err(`Fatal error: ${err instanceof Error ? err.message : String(err)}`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,SAAS,eAAe;IACtB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,uCAAuC;IACvC,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,UAAU,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,CAAC,IAAI,EAAE,CAAC;IAEd,MAAM,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;IACrD,MAAM,CAAC,MAAM,CAAC,YAAY,UAAU,EAAE,IAAI,CAAC,CAAC;IAE5C,uDAAuD;IACvD,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,uCAAuC,OAAO,6BAA6B,CAAC,CAAC;QAC3F,MAAM,aAAa,EAAE,CAAC;QACtB,MAAM,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;IAC9D,CAAC;IAED,iEAAiE;IACjE,oBAAoB,EAAE,CAAC;IAEvB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,MAAM,CAAC,mBAAmB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,MAAM,CAAC,uBAAuB,MAAM,CAAC,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC;IAC3E,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAElB,+EAA+E;IAC/E,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC;QACxB,cAAc,CAAC;YACb,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;YACrB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;YACrB,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU;SAClC,CAAC,CAAC;IACL,CAAC;IAED,oDAAoD;IACpD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IACxE,MAAM,eAAe,EAAE,CAAC;IAExB,4BAA4B;IAC5B,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,CAAC,GAAG,CAAC,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|