@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
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA4DnC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2E7D"}
|
package/dist/commands/review.js
CHANGED
|
@@ -8,14 +8,48 @@ import { cyan, dim, emitSuccess, green, red, table } from '../output/envelope.js
|
|
|
8
8
|
function statusMark(status) {
|
|
9
9
|
if (status === 'approved')
|
|
10
10
|
return green('approved');
|
|
11
|
+
if (status === 'executing')
|
|
12
|
+
return cyan('executing');
|
|
11
13
|
if (status === 'failed' || status === 'rejected')
|
|
12
14
|
return red(status);
|
|
13
15
|
return dim(status);
|
|
14
16
|
}
|
|
17
|
+
function statusIcon(status) {
|
|
18
|
+
if (status === 'approved')
|
|
19
|
+
return green('✓');
|
|
20
|
+
if (status === 'executing')
|
|
21
|
+
return cyan('…');
|
|
22
|
+
return red('✖');
|
|
23
|
+
}
|
|
15
24
|
function truncate(text, max) {
|
|
16
25
|
const one = (text ?? '').replace(/\s+/g, ' ').trim();
|
|
17
26
|
return one.length > max ? `${one.slice(0, max - 1)}…` : one;
|
|
18
27
|
}
|
|
28
|
+
/** Pull a one-line error message out of a review's result/error blobs (which
|
|
29
|
+
* arrive in several shapes across platforms). Empty string when there's no
|
|
30
|
+
* actionable error to show. */
|
|
31
|
+
function describeReviewError(review) {
|
|
32
|
+
const fromError = (e) => {
|
|
33
|
+
if (!e)
|
|
34
|
+
return '';
|
|
35
|
+
if (typeof e === 'string')
|
|
36
|
+
return e;
|
|
37
|
+
if (typeof e === 'object') {
|
|
38
|
+
const obj = e;
|
|
39
|
+
const msg = obj.error ?? obj.message;
|
|
40
|
+
if (typeof msg === 'string')
|
|
41
|
+
return msg;
|
|
42
|
+
}
|
|
43
|
+
return JSON.stringify(e);
|
|
44
|
+
};
|
|
45
|
+
// The dispatcher wraps the platform error under result.error / result.raw.error,
|
|
46
|
+
// or surfaces it directly under review.error. Prefer the most specific message.
|
|
47
|
+
const result = review.result;
|
|
48
|
+
const candidate = fromError(result?.error) ||
|
|
49
|
+
fromError(result?.raw?.error) ||
|
|
50
|
+
fromError(review.error);
|
|
51
|
+
return candidate ? truncate(candidate, 240) : '';
|
|
52
|
+
}
|
|
19
53
|
export function registerReviewCommands(program) {
|
|
20
54
|
const review = program
|
|
21
55
|
.command('review')
|
|
@@ -49,14 +83,24 @@ export function registerReviewCommands(program) {
|
|
|
49
83
|
});
|
|
50
84
|
review
|
|
51
85
|
.command('approve <id>')
|
|
52
|
-
.description('Approve a review —
|
|
86
|
+
.description('Approve a review — executes or queues the write action')
|
|
53
87
|
.action(async (id) => {
|
|
54
88
|
const r = await apiRequest(`/api/cli/reviews/${encodeURIComponent(id)}/respond`, {
|
|
55
89
|
method: 'POST',
|
|
56
90
|
body: { decision: 'approve' },
|
|
57
91
|
workspace: true,
|
|
58
92
|
});
|
|
59
|
-
emitSuccess(r, (d) =>
|
|
93
|
+
emitSuccess(r, (d) => {
|
|
94
|
+
const head = `${statusIcon(d.status)} ${statusMark(d.status)}: ${cyan(`${d.namespace}/${d.action}`)}`;
|
|
95
|
+
if (d.status === 'executing') {
|
|
96
|
+
const task = d.execution_task_id ?? '(queued)';
|
|
97
|
+
return `${head}\n ${dim('task')} ${task}\n ${dim('Poll with:')} soku review show ${d.id}`;
|
|
98
|
+
}
|
|
99
|
+
// When execution failed (e.g. missing creative, CBO budget rule), surface the
|
|
100
|
+
// error inline so the user can correct and retry without a separate `review show`.
|
|
101
|
+
const errMsg = describeReviewError(d);
|
|
102
|
+
return errMsg ? `${head}\n ${red('error')} ${errMsg}` : head;
|
|
103
|
+
});
|
|
60
104
|
});
|
|
61
105
|
review
|
|
62
106
|
.command('deny <id>')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/commands/review.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAejF,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC,UAAU,CAAC,CAAA;IACnD,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC,WAAW,CAAC,CAAA;IACpD,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAA;IACpE,OAAO,GAAG,CAAC,MAAM,CAAC,CAAA;AACpB,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,MAAM,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5C,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAA;IAC5C,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAW;IACzC,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IACpD,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;AAC7D,CAAC;AAED;;+BAE+B;AAC/B,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,SAAS,GAAG,CAAC,CAAU,EAAU,EAAE;QACvC,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAA;QACjB,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,CAAA;QACnC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,CAA4B,CAAA;YACxC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAA;YACpC,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAA;QACzC,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC,CAAA;IACD,iFAAiF;IACjF,gFAAgF;IAChF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAoD,CAAA;IAC1E,MAAM,SAAS,GACb,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC;QACxB,SAAS,CAAE,MAAM,EAAE,GAA2C,EAAE,KAAK,CAAC;QACtE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACzB,OAAO,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,+CAA+C,CAAC,CAAA;IAE/D,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,sDAAsD,CAAC;SACnE,MAAM,CAAC,mBAAmB,EAAE,4DAA4D,CAAC;SACzF,MAAM,CAAC,KAAK,EAAE,IAAyB,EAAE,EAAE;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACzE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAuC,mBAAmB,CAAC,EAAE,EAAE;YAC1F,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QACF,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CACtB,KAAK,CACH,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,MAAM,EAAE,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE;YACpC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;YAC5B,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;SACjC,CAAC,CAAC,EACH;YACE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;YAC3B,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;YACnC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;YACnC,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;SACtC,CACF,CACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEJ,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,0DAA0D,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,WAAW,CACT,MAAM,UAAU,CAAC,oBAAoB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CACpF,CAAA;IACH,CAAC,CAAC,CAAA;IAEJ,MAAM;SACH,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,CAAC,GAAG,MAAM,UAAU,CAAS,oBAAoB,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE;YACvF,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE;YAC7B,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QACF,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YACnB,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAA;YACrG,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,iBAAiB,IAAI,UAAU,CAAA;gBAC9C,OAAO,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC,EAAE,EAAE,CAAA;YAC7F,CAAC;YACD,8EAA8E;YAC9E,mFAAmF;YACnF,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;YACrC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QAC/D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEJ,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,8CAA8C,CAAC;SAC3D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC;SACnD,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAA2B,EAAE,EAAE;QACxD,MAAM,CAAC,GAAG,MAAM,UAAU,CAAS,oBAAoB,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE;YACvF,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACrD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAA;QACF,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/** `soku seo-hosting` — manage file-based SEO Hosting pages and domain connections. */
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
export interface DomainConnection {
|
|
4
|
+
id: string;
|
|
5
|
+
brand_id: string;
|
|
6
|
+
hostname: string;
|
|
7
|
+
method: string;
|
|
8
|
+
expected_cname_target?: string | null;
|
|
9
|
+
origin_hostname?: string | null;
|
|
10
|
+
status: string;
|
|
11
|
+
ssl_status: string;
|
|
12
|
+
mounted_sections?: string[] | null;
|
|
13
|
+
last_verified_at?: string | null;
|
|
14
|
+
last_checked_at?: string | null;
|
|
15
|
+
last_error?: string | null;
|
|
16
|
+
created_at?: string | null;
|
|
17
|
+
cf_verification_data?: Record<string, unknown> | null;
|
|
18
|
+
}
|
|
19
|
+
interface HostingStatusDomain {
|
|
20
|
+
hostname: string;
|
|
21
|
+
method: string;
|
|
22
|
+
status: string;
|
|
23
|
+
live: boolean;
|
|
24
|
+
url_contract: string;
|
|
25
|
+
served_sections: string[];
|
|
26
|
+
public_base_url: string;
|
|
27
|
+
}
|
|
28
|
+
interface HostingStatusResponse {
|
|
29
|
+
domains: HostingStatusDomain[];
|
|
30
|
+
allowed_sections: string[];
|
|
31
|
+
asset_cdn_base_url: string;
|
|
32
|
+
workspace_dir: string;
|
|
33
|
+
note: string;
|
|
34
|
+
}
|
|
35
|
+
/** A file-based SEO page (no markdown body — the document IS the HTML file). */
|
|
36
|
+
interface SeoHostingPage {
|
|
37
|
+
section: string;
|
|
38
|
+
slug: string;
|
|
39
|
+
title: string;
|
|
40
|
+
description?: string | null;
|
|
41
|
+
status: string;
|
|
42
|
+
template?: string | null;
|
|
43
|
+
url_path: string;
|
|
44
|
+
published_at?: string | null;
|
|
45
|
+
updated_at?: string | null;
|
|
46
|
+
public_url?: string | null;
|
|
47
|
+
served?: boolean;
|
|
48
|
+
/** Advisory dead-internal-link warnings from publish (do not block publishing). */
|
|
49
|
+
link_warnings?: string[];
|
|
50
|
+
}
|
|
51
|
+
interface AssetUploadResponse {
|
|
52
|
+
url: string;
|
|
53
|
+
path: string;
|
|
54
|
+
size_bytes: number;
|
|
55
|
+
}
|
|
56
|
+
export interface WorkerProbeResponse {
|
|
57
|
+
is_cloudflare: boolean;
|
|
58
|
+
conflicts: string[];
|
|
59
|
+
serves_next_assets: boolean;
|
|
60
|
+
is_vercel: boolean;
|
|
61
|
+
}
|
|
62
|
+
interface WorkerRiskOptions {
|
|
63
|
+
acceptConflicts?: boolean;
|
|
64
|
+
acceptNextAssetsWarning?: boolean;
|
|
65
|
+
}
|
|
66
|
+
interface CloudflareTokenOptions {
|
|
67
|
+
cfTokenEnv?: string;
|
|
68
|
+
cfTokenStdin?: boolean;
|
|
69
|
+
}
|
|
70
|
+
interface HtmlBodyOptions {
|
|
71
|
+
html?: string;
|
|
72
|
+
htmlFile?: string;
|
|
73
|
+
htmlStdin?: boolean;
|
|
74
|
+
}
|
|
75
|
+
interface PagePutOptions extends HtmlBodyOptions {
|
|
76
|
+
section: string;
|
|
77
|
+
slug: string;
|
|
78
|
+
title: string;
|
|
79
|
+
description?: string;
|
|
80
|
+
template?: string;
|
|
81
|
+
seo?: string;
|
|
82
|
+
}
|
|
83
|
+
export declare class SeoHostingUsageError extends Error {
|
|
84
|
+
readonly hint?: string | undefined;
|
|
85
|
+
constructor(message: string, hint?: string | undefined);
|
|
86
|
+
}
|
|
87
|
+
export declare function domainConnectionPath(connectionId?: string, suffix?: string): string;
|
|
88
|
+
export declare function seoHostingCallPath(action: string): string;
|
|
89
|
+
export declare function parseSections(raw?: string): string[];
|
|
90
|
+
export declare function validateCloudflareTokenOptions(opts: CloudflareTokenOptions): void;
|
|
91
|
+
export declare function readCloudflareToken(opts: CloudflareTokenOptions): Promise<string>;
|
|
92
|
+
export declare function workerProbeBlocker(probe: WorkerProbeResponse, opts: WorkerRiskOptions): SeoHostingUsageError | null;
|
|
93
|
+
export declare function callSeoHostingAction<T>(action: string, payload?: Record<string, unknown>): Promise<T>;
|
|
94
|
+
export declare function parseSeoOverride(raw?: string): Record<string, unknown> | undefined;
|
|
95
|
+
/** Read the page HTML from exactly one of --html / --html-file / --html-stdin. */
|
|
96
|
+
export declare function readHtmlBody(opts: HtmlBodyOptions): Promise<string>;
|
|
97
|
+
export declare function buildPagePutPayload(opts: PagePutOptions): Promise<Record<string, unknown>>;
|
|
98
|
+
export declare function renderHostingStatus(status: HostingStatusResponse): string;
|
|
99
|
+
export declare function renderPages(items: SeoHostingPage[]): string;
|
|
100
|
+
export declare function renderPage(page: SeoHostingPage): string;
|
|
101
|
+
export declare function renderAssetUpload(asset: AssetUploadResponse): string;
|
|
102
|
+
export declare function renderConnections(items: DomainConnection[]): string;
|
|
103
|
+
export declare function renderConnection(connection: DomainConnection): string;
|
|
104
|
+
export declare function renderWorkerProbe(probe: WorkerProbeResponse): string;
|
|
105
|
+
export declare function registerSeoHostingCommands(program: Command): void;
|
|
106
|
+
export {};
|
|
107
|
+
//# sourceMappingURL=seo-hosting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo-hosting.d.ts","sourceRoot":"","sources":["../../src/commands/seo-hosting.ts"],"names":[],"mappings":"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"}
|