@soku-ai/cli 0.1.0-alpha.0 → 0.1.0-alpha.10
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/auth/device.d.ts +9 -0
- package/dist/auth/device.d.ts.map +1 -1
- package/dist/auth/device.js +6 -1
- package/dist/auth/device.js.map +1 -1
- package/dist/commands/ads.d.ts +32 -0
- package/dist/commands/ads.d.ts.map +1 -0
- package/dist/commands/ads.js +752 -0
- package/dist/commands/ads.js.map +1 -0
- package/dist/commands/auth.d.ts +2 -0
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +28 -7
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/automation.d.ts +80 -0
- package/dist/commands/automation.d.ts.map +1 -0
- package/dist/commands/automation.js +213 -0
- package/dist/commands/automation.js.map +1 -0
- package/dist/commands/brand-skill.d.ts +72 -0
- package/dist/commands/brand-skill.d.ts.map +1 -0
- package/dist/commands/brand-skill.js +351 -0
- package/dist/commands/brand-skill.js.map +1 -0
- package/dist/commands/brand.d.ts.map +1 -1
- package/dist/commands/brand.js +59 -1
- package/dist/commands/brand.js.map +1 -1
- package/dist/commands/call.d.ts.map +1 -1
- package/dist/commands/call.js +6 -3
- package/dist/commands/call.js.map +1 -1
- package/dist/commands/context.d.ts +23 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +291 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/files.d.ts +10 -0
- package/dist/commands/files.d.ts.map +1 -0
- package/dist/commands/files.js +48 -0
- package/dist/commands/files.js.map +1 -0
- package/dist/commands/generated.d.ts +24 -3
- package/dist/commands/generated.d.ts.map +1 -1
- package/dist/commands/generated.js +97 -10
- 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/review.d.ts.map +1 -1
- package/dist/commands/review.js +46 -2
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/seo-hosting.d.ts +107 -0
- package/dist/commands/seo-hosting.d.ts.map +1 -0
- package/dist/commands/seo-hosting.js +499 -0
- package/dist/commands/seo-hosting.js.map +1 -0
- package/dist/commands/skill.d.ts +50 -6
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +120 -56
- 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 +5 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -7
- package/dist/config.js.map +1 -1
- package/dist/generated/capabilities.json +291 -30
- package/dist/http/client.d.ts.map +1 -1
- package/dist/http/client.js +74 -16
- package/dist/http/client.js.map +1 -1
- package/dist/index.js +35 -3
- package/dist/index.js.map +1 -1
- package/dist/output/envelope.d.ts +5 -0
- package/dist/output/envelope.d.ts.map +1 -1
- package/dist/output/envelope.js +101 -2
- package/dist/output/envelope.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.d.ts +0 -1
- package/dist/update-check.d.ts.map +1 -1
- package/dist/update-check.js +6 -55
- package/dist/update-check.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +7 -4
- package/postinstall.cjs +85 -0
- package/skills/soku/SKILL.md +254 -18
- package/README.md +0 -91
package/dist/http/client.js
CHANGED
|
@@ -12,7 +12,10 @@ export async function apiRequest(path, opts = {}) {
|
|
|
12
12
|
Authorization: `Bearer ${token}`,
|
|
13
13
|
Accept: 'application/json',
|
|
14
14
|
};
|
|
15
|
-
|
|
15
|
+
// FormData (multipart, e.g. asset upload) sets its own Content-Type with the
|
|
16
|
+
// boundary — leave it unset so fetch fills it in; JSON bodies are stringified.
|
|
17
|
+
const isFormData = opts.body instanceof FormData;
|
|
18
|
+
if (opts.body !== undefined && !isFormData)
|
|
16
19
|
headers['Content-Type'] = 'application/json';
|
|
17
20
|
if (opts.workspace) {
|
|
18
21
|
const cfg = loadConfig();
|
|
@@ -30,7 +33,11 @@ export async function apiRequest(path, opts = {}) {
|
|
|
30
33
|
res = await fetch(`${base}${path}`, {
|
|
31
34
|
method: opts.method ?? 'GET',
|
|
32
35
|
headers,
|
|
33
|
-
body: opts.body
|
|
36
|
+
body: opts.body === undefined
|
|
37
|
+
? undefined
|
|
38
|
+
: isFormData
|
|
39
|
+
? opts.body
|
|
40
|
+
: JSON.stringify(opts.body),
|
|
34
41
|
});
|
|
35
42
|
}
|
|
36
43
|
catch (err) {
|
|
@@ -53,7 +60,7 @@ export async function apiRequest(path, opts = {}) {
|
|
|
53
60
|
return emitError('not_found', describeError(parsed) ?? 'Not found.', ExitCode.NOT_FOUND);
|
|
54
61
|
}
|
|
55
62
|
if (res.status >= 400) {
|
|
56
|
-
return emitError('request_failed', describeError(parsed) ?? `HTTP ${res.status}`,
|
|
63
|
+
return emitError(describeCode(parsed) ?? 'request_failed', describeError(parsed) ?? `HTTP ${res.status}`, exitCodeForStatus(res.status), describeHint(parsed) ?? undefined);
|
|
57
64
|
}
|
|
58
65
|
return parsed;
|
|
59
66
|
}
|
|
@@ -66,21 +73,19 @@ function safeJson(text) {
|
|
|
66
73
|
}
|
|
67
74
|
}
|
|
68
75
|
function describeError(parsed) {
|
|
76
|
+
const detail = detailObject(parsed);
|
|
77
|
+
const responseErr = responseSchemaError(detail);
|
|
78
|
+
if (responseErr?.message)
|
|
79
|
+
return String(responseErr.message);
|
|
80
|
+
if (detail?.message)
|
|
81
|
+
return String(detail.message);
|
|
82
|
+
const err = dispatcherErrorObject(parsed);
|
|
83
|
+
if (err?.message)
|
|
84
|
+
return String(err.message);
|
|
85
|
+
if (err?.code)
|
|
86
|
+
return String(err.code);
|
|
69
87
|
if (parsed && typeof parsed === 'object') {
|
|
70
88
|
const obj = parsed;
|
|
71
|
-
const detail = obj.detail;
|
|
72
|
-
if (detail?.message)
|
|
73
|
-
return String(detail.message);
|
|
74
|
-
// The shared data dispatcher returns { ok: false, error: <string | object> }.
|
|
75
|
-
// Unwrap a nested error object so the user sees the real message, not
|
|
76
|
-
// "[object Object]".
|
|
77
|
-
if (obj.error && typeof obj.error === 'object') {
|
|
78
|
-
const err = obj.error;
|
|
79
|
-
if (err.message)
|
|
80
|
-
return String(err.message);
|
|
81
|
-
if (err.code)
|
|
82
|
-
return String(err.code);
|
|
83
|
-
}
|
|
84
89
|
if (obj.error)
|
|
85
90
|
return String(obj.error);
|
|
86
91
|
if (obj.message)
|
|
@@ -88,4 +93,57 @@ function describeError(parsed) {
|
|
|
88
93
|
}
|
|
89
94
|
return null;
|
|
90
95
|
}
|
|
96
|
+
function describeCode(parsed) {
|
|
97
|
+
const detail = detailObject(parsed);
|
|
98
|
+
const responseErr = responseSchemaError(detail);
|
|
99
|
+
if (responseErr?.code)
|
|
100
|
+
return String(responseErr.code);
|
|
101
|
+
if (detail?.error)
|
|
102
|
+
return String(detail.error);
|
|
103
|
+
if (detail?.code)
|
|
104
|
+
return String(detail.code);
|
|
105
|
+
const err = dispatcherErrorObject(parsed);
|
|
106
|
+
if (err?.code)
|
|
107
|
+
return String(err.code);
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
function describeHint(parsed) {
|
|
111
|
+
const detail = detailObject(parsed);
|
|
112
|
+
const responseErr = responseSchemaError(detail);
|
|
113
|
+
if (responseErr?.hint)
|
|
114
|
+
return String(responseErr.hint);
|
|
115
|
+
if (detail?.hint)
|
|
116
|
+
return String(detail.hint);
|
|
117
|
+
const err = dispatcherErrorObject(parsed);
|
|
118
|
+
if (err?.hint)
|
|
119
|
+
return String(err.hint);
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
function detailObject(parsed) {
|
|
123
|
+
if (!parsed || typeof parsed !== 'object')
|
|
124
|
+
return null;
|
|
125
|
+
const detail = parsed.detail;
|
|
126
|
+
return detail && typeof detail === 'object' ? detail : null;
|
|
127
|
+
}
|
|
128
|
+
function dispatcherErrorObject(parsed) {
|
|
129
|
+
if (!parsed || typeof parsed !== 'object')
|
|
130
|
+
return null;
|
|
131
|
+
const error = parsed.error;
|
|
132
|
+
return error && typeof error === 'object' ? error : null;
|
|
133
|
+
}
|
|
134
|
+
function responseSchemaError(detail) {
|
|
135
|
+
if (!detail)
|
|
136
|
+
return null;
|
|
137
|
+
const error = detail.error;
|
|
138
|
+
return error && typeof error === 'object' ? error : null;
|
|
139
|
+
}
|
|
140
|
+
function exitCodeForStatus(status) {
|
|
141
|
+
if (status === 400 || status === 422)
|
|
142
|
+
return ExitCode.USAGE;
|
|
143
|
+
if (status === 401 || status === 403)
|
|
144
|
+
return ExitCode.AUTH;
|
|
145
|
+
if (status === 404)
|
|
146
|
+
return ExitCode.NOT_FOUND;
|
|
147
|
+
return ExitCode.RUNTIME;
|
|
148
|
+
}
|
|
91
149
|
//# sourceMappingURL=client.js.map
|
package/dist/http/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"AAAA;gFACgF;AAEhF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,37 +1,69 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/** Soku CLI entry point. */
|
|
3
3
|
import { Command } from 'commander';
|
|
4
|
+
import { registerAdsCommands } from './commands/ads.js';
|
|
4
5
|
import { registerAuthCommands } from './commands/auth.js';
|
|
6
|
+
import { registerAutomationCommands } from './commands/automation.js';
|
|
5
7
|
import { registerBrandCommands } from './commands/brand.js';
|
|
6
8
|
import { registerCallCommand } from './commands/call.js';
|
|
9
|
+
import { registerContextCommands } from './commands/context.js';
|
|
7
10
|
import { registerEgressCommands } from './commands/egress.js';
|
|
11
|
+
import { registerFilesCommands } from './commands/files.js';
|
|
8
12
|
import { registerGeneratedCommands } from './commands/generated.js';
|
|
13
|
+
import { registerMemoryCommands } from './commands/memory.js';
|
|
9
14
|
import { registerOrgCommands } from './commands/org.js';
|
|
10
15
|
import { registerResourceCommands } from './commands/resources.js';
|
|
11
16
|
import { registerReviewCommands } from './commands/review.js';
|
|
17
|
+
import { registerSeoHostingCommands } from './commands/seo-hosting.js';
|
|
12
18
|
import { registerSkillCommand } from './commands/skill.js';
|
|
19
|
+
import { maybeAutoUpdateCli, maybeAutoUpdateSkills, registerUpdateCommand } from './commands/update.js';
|
|
20
|
+
import { registerWorkspaceCommands } from './commands/workspace.js';
|
|
13
21
|
import { maybeNotifyUpdate, registerUpdateCheckCommand } from './update-check.js';
|
|
14
22
|
import { emitError, ExitCode } from './output/envelope.js';
|
|
15
23
|
import { CLI_VERSION } from './version.js';
|
|
16
24
|
const program = new Command();
|
|
17
25
|
program
|
|
18
26
|
.name('soku')
|
|
19
|
-
.description('Call Soku ads/GA4 data capabilities from any AI agent or shell.')
|
|
27
|
+
.description('Call Soku ads/GA4/PostHog data capabilities from any AI agent or shell.')
|
|
20
28
|
.version(CLI_VERSION);
|
|
21
29
|
registerAuthCommands(program);
|
|
30
|
+
registerAutomationCommands(program);
|
|
22
31
|
registerOrgCommands(program);
|
|
23
32
|
registerBrandCommands(program);
|
|
33
|
+
registerWorkspaceCommands(program);
|
|
24
34
|
registerResourceCommands(program);
|
|
35
|
+
registerMemoryCommands(program);
|
|
25
36
|
registerGeneratedCommands(program);
|
|
37
|
+
registerAdsCommands(program);
|
|
26
38
|
registerCallCommand(program);
|
|
27
39
|
registerEgressCommands(program);
|
|
28
40
|
registerReviewCommands(program);
|
|
41
|
+
registerSeoHostingCommands(program);
|
|
42
|
+
registerContextCommands(program);
|
|
43
|
+
registerFilesCommands(program);
|
|
29
44
|
registerSkillCommand(program);
|
|
45
|
+
registerUpdateCommand(program);
|
|
30
46
|
registerUpdateCheckCommand(program);
|
|
47
|
+
function commandNames(command) {
|
|
48
|
+
const names = new Set();
|
|
49
|
+
let current = command;
|
|
50
|
+
while (current) {
|
|
51
|
+
names.add(current.name());
|
|
52
|
+
current = current.parent ?? null;
|
|
53
|
+
}
|
|
54
|
+
return names;
|
|
55
|
+
}
|
|
31
56
|
program.hook('preAction', async (_thisCommand, actionCommand) => {
|
|
32
|
-
|
|
57
|
+
const names = commandNames(actionCommand);
|
|
58
|
+
if (names.has('update-check') || names.has('update'))
|
|
33
59
|
return;
|
|
34
|
-
await
|
|
60
|
+
await maybeAutoUpdateCli();
|
|
61
|
+
if (process.env.SOKU_AUTO_UPDATE_CLI !== '1') {
|
|
62
|
+
await maybeNotifyUpdate();
|
|
63
|
+
}
|
|
64
|
+
if (names.has('skill'))
|
|
65
|
+
return;
|
|
66
|
+
await maybeAutoUpdateSkills();
|
|
35
67
|
});
|
|
36
68
|
program.parseAsync(process.argv).catch((err) => {
|
|
37
69
|
emitError('unexpected', err instanceof Error ? err.message : String(err), ExitCode.RUNTIME);
|
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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,12 +34,17 @@ export interface Column {
|
|
|
34
34
|
}
|
|
35
35
|
/** Render an aligned text table from a list of row objects. */
|
|
36
36
|
export declare function table(rows: Array<Record<string, unknown>>, columns: Column[]): string;
|
|
37
|
+
export declare function renderHumanData(data: unknown): string;
|
|
37
38
|
/** Print a success result and exit 0.
|
|
38
39
|
*
|
|
39
40
|
* @param data machine-readable payload (always used for the JSON/agent path)
|
|
40
41
|
* @param human optional renderer for the TTY view; receives `data`
|
|
41
42
|
*/
|
|
42
43
|
export declare function emitSuccess<T>(data: T, human?: (data: T) => string): never;
|
|
44
|
+
/** Like {@link emitSuccess} but exits with an explicit code. Batch commands that
|
|
45
|
+
* finish with partial failures emit a success-shaped summary (callers still want
|
|
46
|
+
* the JSON results) but exit non-zero so scripts can detect the failures. */
|
|
47
|
+
export declare function emitSuccessExit<T>(data: T, code: ExitCodeValue, human?: (data: T) => string): never;
|
|
43
48
|
/** Print a structured error to stderr and exit with the given code. */
|
|
44
49
|
export declare function emitError(type: string, message: string, code?: ExitCodeValue, hint?: string): never;
|
|
45
50
|
//# sourceMappingURL=envelope.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/output/envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,QAAQ;;;;;;CAMX,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAA;AAEpE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAMD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAAkB,CAAA;AAChD,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAAkB,CAAA;AAC/C,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,WAAmB,CAAA;AAClD,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAAmB,CAAA;AAChD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAAmB,CAAA;AAEjD,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf;
|
|
1
|
+
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/output/envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAO,MAAM,QAAQ;;;;;;CAMX,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAA;AAEpE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAMD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAAkB,CAAA;AAChD,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAAkB,CAAA;AAC/C,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,WAAmB,CAAA;AAClD,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,WAAmB,CAAA;AAChD,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,WAAmB,CAAA;AAEjD,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf;AAeD,+DAA+D;AAC/D,wBAAgB,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAcrF;AAyFD,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAErD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,KAAK,CAE1E;AAED;;6EAE6E;AAC7E,wBAAgB,eAAe,CAAC,CAAC,EAC/B,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,aAAa,EACnB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAC1B,KAAK,CASP;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,aAAgC,EACtC,IAAI,CAAC,EAAE,MAAM,GACZ,KAAK,CAaP"}
|
package/dist/output/envelope.js
CHANGED
|
@@ -49,12 +49,111 @@ export function table(rows, columns) {
|
|
|
49
49
|
const body = rows.map((r) => line(columns.map((c) => cell(r, c.key)))).join('\n');
|
|
50
50
|
return `${header}\n${body}`;
|
|
51
51
|
}
|
|
52
|
+
function isRecord(value) {
|
|
53
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
54
|
+
}
|
|
55
|
+
function isRecordList(value) {
|
|
56
|
+
return value.every(isRecord);
|
|
57
|
+
}
|
|
58
|
+
function humanizeKey(key) {
|
|
59
|
+
return key.replace(/[_-]+/g, ' ').replace(/\b[a-z]/g, (c) => c.toUpperCase());
|
|
60
|
+
}
|
|
61
|
+
function compactValue(value) {
|
|
62
|
+
if (value === null || value === undefined)
|
|
63
|
+
return '';
|
|
64
|
+
if (typeof value === 'string')
|
|
65
|
+
return value;
|
|
66
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
67
|
+
return String(value);
|
|
68
|
+
if (Array.isArray(value)) {
|
|
69
|
+
if (value.length === 0)
|
|
70
|
+
return dim('(none)');
|
|
71
|
+
if (value.every((item) => !isRecord(item) && !Array.isArray(item))) {
|
|
72
|
+
return value.map(compactValue).join(', ');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return JSON.stringify(value);
|
|
76
|
+
}
|
|
77
|
+
function indent(text) {
|
|
78
|
+
return text
|
|
79
|
+
.split('\n')
|
|
80
|
+
.map((line) => ` ${line}`)
|
|
81
|
+
.join('\n');
|
|
82
|
+
}
|
|
83
|
+
function recordColumns(rows) {
|
|
84
|
+
const keys = [];
|
|
85
|
+
for (const row of rows) {
|
|
86
|
+
for (const key of Object.keys(row)) {
|
|
87
|
+
if (!keys.includes(key))
|
|
88
|
+
keys.push(key);
|
|
89
|
+
if (keys.length >= 6)
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
if (keys.length >= 6)
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
return keys.map((key) => ({ key, header: humanizeKey(key).toUpperCase() }));
|
|
96
|
+
}
|
|
97
|
+
function renderRecordList(rows) {
|
|
98
|
+
if (rows.length === 0)
|
|
99
|
+
return dim('(none)');
|
|
100
|
+
const columns = recordColumns(rows);
|
|
101
|
+
const printableRows = rows.map((row) => Object.fromEntries(columns.map((column) => [column.key, compactValue(row[column.key])])));
|
|
102
|
+
return table(printableRows, columns);
|
|
103
|
+
}
|
|
104
|
+
function renderValue(value) {
|
|
105
|
+
if (value === null || value === undefined)
|
|
106
|
+
return dim('(no data)');
|
|
107
|
+
if (typeof value === 'string')
|
|
108
|
+
return value;
|
|
109
|
+
if (typeof value === 'number' || typeof value === 'boolean')
|
|
110
|
+
return String(value);
|
|
111
|
+
if (Array.isArray(value)) {
|
|
112
|
+
if (value.length === 0)
|
|
113
|
+
return dim('(none)');
|
|
114
|
+
if (isRecordList(value))
|
|
115
|
+
return renderRecordList(value);
|
|
116
|
+
return value.map((item) => `- ${compactValue(item)}`).join('\n');
|
|
117
|
+
}
|
|
118
|
+
if (isRecord(value))
|
|
119
|
+
return renderRecord(value);
|
|
120
|
+
return String(value);
|
|
121
|
+
}
|
|
122
|
+
function renderRecord(record) {
|
|
123
|
+
const entries = Object.entries(record);
|
|
124
|
+
if (entries.length === 0)
|
|
125
|
+
return dim('(empty)');
|
|
126
|
+
return entries
|
|
127
|
+
.map(([key, value]) => {
|
|
128
|
+
const label = bold(humanizeKey(key));
|
|
129
|
+
if (Array.isArray(value) && isRecordList(value)) {
|
|
130
|
+
return `${label}\n${indent(renderRecordList(value))}`;
|
|
131
|
+
}
|
|
132
|
+
if (isRecord(value)) {
|
|
133
|
+
return `${label}\n${indent(renderRecord(value))}`;
|
|
134
|
+
}
|
|
135
|
+
if (Array.isArray(value) && value.length > 0 && !value.every((item) => !isRecord(item) && !Array.isArray(item))) {
|
|
136
|
+
return `${label}\n${indent(renderValue(value))}`;
|
|
137
|
+
}
|
|
138
|
+
return `${label}: ${compactValue(value)}`;
|
|
139
|
+
})
|
|
140
|
+
.join('\n');
|
|
141
|
+
}
|
|
142
|
+
export function renderHumanData(data) {
|
|
143
|
+
return renderValue(data);
|
|
144
|
+
}
|
|
52
145
|
/** Print a success result and exit 0.
|
|
53
146
|
*
|
|
54
147
|
* @param data machine-readable payload (always used for the JSON/agent path)
|
|
55
148
|
* @param human optional renderer for the TTY view; receives `data`
|
|
56
149
|
*/
|
|
57
150
|
export function emitSuccess(data, human) {
|
|
151
|
+
return emitSuccessExit(data, ExitCode.OK, human);
|
|
152
|
+
}
|
|
153
|
+
/** Like {@link emitSuccess} but exits with an explicit code. Batch commands that
|
|
154
|
+
* finish with partial failures emit a success-shaped summary (callers still want
|
|
155
|
+
* the JSON results) but exit non-zero so scripts can detect the failures. */
|
|
156
|
+
export function emitSuccessExit(data, code, human) {
|
|
58
157
|
if (!isTty()) {
|
|
59
158
|
process.stdout.write(`${JSON.stringify({ ok: true, data })}\n`);
|
|
60
159
|
}
|
|
@@ -62,9 +161,9 @@ export function emitSuccess(data, human) {
|
|
|
62
161
|
process.stdout.write(`${human(data)}\n`);
|
|
63
162
|
}
|
|
64
163
|
else {
|
|
65
|
-
process.stdout.write(`${
|
|
164
|
+
process.stdout.write(`${renderHumanData(data)}\n`);
|
|
66
165
|
}
|
|
67
|
-
process.exit(
|
|
166
|
+
process.exit(code);
|
|
68
167
|
}
|
|
69
168
|
/** Print a structured error to stderr and exit with the given code. */
|
|
70
169
|
export function emitError(type, message, code = ExitCode.RUNTIME, hint) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/output/envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,EAAE,EAAE,CAAC;IACL,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;CACF,CAAA;AAaV,MAAM,UAAU,KAAK;IACnB,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACtC,CAAC;AAED,+EAA+E;AAC/E,SAAS,KAAK,CAAC,IAAY,EAAE,IAAY;IACvC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;AACvD,CAAC;AACD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAChD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AAClD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AAChD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/output/envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,EAAE,EAAE,CAAC;IACL,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;CACF,CAAA;AAaV,MAAM,UAAU,KAAK;IACnB,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACtC,CAAC;AAED,+EAA+E;AAC/E,SAAS,KAAK,CAAC,IAAY,EAAE,IAAY;IACvC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA;AACvD,CAAC;AACD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAChD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAC/C,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AAClD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AAChD,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AASjD,4CAA4C;AAC5C,MAAM,OAAO,GAAG,iBAAiB,CAAA;AACjC,4EAA4E;AAC5E,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;AACtC,CAAC;AACD,oEAAoE;AACpE,SAAS,UAAU,CAAC,CAAS,EAAE,KAAa;IAC1C,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,KAAK,CAAC,IAAoC,EAAE,OAAiB;IAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC3C,MAAM,IAAI,GAAG,CAAC,CAA0B,EAAE,CAAS,EAAU,EAAE;QAC7D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACd,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACvD,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAC1E,CAAA;IACD,MAAM,IAAI,GAAG,CAAC,KAAe,EAAU,EAAE,CACvC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjF,OAAO,GAAG,MAAM,KAAK,IAAI,EAAE,CAAA;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,YAAY,CAAC,KAAgB;IACpC,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACjF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5C,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACnE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED,SAAS,MAAM,CAAC,IAAY;IAC1B,OAAO,IAAI;SACR,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED,SAAS,aAAa,CAAC,IAAmB;IACxC,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;gBAAE,MAAK;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;YAAE,MAAK;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAmB;IAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACnC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACrC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CACzF,CAAA;IACD,OAAO,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;AACtC,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,WAAW,CAAC,CAAA;IAClE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACjF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5C,IAAI,YAAY,CAAC,KAAK,CAAC;YAAE,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACvD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClE,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC,KAAK,CAAC,CAAA;IAC/C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC;AAED,SAAS,YAAY,CAAC,MAAmB;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,SAAS,CAAC,CAAA;IAE/C,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;QACvD,CAAC;QACD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;QACnD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAChH,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;QAClD,CAAC;QACD,OAAO,GAAG,KAAK,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,CAAA;IAC3C,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAa;IAC3C,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAI,IAAO,EAAE,KAA2B;IACjE,OAAO,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;AAClD,CAAC;AAED;;6EAE6E;AAC7E,MAAM,UAAU,eAAe,CAC7B,IAAO,EACP,IAAmB,EACnB,KAA2B;IAE3B,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAA;IACjE,CAAC;SAAM,IAAI,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACpB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,SAAS,CACvB,IAAY,EACZ,OAAe,EACf,OAAsB,QAAQ,CAAC,OAAO,EACtC,IAAa;IAEb,IAAI,KAAK,EAAE,EAAE,CAAC;QACZ,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAA;QAClC,IAAI,IAAI;YAAE,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,CAAA;QACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAkB;YAC9B,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;SACpD,CAAA;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACvD,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACpB,CAAC"}
|
|
@@ -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.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASnC,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,YAAY;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;IACxB,GAAG,CAAC,EAAE,IAAI,CAAA;CACX;AA0CD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAyBD,wBAAsB,cAAc,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkBxF;AAQD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAavD;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8BjE"}
|
package/dist/update-check.js
CHANGED
|
@@ -1,34 +1,8 @@
|
|
|
1
|
-
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
-
import { dirname, join } from 'node:path';
|
|
3
|
-
import { configDir } from './config.js';
|
|
4
1
|
import { cyan, dim, emitError, emitSuccess, ExitCode } from './output/envelope.js';
|
|
5
2
|
import { CLI_PACKAGE_NAME, CLI_VERSION } from './version.js';
|
|
6
3
|
const DEFAULT_REGISTRY_URL = 'https://registry.npmjs.org';
|
|
7
4
|
const INSTALL_COMMAND = `npm i -g ${CLI_PACKAGE_NAME}`;
|
|
8
|
-
const CACHE_TTL_MS = 24 * 60 * 60 * 1000;
|
|
9
5
|
const REQUEST_TIMEOUT_MS = 2500;
|
|
10
|
-
function cachePath() {
|
|
11
|
-
return join(configDir(), 'update-check.json');
|
|
12
|
-
}
|
|
13
|
-
function readCache(now) {
|
|
14
|
-
try {
|
|
15
|
-
const cache = JSON.parse(readFileSync(cachePath(), 'utf8'));
|
|
16
|
-
const checkedAt = new Date(cache.checked_at).getTime();
|
|
17
|
-
if (!Number.isFinite(checkedAt))
|
|
18
|
-
return null;
|
|
19
|
-
if (now.getTime() - checkedAt > CACHE_TTL_MS)
|
|
20
|
-
return null;
|
|
21
|
-
return cache;
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function writeCache(cache) {
|
|
28
|
-
const path = cachePath();
|
|
29
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
30
|
-
writeFileSync(path, `${JSON.stringify(cache, null, 2)}\n`, { mode: 0o600 });
|
|
31
|
-
}
|
|
32
6
|
function parseVersionParts(version) {
|
|
33
7
|
const core = version.split('-', 1)[0] ?? '';
|
|
34
8
|
return core.split('.').map((part) => {
|
|
@@ -90,7 +64,8 @@ async function fetchLatestVersion(registryUrl, fetchImpl) {
|
|
|
90
64
|
const controller = new AbortController();
|
|
91
65
|
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
92
66
|
try {
|
|
93
|
-
const
|
|
67
|
+
const packagePath = encodeURIComponent(CLI_PACKAGE_NAME);
|
|
68
|
+
const res = await fetchImpl(`${registryUrl.replace(/\/$/, '')}/${packagePath}/latest`, {
|
|
94
69
|
signal: controller.signal,
|
|
95
70
|
headers: { Accept: 'application/json' },
|
|
96
71
|
});
|
|
@@ -113,29 +88,8 @@ export async function checkForUpdate(opts = {}) {
|
|
|
113
88
|
const currentVersion = opts.currentVersion ?? CLI_VERSION;
|
|
114
89
|
const registryUrl = (opts.registryUrl ?? DEFAULT_REGISTRY_URL).replace(/\/$/, '');
|
|
115
90
|
const now = opts.now ?? new Date();
|
|
116
|
-
if (opts.useCache !== false) {
|
|
117
|
-
const cache = readCache(now);
|
|
118
|
-
if (cache) {
|
|
119
|
-
const latestVersion = cache.latest_version;
|
|
120
|
-
return {
|
|
121
|
-
packageName: CLI_PACKAGE_NAME,
|
|
122
|
-
currentVersion,
|
|
123
|
-
latestVersion,
|
|
124
|
-
published: !cache.package_unpublished,
|
|
125
|
-
updateAvailable: latestVersion !== null && compareSemverish(latestVersion, currentVersion) > 0,
|
|
126
|
-
installCommand: INSTALL_COMMAND,
|
|
127
|
-
checkedAt: cache.checked_at,
|
|
128
|
-
registryUrl,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
91
|
const latestVersion = await fetchLatestVersion(registryUrl, opts.fetchImpl ?? fetch);
|
|
133
92
|
const checkedAt = now.toISOString();
|
|
134
|
-
writeCache({
|
|
135
|
-
checked_at: checkedAt,
|
|
136
|
-
latest_version: latestVersion,
|
|
137
|
-
...(latestVersion === null ? { package_unpublished: true } : {}),
|
|
138
|
-
});
|
|
139
93
|
return {
|
|
140
94
|
packageName: CLI_PACKAGE_NAME,
|
|
141
95
|
currentVersion,
|
|
@@ -148,8 +102,6 @@ export async function checkForUpdate(opts = {}) {
|
|
|
148
102
|
};
|
|
149
103
|
}
|
|
150
104
|
function shouldSkipNotice() {
|
|
151
|
-
if (!process.stderr.isTTY)
|
|
152
|
-
return true;
|
|
153
105
|
if (process.env.CI)
|
|
154
106
|
return true;
|
|
155
107
|
if (process.env.SOKU_NO_UPDATE_CHECK === '1')
|
|
@@ -164,7 +116,7 @@ export async function maybeNotifyUpdate() {
|
|
|
164
116
|
if (!result.updateAvailable || !result.latestVersion)
|
|
165
117
|
return;
|
|
166
118
|
process.stderr.write(`${dim('Update available:')} ${CLI_PACKAGE_NAME} ${result.currentVersion} -> ${result.latestVersion}\n` +
|
|
167
|
-
`${dim('Run')} ${cyan(
|
|
119
|
+
`${dim('Run')} ${cyan('soku update cli')}\n`);
|
|
168
120
|
}
|
|
169
121
|
catch {
|
|
170
122
|
// Update checks are advisory. Never fail the user command because npm is
|
|
@@ -173,14 +125,13 @@ export async function maybeNotifyUpdate() {
|
|
|
173
125
|
}
|
|
174
126
|
export function registerUpdateCheckCommand(program) {
|
|
175
127
|
program
|
|
176
|
-
.command('update-check')
|
|
177
|
-
.description('
|
|
128
|
+
.command('update-check', { hidden: true })
|
|
129
|
+
.description('Legacy alias for `soku update status`')
|
|
178
130
|
.option('--registry-url <url>', 'Override the npm registry URL')
|
|
179
131
|
.action(async (opts) => {
|
|
180
132
|
try {
|
|
181
133
|
const result = await checkForUpdate({
|
|
182
134
|
registryUrl: opts.registryUrl,
|
|
183
|
-
useCache: false,
|
|
184
135
|
});
|
|
185
136
|
emitSuccess(result, (d) => {
|
|
186
137
|
if (!d.published) {
|
|
@@ -192,7 +143,7 @@ export function registerUpdateCheckCommand(program) {
|
|
|
192
143
|
return `${CLI_PACKAGE_NAME} is up to date (${d.currentVersion}).`;
|
|
193
144
|
return [
|
|
194
145
|
`${CLI_PACKAGE_NAME} ${d.currentVersion} -> ${d.latestVersion}`,
|
|
195
|
-
`${dim('Run')} ${cyan(
|
|
146
|
+
`${dim('Run')} ${cyan('soku update cli')}`,
|
|
196
147
|
].join('\n');
|
|
197
148
|
});
|
|
198
149
|
}
|