@soku-ai/cli 0.1.0-alpha.1 → 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 +4 -54
- 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,345 @@
|
|
|
1
|
+
/** `soku update` — keep the CLI and locally installed Soku skills fresh. */
|
|
2
|
+
import { spawn, spawnSync } from 'node:child_process';
|
|
3
|
+
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { configDir, resolveSkillsBaseUrl } from '../config.js';
|
|
6
|
+
import { cyan, dim, emitError, emitSuccess, ExitCode, green, table } from '../output/envelope.js';
|
|
7
|
+
import { checkForUpdate } from '../update-check.js';
|
|
8
|
+
import { agentSkillName, baseDirFor, fetchIndex, installBusinessSkill, installMetaSoku, loadManifest, manifestPath, parseAgents, SOKU_META, } from './skill.js';
|
|
9
|
+
const DEFAULT_AUTO_UPDATE_INTERVAL_HOURS = 24;
|
|
10
|
+
const AUTO_UPDATE_LOCK_TTL_MS = 10 * 60 * 1000;
|
|
11
|
+
function statePath() {
|
|
12
|
+
return join(configDir(), 'update-state.json');
|
|
13
|
+
}
|
|
14
|
+
function lockPath() {
|
|
15
|
+
return join(configDir(), 'update.lock');
|
|
16
|
+
}
|
|
17
|
+
function readUpdateState() {
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse(readFileSync(statePath(), 'utf8'));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function writeUpdateState(state) {
|
|
26
|
+
const path = statePath();
|
|
27
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
28
|
+
writeFileSync(path, `${JSON.stringify(state, null, 2)}\n`, { mode: 0o600 });
|
|
29
|
+
}
|
|
30
|
+
function parseIntervalHours(value) {
|
|
31
|
+
if (!value)
|
|
32
|
+
return DEFAULT_AUTO_UPDATE_INTERVAL_HOURS;
|
|
33
|
+
const parsed = Number(value);
|
|
34
|
+
return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_AUTO_UPDATE_INTERVAL_HOURS;
|
|
35
|
+
}
|
|
36
|
+
export function isAutoUpdateDue(lastRunAt, now, intervalHours) {
|
|
37
|
+
if (!lastRunAt)
|
|
38
|
+
return true;
|
|
39
|
+
const last = Date.parse(lastRunAt);
|
|
40
|
+
if (!Number.isFinite(last))
|
|
41
|
+
return true;
|
|
42
|
+
return now.getTime() - last >= intervalHours * 60 * 60 * 1000;
|
|
43
|
+
}
|
|
44
|
+
async function withUpdateLock(fn) {
|
|
45
|
+
const path = lockPath();
|
|
46
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
47
|
+
try {
|
|
48
|
+
if (existsSync(path)) {
|
|
49
|
+
const createdAt = Number(readFileSync(path, 'utf8').split('\n', 1)[0]);
|
|
50
|
+
if (Number.isFinite(createdAt) && Date.now() - createdAt > AUTO_UPDATE_LOCK_TTL_MS) {
|
|
51
|
+
rmSync(path, { force: true });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Ignore malformed stale-lock probes; the exclusive open below decides.
|
|
57
|
+
}
|
|
58
|
+
let fd;
|
|
59
|
+
try {
|
|
60
|
+
fd = openSync(path, 'wx', 0o600);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
writeFileSync(fd, `${Date.now()}\n${process.pid}\n`);
|
|
67
|
+
return await fn();
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
closeSync(fd);
|
|
71
|
+
rmSync(path, { force: true });
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function targetLocation(global) {
|
|
75
|
+
return global ? 'global' : 'project';
|
|
76
|
+
}
|
|
77
|
+
function discoverInstalledTargets(agentOpt = 'all', scope = 'all') {
|
|
78
|
+
const agents = parseAgents(agentOpt);
|
|
79
|
+
const targets = [];
|
|
80
|
+
for (const agent of agents) {
|
|
81
|
+
for (const global of [false, true]) {
|
|
82
|
+
if (scope === 'global' && !global)
|
|
83
|
+
continue;
|
|
84
|
+
if (scope === 'project' && global)
|
|
85
|
+
continue;
|
|
86
|
+
const baseDir = baseDirFor(agent, global);
|
|
87
|
+
if (existsSync(manifestPath(baseDir))) {
|
|
88
|
+
targets.push({ agent, global, baseDir });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return targets;
|
|
93
|
+
}
|
|
94
|
+
function fallbackTargets(agentOpt = 'claude', scope = 'global') {
|
|
95
|
+
const agents = parseAgents(agentOpt);
|
|
96
|
+
const global = scope !== 'project';
|
|
97
|
+
return agents.map((agent) => ({ agent, global, baseDir: baseDirFor(agent, global) }));
|
|
98
|
+
}
|
|
99
|
+
function targetsForUpdate(agentOpt, scope) {
|
|
100
|
+
const installed = discoverInstalledTargets(agentOpt, scope);
|
|
101
|
+
return installed.length > 0 ? installed : fallbackTargets(agentOpt, scope);
|
|
102
|
+
}
|
|
103
|
+
function indexBySlug(index) {
|
|
104
|
+
return new Map(index.skills.map((entry) => [entry.slug, entry]));
|
|
105
|
+
}
|
|
106
|
+
export async function updateSkillTarget(target, base, index) {
|
|
107
|
+
const before = loadManifest(target.baseDir);
|
|
108
|
+
const slugs = Object.keys(before).filter((slug) => slug !== SOKU_META);
|
|
109
|
+
const metaUpdated = SOKU_META in before || slugs.length > 0 || existsSync(join(target.baseDir, SOKU_META, 'SKILL.md'));
|
|
110
|
+
if (metaUpdated)
|
|
111
|
+
installMetaSoku(target.baseDir);
|
|
112
|
+
const updated = [];
|
|
113
|
+
const unchanged = [];
|
|
114
|
+
const missing = [];
|
|
115
|
+
if (slugs.length > 0) {
|
|
116
|
+
const catalog = indexBySlug(index ?? (await fetchIndex(base)));
|
|
117
|
+
for (const slug of slugs) {
|
|
118
|
+
const entry = catalog.get(slug);
|
|
119
|
+
if (!entry) {
|
|
120
|
+
missing.push(slug);
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
const current = before[slug];
|
|
124
|
+
if (current?.sha256 === entry.sha256 && current.version === (entry.version ?? null) && current.source === 'catalog') {
|
|
125
|
+
unchanged.push(slug);
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
await installBusinessSkill(target.baseDir, entry, base);
|
|
129
|
+
updated.push(slug);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
agent: target.agent,
|
|
134
|
+
global: target.global,
|
|
135
|
+
baseDir: target.baseDir,
|
|
136
|
+
metaUpdated,
|
|
137
|
+
updated,
|
|
138
|
+
unchanged,
|
|
139
|
+
missing,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
async function updateSkills(opts) {
|
|
143
|
+
const targets = targetsForUpdate(opts.agent, opts.scope);
|
|
144
|
+
const base = resolveSkillsBaseUrl(opts.skillsUrl);
|
|
145
|
+
const needsCatalog = targets.some((target) => Object.keys(loadManifest(target.baseDir)).some((slug) => slug !== SOKU_META));
|
|
146
|
+
const index = needsCatalog ? await fetchIndex(base) : undefined;
|
|
147
|
+
const results = [];
|
|
148
|
+
for (const target of targets) {
|
|
149
|
+
results.push(await updateSkillTarget(target, base, index));
|
|
150
|
+
}
|
|
151
|
+
return results;
|
|
152
|
+
}
|
|
153
|
+
function skillStatusRows(targets, index) {
|
|
154
|
+
const catalog = indexBySlug(index);
|
|
155
|
+
const rows = [];
|
|
156
|
+
for (const target of targets) {
|
|
157
|
+
const manifest = loadManifest(target.baseDir);
|
|
158
|
+
for (const [slug, current] of Object.entries(manifest)) {
|
|
159
|
+
if (slug === SOKU_META) {
|
|
160
|
+
rows.push({
|
|
161
|
+
agent: target.agent,
|
|
162
|
+
location: targetLocation(target.global),
|
|
163
|
+
slug: agentSkillName(slug),
|
|
164
|
+
current: 'bundled',
|
|
165
|
+
latest: 'bundled',
|
|
166
|
+
status: 'bundled',
|
|
167
|
+
});
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
const entry = catalog.get(slug);
|
|
171
|
+
rows.push({
|
|
172
|
+
agent: target.agent,
|
|
173
|
+
location: targetLocation(target.global),
|
|
174
|
+
slug: agentSkillName(slug),
|
|
175
|
+
current: current.version || current.sha256.slice(0, 12),
|
|
176
|
+
latest: entry?.version || entry?.sha256.slice(0, 12) || '',
|
|
177
|
+
status: !entry
|
|
178
|
+
? 'missing_from_catalog'
|
|
179
|
+
: current.sha256 === entry.sha256 && current.version === (entry.version ?? null) && current.source === 'catalog'
|
|
180
|
+
? 'current'
|
|
181
|
+
: 'update_available',
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return rows;
|
|
186
|
+
}
|
|
187
|
+
function renderSkillUpdateResults(results) {
|
|
188
|
+
const rows = results.map((result) => ({
|
|
189
|
+
agent: result.agent,
|
|
190
|
+
location: targetLocation(result.global),
|
|
191
|
+
updated: result.updated.length,
|
|
192
|
+
unchanged: result.unchanged.length,
|
|
193
|
+
missing: result.missing.length,
|
|
194
|
+
meta: result.metaUpdated ? 'yes' : 'no',
|
|
195
|
+
dir: result.baseDir,
|
|
196
|
+
}));
|
|
197
|
+
return [
|
|
198
|
+
`${green('✓')} Soku skills updated`,
|
|
199
|
+
table(rows, [
|
|
200
|
+
{ key: 'agent', header: 'AGENT' },
|
|
201
|
+
{ key: 'location', header: 'LOCATION' },
|
|
202
|
+
{ key: 'updated', header: 'UPDATED' },
|
|
203
|
+
{ key: 'unchanged', header: 'UNCHANGED' },
|
|
204
|
+
{ key: 'missing', header: 'MISSING' },
|
|
205
|
+
{ key: 'meta', header: 'META' },
|
|
206
|
+
{ key: 'dir', header: 'DIR' },
|
|
207
|
+
]),
|
|
208
|
+
].join('\n');
|
|
209
|
+
}
|
|
210
|
+
function runNpmCliInstall() {
|
|
211
|
+
const result = spawnSync('npm', ['i', '-g', '@soku-ai/cli'], { stdio: 'inherit' });
|
|
212
|
+
if (typeof result.status === 'number')
|
|
213
|
+
return result.status;
|
|
214
|
+
return 1;
|
|
215
|
+
}
|
|
216
|
+
function spawnSkillAutoUpdate(entrypoint) {
|
|
217
|
+
const child = spawn(process.execPath, [entrypoint, 'update', 'skills', '--quiet'], {
|
|
218
|
+
env: {
|
|
219
|
+
...process.env,
|
|
220
|
+
SOKU_NO_UPDATE_CHECK: '1',
|
|
221
|
+
SOKU_NO_SKILL_AUTO_UPDATE: '1',
|
|
222
|
+
},
|
|
223
|
+
stdio: 'ignore',
|
|
224
|
+
detached: true,
|
|
225
|
+
});
|
|
226
|
+
child.on('error', () => {
|
|
227
|
+
// Background update is best-effort and must never break the foreground command.
|
|
228
|
+
});
|
|
229
|
+
child.unref();
|
|
230
|
+
}
|
|
231
|
+
export async function maybeAutoUpdateSkills() {
|
|
232
|
+
if (process.env.CI)
|
|
233
|
+
return;
|
|
234
|
+
if (process.env.SOKU_NO_UPDATE_CHECK === '1')
|
|
235
|
+
return;
|
|
236
|
+
if (process.env.SOKU_NO_SKILL_AUTO_UPDATE === '1')
|
|
237
|
+
return;
|
|
238
|
+
if (!process.argv[1])
|
|
239
|
+
return;
|
|
240
|
+
const state = readUpdateState();
|
|
241
|
+
const now = new Date();
|
|
242
|
+
const interval = parseIntervalHours(process.env.SOKU_UPDATE_INTERVAL_HOURS);
|
|
243
|
+
if (!isAutoUpdateDue(state.lastSkillAutoUpdateAt, now, interval))
|
|
244
|
+
return;
|
|
245
|
+
await withUpdateLock(() => {
|
|
246
|
+
writeUpdateState({ ...readUpdateState(), lastSkillAutoUpdateAt: now.toISOString() });
|
|
247
|
+
spawnSkillAutoUpdate(process.argv[1]);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
export async function maybeAutoUpdateCli() {
|
|
251
|
+
if (process.env.CI)
|
|
252
|
+
return;
|
|
253
|
+
if (process.env.SOKU_NO_UPDATE_CHECK === '1')
|
|
254
|
+
return;
|
|
255
|
+
if (process.env.SOKU_AUTO_UPDATE_CLI !== '1')
|
|
256
|
+
return;
|
|
257
|
+
const state = readUpdateState();
|
|
258
|
+
const now = new Date();
|
|
259
|
+
const interval = parseIntervalHours(process.env.SOKU_UPDATE_INTERVAL_HOURS);
|
|
260
|
+
if (!isAutoUpdateDue(state.lastCliAutoUpdateAt, now, interval))
|
|
261
|
+
return;
|
|
262
|
+
await withUpdateLock(async () => {
|
|
263
|
+
try {
|
|
264
|
+
const check = await checkForUpdate();
|
|
265
|
+
if (check.updateAvailable) {
|
|
266
|
+
const status = runNpmCliInstall();
|
|
267
|
+
if (status === 0) {
|
|
268
|
+
process.stderr.write(`${dim('Soku CLI auto-updated. Restart your shell or agent session to use the new version.')}\n`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// Advisory only; never block the user's command.
|
|
274
|
+
}
|
|
275
|
+
finally {
|
|
276
|
+
writeUpdateState({ ...readUpdateState(), lastCliAutoUpdateAt: now.toISOString() });
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
export function registerUpdateCommand(program) {
|
|
281
|
+
const update = program.command('update').description('Update the Soku CLI and installed Soku skills');
|
|
282
|
+
update
|
|
283
|
+
.command('status')
|
|
284
|
+
.description('Show CLI and installed skill update status')
|
|
285
|
+
.option('--agent <agent>', 'claude | codex | cursor | all', 'all')
|
|
286
|
+
.option('--global', 'Only inspect user-level (~) skills directories')
|
|
287
|
+
.option('--project', 'Only inspect project-level skills directories')
|
|
288
|
+
.option('--skills-url <url>', 'Override the skill catalog base url')
|
|
289
|
+
.action(async (opts) => {
|
|
290
|
+
const scope = opts.global ? 'global' : opts.project ? 'project' : 'all';
|
|
291
|
+
const targets = discoverInstalledTargets(opts.agent, scope);
|
|
292
|
+
const [cli, index] = await Promise.all([checkForUpdate(), fetchIndex(resolveSkillsBaseUrl(opts.skillsUrl))]);
|
|
293
|
+
const payload = { cli, skills: skillStatusRows(targets, index) };
|
|
294
|
+
emitSuccess(payload, (d) => {
|
|
295
|
+
const cliLine = d.cli.updateAvailable
|
|
296
|
+
? `${d.cli.packageName} ${d.cli.currentVersion} -> ${d.cli.latestVersion}`
|
|
297
|
+
: `${d.cli.packageName} is current (${d.cli.currentVersion})`;
|
|
298
|
+
const skillLines = d.skills.length === 0
|
|
299
|
+
? dim('(no Soku-managed skills installed)')
|
|
300
|
+
: table(d.skills.map((row) => ({ ...row })), [
|
|
301
|
+
{ key: 'agent', header: 'AGENT' },
|
|
302
|
+
{ key: 'location', header: 'LOCATION' },
|
|
303
|
+
{ key: 'slug', header: 'SKILL' },
|
|
304
|
+
{ key: 'current', header: 'CURRENT' },
|
|
305
|
+
{ key: 'latest', header: 'LATEST' },
|
|
306
|
+
{ key: 'status', header: 'STATUS' },
|
|
307
|
+
]);
|
|
308
|
+
return [`CLI: ${cliLine}`, '', 'Skills:', skillLines].join('\n');
|
|
309
|
+
});
|
|
310
|
+
});
|
|
311
|
+
update
|
|
312
|
+
.command('skills')
|
|
313
|
+
.description('Update installed Soku meta-skill and business skills')
|
|
314
|
+
.option('--agent <agent>', 'claude | codex | cursor | all', 'all')
|
|
315
|
+
.option('--global', 'Only update user-level (~) skills directories')
|
|
316
|
+
.option('--project', 'Only update project-level skills directories')
|
|
317
|
+
.option('--skills-url <url>', 'Override the skill catalog base url')
|
|
318
|
+
.option('--quiet', 'Suppress output except errors')
|
|
319
|
+
.action(async (opts) => {
|
|
320
|
+
const scope = opts.global ? 'global' : opts.project ? 'project' : 'all';
|
|
321
|
+
const results = await updateSkills({ agent: opts.agent, scope, skillsUrl: opts.skillsUrl });
|
|
322
|
+
if (opts.quiet)
|
|
323
|
+
process.exit(ExitCode.OK);
|
|
324
|
+
emitSuccess({ results }, (d) => renderSkillUpdateResults(d.results));
|
|
325
|
+
});
|
|
326
|
+
update
|
|
327
|
+
.command('cli')
|
|
328
|
+
.description('Install the latest @soku-ai/cli from npm')
|
|
329
|
+
.option('--dry-run', 'Only report what would be installed')
|
|
330
|
+
.action(async (opts) => {
|
|
331
|
+
const result = await checkForUpdate();
|
|
332
|
+
if (!result.updateAvailable || !result.latestVersion) {
|
|
333
|
+
emitSuccess(result, (d) => `${d.packageName} is up to date (${d.currentVersion}).`);
|
|
334
|
+
}
|
|
335
|
+
if (opts.dryRun) {
|
|
336
|
+
emitSuccess(result, (d) => `${d.packageName} ${d.currentVersion} -> ${d.latestVersion}\n${dim('Run')} ${cyan(d.installCommand)}`);
|
|
337
|
+
}
|
|
338
|
+
const status = runNpmCliInstall();
|
|
339
|
+
if (status !== 0) {
|
|
340
|
+
emitError('update_failed', `npm install exited with status ${status}`, ExitCode.RUNTIME, result.installCommand);
|
|
341
|
+
}
|
|
342
|
+
emitSuccess({ ...result, installed: true }, (d) => `${green('✓')} Installed ${d.packageName} ${d.latestVersion}\n${dim('Restart your shell or agent session to use it.')}`);
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAsFnC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwFhE"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/** `soku workspace` — inspect and resolve the active org/brand selection. */
|
|
2
|
+
import { loadConfig, updateConfig } from '../config.js';
|
|
3
|
+
import { apiRequest } from '../http/client.js';
|
|
4
|
+
import { cyan, dim, emitError, emitSuccess, ExitCode, green, table } from '../output/envelope.js';
|
|
5
|
+
import { matchRef } from '../resolve.js';
|
|
6
|
+
function resolveSearchMatch(brands, ref) {
|
|
7
|
+
const exact = matchRef(brands, ref);
|
|
8
|
+
if (exact.kind !== 'none')
|
|
9
|
+
return exact;
|
|
10
|
+
if (brands.length === 1)
|
|
11
|
+
return { kind: 'match', item: brands[0] };
|
|
12
|
+
if (brands.length > 1)
|
|
13
|
+
return { kind: 'ambiguous', matches: brands };
|
|
14
|
+
return { kind: 'none' };
|
|
15
|
+
}
|
|
16
|
+
async function searchBrands(query, limit) {
|
|
17
|
+
const data = await apiRequest(`/api/cli/brands/search?q=${encodeURIComponent(query)}&limit=${encodeURIComponent(String(limit))}`);
|
|
18
|
+
return data.brands;
|
|
19
|
+
}
|
|
20
|
+
function resolveBrandCandidates(brands, ref) {
|
|
21
|
+
const res = resolveSearchMatch(brands, ref);
|
|
22
|
+
if (res.kind === 'match') {
|
|
23
|
+
return { resolved: true, reason: 'match', brand: res.item, candidates: [res.item] };
|
|
24
|
+
}
|
|
25
|
+
if (res.kind === 'ambiguous') {
|
|
26
|
+
return { resolved: false, reason: 'ambiguous', brand: null, candidates: res.matches };
|
|
27
|
+
}
|
|
28
|
+
return { resolved: false, reason: 'not_found', brand: null, candidates: [] };
|
|
29
|
+
}
|
|
30
|
+
function renderBrandCandidates(candidates) {
|
|
31
|
+
return table(candidates.map((b) => ({
|
|
32
|
+
name: b.name,
|
|
33
|
+
slug: b.slug,
|
|
34
|
+
org: b.org_slug || b.org_name || b.org_id,
|
|
35
|
+
id: b.id,
|
|
36
|
+
})), [
|
|
37
|
+
{ key: 'name', header: 'BRAND' },
|
|
38
|
+
{ key: 'slug', header: 'SLUG' },
|
|
39
|
+
{ key: 'org', header: 'ORG' },
|
|
40
|
+
{ key: 'id', header: 'ID' },
|
|
41
|
+
]);
|
|
42
|
+
}
|
|
43
|
+
function useResolvedBrand(result, ref) {
|
|
44
|
+
if (result.resolved && result.brand)
|
|
45
|
+
return result.brand;
|
|
46
|
+
if (result.reason === 'not_found') {
|
|
47
|
+
emitError('not_found', `No accessible brand matching "${ref}".`, ExitCode.NOT_FOUND, 'Run `soku workspace resolve <brand>` to inspect candidates.');
|
|
48
|
+
}
|
|
49
|
+
const candidates = result.candidates.map((b) => `${b.slug} (${b.org_slug || b.org_name || b.org_id})`).join(', ');
|
|
50
|
+
return emitError('ambiguous', `"${ref}" matches ${result.candidates.length} brands.`, ExitCode.USAGE, `Use an exact slug or id: ${candidates}`);
|
|
51
|
+
}
|
|
52
|
+
export function registerWorkspaceCommands(program) {
|
|
53
|
+
const workspace = program.command('workspace').description('Inspect or set the active Soku workspace');
|
|
54
|
+
workspace
|
|
55
|
+
.command('status')
|
|
56
|
+
.description('Show the active organization and brand')
|
|
57
|
+
.action(async () => {
|
|
58
|
+
const cfg = loadConfig();
|
|
59
|
+
const orgsData = await apiRequest('/api/cli/orgs');
|
|
60
|
+
const org = cfg.activeOrgId ? orgsData.orgs.find((item) => item.id === cfg.activeOrgId) : undefined;
|
|
61
|
+
let brand;
|
|
62
|
+
if (org && cfg.activeBrandId) {
|
|
63
|
+
const brandsData = await apiRequest(`/api/cli/brands?org_id=${encodeURIComponent(org.id)}`);
|
|
64
|
+
brand = brandsData.brands.find((item) => item.id === cfg.activeBrandId);
|
|
65
|
+
}
|
|
66
|
+
const data = {
|
|
67
|
+
active_org_id: cfg.activeOrgId ?? null,
|
|
68
|
+
active_org_name: org?.name ?? null,
|
|
69
|
+
active_org_slug: org?.slug ?? null,
|
|
70
|
+
active_brand_id: cfg.activeBrandId ?? null,
|
|
71
|
+
active_brand_name: brand?.name ?? null,
|
|
72
|
+
active_brand_slug: brand?.slug ?? null,
|
|
73
|
+
workspace_ready: Boolean(org && brand),
|
|
74
|
+
};
|
|
75
|
+
emitSuccess(data, (d) => {
|
|
76
|
+
const orgLabel = d.active_org_slug || d.active_org_name || d.active_org_id || '(none)';
|
|
77
|
+
const brandLabel = d.active_brand_slug || d.active_brand_name || d.active_brand_id || '(none)';
|
|
78
|
+
const ready = d.workspace_ready ? green('ready') : 'not ready';
|
|
79
|
+
return [
|
|
80
|
+
`Workspace: ${ready}`,
|
|
81
|
+
`Org: ${orgLabel}`,
|
|
82
|
+
`Brand: ${brandLabel}`,
|
|
83
|
+
d.workspace_ready
|
|
84
|
+
? dim('Next: soku resources list')
|
|
85
|
+
: dim('Next: soku workspace use-brand <brand>'),
|
|
86
|
+
].join('\n');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
workspace
|
|
90
|
+
.command('resolve <brand>')
|
|
91
|
+
.description('Resolve a brand across all accessible organizations without changing workspace')
|
|
92
|
+
.option('--limit <n>', 'Maximum candidates to inspect', '20')
|
|
93
|
+
.action(async (ref, opts) => {
|
|
94
|
+
const limit = Number(opts.limit);
|
|
95
|
+
if (!Number.isFinite(limit) || limit < 1) {
|
|
96
|
+
emitError('usage', '--limit must be a positive number.', ExitCode.USAGE);
|
|
97
|
+
}
|
|
98
|
+
const result = resolveBrandCandidates(await searchBrands(ref, limit), ref);
|
|
99
|
+
emitSuccess(result, (d) => {
|
|
100
|
+
if (d.resolved && d.brand) {
|
|
101
|
+
const org = d.brand.org_slug || d.brand.org_name || d.brand.org_id;
|
|
102
|
+
return [
|
|
103
|
+
`${green('✓')} Resolved brand: ${cyan(org)} / ${cyan(d.brand.name)} ${dim(`(${d.brand.id})`)}`,
|
|
104
|
+
dim(`Next: soku workspace use-brand ${ref}`),
|
|
105
|
+
].join('\n');
|
|
106
|
+
}
|
|
107
|
+
if (d.reason === 'not_found')
|
|
108
|
+
return `${dim('(no accessible brand candidates)')}\n${dim('Try a different brand name or slug.')}`;
|
|
109
|
+
return [
|
|
110
|
+
`${dim(`Ambiguous: ${d.candidates.length} candidates`)}`,
|
|
111
|
+
renderBrandCandidates(d.candidates),
|
|
112
|
+
dim('Next: rerun with an exact brand slug or id.'),
|
|
113
|
+
].join('\n');
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
workspace
|
|
117
|
+
.command('use-brand <brand>')
|
|
118
|
+
.description('Resolve a brand across all organizations and set org+brand together')
|
|
119
|
+
.action(async (ref) => {
|
|
120
|
+
const result = resolveBrandCandidates(await searchBrands(ref, 20), ref);
|
|
121
|
+
const match = useResolvedBrand(result, ref);
|
|
122
|
+
updateConfig({ activeOrgId: match.org_id, activeBrandId: match.id });
|
|
123
|
+
emitSuccess({
|
|
124
|
+
active_org_id: match.org_id,
|
|
125
|
+
active_brand_id: match.id,
|
|
126
|
+
name: match.name,
|
|
127
|
+
org_name: match.org_name,
|
|
128
|
+
org_slug: match.org_slug,
|
|
129
|
+
}, (d) => `${green('✓')} Active workspace: ${cyan(d.org_slug || d.org_name || d.active_org_id)} / ${cyan(d.name)} ${dim(`(${d.active_brand_id})`)}\n ${dim('Next: soku resources list')}`);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/commands/workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
/** Persistent CLI config at ~/.soku/config.json (active workspace
|
|
1
|
+
/** Persistent CLI config at ~/.soku/config.json (active workspace only). */
|
|
2
2
|
export interface SokuConfig {
|
|
3
|
+
/** Deprecated and ignored. Endpoint overrides are environment-only. */
|
|
3
4
|
apiBaseUrl?: string;
|
|
4
5
|
activeOrgId?: string;
|
|
5
6
|
activeBrandId?: string;
|
|
6
|
-
/**
|
|
7
|
+
/** Deprecated and ignored. Skill catalog overrides are environment-only. */
|
|
7
8
|
skillsBaseUrl?: string;
|
|
8
9
|
}
|
|
9
10
|
export declare function configDir(): string;
|
|
10
11
|
export declare function loadConfig(): SokuConfig;
|
|
11
12
|
export declare function saveConfig(config: SokuConfig): void;
|
|
12
13
|
export declare function updateConfig(patch: Partial<SokuConfig>): SokuConfig;
|
|
13
|
-
/** Resolution order: --api-base flag (caller passes) → env →
|
|
14
|
+
/** Resolution order: --api-base flag (caller passes) → env → production default. */
|
|
14
15
|
export declare function resolveApiBaseUrl(flag?: string): string;
|
|
15
|
-
/** Resolution order: --skills-url flag → env →
|
|
16
|
+
/** Resolution order: --skills-url flag → env → production skill catalog. */
|
|
16
17
|
export declare function resolveSkillsBaseUrl(flag?: string): string;
|
|
17
18
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAM5E,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAMD,wBAAgB,UAAU,IAAI,UAAU,CAMvC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAInD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAInE;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAM1D"}
|
package/dist/config.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
/** Persistent CLI config at ~/.soku/config.json (active workspace
|
|
1
|
+
/** Persistent CLI config at ~/.soku/config.json (active workspace only). */
|
|
2
2
|
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { dirname, join } from 'node:path';
|
|
5
|
-
const DEFAULT_API_BASE = 'https://
|
|
6
|
-
const DEFAULT_SKILLS_BASE = 'https://
|
|
5
|
+
const DEFAULT_API_BASE = 'https://api.soku.ai';
|
|
6
|
+
const DEFAULT_SKILLS_BASE = 'https://api.soku.ai/api/cli/skills';
|
|
7
7
|
export function configDir() {
|
|
8
8
|
return join(homedir(), '.soku');
|
|
9
9
|
}
|
|
@@ -28,18 +28,16 @@ export function updateConfig(patch) {
|
|
|
28
28
|
saveConfig(next);
|
|
29
29
|
return next;
|
|
30
30
|
}
|
|
31
|
-
/** Resolution order: --api-base flag (caller passes) → env →
|
|
31
|
+
/** Resolution order: --api-base flag (caller passes) → env → production default. */
|
|
32
32
|
export function resolveApiBaseUrl(flag) {
|
|
33
33
|
return (flag ||
|
|
34
34
|
process.env.SOKU_API_BASE ||
|
|
35
|
-
loadConfig().apiBaseUrl ||
|
|
36
35
|
DEFAULT_API_BASE).replace(/\/$/, '');
|
|
37
36
|
}
|
|
38
|
-
/** Resolution order: --skills-url flag → env →
|
|
37
|
+
/** Resolution order: --skills-url flag → env → production skill catalog. */
|
|
39
38
|
export function resolveSkillsBaseUrl(flag) {
|
|
40
39
|
return (flag ||
|
|
41
40
|
process.env.SOKU_SKILLS_URL ||
|
|
42
|
-
loadConfig().skillsBaseUrl ||
|
|
43
41
|
DEFAULT_SKILLS_BASE).replace(/\/$/, '');
|
|
44
42
|
}
|
|
45
43
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAE5E,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAWzC,MAAM,gBAAgB,GAAG,qBAAqB,CAAA;AAC9C,MAAM,mBAAmB,GAAG,oCAAoC,CAAA;AAEhE,MAAM,UAAU,SAAS;IACvB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAe,CAAA;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,MAAM,IAAI,GAAG,UAAU,EAAE,CAAA;IACzB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC7C,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AACvE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAA0B;IACrD,MAAM,IAAI,GAAG,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,KAAK,EAAE,CAAA;IAC1C,UAAU,CAAC,IAAI,CAAC,CAAA;IAChB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,OAAO,CACL,IAAI;QACJ,OAAO,CAAC,GAAG,CAAC,aAAa;QACzB,gBAAgB,CACjB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACtB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,OAAO,CACL,IAAI;QACJ,OAAO,CAAC,GAAG,CAAC,eAAe;QAC3B,mBAAmB,CACpB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACtB,CAAC"}
|