clawconnect-agent 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/.env.example +41 -0
- package/README.md +259 -0
- package/README.zh-CN.md +329 -0
- package/dist/commands/backup-manager.d.ts +21 -0
- package/dist/commands/backup-manager.js +346 -0
- package/dist/commands/backup-manager.js.map +1 -0
- package/dist/commands/install.d.ts +6 -0
- package/dist/commands/install.js +107 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/local-handlers.d.ts +2 -0
- package/dist/commands/local-handlers.js +375 -0
- package/dist/commands/local-handlers.js.map +1 -0
- package/dist/commands/local-runtime.d.ts +36 -0
- package/dist/commands/local-runtime.js +445 -0
- package/dist/commands/local-runtime.js.map +1 -0
- package/dist/commands/pair.d.ts +7 -0
- package/dist/commands/pair.js +100 -0
- package/dist/commands/pair.js.map +1 -0
- package/dist/commands/provider-config.d.ts +35 -0
- package/dist/commands/provider-config.js +291 -0
- package/dist/commands/provider-config.js.map +1 -0
- package/dist/commands/provider-handlers.d.ts +2 -0
- package/dist/commands/provider-handlers.js +216 -0
- package/dist/commands/provider-handlers.js.map +1 -0
- package/dist/commands/provider-registry.d.ts +19 -0
- package/dist/commands/provider-registry.js +120 -0
- package/dist/commands/provider-registry.js.map +1 -0
- package/dist/commands/run.d.ts +1 -0
- package/dist/commands/run.js +35 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/send-file-utils.d.ts +6 -0
- package/dist/commands/send-file-utils.js +94 -0
- package/dist/commands/send-file-utils.js.map +1 -0
- package/dist/commands/send-file.d.ts +41 -0
- package/dist/commands/send-file.js +492 -0
- package/dist/commands/send-file.js.map +1 -0
- package/dist/commands/set-token.d.ts +1 -0
- package/dist/commands/set-token.js +43 -0
- package/dist/commands/set-token.js.map +1 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +135 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/voice-reply.d.ts +39 -0
- package/dist/commands/voice-reply.js +329 -0
- package/dist/commands/voice-reply.js.map +1 -0
- package/dist/config/config.d.ts +32 -0
- package/dist/config/config.js +103 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/env.d.ts +16 -0
- package/dist/config/env.js +138 -0
- package/dist/config/env.js.map +1 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.js +147 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +117 -0
- package/dist/index.js.map +1 -0
- package/dist/platform/service-manager-common.d.ts +26 -0
- package/dist/platform/service-manager-common.js +51 -0
- package/dist/platform/service-manager-common.js.map +1 -0
- package/dist/platform/service-manager-linux.d.ts +6 -0
- package/dist/platform/service-manager-linux.js +229 -0
- package/dist/platform/service-manager-linux.js.map +1 -0
- package/dist/platform/service-manager.d.ts +16 -0
- package/dist/platform/service-manager.js +165 -0
- package/dist/platform/service-manager.js.map +1 -0
- package/dist/relay/attachment-staging.d.ts +12 -0
- package/dist/relay/attachment-staging.js +116 -0
- package/dist/relay/attachment-staging.js.map +1 -0
- package/dist/relay/chat-history.d.ts +29 -0
- package/dist/relay/chat-history.js +69 -0
- package/dist/relay/chat-history.js.map +1 -0
- package/dist/relay/chat-payload.d.ts +6 -0
- package/dist/relay/chat-payload.js +170 -0
- package/dist/relay/chat-payload.js.map +1 -0
- package/dist/relay/chat-send-attachments.d.ts +4 -0
- package/dist/relay/chat-send-attachments.js +47 -0
- package/dist/relay/chat-send-attachments.js.map +1 -0
- package/dist/relay/gateway-client.d.ts +41 -0
- package/dist/relay/gateway-client.js +288 -0
- package/dist/relay/gateway-client.js.map +1 -0
- package/dist/relay/office-payload.d.ts +19 -0
- package/dist/relay/office-payload.js +205 -0
- package/dist/relay/office-payload.js.map +1 -0
- package/dist/relay/reconnect.d.ts +14 -0
- package/dist/relay/reconnect.js +27 -0
- package/dist/relay/reconnect.js.map +1 -0
- package/dist/relay/relay-manager.d.ts +36 -0
- package/dist/relay/relay-manager.js +619 -0
- package/dist/relay/relay-manager.js.map +1 -0
- package/dist/relay/session-context.d.ts +19 -0
- package/dist/relay/session-context.js +323 -0
- package/dist/relay/session-context.js.map +1 -0
- package/dist/relay/slash-command-catalog.d.ts +8 -0
- package/dist/relay/slash-command-catalog.generated.d.ts +226 -0
- package/dist/relay/slash-command-catalog.generated.js +275 -0
- package/dist/relay/slash-command-catalog.generated.js.map +1 -0
- package/dist/relay/slash-command-catalog.js +3 -0
- package/dist/relay/slash-command-catalog.js.map +1 -0
- package/dist/relay/voice-reply-preference.d.ts +25 -0
- package/dist/relay/voice-reply-preference.js +103 -0
- package/dist/relay/voice-reply-preference.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export const PROVIDER_REGISTRY = {
|
|
2
|
+
anthropic: {
|
|
3
|
+
displayName: "Anthropic",
|
|
4
|
+
defaultBaseUrl: "https://api.anthropic.com",
|
|
5
|
+
api: "anthropic-messages",
|
|
6
|
+
apiKeyEnvName: "ANTHROPIC_API_KEY",
|
|
7
|
+
validationPath: "/v1/models",
|
|
8
|
+
validationAuth: "x-api-key",
|
|
9
|
+
requiresApiKey: true,
|
|
10
|
+
allowMultiple: false,
|
|
11
|
+
showBaseUrl: false,
|
|
12
|
+
showModelId: false,
|
|
13
|
+
defaultModelId: "claude-opus-4-6",
|
|
14
|
+
builtIn: true,
|
|
15
|
+
},
|
|
16
|
+
openai: {
|
|
17
|
+
displayName: "OpenAI",
|
|
18
|
+
defaultBaseUrl: "https://api.openai.com",
|
|
19
|
+
api: "openai-responses",
|
|
20
|
+
apiKeyEnvName: "OPENAI_API_KEY",
|
|
21
|
+
validationPath: "/v1/models",
|
|
22
|
+
validationAuth: "bearer",
|
|
23
|
+
requiresApiKey: true,
|
|
24
|
+
allowMultiple: false,
|
|
25
|
+
showBaseUrl: false,
|
|
26
|
+
showModelId: false,
|
|
27
|
+
defaultModelId: "gpt-4o",
|
|
28
|
+
},
|
|
29
|
+
google: {
|
|
30
|
+
displayName: "Google",
|
|
31
|
+
defaultBaseUrl: "https://generativelanguage.googleapis.com",
|
|
32
|
+
api: "openai-completions",
|
|
33
|
+
apiKeyEnvName: "GOOGLE_API_KEY",
|
|
34
|
+
validationPath: "/v1beta/models",
|
|
35
|
+
validationAuth: "google-query-param",
|
|
36
|
+
requiresApiKey: true,
|
|
37
|
+
allowMultiple: false,
|
|
38
|
+
showBaseUrl: false,
|
|
39
|
+
showModelId: false,
|
|
40
|
+
defaultModelId: "gemini-2.0-flash",
|
|
41
|
+
builtIn: true,
|
|
42
|
+
},
|
|
43
|
+
openrouter: {
|
|
44
|
+
displayName: "OpenRouter",
|
|
45
|
+
defaultBaseUrl: "https://openrouter.ai",
|
|
46
|
+
api: "openai-completions",
|
|
47
|
+
apiKeyEnvName: "OPENROUTER_API_KEY",
|
|
48
|
+
validationPath: "/api/v1/models",
|
|
49
|
+
validationAuth: "bearer",
|
|
50
|
+
requiresApiKey: true,
|
|
51
|
+
allowMultiple: false,
|
|
52
|
+
showBaseUrl: false,
|
|
53
|
+
showModelId: false,
|
|
54
|
+
defaultModelId: "anthropic/claude-opus-4-6",
|
|
55
|
+
},
|
|
56
|
+
ark: {
|
|
57
|
+
displayName: "ByteDance (Ark)",
|
|
58
|
+
defaultBaseUrl: "https://ark.cn-beijing.volces.com",
|
|
59
|
+
api: "openai-completions",
|
|
60
|
+
apiKeyEnvName: "ARK_API_KEY",
|
|
61
|
+
validationPath: "/api/v3/models",
|
|
62
|
+
validationAuth: "bearer",
|
|
63
|
+
requiresApiKey: true,
|
|
64
|
+
allowMultiple: false,
|
|
65
|
+
showBaseUrl: false,
|
|
66
|
+
showModelId: true, // Ark is a platform; user must specify the model endpoint ID
|
|
67
|
+
},
|
|
68
|
+
moonshot: {
|
|
69
|
+
displayName: "Moonshot (Kimi)",
|
|
70
|
+
defaultBaseUrl: "https://api.moonshot.cn",
|
|
71
|
+
api: "openai-completions",
|
|
72
|
+
apiKeyEnvName: "MOONSHOT_API_KEY",
|
|
73
|
+
validationPath: "/v1/models",
|
|
74
|
+
validationAuth: "bearer",
|
|
75
|
+
requiresApiKey: true,
|
|
76
|
+
allowMultiple: false,
|
|
77
|
+
showBaseUrl: false,
|
|
78
|
+
showModelId: false,
|
|
79
|
+
defaultModelId: "kimi-k2.5",
|
|
80
|
+
},
|
|
81
|
+
siliconflow: {
|
|
82
|
+
displayName: "SiliconFlow",
|
|
83
|
+
defaultBaseUrl: "https://api.siliconflow.cn",
|
|
84
|
+
api: "openai-completions",
|
|
85
|
+
apiKeyEnvName: "SILICONFLOW_API_KEY",
|
|
86
|
+
validationPath: "/v1/models",
|
|
87
|
+
validationAuth: "bearer",
|
|
88
|
+
requiresApiKey: true,
|
|
89
|
+
allowMultiple: false,
|
|
90
|
+
showBaseUrl: false,
|
|
91
|
+
showModelId: false,
|
|
92
|
+
defaultModelId: "Qwen/QwQ-32B",
|
|
93
|
+
},
|
|
94
|
+
ollama: {
|
|
95
|
+
displayName: "Ollama",
|
|
96
|
+
defaultBaseUrl: "http://localhost:11434",
|
|
97
|
+
api: "openai-completions",
|
|
98
|
+
apiKeyEnvName: "OLLAMA_API_KEY",
|
|
99
|
+
validationPath: "/api/tags",
|
|
100
|
+
validationAuth: "none",
|
|
101
|
+
requiresApiKey: false,
|
|
102
|
+
allowMultiple: false,
|
|
103
|
+
showBaseUrl: true,
|
|
104
|
+
showModelId: true, // User must specify which model they have pulled
|
|
105
|
+
},
|
|
106
|
+
custom: {
|
|
107
|
+
displayName: "Custom",
|
|
108
|
+
defaultBaseUrl: "",
|
|
109
|
+
api: "openai-completions",
|
|
110
|
+
apiKeyEnvName: "CUSTOM_API_KEY",
|
|
111
|
+
validationPath: "/v1/models",
|
|
112
|
+
validationAuth: "bearer",
|
|
113
|
+
requiresApiKey: false,
|
|
114
|
+
allowMultiple: true,
|
|
115
|
+
showBaseUrl: true,
|
|
116
|
+
showModelId: true,
|
|
117
|
+
defaultModelId: "custom-model",
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=provider-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-registry.js","sourceRoot":"","sources":["../../src/commands/provider-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runCommand(): Promise<void>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { readConfig, readGatewayUrl, readGatewayAuth, readVoiceReplyConfig } from "../config/config.js";
|
|
2
|
+
import { runRelayManager } from "../relay/relay-manager.js";
|
|
3
|
+
import { withReconnect } from "../relay/reconnect.js";
|
|
4
|
+
import { t } from "../i18n/index.js";
|
|
5
|
+
function parseBooleanEnv(value) {
|
|
6
|
+
return /^(1|true|yes|on)$/i.test((value ?? "").trim());
|
|
7
|
+
}
|
|
8
|
+
export async function runCommand() {
|
|
9
|
+
const config = readConfig();
|
|
10
|
+
const gatewayUrl = readGatewayUrl();
|
|
11
|
+
const gatewayAuth = readGatewayAuth(config);
|
|
12
|
+
const defaultVoiceReplyEnabled = parseBooleanEnv(process.env.OPENCLAW_TTS_ENABLED);
|
|
13
|
+
const defaultVoiceReplyConfig = readVoiceReplyConfig(config);
|
|
14
|
+
console.log(t("run.starting"));
|
|
15
|
+
console.log(t("run.gatewayId", config.gatewayId));
|
|
16
|
+
console.log(t("run.relayServer", config.relayServerUrl));
|
|
17
|
+
console.log(t("run.gatewayUrl", gatewayUrl));
|
|
18
|
+
await withReconnect(() => runRelayManager({
|
|
19
|
+
relayServerUrl: config.relayServerUrl,
|
|
20
|
+
gatewayId: config.gatewayId,
|
|
21
|
+
relaySecret: config.relaySecret,
|
|
22
|
+
gatewayUrl,
|
|
23
|
+
gatewayToken: gatewayAuth.token,
|
|
24
|
+
gatewayPassword: gatewayAuth.password,
|
|
25
|
+
defaultVoiceReplyEnabled,
|
|
26
|
+
defaultVoiceReplyConfig,
|
|
27
|
+
onConnected: () => console.log(t("run.connected")),
|
|
28
|
+
onDisconnected: () => console.log(t("run.disconnected")),
|
|
29
|
+
}), {
|
|
30
|
+
onRetry: (attempt, delayMs) => {
|
|
31
|
+
console.log(t("run.retry", String(attempt), String(delayMs)));
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACxG,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AAErC,SAAS,eAAe,CAAC,KAAyB;IAChD,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,wBAAwB,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACnF,MAAM,uBAAuB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7D,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,iBAAiB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC,CAAC;IAE7C,MAAM,aAAa,CACjB,GAAG,EAAE,CACH,eAAe,CAAC;QACd,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,UAAU;QACV,YAAY,EAAE,WAAW,CAAC,KAAK;QAC/B,eAAe,EAAE,WAAW,CAAC,QAAQ;QACrC,wBAAwB;QACxB,uBAAuB;QACvB,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;QAClD,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;KACzD,CAAC,EACJ;QACE,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE;YAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;KACF,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const DEFAULT_FILE_CHUNK_SIZE: number;
|
|
2
|
+
export declare function normalizeSessionKey(sessionKey?: string): string;
|
|
3
|
+
export declare function toRelayHttpBase(relayServerUrl: string): string;
|
|
4
|
+
export declare function inferMimeType(fileName: string): string;
|
|
5
|
+
export declare function calculateChunkCount(sizeBytes: number, chunkSize: number): number;
|
|
6
|
+
export declare function formatFileSize(sizeBytes: number): string;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
const MIME_BY_EXTENSION = {
|
|
2
|
+
".aac": "audio/aac",
|
|
3
|
+
".aiff": "audio/aiff",
|
|
4
|
+
".apk": "application/vnd.android.package-archive",
|
|
5
|
+
".avif": "image/avif",
|
|
6
|
+
".bmp": "image/bmp",
|
|
7
|
+
".csv": "text/csv",
|
|
8
|
+
".dmg": "application/x-apple-diskimage",
|
|
9
|
+
".doc": "application/msword",
|
|
10
|
+
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
11
|
+
".gif": "image/gif",
|
|
12
|
+
".heic": "image/heic",
|
|
13
|
+
".heif": "image/heif",
|
|
14
|
+
".htm": "text/html",
|
|
15
|
+
".html": "text/html",
|
|
16
|
+
".ico": "image/x-icon",
|
|
17
|
+
".jpeg": "image/jpeg",
|
|
18
|
+
".jpg": "image/jpeg",
|
|
19
|
+
".json": "application/json",
|
|
20
|
+
".m4a": "audio/mp4",
|
|
21
|
+
".md": "text/markdown",
|
|
22
|
+
".mov": "video/quicktime",
|
|
23
|
+
".mp3": "audio/mpeg",
|
|
24
|
+
".mp4": "video/mp4",
|
|
25
|
+
".msi": "application/x-msi",
|
|
26
|
+
".pdf": "application/pdf",
|
|
27
|
+
".pkg": "application/octet-stream",
|
|
28
|
+
".png": "image/png",
|
|
29
|
+
".ppt": "application/vnd.ms-powerpoint",
|
|
30
|
+
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
31
|
+
".rar": "application/vnd.rar",
|
|
32
|
+
".rtf": "application/rtf",
|
|
33
|
+
".svg": "image/svg+xml",
|
|
34
|
+
".tar": "application/x-tar",
|
|
35
|
+
".tgz": "application/gzip",
|
|
36
|
+
".txt": "text/plain",
|
|
37
|
+
".wav": "audio/wav",
|
|
38
|
+
".webm": "video/webm",
|
|
39
|
+
".webp": "image/webp",
|
|
40
|
+
".xls": "application/vnd.ms-excel",
|
|
41
|
+
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
42
|
+
".xml": "application/xml",
|
|
43
|
+
".zip": "application/zip",
|
|
44
|
+
};
|
|
45
|
+
export const DEFAULT_FILE_CHUNK_SIZE = 5 * 1024 * 1024;
|
|
46
|
+
export function normalizeSessionKey(sessionKey) {
|
|
47
|
+
const trimmed = sessionKey?.trim() ?? "";
|
|
48
|
+
return trimmed.length > 0 ? trimmed : "main";
|
|
49
|
+
}
|
|
50
|
+
export function toRelayHttpBase(relayServerUrl) {
|
|
51
|
+
const trimmed = relayServerUrl.trim().replace(/\/+$/, "");
|
|
52
|
+
if (!trimmed) {
|
|
53
|
+
throw new Error("relay_server_url_required");
|
|
54
|
+
}
|
|
55
|
+
if (/^https?:\/\//i.test(trimmed)) {
|
|
56
|
+
return trimmed;
|
|
57
|
+
}
|
|
58
|
+
if (/^wss?:\/\//i.test(trimmed)) {
|
|
59
|
+
return trimmed
|
|
60
|
+
.replace(/^wss:\/\//i, "https://")
|
|
61
|
+
.replace(/^ws:\/\//i, "http://");
|
|
62
|
+
}
|
|
63
|
+
return `http://${trimmed}`;
|
|
64
|
+
}
|
|
65
|
+
export function inferMimeType(fileName) {
|
|
66
|
+
const lowerName = fileName.trim().toLowerCase();
|
|
67
|
+
const dotIndex = lowerName.lastIndexOf(".");
|
|
68
|
+
if (dotIndex < 0) {
|
|
69
|
+
return "application/octet-stream";
|
|
70
|
+
}
|
|
71
|
+
const extension = lowerName.slice(dotIndex);
|
|
72
|
+
if (!extension || extension.length > 16) {
|
|
73
|
+
return "application/octet-stream";
|
|
74
|
+
}
|
|
75
|
+
return MIME_BY_EXTENSION[extension] ?? "application/octet-stream";
|
|
76
|
+
}
|
|
77
|
+
export function calculateChunkCount(sizeBytes, chunkSize) {
|
|
78
|
+
const normalizedSize = Math.max(0, Math.floor(sizeBytes));
|
|
79
|
+
const normalizedChunkSize = Math.max(1, Math.floor(chunkSize));
|
|
80
|
+
return Math.max(1, Math.ceil(normalizedSize / normalizedChunkSize));
|
|
81
|
+
}
|
|
82
|
+
export function formatFileSize(sizeBytes) {
|
|
83
|
+
const normalized = Math.max(0, sizeBytes);
|
|
84
|
+
const units = ["B", "KB", "MB", "GB", "TB"];
|
|
85
|
+
let value = normalized;
|
|
86
|
+
let unitIndex = 0;
|
|
87
|
+
while (value >= 1024 && unitIndex < units.length - 1) {
|
|
88
|
+
value /= 1024;
|
|
89
|
+
unitIndex += 1;
|
|
90
|
+
}
|
|
91
|
+
const precision = unitIndex === 0 ? 0 : value >= 10 ? 1 : 2;
|
|
92
|
+
return `${value.toFixed(precision)} ${units[unitIndex]}`;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=send-file-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-file-utils.js","sourceRoot":"","sources":["../../src/commands/send-file-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type ClawConnectConfig } from "../config/config.js";
|
|
2
|
+
export interface SendFileCommandOptions {
|
|
3
|
+
filePath: string;
|
|
4
|
+
gateway?: string;
|
|
5
|
+
session?: string;
|
|
6
|
+
json?: boolean;
|
|
7
|
+
durationMs?: number;
|
|
8
|
+
transcript?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SendFileCommandDependencies {
|
|
11
|
+
loadConfig?: () => ClawConnectConfig;
|
|
12
|
+
fetchImpl?: typeof fetch;
|
|
13
|
+
stdout?: Pick<NodeJS.WritableStream, "write">;
|
|
14
|
+
stderr?: Pick<NodeJS.WritableStream, "write">;
|
|
15
|
+
sessionStoreRoot?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface SendFileResult {
|
|
18
|
+
filePath: string;
|
|
19
|
+
absolutePath: string;
|
|
20
|
+
gatewayId: string;
|
|
21
|
+
sessionKey: string;
|
|
22
|
+
fileId: string;
|
|
23
|
+
uploadId: string;
|
|
24
|
+
fileName: string;
|
|
25
|
+
mimeType: string;
|
|
26
|
+
sizeBytes: number;
|
|
27
|
+
durationMs?: number;
|
|
28
|
+
imageWidth?: number;
|
|
29
|
+
imageHeight?: number;
|
|
30
|
+
sha256: string;
|
|
31
|
+
chunkSize: number;
|
|
32
|
+
totalChunks: number;
|
|
33
|
+
expiresAt: string;
|
|
34
|
+
downloadPath: string;
|
|
35
|
+
downloadUrl: string;
|
|
36
|
+
senderDisplayName?: string;
|
|
37
|
+
status: string;
|
|
38
|
+
createdAt: string;
|
|
39
|
+
updatedAt: string;
|
|
40
|
+
}
|
|
41
|
+
export declare function sendFileCommand(opts: SendFileCommandOptions, deps?: SendFileCommandDependencies): Promise<SendFileResult>;
|