@soku-ai/cli 0.1.0-alpha.4 → 0.1.0-alpha.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/commands/auth.js +1 -1
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/brand.d.ts.map +1 -1
- package/dist/commands/brand.js +57 -1
- package/dist/commands/brand.js.map +1 -1
- package/dist/commands/generated.d.ts +1 -1
- package/dist/commands/generated.d.ts.map +1 -1
- package/dist/commands/generated.js +16 -3
- package/dist/commands/generated.js.map +1 -1
- package/dist/commands/memory.d.ts +18 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +70 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/seo-hosting.d.ts +100 -0
- package/dist/commands/seo-hosting.d.ts.map +1 -0
- package/dist/commands/seo-hosting.js +489 -0
- package/dist/commands/seo-hosting.js.map +1 -0
- package/dist/commands/skill.d.ts +44 -10
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +77 -45
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/update.d.ts +23 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +345 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/workspace.d.ts +4 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +132 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/config.d.ts +2 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/generated/capabilities.json +208 -30
- package/dist/http/client.d.ts.map +1 -1
- package/dist/http/client.js +50 -14
- package/dist/http/client.js.map +1 -1
- package/dist/index.js +26 -2
- package/dist/index.js.map +1 -1
- package/dist/output/unwrap.d.ts.map +1 -1
- package/dist/output/unwrap.js +18 -1
- package/dist/output/unwrap.js.map +1 -1
- package/dist/skills/unzip.d.ts +1 -1
- package/dist/skills/unzip.js +1 -1
- package/dist/update-check.js +4 -4
- package/dist/update-check.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -2
- package/postinstall.cjs +85 -0
- package/skills/soku/SKILL.md +177 -16
- package/README.md +0 -109
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,4BAA4B;AAE5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AACjF,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,iEAAiE,CAAC;KAC9E,OAAO,CAAC,WAAW,CAAC,CAAA;AAEvB,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,wBAAwB,CAAC,OAAO,CAAC,CAAA;AACjC,yBAAyB,CAAC,OAAO,CAAC,CAAA;AAClC,mBAAmB,CAAC,OAAO,CAAC,CAAA;AAC5B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAA;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAA;AAC7B,0BAA0B,CAAC,OAAO,CAAC,CAAA;AAEnC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE;IAC9D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unwrap.d.ts","sourceRoot":"","sources":["../../src/output/unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH;6EAC6E;AAC7E,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"unwrap.d.ts","sourceRoot":"","sources":["../../src/output/unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmBH;6EAC6E;AAC7E,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAmBvD"}
|
package/dist/output/unwrap.js
CHANGED
|
@@ -21,13 +21,30 @@ export function unwrapDispatch(result) {
|
|
|
21
21
|
return result.data ?? null;
|
|
22
22
|
const err = result.error;
|
|
23
23
|
let message = 'Action failed.';
|
|
24
|
+
let type = 'action_failed';
|
|
25
|
+
let hint;
|
|
26
|
+
let exitCode = ExitCode.RUNTIME;
|
|
24
27
|
if (typeof err === 'string') {
|
|
25
28
|
message = err;
|
|
26
29
|
}
|
|
27
30
|
else if (err && typeof err === 'object') {
|
|
28
31
|
const obj = err;
|
|
32
|
+
type = String(obj.code ?? type);
|
|
29
33
|
message = String(obj.message ?? obj.code ?? JSON.stringify(err));
|
|
34
|
+
hint = obj.hint ? String(obj.hint) : undefined;
|
|
35
|
+
exitCode = exitCodeForStatus(obj.status_code);
|
|
30
36
|
}
|
|
31
|
-
return emitError(
|
|
37
|
+
return emitError(type, message, exitCode, hint);
|
|
38
|
+
}
|
|
39
|
+
function exitCodeForStatus(status) {
|
|
40
|
+
if (typeof status !== 'number')
|
|
41
|
+
return ExitCode.RUNTIME;
|
|
42
|
+
if (status === 400 || status === 422)
|
|
43
|
+
return ExitCode.USAGE;
|
|
44
|
+
if (status === 401 || status === 403)
|
|
45
|
+
return ExitCode.AUTH;
|
|
46
|
+
if (status === 404)
|
|
47
|
+
return ExitCode.NOT_FOUND;
|
|
48
|
+
return ExitCode.RUNTIME;
|
|
32
49
|
}
|
|
33
50
|
//# sourceMappingURL=unwrap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unwrap.js","sourceRoot":"","sources":["../../src/output/unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"unwrap.js","sourceRoot":"","sources":["../../src/output/unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAA;AAQvE,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,IAAI,IAAI,KAAK;QACb,OAAQ,KAAyB,CAAC,EAAE,KAAK,SAAS,CACnD,CAAA;AACH,CAAC;AAED;6EAC6E;AAC7E,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IAC9C,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,MAAM,CAAC,IAAI,IAAI,IAAI,CAAA;IAEzC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAA;IACxB,IAAI,OAAO,GAAG,gBAAgB,CAAA;IAC9B,IAAI,IAAI,GAAG,eAAe,CAAA;IAC1B,IAAI,IAAwB,CAAA;IAC5B,IAAI,QAAQ,GAAkB,QAAQ,CAAC,OAAO,CAAA;IAC9C,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,GAAG,CAAA;IACf,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,GAA8B,CAAA;QAC1C,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAA;QAC/B,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;QAChE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC9C,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAe;IACxC,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAA;IACvD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAC,KAAK,CAAA;IAC3D,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAA;IAC1D,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAC,SAAS,CAAA;IAC7C,OAAO,QAAQ,CAAC,OAAO,CAAA;AACzB,CAAC"}
|
package/dist/skills/unzip.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Safe in-memory unzip for skill bundles downloaded from the
|
|
1
|
+
/** Safe in-memory unzip for skill bundles downloaded from the public catalog.
|
|
2
2
|
*
|
|
3
3
|
* Mirrors the server's `packages/services/marketplace/zip_safety.py` rules so a
|
|
4
4
|
* bundle the packer produces is one the CLI will accept: strip a single top
|
package/dist/skills/unzip.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Safe in-memory unzip for skill bundles downloaded from the
|
|
1
|
+
/** Safe in-memory unzip for skill bundles downloaded from the public catalog.
|
|
2
2
|
*
|
|
3
3
|
* Mirrors the server's `packages/services/marketplace/zip_safety.py` rules so a
|
|
4
4
|
* bundle the packer produces is one the CLI will accept: strip a single top
|
package/dist/update-check.js
CHANGED
|
@@ -116,7 +116,7 @@ export async function maybeNotifyUpdate() {
|
|
|
116
116
|
if (!result.updateAvailable || !result.latestVersion)
|
|
117
117
|
return;
|
|
118
118
|
process.stderr.write(`${dim('Update available:')} ${CLI_PACKAGE_NAME} ${result.currentVersion} -> ${result.latestVersion}\n` +
|
|
119
|
-
`${dim('Run')} ${cyan(
|
|
119
|
+
`${dim('Run')} ${cyan('soku update cli')}\n`);
|
|
120
120
|
}
|
|
121
121
|
catch {
|
|
122
122
|
// Update checks are advisory. Never fail the user command because npm is
|
|
@@ -125,8 +125,8 @@ export async function maybeNotifyUpdate() {
|
|
|
125
125
|
}
|
|
126
126
|
export function registerUpdateCheckCommand(program) {
|
|
127
127
|
program
|
|
128
|
-
.command('update-check')
|
|
129
|
-
.description('
|
|
128
|
+
.command('update-check', { hidden: true })
|
|
129
|
+
.description('Legacy alias for `soku update status`')
|
|
130
130
|
.option('--registry-url <url>', 'Override the npm registry URL')
|
|
131
131
|
.action(async (opts) => {
|
|
132
132
|
try {
|
|
@@ -143,7 +143,7 @@ export function registerUpdateCheckCommand(program) {
|
|
|
143
143
|
return `${CLI_PACKAGE_NAME} is up to date (${d.currentVersion}).`;
|
|
144
144
|
return [
|
|
145
145
|
`${CLI_PACKAGE_NAME} ${d.currentVersion} -> ${d.latestVersion}`,
|
|
146
|
-
`${dim('Run')} ${cyan(
|
|
146
|
+
`${dim('Run')} ${cyan('soku update cli')}`,
|
|
147
147
|
].join('\n');
|
|
148
148
|
});
|
|
149
149
|
}
|
package/dist/update-check.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soku-ai/cli",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.7",
|
|
4
4
|
"description": "Soku CLI — call Soku ads/GA4 data capabilities from any AI agent or shell.",
|
|
5
5
|
"license": "Proprietary",
|
|
6
6
|
"author": "Soku",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
"files": [
|
|
29
29
|
"dist",
|
|
30
|
+
"postinstall.cjs",
|
|
30
31
|
"skills"
|
|
31
32
|
],
|
|
32
33
|
"engines": {
|
|
@@ -39,9 +40,10 @@
|
|
|
39
40
|
"scripts": {
|
|
40
41
|
"build": "tsc && mkdir -p dist/generated && cp src/generated/capabilities.json dist/generated/capabilities.json",
|
|
41
42
|
"typecheck": "tsc --noEmit",
|
|
42
|
-
"test": "tsc -p tsconfig.test.json &&
|
|
43
|
+
"test": "tsc -p tsconfig.test.json && find .test-build -name '*.test.js' -print | sort | xargs node --test",
|
|
43
44
|
"gen:capabilities": "pnpm run build && node scripts/gen-capabilities.ts",
|
|
44
45
|
"clean": "rm -rf dist .test-build",
|
|
46
|
+
"postinstall": "node postinstall.cjs",
|
|
45
47
|
"prepublishOnly": "pnpm run clean && pnpm run build"
|
|
46
48
|
},
|
|
47
49
|
"dependencies": {
|
package/postinstall.cjs
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/*
|
|
3
|
+
* Refresh previously installed bundled Soku meta-skills after a global npm
|
|
4
|
+
* install. Business skills still update through `soku update skills`, because
|
|
5
|
+
* that path verifies catalog zip checksums and may need network access.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const fs = require('node:fs')
|
|
9
|
+
const os = require('node:os')
|
|
10
|
+
const path = require('node:path')
|
|
11
|
+
|
|
12
|
+
const MANIFEST_FILE = '.soku-skills.json'
|
|
13
|
+
const SOKU_META = 'soku'
|
|
14
|
+
|
|
15
|
+
function shouldRun() {
|
|
16
|
+
return process.env.npm_config_global === 'true' || process.env.npm_config_global === '1'
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function copyDir(source, dest) {
|
|
20
|
+
fs.mkdirSync(dest, { recursive: true })
|
|
21
|
+
for (const entry of fs.readdirSync(source, { withFileTypes: true })) {
|
|
22
|
+
const from = path.join(source, entry.name)
|
|
23
|
+
const to = path.join(dest, entry.name)
|
|
24
|
+
if (entry.isDirectory()) {
|
|
25
|
+
copyDir(from, to)
|
|
26
|
+
} else if (entry.isFile()) {
|
|
27
|
+
fs.copyFileSync(from, to)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function loadManifest(baseDir) {
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(fs.readFileSync(path.join(baseDir, MANIFEST_FILE), 'utf8'))
|
|
35
|
+
} catch {
|
|
36
|
+
return {}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function hasSokuSkill(baseDir) {
|
|
41
|
+
const manifest = loadManifest(baseDir)
|
|
42
|
+
return (
|
|
43
|
+
Object.keys(manifest).length > 0 ||
|
|
44
|
+
fs.existsSync(path.join(baseDir, SOKU_META, 'SKILL.md'))
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function refreshMetaSkill(baseDir, bundledDir) {
|
|
49
|
+
if (!hasSokuSkill(baseDir)) return
|
|
50
|
+
|
|
51
|
+
const dest = path.join(baseDir, SOKU_META)
|
|
52
|
+
fs.mkdirSync(dest, { recursive: true })
|
|
53
|
+
fs.rmSync(path.join(dest, 'SKILL.md'), { force: true })
|
|
54
|
+
fs.rmSync(path.join(dest, 'references'), { recursive: true, force: true })
|
|
55
|
+
fs.copyFileSync(path.join(bundledDir, 'SKILL.md'), path.join(dest, 'SKILL.md'))
|
|
56
|
+
const referencesDir = path.join(bundledDir, 'references')
|
|
57
|
+
if (fs.existsSync(referencesDir)) {
|
|
58
|
+
copyDir(referencesDir, path.join(dest, 'references'))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const manifest = loadManifest(baseDir)
|
|
62
|
+
manifest[SOKU_META] = {
|
|
63
|
+
sha256: '',
|
|
64
|
+
installed_at: new Date().toISOString(),
|
|
65
|
+
source: 'bundled',
|
|
66
|
+
}
|
|
67
|
+
fs.writeFileSync(path.join(baseDir, MANIFEST_FILE), `${JSON.stringify(manifest, null, 2)}\n`)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function main() {
|
|
71
|
+
if (!shouldRun()) return
|
|
72
|
+
const bundledDir = path.join(__dirname, 'skills', SOKU_META)
|
|
73
|
+
if (!fs.existsSync(path.join(bundledDir, 'SKILL.md'))) return
|
|
74
|
+
|
|
75
|
+
for (const agentDir of ['.claude/skills', '.codex/skills', '.cursor/skills']) {
|
|
76
|
+
try {
|
|
77
|
+
refreshMetaSkill(path.join(os.homedir(), agentDir), bundledDir)
|
|
78
|
+
} catch {
|
|
79
|
+
// Best-effort lifecycle hook: npm install must not fail because an agent
|
|
80
|
+
// skill directory is missing, locked, or otherwise temporarily unreadable.
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
main()
|
package/skills/soku/SKILL.md
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: soku
|
|
3
3
|
description: >-
|
|
4
|
-
Use when calling Soku ads/GA4 marketing-data capabilities
|
|
4
|
+
Use when calling Soku ads/GA4 marketing-data capabilities or SEO Hosting
|
|
5
|
+
domain connections from the shell —
|
|
5
6
|
running `soku auth login`, switching org/brand with `soku org use` /
|
|
6
7
|
`soku brand use`, discovering capabilities, calling a data action, routing a
|
|
7
8
|
third-party API call (Ahrefs/DataForSEO/Firecrawl/Gemini/…) through
|
|
8
|
-
`soku egress`, handling 401/403
|
|
9
|
+
`soku egress`, managing `soku seo-hosting connections`, handling 401/403
|
|
10
|
+
errors, or installing/updating the Soku CLI.
|
|
9
11
|
license: Proprietary
|
|
10
12
|
metadata:
|
|
11
13
|
author: nex-ad
|
|
@@ -14,10 +16,10 @@ metadata:
|
|
|
14
16
|
|
|
15
17
|
# Soku CLI
|
|
16
18
|
|
|
17
|
-
The `soku` CLI calls Soku's ads
|
|
18
|
-
preferred way for an agent to use Soku
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
The `soku` CLI calls Soku's ads, GA4, and SEO Hosting capabilities over HTTP. It
|
|
20
|
+
is the preferred way for an agent to use Soku from any shell, with no MCP host
|
|
21
|
+
required. Output is JSON on stdout; errors are a JSON envelope on stderr with a
|
|
22
|
+
semantic exit code.
|
|
21
23
|
|
|
22
24
|
## Output & exit codes
|
|
23
25
|
|
|
@@ -89,17 +91,43 @@ soku org list # organizations you belong to
|
|
|
89
91
|
soku org use <slug|id> # set active org (id, slug, or name; clears a now-mismatched brand)
|
|
90
92
|
soku brand list # brands in the active org
|
|
91
93
|
soku brand use <slug|id> # id, slug, or name
|
|
94
|
+
soku workspace status # show the active org/brand and whether it is ready
|
|
95
|
+
soku workspace resolve <brand> # inspect accessible brand matches across orgs
|
|
96
|
+
soku workspace use-brand <brand> # set org + brand together when the match is unique
|
|
92
97
|
```
|
|
93
98
|
|
|
94
99
|
Env overrides for one-off invocations: `SOKU_ORG_ID`, `SOKU_BRAND_ID`.
|
|
95
100
|
|
|
101
|
+
Do not infer Soku workspace state from the current shell directory. The working
|
|
102
|
+
directory may contain unrelated README/AGENTS/context files from the user's local
|
|
103
|
+
project. Start with `soku workspace status`; if the target brand is unknown, use
|
|
104
|
+
`soku workspace resolve <brand>` and then `soku workspace use-brand <brand>`.
|
|
105
|
+
|
|
106
|
+
## Brand memory
|
|
107
|
+
|
|
108
|
+
Memory is scoped to the active Soku workspace, not to the local shell directory.
|
|
109
|
+
After `soku workspace status` is ready, these commands read memory for the
|
|
110
|
+
current brand only:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
soku memory list
|
|
114
|
+
soku memory search "policy 2026-05-31"
|
|
115
|
+
soku memory get reference noiz-policy-event
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Use brand memory as background, hypotheses, and investigation leads. Do not
|
|
119
|
+
treat a memory note as a verified data fact unless this turn also confirms it
|
|
120
|
+
with data actions, change history, billing evidence, or another authoritative
|
|
121
|
+
source. In reports, label memory-derived context separately from data-confirmed
|
|
122
|
+
findings.
|
|
123
|
+
|
|
96
124
|
## Calling capabilities (discover with --help, then run)
|
|
97
125
|
|
|
98
126
|
Each data capability is a typed sub-command under its namespace. Discover and
|
|
99
127
|
inspect them with `--help` — never guess action names or flags.
|
|
100
128
|
|
|
101
129
|
```bash
|
|
102
|
-
soku resources list # what's granted (e.g. data-infra)
|
|
130
|
+
soku resources list # what's granted (e.g. data-infra, seo-hosting)
|
|
103
131
|
soku --help # namespaces: ads, ga4, …
|
|
104
132
|
soku ads --help # actions in the ads namespace
|
|
105
133
|
soku ads query-single-dimension --help # flags, types, and usage for one action
|
|
@@ -110,8 +138,34 @@ soku ads query-single-dimension --account-id 123 --dimension campaign \
|
|
|
110
138
|
```
|
|
111
139
|
|
|
112
140
|
`<command> --help` is authoritative for valid flags, required vs optional, types,
|
|
113
|
-
and usage. Read it before invoking an unfamiliar action.
|
|
114
|
-
|
|
141
|
+
and usage. Read it before invoking an unfamiliar action. Typed command names use
|
|
142
|
+
kebab-case (`soku ads query-single-dimension`); raw `soku call` action names use
|
|
143
|
+
registry snake_case (`soku call ads query_single_dimension`). Object/list flags
|
|
144
|
+
take a JSON string, e.g. `--filters '{"campaign_id":["123"]}'`.
|
|
145
|
+
|
|
146
|
+
### Google Ads GAQL fallback
|
|
147
|
+
|
|
148
|
+
Prefer cached ads analytics first:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
soku ads list-dimensions --platform google --account-id 123
|
|
152
|
+
soku ads query-single-dimension --account-id 123 --dimension campaign ...
|
|
153
|
+
soku ads query-multi-dimension --account-id 123 --dimensions '["campaign","device"]' ...
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Use GAQL only when cached query actions cannot expose the Google-native fields
|
|
157
|
+
or segment combination you need:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
soku ads get-resource-metadata --platform google --account-id 123 --resource-name campaign
|
|
161
|
+
soku ads gaql-search --platform google --account-id 123 \
|
|
162
|
+
--dimensions '["date","campaign"]' --metrics '["cost","clicks"]' --limit 20
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Do not write full `SELECT ... FROM ...` GAQL SQL. `gaql-search` takes structured
|
|
166
|
+
`dimensions`, `metrics`, `filters`, `date_range`, `order_by`, and `limit`; the
|
|
167
|
+
server translates those into real GAQL. For the same action through the raw
|
|
168
|
+
escape hatch, use snake_case: `soku call ads gaql_search --payload '{...}'`.
|
|
115
169
|
|
|
116
170
|
### Raw escape hatch
|
|
117
171
|
|
|
@@ -124,6 +178,95 @@ soku call ads list_ad_accounts -p platform=google
|
|
|
124
178
|
soku call ads query_single_dimension --payload '{"account_id":"123","dimension":"campaign"}'
|
|
125
179
|
```
|
|
126
180
|
|
|
181
|
+
## SEO Hosting domain connections
|
|
182
|
+
|
|
183
|
+
Use `soku seo-hosting` to manage SEO Hosting for the active brand. The session
|
|
184
|
+
must include the `seo-hosting` resource. Request it at login:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
soku auth login --resource seo-hosting
|
|
188
|
+
# or include it with data access:
|
|
189
|
+
soku auth login --resource data-infra,seo-hosting
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
The workspace must be ready before any connection call:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
soku workspace status
|
|
196
|
+
soku org use <slug|id>
|
|
197
|
+
soku brand use <slug|id>
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Posts
|
|
201
|
+
|
|
202
|
+
Use typed `posts` commands for the same SEO Hosting content actions exposed to
|
|
203
|
+
runtime agents through `seo_hosting/*`. These create and manage owned-media web
|
|
204
|
+
pages on the brand's connected domain; they are not social posts.
|
|
205
|
+
|
|
206
|
+
Always check status first:
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
soku seo-hosting status
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
If `live` is false, do not create or publish posts yet; connect or fix a domain
|
|
213
|
+
first. When hosting is live:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
soku seo-hosting posts list --section blog --status draft
|
|
217
|
+
soku seo-hosting posts get <post_id>
|
|
218
|
+
soku seo-hosting posts create --title "How to ..." --section blog --body-file post.md
|
|
219
|
+
soku seo-hosting posts update <post_id> --body-file revised.md
|
|
220
|
+
soku seo-hosting posts publish <post_id>
|
|
221
|
+
soku seo-hosting posts delete <post_id> --confirm
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
`create` requires `--title` plus exactly one body source: `--body`,
|
|
225
|
+
`--body-file`, or `--body-stdin`. Optional metadata flags are `--slug`,
|
|
226
|
+
`--excerpt`, `--cover-image-url`, `--author-name`, and `--seo '<json object>'`.
|
|
227
|
+
`update` supports mutable fields only; section and slug are intentionally not
|
|
228
|
+
editable through the CLI.
|
|
229
|
+
|
|
230
|
+
Writes run immediately (the same no-review behavior as the first-party
|
|
231
|
+
`seo_hosting` data actions), so confirm intent with the user before publishing
|
|
232
|
+
or deleting.
|
|
233
|
+
|
|
234
|
+
### Domain connections
|
|
235
|
+
|
|
236
|
+
Connection commands:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
soku seo-hosting connections list
|
|
240
|
+
soku seo-hosting connections connect-cname --hostname blog.example.com
|
|
241
|
+
soku seo-hosting connections verify <connection_id>
|
|
242
|
+
soku seo-hosting connections disconnect <connection_id> --confirm
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Cloudflare Worker reverse proxy setup runs a probe before provisioning. Use it
|
|
246
|
+
when the customer's root or existing hostname is already on Cloudflare and SEO
|
|
247
|
+
Hosting needs to mount sections such as `/blog`, `/use-cases`, or
|
|
248
|
+
`/alternatives`:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
soku seo-hosting connections probe --hostname example.com --sections blog,use-cases
|
|
252
|
+
soku seo-hosting connections connect-worker --hostname example.com \
|
|
253
|
+
--sections blog,use-cases --cf-token-env CLOUDFLARE_API_TOKEN
|
|
254
|
+
printf %s "$CLOUDFLARE_API_TOKEN" | soku seo-hosting connections connect-worker \
|
|
255
|
+
--hostname example.com --sections blog --cf-token-stdin
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Allowed sections are `blog`, `use-cases`, and `alternatives`; omitted sections
|
|
259
|
+
default to `blog`. If the probe reports existing mounted content, add
|
|
260
|
+
`--accept-conflicts` only after the user confirms SEO Hosting may shadow those
|
|
261
|
+
paths. If the hostname serves its own Next.js assets, add
|
|
262
|
+
`--accept-next-assets-warning` only after confirming `/_next/static/*` may route
|
|
263
|
+
through the Worker.
|
|
264
|
+
|
|
265
|
+
Do not pass Cloudflare API tokens as literal argv values or print them. Use
|
|
266
|
+
`--cf-token-env <ENV_NAME>` or `--cf-token-stdin` exactly once. Vercel OAuth
|
|
267
|
+
domain connections are not exposed in the CLI yet; use the Studio web settings
|
|
268
|
+
for Vercel-backed domains.
|
|
269
|
+
|
|
127
270
|
## Write actions (human approval required)
|
|
128
271
|
|
|
129
272
|
Some actions mutate state (e.g. conversion-group writes) and are **review-gated**.
|
|
@@ -180,18 +323,25 @@ returned verbatim on stdout.
|
|
|
180
323
|
## Installing / updating the skill
|
|
181
324
|
|
|
182
325
|
```bash
|
|
183
|
-
soku update
|
|
326
|
+
soku update status # show CLI + installed skill update status
|
|
327
|
+
soku update skills # refresh this meta-skill and installed business skills
|
|
328
|
+
soku update cli # install the latest CLI from npm
|
|
184
329
|
soku skill install # this meta-skill into .claude / .codex / .cursor (project)
|
|
185
330
|
soku skill install --global # into ~/.claude, ~/.codex, ~/.cursor
|
|
186
331
|
soku skill install --agent claude --global
|
|
187
332
|
```
|
|
188
333
|
|
|
189
|
-
|
|
190
|
-
|
|
334
|
+
Normal `soku` commands schedule a background refresh for installed Soku-managed
|
|
335
|
+
skills at most once every 24 hours. Set `SOKU_NO_SKILL_AUTO_UPDATE=1` to disable
|
|
336
|
+
skill auto updates, or `SOKU_UPDATE_INTERVAL_HOURS=<n>` to change the interval.
|
|
191
337
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
338
|
+
The CLI binary itself is advisory by default. To opt into automatic npm CLI
|
|
339
|
+
updates, set `SOKU_AUTO_UPDATE_CLI=1`; otherwise run `soku update cli` when
|
|
340
|
+
`soku update status` shows a newer version.
|
|
341
|
+
|
|
342
|
+
A global `npm i -g @soku-ai/cli` refreshes this already-installed global
|
|
343
|
+
meta-skill after npm finishes installing. It does not install new skills and it
|
|
344
|
+
does not update project-local skills.
|
|
195
345
|
|
|
196
346
|
## Installing business skills (account audits, Google Ads, reports, …)
|
|
197
347
|
|
|
@@ -205,10 +355,21 @@ soku skill list # browse the catalog
|
|
|
205
355
|
soku skill install account-audit # install one (into soku-account-audit/)
|
|
206
356
|
soku skill install ads-report google-ads
|
|
207
357
|
soku skill install --all # install everything
|
|
208
|
-
soku skill
|
|
358
|
+
soku skill status # what's installed locally
|
|
359
|
+
soku skill list-installed # same as status
|
|
209
360
|
soku skill remove account-audit
|
|
210
361
|
```
|
|
211
362
|
|
|
363
|
+
Catalog slugs are used for install/remove commands (`ads-report`). Installed AI
|
|
364
|
+
client skill names are Soku-prefixed (`soku-ads-report`). When asking an agent to
|
|
365
|
+
run an installed business skill, write `use @soku-ads-report skill`, not
|
|
366
|
+
`@ads-report`.
|
|
367
|
+
|
|
368
|
+
Business skill updates are detected from `.soku-skills.json`: for each installed
|
|
369
|
+
catalog slug, Soku compares local `version`, `sha256`, and `source` against the
|
|
370
|
+
latest catalog `index.json`. A changed version, changed hash, or old source is
|
|
371
|
+
treated as an update; missing catalog entries are reported but not deleted.
|
|
372
|
+
|
|
212
373
|
Each installed skill carries a "Running this skill with the Soku CLI" section
|
|
213
374
|
(its data actions mapped to `soku call`, its third-party APIs to `soku egress`),
|
|
214
375
|
so it runs through this same CLI — no in-sandbox tools, no local API keys.
|
package/README.md
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
# @soku-ai/cli
|
|
2
|
-
|
|
3
|
-
Call Soku ads/GA4 data capabilities from any shell or AI agent. It's the
|
|
4
|
-
preferred surface for external agents — equivalent to the hosted MCP server, but
|
|
5
|
-
works without an MCP host.
|
|
6
|
-
|
|
7
|
-
## Install
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm i -g @soku-ai/cli
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Development builds can be linked from this repo:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
pnpm --filter @soku-ai/cli run build
|
|
17
|
-
npm link apps/cli
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Quick start
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
soku auth login # device-login in the browser
|
|
24
|
-
soku org use <slug|id> # pick a workspace (id, slug, or name)
|
|
25
|
-
soku brand use <slug|id>
|
|
26
|
-
soku --help # discover namespaces (ads, ga4, …)
|
|
27
|
-
soku update-check # check npm for a newer CLI release
|
|
28
|
-
soku ads --help # actions in a namespace
|
|
29
|
-
soku ads list-ad-accounts --platform google
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
Each data capability is a typed sub-command under its namespace; `<command>
|
|
33
|
-
--help` shows its flags. `soku call <ns> <action>` is a raw escape hatch for
|
|
34
|
-
actions not yet exposed as a typed sub-command.
|
|
35
|
-
|
|
36
|
-
## Authentication
|
|
37
|
-
|
|
38
|
-
`soku` uses an org-agnostic, device-login session token (RFC 8628). You log in
|
|
39
|
-
once; the org and brand are chosen at runtime and sent per request.
|
|
40
|
-
|
|
41
|
-
- **Human:** `soku auth login` opens the browser and waits for approval.
|
|
42
|
-
- **Agent (non-blocking):** `soku auth login --no-wait` returns the verification
|
|
43
|
-
URL immediately; resume with `soku auth login --device-code <code>` after the
|
|
44
|
-
user approves.
|
|
45
|
-
- **CI / headless:** set `SOKU_TOKEN` to a pre-issued token to skip interactive
|
|
46
|
-
auth (and the OS keychain).
|
|
47
|
-
|
|
48
|
-
Token storage: OS keychain when available, else `~/.soku/credentials.json`
|
|
49
|
-
(0600). Set `SOKU_NO_KEYCHAIN=1` to always use the file. Behind a proxy, set
|
|
50
|
-
`ALL_PROXY`.
|
|
51
|
-
|
|
52
|
-
## Output
|
|
53
|
-
|
|
54
|
-
TTY output is human-readable: status lines, key/value summaries, and tables for
|
|
55
|
-
lists. Piped or non-TTY output stays machine-readable JSON
|
|
56
|
-
(`{"ok":true,"data":...}`). Errors go to stderr as
|
|
57
|
-
`{"ok":false,"error":{type,message,hint}}` with a semantic exit code (0 ok / 1
|
|
58
|
-
usage / 2 auth / 4 not-found / 5 runtime). `soku egress -- curl ...` is the
|
|
59
|
-
exception: successful upstream responses are passed through verbatim.
|
|
60
|
-
|
|
61
|
-
## Use from an AI agent
|
|
62
|
-
|
|
63
|
-
For a fresh agent, point it at the hosted installer guide:
|
|
64
|
-
|
|
65
|
-
```text
|
|
66
|
-
Read https://soku.ai/cli/skill.md and install the Soku CLI.
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Install the bundled skill so Claude Code / Codex / Cursor know how to drive the
|
|
70
|
-
CLI:
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
soku skill install --global # all detected agents
|
|
74
|
-
soku skill install --agent claude # one agent, into the project
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
The CLI writes `.soku-skills.json` only while Soku-managed skills are installed
|
|
78
|
-
in a skills directory. It is a local install manifest, not a credential or user
|
|
79
|
-
config file, and it is removed automatically when the last Soku-managed skill is
|
|
80
|
-
removed.
|
|
81
|
-
|
|
82
|
-
## Updates
|
|
83
|
-
|
|
84
|
-
`soku update-check` queries the npm registry for `@soku-ai/cli@latest` and tells
|
|
85
|
-
the user whether `npm i -g @soku-ai/cli` should be re-run. The CLI also performs
|
|
86
|
-
an advisory check on every command invocation, writing update notices to stderr
|
|
87
|
-
only. There is no update-check cache; set `SOKU_NO_UPDATE_CHECK=1` to disable
|
|
88
|
-
the background notice.
|
|
89
|
-
|
|
90
|
-
## Environment variables
|
|
91
|
-
|
|
92
|
-
Production is the default: API calls go to `https://api.soku.ai`, and skills are
|
|
93
|
-
downloaded from `https://cdn.soku.ai/skills`. Local and staging endpoints are
|
|
94
|
-
environment-only overrides so a dev session cannot poison `~/.soku/config.json`.
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
SOKU_API_BASE=http://localhost:15386 soku auth status
|
|
98
|
-
SOKU_SKILLS_URL=http://127.0.0.1:18080 soku skill list
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
| Variable | Purpose |
|
|
102
|
-
|----------|---------|
|
|
103
|
-
| `SOKU_TOKEN` | Pre-issued session token (overrides stored credentials) |
|
|
104
|
-
| `SOKU_API_BASE` | Per-command API base URL override; default is `https://api.soku.ai` |
|
|
105
|
-
| `SOKU_ORG_ID` / `SOKU_BRAND_ID` | One-off workspace override |
|
|
106
|
-
| `SOKU_NO_KEYCHAIN` | Skip the OS keychain; use the 0600 file |
|
|
107
|
-
| `SOKU_NO_UPDATE_CHECK` | Disable the background update notice |
|
|
108
|
-
| `SOKU_SKILLS_URL` | Per-command skill catalog/CDN override |
|
|
109
|
-
| `ALL_PROXY` | Proxy for outbound HTTPS |
|