@soku-ai/cli 0.1.0-alpha.12 → 0.1.0-alpha.13
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/ads.d.ts.map +1 -1
- package/dist/commands/ads.js +101 -0
- package/dist/commands/ads.js.map +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +3 -4
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/generated.d.ts +11 -7
- package/dist/commands/generated.d.ts.map +1 -1
- package/dist/commands/generated.js +10 -6
- package/dist/commands/generated.js.map +1 -1
- package/dist/commands/update.d.ts +5 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +34 -2
- package/dist/commands/update.js.map +1 -1
- package/dist/generated/capabilities.json +9192 -621
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/skills/soku/SKILL.md +7 -1
- package/skills/soku/references/ads-write.md +2 -2
- package/skills/soku/references/auth-workspace.md +8 -13
- package/skills/soku/references/capability-flow.md +6 -5
- package/skills/soku/references/data-capabilities.md +16 -0
- package/skills/soku/references/seo-automation-files.md +0 -7
- package/skills/soku/references/skills-updates.md +5 -0
- package/dist/commands/resources.d.ts +0 -4
- package/dist/commands/resources.d.ts.map +0 -1
- package/dist/commands/resources.js +0 -22
- package/dist/commands/resources.js.map +0 -1
package/dist/index.js
CHANGED
|
@@ -12,7 +12,6 @@ import { registerFilesCommands } from './commands/files.js';
|
|
|
12
12
|
import { registerGeneratedCommands } from './commands/generated.js';
|
|
13
13
|
import { registerMemoryCommands } from './commands/memory.js';
|
|
14
14
|
import { registerOrgCommands } from './commands/org.js';
|
|
15
|
-
import { registerResourceCommands } from './commands/resources.js';
|
|
16
15
|
import { registerReviewCommands } from './commands/review.js';
|
|
17
16
|
import { registerSeoHostingCommands } from './commands/seo-hosting.js';
|
|
18
17
|
import { registerSkillCommand } from './commands/skill.js';
|
|
@@ -31,7 +30,6 @@ registerAutomationCommands(program);
|
|
|
31
30
|
registerOrgCommands(program);
|
|
32
31
|
registerBrandCommands(program);
|
|
33
32
|
registerWorkspaceCommands(program);
|
|
34
|
-
registerResourceCommands(program);
|
|
35
33
|
registerMemoryCommands(program);
|
|
36
34
|
registerGeneratedCommands(program);
|
|
37
35
|
registerAdsCommands(program);
|
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,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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.13",
|
|
4
4
|
"description": "Soku CLI — call Soku ads/GA4/PostHog data capabilities from any AI agent or shell.",
|
|
5
5
|
"license": "Proprietary",
|
|
6
6
|
"author": "Soku",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"build": "tsc && mkdir -p dist/generated && cp src/generated/capabilities.json dist/generated/capabilities.json",
|
|
43
43
|
"typecheck": "tsc --noEmit",
|
|
44
44
|
"test": "tsc -p tsconfig.test.json && find .test-build -name '*.test.js' -print | sort | xargs node --test",
|
|
45
|
-
"gen:capabilities": "
|
|
45
|
+
"gen:capabilities": "uv run --project ../.. python ../../scripts/gen_cli_capabilities.py",
|
|
46
46
|
"clean": "rm -rf dist .test-build",
|
|
47
47
|
"postinstall": "node postinstall.cjs",
|
|
48
48
|
"prepublishOnly": "pnpm run clean && pnpm run build"
|
package/skills/soku/SKILL.md
CHANGED
|
@@ -41,7 +41,6 @@ Business skills carry their own "Running this skill with the Soku CLI" section.
|
|
|
41
41
|
```bash
|
|
42
42
|
soku auth status
|
|
43
43
|
soku workspace status
|
|
44
|
-
soku resources list
|
|
45
44
|
```
|
|
46
45
|
|
|
47
46
|
2. If auth is missing or expired, use the agent split-flow from
|
|
@@ -129,3 +128,10 @@ When asking an AI client to invoke a business skill, write
|
|
|
129
128
|
Soku-managed business skill recorded in `.soku-skills.json`. It also refreshes
|
|
130
129
|
legacy meta-only installs that have `soku/SKILL.md` but no manifest, so older
|
|
131
130
|
installations receive this `references/` directory.
|
|
131
|
+
|
|
132
|
+
`soku update cli` also silently refreshes an already-installed global `soku`
|
|
133
|
+
meta skill as an npm postinstall side effect. Its JSON result carries
|
|
134
|
+
`mustRereadMetaSkill: true` plus `metaSkillRefreshed: [<paths>]` when that
|
|
135
|
+
happened. After running `soku update cli`, check that field: if true, re-read
|
|
136
|
+
this file (and `references/`) from the listed path before continuing — do not
|
|
137
|
+
keep acting on this session's previously loaded copy of this skill.
|
|
@@ -9,11 +9,11 @@ and does not execute until a human approves.
|
|
|
9
9
|
```bash
|
|
10
10
|
soku auth login --no-wait
|
|
11
11
|
soku workspace status
|
|
12
|
-
soku resources list
|
|
13
12
|
soku ads list-ad-accounts --platform meta
|
|
14
13
|
```
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
A default login can reach ads writes (no resource needed); each
|
|
16
|
+
delivery-changing write still returns a pending review for a human to approve.
|
|
17
17
|
|
|
18
18
|
## Meta Account Helpers
|
|
19
19
|
|
|
@@ -21,19 +21,15 @@ soku auth login --device-code <device_code>
|
|
|
21
21
|
|
|
22
22
|
For CI or headless contexts, use `SOKU_TOKEN`; do not echo it.
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## Resources
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
- `automation` for automation management.
|
|
34
|
-
- `context-hub` for Context Hub files.
|
|
35
|
-
- `asset-publish` for temporary public file URLs.
|
|
36
|
-
- `brand-skills` for brand skill management.
|
|
26
|
+
The CLI resource model has been retired — `--resource` is **no longer needed
|
|
27
|
+
for anything**. A default `soku auth login` reaches the entire CLI surface: all
|
|
28
|
+
data commands (`soku ads / ga4 / posthog / call ...`) **and** every sub-command
|
|
29
|
+
(`soku seo-hosting / automation / files / context / brand skill ...`). Writes
|
|
30
|
+
still return a HITL review the user approves; that is the only gate left
|
|
31
|
+
(besides the active org/brand). The `--resource` flag and the `soku resources`
|
|
32
|
+
command have been removed from the CLI.
|
|
37
33
|
|
|
38
34
|
## Workspace
|
|
39
35
|
|
|
@@ -43,7 +39,6 @@ Never infer Soku workspace state from the local shell directory.
|
|
|
43
39
|
soku workspace status
|
|
44
40
|
soku workspace resolve <brand>
|
|
45
41
|
soku workspace use-brand <brand>
|
|
46
|
-
soku resources list
|
|
47
42
|
```
|
|
48
43
|
|
|
49
44
|
If `resolve` is ambiguous, show the candidates and ask the user which exact
|
|
@@ -4,15 +4,16 @@ Use this discover -> inspect -> run loop for data capabilities. `--help` is the
|
|
|
4
4
|
authoritative runtime surface for command names, flags, required params, and
|
|
5
5
|
usage notes.
|
|
6
6
|
|
|
7
|
-
## 1. Confirm
|
|
7
|
+
## 1. Confirm Workspace
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
soku
|
|
10
|
+
soku auth status
|
|
11
|
+
soku workspace status
|
|
11
12
|
```
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
A default `soku auth login` reaches the entire CLI surface — there is no
|
|
15
|
+
resource model to grant or check (writes are still HITL-approved). Just make
|
|
16
|
+
sure you are signed in and pointed at the right org/brand.
|
|
16
17
|
|
|
17
18
|
## 2. Discover Namespaces
|
|
18
19
|
|
|
@@ -31,6 +31,22 @@ soku ads query-multi-dimension \
|
|
|
31
31
|
Use `query-single-dimension` for CPA, ROAS, conversion group fan-out, or one
|
|
32
32
|
dimension. Use `query-multi-dimension` for raw multi-dimensional breakdowns.
|
|
33
33
|
|
|
34
|
+
`--platform` accepts `google`, `meta`, `tiktok`, or `chatgpt_ads`:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
soku ads list-ad-accounts --platform chatgpt_ads
|
|
38
|
+
soku ads query-single-dimension \
|
|
39
|
+
--platform chatgpt_ads \
|
|
40
|
+
--account-id <account_id> \
|
|
41
|
+
--dimension campaign \
|
|
42
|
+
--date-start 2026-05-01 \
|
|
43
|
+
--date-end 2026-05-07
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
ChatGPT Ads is synced reporting only — no campaign/ad write actions, and
|
|
47
|
+
`query-multi-dimension` does not support it (use `query-single-dimension`
|
|
48
|
+
instead).
|
|
49
|
+
|
|
34
50
|
## Google Ads GAQL Fallback
|
|
35
51
|
|
|
36
52
|
Use GAQL only when cached actions cannot answer the request:
|
|
@@ -4,7 +4,6 @@ These commands operate on the active Soku workspace. Confirm workspace first:
|
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
soku workspace status
|
|
7
|
-
soku resources list
|
|
8
7
|
```
|
|
9
8
|
|
|
10
9
|
## SEO Hosting Pages
|
|
@@ -56,8 +55,6 @@ risk.
|
|
|
56
55
|
|
|
57
56
|
## Automations
|
|
58
57
|
|
|
59
|
-
Restricted tokens need `automation`.
|
|
60
|
-
|
|
61
58
|
```bash
|
|
62
59
|
soku automation list
|
|
63
60
|
soku automation create --name "Fast check" --prompt "Check account health" --cron "* * * * *" --timezone UTC
|
|
@@ -76,8 +73,6 @@ conversation content.
|
|
|
76
73
|
|
|
77
74
|
## Context Hub
|
|
78
75
|
|
|
79
|
-
Restricted tokens need `context-hub`.
|
|
80
|
-
|
|
81
76
|
```bash
|
|
82
77
|
soku context list
|
|
83
78
|
soku context upload ./brief.pdf --dir research
|
|
@@ -90,8 +85,6 @@ Paths are context-relative. Do not include a `context/` prefix.
|
|
|
90
85
|
|
|
91
86
|
## Temporary Public File URLs
|
|
92
87
|
|
|
93
|
-
Restricted tokens need `asset-publish`.
|
|
94
|
-
|
|
95
88
|
```bash
|
|
96
89
|
soku files publish ./creative.png
|
|
97
90
|
```
|
|
@@ -73,6 +73,11 @@ Global `npm i -g @soku-ai/cli` also refreshes already-installed global meta
|
|
|
73
73
|
skills after npm finishes installing. It does not install new business skills
|
|
74
74
|
and does not scan project-local directories.
|
|
75
75
|
|
|
76
|
+
`soku update cli` runs that same global `npm i -g` under the hood, so its JSON
|
|
77
|
+
result includes `mustRereadMetaSkill` and `metaSkillRefreshed: [<paths>]`. When
|
|
78
|
+
`mustRereadMetaSkill` is true, re-read this skill from the listed path(s)
|
|
79
|
+
before continuing — the on-disk copy just changed underneath this session.
|
|
80
|
+
|
|
76
81
|
## Remove
|
|
77
82
|
|
|
78
83
|
```bash
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../src/commands/resources.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAYnC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B/D"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/** `soku resources list` — show the external resources granted to this session. */
|
|
2
|
-
import { Command } from 'commander';
|
|
3
|
-
import { apiRequest } from '../http/client.js';
|
|
4
|
-
import { emitSuccess, table } from '../output/envelope.js';
|
|
5
|
-
export function registerResourceCommands(program) {
|
|
6
|
-
program
|
|
7
|
-
.command('resources')
|
|
8
|
-
.description('List external resources granted to this session')
|
|
9
|
-
.addCommand(new Command('list').action(async () => {
|
|
10
|
-
const data = await apiRequest('/api/cli/resources', { workspace: true });
|
|
11
|
-
emitSuccess(data, (d) => table(d.resources.map((r) => ({
|
|
12
|
-
id: r.id,
|
|
13
|
-
label: r.label ?? '',
|
|
14
|
-
description: r.description ?? '',
|
|
15
|
-
})), [
|
|
16
|
-
{ key: 'id', header: 'RESOURCE' },
|
|
17
|
-
{ key: 'label', header: 'LABEL' },
|
|
18
|
-
{ key: 'description', header: 'DESCRIPTION' },
|
|
19
|
-
]));
|
|
20
|
-
}));
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=resources.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/commands/resources.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAS1D,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,iDAAiD,CAAC;SAC9D,UAAU,CACT,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QACpC,MAAM,IAAI,GAAG,MAAM,UAAU,CAC3B,oBAAoB,EACpB,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAA;QACD,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACtB,KAAK,CACH,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;YACpB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;SACjC,CAAC,CAAC,EACH;YACE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE;YACjC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;YACjC,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE;SAC9C,CACF,CACF,CAAA;IACH,CAAC,CAAC,CACH,CAAA;AACL,CAAC"}
|