@springbrand/cli 0.1.1 → 0.1.2-alpha.1
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/README.md +2 -2
- package/assets/springbrand-icon.svg +18 -0
- package/dist/commands/connect.d.ts.map +1 -1
- package/dist/commands/connect.js +35 -6
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +71 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/lib/codex-plugin.d.ts +7 -0
- package/dist/lib/codex-plugin.d.ts.map +1 -0
- package/dist/lib/codex-plugin.js +132 -0
- package/dist/lib/codex-plugin.js.map +1 -0
- package/dist/lib/connect-clients.d.ts +5 -0
- package/dist/lib/connect-clients.d.ts.map +1 -1
- package/dist/lib/connect-clients.js +8 -4
- package/dist/lib/connect-clients.js.map +1 -1
- package/dist/lib/cursor-config.d.ts.map +1 -1
- package/dist/lib/cursor-config.js +7 -3
- package/dist/lib/cursor-config.js.map +1 -1
- package/dist/lib/hermes-plugin.d.ts.map +1 -1
- package/dist/lib/hermes-plugin.js +2 -1
- package/dist/lib/hermes-plugin.js.map +1 -1
- package/dist/lib/mcp-endpoint.d.ts +2 -0
- package/dist/lib/mcp-endpoint.d.ts.map +1 -1
- package/dist/lib/mcp-endpoint.js +4 -0
- package/dist/lib/mcp-endpoint.js.map +1 -1
- package/dist/lib/omp-config.d.ts.map +1 -1
- package/dist/lib/omp-config.js +3 -2
- package/dist/lib/omp-config.js.map +1 -1
- package/dist/lib/pi-config.d.ts.map +1 -1
- package/dist/lib/pi-config.js +3 -2
- package/dist/lib/pi-config.js.map +1 -1
- package/dist/lib/skill-install.d.ts +3 -0
- package/dist/lib/skill-install.d.ts.map +1 -1
- package/dist/lib/skill-install.js +7 -1
- package/dist/lib/skill-install.js.map +1 -1
- package/dist/lib/skill-vendor.d.ts +2 -0
- package/dist/lib/skill-vendor.d.ts.map +1 -1
- package/dist/lib/skill-vendor.js +14 -0
- package/dist/lib/skill-vendor.js.map +1 -1
- package/dist/lib/uninstall.d.ts +23 -0
- package/dist/lib/uninstall.d.ts.map +1 -0
- package/dist/lib/uninstall.js +72 -0
- package/dist/lib/uninstall.js.map +1 -0
- package/dist/lib/workbuddy-config.d.ts.map +1 -1
- package/dist/lib/workbuddy-config.js +2 -1
- package/dist/lib/workbuddy-config.js.map +1 -1
- package/package.json +2 -1
- package/skill/springbrand-action-api/SKILL.md +24 -8
- package/skill/springbrand-action-api/references/action-discovery.md +13 -15
- package/skill/use-springbrand/SKILL.md +2 -3
- package/skill/springbrand-action-api/references/action-aliases.md +0 -156
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { clearApiKeyFromEnvironment, clearConfig, configFile, resolveProfilePath } from './auth.js';
|
|
5
|
+
import { clearSkillLockEntry } from './skill-vendor.js';
|
|
6
|
+
import { skillLockPath, skillTargetDir } from './skill-paths.js';
|
|
7
|
+
const SKILL_AGENTS = ['claude-code', 'codex', 'command-code', 'cursor', 'hermes-agent', 'opencode', 'pi'];
|
|
8
|
+
export function uninstallPlan() {
|
|
9
|
+
return {
|
|
10
|
+
skillDirs: [...new Set(SKILL_AGENTS.map(skillTargetDir))],
|
|
11
|
+
skillLock: skillLockPath(),
|
|
12
|
+
config: configFile(),
|
|
13
|
+
profile: resolveProfilePath(path.basename(process.env['SHELL'] ?? ''), process.platform),
|
|
14
|
+
cliPackage: '@springbrand/cli',
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function backupRoot() {
|
|
18
|
+
return path.join(os.homedir(), '.springbrand', 'uninstall-backups', String(Date.now()));
|
|
19
|
+
}
|
|
20
|
+
/** Move exact SpringBrand skill directories aside so an uninstall remains recoverable. */
|
|
21
|
+
export function applySkillRemoval(skillDirs, root = backupRoot()) {
|
|
22
|
+
const existing = skillDirs.filter((dir) => fs.existsSync(dir));
|
|
23
|
+
if (existing.length === 0)
|
|
24
|
+
return { moved: [] };
|
|
25
|
+
fs.mkdirSync(root, { recursive: true, mode: 0o700 });
|
|
26
|
+
const moved = [];
|
|
27
|
+
for (const dir of existing) {
|
|
28
|
+
const relative = path.relative(os.homedir(), dir);
|
|
29
|
+
const backupName = relative.split(path.sep).map((part) => part === '..' ? 'up' : part).join('-').replace(/[^A-Za-z0-9._-]/g, '_');
|
|
30
|
+
const destination = path.join(root, backupName);
|
|
31
|
+
fs.mkdirSync(path.dirname(destination), { recursive: true, mode: 0o700 });
|
|
32
|
+
fs.renameSync(dir, destination);
|
|
33
|
+
moved.push(dir);
|
|
34
|
+
}
|
|
35
|
+
return { moved, backupRoot: root };
|
|
36
|
+
}
|
|
37
|
+
export function removeLocalState() {
|
|
38
|
+
return {
|
|
39
|
+
configRemoved: clearConfig(),
|
|
40
|
+
profile: clearApiKeyFromEnvironment(),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export function clearSkillLock() {
|
|
44
|
+
clearSkillLockEntry({ verbose: true });
|
|
45
|
+
}
|
|
46
|
+
export function hasLocalCredential() {
|
|
47
|
+
try {
|
|
48
|
+
const parsed = JSON.parse(fs.readFileSync(configFile(), 'utf8'));
|
|
49
|
+
return typeof parsed.api_key === 'string' && parsed.api_key.length > 0;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function hasSkill(dir) {
|
|
56
|
+
try {
|
|
57
|
+
return fs.lstatSync(dir).isDirectory();
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
export function hasSkillLockEntry() {
|
|
64
|
+
try {
|
|
65
|
+
const parsed = JSON.parse(fs.readFileSync(skillLockPath(), 'utf8'));
|
|
66
|
+
return Boolean(parsed.skills && Object.hasOwn(parsed.skills, 'use-springbrand'));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=uninstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/lib/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGjE,MAAM,YAAY,GAAiB,CAAC,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAUxH,MAAM,UAAU,aAAa;IACzB,OAAO;QACH,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QACzD,SAAS,EAAE,aAAa,EAAE;QAC1B,MAAM,EAAE,UAAU,EAAE;QACpB,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC;QACxF,UAAU,EAAE,kBAAkB;KACjC,CAAC;AACN,CAAC;AAED,SAAS,UAAU;IACf,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,iBAAiB,CAAC,SAAmB,EAAE,IAAI,GAAG,UAAU,EAAE;IACtE,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QACrB,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACzB,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAClI,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAChD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1E,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC5B,OAAO;QACH,aAAa,EAAE,WAAW,EAAE;QAC5B,OAAO,EAAE,0BAA0B,EAAE;KACxC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,cAAc;IAC1B,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAC9B,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAA0B,CAAC;QAC1F,OAAO,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,CAAC;QACH,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAChC,IAAI,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3C,CAAC;IACD,MAAM,CAAC;QACH,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,MAAM,CAAC,CAAyC,CAAC;QAC5G,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,CAAC;QACH,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbuddy-config.d.ts","sourceRoot":"","sources":["../../src/lib/workbuddy-config.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAEhE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"workbuddy-config.d.ts","sourceRoot":"","sources":["../../src/lib/workbuddy-config.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAEhE,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAanF,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED,wBAAgB,6BAA6B,IAAI,kBAAkB,CAElE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAE3F;AAED,wBAAgB,wBAAwB,IAAI,kBAAkB,CAE7D"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import * as os from 'node:os';
|
|
3
3
|
import * as path from 'node:path';
|
|
4
4
|
import { planWrite, readSpringbrandEntry, removeServer, writeMcpConfig } from './mcp-json-config.js';
|
|
5
|
+
import { mcpServerName } from './mcp-endpoint.js';
|
|
5
6
|
const WORKBUDDY_TARGET = {
|
|
6
7
|
serverKey: 'springbrand',
|
|
7
8
|
dir: () => path.join(os.homedir(), '.workbuddy-ai'),
|
|
@@ -18,7 +19,7 @@ export function readWorkbuddySpringbrandEntry() {
|
|
|
18
19
|
return readSpringbrandEntry(WORKBUDDY_TARGET);
|
|
19
20
|
}
|
|
20
21
|
export function writeWorkbuddyMcpConfig(mcpUrl, apiKey) {
|
|
21
|
-
return writeMcpConfig(WORKBUDDY_TARGET, mcpUrl, apiKey);
|
|
22
|
+
return writeMcpConfig({ ...WORKBUDDY_TARGET, serverKey: mcpServerName(mcpUrl) }, mcpUrl, apiKey);
|
|
22
23
|
}
|
|
23
24
|
export function removeWorkbuddyMcpServer() {
|
|
24
25
|
return removeServer(WORKBUDDY_TARGET);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workbuddy-config.js","sourceRoot":"","sources":["../../src/lib/workbuddy-config.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAGhE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"workbuddy-config.js","sourceRoot":"","sources":["../../src/lib/workbuddy-config.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAGhE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,gBAAgB,GAAG;IACrB,SAAS,EAAE,aAAa;IACxB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC;IACnD,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,CAAC;IAChE,IAAI,EAAE,gBAAgB;CACzB,CAAC;AAEF,MAAM,UAAU,gBAAgB;IAC5B,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,MAAe;IAC9D,OAAO,SAAS,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,6BAA6B;IACzC,OAAO,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAc,EAAE,MAAe;IACnE,OAAO,cAAc,CAAC,EAAE,GAAG,gBAAgB,EAAE,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,wBAAwB;IACpC,OAAO,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAC1C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@springbrand/cli",
|
|
3
|
-
"version": "0.1.1",
|
|
3
|
+
"version": "0.1.2-alpha.1",
|
|
4
4
|
"description": "SpringBrand CLI — connect MCP hosts to the SpringBrand Gateway",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|
|
11
11
|
"skill",
|
|
12
|
+
"assets",
|
|
12
13
|
"README.md"
|
|
13
14
|
],
|
|
14
15
|
"publishConfig": {
|
|
@@ -5,17 +5,32 @@ description: Use SpringBrand Action APIs for available API services and their op
|
|
|
5
5
|
|
|
6
6
|
# SpringBrand Action API
|
|
7
7
|
|
|
8
|
-
Use the unified SpringBrand MCP
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
Use the unified SpringBrand MCP through the generic Tool contract. The CLI has
|
|
9
|
+
already configured and authenticated the MCP connection. Tool-specific
|
|
10
|
+
purpose, usage, prerequisites and follow-up behavior come from the selected
|
|
11
|
+
Tool description. This Skill does not manage third-party connections or
|
|
12
|
+
install a service.
|
|
11
13
|
|
|
12
14
|
## Discover and inspect
|
|
13
15
|
|
|
16
|
+
Ask one focused question only when a missing service, platform, operation,
|
|
17
|
+
object or modality, output, input, time range, or budget decision blocks
|
|
18
|
+
discovery or schema-valid input. Do not ask for a Tool ID or implementation
|
|
19
|
+
name; discover those from the live catalog.
|
|
20
|
+
|
|
14
21
|
Call `search_tools` once with one concise English query that states the
|
|
15
22
|
intended result, service, important input, and output. Search results are
|
|
16
|
-
bounded; an incomplete result is not proof of absence. Select an
|
|
17
|
-
|
|
18
|
-
|
|
23
|
+
bounded; an incomplete result is not proof of absence. Select an operation,
|
|
24
|
+
copy its opaque Tool ID unchanged, and call `get_tool_schemas` for its current
|
|
25
|
+
description and input/output contract. Use any returned `recommendedPrompt` as
|
|
26
|
+
current Tool guidance; do not replace it with a static catalogue entry.
|
|
27
|
+
|
|
28
|
+
`get_tool_schemas` returns `{ tools: [...] }`. Each public Tool Contract has
|
|
29
|
+
`toolId`, `name`, `description`, and `inputSchema`, and may include
|
|
30
|
+
`outputSchema`, `summary`, `recommendedPrompt`, `price`, `risk`, `access`,
|
|
31
|
+
`revision`, `notes`, `usage`, `hints`, `billing`, `produces`,
|
|
32
|
+
`attachmentInputFields`, `auth`, and `relatedTools`. Use the current schemas
|
|
33
|
+
and description as the source of truth.
|
|
19
34
|
|
|
20
35
|
Do not parse a Tool ID to infer a supplier, model, version, or domain. Do not
|
|
21
36
|
execute a result whose described effect belongs to Platform or Connector; use
|
|
@@ -28,8 +43,9 @@ charge, reported risk, and any output limitation. Ask for missing business
|
|
|
28
43
|
values rather than using placeholders. Execute once with schema-valid
|
|
29
44
|
arguments and a stable idempotency key.
|
|
30
45
|
|
|
31
|
-
|
|
32
|
-
|
|
46
|
+
Read the returned Tool description before execution. Only `succeeded` means
|
|
47
|
+
complete. If an execution ID is returned, copy it exactly and use
|
|
48
|
+
`get_execution` to read its status or saved result. Running or
|
|
33
49
|
queued remains in progress. A failed or cancelled result is reported with its
|
|
34
50
|
actual safe reason. `outcome_unknown` means the request may have taken effect:
|
|
35
51
|
never retry or re-execute automatically; verify the external effect using the
|
|
@@ -6,27 +6,23 @@ remain authoritative.
|
|
|
6
6
|
|
|
7
7
|
## Build one search
|
|
8
8
|
|
|
9
|
-
Call `search_tools` with one concise English query. Translate a non-English
|
|
9
|
+
Call `search_tools` once with one concise English query. Translate a non-English
|
|
10
10
|
request yourself and preserve every explicit constraint that distinguishes the
|
|
11
11
|
operation: required supplier, platform or product, operation, object or
|
|
12
12
|
modality, and output type. Keep topic content, dates, formatting preferences,
|
|
13
13
|
and other execution arguments in task state unless they help identify the
|
|
14
14
|
operation.
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
The query can search the currently available operations by intended result,
|
|
17
|
+
service or supplier, platform or product, operation, object or modality, and
|
|
18
|
+
required output. It searches the live bounded catalog; it does not search a
|
|
19
|
+
local alias table or require a pre-known Tool ID. Ask one focused question when
|
|
20
|
+
safe refinement lacks one of these decisions; otherwise search immediately.
|
|
19
21
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
TikHub
|
|
25
|
-
- `text to image`
|
|
26
|
-
- `Seedance 2.0 image to video` when both model and modality were explicit
|
|
27
|
-
|
|
28
|
-
SpringBrand host names, courtesy language, and generic phrases such as "use
|
|
29
|
-
an API" do not distinguish an Action and should not dominate the query.
|
|
22
|
+
Do not invent a supplier, model version, platform, operation, or modality. Do
|
|
23
|
+
not send synonyms as multiple searches. SpringBrand host names, courtesy
|
|
24
|
+
language, and generic phrases such as "use an API" do not distinguish an
|
|
25
|
+
operation and should not dominate the query.
|
|
30
26
|
|
|
31
27
|
## Interpret the bounded result
|
|
32
28
|
|
|
@@ -73,10 +69,12 @@ ID unchanged to `get_tool_schemas` and use the returned current contract to
|
|
|
73
69
|
check:
|
|
74
70
|
|
|
75
71
|
- the operation description and access state;
|
|
72
|
+
- any current `recommendedPrompt` guidance returned with the Tool;
|
|
76
73
|
- exact input and output schemas;
|
|
77
74
|
- risk and known costs;
|
|
78
75
|
- revision information;
|
|
79
|
-
- attachment and produced-material requirements
|
|
76
|
+
- attachment and produced-material requirements;
|
|
77
|
+
- the Tool description's own usage instructions.
|
|
80
78
|
|
|
81
79
|
Never construct, edit, decode, or classify the Tool ID. A contract error is a
|
|
82
80
|
lookup failure, not proof that the Action does not exist. Do not fall through
|
|
@@ -65,6 +65,5 @@ workflow.
|
|
|
65
65
|
## Results
|
|
66
66
|
|
|
67
67
|
Only `succeeded` means an operation completed. A running or queued execution
|
|
68
|
-
remains in progress; use `get_execution` only with the exact returned ID.
|
|
69
|
-
|
|
70
|
-
original file merely to improve presentation.
|
|
68
|
+
remains in progress; use `get_execution` only with the exact returned ID. Use
|
|
69
|
+
the selected Tool description and returned contract to interpret its result.
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
# Action discovery alias map
|
|
2
|
-
|
|
3
|
-
Use this map when a request names an API service, supplier, platform/product,
|
|
4
|
-
model, object, or operation through an abbreviation, alternative spelling, or
|
|
5
|
-
non-English name. It converts that wording into one catalogue-facing English
|
|
6
|
-
form for the unified `search_tools` query; it does not choose or authorize an
|
|
7
|
-
Action.
|
|
8
|
-
|
|
9
|
-
Do not invent a supplier, model version, platform, operation, or modality when
|
|
10
|
-
an alias is ambiguous.
|
|
11
|
-
|
|
12
|
-
## Inventory provenance and maintenance
|
|
13
|
-
|
|
14
|
-
This snapshot was audited on 2026-09-05 against the then-current Action
|
|
15
|
-
inventory, which contained 52 entries across the ten Supplier ID families
|
|
16
|
-
listed below. It is a terminology aid, not a current availability guarantee.
|
|
17
|
-
|
|
18
|
-
The mappings below were curated from public catalogue text and common,
|
|
19
|
-
unambiguous names; never claim that the service returned them as alias
|
|
20
|
-
metadata. Never copy an ID from this historical snapshot into contract lookup
|
|
21
|
-
or execution: only a current opaque Tool ID returned by unified discovery is
|
|
22
|
-
usable.
|
|
23
|
-
|
|
24
|
-
This is a temporary Agent-side discovery aid. Current unified discovery is
|
|
25
|
-
bounded rather than a complete inventory, so update the map only from an
|
|
26
|
-
authoritative catalogue audit outside a user workflow. A later server-side
|
|
27
|
-
discovery improvement should replace the need for this maintained map.
|
|
28
|
-
|
|
29
|
-
## Inventory coverage
|
|
30
|
-
|
|
31
|
-
| Supplier ID family | Entries | Public catalogue families reviewed |
|
|
32
|
-
| --- | ---: | --- |
|
|
33
|
-
| `supplier.frank.apify` | 9 | Facebook Ad Library; Reddit scraper and monitor; Google Keyword Volume, Maps Reviews, and Trends; Instagram Profile; TikTok Ads and Data |
|
|
34
|
-
| `supplier.frank.apollo-io` | 2 | Organization Enrichment; People Search |
|
|
35
|
-
| `supplier.frank.elevenlabs` | 1 | Text to Speech |
|
|
36
|
-
| `supplier.frank.exa` | 2 | Web Content Extraction; Web Search |
|
|
37
|
-
| `supplier.frank.firecrawl` | 3 | Structured Data Extraction; Web Scraping; Web Search and Scrape |
|
|
38
|
-
| `supplier.frank.kie-ai-image` | 5 | Seedream 5 Lite image-to-image and text-to-image; Nano Banana 2; GPT Image 2 image-to-image and text-to-image |
|
|
39
|
-
| `supplier.frank.kie-ai-video` | 3 | Seedance 2.0 Fast, Mini, and standard video |
|
|
40
|
-
| `supplier.frank.people-data-labs` | 2 | Company and Person Enrichment |
|
|
41
|
-
| `supplier.frank.serper` | 5 | Google Image, Maps, News, Places, and Shopping Search |
|
|
42
|
-
| `supplier.frank.tikhub` | 20 | Instagram (4); Reddit (2); TikTok (4); X (3); Xiaohongshu (4); YouTube (3) |
|
|
43
|
-
|
|
44
|
-
## Canonicalization rules
|
|
45
|
-
|
|
46
|
-
- Match aliases case-insensitively after ordinary Unicode normalization. For short
|
|
47
|
-
abbreviations such as `X`, `IG`, `TT`, `YT`, `PDL`, `TTS`, `T2I`, and `I2V`,
|
|
48
|
-
require a whole token and capability-relevant context.
|
|
49
|
-
- Prefer the longest, most specific alias when forms overlap. Preserve explicit
|
|
50
|
-
model variants such as `Fast` and `Mini`, and preserve every platform,
|
|
51
|
-
supplier, operation, object, and modality constraint the user actually gave.
|
|
52
|
-
- Preserve canonical phrases such as `Text to Image` and `Image to Video`
|
|
53
|
-
intact when extracting keywords; `to` defines the modality direction.
|
|
54
|
-
- Emit one canonical English form in the search query. Do not stuff aliases
|
|
55
|
-
into the query and do not fan out multiple searches.
|
|
56
|
-
- An alias supplies only the concept in its row. A platform alias does not
|
|
57
|
-
invent an operation or object, and a model-family alias does not invent a
|
|
58
|
-
version or input modality.
|
|
59
|
-
- Treat the canonicalized concept as a hard compatibility constraint when the
|
|
60
|
-
user stated it explicitly. Include a supplier in the query only when the
|
|
61
|
-
user explicitly requires that supplier.
|
|
62
|
-
|
|
63
|
-
## Service and supplier aliases
|
|
64
|
-
|
|
65
|
-
Every current entry uses a `supplier.frank.*` Supplier ID. `Frank` alone is
|
|
66
|
-
non-discriminating across the present inventory, so omit it from the search
|
|
67
|
-
query unless the user explicitly makes it a constraint.
|
|
68
|
-
|
|
69
|
-
| Canonical form | Curated aliases | Current inventory family |
|
|
70
|
-
| --- | --- | --- |
|
|
71
|
-
| `Apify` | — | `supplier.frank.apify` |
|
|
72
|
-
| `Apollo` | `Apollo.io`, `Apollo IO` | `supplier.frank.apollo-io` |
|
|
73
|
-
| `ElevenLabs` | `Eleven Labs`, `11Labs` | `supplier.frank.elevenlabs` |
|
|
74
|
-
| `Exa` | `Exa.ai` | `supplier.frank.exa` |
|
|
75
|
-
| `Firecrawl` | `Fire Crawl` | `supplier.frank.firecrawl` |
|
|
76
|
-
| `Kie.ai` | `Kie AI`, `KIE` | `supplier.frank.kie-ai-image`, `supplier.frank.kie-ai-video` |
|
|
77
|
-
| `People Data Labs` | `PDL`, `PeopleDataLabs`, `People DataLabs` | `supplier.frank.people-data-labs` |
|
|
78
|
-
| `Serper` | `Serper.dev` | `supplier.frank.serper` |
|
|
79
|
-
| `TikHub` | `Tik Hub` | `supplier.frank.tikhub` |
|
|
80
|
-
|
|
81
|
-
## Platform and product aliases
|
|
82
|
-
|
|
83
|
-
| Canonical form | Curated aliases | Current inventory scope |
|
|
84
|
-
| --- | --- | --- |
|
|
85
|
-
| `Facebook Ad Library` | `Facebook Ads Library`, `FB Ad Library`, `Meta Ad Library`, `Meta Ads Library`, `脸书广告库` | `action.apify.scrape_facebook_ad_library` |
|
|
86
|
-
| `Reddit` | `红迪` | `action.apify.scrape_reddit__practical-tools-apify`, `action.apify.monitor_reddit_mentions`, `action.tikhub.reddit-*` |
|
|
87
|
-
| `Google Keyword Volume` | `Google Search Volume`, `keyword search volume`, `关键词搜索量` | `action.apify.keyword_volume` |
|
|
88
|
-
| `Google Maps` | `Google Map`, `GMaps`, `谷歌地图` | `action.apify.scrape_google_maps_reviews`, `action.serper.maps` |
|
|
89
|
-
| `Google Trends` | `GTrends`, `谷歌趋势` | `action.apify.scrape_google_trends` |
|
|
90
|
-
| `Instagram` | `IG`, `Insta` | `action.apify.scrape_profiles`, `action.tikhub.instagram-*` |
|
|
91
|
-
| `TikTok Ads Library` | `TikTok Ads`, `TikTok广告库` | `action.apify.scrape_tiktok_ads_library` |
|
|
92
|
-
| `TikTok` | `Tik Tok`, `TT`, `抖音国际版`, `国际版抖音` | `action.apify.tiktok_api`, `action.tikhub.tiktok-*` |
|
|
93
|
-
| `Douyin` | `抖音`, `抖音短视频` | `catalogue-summary-only` |
|
|
94
|
-
| `X` | `Twitter`, `推特`, `X.com`, `X/Twitter` | `action.tikhub.twitter-*` |
|
|
95
|
-
| `Xiaohongshu` | `xhs`, `小红书`, `RedNote`, `Red Note`, `little red book`, `RED` | `action.tikhub.xhs-*` |
|
|
96
|
-
| `YouTube` | `YT`, `You Tube`, `油管` | `action.tikhub.youtube-*` |
|
|
97
|
-
| `Google Image` | `Google Images`, `谷歌图片` | `action.serper.images` |
|
|
98
|
-
| `Google News` | `谷歌新闻` | `action.serper.news` |
|
|
99
|
-
| `Google Places` | `Google Place`, `谷歌地点` | `action.serper.places` |
|
|
100
|
-
| `Google Shopping` | `谷歌购物` | `action.serper.shopping` |
|
|
101
|
-
| `Web` | `website`, `web page`, `网页`, `网站` | `action.exa.*`, `action.firecrawl.*` |
|
|
102
|
-
|
|
103
|
-
`Douyin` appears in the TikHub catalogue summary, but the audited 52-entry
|
|
104
|
-
inventory has no dedicated Douyin Action. Preserve `Douyin` as the platform
|
|
105
|
-
constraint and, if current discovery finds no compatible entry, report that
|
|
106
|
-
bounded result honestly. Never silently rewrite `Douyin` to `TikTok`.
|
|
107
|
-
Likewise, treat bare `X` as the social platform only when the surrounding
|
|
108
|
-
request refers to posts, profiles, social search, or `X.com`.
|
|
109
|
-
|
|
110
|
-
## Model and vendor aliases
|
|
111
|
-
|
|
112
|
-
| Canonical form | Curated aliases | Current inventory scope |
|
|
113
|
-
| --- | --- | --- |
|
|
114
|
-
| `ByteDance` | `Bytedance`, `字节跳动`, `字节` | `action.kie-ai-image.seedream-*`, `action.kie-ai-video.bytedance-*` |
|
|
115
|
-
| `Seedream` | `即梦`, `即梦AI` | `action.kie-ai-image.seedream-5-lite-*` |
|
|
116
|
-
| `Seedream 5 Lite` | `Seedream5 Lite` | `action.kie-ai-image.seedream-5-lite-*` |
|
|
117
|
-
| `Nano Banana 2` | `NanoBanana2`, `Nano Banana` | `action.kie-ai-image.google-nanobanana2` |
|
|
118
|
-
| `OpenAI` | `Open AI` | `action.kie-ai-image.gpt-gpt-image-2-*` |
|
|
119
|
-
| `GPT Image 2` | `GPT-Image-2`, `GPT Image2` | `action.kie-ai-image.gpt-gpt-image-2-*` |
|
|
120
|
-
| `Seedance 2.0` | `Seedance 2`, `Seedance2` | `action.kie-ai-video.bytedance-seedance-2*` |
|
|
121
|
-
|
|
122
|
-
`Nano Banana` currently resolves to `Nano Banana 2` because it is the only
|
|
123
|
-
Nano Banana family in this inventory snapshot. Re-audit that shorthand as
|
|
124
|
-
soon as another version appears. Bare `Seedream` is a family form; `Seedream
|
|
125
|
-
5 Lite` is the exact current model. Retain every explicit version, `Fast`, or
|
|
126
|
-
`Mini` modifier instead of silently selecting one.
|
|
127
|
-
|
|
128
|
-
## Object, modality, and operation aliases
|
|
129
|
-
|
|
130
|
-
| Canonical form | Curated aliases | Current inventory meaning |
|
|
131
|
-
| --- | --- | --- |
|
|
132
|
-
| `Search` | `find`, `look up`, `lookup`, `query`, `搜索`, `查找`, `检索` | Locate existing catalogue data. |
|
|
133
|
-
| `Details` | `detail`, `info`, `information`, `详情`, `详细信息` | Fetch one exact post, note, or video. |
|
|
134
|
-
| `User Profile` | `profile`, `account profile`, `user info`, `账号资料`, `用户资料`, `主页` | Fetch a public account profile. |
|
|
135
|
-
| `User Posts` | `account posts`, `author posts`, `用户帖子`, `账号内容` | List content published by one user. |
|
|
136
|
-
| `Comments` | `comment`, `replies`, `responses`, `评论`, `回复` | Fetch replies on one content item. |
|
|
137
|
-
| `Reviews` | `review`, `ratings`, `评价`, `评分` | Fetch Google Maps reviews. |
|
|
138
|
-
| `Monitor` | `track`, `watch`, `monitoring`, `监控`, `追踪` | Monitor Reddit brand mentions. |
|
|
139
|
-
| `Scrape` | `scraper`, `crawl`, `抓取`, `爬取` | Retrieve public web or social data. |
|
|
140
|
-
| `Extract` | `extraction`, `抽取`, `提取` | Extract web content or structured fields. |
|
|
141
|
-
| `Enrichment` | `enrich`, `data enrichment`, `补全`, `数据补充` | Enrich a person, company, or organization. |
|
|
142
|
-
| `Post` | `posts`, `帖子`, `动态` | A social post; `tweet` and `推文` mean `X Post` only in X/Twitter context. |
|
|
143
|
-
| `Note` | `notes`, `笔记` | A Xiaohongshu content item. |
|
|
144
|
-
| `Video` | `videos`, `短视频` | A TikTok or YouTube video, or generated video. |
|
|
145
|
-
| `Image` | `images`, `picture`, `photo`, `图片`, `图像` | An existing or generated image. |
|
|
146
|
-
| `Text to Speech` | `TTS`, `text2speech`, `txt2speech`, `文本转语音`, `语音合成` | ElevenLabs speech generation. |
|
|
147
|
-
| `Text to Image` | `T2I`, `text2image`, `txt2img`, `文生图`, `文字生成图片` | Generate an image from text. |
|
|
148
|
-
| `Image to Image` | `I2I`, `image2image`, `img2img`, `图生图`, `图片编辑` | Edit or transform an existing image. |
|
|
149
|
-
| `Text to Video` | `T2V`, `text2video`, `txt2vid`, `文生视频`, `文字生成视频` | Generate video with text input. |
|
|
150
|
-
| `Image to Video` | `I2V`, `image2video`, `img2vid`, `图生视频`, `图片生成视频` | Generate video with image input. |
|
|
151
|
-
|
|
152
|
-
Operation and modality mappings are compatibility constraints, not synonyms
|
|
153
|
-
for one another. `Search` cannot satisfy `Details`; `Comments` cannot satisfy
|
|
154
|
-
`User Posts`; `Text to Image` cannot satisfy `Image to Image`; and `Text to
|
|
155
|
-
Video` cannot satisfy `Image to Video` when the user explicitly requires the
|
|
156
|
-
input modality.
|