@wix/web50-cli 0.1.1 → 0.1.2
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/bin/web5.js +1 -2
- package/dist/cjs/auth/deviceFlow.js +90 -17
- package/dist/cjs/auth/deviceFlow.js.map +1 -1
- package/dist/cjs/auth/index.js +40 -10
- package/dist/cjs/auth/index.js.map +1 -1
- package/dist/cjs/cli.js +3 -3
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/commands/bundle.js +12 -4
- package/dist/cjs/commands/bundle.js.map +1 -1
- package/dist/cjs/commands/conversation.js.map +1 -1
- package/dist/cjs/commands/conversationWizard.js +3 -1
- package/dist/cjs/commands/conversationWizard.js.map +1 -1
- package/dist/cjs/commands/deploy.js +55 -10
- package/dist/cjs/commands/deploy.js.map +1 -1
- package/dist/cjs/commands/ecom.js +239 -0
- package/dist/cjs/commands/ecom.js.map +1 -0
- package/dist/cjs/commands/embed.js.map +1 -1
- package/dist/cjs/commands/init.js +34 -3
- package/dist/cjs/commands/init.js.map +1 -1
- package/dist/cjs/commands/instructions.js +147 -51
- package/dist/cjs/commands/instructions.js.map +1 -1
- package/dist/cjs/commands/login.js +8 -4
- package/dist/cjs/commands/login.js.map +1 -1
- package/dist/cjs/commands/serve.js.map +1 -1
- package/dist/cjs/commands/validate.js +368 -16
- package/dist/cjs/commands/validate.js.map +1 -1
- package/dist/cjs/commands/whoami.js.map +1 -1
- package/dist/cjs/templates/aiInstructionsSchema.js +5 -1
- package/dist/cjs/templates/aiInstructionsSchema.js.map +1 -1
- package/dist/cjs/templates/cmsMappingSchema.js +132 -0
- package/dist/cjs/templates/cmsMappingSchema.js.map +1 -0
- package/dist/cjs/utils/project.js +13 -0
- package/dist/cjs/utils/project.js.map +1 -1
- package/dist/cjs/utils/wixApi.js +3 -1
- package/dist/cjs/utils/wixApi.js.map +1 -1
- package/dist/esm/auth/deviceFlow.js +89 -17
- package/dist/esm/auth/deviceFlow.js.map +1 -1
- package/dist/esm/auth/index.js +40 -11
- package/dist/esm/auth/index.js.map +1 -1
- package/dist/esm/cli.js +3 -3
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/bundle.js +12 -4
- package/dist/esm/commands/bundle.js.map +1 -1
- package/dist/esm/commands/conversation.js.map +1 -1
- package/dist/esm/commands/conversationWizard.js +3 -1
- package/dist/esm/commands/conversationWizard.js.map +1 -1
- package/dist/esm/commands/deploy.js +55 -10
- package/dist/esm/commands/deploy.js.map +1 -1
- package/dist/esm/commands/ecom.js +234 -0
- package/dist/esm/commands/ecom.js.map +1 -0
- package/dist/esm/commands/embed.js.map +1 -1
- package/dist/esm/commands/init.js +34 -3
- package/dist/esm/commands/init.js.map +1 -1
- package/dist/esm/commands/instructions.js +152 -53
- package/dist/esm/commands/instructions.js.map +1 -1
- package/dist/esm/commands/login.js +8 -4
- package/dist/esm/commands/login.js.map +1 -1
- package/dist/esm/commands/serve.js.map +1 -1
- package/dist/esm/commands/validate.js +373 -19
- package/dist/esm/commands/validate.js.map +1 -1
- package/dist/esm/commands/whoami.js.map +1 -1
- package/dist/esm/templates/aiInstructionsSchema.js +5 -1
- package/dist/esm/templates/aiInstructionsSchema.js.map +1 -1
- package/dist/esm/templates/cmsMappingSchema.js +128 -0
- package/dist/esm/templates/cmsMappingSchema.js.map +1 -0
- package/dist/esm/utils/project.js +15 -0
- package/dist/esm/utils/project.js.map +1 -1
- package/dist/esm/utils/wixApi.js +4 -2
- package/dist/esm/utils/wixApi.js.map +1 -1
- package/dist/types/auth/deviceFlow.d.ts +1 -1
- package/dist/types/auth/deviceFlow.d.ts.map +1 -1
- package/dist/types/auth/index.d.ts +2 -1
- package/dist/types/auth/index.d.ts.map +1 -1
- package/dist/types/commands/bundle.d.ts.map +1 -1
- package/dist/types/commands/conversation.d.ts.map +1 -1
- package/dist/types/commands/conversationWizard.d.ts.map +1 -1
- package/dist/types/commands/deploy.d.ts.map +1 -1
- package/dist/types/commands/ecom.d.ts +3 -0
- package/dist/types/commands/ecom.d.ts.map +1 -0
- package/dist/types/commands/embed.d.ts.map +1 -1
- package/dist/types/commands/init.d.ts.map +1 -1
- package/dist/types/commands/instructions.d.ts.map +1 -1
- package/dist/types/commands/login.d.ts.map +1 -1
- package/dist/types/commands/serve.d.ts.map +1 -1
- package/dist/types/commands/validate.d.ts +4 -2
- package/dist/types/commands/validate.d.ts.map +1 -1
- package/dist/types/commands/whoami.d.ts.map +1 -1
- package/dist/types/templates/aiInstructionsSchema.d.ts.map +1 -1
- package/dist/types/templates/cmsMappingSchema.d.ts +2 -0
- package/dist/types/templates/cmsMappingSchema.d.ts.map +1 -0
- package/dist/types/utils/project.d.ts +2 -0
- package/dist/types/utils/project.d.ts.map +1 -1
- package/dist/types/utils/wixApi.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/commands/getClientId.js +0 -60
- package/dist/cjs/commands/getClientId.js.map +0 -1
- package/dist/esm/commands/getClientId.js +0 -56
- package/dist/esm/commands/getClientId.js.map +0 -1
- package/dist/types/commands/getClientId.d.ts +0 -3
- package/dist/types/commands/getClientId.d.ts.map +0 -1
|
@@ -13,7 +13,10 @@ var _wixApi = require("../utils/wixApi");
|
|
|
13
13
|
var _print = require("../utils/print");
|
|
14
14
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
15
15
|
const BASE = '/web5/instructions/cli';
|
|
16
|
-
|
|
16
|
+
|
|
17
|
+
// ── Types ─────────────────────────────────────────────────────────────────────
|
|
18
|
+
|
|
19
|
+
// ── Display helpers ───────────────────────────────────────────────────────────
|
|
17
20
|
|
|
18
21
|
const BOX_W = 66;
|
|
19
22
|
function printHeader(title) {
|
|
@@ -29,17 +32,121 @@ function printDivider(hints) {
|
|
|
29
32
|
console.log();
|
|
30
33
|
}
|
|
31
34
|
function truncate(text, max = 48) {
|
|
32
|
-
const clean = text.replace(/\n/g, ' ').trim();
|
|
35
|
+
const clean = (text ?? '').replace(/\n/g, ' ').trim();
|
|
33
36
|
return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;
|
|
34
37
|
}
|
|
38
|
+
function printInstructionContent(inst) {
|
|
39
|
+
// Intents
|
|
40
|
+
console.log(_chalk.default.bold(' Intents'));
|
|
41
|
+
console.log(_chalk.default.dim(' ' + '─'.repeat(40)));
|
|
42
|
+
const intents = inst.intents ?? {};
|
|
43
|
+
if (Object.keys(intents).length === 0) {
|
|
44
|
+
console.log(_chalk.default.dim(' (none)'));
|
|
45
|
+
} else {
|
|
46
|
+
for (const [k, v] of Object.entries(intents)) {
|
|
47
|
+
console.log(` ${_chalk.default.cyan(k)}: ${v}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
console.log();
|
|
51
|
+
|
|
52
|
+
// Semantics
|
|
53
|
+
console.log(_chalk.default.bold(' Semantics'));
|
|
54
|
+
console.log(_chalk.default.dim(' ' + '─'.repeat(40)));
|
|
55
|
+
const semantics = inst.semantics ?? {};
|
|
56
|
+
if (Object.keys(semantics).length === 0) {
|
|
57
|
+
console.log(_chalk.default.dim(' (none)'));
|
|
58
|
+
} else {
|
|
59
|
+
for (const [k, v] of Object.entries(semantics)) {
|
|
60
|
+
console.log(` ${_chalk.default.cyan(k)}: ${v}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
console.log();
|
|
64
|
+
|
|
65
|
+
// Actions
|
|
66
|
+
console.log(_chalk.default.bold(' Actions'));
|
|
67
|
+
console.log(_chalk.default.dim(' ' + '─'.repeat(40)));
|
|
68
|
+
const actions = inst.actions ?? [];
|
|
69
|
+
if (actions.length === 0) {
|
|
70
|
+
console.log(_chalk.default.dim(' (none)'));
|
|
71
|
+
} else {
|
|
72
|
+
for (const action of actions) {
|
|
73
|
+
const desc = action.description ? _chalk.default.dim(` — ${action.description}`) : '';
|
|
74
|
+
console.log(` ${_chalk.default.cyan('• ' + action.name)}${desc}`);
|
|
75
|
+
for (const p of action.params ?? []) {
|
|
76
|
+
const preview = p.values.length > 0 ? _chalk.default.dim(` [${p.values.slice(0, 3).join(', ')}${p.values.length > 3 ? ', …' : ''}]`) : '';
|
|
77
|
+
const optTag = p.optional ? _chalk.default.dim(' (optional)') : '';
|
|
78
|
+
console.log(` ${p.param}${preview}${optTag}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
console.log();
|
|
83
|
+
|
|
84
|
+
// Free-text instruction
|
|
85
|
+
console.log(_chalk.default.bold(' Instruction'));
|
|
86
|
+
console.log(_chalk.default.dim(' ' + '─'.repeat(40)));
|
|
87
|
+
console.log(` ${inst.content ?? ''}`);
|
|
88
|
+
console.log();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ── Diff helper ───────────────────────────────────────────────────────────────
|
|
92
|
+
|
|
93
|
+
function diffLines(aStr, bStr) {
|
|
94
|
+
const aLines = aStr.split('\n');
|
|
95
|
+
const bLines = bStr.split('\n');
|
|
96
|
+
const out = [];
|
|
97
|
+
const maxLen = Math.max(aLines.length, bLines.length);
|
|
98
|
+
for (let i = 0; i < maxLen; i++) {
|
|
99
|
+
const aLine = i < aLines.length ? aLines[i] : null;
|
|
100
|
+
const bLine = i < bLines.length ? bLines[i] : null;
|
|
101
|
+
if (aLine === bLine) {
|
|
102
|
+
out.push(` ${aLine ?? ''}`);
|
|
103
|
+
} else {
|
|
104
|
+
if (aLine !== null) {
|
|
105
|
+
out.push(_chalk.default.red(`- ${aLine}`));
|
|
106
|
+
}
|
|
107
|
+
if (bLine !== null) {
|
|
108
|
+
out.push(_chalk.default.green(`+ ${bLine}`));
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return out.join('\n');
|
|
113
|
+
}
|
|
114
|
+
function formatKV(obj) {
|
|
115
|
+
return Object.entries(obj ?? {}).map(([k, v]) => `${k}: ${v}`).join('\n');
|
|
116
|
+
}
|
|
117
|
+
function formatActions(actions) {
|
|
118
|
+
return (actions ?? []).map(a => {
|
|
119
|
+
const params = (a.params ?? []).map(p => ` ${p.param}: [${p.values.join(', ')}]`).join('\n');
|
|
120
|
+
const header = a.description ? `${a.name} — ${a.description}` : a.name;
|
|
121
|
+
return params ? `${header}\n${params}` : header;
|
|
122
|
+
}).join('\n\n');
|
|
123
|
+
}
|
|
124
|
+
function diffInstructions(a, b, v1, v2) {
|
|
125
|
+
const out = [_chalk.default.dim(`--- v${v1}`), _chalk.default.dim(`+++ v${v2}`), ''];
|
|
126
|
+
const sections = [['Intents', formatKV(a.intents), formatKV(b.intents)], ['Semantics', formatKV(a.semantics), formatKV(b.semantics)], ['Actions', formatActions(a.actions), formatActions(b.actions)], ['Instruction', a.content ?? '', b.content ?? '']];
|
|
127
|
+
for (const [label, aStr, bStr] of sections) {
|
|
128
|
+
out.push(_chalk.default.bold(`── ${label} ──`));
|
|
129
|
+
if (aStr === bStr) {
|
|
130
|
+
out.push(_chalk.default.dim(' (no changes)'));
|
|
131
|
+
} else {
|
|
132
|
+
out.push(diffLines(aStr, bStr));
|
|
133
|
+
}
|
|
134
|
+
out.push('');
|
|
135
|
+
}
|
|
136
|
+
return out.join('\n');
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ── Wizard ────────────────────────────────────────────────────────────────────
|
|
140
|
+
|
|
35
141
|
async function showInstructionDetail(version, instructions) {
|
|
36
142
|
const inst = instructions.find(i => i.version === version);
|
|
37
|
-
if (!inst)
|
|
143
|
+
if (!inst) {
|
|
144
|
+
return 'back';
|
|
145
|
+
}
|
|
38
146
|
console.clear();
|
|
39
147
|
const activeLabel = inst.active ? _chalk.default.green(' (active)') : '';
|
|
40
148
|
printHeader(`📋 AI Instructions ❯ Version ${version}${activeLabel}`);
|
|
41
|
-
|
|
42
|
-
console.log(`\n${inst.content}\n`);
|
|
149
|
+
printInstructionContent(inst);
|
|
43
150
|
const choices = [{
|
|
44
151
|
name: ` ${_chalk.default.dim('← Back')}`,
|
|
45
152
|
value: 'back'
|
|
@@ -80,8 +187,6 @@ async function runInstructionsWizard() {
|
|
|
80
187
|
console.log(_chalk.default.dim('\nBye.\n'));
|
|
81
188
|
process.exit(0);
|
|
82
189
|
});
|
|
83
|
-
|
|
84
|
-
// Fetch once, keep local copy so activation updates in-memory
|
|
85
190
|
const sp = (0, _ora.default)('Fetching instructions…').start();
|
|
86
191
|
let instructions = [];
|
|
87
192
|
try {
|
|
@@ -103,7 +208,7 @@ async function runInstructionsWizard() {
|
|
|
103
208
|
console.log(_chalk.default.yellow('No instructions found.'));
|
|
104
209
|
process.exit(0);
|
|
105
210
|
}
|
|
106
|
-
|
|
211
|
+
const running = true;
|
|
107
212
|
while (running) {
|
|
108
213
|
console.clear();
|
|
109
214
|
printHeader(`📋 AI Instructions ${_chalk.default.dim(`${instructions.length} versions`)}`);
|
|
@@ -128,9 +233,13 @@ async function runInstructionsWizard() {
|
|
|
128
233
|
choices,
|
|
129
234
|
pageSize: 12
|
|
130
235
|
}]);
|
|
131
|
-
if (version === '__exit__')
|
|
236
|
+
if (version === '__exit__') {
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
132
239
|
const result = await showInstructionDetail(version, instructions);
|
|
133
|
-
if (result === 'exit')
|
|
240
|
+
if (result === 'exit') {
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
134
243
|
if (result === 'refetch') {
|
|
135
244
|
try {
|
|
136
245
|
const data = await (0, _wixApi.wixRequest)({
|
|
@@ -151,27 +260,7 @@ async function runInstructionsWizard() {
|
|
|
151
260
|
process.exit(0);
|
|
152
261
|
}
|
|
153
262
|
|
|
154
|
-
// ──
|
|
155
|
-
|
|
156
|
-
function diffContent(a, b, v1, v2) {
|
|
157
|
-
const aLines = a.split('\n');
|
|
158
|
-
const bLines = b.split('\n');
|
|
159
|
-
const out = [_chalk.default.dim(`--- v${v1}`), _chalk.default.dim(`+++ v${v2}`), ''];
|
|
160
|
-
const maxLen = Math.max(aLines.length, bLines.length);
|
|
161
|
-
for (let i = 0; i < maxLen; i++) {
|
|
162
|
-
const aLine = i < aLines.length ? aLines[i] : null;
|
|
163
|
-
const bLine = i < bLines.length ? bLines[i] : null;
|
|
164
|
-
if (aLine === bLine) {
|
|
165
|
-
out.push(` ${aLine ?? ''}`);
|
|
166
|
-
} else {
|
|
167
|
-
if (aLine !== null) out.push(_chalk.default.red(`- ${aLine}`));
|
|
168
|
-
if (bLine !== null) out.push(_chalk.default.green(`+ ${bLine}`));
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return out.join('\n');
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// ── Subcommands ───────────────────────────────────────────────────────────
|
|
263
|
+
// ── Subcommands ───────────────────────────────────────────────────────────────
|
|
175
264
|
|
|
176
265
|
const getActiveCmd = new _commander.Command('get-active').description('Get the currently active instruction').action(async () => {
|
|
177
266
|
const sp = (0, _print.spinner)('Fetching active instruction...');
|
|
@@ -180,13 +269,10 @@ const getActiveCmd = new _commander.Command('get-active').description('Get the c
|
|
|
180
269
|
path: `${BASE}/active`
|
|
181
270
|
});
|
|
182
271
|
sp.stop();
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
content
|
|
186
|
-
} = data.instruction;
|
|
187
|
-
console.log(_chalk.default.bold(`Version ${version}`));
|
|
272
|
+
const inst = data.instruction;
|
|
273
|
+
console.log(_chalk.default.bold(`Version ${inst.version}`));
|
|
188
274
|
console.log();
|
|
189
|
-
|
|
275
|
+
printInstructionContent(inst);
|
|
190
276
|
} catch (err_) {
|
|
191
277
|
sp.stop();
|
|
192
278
|
(0, _print.error)(err_.message);
|
|
@@ -212,22 +298,28 @@ const listCmd = new _commander.Command('list').description('List all instruction
|
|
|
212
298
|
const view = items.map(({
|
|
213
299
|
version,
|
|
214
300
|
active,
|
|
301
|
+
intents,
|
|
302
|
+
semantics,
|
|
303
|
+
actions,
|
|
215
304
|
content
|
|
216
305
|
}) => ({
|
|
217
306
|
version,
|
|
218
307
|
active: active ?? false,
|
|
308
|
+
intents,
|
|
309
|
+
semantics,
|
|
310
|
+
actions,
|
|
219
311
|
content
|
|
220
312
|
}));
|
|
221
313
|
console.log(JSON.stringify(view, null, 2));
|
|
222
314
|
} else {
|
|
223
|
-
const header = `${'Version'.padEnd(10)}${'Active'.padEnd(10)}
|
|
315
|
+
const header = `${'Version'.padEnd(10)}${'Active'.padEnd(10)}Instruction`;
|
|
224
316
|
console.log(_chalk.default.bold(header));
|
|
225
317
|
console.log('─'.repeat(60));
|
|
226
318
|
for (const i of items) {
|
|
227
319
|
const ver = `v${i.version}`.padEnd(10);
|
|
228
320
|
const active = (i.active ? '✓' : '').padEnd(10);
|
|
229
|
-
const
|
|
230
|
-
console.log(`${_chalk.default.cyan(ver)}${_chalk.default.green(active)}${
|
|
321
|
+
const preview = truncate(i.content, 40);
|
|
322
|
+
console.log(`${_chalk.default.cyan(ver)}${_chalk.default.green(active)}${preview}`);
|
|
231
323
|
}
|
|
232
324
|
}
|
|
233
325
|
} catch (err_) {
|
|
@@ -258,20 +350,17 @@ const getCmd = new _commander.Command('get').description('Get an instruction by
|
|
|
258
350
|
path: `${BASE}/by-version/${version}`
|
|
259
351
|
});
|
|
260
352
|
sp.stop();
|
|
261
|
-
const
|
|
262
|
-
|
|
263
|
-
content
|
|
264
|
-
} = data.instruction;
|
|
265
|
-
console.log(_chalk.default.bold(`Version ${ver}`));
|
|
353
|
+
const inst = data.instruction;
|
|
354
|
+
console.log(_chalk.default.bold(`Version ${inst.version}`));
|
|
266
355
|
console.log();
|
|
267
|
-
|
|
356
|
+
printInstructionContent(inst);
|
|
268
357
|
} catch (err_) {
|
|
269
358
|
sp.stop();
|
|
270
359
|
(0, _print.error)(err_.message);
|
|
271
360
|
process.exit(1);
|
|
272
361
|
}
|
|
273
362
|
});
|
|
274
|
-
const diffCmd = new _commander.Command('diff').description('Show
|
|
363
|
+
const diffCmd = new _commander.Command('diff').description('Show diff between two instruction versions across all sections').argument('<v1>', 'First version number').argument('<v2>', 'Second version number').action(async (v1, v2) => {
|
|
275
364
|
const sp = (0, _print.spinner)(`Fetching versions ${v1} and ${v2}...`);
|
|
276
365
|
try {
|
|
277
366
|
const [d1, d2] = await Promise.all([(0, _wixApi.wixRequest)({
|
|
@@ -280,22 +369,29 @@ const diffCmd = new _commander.Command('diff').description('Show line-by-line di
|
|
|
280
369
|
path: `${BASE}/by-version/${v2}`
|
|
281
370
|
})]);
|
|
282
371
|
sp.stop();
|
|
283
|
-
console.log(
|
|
372
|
+
console.log(diffInstructions(d1.instruction, d2.instruction, v1, v2));
|
|
284
373
|
} catch (err_) {
|
|
285
374
|
sp.stop();
|
|
286
375
|
(0, _print.error)(err_.message);
|
|
287
376
|
process.exit(1);
|
|
288
377
|
}
|
|
289
378
|
});
|
|
290
|
-
const exportCmd = new _commander.Command('export').description('Export an instruction version to a local file').requiredOption('--version <v>', 'Version number to export').requiredOption('--output <file>', 'Output file path').action(async opts => {
|
|
379
|
+
const exportCmd = new _commander.Command('export').description('Export an instruction version to a local file').requiredOption('--version <v>', 'Version number to export').requiredOption('--output <file>', 'Output file path (.json)').action(async opts => {
|
|
291
380
|
const sp = (0, _print.spinner)(`Fetching instruction version ${opts.version}...`);
|
|
292
381
|
try {
|
|
293
382
|
const data = await (0, _wixApi.wixRequest)({
|
|
294
383
|
path: `${BASE}/by-version/${opts.version}`
|
|
295
384
|
});
|
|
296
385
|
sp.stop();
|
|
386
|
+
const inst = data.instruction;
|
|
387
|
+
const outContent = JSON.stringify({
|
|
388
|
+
intents: inst.intents,
|
|
389
|
+
semantics: inst.semantics,
|
|
390
|
+
actions: inst.actions,
|
|
391
|
+
content: inst.content
|
|
392
|
+
}, null, 2);
|
|
297
393
|
const outPath = path.resolve(opts.output);
|
|
298
|
-
fs.writeFileSync(outPath,
|
|
394
|
+
fs.writeFileSync(outPath, outContent, 'utf8');
|
|
299
395
|
(0, _print.success)(`Exported version ${opts.version} to ${outPath}`);
|
|
300
396
|
} catch (err_) {
|
|
301
397
|
sp.stop();
|
|
@@ -339,7 +435,7 @@ const rollbackCmd = new _commander.Command('rollback').description('Re-activate
|
|
|
339
435
|
}
|
|
340
436
|
});
|
|
341
437
|
|
|
342
|
-
// ── Command export
|
|
438
|
+
// ── Command export ────────────────────────────────────────────────────────────
|
|
343
439
|
|
|
344
440
|
const wizardCmd = new _commander.Command('wizard').description('Open the interactive TUI to browse and activate instruction versions').action(async () => {
|
|
345
441
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_commander","require","fs","_interopRequireWildcard","path","_inquirer","_interopRequireDefault","_chalk","_ora","_wixApi","_print","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","BASE","BOX_W","printHeader","title","pad","repeat","Math","max","length","console","log","chalk","cyan","bold","printDivider","hints","dim","truncate","text","clean","replace","trim","slice","showInstructionDetail","version","instructions","inst","find","clear","activeLabel","active","green","content","choices","name","value","red","action","inquirer","prompt","type","message","sp","ora","start","wixRequest","method","stop","err_","fail","error","runInstructionsWizard","process","on","exit","data","body","query","yellow","running","map","activeTag","label","white","Separator","pageSize","result","diffContent","a","b","v1","v2","aLines","split","bLines","out","maxLen","aLine","bLine","push","join","getActiveCmd","Command","description","spinner","instruction","listCmd","option","opts","items","filter","format","view","JSON","stringify","header","padEnd","ver","activateCmd","argument","success","getCmd","diffCmd","d1","d2","Promise","all","exportCmd","requiredOption","outPath","resolve","output","writeFileSync","rollbackCmd","previous","Number","sort","sp2","wizardCmd","msg","includes","instructionsCommand","exports","outputHelp","addCommand"],"sources":["../../../src/commands/instructions.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { wixRequest } from '../utils/wixApi';\nimport { success, error, spinner } from '../utils/print';\n\nconst BASE = '/web5/instructions/cli';\n\ninterface Instruction {\n id: string;\n revision: string;\n version: string;\n active?: boolean;\n content: string;\n createdDate?: string;\n updatedDate?: string;\n}\n\n// ── Wizard ────────────────────────────────────────────────────────────────\n\nconst BOX_W = 66;\n\nfunction printHeader(title: string): void {\n const pad = ' '.repeat(Math.max(0, BOX_W - title.length - 1));\n console.log(chalk.cyan('╔' + '═'.repeat(BOX_W) + '╗'));\n console.log(`${chalk.cyan('║')} ${chalk.bold(title)}${pad}${chalk.cyan('║')}`);\n console.log(chalk.cyan('╚' + '═'.repeat(BOX_W) + '╝'));\n console.log();\n}\n\nfunction printDivider(hints: string): void {\n console.log(chalk.dim('─'.repeat(BOX_W + 2)));\n console.log(chalk.dim(` ${hints}`));\n console.log();\n}\n\nfunction truncate(text: string, max = 48): string {\n const clean = text.replace(/\\n/g, ' ').trim();\n return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;\n}\n\n\nasync function showInstructionDetail(\n version: string,\n instructions: Instruction[],\n): Promise<'back' | 'exit' | 'refetch'> {\n const inst = instructions.find((i) => i.version === version);\n if (!inst) return 'back';\n\n console.clear();\n const activeLabel = inst.active ? chalk.green(' (active)') : '';\n printHeader(`📋 AI Instructions ❯ Version ${version}${activeLabel}`);\n\n console.log(chalk.dim(' Content:'));\n console.log(`\\n${inst.content}\\n`);\n\n const choices = [\n { name: ` ${chalk.dim('← Back')}`, value: 'back' },\n ...(!inst.active\n ? [{ name: ` ${chalk.cyan('⚡ Activate this version')}`, value: 'activate' }]\n : []),\n { name: ` ${chalk.red('✕ Exit')}`, value: 'exit' },\n ];\n\n const { action } = await inquirer.prompt<{ action: string }>([\n {\n type: 'list',\n name: 'action',\n message: chalk.bold('What would you like to do?'),\n choices,\n },\n ]);\n\n if (action === 'activate') {\n const sp = ora(`Activating version ${version}…`).start();\n try {\n await wixRequest({ path: `${BASE}/activate/${version}`, method: 'POST' });\n sp.stop();\n console.log(chalk.green(`✔ Version ${version} is now active\\n`));\n } catch (err_) {\n sp.fail('Activation failed');\n console.error(chalk.red((err_ as Error).message));\n }\n return 'refetch';\n }\n\n return action as 'back' | 'exit';\n}\n\nasync function runInstructionsWizard(): Promise<void> {\n process.on('SIGINT', () => {\n console.log(chalk.dim('\\nBye.\\n'));\n process.exit(0);\n });\n\n // Fetch once, keep local copy so activation updates in-memory\n const sp = ora('Fetching instructions…').start();\n let instructions: Instruction[] = [];\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n instructions = data.instructions ?? [];\n } catch (err_) {\n sp.fail('Failed to fetch instructions');\n console.error(chalk.red((err_ as Error).message));\n process.exit(1);\n }\n\n if (instructions.length === 0) {\n console.log(chalk.yellow('No instructions found.'));\n process.exit(0);\n }\n\n let running = true;\n while (running) {\n console.clear();\n printHeader(`📋 AI Instructions ${chalk.dim(`${instructions.length} versions`)}`);\n printDivider('[↑↓] Navigate [Enter] Select [Ctrl+C] Quit');\n\n const choices = [\n ...instructions.map((inst) => {\n const activeTag = inst.active\n ? chalk.green(' ✓ active')\n : chalk.dim(' ');\n const label = ` v${inst.version}${activeTag} ${chalk.white(truncate(inst.content))}`;\n return { name: label, value: inst.version };\n }),\n new inquirer.Separator('─'.repeat(BOX_W)),\n { name: ` ${chalk.red('✕ Exit')}`, value: '__exit__' },\n ];\n\n const { version } = await inquirer.prompt<{ version: string }>([\n {\n type: 'list',\n name: 'version',\n message: chalk.bold('Select a version'),\n choices,\n pageSize: 12,\n },\n ]);\n\n if (version === '__exit__') break;\n\n const result = await showInstructionDetail(version, instructions);\n if (result === 'exit') break;\n if (result === 'refetch') {\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n instructions = data.instructions ?? instructions;\n } catch {\n // keep existing data if re-fetch fails\n }\n }\n }\n\n console.clear();\n console.log(chalk.dim('Bye.\\n'));\n process.exit(0);\n}\n\n// ── Diff helper ───────────────────────────────────────────────────────────\n\nfunction diffContent(a: string, b: string, v1: string, v2: string): string {\n const aLines = a.split('\\n');\n const bLines = b.split('\\n');\n const out: string[] = [\n chalk.dim(`--- v${v1}`),\n chalk.dim(`+++ v${v2}`),\n '',\n ];\n\n const maxLen = Math.max(aLines.length, bLines.length);\n for (let i = 0; i < maxLen; i++) {\n const aLine = i < aLines.length ? aLines[i] : null;\n const bLine = i < bLines.length ? bLines[i] : null;\n if (aLine === bLine) {\n out.push(` ${aLine ?? ''}`);\n } else {\n if (aLine !== null) out.push(chalk.red(`- ${aLine}`));\n if (bLine !== null) out.push(chalk.green(`+ ${bLine}`));\n }\n }\n\n return out.join('\\n');\n}\n\n// ── Subcommands ───────────────────────────────────────────────────────────\n\nconst getActiveCmd = new Command('get-active')\n .description('Get the currently active instruction')\n .action(async () => {\n const sp = spinner('Fetching active instruction...');\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/active`,\n });\n sp.stop();\n const { version, content } = data.instruction;\n console.log(chalk.bold(`Version ${version}`));\n console.log();\n console.log(content);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst listCmd = new Command('list')\n .description('List all instructions')\n .option('--active', 'Show only the currently active instruction')\n .option('--format <format>', 'Output format: table (default) or json', 'table')\n .action(async (opts: { active?: boolean; format?: string }) => {\n const sp = spinner('Fetching instructions...');\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n\n let items = data.instructions ?? [];\n if (opts.active) {\n items = items.filter((i) => i.active);\n }\n\n if (opts.format === 'json') {\n const view = items.map(({ version, active, content }) => ({ version, active: active ?? false, content }));\n console.log(JSON.stringify(view, null, 2));\n } else {\n const header = `${'Version'.padEnd(10)}${'Active'.padEnd(10)}Content`;\n console.log(chalk.bold(header));\n console.log('─'.repeat(60));\n for (const i of items) {\n const ver = `v${i.version}`.padEnd(10);\n const active = (i.active ? '✓' : '').padEnd(10);\n const content = truncate(i.content, 40);\n console.log(`${chalk.cyan(ver)}${chalk.green(active)}${content}`);\n }\n }\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst activateCmd = new Command('set-active')\n .description('Set an instruction as active by version number')\n .argument('<version>', 'Version number to activate')\n .action(async (version: string) => {\n const sp = spinner(`Activating instruction version ${version}...`);\n try {\n await wixRequest<{\n instruction: Instruction;\n previousInstruction?: Instruction;\n }>({\n path: `${BASE}/activate/${version}`,\n method: 'POST',\n });\n sp.stop();\n success(`Activated version ${version}`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst getCmd = new Command('get')\n .description('Get an instruction by version number')\n .argument('<version>', 'Version number')\n .action(async (version: string) => {\n const sp = spinner(`Fetching instruction version ${version}...`);\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${version}`,\n });\n sp.stop();\n const { version: ver, content } = data.instruction;\n console.log(chalk.bold(`Version ${ver}`));\n console.log();\n console.log(content);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst diffCmd = new Command('diff')\n .description('Show line-by-line diff between two instruction versions')\n .argument('<v1>', 'First version number')\n .argument('<v2>', 'Second version number')\n .action(async (v1: string, v2: string) => {\n const sp = spinner(`Fetching versions ${v1} and ${v2}...`);\n try {\n const [d1, d2] = await Promise.all([\n wixRequest<{ instruction: Instruction }>({ path: `${BASE}/by-version/${v1}` }),\n wixRequest<{ instruction: Instruction }>({ path: `${BASE}/by-version/${v2}` }),\n ]);\n sp.stop();\n console.log(diffContent(d1.instruction.content, d2.instruction.content, v1, v2));\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst exportCmd = new Command('export')\n .description('Export an instruction version to a local file')\n .requiredOption('--version <v>', 'Version number to export')\n .requiredOption('--output <file>', 'Output file path')\n .action(async (opts: { version: string; output: string }) => {\n const sp = spinner(`Fetching instruction version ${opts.version}...`);\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${opts.version}`,\n });\n sp.stop();\n const outPath = path.resolve(opts.output);\n fs.writeFileSync(outPath, data.instruction.content, 'utf8');\n success(`Exported version ${opts.version} to ${outPath}`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst rollbackCmd = new Command('rollback')\n .description('Re-activate the version that was active before the current one')\n .action(async () => {\n const sp = spinner('Fetching instructions...');\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n\n const instructions = data.instructions ?? [];\n const active = instructions.find((i) => i.active);\n if (!active) {\n error('No active instruction found — nothing to roll back from.');\n process.exit(1);\n }\n\n const previous = instructions\n .filter((i) => !i.active && Number(i.version) < Number(active!.version))\n .sort((a, b) => Number(b.version) - Number(a.version))[0];\n\n if (!previous) {\n error(`No previous version found before v${active!.version}.`);\n process.exit(1);\n }\n\n const sp2 = spinner(`Rolling back to version ${previous.version}...`);\n await wixRequest({\n path: `${BASE}/activate/${previous.version}`,\n method: 'POST',\n });\n sp2.stop();\n success(`Rolled back to v${previous.version} (was v${active.version})`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\n// ── Command export ────────────────────────────────────────────────────────\n\nconst wizardCmd = new Command('wizard')\n .description('Open the interactive TUI to browse and activate instruction versions')\n .action(async () => {\n try {\n await runInstructionsWizard();\n } catch (err_) {\n const msg = (err_ as Error).message ?? '';\n if (msg.includes('force closed') || msg.includes('User force')) {\n console.log(chalk.dim('\\nBye.'));\n process.exit(0);\n }\n console.error(chalk.red('Unexpected error: ' + msg));\n process.exit(1);\n }\n });\n\nexport const instructionsCommand = new Command('instructions')\n .description('Manage AI instructions')\n .action(function (this: Command) {\n this.outputHelp();\n })\n .addCommand(wizardCmd)\n .addCommand(getActiveCmd)\n .addCommand(listCmd)\n .addCommand(activateCmd)\n .addCommand(getCmd)\n .addCommand(diffCmd)\n .addCommand(exportCmd)\n .addCommand(rollbackCmd);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_commander","require","fs","_interopRequireWildcard","path","_inquirer","_interopRequireDefault","_chalk","_ora","_wixApi","_print","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","BASE","BOX_W","printHeader","title","pad","repeat","Math","max","length","console","log","chalk","cyan","bold","printDivider","hints","dim","truncate","text","clean","replace","trim","slice","printInstructionContent","inst","intents","keys","k","v","entries","semantics","actions","action","desc","description","name","p","params","preview","values","join","optTag","optional","param","content","diffLines","aStr","bStr","aLines","split","bLines","out","maxLen","aLine","bLine","push","red","green","formatKV","obj","map","formatActions","a","header","diffInstructions","b","v1","v2","sections","label","showInstructionDetail","version","instructions","find","clear","activeLabel","active","choices","value","inquirer","prompt","type","message","sp","ora","start","wixRequest","method","stop","err_","fail","error","runInstructionsWizard","process","on","exit","data","body","query","yellow","running","activeTag","white","Separator","pageSize","result","getActiveCmd","Command","spinner","instruction","listCmd","option","opts","items","filter","format","view","JSON","stringify","padEnd","ver","activateCmd","argument","success","getCmd","diffCmd","d1","d2","Promise","all","exportCmd","requiredOption","outContent","outPath","resolve","output","writeFileSync","rollbackCmd","previous","Number","sort","sp2","wizardCmd","msg","includes","instructionsCommand","exports","outputHelp","addCommand"],"sources":["../../../src/commands/instructions.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { wixRequest } from '../utils/wixApi';\nimport { success, error, spinner } from '../utils/print';\n\nconst BASE = '/web5/instructions/cli';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\ninterface ActionParam {\n param: string;\n values: string[];\n optional?: boolean;\n description?: string;\n}\n\ninterface ActionItem {\n name: string;\n description?: string;\n params: ActionParam[];\n}\n\ninterface Instruction {\n id: string;\n revision: string;\n version: string;\n active?: boolean;\n intents: Record<string, string>;\n semantics: Record<string, string>;\n actions: ActionItem[];\n content: string;\n created_date?: string;\n updated_date?: string;\n}\n\n// ── Display helpers ───────────────────────────────────────────────────────────\n\nconst BOX_W = 66;\n\nfunction printHeader(title: string): void {\n const pad = ' '.repeat(Math.max(0, BOX_W - title.length - 1));\n console.log(chalk.cyan('╔' + '═'.repeat(BOX_W) + '╗'));\n console.log(\n `${chalk.cyan('║')} ${chalk.bold(title)}${pad}${chalk.cyan('║')}`,\n );\n console.log(chalk.cyan('╚' + '═'.repeat(BOX_W) + '╝'));\n console.log();\n}\n\nfunction printDivider(hints: string): void {\n console.log(chalk.dim('─'.repeat(BOX_W + 2)));\n console.log(chalk.dim(` ${hints}`));\n console.log();\n}\n\nfunction truncate(text: string, max = 48): string {\n const clean = (text ?? '').replace(/\\n/g, ' ').trim();\n return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;\n}\n\nfunction printInstructionContent(inst: Instruction): void {\n // Intents\n console.log(chalk.bold(' Intents'));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n const intents = inst.intents ?? {};\n if (Object.keys(intents).length === 0) {\n console.log(chalk.dim(' (none)'));\n } else {\n for (const [k, v] of Object.entries(intents)) {\n console.log(` ${chalk.cyan(k)}: ${v}`);\n }\n }\n console.log();\n\n // Semantics\n console.log(chalk.bold(' Semantics'));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n const semantics = inst.semantics ?? {};\n if (Object.keys(semantics).length === 0) {\n console.log(chalk.dim(' (none)'));\n } else {\n for (const [k, v] of Object.entries(semantics)) {\n console.log(` ${chalk.cyan(k)}: ${v}`);\n }\n }\n console.log();\n\n // Actions\n console.log(chalk.bold(' Actions'));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n const actions = inst.actions ?? [];\n if (actions.length === 0) {\n console.log(chalk.dim(' (none)'));\n } else {\n for (const action of actions) {\n const desc = action.description\n ? chalk.dim(` — ${action.description}`)\n : '';\n console.log(` ${chalk.cyan('• ' + action.name)}${desc}`);\n for (const p of action.params ?? []) {\n const preview =\n p.values.length > 0\n ? chalk.dim(\n ` [${p.values.slice(0, 3).join(', ')}${\n p.values.length > 3 ? ', …' : ''\n }]`,\n )\n : '';\n const optTag = p.optional ? chalk.dim(' (optional)') : '';\n console.log(` ${p.param}${preview}${optTag}`);\n }\n }\n }\n console.log();\n\n // Free-text instruction\n console.log(chalk.bold(' Instruction'));\n console.log(chalk.dim(' ' + '─'.repeat(40)));\n console.log(` ${inst.content ?? ''}`);\n console.log();\n}\n\n// ── Diff helper ───────────────────────────────────────────────────────────────\n\nfunction diffLines(aStr: string, bStr: string): string {\n const aLines = aStr.split('\\n');\n const bLines = bStr.split('\\n');\n const out: string[] = [];\n const maxLen = Math.max(aLines.length, bLines.length);\n for (let i = 0; i < maxLen; i++) {\n const aLine = i < aLines.length ? aLines[i] : null;\n const bLine = i < bLines.length ? bLines[i] : null;\n if (aLine === bLine) {\n out.push(` ${aLine ?? ''}`);\n } else {\n if (aLine !== null) {\n out.push(chalk.red(`- ${aLine}`));\n }\n if (bLine !== null) {\n out.push(chalk.green(`+ ${bLine}`));\n }\n }\n }\n return out.join('\\n');\n}\n\nfunction formatKV(obj: Record<string, string>): string {\n return Object.entries(obj ?? {})\n .map(([k, v]) => `${k}: ${v}`)\n .join('\\n');\n}\n\nfunction formatActions(actions: ActionItem[]): string {\n return (actions ?? [])\n .map((a) => {\n const params = (a.params ?? [])\n .map((p) => ` ${p.param}: [${p.values.join(', ')}]`)\n .join('\\n');\n const header = a.description ? `${a.name} — ${a.description}` : a.name;\n return params ? `${header}\\n${params}` : header;\n })\n .join('\\n\\n');\n}\n\nfunction diffInstructions(\n a: Instruction,\n b: Instruction,\n v1: string,\n v2: string,\n): string {\n const out: string[] = [chalk.dim(`--- v${v1}`), chalk.dim(`+++ v${v2}`), ''];\n\n const sections: [string, string, string][] = [\n ['Intents', formatKV(a.intents), formatKV(b.intents)],\n ['Semantics', formatKV(a.semantics), formatKV(b.semantics)],\n ['Actions', formatActions(a.actions), formatActions(b.actions)],\n ['Instruction', a.content ?? '', b.content ?? ''],\n ];\n\n for (const [label, aStr, bStr] of sections) {\n out.push(chalk.bold(`── ${label} ──`));\n if (aStr === bStr) {\n out.push(chalk.dim(' (no changes)'));\n } else {\n out.push(diffLines(aStr, bStr));\n }\n out.push('');\n }\n\n return out.join('\\n');\n}\n\n// ── Wizard ────────────────────────────────────────────────────────────────────\n\nasync function showInstructionDetail(\n version: string,\n instructions: Instruction[],\n): Promise<'back' | 'exit' | 'refetch'> {\n const inst = instructions.find((i) => i.version === version);\n if (!inst) {\n return 'back';\n }\n\n console.clear();\n const activeLabel = inst.active ? chalk.green(' (active)') : '';\n printHeader(`📋 AI Instructions ❯ Version ${version}${activeLabel}`);\n\n printInstructionContent(inst);\n\n const choices = [\n { name: ` ${chalk.dim('← Back')}`, value: 'back' },\n ...(!inst.active\n ? [\n {\n name: ` ${chalk.cyan('⚡ Activate this version')}`,\n value: 'activate',\n },\n ]\n : []),\n { name: ` ${chalk.red('✕ Exit')}`, value: 'exit' },\n ];\n\n const { action } = await inquirer.prompt<{ action: string }>([\n {\n type: 'list',\n name: 'action',\n message: chalk.bold('What would you like to do?'),\n choices,\n },\n ]);\n\n if (action === 'activate') {\n const sp = ora(`Activating version ${version}…`).start();\n try {\n await wixRequest({ path: `${BASE}/activate/${version}`, method: 'POST' });\n sp.stop();\n console.log(chalk.green(`✔ Version ${version} is now active\\n`));\n } catch (err_) {\n sp.fail('Activation failed');\n console.error(chalk.red((err_ as Error).message));\n }\n return 'refetch';\n }\n\n return action as 'back' | 'exit';\n}\n\nasync function runInstructionsWizard(): Promise<void> {\n process.on('SIGINT', () => {\n console.log(chalk.dim('\\nBye.\\n'));\n process.exit(0);\n });\n\n const sp = ora('Fetching instructions…').start();\n let instructions: Instruction[] = [];\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n instructions = data.instructions ?? [];\n } catch (err_) {\n sp.fail('Failed to fetch instructions');\n console.error(chalk.red((err_ as Error).message));\n process.exit(1);\n }\n\n if (instructions.length === 0) {\n console.log(chalk.yellow('No instructions found.'));\n process.exit(0);\n }\n\n const running = true;\n while (running) {\n console.clear();\n printHeader(\n `📋 AI Instructions ${chalk.dim(`${instructions.length} versions`)}`,\n );\n printDivider('[↑↓] Navigate [Enter] Select [Ctrl+C] Quit');\n\n const choices = [\n ...instructions.map((inst) => {\n const activeTag = inst.active\n ? chalk.green(' ✓ active')\n : chalk.dim(' ');\n const label = ` v${inst.version}${activeTag} ${chalk.white(\n truncate(inst.content),\n )}`;\n return { name: label, value: inst.version };\n }),\n new inquirer.Separator('─'.repeat(BOX_W)),\n { name: ` ${chalk.red('✕ Exit')}`, value: '__exit__' },\n ];\n\n const { version } = await inquirer.prompt<{ version: string }>([\n {\n type: 'list',\n name: 'version',\n message: chalk.bold('Select a version'),\n choices,\n pageSize: 12,\n },\n ]);\n\n if (version === '__exit__') {\n break;\n }\n\n const result = await showInstructionDetail(version, instructions);\n if (result === 'exit') {\n break;\n }\n if (result === 'refetch') {\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n instructions = data.instructions ?? instructions;\n } catch {\n // keep existing data if re-fetch fails\n }\n }\n }\n\n console.clear();\n console.log(chalk.dim('Bye.\\n'));\n process.exit(0);\n}\n\n// ── Subcommands ───────────────────────────────────────────────────────────────\n\nconst getActiveCmd = new Command('get-active')\n .description('Get the currently active instruction')\n .action(async () => {\n const sp = spinner('Fetching active instruction...');\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/active`,\n });\n sp.stop();\n const inst = data.instruction;\n console.log(chalk.bold(`Version ${inst.version}`));\n console.log();\n printInstructionContent(inst);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst listCmd = new Command('list')\n .description('List all instructions')\n .option('--active', 'Show only the currently active instruction')\n .option(\n '--format <format>',\n 'Output format: table (default) or json',\n 'table',\n )\n .action(async (opts: { active?: boolean; format?: string }) => {\n const sp = spinner('Fetching instructions...');\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n\n let items = data.instructions ?? [];\n if (opts.active) {\n items = items.filter((i) => i.active);\n }\n\n if (opts.format === 'json') {\n const view = items.map(\n ({ version, active, intents, semantics, actions, content }) => ({\n version,\n active: active ?? false,\n intents,\n semantics,\n actions,\n content,\n }),\n );\n console.log(JSON.stringify(view, null, 2));\n } else {\n const header = `${'Version'.padEnd(10)}${'Active'.padEnd(\n 10,\n )}Instruction`;\n console.log(chalk.bold(header));\n console.log('─'.repeat(60));\n for (const i of items) {\n const ver = `v${i.version}`.padEnd(10);\n const active = (i.active ? '✓' : '').padEnd(10);\n const preview = truncate(i.content, 40);\n console.log(`${chalk.cyan(ver)}${chalk.green(active)}${preview}`);\n }\n }\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst activateCmd = new Command('set-active')\n .description('Set an instruction as active by version number')\n .argument('<version>', 'Version number to activate')\n .action(async (version: string) => {\n const sp = spinner(`Activating instruction version ${version}...`);\n try {\n await wixRequest<{\n instruction: Instruction;\n previousInstruction?: Instruction;\n }>({\n path: `${BASE}/activate/${version}`,\n method: 'POST',\n });\n sp.stop();\n success(`Activated version ${version}`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst getCmd = new Command('get')\n .description('Get an instruction by version number')\n .argument('<version>', 'Version number')\n .action(async (version: string) => {\n const sp = spinner(`Fetching instruction version ${version}...`);\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${version}`,\n });\n sp.stop();\n const inst = data.instruction;\n console.log(chalk.bold(`Version ${inst.version}`));\n console.log();\n printInstructionContent(inst);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst diffCmd = new Command('diff')\n .description('Show diff between two instruction versions across all sections')\n .argument('<v1>', 'First version number')\n .argument('<v2>', 'Second version number')\n .action(async (v1: string, v2: string) => {\n const sp = spinner(`Fetching versions ${v1} and ${v2}...`);\n try {\n const [d1, d2] = await Promise.all([\n wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${v1}`,\n }),\n wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${v2}`,\n }),\n ]);\n sp.stop();\n console.log(diffInstructions(d1.instruction, d2.instruction, v1, v2));\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst exportCmd = new Command('export')\n .description('Export an instruction version to a local file')\n .requiredOption('--version <v>', 'Version number to export')\n .requiredOption('--output <file>', 'Output file path (.json)')\n .action(async (opts: { version: string; output: string }) => {\n const sp = spinner(`Fetching instruction version ${opts.version}...`);\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: `${BASE}/by-version/${opts.version}`,\n });\n sp.stop();\n const inst = data.instruction;\n const outContent = JSON.stringify(\n {\n intents: inst.intents,\n semantics: inst.semantics,\n actions: inst.actions,\n content: inst.content,\n },\n null,\n 2,\n );\n const outPath = path.resolve(opts.output);\n fs.writeFileSync(outPath, outContent, 'utf8');\n success(`Exported version ${opts.version} to ${outPath}`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\nconst rollbackCmd = new Command('rollback')\n .description('Re-activate the version that was active before the current one')\n .action(async () => {\n const sp = spinner('Fetching instructions...');\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: `${BASE}/query`,\n method: 'POST',\n body: { query: {} },\n });\n sp.stop();\n\n const instructions = data.instructions ?? [];\n const active = instructions.find((i) => i.active);\n if (!active) {\n error('No active instruction found — nothing to roll back from.');\n process.exit(1);\n }\n\n const previous = instructions\n .filter((i) => !i.active && Number(i.version) < Number(active!.version))\n .sort((a, b) => Number(b.version) - Number(a.version))[0];\n\n if (!previous) {\n error(`No previous version found before v${active!.version}.`);\n process.exit(1);\n }\n\n const sp2 = spinner(`Rolling back to version ${previous.version}...`);\n await wixRequest({\n path: `${BASE}/activate/${previous.version}`,\n method: 'POST',\n });\n sp2.stop();\n success(`Rolled back to v${previous.version} (was v${active.version})`);\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\n// ── Command export ────────────────────────────────────────────────────────────\n\nconst wizardCmd = new Command('wizard')\n .description(\n 'Open the interactive TUI to browse and activate instruction versions',\n )\n .action(async () => {\n try {\n await runInstructionsWizard();\n } catch (err_) {\n const msg = (err_ as Error).message ?? '';\n if (msg.includes('force closed') || msg.includes('User force')) {\n console.log(chalk.dim('\\nBye.'));\n process.exit(0);\n }\n console.error(chalk.red('Unexpected error: ' + msg));\n process.exit(1);\n }\n });\n\nexport const instructionsCommand = new Command('instructions')\n .description('Manage AI instructions')\n .action(function (this: Command) {\n this.outputHelp();\n })\n .addCommand(wizardCmd)\n .addCommand(getActiveCmd)\n .addCommand(listCmd)\n .addCommand(activateCmd)\n .addCommand(getCmd)\n .addCommand(diffCmd)\n .addCommand(exportCmd)\n .addCommand(rollbackCmd);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -37,8 +37,12 @@ const statusCmd = new _commander.Command('status').description('Show current aut
|
|
|
37
37
|
}
|
|
38
38
|
(0, _print.success)('Authenticated');
|
|
39
39
|
(0, _print.info)(`Method: ${authMethod}`);
|
|
40
|
-
if (siteId)
|
|
41
|
-
|
|
40
|
+
if (siteId) {
|
|
41
|
+
(0, _print.info)(`Site ID: ${siteId}`);
|
|
42
|
+
}
|
|
43
|
+
if (expiresAt) {
|
|
44
|
+
(0, _print.info)(`Expires: ${expiresAt}${expired ? ' (expired)' : ''}`);
|
|
45
|
+
}
|
|
42
46
|
} catch (err_) {
|
|
43
47
|
(0, _print.error)(err_ instanceof Error ? err_.message : String(err_));
|
|
44
48
|
process.exit(1);
|
|
@@ -47,9 +51,9 @@ const statusCmd = new _commander.Command('status').description('Show current aut
|
|
|
47
51
|
|
|
48
52
|
// ── login switch-site ─────────────────────────────────────────────────────────
|
|
49
53
|
|
|
50
|
-
const switchSiteCmd = new _commander.Command('switch-site').description('
|
|
54
|
+
const switchSiteCmd = new _commander.Command('switch-site').description('Switch to a different web5 site (interactive picker)').action(async () => {
|
|
51
55
|
try {
|
|
52
|
-
await (0, _auth.switchSite)(
|
|
56
|
+
await (0, _auth.switchSite)();
|
|
53
57
|
} catch (err_) {
|
|
54
58
|
(0, _print.error)(err_ instanceof Error ? err_.message : String(err_));
|
|
55
59
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_commander","require","_auth","_secretStore","_print","statusCmd","Command","description","action","creds","readCredentials","isJsonMode","console","log","JSON","stringify","authenticated","info","authMethod","api_key","siteId","site_id","expiresAt","expires_at","Date","toISOString","expired","now","success","err_","error","Error","message","String","process","exit","switchSiteCmd","
|
|
1
|
+
{"version":3,"names":["_commander","require","_auth","_secretStore","_print","statusCmd","Command","description","action","creds","readCredentials","isJsonMode","console","log","JSON","stringify","authenticated","info","authMethod","api_key","siteId","site_id","expiresAt","expires_at","Date","toISOString","expired","now","success","err_","error","Error","message","String","process","exit","switchSiteCmd","switchSite","loginCommand","exports","option","opts","apiKey","env","WEB5_API_KEY","login","logs","noBrowser","browser","addCommand"],"sources":["../../../src/commands/login.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { login, switchSite } from '../auth';\nimport { readCredentials } from '../auth/secretStore';\nimport { error, success, info, isJsonMode } from '../utils/print';\n\n// ── login status ──────────────────────────────────────────────────────────────\n\nconst statusCmd = new Command('status')\n .description('Show current authentication status')\n .action(async () => {\n try {\n const creds = await readCredentials();\n if (!creds) {\n if (isJsonMode()) {\n console.log(JSON.stringify({ authenticated: false }));\n } else {\n info('Not authenticated. Run `web5 login` to sign in.');\n }\n return;\n }\n\n const authMethod = creds.api_key ? 'api-key' : 'device-flow';\n const siteId = creds.site_id ?? null;\n const expiresAt = creds.expires_at\n ? new Date(creds.expires_at).toISOString()\n : null;\n const expired = creds.expires_at ? creds.expires_at < Date.now() : false;\n\n if (isJsonMode()) {\n console.log(\n JSON.stringify({\n authenticated: true,\n authMethod,\n siteId,\n expiresAt,\n expired,\n }),\n );\n return;\n }\n\n success('Authenticated');\n info(`Method: ${authMethod}`);\n if (siteId) {\n info(`Site ID: ${siteId}`);\n }\n if (expiresAt) {\n info(`Expires: ${expiresAt}${expired ? ' (expired)' : ''}`);\n }\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n\n// ── login switch-site ─────────────────────────────────────────────────────────\n\nconst switchSiteCmd = new Command('switch-site')\n .description('Switch to a different web5 site (interactive picker)')\n .action(async () => {\n try {\n await switchSite();\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n\n// ── login (root) ──────────────────────────────────────────────────────────────\n\nexport const loginCommand = new Command('login')\n .description('Authenticate with the Web5 platform')\n .option(\n '--api-key <key>',\n 'Authenticate using an API key instead of browser flow',\n )\n .option('--logs', 'Enable verbose debug logging for the auth flow')\n .option(\n '--site-id <msid>',\n 'Site ID (msid) to scope the session to (skips interactive prompt)',\n )\n .option(\n '--no-browser',\n 'Skip opening the browser — print the verification URL instead',\n )\n .action(\n async (opts: {\n apiKey?: string;\n logs?: boolean;\n siteId?: string;\n browser: boolean;\n }) => {\n try {\n const apiKey = process.env.WEB5_API_KEY ?? opts.apiKey;\n await login(apiKey, opts.logs ?? false, {\n siteId: opts.siteId,\n noBrowser: !opts.browser,\n });\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n },\n )\n .addCommand(statusCmd)\n .addCommand(switchSiteCmd);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_commander","require","path","_interopRequireWildcard","fs","http","_child_process","_print","_project","_bundle","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_PORT","MIME_TYPES","startServer","distDir","corsOrigin","server","createServer","req","res","setHeader","method","writeHead","end","urlPath","url","filePath","join","startsWith","existsSync","statSync","isDirectory","ext","extname","contentType","createReadStream","pipe","serveCommand","exports","Command","description","option","String","action","opts","projectRoot","findProjectRoot","process","cwd","error","exit","port","parseInt","isNaN","bundle","runBundle","watch","viteBin","watcher","spawn","shell","stdio","on","err_","message","listen","files","readdirSync","isJsonMode","console","log","JSON","stringify","map","success","file","info","open","openPkg","Promise","resolve","then","Error"],"sources":["../../../src/commands/serve.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as http from 'http';\nimport { spawn } from 'child_process';\nimport { success, error, info, isJsonMode } from '../utils/print';\nimport { findProjectRoot } from '../utils/project';\nimport { runBundle } from './bundle';\n\nconst DEFAULT_PORT = 4001;\n\nconst MIME_TYPES: Record<string, string> = {\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.json': 'application/json',\n '.map': 'application/json',\n};\n\nfunction startServer(\n distDir: string,\n corsOrigin: string,\n): http.Server {\n const server = http.createServer((req, res) => {\n res.setHeader('Access-Control-Allow-Origin', corsOrigin);\n res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', '*');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n const urlPath = req.url === '/' ? '' : req.url ?? '';\n const filePath = path.join(distDir, urlPath);\n\n // Prevent path traversal outside distDir\n if (!filePath.startsWith(distDir)) {\n res.writeHead(403);\n res.end('Forbidden');\n return;\n }\n\n if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {\n res.writeHead(404);\n res.end('Not found');\n return;\n }\n\n const ext = path.extname(filePath);\n const contentType = MIME_TYPES[ext] ?? 'application/octet-stream';\n res.setHeader('Content-Type', contentType);\n res.writeHead(200);\n fs.createReadStream(filePath).pipe(res);\n });\n\n return server;\n}\n\nexport const serveCommand = new Command('serve')\n .description('Bundle components and serve them on http://localhost:<port> with CORS enabled')\n .option('--port <n>', 'Port to listen on', String(DEFAULT_PORT))\n .option('--no-bundle', 'Serve existing dist/cdn/ without rebuilding')\n .option('--watch', 'Re-bundle on source changes (starts vite --watch alongside server)')\n .option('--open', 'Open the served URL in your browser after start')\n .option('--cors-origin <origin>', 'Restrict CORS Allow-Origin header', '*')\n .action(async (opts: {\n port: string;\n bundle: boolean;\n watch?: boolean;\n open?: boolean;\n corsOrigin: string;\n }) => {\n try {\n const projectRoot = findProjectRoot(process.cwd());\n if (!projectRoot) {\n error(\n 'No web5.config.json found. Run this command from within a Web5 project.',\n );\n process.exit(1);\n }\n\n const port = parseInt(opts.port, 10);\n if (isNaN(port) || port < 1 || port > 65535) {\n error(`Invalid port: ${opts.port}`);\n process.exit(1);\n }\n\n const distDir = path.join(projectRoot, 'dist', 'cdn');\n\n // ── Bundle (unless --no-bundle) ─────────────────────────────────────────\n if (opts.bundle !== false) {\n await runBundle(projectRoot);\n }\n\n if (!fs.existsSync(distDir)) {\n error(\n `Bundle output not found at ${distDir}. Run \\`web5 bundle\\` first or remove --no-bundle.`,\n );\n process.exit(1);\n }\n\n // ── Watch mode: spawn vite --watch in background ────────────────────────\n if (opts.watch) {\n const viteBin = path.join(projectRoot, 'node_modules', '.bin', 'vite');\n if (!fs.existsSync(viteBin)) {\n error('vite not found. Run `npm install` in your project first.');\n process.exit(1);\n }\n const watcher = spawn(\n `\"${viteBin}\"`,\n ['build', '--config', 'src/vite.cdn.config.ts', '--watch'],\n { cwd: projectRoot, shell: true, stdio: 'inherit' },\n );\n watcher.on('error', (err_) => error(`Watch process error: ${err_.message}`));\n }\n\n // ── Start HTTP server ───────────────────────────────────────────────────\n const server = startServer(distDir, opts.corsOrigin);\n const url = `http://localhost:${port}`;\n\n server.listen(port, async () => {\n const files = fs.readdirSync(distDir);\n\n if (isJsonMode()) {\n console.log(JSON.stringify({ url, port, files: files.map((f) => `${url}/${f}`) }));\n } else {\n success(`Serving on ${url}`);\n for (const file of files) {\n info(` ${url}/${file}`);\n }\n if (opts.watch) {\n info('Watch mode active — rebuilds automatically on file changes.');\n }\n info('Press Ctrl+C to stop.');\n }\n\n if (opts.open) {\n const openPkg = (await import('open')).default;\n await openPkg(url);\n }\n });\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_commander","require","path","_interopRequireWildcard","fs","http","_child_process","_print","_project","_bundle","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_PORT","MIME_TYPES","startServer","distDir","corsOrigin","server","createServer","req","res","setHeader","method","writeHead","end","urlPath","url","filePath","join","startsWith","existsSync","statSync","isDirectory","ext","extname","contentType","createReadStream","pipe","serveCommand","exports","Command","description","option","String","action","opts","projectRoot","findProjectRoot","process","cwd","error","exit","port","parseInt","isNaN","bundle","runBundle","watch","viteBin","watcher","spawn","shell","stdio","on","err_","message","listen","files","readdirSync","isJsonMode","console","log","JSON","stringify","map","success","file","info","open","openPkg","Promise","resolve","then","Error"],"sources":["../../../src/commands/serve.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport * as http from 'http';\nimport { spawn } from 'child_process';\nimport { success, error, info, isJsonMode } from '../utils/print';\nimport { findProjectRoot } from '../utils/project';\nimport { runBundle } from './bundle';\n\nconst DEFAULT_PORT = 4001;\n\nconst MIME_TYPES: Record<string, string> = {\n '.js': 'application/javascript',\n '.css': 'text/css',\n '.json': 'application/json',\n '.map': 'application/json',\n};\n\nfunction startServer(distDir: string, corsOrigin: string): http.Server {\n const server = http.createServer((req, res) => {\n res.setHeader('Access-Control-Allow-Origin', corsOrigin);\n res.setHeader('Access-Control-Allow-Methods', 'GET, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', '*');\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n const urlPath = req.url === '/' ? '' : req.url ?? '';\n const filePath = path.join(distDir, urlPath);\n\n // Prevent path traversal outside distDir\n if (!filePath.startsWith(distDir)) {\n res.writeHead(403);\n res.end('Forbidden');\n return;\n }\n\n if (!fs.existsSync(filePath) || fs.statSync(filePath).isDirectory()) {\n res.writeHead(404);\n res.end('Not found');\n return;\n }\n\n const ext = path.extname(filePath);\n const contentType = MIME_TYPES[ext] ?? 'application/octet-stream';\n res.setHeader('Content-Type', contentType);\n res.writeHead(200);\n fs.createReadStream(filePath).pipe(res);\n });\n\n return server;\n}\n\nexport const serveCommand = new Command('serve')\n .description(\n 'Bundle components and serve them on http://localhost:<port> with CORS enabled',\n )\n .option('--port <n>', 'Port to listen on', String(DEFAULT_PORT))\n .option('--no-bundle', 'Serve existing dist/cdn/ without rebuilding')\n .option(\n '--watch',\n 'Re-bundle on source changes (starts vite --watch alongside server)',\n )\n .option('--open', 'Open the served URL in your browser after start')\n .option('--cors-origin <origin>', 'Restrict CORS Allow-Origin header', '*')\n .action(\n async (opts: {\n port: string;\n bundle: boolean;\n watch?: boolean;\n open?: boolean;\n corsOrigin: string;\n }) => {\n try {\n const projectRoot = findProjectRoot(process.cwd());\n if (!projectRoot) {\n error(\n 'No web5.config.json found. Run this command from within a Web5 project.',\n );\n process.exit(1);\n }\n\n const port = parseInt(opts.port, 10);\n if (isNaN(port) || port < 1 || port > 65535) {\n error(`Invalid port: ${opts.port}`);\n process.exit(1);\n }\n\n const distDir = path.join(projectRoot, 'dist', 'cdn');\n\n // ── Bundle (unless --no-bundle) ─────────────────────────────────────────\n if (opts.bundle !== false) {\n await runBundle(projectRoot);\n }\n\n if (!fs.existsSync(distDir)) {\n error(\n `Bundle output not found at ${distDir}. Run \\`web5 bundle\\` first or remove --no-bundle.`,\n );\n process.exit(1);\n }\n\n // ── Watch mode: spawn vite --watch in background ────────────────────────\n if (opts.watch) {\n const viteBin = path.join(\n projectRoot,\n 'node_modules',\n '.bin',\n 'vite',\n );\n if (!fs.existsSync(viteBin)) {\n error('vite not found. Run `npm install` in your project first.');\n process.exit(1);\n }\n const watcher = spawn(\n `\"${viteBin}\"`,\n ['build', '--config', 'src/vite.cdn.config.ts', '--watch'],\n { cwd: projectRoot, shell: true, stdio: 'inherit' },\n );\n watcher.on('error', (err_) =>\n error(`Watch process error: ${err_.message}`),\n );\n }\n\n // ── Start HTTP server ───────────────────────────────────────────────────\n const server = startServer(distDir, opts.corsOrigin);\n const url = `http://localhost:${port}`;\n\n server.listen(port, async () => {\n const files = fs.readdirSync(distDir);\n\n if (isJsonMode()) {\n console.log(\n JSON.stringify({\n url,\n port,\n files: files.map((f) => `${url}/${f}`),\n }),\n );\n } else {\n success(`Serving on ${url}`);\n for (const file of files) {\n info(` ${url}/${file}`);\n }\n if (opts.watch) {\n info(\n 'Watch mode active — rebuilds automatically on file changes.',\n );\n }\n info('Press Ctrl+C to stop.');\n }\n\n if (opts.open) {\n const openPkg = (await import('open')).default;\n await openPkg(url);\n }\n });\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n },\n );\n"],"mappings":"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","ignoreList":[]}
|