@wix/web50-cli 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/bin/web5.js +1 -2
  2. package/dist/cjs/auth/deviceFlow.js +96 -17
  3. package/dist/cjs/auth/deviceFlow.js.map +1 -1
  4. package/dist/cjs/auth/index.js +40 -10
  5. package/dist/cjs/auth/index.js.map +1 -1
  6. package/dist/cjs/cli.js +3 -3
  7. package/dist/cjs/cli.js.map +1 -1
  8. package/dist/cjs/commands/bundle.js +12 -4
  9. package/dist/cjs/commands/bundle.js.map +1 -1
  10. package/dist/cjs/commands/conversation.js.map +1 -1
  11. package/dist/cjs/commands/conversationWizard.js +36 -12
  12. package/dist/cjs/commands/conversationWizard.js.map +1 -1
  13. package/dist/cjs/commands/deploy.js +55 -10
  14. package/dist/cjs/commands/deploy.js.map +1 -1
  15. package/dist/cjs/commands/ecom.js +239 -0
  16. package/dist/cjs/commands/ecom.js.map +1 -0
  17. package/dist/cjs/commands/embed.js +41 -52
  18. package/dist/cjs/commands/embed.js.map +1 -1
  19. package/dist/cjs/commands/init.js +34 -3
  20. package/dist/cjs/commands/init.js.map +1 -1
  21. package/dist/cjs/commands/instructions.js +147 -51
  22. package/dist/cjs/commands/instructions.js.map +1 -1
  23. package/dist/cjs/commands/login.js +8 -4
  24. package/dist/cjs/commands/login.js.map +1 -1
  25. package/dist/cjs/commands/serve.js.map +1 -1
  26. package/dist/cjs/commands/validate.js +368 -16
  27. package/dist/cjs/commands/validate.js.map +1 -1
  28. package/dist/cjs/commands/whoami.js.map +1 -1
  29. package/dist/cjs/templates/aiInstructionsSchema.js +5 -1
  30. package/dist/cjs/templates/aiInstructionsSchema.js.map +1 -1
  31. package/dist/cjs/templates/cmsMappingSchema.js +132 -0
  32. package/dist/cjs/templates/cmsMappingSchema.js.map +1 -0
  33. package/dist/cjs/templates/embedDocs.js +488 -0
  34. package/dist/cjs/templates/embedDocs.js.map +1 -0
  35. package/dist/cjs/utils/project.js +13 -0
  36. package/dist/cjs/utils/project.js.map +1 -1
  37. package/dist/cjs/utils/wixApi.js +3 -1
  38. package/dist/cjs/utils/wixApi.js.map +1 -1
  39. package/dist/esm/auth/deviceFlow.js +95 -17
  40. package/dist/esm/auth/deviceFlow.js.map +1 -1
  41. package/dist/esm/auth/index.js +40 -11
  42. package/dist/esm/auth/index.js.map +1 -1
  43. package/dist/esm/cli.js +3 -3
  44. package/dist/esm/cli.js.map +1 -1
  45. package/dist/esm/commands/bundle.js +12 -4
  46. package/dist/esm/commands/bundle.js.map +1 -1
  47. package/dist/esm/commands/conversation.js.map +1 -1
  48. package/dist/esm/commands/conversationWizard.js +36 -12
  49. package/dist/esm/commands/conversationWizard.js.map +1 -1
  50. package/dist/esm/commands/deploy.js +55 -10
  51. package/dist/esm/commands/deploy.js.map +1 -1
  52. package/dist/esm/commands/ecom.js +234 -0
  53. package/dist/esm/commands/ecom.js.map +1 -0
  54. package/dist/esm/commands/embed.js +42 -52
  55. package/dist/esm/commands/embed.js.map +1 -1
  56. package/dist/esm/commands/init.js +34 -3
  57. package/dist/esm/commands/init.js.map +1 -1
  58. package/dist/esm/commands/instructions.js +152 -53
  59. package/dist/esm/commands/instructions.js.map +1 -1
  60. package/dist/esm/commands/login.js +8 -4
  61. package/dist/esm/commands/login.js.map +1 -1
  62. package/dist/esm/commands/serve.js.map +1 -1
  63. package/dist/esm/commands/validate.js +373 -19
  64. package/dist/esm/commands/validate.js.map +1 -1
  65. package/dist/esm/commands/whoami.js.map +1 -1
  66. package/dist/esm/templates/aiInstructionsSchema.js +5 -1
  67. package/dist/esm/templates/aiInstructionsSchema.js.map +1 -1
  68. package/dist/esm/templates/cmsMappingSchema.js +128 -0
  69. package/dist/esm/templates/cmsMappingSchema.js.map +1 -0
  70. package/dist/esm/templates/embedDocs.js +484 -0
  71. package/dist/esm/templates/embedDocs.js.map +1 -0
  72. package/dist/esm/utils/project.js +15 -0
  73. package/dist/esm/utils/project.js.map +1 -1
  74. package/dist/esm/utils/wixApi.js +4 -2
  75. package/dist/esm/utils/wixApi.js.map +1 -1
  76. package/dist/types/auth/deviceFlow.d.ts +1 -1
  77. package/dist/types/auth/deviceFlow.d.ts.map +1 -1
  78. package/dist/types/auth/index.d.ts +2 -1
  79. package/dist/types/auth/index.d.ts.map +1 -1
  80. package/dist/types/commands/bundle.d.ts.map +1 -1
  81. package/dist/types/commands/conversation.d.ts.map +1 -1
  82. package/dist/types/commands/conversationWizard.d.ts.map +1 -1
  83. package/dist/types/commands/deploy.d.ts.map +1 -1
  84. package/dist/types/commands/ecom.d.ts +3 -0
  85. package/dist/types/commands/ecom.d.ts.map +1 -0
  86. package/dist/types/commands/embed.d.ts.map +1 -1
  87. package/dist/types/commands/init.d.ts.map +1 -1
  88. package/dist/types/commands/instructions.d.ts.map +1 -1
  89. package/dist/types/commands/login.d.ts.map +1 -1
  90. package/dist/types/commands/serve.d.ts.map +1 -1
  91. package/dist/types/commands/validate.d.ts +4 -2
  92. package/dist/types/commands/validate.d.ts.map +1 -1
  93. package/dist/types/commands/whoami.d.ts.map +1 -1
  94. package/dist/types/templates/aiInstructionsSchema.d.ts.map +1 -1
  95. package/dist/types/templates/cmsMappingSchema.d.ts +2 -0
  96. package/dist/types/templates/cmsMappingSchema.d.ts.map +1 -0
  97. package/dist/types/templates/embedDocs.d.ts +2 -0
  98. package/dist/types/templates/embedDocs.d.ts.map +1 -0
  99. package/dist/types/utils/project.d.ts +3 -0
  100. package/dist/types/utils/project.d.ts.map +1 -1
  101. package/dist/types/utils/wixApi.d.ts.map +1 -1
  102. package/package.json +2 -2
  103. package/dist/cjs/commands/getClientId.js +0 -60
  104. package/dist/cjs/commands/getClientId.js.map +0 -1
  105. package/dist/esm/commands/getClientId.js +0 -56
  106. package/dist/esm/commands/getClientId.js.map +0 -1
  107. package/dist/types/commands/getClientId.d.ts +0 -3
  108. package/dist/types/commands/getClientId.d.ts.map +0 -1
@@ -7,7 +7,10 @@ import ora from 'ora';
7
7
  import { wixRequest } from '../utils/wixApi';
8
8
  import { success, error, spinner } from '../utils/print';
9
9
  const BASE = '/web5/instructions/cli';
10
- // ── Wizard ────────────────────────────────────────────────────────────────
10
+
11
+ // ── Types ─────────────────────────────────────────────────────────────────────
12
+
13
+ // ── Display helpers ───────────────────────────────────────────────────────────
11
14
 
12
15
  const BOX_W = 66;
13
16
  function printHeader(title) {
@@ -26,17 +29,124 @@ function truncate(text, max) {
26
29
  if (max === void 0) {
27
30
  max = 48;
28
31
  }
29
- const clean = text.replace(/\n/g, ' ').trim();
32
+ const clean = (text ?? '').replace(/\n/g, ' ').trim();
30
33
  return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;
31
34
  }
35
+ function printInstructionContent(inst) {
36
+ // Intents
37
+ console.log(chalk.bold(' Intents'));
38
+ console.log(chalk.dim(' ' + '─'.repeat(40)));
39
+ const intents = inst.intents ?? {};
40
+ if (Object.keys(intents).length === 0) {
41
+ console.log(chalk.dim(' (none)'));
42
+ } else {
43
+ for (const [k, v] of Object.entries(intents)) {
44
+ console.log(` ${chalk.cyan(k)}: ${v}`);
45
+ }
46
+ }
47
+ console.log();
48
+
49
+ // Semantics
50
+ console.log(chalk.bold(' Semantics'));
51
+ console.log(chalk.dim(' ' + '─'.repeat(40)));
52
+ const semantics = inst.semantics ?? {};
53
+ if (Object.keys(semantics).length === 0) {
54
+ console.log(chalk.dim(' (none)'));
55
+ } else {
56
+ for (const [k, v] of Object.entries(semantics)) {
57
+ console.log(` ${chalk.cyan(k)}: ${v}`);
58
+ }
59
+ }
60
+ console.log();
61
+
62
+ // Actions
63
+ console.log(chalk.bold(' Actions'));
64
+ console.log(chalk.dim(' ' + '─'.repeat(40)));
65
+ const actions = inst.actions ?? [];
66
+ if (actions.length === 0) {
67
+ console.log(chalk.dim(' (none)'));
68
+ } else {
69
+ for (const action of actions) {
70
+ const desc = action.description ? chalk.dim(` — ${action.description}`) : '';
71
+ console.log(` ${chalk.cyan('• ' + action.name)}${desc}`);
72
+ for (const p of action.params ?? []) {
73
+ const preview = p.values.length > 0 ? chalk.dim(` [${p.values.slice(0, 3).join(', ')}${p.values.length > 3 ? ', …' : ''}]`) : '';
74
+ const optTag = p.optional ? chalk.dim(' (optional)') : '';
75
+ console.log(` ${p.param}${preview}${optTag}`);
76
+ }
77
+ }
78
+ }
79
+ console.log();
80
+
81
+ // Free-text instruction
82
+ console.log(chalk.bold(' Instruction'));
83
+ console.log(chalk.dim(' ' + '─'.repeat(40)));
84
+ console.log(` ${inst.content ?? ''}`);
85
+ console.log();
86
+ }
87
+
88
+ // ── Diff helper ───────────────────────────────────────────────────────────────
89
+
90
+ function diffLines(aStr, bStr) {
91
+ const aLines = aStr.split('\n');
92
+ const bLines = bStr.split('\n');
93
+ const out = [];
94
+ const maxLen = Math.max(aLines.length, bLines.length);
95
+ for (let i = 0; i < maxLen; i++) {
96
+ const aLine = i < aLines.length ? aLines[i] : null;
97
+ const bLine = i < bLines.length ? bLines[i] : null;
98
+ if (aLine === bLine) {
99
+ out.push(` ${aLine ?? ''}`);
100
+ } else {
101
+ if (aLine !== null) {
102
+ out.push(chalk.red(`- ${aLine}`));
103
+ }
104
+ if (bLine !== null) {
105
+ out.push(chalk.green(`+ ${bLine}`));
106
+ }
107
+ }
108
+ }
109
+ return out.join('\n');
110
+ }
111
+ function formatKV(obj) {
112
+ return Object.entries(obj ?? {}).map(_ref => {
113
+ let [k, v] = _ref;
114
+ return `${k}: ${v}`;
115
+ }).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.dim(`--- v${v1}`), chalk.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.bold(`── ${label} ──`));
129
+ if (aStr === bStr) {
130
+ out.push(chalk.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
+
32
141
  async function showInstructionDetail(version, instructions) {
33
142
  const inst = instructions.find(i => i.version === version);
34
- if (!inst) return 'back';
143
+ if (!inst) {
144
+ return 'back';
145
+ }
35
146
  console.clear();
36
147
  const activeLabel = inst.active ? chalk.green(' (active)') : '';
37
148
  printHeader(`📋 AI Instructions ❯ Version ${version}${activeLabel}`);
38
- console.log(chalk.dim(' Content:'));
39
- console.log(`\n${inst.content}\n`);
149
+ printInstructionContent(inst);
40
150
  const choices = [{
41
151
  name: ` ${chalk.dim('← Back')}`,
42
152
  value: 'back'
@@ -77,8 +187,6 @@ async function runInstructionsWizard() {
77
187
  console.log(chalk.dim('\nBye.\n'));
78
188
  process.exit(0);
79
189
  });
80
-
81
- // Fetch once, keep local copy so activation updates in-memory
82
190
  const sp = ora('Fetching instructions…').start();
83
191
  let instructions = [];
84
192
  try {
@@ -100,7 +208,7 @@ async function runInstructionsWizard() {
100
208
  console.log(chalk.yellow('No instructions found.'));
101
209
  process.exit(0);
102
210
  }
103
- let running = true;
211
+ const running = true;
104
212
  while (running) {
105
213
  console.clear();
106
214
  printHeader(`📋 AI Instructions ${chalk.dim(`${instructions.length} versions`)}`);
@@ -125,9 +233,13 @@ async function runInstructionsWizard() {
125
233
  choices,
126
234
  pageSize: 12
127
235
  }]);
128
- if (version === '__exit__') break;
236
+ if (version === '__exit__') {
237
+ break;
238
+ }
129
239
  const result = await showInstructionDetail(version, instructions);
130
- if (result === 'exit') break;
240
+ if (result === 'exit') {
241
+ break;
242
+ }
131
243
  if (result === 'refetch') {
132
244
  try {
133
245
  const data = await wixRequest({
@@ -148,27 +260,7 @@ async function runInstructionsWizard() {
148
260
  process.exit(0);
149
261
  }
150
262
 
151
- // ── Diff helper ───────────────────────────────────────────────────────────
152
-
153
- function diffContent(a, b, v1, v2) {
154
- const aLines = a.split('\n');
155
- const bLines = b.split('\n');
156
- const out = [chalk.dim(`--- v${v1}`), chalk.dim(`+++ v${v2}`), ''];
157
- const maxLen = Math.max(aLines.length, bLines.length);
158
- for (let i = 0; i < maxLen; i++) {
159
- const aLine = i < aLines.length ? aLines[i] : null;
160
- const bLine = i < bLines.length ? bLines[i] : null;
161
- if (aLine === bLine) {
162
- out.push(` ${aLine ?? ''}`);
163
- } else {
164
- if (aLine !== null) out.push(chalk.red(`- ${aLine}`));
165
- if (bLine !== null) out.push(chalk.green(`+ ${bLine}`));
166
- }
167
- }
168
- return out.join('\n');
169
- }
170
-
171
- // ── Subcommands ───────────────────────────────────────────────────────────
263
+ // ── Subcommands ───────────────────────────────────────────────────────────────
172
264
 
173
265
  const getActiveCmd = new Command('get-active').description('Get the currently active instruction').action(async () => {
174
266
  const sp = spinner('Fetching active instruction...');
@@ -177,13 +269,10 @@ const getActiveCmd = new Command('get-active').description('Get the currently ac
177
269
  path: `${BASE}/active`
178
270
  });
179
271
  sp.stop();
180
- const {
181
- version,
182
- content
183
- } = data.instruction;
184
- console.log(chalk.bold(`Version ${version}`));
272
+ const inst = data.instruction;
273
+ console.log(chalk.bold(`Version ${inst.version}`));
185
274
  console.log();
186
- console.log(content);
275
+ printInstructionContent(inst);
187
276
  } catch (err_) {
188
277
  sp.stop();
189
278
  error(err_.message);
@@ -206,28 +295,34 @@ const listCmd = new Command('list').description('List all instructions').option(
206
295
  items = items.filter(i => i.active);
207
296
  }
208
297
  if (opts.format === 'json') {
209
- const view = items.map(_ref => {
298
+ const view = items.map(_ref2 => {
210
299
  let {
211
300
  version,
212
301
  active,
302
+ intents,
303
+ semantics,
304
+ actions,
213
305
  content
214
- } = _ref;
306
+ } = _ref2;
215
307
  return {
216
308
  version,
217
309
  active: active ?? false,
310
+ intents,
311
+ semantics,
312
+ actions,
218
313
  content
219
314
  };
220
315
  });
221
316
  console.log(JSON.stringify(view, null, 2));
222
317
  } else {
223
- const header = `${'Version'.padEnd(10)}${'Active'.padEnd(10)}Content`;
318
+ const header = `${'Version'.padEnd(10)}${'Active'.padEnd(10)}Instruction`;
224
319
  console.log(chalk.bold(header));
225
320
  console.log('─'.repeat(60));
226
321
  for (const i of items) {
227
322
  const ver = `v${i.version}`.padEnd(10);
228
323
  const active = (i.active ? '✓' : '').padEnd(10);
229
- const content = truncate(i.content, 40);
230
- console.log(`${chalk.cyan(ver)}${chalk.green(active)}${content}`);
324
+ const preview = truncate(i.content, 40);
325
+ console.log(`${chalk.cyan(ver)}${chalk.green(active)}${preview}`);
231
326
  }
232
327
  }
233
328
  } catch (err_) {
@@ -258,20 +353,17 @@ const getCmd = new Command('get').description('Get an instruction by version num
258
353
  path: `${BASE}/by-version/${version}`
259
354
  });
260
355
  sp.stop();
261
- const {
262
- version: ver,
263
- content
264
- } = data.instruction;
265
- console.log(chalk.bold(`Version ${ver}`));
356
+ const inst = data.instruction;
357
+ console.log(chalk.bold(`Version ${inst.version}`));
266
358
  console.log();
267
- console.log(content);
359
+ printInstructionContent(inst);
268
360
  } catch (err_) {
269
361
  sp.stop();
270
362
  error(err_.message);
271
363
  process.exit(1);
272
364
  }
273
365
  });
274
- const diffCmd = new Command('diff').description('Show line-by-line diff between two instruction versions').argument('<v1>', 'First version number').argument('<v2>', 'Second version number').action(async (v1, v2) => {
366
+ const diffCmd = new 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
367
  const sp = spinner(`Fetching versions ${v1} and ${v2}...`);
276
368
  try {
277
369
  const [d1, d2] = await Promise.all([wixRequest({
@@ -280,22 +372,29 @@ const diffCmd = new Command('diff').description('Show line-by-line diff between
280
372
  path: `${BASE}/by-version/${v2}`
281
373
  })]);
282
374
  sp.stop();
283
- console.log(diffContent(d1.instruction.content, d2.instruction.content, v1, v2));
375
+ console.log(diffInstructions(d1.instruction, d2.instruction, v1, v2));
284
376
  } catch (err_) {
285
377
  sp.stop();
286
378
  error(err_.message);
287
379
  process.exit(1);
288
380
  }
289
381
  });
290
- const exportCmd = new 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 => {
382
+ const exportCmd = new 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
383
  const sp = spinner(`Fetching instruction version ${opts.version}...`);
292
384
  try {
293
385
  const data = await wixRequest({
294
386
  path: `${BASE}/by-version/${opts.version}`
295
387
  });
296
388
  sp.stop();
389
+ const inst = data.instruction;
390
+ const outContent = JSON.stringify({
391
+ intents: inst.intents,
392
+ semantics: inst.semantics,
393
+ actions: inst.actions,
394
+ content: inst.content
395
+ }, null, 2);
297
396
  const outPath = path.resolve(opts.output);
298
- fs.writeFileSync(outPath, data.instruction.content, 'utf8');
397
+ fs.writeFileSync(outPath, outContent, 'utf8');
299
398
  success(`Exported version ${opts.version} to ${outPath}`);
300
399
  } catch (err_) {
301
400
  sp.stop();
@@ -339,7 +438,7 @@ const rollbackCmd = new Command('rollback').description('Re-activate the version
339
438
  }
340
439
  });
341
440
 
342
- // ── Command export ────────────────────────────────────────────────────────
441
+ // ── Command export ────────────────────────────────────────────────────────────
343
442
 
344
443
  const wizardCmd = new Command('wizard').description('Open the interactive TUI to browse and activate instruction versions').action(async () => {
345
444
  try {
@@ -1 +1 @@
1
- {"version":3,"names":["Command","fs","path","inquirer","chalk","ora","wixRequest","success","error","spinner","BASE","BOX_W","printHeader","title","pad","repeat","Math","max","length","console","log","cyan","bold","printDivider","hints","dim","truncate","text","clean","replace","trim","slice","showInstructionDetail","version","instructions","inst","find","i","clear","activeLabel","active","green","content","choices","name","value","red","action","prompt","type","message","sp","start","method","stop","err_","fail","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","description","instruction","listCmd","option","opts","items","filter","format","view","_ref","JSON","stringify","header","padEnd","ver","activateCmd","argument","getCmd","diffCmd","d1","d2","Promise","all","exportCmd","requiredOption","outPath","resolve","output","writeFileSync","rollbackCmd","previous","Number","sort","sp2","wizardCmd","msg","includes","instructionsCommand","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":["Command","fs","path","inquirer","chalk","ora","wixRequest","success","error","spinner","BASE","BOX_W","printHeader","title","pad","repeat","Math","max","length","console","log","cyan","bold","printDivider","hints","dim","truncate","text","clean","replace","trim","slice","printInstructionContent","inst","intents","Object","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","i","aLine","bLine","push","red","green","formatKV","obj","map","_ref","formatActions","a","header","diffInstructions","b","v1","v2","sections","label","showInstructionDetail","version","instructions","find","clear","activeLabel","active","choices","value","prompt","type","message","sp","start","method","stop","err_","fail","runInstructionsWizard","process","on","exit","data","body","query","yellow","running","activeTag","white","Separator","pageSize","result","getActiveCmd","instruction","listCmd","option","opts","items","filter","format","view","_ref2","JSON","stringify","padEnd","ver","activateCmd","argument","getCmd","diffCmd","d1","d2","Promise","all","exportCmd","requiredOption","outContent","outPath","resolve","output","writeFileSync","rollbackCmd","previous","Number","sort","sp2","wizardCmd","msg","includes","instructionsCommand","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":[]}
@@ -34,8 +34,12 @@ const statusCmd = new Command('status').description('Show current authentication
34
34
  }
35
35
  success('Authenticated');
36
36
  info(`Method: ${authMethod}`);
37
- if (siteId) info(`Site ID: ${siteId}`);
38
- if (expiresAt) info(`Expires: ${expiresAt}${expired ? ' (expired)' : ''}`);
37
+ if (siteId) {
38
+ info(`Site ID: ${siteId}`);
39
+ }
40
+ if (expiresAt) {
41
+ info(`Expires: ${expiresAt}${expired ? ' (expired)' : ''}`);
42
+ }
39
43
  } catch (err_) {
40
44
  error(err_ instanceof Error ? err_.message : String(err_));
41
45
  process.exit(1);
@@ -44,9 +48,9 @@ const statusCmd = new Command('status').description('Show current authentication
44
48
 
45
49
  // ── login switch-site ─────────────────────────────────────────────────────────
46
50
 
47
- const switchSiteCmd = new Command('switch-site').description('Re-scope authentication to a different site without re-authenticating').requiredOption('--site-id <msid>', 'Target site ID (msid)').action(async opts => {
51
+ const switchSiteCmd = new Command('switch-site').description('Switch to a different web5 site (interactive picker)').action(async () => {
48
52
  try {
49
- await switchSite(opts.siteId);
53
+ await switchSite();
50
54
  } catch (err_) {
51
55
  error(err_ instanceof Error ? err_.message : String(err_));
52
56
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"names":["Command","login","switchSite","readCredentials","error","success","info","isJsonMode","statusCmd","description","action","creds","console","log","JSON","stringify","authenticated","authMethod","api_key","siteId","site_id","expiresAt","expires_at","Date","toISOString","expired","now","err_","Error","message","String","process","exit","switchSiteCmd","requiredOption","opts","loginCommand","option","apiKey","env","WEB5_API_KEY","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({ authenticated: true, authMethod, siteId, expiresAt, expired }),\n );\n return;\n }\n\n success('Authenticated');\n info(`Method: ${authMethod}`);\n if (siteId) info(`Site ID: ${siteId}`);\n if (expiresAt) info(`Expires: ${expiresAt}${expired ? ' (expired)' : ''}`);\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('Re-scope authentication to a different site without re-authenticating')\n .requiredOption('--site-id <msid>', 'Target site ID (msid)')\n .action(async (opts: { siteId: string }) => {\n try {\n await switchSite(opts.siteId);\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('--api-key <key>', 'Authenticate using an API key instead of browser flow')\n .option('--logs', 'Enable verbose debug logging for the auth flow')\n .option('--site-id <msid>', 'Site ID (msid) to scope the session to (skips interactive prompt)')\n .option('--no-browser', 'Skip opening the browser — print the verification URL instead')\n .action(async (opts: { apiKey?: string; logs?: boolean; siteId?: string; browser: boolean }) => {\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 .addCommand(statusCmd)\n .addCommand(switchSiteCmd);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Command","login","switchSite","readCredentials","error","success","info","isJsonMode","statusCmd","description","action","creds","console","log","JSON","stringify","authenticated","authMethod","api_key","siteId","site_id","expiresAt","expires_at","Date","toISOString","expired","now","err_","Error","message","String","process","exit","switchSiteCmd","loginCommand","option","opts","apiKey","env","WEB5_API_KEY","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":["Command","path","fs","http","spawn","success","error","info","isJsonMode","findProjectRoot","runBundle","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","description","option","String","action","opts","projectRoot","process","cwd","exit","port","parseInt","isNaN","bundle","watch","viteBin","watcher","shell","stdio","on","err_","message","listen","files","readdirSync","console","log","JSON","stringify","map","f","file","open","openPkg","default","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":["Command","path","fs","http","spawn","success","error","info","isJsonMode","findProjectRoot","runBundle","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","description","option","String","action","opts","projectRoot","process","cwd","exit","port","parseInt","isNaN","bundle","watch","viteBin","watcher","shell","stdio","on","err_","message","listen","files","readdirSync","console","log","JSON","stringify","map","f","file","open","openPkg","default","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":[]}