@rethinkingstudio/clawpilot 1.1.16-internal.4 → 1.1.16-internal.5

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.
@@ -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,4 @@
1
+ export interface SendCommandOptions {
2
+ json?: boolean;
3
+ }
4
+ export declare function sendCommand(filePath: string, options?: SendCommandOptions): Promise<void>;
@@ -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>;
@@ -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 uploadCommand(filePath, options = {}) {
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.completed", result.url));
85
- console.log(result.url);
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":"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"}
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/commands/upload.ts"],"names":[],"mappings":"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"}
@@ -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 ?? "";
@@ -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":"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"}
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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rethinkingstudio/clawpilot",
3
- "version": "1.1.16-internal.4",
3
+ "version": "1.1.16-internal.5",
4
4
  "description": "ClawAI relay client for Mac mini",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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
+ }
@@ -8,7 +8,16 @@ export interface UploadCommandOptions {
8
8
  json?: boolean;
9
9
  }
10
10
 
11
- function mimeTypeFromPath(path: string): string {
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 uploadCommand(filePath: string, options: UploadCommandOptions = {}): Promise<void> {
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.completed", result.url));
104
- console.log(result.url);
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")