visionclaw 0.1.35 → 0.1.37
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/CHANGELOG.md +30 -0
- package/dist/agent/client-factory.d.ts +32 -0
- package/dist/agent/client-factory.d.ts.map +1 -0
- package/dist/agent/client-factory.js +68 -0
- package/dist/agent/client-factory.js.map +1 -0
- package/dist/agent/fast-responder.d.ts +2 -1
- package/dist/agent/fast-responder.d.ts.map +1 -1
- package/dist/agent/fast-responder.js +4 -6
- package/dist/agent/fast-responder.js.map +1 -1
- package/dist/agent/gather-context.d.ts +15 -0
- package/dist/agent/gather-context.d.ts.map +1 -0
- package/dist/agent/gather-context.js +55 -0
- package/dist/agent/gather-context.js.map +1 -0
- package/dist/agent/interrupt-handler.d.ts +30 -0
- package/dist/agent/interrupt-handler.d.ts.map +1 -0
- package/dist/agent/interrupt-handler.js +141 -0
- package/dist/agent/interrupt-handler.js.map +1 -0
- package/dist/agent/loop.d.ts +3 -18
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +67 -532
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/mailbox.d.ts +28 -0
- package/dist/agent/mailbox.d.ts.map +1 -0
- package/dist/agent/mailbox.js +73 -0
- package/dist/agent/mailbox.js.map +1 -0
- package/dist/agent/onboarding-gate.d.ts +14 -0
- package/dist/agent/onboarding-gate.d.ts.map +1 -0
- package/dist/agent/onboarding-gate.js +70 -0
- package/dist/agent/onboarding-gate.js.map +1 -0
- package/dist/agent/session-manager.d.ts +69 -0
- package/dist/agent/session-manager.d.ts.map +1 -0
- package/dist/agent/session-manager.js +160 -0
- package/dist/agent/session-manager.js.map +1 -0
- package/dist/agent/session.d.ts +0 -1
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +5 -11
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/state.d.ts +21 -0
- package/dist/agent/state.d.ts.map +1 -0
- package/dist/agent/state.js +11 -0
- package/dist/agent/state.js.map +1 -0
- package/dist/agent/stream-handler.d.ts +10 -0
- package/dist/agent/stream-handler.d.ts.map +1 -0
- package/dist/agent/stream-handler.js +232 -0
- package/dist/agent/stream-handler.js.map +1 -0
- package/dist/agent/system-prompt.d.ts.map +1 -1
- package/dist/agent/system-prompt.js +21 -67
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/channels/discord.d.ts +1 -0
- package/dist/channels/discord.d.ts.map +1 -1
- package/dist/channels/discord.js +30 -0
- package/dist/channels/discord.js.map +1 -1
- package/dist/channels/interface.d.ts +19 -0
- package/dist/channels/interface.d.ts.map +1 -1
- package/dist/channels/manager.d.ts +4 -0
- package/dist/channels/manager.d.ts.map +1 -1
- package/dist/channels/manager.js +15 -0
- package/dist/channels/manager.js.map +1 -1
- package/dist/channels/telegram.d.ts +1 -0
- package/dist/channels/telegram.d.ts.map +1 -1
- package/dist/channels/telegram.js +32 -0
- package/dist/channels/telegram.js.map +1 -1
- package/dist/config/types.d.ts +16 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +9 -1
- package/dist/config/types.js.map +1 -1
- package/dist/email/gmail-email.d.ts +4 -0
- package/dist/email/gmail-email.d.ts.map +1 -1
- package/dist/email/gmail-email.js +8 -0
- package/dist/email/gmail-email.js.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/obs/notify.js +1 -1
- package/dist/obs/notify.js.map +1 -1
- package/dist/onboarding/index.d.ts.map +1 -1
- package/dist/onboarding/index.js +84 -10
- package/dist/onboarding/index.js.map +1 -1
- package/dist/onboarding/onboarding-session.d.ts.map +1 -1
- package/dist/onboarding/onboarding-session.js +4 -7
- package/dist/onboarding/onboarding-session.js.map +1 -1
- package/dist/onboarding/onboarding-tools.d.ts.map +1 -1
- package/dist/onboarding/onboarding-tools.js +2 -1
- package/dist/onboarding/onboarding-tools.js.map +1 -1
- package/dist/onboarding/telegram-onboarding.d.ts.map +1 -1
- package/dist/onboarding/telegram-onboarding.js +1 -5
- package/dist/onboarding/telegram-onboarding.js.map +1 -1
- package/dist/reconfigure.d.ts.map +1 -1
- package/dist/reconfigure.js +151 -8
- package/dist/reconfigure.js.map +1 -1
- package/dist/tools/calendar.js +1 -1
- package/dist/tools/calendar.js.map +1 -1
- package/dist/tools/computer-use.d.ts.map +1 -1
- package/dist/tools/computer-use.js +21 -19
- package/dist/tools/computer-use.js.map +1 -1
- package/dist/tools/coordinate-resolver.d.ts +2 -1
- package/dist/tools/coordinate-resolver.d.ts.map +1 -1
- package/dist/tools/coordinate-resolver.js +4 -5
- package/dist/tools/coordinate-resolver.js.map +1 -1
- package/dist/tools/drive.js +1 -1
- package/dist/tools/drive.js.map +1 -1
- package/dist/tools/email.d.ts +2 -0
- package/dist/tools/email.d.ts.map +1 -1
- package/dist/tools/email.js +16 -7
- package/dist/tools/email.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +0 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/memory.d.ts +1 -1
- package/dist/tools/notify.js +1 -1
- package/dist/tools/notify.js.map +1 -1
- package/dist/tools/skill.d.ts +1 -1
- package/dist/tools/switch-session.d.ts +10 -0
- package/dist/tools/switch-session.d.ts.map +1 -0
- package/dist/tools/switch-session.js +31 -0
- package/dist/tools/switch-session.js.map +1 -0
- package/dist/tools/web-search.d.ts +2 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +2 -0
- package/dist/tools/web-search.js.map +1 -0
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
## [0.1.37](https://github.com/babelcloud/visionclaw/compare/v0.1.36...v0.1.37) (2026-02-25)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* add typing indicator functionality across channels ([74aaf4d](https://github.com/babelcloud/visionclaw/commit/74aaf4d2012642358689005ea48ae12d71ec5bbe))
|
|
7
|
+
* enhance agent functionality with new context gathering and interrupt handling ([08a5938](https://github.com/babelcloud/visionclaw/commit/08a59384203759882ee582659753456fcf0b4b98))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
## [0.1.36](https://github.com/babelcloud/visionclaw/compare/v0.1.35...v0.1.36) (2026-02-25)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* adjust restart delay and enhance onboarding documentation ([7af3019](https://github.com/babelcloud/visionclaw/commit/7af30193b2bb9f6d36765ebe4fc56ba3e8339943))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### Features
|
|
20
|
+
|
|
21
|
+
* add console URL handling and request support ([30ee109](https://github.com/babelcloud/visionclaw/commit/30ee10970219e8aeb6957d1841db7afc96c4461d))
|
|
22
|
+
* add SerpApi key update functionality to reconfiguration CLI ([020d918](https://github.com/babelcloud/visionclaw/commit/020d9181bbaed9c72b02614b2090e7ce7a56682c))
|
|
23
|
+
* enhance agent loop and system prompt for Bedrock provider support ([1c3dc20](https://github.com/babelcloud/visionclaw/commit/1c3dc20b15dc5dd630ebd7190479e01588723424))
|
|
24
|
+
* enhance email functionality with CC and BCC support ([c2c46ad](https://github.com/babelcloud/visionclaw/commit/c2c46addffdbbb7b95c315d2a036cfa2a7a1d760))
|
|
25
|
+
* implement sleep request handling and update command interfaces ([ab13651](https://github.com/babelcloud/visionclaw/commit/ab13651f95d66ad0903f06f5cdab35f5d48e027d))
|
|
26
|
+
* integrate Bedrock provider support and enhance configuration options ([f83bd8f](https://github.com/babelcloud/visionclaw/commit/f83bd8fc52f2bc3160e07c57bc0f24991c301182))
|
|
27
|
+
* update reconfiguration CLI to use text input for AWS credentials ([e225f9f](https://github.com/babelcloud/visionclaw/commit/e225f9fcc8c9f23caf4227a048b8e3744075c4ac))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
1
31
|
## [0.1.35](https://github.com/babelcloud/visionclaw/compare/v0.1.34...v0.1.35) (2026-02-24)
|
|
2
32
|
|
|
3
33
|
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory for creating the correct Anthropic client (direct API vs Bedrock)
|
|
3
|
+
* and resolving provider-specific model IDs.
|
|
4
|
+
*/
|
|
5
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
6
|
+
import type { VisionClawConfig } from "../config/types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Create an Anthropic-compatible client based on the provider in the config.
|
|
9
|
+
*
|
|
10
|
+
* - `"anthropic"`: uses the direct API with `anthropicApiKey`.
|
|
11
|
+
* - `"bedrock"`: uses `AnthropicBedrock` with explicit AWS credentials when
|
|
12
|
+
* provided, otherwise falls back to the default AWS credential provider chain.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createClient(config: VisionClawConfig): Anthropic;
|
|
15
|
+
/**
|
|
16
|
+
* Return the correct model identifier for direct SDK calls
|
|
17
|
+
* (fast-responder, coordinate-resolver, etc.).
|
|
18
|
+
*
|
|
19
|
+
* Agent SDK `query()` calls do NOT need this — the SDK maps models
|
|
20
|
+
* internally when `CLAUDE_CODE_USE_BEDROCK=1` is set.
|
|
21
|
+
*/
|
|
22
|
+
export declare function getModelId(config: VisionClawConfig): string;
|
|
23
|
+
/**
|
|
24
|
+
* Build the `env` record for the Agent SDK `query()` options.
|
|
25
|
+
*
|
|
26
|
+
* - Anthropic: passes `ANTHROPIC_API_KEY`.
|
|
27
|
+
* - Bedrock: passes `CLAUDE_CODE_USE_BEDROCK`, `AWS_REGION`,
|
|
28
|
+
* `AWS_BEARER_TOKEN_BEDROCK` (for the Claude Code CLI), and IAM
|
|
29
|
+
* credentials when available.
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildAgentEnv(config: VisionClawConfig): Record<string, string | undefined>;
|
|
32
|
+
//# sourceMappingURL=client-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-factory.d.ts","sourceRoot":"","sources":["../../src/agent/client-factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAK3D;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAchE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE3D;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAgB1F"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory for creating the correct Anthropic client (direct API vs Bedrock)
|
|
3
|
+
* and resolving provider-specific model IDs.
|
|
4
|
+
*/
|
|
5
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
6
|
+
import { AnthropicBedrock } from "@anthropic-ai/bedrock-sdk";
|
|
7
|
+
const ANTHROPIC_MODEL = "claude-sonnet-4-6";
|
|
8
|
+
const BEDROCK_MODEL = "us.anthropic.claude-sonnet-4-6";
|
|
9
|
+
/**
|
|
10
|
+
* Create an Anthropic-compatible client based on the provider in the config.
|
|
11
|
+
*
|
|
12
|
+
* - `"anthropic"`: uses the direct API with `anthropicApiKey`.
|
|
13
|
+
* - `"bedrock"`: uses `AnthropicBedrock` with explicit AWS credentials when
|
|
14
|
+
* provided, otherwise falls back to the default AWS credential provider chain.
|
|
15
|
+
*/
|
|
16
|
+
export function createClient(config) {
|
|
17
|
+
if (config.provider === "bedrock") {
|
|
18
|
+
const region = config.awsRegion ?? "us-west-2";
|
|
19
|
+
if (config.awsAccessKeyId && config.awsSecretAccessKey) {
|
|
20
|
+
return new AnthropicBedrock({
|
|
21
|
+
awsRegion: region,
|
|
22
|
+
awsAccessKey: config.awsAccessKeyId,
|
|
23
|
+
awsSecretKey: config.awsSecretAccessKey,
|
|
24
|
+
awsSessionToken: config.awsSessionToken ?? null,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return new AnthropicBedrock({ awsRegion: region });
|
|
28
|
+
}
|
|
29
|
+
return new Anthropic({ apiKey: config.anthropicApiKey });
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Return the correct model identifier for direct SDK calls
|
|
33
|
+
* (fast-responder, coordinate-resolver, etc.).
|
|
34
|
+
*
|
|
35
|
+
* Agent SDK `query()` calls do NOT need this — the SDK maps models
|
|
36
|
+
* internally when `CLAUDE_CODE_USE_BEDROCK=1` is set.
|
|
37
|
+
*/
|
|
38
|
+
export function getModelId(config) {
|
|
39
|
+
return config.provider === "bedrock" ? BEDROCK_MODEL : ANTHROPIC_MODEL;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Build the `env` record for the Agent SDK `query()` options.
|
|
43
|
+
*
|
|
44
|
+
* - Anthropic: passes `ANTHROPIC_API_KEY`.
|
|
45
|
+
* - Bedrock: passes `CLAUDE_CODE_USE_BEDROCK`, `AWS_REGION`,
|
|
46
|
+
* `AWS_BEARER_TOKEN_BEDROCK` (for the Claude Code CLI), and IAM
|
|
47
|
+
* credentials when available.
|
|
48
|
+
*/
|
|
49
|
+
export function buildAgentEnv(config) {
|
|
50
|
+
const base = { ...process.env };
|
|
51
|
+
if (config.provider === "bedrock") {
|
|
52
|
+
base.CLAUDE_CODE_USE_BEDROCK = "1";
|
|
53
|
+
base.AWS_REGION = config.awsRegion ?? "us-west-2";
|
|
54
|
+
if (config.awsBearerToken)
|
|
55
|
+
base.AWS_BEARER_TOKEN_BEDROCK = config.awsBearerToken;
|
|
56
|
+
if (config.awsAccessKeyId)
|
|
57
|
+
base.AWS_ACCESS_KEY_ID = config.awsAccessKeyId;
|
|
58
|
+
if (config.awsSecretAccessKey)
|
|
59
|
+
base.AWS_SECRET_ACCESS_KEY = config.awsSecretAccessKey;
|
|
60
|
+
if (config.awsSessionToken)
|
|
61
|
+
base.AWS_SESSION_TOKEN = config.awsSessionToken;
|
|
62
|
+
delete base.ANTHROPIC_API_KEY;
|
|
63
|
+
return base;
|
|
64
|
+
}
|
|
65
|
+
base.ANTHROPIC_API_KEY = config.anthropicApiKey;
|
|
66
|
+
return base;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=client-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-factory.js","sourceRoot":"","sources":["../../src/agent/client-factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAC5C,MAAM,aAAa,GAAG,gCAAgC,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAwB;IACnD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,IAAI,WAAW,CAAC;QAC/C,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YACvD,OAAO,IAAI,gBAAgB,CAAC;gBAC1B,SAAS,EAAE,MAAM;gBACjB,YAAY,EAAE,MAAM,CAAC,cAAc;gBACnC,YAAY,EAAE,MAAM,CAAC,kBAAkB;gBACvC,eAAe,EAAE,MAAM,CAAC,eAAe,IAAI,IAAI;aAChD,CAAyB,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,gBAAgB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAyB,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,MAAwB;IACjD,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,CAAC;AACzE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,MAAwB;IACpD,MAAM,IAAI,GAAuC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAEpE,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,uBAAuB,GAAG,GAAG,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,WAAW,CAAC;QAClD,IAAI,MAAM,CAAC,cAAc;YAAE,IAAI,CAAC,wBAAwB,GAAG,MAAM,CAAC,cAAc,CAAC;QACjF,IAAI,MAAM,CAAC,cAAc;YAAE,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC;QAC1E,IAAI,MAAM,CAAC,kBAAkB;YAAE,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,kBAAkB,CAAC;QACtF,IAAI,MAAM,CAAC,eAAe;YAAE,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,eAAe,CAAC;QAC5E,OAAO,IAAI,CAAC,iBAAiB,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,eAAe,CAAC;IAChD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import type { CommandMessage } from "../channels/interface.js";
|
|
3
|
+
import type { VisionClawConfig } from "../config/types.js";
|
|
3
4
|
declare const FastResponseSchema: z.ZodObject<{
|
|
4
5
|
replies: z.ZodArray<z.ZodObject<{
|
|
5
6
|
channel: z.ZodString;
|
|
@@ -26,7 +27,7 @@ export declare function fastRespond(options: {
|
|
|
26
27
|
systemPrompt: string;
|
|
27
28
|
messages: CommandMessage[];
|
|
28
29
|
activitySummary: string;
|
|
29
|
-
|
|
30
|
+
config: VisionClawConfig;
|
|
30
31
|
}): Promise<FastResponse | null>;
|
|
31
32
|
export {};
|
|
32
33
|
//# sourceMappingURL=fast-responder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-responder.d.ts","sourceRoot":"","sources":["../../src/agent/fast-responder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fast-responder.d.ts","sourceRoot":"","sources":["../../src/agent/fast-responder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAgB3D,QAAA,MAAM,kBAAkB;;;;;;;;iBAiBtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,gBAAgB,CAAC;CAC1B,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAgF/B"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import Anthropic from "@anthropic-ai/sdk";
|
|
2
1
|
import { z } from "zod";
|
|
3
2
|
import { zodOutputFormat } from "@anthropic-ai/sdk/helpers/zod";
|
|
4
3
|
import { logger } from "../logger.js";
|
|
5
|
-
|
|
6
|
-
const FAST_MODEL = "claude-sonnet-4-6";
|
|
4
|
+
import { createClient, getModelId } from "./client-factory.js";
|
|
7
5
|
const MAX_TOKENS = 2048;
|
|
8
6
|
const RecipientReplySchema = z.object({
|
|
9
7
|
channel: z
|
|
@@ -41,7 +39,7 @@ const FastResponseSchema = z.object({
|
|
|
41
39
|
* interrupt-injection path.
|
|
42
40
|
*/
|
|
43
41
|
export async function fastRespond(options) {
|
|
44
|
-
const { systemPrompt, messages, activitySummary,
|
|
42
|
+
const { systemPrompt, messages, activitySummary, config } = options;
|
|
45
43
|
if (messages.length === 0)
|
|
46
44
|
return null;
|
|
47
45
|
// Pre-compute unique recipients so the prompt can list them explicitly
|
|
@@ -56,7 +54,7 @@ export async function fastRespond(options) {
|
|
|
56
54
|
.map((r) => ` - channel="${r.channel}", sender="${r.sender}"`)
|
|
57
55
|
.join("\n");
|
|
58
56
|
try {
|
|
59
|
-
const client =
|
|
57
|
+
const client = createClient(config);
|
|
60
58
|
const messageSummary = messages
|
|
61
59
|
.map((m) => {
|
|
62
60
|
const parts = [
|
|
@@ -69,7 +67,7 @@ export async function fastRespond(options) {
|
|
|
69
67
|
})
|
|
70
68
|
.join("\n");
|
|
71
69
|
const response = await client.messages.create({
|
|
72
|
-
model:
|
|
70
|
+
model: getModelId(config),
|
|
73
71
|
max_tokens: MAX_TOKENS,
|
|
74
72
|
output_config: {
|
|
75
73
|
format: zodOutputFormat(FastResponseSchema),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-responder.js","sourceRoot":"","sources":["../../src/agent/fast-responder.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"fast-responder.js","sourceRoot":"","sources":["../../src/agent/fast-responder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { VisionClawConfig } from "../config/types.js";
|
|
2
|
+
import type { ScreenshotRef } from "./context.js";
|
|
3
|
+
import { type VersionCheckResult } from "../utils/version-check.js";
|
|
4
|
+
export interface GatheredContext {
|
|
5
|
+
screenshot?: ScreenshotRef;
|
|
6
|
+
calendarSummary: string;
|
|
7
|
+
versionUpdate?: VersionCheckResult;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Gather screenshot, calendar, and (optionally) version-check data in
|
|
11
|
+
* parallel. Failures in individual sources are logged and swallowed so
|
|
12
|
+
* the agent can still proceed with whatever data is available.
|
|
13
|
+
*/
|
|
14
|
+
export declare function gatherWakeContext(config: VisionClawConfig, doVersionCheck: boolean): Promise<GatheredContext>;
|
|
15
|
+
//# sourceMappingURL=gather-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gather-context.d.ts","sourceRoot":"","sources":["../../src/agent/gather-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAC;AAGnC,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,eAAe,CAAC,CAmD1B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { takeScreenshot } from "../tools/screenshot.js";
|
|
2
|
+
import { getCalendarSummary } from "../calendar/scheduler.js";
|
|
3
|
+
import { checkForUpdate, recordUpdateNotification, } from "../utils/version-check.js";
|
|
4
|
+
import { logger } from "../logger.js";
|
|
5
|
+
/**
|
|
6
|
+
* Gather screenshot, calendar, and (optionally) version-check data in
|
|
7
|
+
* parallel. Failures in individual sources are logged and swallowed so
|
|
8
|
+
* the agent can still proceed with whatever data is available.
|
|
9
|
+
*/
|
|
10
|
+
export async function gatherWakeContext(config, doVersionCheck) {
|
|
11
|
+
const [screenshotResult, calendarResult, versionResult] = await Promise.allSettled([
|
|
12
|
+
(async () => {
|
|
13
|
+
const t0 = Date.now();
|
|
14
|
+
const base64 = await takeScreenshot();
|
|
15
|
+
logger.debug(`Screenshot captured in ${Date.now() - t0}ms`);
|
|
16
|
+
return { base64 };
|
|
17
|
+
})(),
|
|
18
|
+
(async () => {
|
|
19
|
+
const t0 = Date.now();
|
|
20
|
+
const summary = await getCalendarSummary(config);
|
|
21
|
+
logger.debug(`Calendar fetched in ${Date.now() - t0}ms`);
|
|
22
|
+
return summary;
|
|
23
|
+
})(),
|
|
24
|
+
(async () => {
|
|
25
|
+
if (!doVersionCheck)
|
|
26
|
+
return undefined;
|
|
27
|
+
const t0 = Date.now();
|
|
28
|
+
const result = await checkForUpdate();
|
|
29
|
+
logger.debug(`Version check completed in ${Date.now() - t0}ms`);
|
|
30
|
+
if (result.hasUpdate) {
|
|
31
|
+
recordUpdateNotification(result.latestVersion);
|
|
32
|
+
logger.system(`Update available: ${result.currentVersion} → ${result.latestVersion}`);
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
})(),
|
|
36
|
+
]);
|
|
37
|
+
const screenshot = screenshotResult.status === "fulfilled" ? screenshotResult.value : undefined;
|
|
38
|
+
if (screenshotResult.status === "rejected") {
|
|
39
|
+
logger.warn(`Screenshot failed: ${screenshotResult.reason instanceof Error ? screenshotResult.reason.message : String(screenshotResult.reason)}`);
|
|
40
|
+
}
|
|
41
|
+
if (screenshot?.base64) {
|
|
42
|
+
logger.screenshot(screenshot.base64);
|
|
43
|
+
}
|
|
44
|
+
// TODO: Maybe we should fetch unread emails here?
|
|
45
|
+
const calendarSummary = calendarResult.status === "fulfilled" ? calendarResult.value : "";
|
|
46
|
+
if (calendarResult.status === "rejected") {
|
|
47
|
+
logger.warn(`Calendar fetch failed: ${calendarResult.reason instanceof Error ? calendarResult.reason.message : String(calendarResult.reason)}`);
|
|
48
|
+
}
|
|
49
|
+
const versionUpdate = versionResult.status === "fulfilled" ? versionResult.value : undefined;
|
|
50
|
+
if (versionResult.status === "rejected") {
|
|
51
|
+
logger.debug(`Version check failed: ${versionResult.reason instanceof Error ? versionResult.reason.message : String(versionResult.reason)}`);
|
|
52
|
+
}
|
|
53
|
+
return { screenshot, calendarSummary, versionUpdate };
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=gather-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gather-context.js","sourceRoot":"","sources":["../../src/agent/gather-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { VisionClawConfig, OwnerConfig } from "../config/types.js";
|
|
2
|
+
import type { ChannelManager } from "../channels/manager.js";
|
|
3
|
+
import type { MessageQueue } from "../channels/queue.js";
|
|
4
|
+
import type { AgentSession } from "./session.js";
|
|
5
|
+
import type { ActivityTracker } from "./activity-tracker.js";
|
|
6
|
+
import type { AgentState } from "./state.js";
|
|
7
|
+
export interface InterruptHandlerDeps {
|
|
8
|
+
session: AgentSession;
|
|
9
|
+
config: VisionClawConfig;
|
|
10
|
+
ownerConfig: OwnerConfig;
|
|
11
|
+
channelManager: ChannelManager;
|
|
12
|
+
messageQueue: MessageQueue;
|
|
13
|
+
activityTracker: ActivityTracker;
|
|
14
|
+
getAgentState: () => AgentState;
|
|
15
|
+
}
|
|
16
|
+
export declare class InterruptHandler {
|
|
17
|
+
private deps;
|
|
18
|
+
private timer;
|
|
19
|
+
private inFlight;
|
|
20
|
+
constructor(deps: InterruptHandlerDeps);
|
|
21
|
+
/**
|
|
22
|
+
* Called from the channelManager "message" event when the agent is busy.
|
|
23
|
+
* Schedules a debounced interrupt batch.
|
|
24
|
+
*/
|
|
25
|
+
schedule(): void;
|
|
26
|
+
dispose(): void;
|
|
27
|
+
private requeue;
|
|
28
|
+
private processBatch;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=interrupt-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interrupt-handler.d.ts","sourceRoot":"","sources":["../../src/agent/interrupt-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,MAAM,UAAU,CAAC;CACjC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,KAAK,CAA8C;IAC3D,OAAO,CAAC,QAAQ,CAAS;gBAEb,IAAI,EAAE,oBAAoB;IAItC;;;OAGG;IACH,QAAQ,IAAI,IAAI;IAQhB,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,OAAO;YAOD,YAAY;CA4G3B"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { buildSystemPrompt } from "./system-prompt.js";
|
|
2
|
+
import { buildInterruptContext, buildInterruptWithBriefing } from "./context.js";
|
|
3
|
+
import { fastRespond } from "./fast-responder.js";
|
|
4
|
+
import { logger } from "../logger.js";
|
|
5
|
+
const INTERRUPT_DEBOUNCE_MS = 80000;
|
|
6
|
+
const FAST_RESPONDER_TIMEOUT_MS = 6000;
|
|
7
|
+
export class InterruptHandler {
|
|
8
|
+
deps;
|
|
9
|
+
timer = null;
|
|
10
|
+
inFlight = false;
|
|
11
|
+
constructor(deps) {
|
|
12
|
+
this.deps = deps;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Called from the channelManager "message" event when the agent is busy.
|
|
16
|
+
* Schedules a debounced interrupt batch.
|
|
17
|
+
*/
|
|
18
|
+
schedule() {
|
|
19
|
+
if (this.timer !== null)
|
|
20
|
+
return;
|
|
21
|
+
this.timer = setTimeout(() => {
|
|
22
|
+
this.timer = null;
|
|
23
|
+
void this.processBatch();
|
|
24
|
+
}, INTERRUPT_DEBOUNCE_MS);
|
|
25
|
+
}
|
|
26
|
+
dispose() {
|
|
27
|
+
if (this.timer !== null) {
|
|
28
|
+
clearTimeout(this.timer);
|
|
29
|
+
this.timer = null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
requeue(batch) {
|
|
33
|
+
logger.warn(`Session closed before inject — re-queuing ${batch.length} message(s) for next wake cycle`);
|
|
34
|
+
for (const msg of batch) {
|
|
35
|
+
this.deps.messageQueue.enqueue(msg);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async processBatch() {
|
|
39
|
+
const agentState = this.deps.getAgentState();
|
|
40
|
+
if (this.inFlight || !agentState.busy)
|
|
41
|
+
return;
|
|
42
|
+
this.inFlight = true;
|
|
43
|
+
const { session, config, ownerConfig, channelManager, messageQueue, activityTracker, } = this.deps;
|
|
44
|
+
try {
|
|
45
|
+
const batch = [];
|
|
46
|
+
while (!messageQueue.isEmpty()) {
|
|
47
|
+
const msg = messageQueue.dequeue();
|
|
48
|
+
if (msg)
|
|
49
|
+
batch.push(msg);
|
|
50
|
+
}
|
|
51
|
+
if (batch.length === 0)
|
|
52
|
+
return;
|
|
53
|
+
const last = batch[batch.length - 1];
|
|
54
|
+
agentState.lastMessageChannel = last.channel;
|
|
55
|
+
agentState.lastMessageSender = last.sender;
|
|
56
|
+
for (const msg of batch) {
|
|
57
|
+
logger.log("info", "incoming", `[interrupt] [${msg.channel}] ${msg.sender}: ${msg.text}`, {
|
|
58
|
+
channel: msg.channel,
|
|
59
|
+
sender: msg.sender,
|
|
60
|
+
text: msg.text,
|
|
61
|
+
id: msg.id,
|
|
62
|
+
interrupt: true,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const typingSent = new Set();
|
|
66
|
+
for (const msg of batch) {
|
|
67
|
+
const key = `${msg.channel}::${msg.sender}`;
|
|
68
|
+
if (typingSent.has(key))
|
|
69
|
+
continue;
|
|
70
|
+
typingSent.add(key);
|
|
71
|
+
channelManager.sendTypingIndicator(msg.channel, msg.sender).catch(() => { });
|
|
72
|
+
}
|
|
73
|
+
const fr = await Promise.race([
|
|
74
|
+
fastRespond({
|
|
75
|
+
systemPrompt: buildSystemPrompt(config, ownerConfig),
|
|
76
|
+
messages: batch,
|
|
77
|
+
activitySummary: activityTracker.getSummary(),
|
|
78
|
+
config,
|
|
79
|
+
}),
|
|
80
|
+
new Promise((resolve) => setTimeout(() => resolve(null), FAST_RESPONDER_TIMEOUT_MS)),
|
|
81
|
+
]);
|
|
82
|
+
if (fr) {
|
|
83
|
+
const replyMap = new Map();
|
|
84
|
+
for (const r of fr.replies) {
|
|
85
|
+
replyMap.set(`${r.channel}::${r.sender}`, r.reply);
|
|
86
|
+
}
|
|
87
|
+
const sent = new Set();
|
|
88
|
+
for (const msg of batch) {
|
|
89
|
+
const key = `${msg.channel}::${msg.sender}`;
|
|
90
|
+
if (sent.has(key))
|
|
91
|
+
continue;
|
|
92
|
+
sent.add(key);
|
|
93
|
+
const reply = replyMap.get(key);
|
|
94
|
+
if (!reply)
|
|
95
|
+
continue;
|
|
96
|
+
try {
|
|
97
|
+
await channelManager.sendMessage(msg.channel, msg.sender, reply);
|
|
98
|
+
}
|
|
99
|
+
catch (sendErr) {
|
|
100
|
+
logger.warn(`Failed to send fast response: ${sendErr instanceof Error ? sendErr.message : String(sendErr)}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
logger.log("info", "fast_response", `Replied to ${sent.size} recipient(s) for ${batch.length} message(s)`, {
|
|
104
|
+
messageCount: batch.length,
|
|
105
|
+
recipientCount: sent.size,
|
|
106
|
+
needsPrimaryAction: fr.needsPrimaryAction,
|
|
107
|
+
});
|
|
108
|
+
if (fr.needsPrimaryAction) {
|
|
109
|
+
const briefingBlocks = buildInterruptWithBriefing({
|
|
110
|
+
messages: batch,
|
|
111
|
+
fastResponse: fr,
|
|
112
|
+
});
|
|
113
|
+
if (!session.injectMessage(briefingBlocks)) {
|
|
114
|
+
this.requeue(batch);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
logger.log("info", "fast_response", `No follow-up needed for ${batch.length} message(s)`, {
|
|
119
|
+
messageCount: batch.length,
|
|
120
|
+
recipientCount: sent.size,
|
|
121
|
+
needsPrimaryAction: fr.needsPrimaryAction,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
const interruptBlocks = await buildInterruptContext({ messages: batch });
|
|
127
|
+
if (!session.injectMessage(interruptBlocks)) {
|
|
128
|
+
this.requeue(batch);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
this.inFlight = false;
|
|
134
|
+
const agentStateNow = this.deps.getAgentState();
|
|
135
|
+
if (!messageQueue.isEmpty() && agentStateNow.busy) {
|
|
136
|
+
this.schedule();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=interrupt-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interrupt-handler.js","sourceRoot":"","sources":["../../src/agent/interrupt-handler.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/loop.d.ts
CHANGED
|
@@ -1,21 +1,6 @@
|
|
|
1
|
-
import type { VisionClawConfig
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { ActivityTracker } from "./activity-tracker.js";
|
|
5
|
-
/** Shared state visible to tools (e.g. notify_user needs channel access) */
|
|
6
|
-
export interface AgentState {
|
|
7
|
-
config: VisionClawConfig;
|
|
8
|
-
ownerConfig: OwnerConfig;
|
|
9
|
-
channelManager: ChannelManager;
|
|
10
|
-
messageQueue: MessageQueue;
|
|
11
|
-
activityTracker: ActivityTracker;
|
|
12
|
-
busy: boolean;
|
|
13
|
-
stopRequested: boolean;
|
|
14
|
-
requestStop: () => void;
|
|
15
|
-
lastMessageChannel?: string;
|
|
16
|
-
lastMessageSender?: string;
|
|
17
|
-
}
|
|
18
|
-
export declare function getAgentState(): AgentState;
|
|
1
|
+
import type { VisionClawConfig } from "../config/types.js";
|
|
2
|
+
export type { AgentState } from "./state.js";
|
|
3
|
+
export { getAgentState } from "./state.js";
|
|
19
4
|
/**
|
|
20
5
|
* Main agent loop. This is the entry point that runs forever.
|
|
21
6
|
*/
|
package/dist/agent/loop.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAoB3D,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,IAAI,CAAC,CA+Pf"}
|