@shadowob/cloud 1.1.6 → 1.1.7

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.
@@ -699,6 +699,7 @@ var HOME_DIR = RUNNER_HOME_DIR;
699
699
  var WORKSPACE_DIR = "/workspace";
700
700
  var OPENCLAW_SKILLS_DIR = `${HOME_DIR}/.openclaw/skills`;
701
701
  var CC_CONNECT_CONFIG_PATH = `${HOME_DIR}/.cc-connect/config.toml`;
702
+ var SHADOWOB_CLI_CONFIG_PATH = `${HOME_DIR}/.shadowob/shadowob.config.json`;
702
703
  var SHADOW_SLASH_COMMANDS_PATH = `${SHADOWOB_CONFIG_MOUNT_PATH}/slash-commands.json`;
703
704
  function hasRuntimeExtensions(extension) {
704
705
  return Boolean(
@@ -827,6 +828,22 @@ function addShadowobSkill(files, runtimeKind, runtimeId) {
827
828
  files[`${HOME_DIR}/.hermes/skills/shadowob/SKILL.md`] = skill;
828
829
  }
829
830
  }
831
+ function addShadowobCliAuth(files, runtimeExtensions) {
832
+ const bindings = shadowBindings(runtimeExtensions);
833
+ const profiles = {};
834
+ for (const [index, binding] of bindings.entries()) {
835
+ const profileName = binding.buddyId?.trim() || (index === 0 ? "default" : `shadow-${index + 1}`);
836
+ profiles[profileName] = {
837
+ serverUrl: envPlaceholder(binding.serverUrlEnvKey),
838
+ token: envPlaceholder(binding.tokenEnvKey)
839
+ };
840
+ }
841
+ const currentProfile = Object.keys(profiles)[0] ?? "default";
842
+ files[SHADOWOB_CLI_CONFIG_PATH] = json({
843
+ profiles,
844
+ currentProfile
845
+ });
846
+ }
830
847
 
831
848
  // src/runtimes/slash-commands/openclaw.ts
832
849
  var OPENCLAW_SLASH_COMMANDS_SOURCE = "https://docs.openclaw.ai/tools/slash-commands";
@@ -923,6 +940,7 @@ var openclawAdapter = {
923
940
  [SHADOW_SLASH_COMMANDS_PATH]: json(openClawSlashCommands)
924
941
  };
925
942
  addShadowobSkill(runtimeFiles, "openclaw", context.agent.runtime);
943
+ addShadowobCliAuth(runtimeFiles, context.runtimeExtensions);
926
944
  const configData = {
927
945
  "config.json": JSON.stringify(openclawConfig, null, 2),
928
946
  "runtime-files.json": json(runtimeFiles),
@@ -986,6 +1004,7 @@ function buildCcConnectRuntimeFiles(options) {
986
1004
  ...options.nativeFiles ?? {}
987
1005
  };
988
1006
  addShadowobSkill(files, "cc-connect", agent.runtime);
1007
+ addShadowobCliAuth(files, options.runtimeExtensions);
989
1008
  return files;
990
1009
  }
991
1010
  function buildCcConnectPackage(context, options) {
@@ -1000,6 +1019,7 @@ function buildCcConnectPackage(context, options) {
1000
1019
  const files = buildCcConnectRuntimeFiles({
1001
1020
  agent: context.agent,
1002
1021
  ccConnectConfig,
1022
+ runtimeExtensions: context.runtimeExtensions,
1003
1023
  nativeFiles: options.nativeFiles?.(context),
1004
1024
  shadowSlashCommands: options.shadowSlashCommands
1005
1025
  });
@@ -1691,6 +1711,7 @@ var hermesAdapter = {
1691
1711
  [SHADOW_SLASH_COMMANDS_PATH]: json(hermesSlashCommands)
1692
1712
  };
1693
1713
  addShadowobSkill(files, "hermes", "hermes");
1714
+ addShadowobCliAuth(files, context.runtimeExtensions);
1694
1715
  const pluginRoot = `${HOME_DIR}/.hermes/plugins/shadowob`;
1695
1716
  files[`${pluginRoot}/plugin.yaml`] = readHermesPluginFile(
1696
1717
  context.cwd,
@@ -14,7 +14,7 @@ function createConsoleCommand(container) {
14
14
  });
15
15
  }, 1500);
16
16
  }
17
- const { createServeCommand } = await import("./serve.command-Q46LHQG6.js");
17
+ const { createServeCommand } = await import("./serve.command-RD6I6MFD.js");
18
18
  const serve = createServeCommand(container);
19
19
  await serve.parseAsync(
20
20
  ["--port", port, "--namespace", ...options.namespace, "--host", "127.0.0.1"],
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  collectRuntimeEnvRequirements
3
- } from "./chunk-FSW4TNHN.js";
3
+ } from "./chunk-ZHVYNIHA.js";
4
4
 
5
5
  // src/interfaces/cli/init.command.ts
6
6
  import { cp, stat, writeFile } from "fs/promises";
@@ -7,7 +7,7 @@ import {
7
7
  normalizeDeploymentRuntimeContext,
8
8
  parseJsonc,
9
9
  runtimeStatePvcName
10
- } from "./chunk-FSW4TNHN.js";
10
+ } from "./chunk-ZHVYNIHA.js";
11
11
  import {
12
12
  getPluginRegistry,
13
13
  loadAllPlugins
@@ -16,7 +16,7 @@ function createConsoleCommand(container) {
16
16
  });
17
17
  }, 1500);
18
18
  }
19
- const { createServeCommand } = await import("./serve.command-2AHJI665.js");
19
+ const { createServeCommand } = await import("./serve.command-XLBJUOV6.js");
20
20
  const serve = createServeCommand(container);
21
21
  await serve.parseAsync(
22
22
  ["--port", port, "--namespace", ...options.namespace, "--host", "127.0.0.1"],
@@ -7,7 +7,7 @@ import {
7
7
  normalizeDeploymentRuntimeContext,
8
8
  parseJsonc,
9
9
  runtimeStatePvcName
10
- } from "./chunk-ULOJLXQV.js";
10
+ } from "./chunk-35LJYCQF.js";
11
11
  import {
12
12
  getPluginRegistry,
13
13
  loadAllPlugins
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  collectRuntimeEnvRequirements
4
- } from "./chunk-ULOJLXQV.js";
4
+ } from "./chunk-35LJYCQF.js";
5
5
 
6
6
  // src/interfaces/cli/init.command.ts
7
7
  import { cp, stat, writeFile } from "fs/promises";
@@ -702,6 +702,7 @@ var HOME_DIR = RUNNER_HOME_DIR;
702
702
  var WORKSPACE_DIR = "/workspace";
703
703
  var OPENCLAW_SKILLS_DIR = `${HOME_DIR}/.openclaw/skills`;
704
704
  var CC_CONNECT_CONFIG_PATH = `${HOME_DIR}/.cc-connect/config.toml`;
705
+ var SHADOWOB_CLI_CONFIG_PATH = `${HOME_DIR}/.shadowob/shadowob.config.json`;
705
706
  var SHADOW_SLASH_COMMANDS_PATH = `${SHADOWOB_CONFIG_MOUNT_PATH}/slash-commands.json`;
706
707
  function hasRuntimeExtensions(extension) {
707
708
  return Boolean(
@@ -830,6 +831,22 @@ function addShadowobSkill(files, runtimeKind, runtimeId) {
830
831
  files[`${HOME_DIR}/.hermes/skills/shadowob/SKILL.md`] = skill;
831
832
  }
832
833
  }
834
+ function addShadowobCliAuth(files, runtimeExtensions) {
835
+ const bindings = shadowBindings(runtimeExtensions);
836
+ const profiles = {};
837
+ for (const [index, binding] of bindings.entries()) {
838
+ const profileName = binding.buddyId?.trim() || (index === 0 ? "default" : `shadow-${index + 1}`);
839
+ profiles[profileName] = {
840
+ serverUrl: envPlaceholder(binding.serverUrlEnvKey),
841
+ token: envPlaceholder(binding.tokenEnvKey)
842
+ };
843
+ }
844
+ const currentProfile = Object.keys(profiles)[0] ?? "default";
845
+ files[SHADOWOB_CLI_CONFIG_PATH] = json({
846
+ profiles,
847
+ currentProfile
848
+ });
849
+ }
833
850
 
834
851
  // src/runtimes/slash-commands/openclaw.ts
835
852
  var OPENCLAW_SLASH_COMMANDS_SOURCE = "https://docs.openclaw.ai/tools/slash-commands";
@@ -926,6 +943,7 @@ var openclawAdapter = {
926
943
  [SHADOW_SLASH_COMMANDS_PATH]: json(openClawSlashCommands)
927
944
  };
928
945
  addShadowobSkill(runtimeFiles, "openclaw", context.agent.runtime);
946
+ addShadowobCliAuth(runtimeFiles, context.runtimeExtensions);
929
947
  const configData = {
930
948
  "config.json": JSON.stringify(openclawConfig, null, 2),
931
949
  "runtime-files.json": json(runtimeFiles),
@@ -989,6 +1007,7 @@ function buildCcConnectRuntimeFiles(options) {
989
1007
  ...options.nativeFiles ?? {}
990
1008
  };
991
1009
  addShadowobSkill(files, "cc-connect", agent.runtime);
1010
+ addShadowobCliAuth(files, options.runtimeExtensions);
992
1011
  return files;
993
1012
  }
994
1013
  function buildCcConnectPackage(context, options) {
@@ -1003,6 +1022,7 @@ function buildCcConnectPackage(context, options) {
1003
1022
  const files = buildCcConnectRuntimeFiles({
1004
1023
  agent: context.agent,
1005
1024
  ccConnectConfig,
1025
+ runtimeExtensions: context.runtimeExtensions,
1006
1026
  nativeFiles: options.nativeFiles?.(context),
1007
1027
  shadowSlashCommands: options.shadowSlashCommands
1008
1028
  });
@@ -1694,6 +1714,7 @@ var hermesAdapter = {
1694
1714
  [SHADOW_SLASH_COMMANDS_PATH]: json(hermesSlashCommands)
1695
1715
  };
1696
1716
  addShadowobSkill(files, "hermes", "hermes");
1717
+ addShadowobCliAuth(files, context.runtimeExtensions);
1697
1718
  const pluginRoot = `${HOME_DIR}/.hermes/plugins/shadowob`;
1698
1719
  files[`${pluginRoot}/plugin.yaml`] = readHermesPluginFile(
1699
1720
  context.cwd,
package/dist/cli.js CHANGED
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  createConsoleCommand
4
- } from "./chunk-SIDBK5SZ.js";
4
+ } from "./chunk-KODMGZUC.js";
5
5
  import {
6
6
  createInitCommand
7
- } from "./chunk-IXN3FU5J.js";
7
+ } from "./chunk-SAP2DBHO.js";
8
8
  import {
9
9
  formatProvisionState,
10
10
  loadProvisionState,
@@ -17,7 +17,7 @@ import {
17
17
  resolveCloudPackageAssetDir,
18
18
  toProviderSecretEnvKey,
19
19
  withLegacyEnvAliases
20
- } from "./chunk-XFJX4NWN.js";
20
+ } from "./chunk-LXJBQBGL.js";
21
21
  import {
22
22
  RUNNER_AGENTS_VOLUME_NAME,
23
23
  RUNNER_CONFIG_MOUNT_PATH,
@@ -43,7 +43,7 @@ import {
43
43
  resolveConfig,
44
44
  runtimeContextEnv,
45
45
  runtimeStatePvcName
46
- } from "./chunk-ULOJLXQV.js";
46
+ } from "./chunk-35LJYCQF.js";
47
47
  import {
48
48
  deepMerge,
49
49
  getPluginRegistry
@@ -1381,7 +1381,7 @@ function createOnboardCommand(container2) {
1381
1381
  } else {
1382
1382
  const answer = await ask(` No ${configPath} found. Create one from template? [Y/n] `);
1383
1383
  if (!answer || answer.toLowerCase() !== "n") {
1384
- const { createInitCommand: createInitCommand2 } = await import("./init.command-WGKN3GC6.js");
1384
+ const { createInitCommand: createInitCommand2 } = await import("./init.command-YVG4X6II.js");
1385
1385
  const init = createInitCommand2(container2);
1386
1386
  await init.parseAsync(["--quick"], { from: "user" });
1387
1387
  } else {
@@ -1398,7 +1398,7 @@ function createOnboardCommand(container2) {
1398
1398
  }
1399
1399
  container2.logger.success("Onboarding complete! Starting console...");
1400
1400
  console.log();
1401
- const { createConsoleCommand: createConsoleCommand2 } = await import("./dashboard.command-SCAAQ23X.js");
1401
+ const { createConsoleCommand: createConsoleCommand2 } = await import("./dashboard.command-ZMQFKLNQ.js");
1402
1402
  const console_ = createConsoleCommand2(container2);
1403
1403
  await console_.parseAsync([], { from: "user" });
1404
1404
  });
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createConsoleCommand
3
- } from "./chunk-HRTBOZ7O.js";
3
+ } from "./chunk-6YAYCWGK.js";
4
4
  import "./chunk-R5U7XKVJ.js";
5
5
  export {
6
6
  createConsoleCommand
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  createConsoleCommand
4
- } from "./chunk-SIDBK5SZ.js";
4
+ } from "./chunk-KODMGZUC.js";
5
5
  import "./chunk-AD3JTIU3.js";
6
6
  export {
7
7
  createConsoleCommand
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  createConsoleCommand
3
- } from "./chunk-HRTBOZ7O.js";
3
+ } from "./chunk-6YAYCWGK.js";
4
4
  import {
5
5
  createInitCommand
6
- } from "./chunk-2FWJSE6Z.js";
6
+ } from "./chunk-C6OI4ZNO.js";
7
7
  import {
8
8
  formatProvisionState,
9
9
  loadProvisionState,
@@ -26,7 +26,7 @@ import {
26
26
  toProviderSecretEnvKey,
27
27
  validateCloudSaasConfigSnapshot,
28
28
  withLegacyEnvAliases
29
- } from "./chunk-I3NRNCDR.js";
29
+ } from "./chunk-EWB7L7IW.js";
30
30
  import {
31
31
  RUNNER_AGENTS_VOLUME_NAME,
32
32
  RUNNER_CONFIG_MOUNT_PATH,
@@ -56,7 +56,7 @@ import {
56
56
  runtimeContextEnv,
57
57
  runtimeStatePvcName,
58
58
  validateCloudConfig
59
- } from "./chunk-FSW4TNHN.js";
59
+ } from "./chunk-ZHVYNIHA.js";
60
60
  import {
61
61
  deepMerge,
62
62
  getPluginRegistry
@@ -10965,7 +10965,7 @@ function createOnboardCommand(container) {
10965
10965
  } else {
10966
10966
  const answer = await ask(` No ${configPath} found. Create one from template? [Y/n] `);
10967
10967
  if (!answer || answer.toLowerCase() !== "n") {
10968
- const { createInitCommand: createInitCommand2 } = await import("./init.command-775GLXTC.js");
10968
+ const { createInitCommand: createInitCommand2 } = await import("./init.command-JKE3SXAS.js");
10969
10969
  const init = createInitCommand2(container);
10970
10970
  await init.parseAsync(["--quick"], { from: "user" });
10971
10971
  } else {
@@ -10982,7 +10982,7 @@ function createOnboardCommand(container) {
10982
10982
  }
10983
10983
  container.logger.success("Onboarding complete! Starting console...");
10984
10984
  console.log();
10985
- const { createConsoleCommand: createConsoleCommand2 } = await import("./dashboard.command-H5DIGLUR.js");
10985
+ const { createConsoleCommand: createConsoleCommand2 } = await import("./dashboard.command-2AM45SIT.js");
10986
10986
  const console_ = createConsoleCommand2(container);
10987
10987
  await console_.parseAsync([], { from: "user" });
10988
10988
  });
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createInitCommand
3
- } from "./chunk-2FWJSE6Z.js";
4
- import "./chunk-FSW4TNHN.js";
3
+ } from "./chunk-C6OI4ZNO.js";
4
+ import "./chunk-ZHVYNIHA.js";
5
5
  import "./chunk-JUPAE5IA.js";
6
6
  import "./chunk-R5U7XKVJ.js";
7
7
  export {
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  createInitCommand
4
- } from "./chunk-IXN3FU5J.js";
5
- import "./chunk-ULOJLXQV.js";
4
+ } from "./chunk-SAP2DBHO.js";
5
+ import "./chunk-35LJYCQF.js";
6
6
  import "./chunk-6P2K6QZR.js";
7
7
  import "./chunk-AD3JTIU3.js";
8
8
  export {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createServeCommand
3
- } from "./chunk-I3NRNCDR.js";
4
- import "./chunk-FSW4TNHN.js";
3
+ } from "./chunk-EWB7L7IW.js";
4
+ import "./chunk-ZHVYNIHA.js";
5
5
  import "./chunk-JUPAE5IA.js";
6
6
  import "./chunk-R5U7XKVJ.js";
7
7
  export {
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  createServeCommand
4
- } from "./chunk-XFJX4NWN.js";
5
- import "./chunk-ULOJLXQV.js";
4
+ } from "./chunk-LXJBQBGL.js";
5
+ import "./chunk-35LJYCQF.js";
6
6
  import "./chunk-6P2K6QZR.js";
7
7
  import "./chunk-AD3JTIU3.js";
8
8
  export {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: shadowob
3
- description: "Use when live Shadow context or actions are needed: channel/DM history, pins, members, server/channel/workspace/shop/app/agent data, or sending/managing Shadow content via the shadowob CLI."
3
+ description: "Use when live Shadow context or actions are needed: channel/DM history, pins, members, server/channel/workspace/shop/app/buddy data, or sending/managing Shadow content via the shadowob CLI."
4
4
  metadata:
5
5
  {
6
6
  "openclaw":
@@ -18,7 +18,7 @@ allowed-tools: ["exec"]
18
18
  Use `shadowob` CLI to interact with Shadow servers.
19
19
 
20
20
  Activate this skill when you need current Shadow context, such as recent channel or DM history,
21
- pinned messages, member/server/channel state, workspace/shop/app/agent data, or when you need to
21
+ pinned messages, member/server/channel state, workspace/shop/app/buddy data, or when you need to
22
22
  send or manage Shadow content. Prefer narrow `--json` reads before acting.
23
23
 
24
24
  ## Quickstart
@@ -78,13 +78,13 @@ shadowob servers discover --json
78
78
 
79
79
  ```bash
80
80
  # List channels
81
- shadowob channels list --server-id <server-id> --json
81
+ shadowob channels list --server <server> --json
82
82
 
83
83
  # Get channel
84
84
  shadowob channels get <channel-id> --json
85
85
 
86
86
  # Create/Delete
87
- shadowob channels create --server-id <id> --name <name> [--type text] --json
87
+ shadowob channels create --server <server> --name <name> [--type text] --json
88
88
  shadowob channels delete <channel-id>
89
89
 
90
90
  # Messages
@@ -141,29 +141,29 @@ shadowob dms send <dm-channel-id> --content "text" --json
141
141
  shadowob dms delete <dm-channel-id>
142
142
  ```
143
143
 
144
- ## Agents
144
+ ## Buddies
145
145
 
146
146
  ```bash
147
- # List agents
148
- shadowob agents list --json
147
+ # List buddies
148
+ shadowob buddies list --json
149
149
 
150
- # Get agent
151
- shadowob agents get <agent-id> --json
150
+ # Get buddy
151
+ shadowob buddies get <buddy-id> --json
152
152
 
153
153
  # Create/Update/Delete
154
- shadowob agents create --name <name> [--display-name <name>] [--avatar-url <url>] --json
155
- shadowob agents update <agent-id> [--name <name>] [--display-name <name>] --json
156
- shadowob agents delete <agent-id>
154
+ shadowob buddies create --name <name> --username <username> [--display-name <name>] [--avatar-url <url>] --json
155
+ shadowob buddies update <buddy-id> [--name <name>] [--display-name <name>] --json
156
+ shadowob buddies delete <buddy-id>
157
157
 
158
158
  # Control
159
- shadowob agents start <agent-id>
160
- shadowob agents stop <agent-id>
159
+ shadowob buddies start <buddy-id>
160
+ shadowob buddies stop <buddy-id>
161
161
 
162
162
  # Token
163
- shadowob agents token <agent-id> --json
163
+ shadowob buddies token <buddy-id> --json
164
164
 
165
165
  # Config
166
- shadowob agents config <agent-id> --json
166
+ shadowob buddies config <buddy-id> --json
167
167
  ```
168
168
 
169
169
  ## Workspace
@@ -211,7 +211,6 @@ shadowob shop me get --json
211
211
  shadowob shop products list <server-id> [--status active] [--keyword <text>] [--limit <n>] --json
212
212
  shadowob shop products list-by-shop <shop-id> [--status active] [--limit <n>] --json
213
213
  shadowob shop products get <server-id> <product-id> --json
214
- shadowob shop products context <product-id> --json
215
214
  shadowob shop products purchase <shop-id> <product-id> --idempotency-key <unique-operation-id> --json
216
215
 
217
216
  # Offers, deliverables, and shop assets
@@ -246,7 +245,7 @@ shadowob commerce cards list --channel-id <channel-id> [--keyword <text>] --json
246
245
  shadowob commerce cards purchase <message-id> <card-id> --idempotency-key <unique-operation-id> --json
247
246
 
248
247
  # Purchases, delivery, protected files, and community assets
249
- shadowob commerce entitlements list [--server-id <server-id>] --json
248
+ shadowob commerce entitlements list [--server <server>] --json
250
249
  shadowob commerce entitlements get <entitlement-id> --json
251
250
  shadowob commerce entitlements verify <entitlement-id> --json
252
251
  shadowob commerce paid-files open <file-id> --json
@@ -277,17 +276,22 @@ shadowob commerce gifts send --recipient-user-id <user-id> --assets '<json-array
277
276
  # Server App integrations
278
277
  shadowob app list --server <server-id-or-slug> --json
279
278
  shadowob app preview --server <server-id-or-slug> --manifest-url <manifest-url> --json
279
+ shadowob app install --server <server-id-or-slug> --manifest-url <manifest-url> --json
280
+ shadowob app uninstall <app-key> --server <server-id-or-slug>
280
281
  shadowob app discover --server <server-id-or-slug> --json
281
282
  shadowob app inspect <app-key> --server <server-id-or-slug> --json
282
283
  shadowob app skills <app-key> --server <server-id-or-slug>
283
- shadowob app call <app-key> <command> --server <server-id-or-slug> --json-input '<raw-command-input-json>' --json
284
+ shadowob app call <app-key> <command> --server <server-id-or-slug> --channel-id <channel-id> --json-input '<raw-command-input-json>' --json
284
285
  ```
285
286
 
286
287
  For server App commands, use the `shadowob app` CLI path only. Do not use curl, fetch, raw HTTP
287
288
  routes, or the JavaScript SDK to call server App commands. Pass the command input object directly
288
289
  to `--json-input`, for example `{"title":"Example","priority":"high"}`; the CLI wraps the HTTP
289
290
  request for you and binds Shadow OAuth identity, server membership, App grants, and command policy.
290
- When a channel message mentions a server App, use the mentioned app key/server id directly.
291
+ When a channel message mentions a server App, use the mentioned app key/server id directly and pass
292
+ the current channel id with `--channel-id` when available. If a server App command requires
293
+ approval, do not send a chat form or call the approval endpoint yourself as a Buddy. Wait for a
294
+ person to confirm the Shadow approval popup, then retry the original command.
291
295
 
292
296
  ```bash
293
297
  # Legacy workspace apps
@@ -404,7 +408,7 @@ shadowob marketplace contracts extend <contract-id> --hours <n> --json
404
408
 
405
409
  ```bash
406
410
  # Upload a file
407
- shadowob media upload --file <path> [--server-id <id>] [--channel-id <id>] --json
411
+ shadowob media upload --file <path> [--server <server>] [--channel-id <id>] --json
408
412
 
409
413
  # Download a file
410
414
  shadowob media download <file-url> [--output <path>]
@@ -414,7 +418,7 @@ shadowob media download <file-url> [--output <path>]
414
418
 
415
419
  ```bash
416
420
  # Search messages
417
- shadowob search messages --query <text> [--server-id <id>] [--channel-id <id>] [--author-id <id>] [--after <date>] [--before <date>] [--has-attachments] [--limit <n>] --json
421
+ shadowob search messages --query <text> [--server <server>] [--channel-id <id>] [--author-id <id>] [--after <date>] [--before <date>] [--has-attachments] [--limit <n>] --json
418
422
  ```
419
423
 
420
424
  ## Listen (Real-time Events)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shadowob/cloud",
3
- "version": "1.1.6",
3
+ "version": "1.1.7",
4
4
  "description": "shadowob-cloud — deploy AI agents to Kubernetes",
5
5
  "type": "module",
6
6
  "bin": {
@@ -58,8 +58,8 @@
58
58
  "yaml": "^2.8.4",
59
59
  "zod": "^3.25.76",
60
60
  "zustand": "^5.0.13",
61
- "@shadowob/sdk": "1.1.6",
62
- "@shadowob/shared": "1.1.6"
61
+ "@shadowob/sdk": "1.1.7",
62
+ "@shadowob/shared": "1.1.7"
63
63
  },
64
64
  "devDependencies": {
65
65
  "@playwright/test": "^1.52.0",