@rethinkingstudio/clawpilot 1.1.16-internal.4 → 1.1.16-internal.6
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/dist/commands/assistant-send.d.ts +20 -0
- package/dist/commands/assistant-send.js +61 -0
- package/dist/commands/assistant-send.js.map +1 -0
- package/dist/commands/send.d.ts +4 -0
- package/dist/commands/send.js +35 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/session-key.d.ts +1 -0
- package/dist/commands/session-key.js +23 -0
- package/dist/commands/session-key.js.map +1 -0
- package/dist/commands/upload.d.ts +10 -0
- package/dist/commands/upload.js +19 -15
- package/dist/commands/upload.js.map +1 -1
- package/dist/i18n/index.js +4 -0
- package/dist/i18n/index.js.map +1 -1
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -1
- package/dist/relay/relay-manager.js +22 -2
- package/dist/relay/relay-manager.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/assistant-send.ts +91 -0
- package/src/commands/send.ts +42 -0
- package/src/commands/session-key.ts +41 -0
- package/src/commands/upload.ts +29 -15
- package/src/i18n/index.ts +4 -0
- package/src/index.ts +50 -0
- package/src/relay/relay-manager.ts +23 -2
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface AssistantSendCommandOptions {
|
|
2
|
+
sessionKey?: string;
|
|
3
|
+
url?: string;
|
|
4
|
+
mimeType?: string;
|
|
5
|
+
fileName?: string;
|
|
6
|
+
message?: string;
|
|
7
|
+
thumbnailUrl?: string;
|
|
8
|
+
width?: string;
|
|
9
|
+
height?: string;
|
|
10
|
+
size?: string;
|
|
11
|
+
durationMs?: string;
|
|
12
|
+
json?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface AssistantSendResult {
|
|
15
|
+
runId: string;
|
|
16
|
+
sessionKey: string;
|
|
17
|
+
messageId: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function sendSyntheticAssistantMessage(options: AssistantSendCommandOptions): Promise<AssistantSendResult>;
|
|
20
|
+
export declare function assistantSendCommand(options: AssistantSendCommandOptions): Promise<void>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { basename } from "path";
|
|
2
|
+
import { randomUUID } from "crypto";
|
|
3
|
+
import { readConfig } from "../config/config.js";
|
|
4
|
+
import { resolveSessionKeyFromStatus } from "./session-key.js";
|
|
5
|
+
function parseOptionalInt(value, label) {
|
|
6
|
+
if (value == null || value.trim() === "")
|
|
7
|
+
return undefined;
|
|
8
|
+
const parsed = Number.parseInt(value, 10);
|
|
9
|
+
if (!Number.isFinite(parsed)) {
|
|
10
|
+
throw new Error(`${label} must be an integer`);
|
|
11
|
+
}
|
|
12
|
+
return parsed;
|
|
13
|
+
}
|
|
14
|
+
export async function sendSyntheticAssistantMessage(options) {
|
|
15
|
+
const config = readConfig();
|
|
16
|
+
const sessionKey = options.sessionKey?.trim() || resolveSessionKeyFromStatus();
|
|
17
|
+
const hasAttachment = Boolean(options.url?.trim());
|
|
18
|
+
const text = options.message?.trim() ?? "";
|
|
19
|
+
if (!hasAttachment && !text) {
|
|
20
|
+
throw new Error("assistant-send requires either --url or --message");
|
|
21
|
+
}
|
|
22
|
+
const attachments = hasAttachment
|
|
23
|
+
? [{
|
|
24
|
+
url: options.url.trim(),
|
|
25
|
+
mimeType: (options.mimeType?.trim() || "application/octet-stream"),
|
|
26
|
+
fileName: options.fileName?.trim() || basename(options.url.trim()),
|
|
27
|
+
thumbnailUrl: options.thumbnailUrl?.trim() || undefined,
|
|
28
|
+
width: parseOptionalInt(options.width, "width"),
|
|
29
|
+
height: parseOptionalInt(options.height, "height"),
|
|
30
|
+
size: parseOptionalInt(options.size, "size"),
|
|
31
|
+
durationMs: parseOptionalInt(options.durationMs, "durationMs"),
|
|
32
|
+
}]
|
|
33
|
+
: [];
|
|
34
|
+
const body = {
|
|
35
|
+
gatewayId: config.gatewayId,
|
|
36
|
+
relaySecret: config.relaySecret,
|
|
37
|
+
sessionKey,
|
|
38
|
+
runId: randomUUID(),
|
|
39
|
+
message: text || (attachments.length > 0 ? "uploaded file" : ""),
|
|
40
|
+
attachments,
|
|
41
|
+
};
|
|
42
|
+
const response = await fetch(`${config.relayServerUrl.replace(/\/$/, "")}/api/relay/assistant-message`, {
|
|
43
|
+
method: "POST",
|
|
44
|
+
headers: { "Content-Type": "application/json" },
|
|
45
|
+
body: JSON.stringify(body),
|
|
46
|
+
});
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
const errorText = await response.text().catch(() => "");
|
|
49
|
+
throw new Error(`assistant-send failed: ${response.status} ${errorText}`);
|
|
50
|
+
}
|
|
51
|
+
return await response.json();
|
|
52
|
+
}
|
|
53
|
+
export async function assistantSendCommand(options) {
|
|
54
|
+
const payload = await sendSyntheticAssistantMessage(options);
|
|
55
|
+
if (options.json) {
|
|
56
|
+
console.log(JSON.stringify(payload));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
console.log(`Assistant message sent: runId=${payload.runId} sessionKey=${payload.sessionKey} messageId=${payload.messageId}`);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=assistant-send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assistant-send.js","sourceRoot":"","sources":["../../src/commands/assistant-send.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { basename } from "path";
|
|
2
|
+
import { t } from "../i18n/index.js";
|
|
3
|
+
import { sendSyntheticAssistantMessage } from "./assistant-send.js";
|
|
4
|
+
import { uploadFile } from "./upload.js";
|
|
5
|
+
export async function sendCommand(filePath, options = {}) {
|
|
6
|
+
if (!options.json) {
|
|
7
|
+
console.log(t("send.preparing", filePath));
|
|
8
|
+
}
|
|
9
|
+
const uploaded = await uploadFile(filePath);
|
|
10
|
+
const result = await sendSyntheticAssistantMessage({
|
|
11
|
+
message: "uploaded file",
|
|
12
|
+
url: uploaded.url,
|
|
13
|
+
mimeType: uploaded.mimeType,
|
|
14
|
+
fileName: uploaded.fileName || basename(uploaded.path),
|
|
15
|
+
thumbnailUrl: uploaded.thumbnailUrl ?? undefined,
|
|
16
|
+
size: String(uploaded.size),
|
|
17
|
+
});
|
|
18
|
+
if (options.json) {
|
|
19
|
+
console.log(JSON.stringify({
|
|
20
|
+
path: uploaded.path,
|
|
21
|
+
fileName: uploaded.fileName,
|
|
22
|
+
mimeType: uploaded.mimeType,
|
|
23
|
+
url: uploaded.url,
|
|
24
|
+
thumbnailUrl: uploaded.thumbnailUrl,
|
|
25
|
+
size: uploaded.size,
|
|
26
|
+
runId: result.runId,
|
|
27
|
+
sessionKey: result.sessionKey,
|
|
28
|
+
messageId: result.messageId,
|
|
29
|
+
}));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
console.log(t("send.completed", uploaded.fileName, result.sessionKey));
|
|
33
|
+
console.log(uploaded.url);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=send.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAMzC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,UAA8B,EAAE;IAClF,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC;QACjD,OAAO,EAAE,eAAe;QACxB,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtD,YAAY,EAAE,QAAQ,CAAC,YAAY,IAAI,SAAS;QAChD,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;KAC5B,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC,CAAC;QACJ,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function resolveSessionKeyFromStatus(): string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { execOpenclaw } from "./openclaw-cli.js";
|
|
2
|
+
function isDirectMainSession(session) {
|
|
3
|
+
return Boolean(session?.key &&
|
|
4
|
+
session.kind === "direct" &&
|
|
5
|
+
!session.key.includes(":cron:"));
|
|
6
|
+
}
|
|
7
|
+
function parseStatus() {
|
|
8
|
+
const raw = execOpenclaw("status --json").toString("utf8").trim();
|
|
9
|
+
return JSON.parse(raw);
|
|
10
|
+
}
|
|
11
|
+
export function resolveSessionKeyFromStatus() {
|
|
12
|
+
const status = parseStatus();
|
|
13
|
+
const sessions = status.sessions;
|
|
14
|
+
if (!sessions) {
|
|
15
|
+
throw new Error("openclaw status did not include sessions");
|
|
16
|
+
}
|
|
17
|
+
const fallback = sessions.recent?.find(isDirectMainSession);
|
|
18
|
+
if (fallback?.key) {
|
|
19
|
+
return fallback.key;
|
|
20
|
+
}
|
|
21
|
+
throw new Error("Could not resolve a recent direct session key from openclaw status");
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=session-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-key.js","sourceRoot":"","sources":["../../src/commands/session-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAcjD,SAAS,mBAAmB,CAAC,OAAkC;IAC7D,OAAO,OAAO,CACZ,OAAO,EAAE,GAAG;QACZ,OAAO,CAAC,IAAI,KAAK,QAAQ;QACzB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,2BAA2B;IACzC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC5D,IAAI,QAAQ,EAAE,GAAG,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,GAAG,CAAC;IACtB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
export interface UploadCommandOptions {
|
|
2
2
|
json?: boolean;
|
|
3
3
|
}
|
|
4
|
+
export interface UploadedFile {
|
|
5
|
+
path: string;
|
|
6
|
+
fileName: string;
|
|
7
|
+
mimeType: string;
|
|
8
|
+
url: string;
|
|
9
|
+
thumbnailUrl: string | null;
|
|
10
|
+
size: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function mimeTypeFromPath(path: string): string;
|
|
13
|
+
export declare function uploadFile(filePath: string): Promise<UploadedFile>;
|
|
4
14
|
export declare function uploadCommand(filePath: string, options?: UploadCommandOptions): Promise<void>;
|
package/dist/commands/upload.js
CHANGED
|
@@ -3,7 +3,7 @@ import { basename, extname, resolve } from "path";
|
|
|
3
3
|
import { readConfig } from "../config/config.js";
|
|
4
4
|
import { t } from "../i18n/index.js";
|
|
5
5
|
import { uploadMedia } from "../media/oss-uploader.js";
|
|
6
|
-
function mimeTypeFromPath(path) {
|
|
6
|
+
export function mimeTypeFromPath(path) {
|
|
7
7
|
switch (extname(path).toLowerCase()) {
|
|
8
8
|
case ".jpg":
|
|
9
9
|
case ".jpeg":
|
|
@@ -48,7 +48,7 @@ async function fetchSts(relayServerUrl, gatewayId, relaySecret, mimeType) {
|
|
|
48
48
|
}
|
|
49
49
|
return res.json();
|
|
50
50
|
}
|
|
51
|
-
export async function
|
|
51
|
+
export async function uploadFile(filePath) {
|
|
52
52
|
if (!filePath.trim()) {
|
|
53
53
|
throw new Error(t("upload.pathRequired"));
|
|
54
54
|
}
|
|
@@ -62,26 +62,30 @@ export async function uploadCommand(filePath, options = {}) {
|
|
|
62
62
|
throw new Error(t("upload.notAFile", absolutePath));
|
|
63
63
|
}
|
|
64
64
|
const mimeType = mimeTypeFromPath(absolutePath);
|
|
65
|
-
if (!options.json) {
|
|
66
|
-
console.log(t("upload.starting", basename(absolutePath), mimeType));
|
|
67
|
-
}
|
|
68
65
|
const [data, sts] = await Promise.all([
|
|
69
66
|
readFile(absolutePath),
|
|
70
67
|
fetchSts(config.relayServerUrl, config.gatewayId, config.relaySecret, mimeType),
|
|
71
68
|
]);
|
|
72
69
|
const result = await uploadMedia(sts, data, mimeType);
|
|
70
|
+
return {
|
|
71
|
+
path: absolutePath,
|
|
72
|
+
fileName: basename(absolutePath),
|
|
73
|
+
mimeType,
|
|
74
|
+
url: result.url,
|
|
75
|
+
thumbnailUrl: result.thumbnailUrl ?? null,
|
|
76
|
+
size: result.size,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export async function uploadCommand(filePath, options = {}) {
|
|
80
|
+
const absolutePath = resolve(filePath);
|
|
81
|
+
const mimeType = mimeTypeFromPath(absolutePath);
|
|
73
82
|
if (options.json) {
|
|
74
|
-
console.log(JSON.stringify(
|
|
75
|
-
path: absolutePath,
|
|
76
|
-
fileName: basename(absolutePath),
|
|
77
|
-
mimeType,
|
|
78
|
-
url: result.url,
|
|
79
|
-
thumbnailUrl: result.thumbnailUrl ?? null,
|
|
80
|
-
size: result.size,
|
|
81
|
-
}));
|
|
83
|
+
console.log(JSON.stringify(await uploadFile(filePath)));
|
|
82
84
|
return;
|
|
83
85
|
}
|
|
84
|
-
console.log(t("upload.
|
|
85
|
-
|
|
86
|
+
console.log(t("upload.starting", basename(absolutePath), mimeType));
|
|
87
|
+
const uploaded = await uploadFile(filePath);
|
|
88
|
+
console.log(t("upload.completed", uploaded.url));
|
|
89
|
+
console.log(uploaded.url);
|
|
86
90
|
}
|
|
87
91
|
//# sourceMappingURL=upload.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,WAAW,EAAuB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/index.js
CHANGED
|
@@ -70,6 +70,8 @@ const en = {
|
|
|
70
70
|
"upload.notAFile": (path) => `Path is not a file: ${path}`,
|
|
71
71
|
"upload.starting": (name, mimeType) => `Uploading ${name} (${mimeType})…`,
|
|
72
72
|
"upload.completed": (url) => `Upload complete: ${url}`,
|
|
73
|
+
"send.preparing": (path) => `Sending file via PocketClaw: ${path}`,
|
|
74
|
+
"send.completed": (name, sessionKey) => `Sent ${name} to session ${sessionKey}`,
|
|
73
75
|
};
|
|
74
76
|
const zh = {
|
|
75
77
|
// pair
|
|
@@ -143,6 +145,8 @@ const zh = {
|
|
|
143
145
|
"upload.notAFile": (path) => `路径不是文件:${path}`,
|
|
144
146
|
"upload.starting": (name, mimeType) => `正在上传 ${name} (${mimeType})…`,
|
|
145
147
|
"upload.completed": (url) => `上传完成:${url}`,
|
|
148
|
+
"send.preparing": (path) => `正在通过 PocketClaw 发送文件:${path}`,
|
|
149
|
+
"send.completed": (name, sessionKey) => `已将 ${name} 发送到会话 ${sessionKey}`,
|
|
146
150
|
};
|
|
147
151
|
function detectLocale() {
|
|
148
152
|
const lang = process.env.LANG ?? process.env.LC_ALL ?? process.env.LANGUAGE ?? "";
|
package/dist/i18n/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAIA,MAAM,EAAE,GAA6B;IACnC,OAAO;IACP,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,kCAAkC,EAAE,4BAA4B;IAClG,yBAAyB,EAAE,+HAA+H;IAC1J,oBAAoB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,kCAAkC,MAAM,IAAI,IAAI,EAAE;IAC1F,kBAAkB,EAAE,gCAAgC;IACpD,yBAAyB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAwB,MAAM,IAAI,IAAI,EAAE;IACrF,iBAAiB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,2BAA2B,EAAE,EAAE;IAC1D,aAAa,EAAE,gDAAgD;IAC/D,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,iCAAiC,IAAI,EAAE;IACpE,wBAAwB,EAAE,iDAAiD;IAE3E,MAAM;IACN,cAAc,EAAE,+BAA+B;IAC/C,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAmB,EAAE,EAAE;IAChD,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAmB,GAAG,EAAE;IACpD,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAmB,GAAG,EAAE;IACnD,eAAe,EAAE,kBAAkB;IACnC,kBAAkB,EAAE,mCAAmC;IACvD,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,OAAO,aAAa,KAAK,KAAK;IAEhF,UAAU;IACV,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,qCAAqC,OAAO,GAAG;IACtF,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,kCAAkC,OAAO,GAAG;IAClF,4BAA4B,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,4BAA4B,IAAI,EAAE;IAC1E,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,OAAO,EAAE;IAClE,oBAAoB,EAAE,2BAA2B;IACjD,0BAA0B,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,yBAAyB,OAAO,GAAG;IAC5E,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,iCAAiC,OAAO,GAAG;IACjF,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,4BAA4B,OAAO,GAAG;IACtE,2BAA2B,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,yCAAyC,OAAO,GAAG;IAC7F,mBAAmB,EAAE,iCAAiC;IACtD,qBAAqB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,+DAA+D,QAAQ,EAAE;IAC9G,uBAAuB,EAAE,yDAAyD;IAClF,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,IAAI,EAAE;IAC5D,4BAA4B,EAAE,0BAA0B;IACxD,kBAAkB,EAAE,uBAAuB;IAC3C,uBAAuB,EAAE,wDAAwD;IAEjF,SAAS;IACT,cAAc,EAAE,uCAAuC;IACvD,kBAAkB,EAAE,sDAAsD;IAC1E,eAAe,EAAE,qBAAqB;IACtC,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,IAAI,EAAE;IAC1D,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,oBAAoB,EAAE,EAAE;IACpD,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,GAAG,EAAE;IACxD,wBAAwB,EAAE,2CAA2C;IACrE,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,eAAe,GAAG,EAAE;IAC/C,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,sBAAsB,OAAO,EAAE;IACtE,4BAA4B,EAAE,wDAAwD;IACtF,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,2BAA2B,OAAO,GAAG;IAC3E,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;IAChD,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,IAAI,KAAK,MAAM,EAAE;IACxE,sBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,IAAI,KAAK,MAAM,EAAE;IAC1E,0BAA0B,EAAE,0CAA0C;IACtE,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,IAAI,EAAE;IAC1D,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,aAAa,OAAO,EAAE;IAC1D,2BAA2B,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,0CAA0C,QAAQ,EAAE;IAE/F,YAAY;IACZ,oBAAoB,EAAE,sDAAsD;IAC5E,sBAAsB,EAAE,qCAAqC;IAC7D,kBAAkB,EAAE,wEAAwE;IAC5F,kBAAkB,EAAE,wBAAwB;IAC5C,qBAAqB,EAAE,qDAAqD;IAC5E,kBAAkB,EAAE,8EAA8E;IAClG,iBAAiB,EAAE,wCAAwC;IAC3D,gBAAgB,EAAE,yCAAyC;IAC3D,kBAAkB,EAAE,6CAA6C;IACjE,kBAAkB,EAAE,gDAAgD;IAEpE,SAAS;IACT,qBAAqB,EAAE,6BAA6B;IACpD,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,IAAI,EAAE;IACzD,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,IAAI,EAAE;IAC1D,iBAAiB,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,aAAa,IAAI,KAAK,QAAQ,IAAI;IACzE,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,GAAG,EAAE;IACtD,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gCAAgC,IAAI,EAAE;IAClE,gBAAgB,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,QAAQ,IAAI,eAAe,UAAU,EAAE;CAChF,CAAC;AAEF,MAAM,EAAE,GAA6B;IACnC,OAAO;IACP,wBAAwB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,EAAE,YAAY;IAC7D,yBAAyB,EAAE,0DAA0D;IACrF,oBAAoB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE;IACnE,kBAAkB,EAAE,aAAa;IACjC,yBAAyB,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE;IACrE,iBAAiB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,cAAc,EAAE,EAAE;IAC7C,aAAa,EAAE,6BAA6B;IAC5C,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,IAAI,EAAE;IACnD,wBAAwB,EAAE,kBAAkB;IAE5C,MAAM;IACN,cAAc,EAAE,oBAAoB;IACpC,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,EAAE,EAAE;IAC5C,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,GAAG,EAAE;IAC5C,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,GAAG,EAAE;IAC5C,eAAe,EAAE,QAAQ;IACzB,kBAAkB,EAAE,aAAa;IACjC,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,OAAO,WAAW,KAAK,KAAK;IAElE,UAAU;IACV,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,OAAO,SAAS;IAChE,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,OAAO,UAAU;IAC7D,4BAA4B,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;IACzD,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,OAAO,EAAE;IACxD,oBAAoB,EAAE,WAAW;IACjC,0BAA0B,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,OAAO,MAAM;IAC/D,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,OAAO,UAAU;IAC7D,iBAAiB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,OAAO,WAAW;IACzD,2BAA2B,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,OAAO,MAAM;IACrE,mBAAmB,EAAE,eAAe;IACpC,qBAAqB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,QAAQ,aAAa;IAClE,uBAAuB,EAAE,2BAA2B;IACpD,uBAAuB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;IACpD,4BAA4B,EAAE,WAAW;IACzC,kBAAkB,EAAE,UAAU;IAC9B,uBAAuB,EAAE,mCAAmC;IAE5D,SAAS;IACT,cAAc,EAAE,2BAA2B;IAC3C,kBAAkB,EAAE,mCAAmC;IACvD,eAAe,EAAE,WAAW;IAC5B,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE;IAChD,kBAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE;IAC7C,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,WAAW,GAAG,EAAE;IAC/C,wBAAwB,EAAE,gBAAgB;IAC1C,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,GAAG,EAAE;IAC1C,wBAAwB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,OAAO,EAAE;IAC3D,4BAA4B,EAAE,uCAAuC;IACrE,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,OAAO,GAAG;IAChE,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,EAAE;IAC7C,oBAAoB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,IAAI,KAAK,MAAM,EAAE;IACnE,sBAAsB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,IAAI,KAAK,MAAM,EAAE;IACrE,0BAA0B,EAAE,iBAAiB;IAC7C,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE;IAChD,qBAAqB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,OAAO,EAAE;IACvD,2BAA2B,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,QAAQ,OAAO;IAExE,YAAY;IACZ,oBAAoB,EAAE,gCAAgC;IACtD,sBAAsB,EAAE,uBAAuB;IAC/C,kBAAkB,EAAE,+CAA+C;IACnE,kBAAkB,EAAE,aAAa;IACjC,qBAAqB,EAAE,qDAAqD;IAC5E,kBAAkB,EAAE,kDAAkD;IACtE,iBAAiB,EAAE,uBAAuB;IAC1C,gBAAgB,EAAE,qCAAqC;IACvD,kBAAkB,EAAE,sCAAsC;IAC1D,kBAAkB,EAAE,kCAAkC;IAEtD,SAAS;IACT,qBAAqB,EAAE,UAAU;IACjC,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE;IAC/C,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,IAAI,EAAE;IAC7C,iBAAiB,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,KAAK,QAAQ,IAAI;IACpE,kBAAkB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE;IAC1C,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,IAAI,EAAE;IAC1D,gBAAgB,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,MAAM,IAAI,UAAU,UAAU,EAAE;CACzE,CAAC;AAEF,SAAS,YAAY;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAClF,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3D,CAAC;AAED,MAAM,MAAM,GAAW,YAAY,EAAE,CAAC;AACtC,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAEvC,MAAM,UAAU,CAAC,CAAC,GAAW,EAAE,GAAG,IAAc;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;IACxC,IAAI,OAAO,GAAG,KAAK,UAAU;QAAE,OAAQ,GAAa,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9D,OAAO,GAAa,CAAC;AACvB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,8 @@ import { installCommand, uninstallCommand, stopCommand, restartCommand, resetCom
|
|
|
7
7
|
import { statusCommand } from "./commands/status.js";
|
|
8
8
|
import { setTokenCommand } from "./commands/set-token.js";
|
|
9
9
|
import { uploadCommand } from "./commands/upload.js";
|
|
10
|
+
import { assistantSendCommand } from "./commands/assistant-send.js";
|
|
11
|
+
import { sendCommand } from "./commands/send.js";
|
|
10
12
|
import { DEFAULT_RELAY_SERVER } from "./generated/build-config.js";
|
|
11
13
|
const require = createRequire(import.meta.url);
|
|
12
14
|
const { version } = require("../package.json");
|
|
@@ -97,6 +99,42 @@ program
|
|
|
97
99
|
process.exit(1);
|
|
98
100
|
}
|
|
99
101
|
});
|
|
102
|
+
program
|
|
103
|
+
.command("send <file>")
|
|
104
|
+
.description("Upload a local file and send it back to PocketClaw as an assistant message")
|
|
105
|
+
.option("--json", "Print machine-readable JSON output", false)
|
|
106
|
+
.action(async (file, opts) => {
|
|
107
|
+
try {
|
|
108
|
+
await sendCommand(file, { json: opts.json });
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
console.error("Error:", err instanceof Error ? err.message : err);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
program
|
|
116
|
+
.command("assistant-send")
|
|
117
|
+
.description("Send a synthetic assistant message to the current PocketClaw session")
|
|
118
|
+
.option("--session-key <key>", "Explicit session key to target")
|
|
119
|
+
.option("--url <url>", "Attachment URL to include")
|
|
120
|
+
.option("--mime-type <mimeType>", "Attachment MIME type")
|
|
121
|
+
.option("--file-name <fileName>", "Attachment file name")
|
|
122
|
+
.option("--message <text>", "Assistant text content", "")
|
|
123
|
+
.option("--thumbnail-url <url>", "Optional thumbnail URL for video attachments")
|
|
124
|
+
.option("--width <px>", "Attachment width")
|
|
125
|
+
.option("--height <px>", "Attachment height")
|
|
126
|
+
.option("--size <bytes>", "Attachment size in bytes")
|
|
127
|
+
.option("--duration-ms <ms>", "Attachment duration in milliseconds")
|
|
128
|
+
.option("--json", "Print machine-readable JSON output", false)
|
|
129
|
+
.action(async (opts) => {
|
|
130
|
+
try {
|
|
131
|
+
await assistantSendCommand(opts);
|
|
132
|
+
}
|
|
133
|
+
catch (err) {
|
|
134
|
+
console.error("Error:", err instanceof Error ? err.message : err);
|
|
135
|
+
process.exit(1);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
100
138
|
program
|
|
101
139
|
.command("reset")
|
|
102
140
|
.description("Clear saved config and stop service — use when switching servers or on auth errors")
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,33 @@ import { handleProviderCommand } from "../commands/provider-handlers.js";
|
|
|
5
5
|
import { getServicePlatform } from "../platform/service-manager.js";
|
|
6
6
|
import { uploadAssistantAttachments } from "../media/assistant-attachments.js";
|
|
7
7
|
import { homedir } from "os";
|
|
8
|
-
import { join } from "path";
|
|
8
|
+
import { extname, join } from "path";
|
|
9
9
|
import { mkdir, writeFile } from "fs/promises";
|
|
10
10
|
import { randomUUID } from "crypto";
|
|
11
11
|
// ---------------------------------------------------------------------------
|
|
12
12
|
// Constants
|
|
13
13
|
// ---------------------------------------------------------------------------
|
|
14
14
|
const OUTBOUND_DIR = join(homedir(), ".openclaw", "media", "outbound");
|
|
15
|
+
function extensionFromMimeType(mimeType) {
|
|
16
|
+
const map = {
|
|
17
|
+
"image/jpeg": ".jpg",
|
|
18
|
+
"image/png": ".png",
|
|
19
|
+
"image/gif": ".gif",
|
|
20
|
+
"image/webp": ".webp",
|
|
21
|
+
"video/mp4": ".mp4",
|
|
22
|
+
"video/quicktime": ".mov",
|
|
23
|
+
"audio/mpeg": ".mp3",
|
|
24
|
+
"audio/mp4": ".m4a",
|
|
25
|
+
"audio/wav": ".wav",
|
|
26
|
+
"audio/x-wav": ".wav",
|
|
27
|
+
"audio/aac": ".aac",
|
|
28
|
+
"application/pdf": ".pdf",
|
|
29
|
+
"text/plain": ".txt",
|
|
30
|
+
"text/markdown": ".md",
|
|
31
|
+
"application/json": ".json",
|
|
32
|
+
};
|
|
33
|
+
return map[mimeType] ?? ".bin";
|
|
34
|
+
}
|
|
15
35
|
// ---------------------------------------------------------------------------
|
|
16
36
|
// Main entry point
|
|
17
37
|
// ---------------------------------------------------------------------------
|
|
@@ -167,7 +187,7 @@ export async function runRelayManager(opts) {
|
|
|
167
187
|
try {
|
|
168
188
|
// Decode base64 to buffer
|
|
169
189
|
const buffer = Buffer.from(att.content, "base64");
|
|
170
|
-
const ext = att.
|
|
190
|
+
const ext = extname(att.fileName ?? "") || extensionFromMimeType(att.mimeType);
|
|
171
191
|
const stagedFileName = `${randomUUID()}${ext}`;
|
|
172
192
|
const stagedPath = join(OUTBOUND_DIR, stagedFileName);
|
|
173
193
|
// Write to disk
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay-manager.js","sourceRoot":"","sources":["../../src/relay/relay-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"relay-manager.js","sourceRoot":"","sources":["../../src/relay/relay-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { basename } from "path";
|
|
2
|
+
import { randomUUID } from "crypto";
|
|
3
|
+
import { readConfig } from "../config/config.js";
|
|
4
|
+
import { resolveSessionKeyFromStatus } from "./session-key.js";
|
|
5
|
+
|
|
6
|
+
export interface AssistantSendCommandOptions {
|
|
7
|
+
sessionKey?: string;
|
|
8
|
+
url?: string;
|
|
9
|
+
mimeType?: string;
|
|
10
|
+
fileName?: string;
|
|
11
|
+
message?: string;
|
|
12
|
+
thumbnailUrl?: string;
|
|
13
|
+
width?: string;
|
|
14
|
+
height?: string;
|
|
15
|
+
size?: string;
|
|
16
|
+
durationMs?: string;
|
|
17
|
+
json?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface AssistantSendResult {
|
|
21
|
+
runId: string;
|
|
22
|
+
sessionKey: string;
|
|
23
|
+
messageId: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function parseOptionalInt(value: string | undefined, label: string): number | undefined {
|
|
27
|
+
if (value == null || value.trim() === "") return undefined;
|
|
28
|
+
const parsed = Number.parseInt(value, 10);
|
|
29
|
+
if (!Number.isFinite(parsed)) {
|
|
30
|
+
throw new Error(`${label} must be an integer`);
|
|
31
|
+
}
|
|
32
|
+
return parsed;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export async function sendSyntheticAssistantMessage(
|
|
36
|
+
options: AssistantSendCommandOptions
|
|
37
|
+
): Promise<AssistantSendResult> {
|
|
38
|
+
const config = readConfig();
|
|
39
|
+
const sessionKey = options.sessionKey?.trim() || resolveSessionKeyFromStatus();
|
|
40
|
+
const hasAttachment = Boolean(options.url?.trim());
|
|
41
|
+
const text = options.message?.trim() ?? "";
|
|
42
|
+
|
|
43
|
+
if (!hasAttachment && !text) {
|
|
44
|
+
throw new Error("assistant-send requires either --url or --message");
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const attachments = hasAttachment
|
|
48
|
+
? [{
|
|
49
|
+
url: options.url!.trim(),
|
|
50
|
+
mimeType: (options.mimeType?.trim() || "application/octet-stream"),
|
|
51
|
+
fileName: options.fileName?.trim() || basename(options.url!.trim()),
|
|
52
|
+
thumbnailUrl: options.thumbnailUrl?.trim() || undefined,
|
|
53
|
+
width: parseOptionalInt(options.width, "width"),
|
|
54
|
+
height: parseOptionalInt(options.height, "height"),
|
|
55
|
+
size: parseOptionalInt(options.size, "size"),
|
|
56
|
+
durationMs: parseOptionalInt(options.durationMs, "durationMs"),
|
|
57
|
+
}]
|
|
58
|
+
: [];
|
|
59
|
+
|
|
60
|
+
const body = {
|
|
61
|
+
gatewayId: config.gatewayId,
|
|
62
|
+
relaySecret: config.relaySecret,
|
|
63
|
+
sessionKey,
|
|
64
|
+
runId: randomUUID(),
|
|
65
|
+
message: text || (attachments.length > 0 ? "uploaded file" : ""),
|
|
66
|
+
attachments,
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const response = await fetch(`${config.relayServerUrl.replace(/\/$/, "")}/api/relay/assistant-message`, {
|
|
70
|
+
method: "POST",
|
|
71
|
+
headers: { "Content-Type": "application/json" },
|
|
72
|
+
body: JSON.stringify(body),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
if (!response.ok) {
|
|
76
|
+
const errorText = await response.text().catch(() => "");
|
|
77
|
+
throw new Error(`assistant-send failed: ${response.status} ${errorText}`);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return await response.json() as AssistantSendResult;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export async function assistantSendCommand(options: AssistantSendCommandOptions): Promise<void> {
|
|
84
|
+
const payload = await sendSyntheticAssistantMessage(options);
|
|
85
|
+
if (options.json) {
|
|
86
|
+
console.log(JSON.stringify(payload));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
console.log(`Assistant message sent: runId=${payload.runId} sessionKey=${payload.sessionKey} messageId=${payload.messageId}`);
|
|
91
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { basename } from "path";
|
|
2
|
+
import { t } from "../i18n/index.js";
|
|
3
|
+
import { sendSyntheticAssistantMessage } from "./assistant-send.js";
|
|
4
|
+
import { uploadFile } from "./upload.js";
|
|
5
|
+
|
|
6
|
+
export interface SendCommandOptions {
|
|
7
|
+
json?: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export async function sendCommand(filePath: string, options: SendCommandOptions = {}): Promise<void> {
|
|
11
|
+
if (!options.json) {
|
|
12
|
+
console.log(t("send.preparing", filePath));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const uploaded = await uploadFile(filePath);
|
|
16
|
+
const result = await sendSyntheticAssistantMessage({
|
|
17
|
+
message: "uploaded file",
|
|
18
|
+
url: uploaded.url,
|
|
19
|
+
mimeType: uploaded.mimeType,
|
|
20
|
+
fileName: uploaded.fileName || basename(uploaded.path),
|
|
21
|
+
thumbnailUrl: uploaded.thumbnailUrl ?? undefined,
|
|
22
|
+
size: String(uploaded.size),
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
if (options.json) {
|
|
26
|
+
console.log(JSON.stringify({
|
|
27
|
+
path: uploaded.path,
|
|
28
|
+
fileName: uploaded.fileName,
|
|
29
|
+
mimeType: uploaded.mimeType,
|
|
30
|
+
url: uploaded.url,
|
|
31
|
+
thumbnailUrl: uploaded.thumbnailUrl,
|
|
32
|
+
size: uploaded.size,
|
|
33
|
+
runId: result.runId,
|
|
34
|
+
sessionKey: result.sessionKey,
|
|
35
|
+
messageId: result.messageId,
|
|
36
|
+
}));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
console.log(t("send.completed", uploaded.fileName, result.sessionKey));
|
|
41
|
+
console.log(uploaded.url);
|
|
42
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { execOpenclaw } from "./openclaw-cli.js";
|
|
2
|
+
|
|
3
|
+
type StatusSession = {
|
|
4
|
+
agentId?: string;
|
|
5
|
+
key?: string;
|
|
6
|
+
kind?: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
type StatusPayload = {
|
|
10
|
+
sessions?: {
|
|
11
|
+
recent?: StatusSession[];
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
function isDirectMainSession(session: StatusSession | undefined): session is StatusSession & { key: string } {
|
|
16
|
+
return Boolean(
|
|
17
|
+
session?.key &&
|
|
18
|
+
session.kind === "direct" &&
|
|
19
|
+
!session.key.includes(":cron:")
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function parseStatus(): StatusPayload {
|
|
24
|
+
const raw = execOpenclaw("status --json").toString("utf8").trim();
|
|
25
|
+
return JSON.parse(raw) as StatusPayload;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function resolveSessionKeyFromStatus(): string {
|
|
29
|
+
const status = parseStatus();
|
|
30
|
+
const sessions = status.sessions;
|
|
31
|
+
if (!sessions) {
|
|
32
|
+
throw new Error("openclaw status did not include sessions");
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const fallback = sessions.recent?.find(isDirectMainSession);
|
|
36
|
+
if (fallback?.key) {
|
|
37
|
+
return fallback.key;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
throw new Error("Could not resolve a recent direct session key from openclaw status");
|
|
41
|
+
}
|
package/src/commands/upload.ts
CHANGED
|
@@ -8,7 +8,16 @@ export interface UploadCommandOptions {
|
|
|
8
8
|
json?: boolean;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
export interface UploadedFile {
|
|
12
|
+
path: string;
|
|
13
|
+
fileName: string;
|
|
14
|
+
mimeType: string;
|
|
15
|
+
url: string;
|
|
16
|
+
thumbnailUrl: string | null;
|
|
17
|
+
size: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function mimeTypeFromPath(path: string): string {
|
|
12
21
|
switch (extname(path).toLowerCase()) {
|
|
13
22
|
case ".jpg":
|
|
14
23
|
case ".jpeg":
|
|
@@ -62,7 +71,7 @@ async function fetchSts(
|
|
|
62
71
|
return res.json() as Promise<StsCredentials>;
|
|
63
72
|
}
|
|
64
73
|
|
|
65
|
-
export async function
|
|
74
|
+
export async function uploadFile(filePath: string): Promise<UploadedFile> {
|
|
66
75
|
if (!filePath.trim()) {
|
|
67
76
|
throw new Error(t("upload.pathRequired"));
|
|
68
77
|
}
|
|
@@ -78,9 +87,6 @@ export async function uploadCommand(filePath: string, options: UploadCommandOpti
|
|
|
78
87
|
}
|
|
79
88
|
|
|
80
89
|
const mimeType = mimeTypeFromPath(absolutePath);
|
|
81
|
-
if (!options.json) {
|
|
82
|
-
console.log(t("upload.starting", basename(absolutePath), mimeType));
|
|
83
|
-
}
|
|
84
90
|
|
|
85
91
|
const [data, sts] = await Promise.all([
|
|
86
92
|
readFile(absolutePath),
|
|
@@ -88,18 +94,26 @@ export async function uploadCommand(filePath: string, options: UploadCommandOpti
|
|
|
88
94
|
]);
|
|
89
95
|
|
|
90
96
|
const result = await uploadMedia(sts, data, mimeType);
|
|
97
|
+
return {
|
|
98
|
+
path: absolutePath,
|
|
99
|
+
fileName: basename(absolutePath),
|
|
100
|
+
mimeType,
|
|
101
|
+
url: result.url,
|
|
102
|
+
thumbnailUrl: result.thumbnailUrl ?? null,
|
|
103
|
+
size: result.size,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export async function uploadCommand(filePath: string, options: UploadCommandOptions = {}): Promise<void> {
|
|
108
|
+
const absolutePath = resolve(filePath);
|
|
109
|
+
const mimeType = mimeTypeFromPath(absolutePath);
|
|
91
110
|
if (options.json) {
|
|
92
|
-
console.log(JSON.stringify(
|
|
93
|
-
path: absolutePath,
|
|
94
|
-
fileName: basename(absolutePath),
|
|
95
|
-
mimeType,
|
|
96
|
-
url: result.url,
|
|
97
|
-
thumbnailUrl: result.thumbnailUrl ?? null,
|
|
98
|
-
size: result.size,
|
|
99
|
-
}));
|
|
111
|
+
console.log(JSON.stringify(await uploadFile(filePath)));
|
|
100
112
|
return;
|
|
101
113
|
}
|
|
102
114
|
|
|
103
|
-
console.log(t("upload.
|
|
104
|
-
|
|
115
|
+
console.log(t("upload.starting", basename(absolutePath), mimeType));
|
|
116
|
+
const uploaded = await uploadFile(filePath);
|
|
117
|
+
console.log(t("upload.completed", uploaded.url));
|
|
118
|
+
console.log(uploaded.url);
|
|
105
119
|
}
|
package/src/i18n/index.ts
CHANGED
|
@@ -79,6 +79,8 @@ const en: Record<string, MsgValue> = {
|
|
|
79
79
|
"upload.notAFile": (path) => `Path is not a file: ${path}`,
|
|
80
80
|
"upload.starting": (name, mimeType) => `Uploading ${name} (${mimeType})…`,
|
|
81
81
|
"upload.completed": (url) => `Upload complete: ${url}`,
|
|
82
|
+
"send.preparing": (path) => `Sending file via PocketClaw: ${path}`,
|
|
83
|
+
"send.completed": (name, sessionKey) => `Sent ${name} to session ${sessionKey}`,
|
|
82
84
|
};
|
|
83
85
|
|
|
84
86
|
const zh: Record<string, MsgValue> = {
|
|
@@ -158,6 +160,8 @@ const zh: Record<string, MsgValue> = {
|
|
|
158
160
|
"upload.notAFile": (path) => `路径不是文件:${path}`,
|
|
159
161
|
"upload.starting": (name, mimeType) => `正在上传 ${name} (${mimeType})…`,
|
|
160
162
|
"upload.completed": (url) => `上传完成:${url}`,
|
|
163
|
+
"send.preparing": (path) => `正在通过 PocketClaw 发送文件:${path}`,
|
|
164
|
+
"send.completed": (name, sessionKey) => `已将 ${name} 发送到会话 ${sessionKey}`,
|
|
161
165
|
};
|
|
162
166
|
|
|
163
167
|
function detectLocale(): Locale {
|
package/src/index.ts
CHANGED
|
@@ -7,6 +7,8 @@ import { installCommand, uninstallCommand, stopCommand, restartCommand, resetCom
|
|
|
7
7
|
import { statusCommand } from "./commands/status.js";
|
|
8
8
|
import { setTokenCommand } from "./commands/set-token.js";
|
|
9
9
|
import { uploadCommand } from "./commands/upload.js";
|
|
10
|
+
import { assistantSendCommand } from "./commands/assistant-send.js";
|
|
11
|
+
import { sendCommand } from "./commands/send.js";
|
|
10
12
|
import { DEFAULT_RELAY_SERVER } from "./generated/build-config.js";
|
|
11
13
|
|
|
12
14
|
const require = createRequire(import.meta.url);
|
|
@@ -106,6 +108,54 @@ program
|
|
|
106
108
|
}
|
|
107
109
|
});
|
|
108
110
|
|
|
111
|
+
program
|
|
112
|
+
.command("send <file>")
|
|
113
|
+
.description("Upload a local file and send it back to PocketClaw as an assistant message")
|
|
114
|
+
.option("--json", "Print machine-readable JSON output", false)
|
|
115
|
+
.action(async (file: string, opts: { json?: boolean }) => {
|
|
116
|
+
try {
|
|
117
|
+
await sendCommand(file, { json: opts.json });
|
|
118
|
+
} catch (err) {
|
|
119
|
+
console.error("Error:", err instanceof Error ? err.message : err);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
program
|
|
125
|
+
.command("assistant-send")
|
|
126
|
+
.description("Send a synthetic assistant message to the current PocketClaw session")
|
|
127
|
+
.option("--session-key <key>", "Explicit session key to target")
|
|
128
|
+
.option("--url <url>", "Attachment URL to include")
|
|
129
|
+
.option("--mime-type <mimeType>", "Attachment MIME type")
|
|
130
|
+
.option("--file-name <fileName>", "Attachment file name")
|
|
131
|
+
.option("--message <text>", "Assistant text content", "")
|
|
132
|
+
.option("--thumbnail-url <url>", "Optional thumbnail URL for video attachments")
|
|
133
|
+
.option("--width <px>", "Attachment width")
|
|
134
|
+
.option("--height <px>", "Attachment height")
|
|
135
|
+
.option("--size <bytes>", "Attachment size in bytes")
|
|
136
|
+
.option("--duration-ms <ms>", "Attachment duration in milliseconds")
|
|
137
|
+
.option("--json", "Print machine-readable JSON output", false)
|
|
138
|
+
.action(async (opts: {
|
|
139
|
+
sessionKey?: string;
|
|
140
|
+
url?: string;
|
|
141
|
+
mimeType?: string;
|
|
142
|
+
fileName?: string;
|
|
143
|
+
message?: string;
|
|
144
|
+
thumbnailUrl?: string;
|
|
145
|
+
width?: string;
|
|
146
|
+
height?: string;
|
|
147
|
+
size?: string;
|
|
148
|
+
durationMs?: string;
|
|
149
|
+
json?: boolean;
|
|
150
|
+
}) => {
|
|
151
|
+
try {
|
|
152
|
+
await assistantSendCommand(opts);
|
|
153
|
+
} catch (err) {
|
|
154
|
+
console.error("Error:", err instanceof Error ? err.message : err);
|
|
155
|
+
process.exit(1);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
|
|
109
159
|
program
|
|
110
160
|
.command("reset")
|
|
111
161
|
.description("Clear saved config and stop service — use when switching servers or on auth errors")
|
|
@@ -5,7 +5,7 @@ import { handleProviderCommand } from "../commands/provider-handlers.js";
|
|
|
5
5
|
import { getServicePlatform } from "../platform/service-manager.js";
|
|
6
6
|
import { uploadAssistantAttachments } from "../media/assistant-attachments.js";
|
|
7
7
|
import { homedir } from "os";
|
|
8
|
-
import { join } from "path";
|
|
8
|
+
import { extname, join } from "path";
|
|
9
9
|
import { mkdir, writeFile } from "fs/promises";
|
|
10
10
|
import { randomUUID } from "crypto";
|
|
11
11
|
|
|
@@ -15,6 +15,27 @@ import { randomUUID } from "crypto";
|
|
|
15
15
|
|
|
16
16
|
const OUTBOUND_DIR = join(homedir(), ".openclaw", "media", "outbound");
|
|
17
17
|
|
|
18
|
+
function extensionFromMimeType(mimeType: string): string {
|
|
19
|
+
const map: Record<string, string> = {
|
|
20
|
+
"image/jpeg": ".jpg",
|
|
21
|
+
"image/png": ".png",
|
|
22
|
+
"image/gif": ".gif",
|
|
23
|
+
"image/webp": ".webp",
|
|
24
|
+
"video/mp4": ".mp4",
|
|
25
|
+
"video/quicktime": ".mov",
|
|
26
|
+
"audio/mpeg": ".mp3",
|
|
27
|
+
"audio/mp4": ".m4a",
|
|
28
|
+
"audio/wav": ".wav",
|
|
29
|
+
"audio/x-wav": ".wav",
|
|
30
|
+
"audio/aac": ".aac",
|
|
31
|
+
"application/pdf": ".pdf",
|
|
32
|
+
"text/plain": ".txt",
|
|
33
|
+
"text/markdown": ".md",
|
|
34
|
+
"application/json": ".json",
|
|
35
|
+
};
|
|
36
|
+
return map[mimeType] ?? ".bin";
|
|
37
|
+
}
|
|
38
|
+
|
|
18
39
|
// ---------------------------------------------------------------------------
|
|
19
40
|
// Messages: relay client ↔ relay server
|
|
20
41
|
// ---------------------------------------------------------------------------
|
|
@@ -228,7 +249,7 @@ export async function runRelayManager(opts: RelayManagerOptions): Promise<boolea
|
|
|
228
249
|
try {
|
|
229
250
|
// Decode base64 to buffer
|
|
230
251
|
const buffer = Buffer.from(att.content, "base64");
|
|
231
|
-
const ext = att.
|
|
252
|
+
const ext = extname(att.fileName ?? "") || extensionFromMimeType(att.mimeType);
|
|
232
253
|
const stagedFileName = `${randomUUID()}${ext}`;
|
|
233
254
|
const stagedPath = join(OUTBOUND_DIR, stagedFileName);
|
|
234
255
|
|