@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.
Files changed (52) hide show
  1. package/dist/commands/auth.js +1 -1
  2. package/dist/commands/auth.js.map +1 -1
  3. package/dist/commands/brand.d.ts.map +1 -1
  4. package/dist/commands/brand.js +57 -1
  5. package/dist/commands/brand.js.map +1 -1
  6. package/dist/commands/generated.d.ts +1 -1
  7. package/dist/commands/generated.d.ts.map +1 -1
  8. package/dist/commands/generated.js +16 -3
  9. package/dist/commands/generated.js.map +1 -1
  10. package/dist/commands/memory.d.ts +18 -0
  11. package/dist/commands/memory.d.ts.map +1 -0
  12. package/dist/commands/memory.js +70 -0
  13. package/dist/commands/memory.js.map +1 -0
  14. package/dist/commands/seo-hosting.d.ts +100 -0
  15. package/dist/commands/seo-hosting.d.ts.map +1 -0
  16. package/dist/commands/seo-hosting.js +489 -0
  17. package/dist/commands/seo-hosting.js.map +1 -0
  18. package/dist/commands/skill.d.ts +44 -10
  19. package/dist/commands/skill.d.ts.map +1 -1
  20. package/dist/commands/skill.js +77 -45
  21. package/dist/commands/skill.js.map +1 -1
  22. package/dist/commands/update.d.ts +23 -0
  23. package/dist/commands/update.d.ts.map +1 -0
  24. package/dist/commands/update.js +345 -0
  25. package/dist/commands/update.js.map +1 -0
  26. package/dist/commands/workspace.d.ts +4 -0
  27. package/dist/commands/workspace.d.ts.map +1 -0
  28. package/dist/commands/workspace.js +132 -0
  29. package/dist/commands/workspace.js.map +1 -0
  30. package/dist/config.d.ts +2 -2
  31. package/dist/config.d.ts.map +1 -1
  32. package/dist/config.js +2 -2
  33. package/dist/config.js.map +1 -1
  34. package/dist/generated/capabilities.json +208 -30
  35. package/dist/http/client.d.ts.map +1 -1
  36. package/dist/http/client.js +50 -14
  37. package/dist/http/client.js.map +1 -1
  38. package/dist/index.js +26 -2
  39. package/dist/index.js.map +1 -1
  40. package/dist/output/unwrap.d.ts.map +1 -1
  41. package/dist/output/unwrap.js +18 -1
  42. package/dist/output/unwrap.js.map +1 -1
  43. package/dist/skills/unzip.d.ts +1 -1
  44. package/dist/skills/unzip.js +1 -1
  45. package/dist/update-check.js +4 -4
  46. package/dist/update-check.js.map +1 -1
  47. package/dist/version.d.ts +1 -1
  48. package/dist/version.js +1 -1
  49. package/package.json +4 -2
  50. package/postinstall.cjs +85 -0
  51. package/skills/soku/SKILL.md +177 -16
  52. 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,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,cAAc;QAAE,OAAM;IACnD,MAAM,iBAAiB,EAAE,CAAA;AAC3B,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACtD,SAAS,CAAC,YAAY,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;AAC7F,CAAC,CAAC,CAAA"}
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,CAavD"}
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"}
@@ -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('action_failed', message, ExitCode.RUNTIME);
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,EAAE,MAAM,eAAe,CAAA;AAQnD,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,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,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IAClE,CAAC;IACD,OAAO,SAAS,CAAC,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;AAC9D,CAAC"}
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"}
@@ -1,4 +1,4 @@
1
- /** Safe in-memory unzip for skill bundles downloaded from the CDN.
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
@@ -1,4 +1,4 @@
1
- /** Safe in-memory unzip for skill bundles downloaded from the CDN.
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
@@ -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(result.installCommand)}\n`);
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('Check whether a newer Soku CLI is available on npm')
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(d.installCommand)}`,
146
+ `${dim('Run')} ${cyan('soku update cli')}`,
147
147
  ].join('\n');
148
148
  });
149
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAClF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAE5D,MAAM,oBAAoB,GAAG,4BAA4B,CAAA;AACzD,MAAM,eAAe,GAAG,YAAY,gBAAgB,EAAE,CAAA;AACtD,MAAM,kBAAkB,GAAG,IAAI,CAAA;AAoB/B,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QACtB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAA;IACzB,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAS,EAAE,CAAS;IAC7C,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;IAC7B,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAChD,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAC7B,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAA;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QAClB,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,CAAC,CAAA;QACjC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC3D,IAAI,OAAO,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAA;YAC/B,IAAI,IAAI,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAA;YAC3B,SAAQ;QACV,CAAC;QACD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,CAAC,CAAC,CAAA;QAC/B,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,CAAC,CAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;IAC7B,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,CAAS,EAAE,CAAS;IACnD,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;IAC/B,MAAM,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAA;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QACxC,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;IAC7B,CAAC;IACD,OAAO,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAChC,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,SAAuB;IAC5E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAA;IACxE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;QACxD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,WAAW,SAAS,EAAE;YACrF,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;SACxC,CAAC,CAAA;QACF,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QACnC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;QAC7D,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA0B,CAAA;QACxD,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;QACpE,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAA;IACvB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAqB,EAAE;IAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,WAAW,CAAA;IACzD,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,oBAAoB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACjF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAA;IAElC,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAA;IACpF,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;IAEnC,OAAO;QACL,WAAW,EAAE,gBAAgB;QAC7B,cAAc;QACd,aAAa;QACb,SAAS,EAAE,aAAa,KAAK,IAAI;QACjC,eAAe,EAAE,aAAa,KAAK,IAAI,IAAI,gBAAgB,CAAC,aAAa,EAAE,cAAc,CAAC,GAAG,CAAC;QAC9F,cAAc,EAAE,eAAe;QAC/B,SAAS;QACT,WAAW;KACZ,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,IAAI,CAAA;IAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IACzD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,gBAAgB,EAAE;QAAE,OAAM;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAA;QACrC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,OAAM;QAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,GAAG,CAAC,mBAAmB,CAAC,IAAI,gBAAgB,IAAI,MAAM,CAAC,cAAc,OAAO,MAAM,CAAC,aAAa,IAAI;YACrG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CACnD,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,uEAAuE;IACzE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,OAAO;SACJ,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,sBAAsB,EAAE,+BAA+B,CAAC;SAC/D,MAAM,CAAC,KAAK,EAAE,IAA8B,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;gBAClC,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CAAC,CAAA;YACF,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;gBACxB,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBACjB,OAAO,GAAG,gBAAgB,kCAAkC,GAAG,CAAC,2CAA2C,CAAC,EAAE,CAAA;gBAChH,CAAC;gBACD,IAAI,CAAC,CAAC,CAAC,aAAa;oBAAE,OAAO,GAAG,gBAAgB,+BAA+B,CAAA;gBAC/E,IAAI,CAAC,CAAC,CAAC,eAAe;oBAAE,OAAO,GAAG,gBAAgB,mBAAmB,CAAC,CAAC,cAAc,IAAI,CAAA;gBACzF,OAAO;oBACL,GAAG,gBAAgB,IAAI,CAAC,CAAC,cAAc,OAAO,CAAC,CAAC,aAAa,EAAE;oBAC/D,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE;iBAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACd,CAAC,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,CACP,qBAAqB,EACrB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAChD,QAAQ,CAAC,OAAO,EAChB,0DAA0D,CAC3D,CAAA;QACH,CAAC;IACH,CAAC,CAAC,CAAA;AACN,CAAC"}
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
@@ -1,3 +1,3 @@
1
1
  export declare const CLI_PACKAGE_NAME = "@soku-ai/cli";
2
- export declare const CLI_VERSION = "0.1.0-alpha.4";
2
+ export declare const CLI_VERSION = "0.1.0-alpha.7";
3
3
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  export const CLI_PACKAGE_NAME = '@soku-ai/cli';
2
- export const CLI_VERSION = '0.1.0-alpha.4';
2
+ export const CLI_VERSION = '0.1.0-alpha.7';
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soku-ai/cli",
3
- "version": "0.1.0-alpha.4",
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 && node --test \".test-build/**/*.test.js\"",
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": {
@@ -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()
@@ -1,11 +1,13 @@
1
1
  ---
2
2
  name: soku
3
3
  description: >-
4
- Use when calling Soku ads/GA4 marketing-data capabilities from the shell —
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 errors, or installing/updating the Soku CLI.
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 + GA4 data capabilities over HTTP. It is the
18
- preferred way for an agent to use Soku data — it works in any shell, with no MCP
19
- host required. Output is JSON on stdout; errors are a JSON envelope on stderr
20
- with a semantic exit code.
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. Object/list flags take a
114
- JSON string, e.g. `--filters '{"campaign_id":["123"]}'`.
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-check # check whether the CLI itself needs updating
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
- If `soku update-check` reports an available CLI update, ask the user before
190
- running:
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
- ```bash
193
- npm i -g @soku-ai/cli
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 installed # what's installed locally
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 |