@soku-ai/cli 0.1.0-alpha.4 → 0.1.0-alpha.6
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 +32 -12
- 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.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/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 +1 -1
- 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 +24 -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 +79 -9
package/README.md
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# @soku-ai/cli
|
|
2
2
|
|
|
3
|
-
Call Soku ads/GA4 data capabilities from any shell or AI agent. It
|
|
4
|
-
preferred surface for external agents
|
|
5
|
-
works without an MCP host.
|
|
3
|
+
Call Soku ads/GA4 data capabilities from any shell or AI agent. It is the
|
|
4
|
+
preferred surface for external agents and does not require an MCP host.
|
|
6
5
|
|
|
7
6
|
## Install
|
|
8
7
|
|
|
@@ -24,7 +23,8 @@ soku auth login # device-login in the browser
|
|
|
24
23
|
soku org use <slug|id> # pick a workspace (id, slug, or name)
|
|
25
24
|
soku brand use <slug|id>
|
|
26
25
|
soku --help # discover namespaces (ads, ga4, …)
|
|
27
|
-
soku update
|
|
26
|
+
soku update status # check CLI and installed skill updates
|
|
27
|
+
soku memory list # read current-brand memory context
|
|
28
28
|
soku ads --help # actions in a namespace
|
|
29
29
|
soku ads list-ad-accounts --platform google
|
|
30
30
|
```
|
|
@@ -81,17 +81,37 @@ removed.
|
|
|
81
81
|
|
|
82
82
|
## Updates
|
|
83
83
|
|
|
84
|
-
`soku update
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
84
|
+
`soku update status` queries the npm registry for `@soku-ai/cli@latest` and
|
|
85
|
+
compares installed Soku-managed skills against the public skill catalog.
|
|
86
|
+
`soku update skills` refreshes the bundled `soku` meta-skill plus already
|
|
87
|
+
installed business skills. `soku update cli` runs `npm i -g @soku-ai/cli`.
|
|
88
|
+
|
|
89
|
+
The CLI also performs an advisory check on every command invocation, writing
|
|
90
|
+
update notices to stderr only. There is no update-check cache; set
|
|
91
|
+
`SOKU_NO_UPDATE_CHECK=1` to disable the background notice. The legacy
|
|
92
|
+
`soku update-check` command still exists as a hidden compatibility alias.
|
|
93
|
+
|
|
94
|
+
## Release
|
|
95
|
+
|
|
96
|
+
Release publishing is handled by `.github/workflows/publish-soku-cli.yml`.
|
|
97
|
+
|
|
98
|
+
1. Bump both `apps/cli/package.json` and `apps/cli/src/version.ts`.
|
|
99
|
+
2. Run `pnpm --filter @soku-ai/cli test` and `pnpm --filter @soku-ai/cli build`.
|
|
100
|
+
3. Use workflow dispatch with `dry_run=true` to verify packaging.
|
|
101
|
+
4. After the PR is merged, push a tag named `soku-ai-cli-v<version>`.
|
|
102
|
+
|
|
103
|
+
The workflow verifies that the tag matches the package version, checks that the
|
|
104
|
+
version is not already on npm, runs `npm pack --dry-run`, then publishes with
|
|
105
|
+
`npm publish --access public --tag latest` via npm Trusted Publishing.
|
|
106
|
+
The publish workflow upgrades npm to the Trusted Publishing compatible runtime
|
|
107
|
+
before calling `npm publish`.
|
|
89
108
|
|
|
90
109
|
## Environment variables
|
|
91
110
|
|
|
92
111
|
Production is the default: API calls go to `https://api.soku.ai`, and skills are
|
|
93
|
-
downloaded from `https://
|
|
94
|
-
environment-only overrides so a dev session cannot poison
|
|
112
|
+
downloaded from `https://api.soku.ai/api/cli/skills`. Local and staging
|
|
113
|
+
endpoints are environment-only overrides so a dev session cannot poison
|
|
114
|
+
`~/.soku/config.json`.
|
|
95
115
|
|
|
96
116
|
```bash
|
|
97
117
|
SOKU_API_BASE=http://localhost:15386 soku auth status
|
|
@@ -105,5 +125,5 @@ SOKU_SKILLS_URL=http://127.0.0.1:18080 soku skill list
|
|
|
105
125
|
| `SOKU_ORG_ID` / `SOKU_BRAND_ID` | One-off workspace override |
|
|
106
126
|
| `SOKU_NO_KEYCHAIN` | Skip the OS keychain; use the 0600 file |
|
|
107
127
|
| `SOKU_NO_UPDATE_CHECK` | Disable the background update notice |
|
|
108
|
-
| `SOKU_SKILLS_URL` | Per-command skill catalog
|
|
128
|
+
| `SOKU_SKILLS_URL` | Per-command skill catalog override |
|
|
109
129
|
| `ALL_PROXY` | Proxy for outbound HTTPS |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/commands/brand.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../src/commands/brand.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAgBnC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwJ5D"}
|
package/dist/commands/brand.js
CHANGED
|
@@ -28,10 +28,56 @@ export function registerBrandCommands(program) {
|
|
|
28
28
|
{ key: 'id', header: 'ID' },
|
|
29
29
|
]));
|
|
30
30
|
});
|
|
31
|
+
brand
|
|
32
|
+
.command('find <query>')
|
|
33
|
+
.description('Search accessible brands across all organizations')
|
|
34
|
+
.option('--limit <n>', 'Maximum candidates to show', '20')
|
|
35
|
+
.action(async (query, opts) => {
|
|
36
|
+
const limit = Number(opts.limit);
|
|
37
|
+
if (!Number.isFinite(limit) || limit < 1) {
|
|
38
|
+
emitError('usage', '--limit must be a positive number.', ExitCode.USAGE);
|
|
39
|
+
}
|
|
40
|
+
const data = await apiRequest(`/api/cli/brands/search?q=${encodeURIComponent(query)}&limit=${encodeURIComponent(String(limit))}`);
|
|
41
|
+
emitSuccess(data, (d) => table(d.brands.map((b) => ({
|
|
42
|
+
name: b.name,
|
|
43
|
+
slug: b.slug,
|
|
44
|
+
org: b.org_slug || b.org_name || b.org_id,
|
|
45
|
+
id: b.id,
|
|
46
|
+
})), [
|
|
47
|
+
{ key: 'name', header: 'NAME' },
|
|
48
|
+
{ key: 'slug', header: 'SLUG' },
|
|
49
|
+
{ key: 'org', header: 'ORG' },
|
|
50
|
+
{ key: 'id', header: 'ID' },
|
|
51
|
+
]));
|
|
52
|
+
});
|
|
31
53
|
brand
|
|
32
54
|
.command('use <brand>')
|
|
33
55
|
.description('Set the active brand (accepts id, slug, or name)')
|
|
34
|
-
.
|
|
56
|
+
.option('--any-org', 'Search all accessible organizations and set org+brand together')
|
|
57
|
+
.action(async (ref, opts) => {
|
|
58
|
+
if (opts.anyOrg) {
|
|
59
|
+
const { brands } = await apiRequest(`/api/cli/brands/search?q=${encodeURIComponent(ref)}&limit=20`);
|
|
60
|
+
const res = resolveSearchMatch(brands, ref);
|
|
61
|
+
if (res.kind === 'none') {
|
|
62
|
+
emitError('not_found', `No accessible brand matching "${ref}".`, ExitCode.NOT_FOUND, 'Run `soku workspace resolve <brand>` to see candidates.');
|
|
63
|
+
}
|
|
64
|
+
if (res.kind === 'ambiguous') {
|
|
65
|
+
const candidates = res.matches
|
|
66
|
+
.map((b) => `${b.slug} (${b.org_slug || b.org_name || b.org_id})`)
|
|
67
|
+
.join(', ');
|
|
68
|
+
emitError('ambiguous', `"${ref}" matches ${res.matches.length} brands.`, ExitCode.USAGE, `Use an exact slug or id: ${candidates}`);
|
|
69
|
+
}
|
|
70
|
+
const match = res.item;
|
|
71
|
+
updateConfig({ activeOrgId: match.org_id, activeBrandId: match.id });
|
|
72
|
+
emitSuccess({
|
|
73
|
+
active_org_id: match.org_id,
|
|
74
|
+
active_brand_id: match.id,
|
|
75
|
+
name: match.name,
|
|
76
|
+
org_name: match.org_name,
|
|
77
|
+
org_slug: match.org_slug,
|
|
78
|
+
}, (d) => `${green('✓')} Active workspace: ${cyan(d.org_slug || d.org_name || d.active_org_id)} / ${cyan(d.name)} ${dim(`(${d.active_brand_id})`)}\n ${dim('Next: soku resources list')}`);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
35
81
|
const cfg = loadConfig();
|
|
36
82
|
if (!cfg.activeOrgId) {
|
|
37
83
|
emitError('no_org', 'Select an organization first.', ExitCode.USAGE, 'Run `soku org use <slug|id>`.');
|
|
@@ -50,4 +96,14 @@ export function registerBrandCommands(program) {
|
|
|
50
96
|
emitSuccess({ active_org_id: cfg.activeOrgId, active_brand_id: match.id, name: match.name }, (d) => `${green('✓')} Active brand: ${cyan(d.name)} ${dim(`(${d.active_brand_id})`)}\n ${dim('Next: soku --help (data commands under each namespace)')}`);
|
|
51
97
|
});
|
|
52
98
|
}
|
|
99
|
+
function resolveSearchMatch(brands, ref) {
|
|
100
|
+
const exact = matchRef(brands, ref);
|
|
101
|
+
if (exact.kind !== 'none')
|
|
102
|
+
return exact;
|
|
103
|
+
if (brands.length === 1)
|
|
104
|
+
return { kind: 'match', item: brands[0] };
|
|
105
|
+
if (brands.length > 1)
|
|
106
|
+
return { kind: 'ambiguous', matches: brands };
|
|
107
|
+
return { kind: 'none' };
|
|
108
|
+
}
|
|
53
109
|
//# sourceMappingURL=brand.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/commands/brand.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAInC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AACjG,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"brand.js","sourceRoot":"","sources":["../../src/commands/brand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/commands/generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,aAAa,EAAE,CAAA;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,EAAE,CAAA;CAC1B;
|
|
1
|
+
{"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/commands/generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,aAAa,EAAE,CAAA;IAC7B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,EAAE,CAAA;CAC1B;AAmDD,sEAAsE;AACtE,wBAAgB,YAAY,IAAI,kBAAkB,CAGjD;AAED,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAkD3F;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAEhE"}
|
|
@@ -41,6 +41,21 @@ function parseNumberFlag(param, raw) {
|
|
|
41
41
|
}
|
|
42
42
|
return n;
|
|
43
43
|
}
|
|
44
|
+
function actionHelpSuffix(spec) {
|
|
45
|
+
const typedName = `${spec.namespace} ${toKebab(spec.action)}`;
|
|
46
|
+
const rawName = `${spec.namespace} ${spec.action}`;
|
|
47
|
+
const naming = `Typed CLI command: soku ${typedName}\nRaw call action: soku call ${rawName}`;
|
|
48
|
+
if (spec.namespace === 'ads' && spec.action === 'gaql_search') {
|
|
49
|
+
return [
|
|
50
|
+
'FALLBACK WARNING:',
|
|
51
|
+
'Prefer cached ads analytics first: `soku ads list-dimensions`, then `soku ads query-single-dimension` or `soku ads query-multi-dimension`.',
|
|
52
|
+
'Use GAQL only for Google-native fields or segment combinations not covered by cached query actions. If fields are unknown, run `soku ads get-resource-metadata` before this command.',
|
|
53
|
+
'',
|
|
54
|
+
naming,
|
|
55
|
+
].join('\n');
|
|
56
|
+
}
|
|
57
|
+
return naming;
|
|
58
|
+
}
|
|
44
59
|
/** Load the committed manifest shipped alongside the compiled CLI. */
|
|
45
60
|
export function loadManifest() {
|
|
46
61
|
const path = fileURLToPath(new URL('../generated/capabilities.json', import.meta.url));
|
|
@@ -59,9 +74,7 @@ export function buildGeneratedCommands(program, manifest) {
|
|
|
59
74
|
};
|
|
60
75
|
for (const spec of manifest.actions) {
|
|
61
76
|
const cmd = groupFor(spec.namespace).command(toKebab(spec.action));
|
|
62
|
-
cmd.description(spec.description);
|
|
63
|
-
if (spec.long_description)
|
|
64
|
-
cmd.addHelpText('after', `\n${spec.long_description}`);
|
|
77
|
+
cmd.description([spec.description, spec.long_description, actionHelpSuffix(spec)].filter(Boolean).join('\n\n'));
|
|
65
78
|
for (const param of spec.input_params) {
|
|
66
79
|
const flag = `--${toKebab(param.name)}`;
|
|
67
80
|
const desc = param.description || param.name;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/commands/generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAIxC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AA6BpD,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAChC,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;AACxE,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,uEAAuE;IACvE,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,CAAA;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,KAAa,EAAE,GAAW;IAC/C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IACtF,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,GAAW;IACjD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACrB,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC,OAAO,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;IACpF,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,YAAY;IAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACtF,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAuB,CAAA;AACrE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,OAAgB,EAAE,QAA4B;IACnF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAA;IACzC,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAW,EAAE;QAC9C,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,oBAAoB,CAAC,CAAA;YAChF,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAClE,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/commands/generated.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** `soku memory` — read memory entries scoped to the active brand. */
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
export type MemoryType = 'user' | 'feedback' | 'reference' | 'task' | 'reflection';
|
|
4
|
+
export interface MemoryEntry {
|
|
5
|
+
type: MemoryType;
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
content: string;
|
|
9
|
+
updated_at: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function memoryListPath(opts: {
|
|
12
|
+
type?: string;
|
|
13
|
+
query?: string;
|
|
14
|
+
}): string;
|
|
15
|
+
export declare function renderMemoryEntries(entries: MemoryEntry[]): string;
|
|
16
|
+
export declare function renderMemoryEntry(entry: MemoryEntry): string;
|
|
17
|
+
export declare function registerMemoryCommands(program: Command): void;
|
|
18
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,YAAY,CAAA;AAElF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB;AAcD,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAM9E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAiBlE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAM5D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqC7D"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/** `soku memory` — read memory entries scoped to the active brand. */
|
|
2
|
+
import { apiRequest } from '../http/client.js';
|
|
3
|
+
import { bold, dim, emitSuccess, table } from '../output/envelope.js';
|
|
4
|
+
export function memoryListPath(opts) {
|
|
5
|
+
const params = new URLSearchParams();
|
|
6
|
+
if (opts.type)
|
|
7
|
+
params.set('type', opts.type);
|
|
8
|
+
if (opts.query)
|
|
9
|
+
params.set('q', opts.query);
|
|
10
|
+
const query = params.toString();
|
|
11
|
+
return `/api/cli/memory${query ? `?${query}` : ''}`;
|
|
12
|
+
}
|
|
13
|
+
export function renderMemoryEntries(entries) {
|
|
14
|
+
return table(entries.map((entry) => ({
|
|
15
|
+
type: entry.type,
|
|
16
|
+
name: entry.name,
|
|
17
|
+
description: entry.description,
|
|
18
|
+
updated: entry.updated_at,
|
|
19
|
+
preview: compactPreview(entry.content),
|
|
20
|
+
})), [
|
|
21
|
+
{ key: 'type', header: 'TYPE' },
|
|
22
|
+
{ key: 'name', header: 'NAME' },
|
|
23
|
+
{ key: 'description', header: 'DESCRIPTION' },
|
|
24
|
+
{ key: 'updated', header: 'UPDATED' },
|
|
25
|
+
{ key: 'preview', header: 'PREVIEW' },
|
|
26
|
+
]);
|
|
27
|
+
}
|
|
28
|
+
export function renderMemoryEntry(entry) {
|
|
29
|
+
const header = `${bold('Memory')}: ${entry.type}/${entry.name}`;
|
|
30
|
+
const description = entry.description ? `\n${bold('Description')}: ${entry.description}` : '';
|
|
31
|
+
const updated = entry.updated_at ? `\n${bold('Updated')}: ${entry.updated_at}` : '';
|
|
32
|
+
const body = entry.content.trim() || dim('(empty)');
|
|
33
|
+
return `${header}${description}${updated}\n\n${body}`;
|
|
34
|
+
}
|
|
35
|
+
export function registerMemoryCommands(program) {
|
|
36
|
+
const memory = program
|
|
37
|
+
.command('memory')
|
|
38
|
+
.description('Read memory entries for the active brand workspace');
|
|
39
|
+
memory
|
|
40
|
+
.command('list')
|
|
41
|
+
.description('List current-brand memory entries with content previews')
|
|
42
|
+
.option('--type <type>', 'Filter by memory type: user, feedback, reference, task, reflection')
|
|
43
|
+
.option('-q, --query <text>', 'Search name, description, or content')
|
|
44
|
+
.action(async (opts) => {
|
|
45
|
+
const data = await apiRequest(memoryListPath(opts), { workspace: true });
|
|
46
|
+
emitSuccess(data, (d) => renderMemoryEntries(d.entries));
|
|
47
|
+
});
|
|
48
|
+
memory
|
|
49
|
+
.command('search <query>')
|
|
50
|
+
.description('Search current-brand memory entries')
|
|
51
|
+
.option('--type <type>', 'Filter by memory type: user, feedback, reference, task, reflection')
|
|
52
|
+
.action(async (query, opts) => {
|
|
53
|
+
const data = await apiRequest(memoryListPath({ type: opts.type, query }), { workspace: true });
|
|
54
|
+
emitSuccess(data, (d) => renderMemoryEntries(d.entries));
|
|
55
|
+
});
|
|
56
|
+
memory
|
|
57
|
+
.command('get <type> <name>')
|
|
58
|
+
.description('Read one full current-brand memory entry')
|
|
59
|
+
.action(async (type, name) => {
|
|
60
|
+
const data = await apiRequest(`/api/cli/memory/${encodeURIComponent(type)}/${encodeURIComponent(name)}`, { workspace: true });
|
|
61
|
+
emitSuccess(data, (d) => renderMemoryEntry(d.entry));
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function compactPreview(content) {
|
|
65
|
+
const normalized = content.replace(/\s+/g, ' ').trim();
|
|
66
|
+
if (!normalized)
|
|
67
|
+
return '';
|
|
68
|
+
return normalized.length > 120 ? `${normalized.slice(0, 117)}...` : normalized;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/skill.d.ts
CHANGED
|
@@ -1,29 +1,63 @@
|
|
|
1
1
|
/** `soku skill` — discover and install Soku skills into an AI client.
|
|
2
2
|
*
|
|
3
|
-
* - `soku skill list` browse the public skill catalog
|
|
3
|
+
* - `soku skill list` browse the public Soku skill catalog
|
|
4
4
|
* - `soku skill install <slug...>` download + install business skills
|
|
5
5
|
* - `soku skill install --all` install the whole catalog
|
|
6
6
|
* - `soku skill install` (no slug) install just the bundled `soku` meta-skill
|
|
7
|
-
* - `soku skill
|
|
7
|
+
* - `soku skill status` / `remove` manage what's installed locally
|
|
8
8
|
*
|
|
9
|
-
* Business skills are fetched as per-skill zips from
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* Business skills are fetched as per-skill zips from the public Soku skill
|
|
10
|
+
* catalog, already translated to CLI-native at pack time. We verify the sha256
|
|
11
|
+
* from index.json, unzip safely, and drop each business skill into
|
|
12
|
+
* `<skillsDir>/soku/<slug>/` with a top-level symlink
|
|
13
13
|
* `<skillsDir>/soku-<slug> -> soku/<slug>`. The bundled `soku` meta-skill (how
|
|
14
14
|
* to drive the CLI) ships in the npm package and is installed as a prerequisite. */
|
|
15
15
|
import { Command } from 'commander';
|
|
16
|
-
|
|
16
|
+
export declare const SOKU_META = "soku";
|
|
17
|
+
export declare const MANIFEST_FILE = ".soku-skills.json";
|
|
18
|
+
export type Agent = 'claude' | 'codex' | 'cursor';
|
|
19
|
+
export declare const AGENTS: Agent[];
|
|
20
|
+
export declare const PROJECT_DIRS: Record<Agent, string>;
|
|
21
|
+
export declare const GLOBAL_DIRS: Record<Agent, string>;
|
|
22
|
+
export interface IndexEntry {
|
|
23
|
+
slug: string;
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
category?: string | null;
|
|
27
|
+
version?: string | null;
|
|
28
|
+
providers?: string[];
|
|
29
|
+
tags?: string[];
|
|
30
|
+
zip: string;
|
|
31
|
+
sha256: string;
|
|
32
|
+
bytes: number;
|
|
33
|
+
}
|
|
34
|
+
export interface SkillIndex {
|
|
35
|
+
schema: number;
|
|
36
|
+
generated_at: string;
|
|
37
|
+
source_commit: string;
|
|
38
|
+
base_url: string;
|
|
39
|
+
count: number;
|
|
40
|
+
skills: IndexEntry[];
|
|
41
|
+
}
|
|
42
|
+
export interface ManifestRecord {
|
|
17
43
|
version?: string | null;
|
|
18
44
|
sha256: string;
|
|
19
45
|
installed_at: string;
|
|
20
|
-
source: 'cdn' | 'bundled';
|
|
46
|
+
source: 'catalog' | 'cdn' | 'bundled';
|
|
21
47
|
}
|
|
22
|
-
type Manifest = Record<string, ManifestRecord>;
|
|
48
|
+
export type Manifest = Record<string, ManifestRecord>;
|
|
49
|
+
export declare function baseDirFor(agent: Agent, global: boolean): string;
|
|
50
|
+
export declare function parseAgents(value: string): Agent[];
|
|
23
51
|
/** A slug is safe to use as a path segment (no traversal/separators). Exported for tests. */
|
|
24
52
|
export declare function isSafeSlug(slug: string): boolean;
|
|
53
|
+
export declare function manifestPath(baseDir: string): string;
|
|
25
54
|
export declare function loadManifest(baseDir: string): Manifest;
|
|
26
55
|
export declare function saveManifest(baseDir: string, manifest: Manifest): void;
|
|
56
|
+
export declare function agentSkillName(slug: string): string;
|
|
57
|
+
export declare function fetchIndex(base: string): Promise<SkillIndex>;
|
|
58
|
+
/** Copy the bundled `soku` meta-skill into a client dir without deleting child skills. */
|
|
59
|
+
export declare function installMetaSoku(baseDir: string): string;
|
|
60
|
+
/** Download, verify, unzip, and install one business skill. */
|
|
61
|
+
export declare function installBusinessSkill(baseDir: string, entry: IndexEntry, base: string): Promise<string>;
|
|
27
62
|
export declare function registerSkillCommand(program: Command): void;
|
|
28
|
-
export {};
|
|
29
63
|
//# sourceMappingURL=skill.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;oFAaoF;AAQpF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;oFAaoF;AAQpF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAMnC,eAAO,MAAM,SAAS,SAAS,CAAA;AAC/B,eAAO,MAAM,aAAa,sBAAsB,CAAA;AAEhD,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEjD,eAAO,MAAM,MAAM,EAAE,KAAK,EAAkC,CAAA;AAE5D,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAI9C,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAI7C,CAAA;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,UAAU,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,SAAS,GAAG,KAAK,GAAG,SAAS,CAAA;CACtC;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAYrD,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAEhE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAIlD;AASD,6FAA6F;AAC7F,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAQD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAMtD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAQtE;AAcD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AA8CD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAoBlE;AAeD,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAiBvD;AAED,+DAA+D;AAC/D,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2C5G;AAuDD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6H3D"}
|