@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.
- package/dist/{chunk-ULOJLXQV.js → chunk-35LJYCQF.js} +21 -0
- package/dist/{chunk-HRTBOZ7O.js → chunk-6YAYCWGK.js} +1 -1
- package/dist/{chunk-2FWJSE6Z.js → chunk-C6OI4ZNO.js} +1 -1
- package/dist/{chunk-I3NRNCDR.js → chunk-EWB7L7IW.js} +1 -1
- package/dist/{chunk-SIDBK5SZ.js → chunk-KODMGZUC.js} +1 -1
- package/dist/{chunk-XFJX4NWN.js → chunk-LXJBQBGL.js} +1 -1
- package/dist/{chunk-IXN3FU5J.js → chunk-SAP2DBHO.js} +1 -1
- package/dist/{chunk-FSW4TNHN.js → chunk-ZHVYNIHA.js} +21 -0
- package/dist/cli.js +6 -6
- package/dist/{dashboard.command-H5DIGLUR.js → dashboard.command-2AM45SIT.js} +1 -1
- package/dist/{dashboard.command-SCAAQ23X.js → dashboard.command-ZMQFKLNQ.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/{init.command-775GLXTC.js → init.command-JKE3SXAS.js} +2 -2
- package/dist/{init.command-WGKN3GC6.js → init.command-YVG4X6II.js} +2 -2
- package/dist/{serve.command-Q46LHQG6.js → serve.command-RD6I6MFD.js} +2 -2
- package/dist/{serve.command-2AHJI665.js → serve.command-XLBJUOV6.js} +2 -2
- package/dist/skills/shadowob-cli/SKILL.md +26 -22
- package/package.json +3 -3
|
@@ -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-
|
|
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"],
|
|
@@ -16,7 +16,7 @@ function createConsoleCommand(container) {
|
|
|
16
16
|
});
|
|
17
17
|
}, 1500);
|
|
18
18
|
}
|
|
19
|
-
const { createServeCommand } = await import("./serve.command-
|
|
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"],
|
|
@@ -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-
|
|
4
|
+
} from "./chunk-KODMGZUC.js";
|
|
5
5
|
import {
|
|
6
6
|
createInitCommand
|
|
7
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
});
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createConsoleCommand
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6YAYCWGK.js";
|
|
4
4
|
import {
|
|
5
5
|
createInitCommand
|
|
6
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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,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/
|
|
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/
|
|
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
|
|
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
|
|
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
|
-
##
|
|
144
|
+
## Buddies
|
|
145
145
|
|
|
146
146
|
```bash
|
|
147
|
-
# List
|
|
148
|
-
shadowob
|
|
147
|
+
# List buddies
|
|
148
|
+
shadowob buddies list --json
|
|
149
149
|
|
|
150
|
-
# Get
|
|
151
|
-
shadowob
|
|
150
|
+
# Get buddy
|
|
151
|
+
shadowob buddies get <buddy-id> --json
|
|
152
152
|
|
|
153
153
|
# Create/Update/Delete
|
|
154
|
-
shadowob
|
|
155
|
-
shadowob
|
|
156
|
-
shadowob
|
|
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
|
|
160
|
-
shadowob
|
|
159
|
+
shadowob buddies start <buddy-id>
|
|
160
|
+
shadowob buddies stop <buddy-id>
|
|
161
161
|
|
|
162
162
|
# Token
|
|
163
|
-
shadowob
|
|
163
|
+
shadowob buddies token <buddy-id> --json
|
|
164
164
|
|
|
165
165
|
# Config
|
|
166
|
-
shadowob
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
62
|
-
"@shadowob/shared": "1.1.
|
|
61
|
+
"@shadowob/sdk": "1.1.7",
|
|
62
|
+
"@shadowob/shared": "1.1.7"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@playwright/test": "^1.52.0",
|