@wix/web50-cli 0.1.0 → 0.1.1

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 (122) hide show
  1. package/dist/cjs/auth/deviceFlow.js +99 -13
  2. package/dist/cjs/auth/deviceFlow.js.map +1 -1
  3. package/dist/cjs/auth/index.js +65 -12
  4. package/dist/cjs/auth/index.js.map +1 -1
  5. package/dist/cjs/auth/secretStore.js.map +1 -1
  6. package/dist/cjs/cli.js +29 -1
  7. package/dist/cjs/cli.js.map +1 -1
  8. package/dist/cjs/commands/bundle.js +95 -0
  9. package/dist/cjs/commands/bundle.js.map +1 -0
  10. package/dist/cjs/commands/conversation.js +50 -0
  11. package/dist/cjs/commands/conversation.js.map +1 -0
  12. package/dist/cjs/commands/conversationWizard.js +526 -0
  13. package/dist/cjs/commands/conversationWizard.js.map +1 -0
  14. package/dist/cjs/commands/deploy.js +192 -0
  15. package/dist/cjs/commands/deploy.js.map +1 -0
  16. package/dist/cjs/commands/embed.js +118 -0
  17. package/dist/cjs/commands/embed.js.map +1 -0
  18. package/dist/cjs/commands/getClientId.js +60 -0
  19. package/dist/cjs/commands/getClientId.js.map +1 -0
  20. package/dist/cjs/commands/init.js +31 -26
  21. package/dist/cjs/commands/init.js.map +1 -1
  22. package/dist/cjs/commands/instructions.js +360 -0
  23. package/dist/cjs/commands/instructions.js.map +1 -0
  24. package/dist/cjs/commands/login.js +59 -4
  25. package/dist/cjs/commands/login.js.map +1 -1
  26. package/dist/cjs/commands/logout.js +16 -0
  27. package/dist/cjs/commands/logout.js.map +1 -0
  28. package/dist/cjs/commands/serve.js +122 -0
  29. package/dist/cjs/commands/serve.js.map +1 -0
  30. package/dist/cjs/commands/storybook.js +102 -0
  31. package/dist/cjs/commands/storybook.js.map +1 -0
  32. package/dist/cjs/commands/validate.js +266 -18
  33. package/dist/cjs/commands/validate.js.map +1 -1
  34. package/dist/cjs/commands/whoami.js +48 -0
  35. package/dist/cjs/commands/whoami.js.map +1 -0
  36. package/dist/cjs/utils/print.js +12 -0
  37. package/dist/cjs/utils/print.js.map +1 -1
  38. package/dist/cjs/utils/project.js +11 -0
  39. package/dist/cjs/utils/project.js.map +1 -1
  40. package/dist/cjs/utils/wixApi.js +55 -0
  41. package/dist/cjs/utils/wixApi.js.map +1 -0
  42. package/dist/esm/auth/deviceFlow.js +106 -13
  43. package/dist/esm/auth/deviceFlow.js.map +1 -1
  44. package/dist/esm/auth/index.js +71 -13
  45. package/dist/esm/auth/index.js.map +1 -1
  46. package/dist/esm/auth/secretStore.js.map +1 -1
  47. package/dist/esm/cli.js +29 -1
  48. package/dist/esm/cli.js.map +1 -1
  49. package/dist/esm/commands/bundle.js +92 -0
  50. package/dist/esm/commands/bundle.js.map +1 -0
  51. package/dist/esm/commands/conversation.js +44 -0
  52. package/dist/esm/commands/conversation.js.map +1 -0
  53. package/dist/esm/commands/conversationWizard.js +527 -0
  54. package/dist/esm/commands/conversationWizard.js.map +1 -0
  55. package/dist/esm/commands/deploy.js +194 -0
  56. package/dist/esm/commands/deploy.js.map +1 -0
  57. package/dist/esm/commands/embed.js +112 -0
  58. package/dist/esm/commands/embed.js.map +1 -0
  59. package/dist/esm/commands/getClientId.js +56 -0
  60. package/dist/esm/commands/getClientId.js.map +1 -0
  61. package/dist/esm/commands/init.js +32 -27
  62. package/dist/esm/commands/init.js.map +1 -1
  63. package/dist/esm/commands/instructions.js +360 -0
  64. package/dist/esm/commands/instructions.js.map +1 -0
  65. package/dist/esm/commands/login.js +62 -6
  66. package/dist/esm/commands/login.js.map +1 -1
  67. package/dist/esm/commands/logout.js +12 -0
  68. package/dist/esm/commands/logout.js.map +1 -0
  69. package/dist/esm/commands/serve.js +117 -0
  70. package/dist/esm/commands/serve.js.map +1 -0
  71. package/dist/esm/commands/storybook.js +97 -0
  72. package/dist/esm/commands/storybook.js.map +1 -0
  73. package/dist/esm/commands/validate.js +269 -19
  74. package/dist/esm/commands/validate.js.map +1 -1
  75. package/dist/esm/commands/whoami.js +44 -0
  76. package/dist/esm/commands/whoami.js.map +1 -0
  77. package/dist/esm/utils/print.js +10 -0
  78. package/dist/esm/utils/print.js.map +1 -1
  79. package/dist/esm/utils/project.js +8 -0
  80. package/dist/esm/utils/project.js.map +1 -1
  81. package/dist/esm/utils/wixApi.js +51 -0
  82. package/dist/esm/utils/wixApi.js.map +1 -0
  83. package/dist/types/auth/deviceFlow.d.ts +3 -1
  84. package/dist/types/auth/deviceFlow.d.ts.map +1 -1
  85. package/dist/types/auth/index.d.ts +5 -1
  86. package/dist/types/auth/index.d.ts.map +1 -1
  87. package/dist/types/auth/secretStore.d.ts +2 -0
  88. package/dist/types/auth/secretStore.d.ts.map +1 -1
  89. package/dist/types/commands/bundle.d.ts +10 -0
  90. package/dist/types/commands/bundle.d.ts.map +1 -0
  91. package/dist/types/commands/conversation.d.ts +3 -0
  92. package/dist/types/commands/conversation.d.ts.map +1 -0
  93. package/dist/types/commands/conversationWizard.d.ts +3 -0
  94. package/dist/types/commands/conversationWizard.d.ts.map +1 -0
  95. package/dist/types/commands/deploy.d.ts +3 -0
  96. package/dist/types/commands/deploy.d.ts.map +1 -0
  97. package/dist/types/commands/embed.d.ts +3 -0
  98. package/dist/types/commands/embed.d.ts.map +1 -0
  99. package/dist/types/commands/getClientId.d.ts +3 -0
  100. package/dist/types/commands/getClientId.d.ts.map +1 -0
  101. package/dist/types/commands/init.d.ts.map +1 -1
  102. package/dist/types/commands/instructions.d.ts +3 -0
  103. package/dist/types/commands/instructions.d.ts.map +1 -0
  104. package/dist/types/commands/login.d.ts.map +1 -1
  105. package/dist/types/commands/logout.d.ts +3 -0
  106. package/dist/types/commands/logout.d.ts.map +1 -0
  107. package/dist/types/commands/serve.d.ts +3 -0
  108. package/dist/types/commands/serve.d.ts.map +1 -0
  109. package/dist/types/commands/storybook.d.ts +3 -0
  110. package/dist/types/commands/storybook.d.ts.map +1 -0
  111. package/dist/types/commands/validate.d.ts +5 -0
  112. package/dist/types/commands/validate.d.ts.map +1 -1
  113. package/dist/types/commands/whoami.d.ts +3 -0
  114. package/dist/types/commands/whoami.d.ts.map +1 -0
  115. package/dist/types/utils/print.d.ts +3 -0
  116. package/dist/types/utils/print.d.ts.map +1 -1
  117. package/dist/types/utils/project.d.ts +10 -0
  118. package/dist/types/utils/project.d.ts.map +1 -1
  119. package/dist/types/utils/wixApi.d.ts +9 -0
  120. package/dist/types/utils/wixApi.d.ts.map +1 -0
  121. package/package.json +5 -5
  122. package/defaults/package.json +0 -42
@@ -8,10 +8,23 @@ var _inquirer = _interopRequireDefault(require("inquirer"));
8
8
  var path = _interopRequireWildcard(require("path"));
9
9
  var fs = _interopRequireWildcard(require("fs"));
10
10
  var _promises = require("fs/promises");
11
+ var _chalk = _interopRequireDefault(require("chalk"));
11
12
  var _print = require("../utils/print");
12
13
  var _fs2 = require("../utils/fs");
13
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); }
14
15
  const DEFAULTS_DIR = path.join(__dirname, '../../../defaults');
16
+ function printBanner() {
17
+ const logo = ['██╗ ██╗ ███████╗ ██████╗ ███████╗', '██║ ██║ ██╔════╝ ██╔══██╗ ██╔════╝', '██║ █╗ ██║ █████╗ ██████╔╝ ███████╗', '██║███╗██║ ██╔══╝ ██╔══██╗ ╚════██║', '╚███╔███╔╝ ███████╗ ██████╔╝ ███████║', ' ╚══╝╚══╝ ╚══════╝ ╚═════╝ ╚══════╝'];
18
+ console.log('');
19
+ for (const line of logo) {
20
+ console.log(_chalk.default.cyan(line));
21
+ }
22
+ console.log('');
23
+ console.log(_chalk.default.dim(' Build AI-powered client components for the Wix platform.'));
24
+ console.log(_chalk.default.dim(' Define sections, actions, and AI instructions —'));
25
+ console.log(_chalk.default.dim(' the platform interprets user intent and delivers personalized experiences.'));
26
+ console.log('');
27
+ }
15
28
  async function copyDefault(srcRelative, destAbsolute, substitutions = {}) {
16
29
  const srcPath = path.join(DEFAULTS_DIR, srcRelative);
17
30
  let content = await (0, _promises.readFile)(srcPath, 'utf8');
@@ -20,6 +33,13 @@ async function copyDefault(srcRelative, destAbsolute, substitutions = {}) {
20
33
  }
21
34
  await (0, _fs2.atomicWrite)(destAbsolute, content);
22
35
  }
36
+ async function copyDefaultTree(srcRelative, destAbsolute, filter) {
37
+ const srcPath = path.join(DEFAULTS_DIR, srcRelative);
38
+ await (0, _promises.cp)(srcPath, destAbsolute, {
39
+ recursive: true,
40
+ filter
41
+ });
42
+ }
23
43
  function findExistingConfig(startDir) {
24
44
  let current = startDir;
25
45
  let parent = path.dirname(current);
@@ -55,6 +75,7 @@ async function resolveString(flag, isTTY, question, opts = {}) {
55
75
  }
56
76
  const initCommand = exports.initCommand = new _commander.Command('init').description('Scaffold a new Web5 client component library').option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults').option('--name <name>', 'npm package name (e.g. @wix/my-components)').option('--display-name <displayName>', 'human-readable display name').option('--dir <dir>', 'output directory (default: derived from package name)').action(async opts => {
57
77
  try {
78
+ printBanner();
58
79
  const existing = findExistingConfig(process.cwd());
59
80
  if (existing) {
60
81
  (0, _print.warn)(`web5.config.json already exists at ${existing}`);
@@ -73,27 +94,10 @@ const initCommand = exports.initCommand = new _commander.Command('init').descrip
73
94
  exitMsg: '--name is required in non-interactive mode'
74
95
  });
75
96
 
76
- // ── Collect: display name ─────────────────────────────────────────────
77
- const defaultDisplay = name.split('/').pop().replace(/-/g, ' ');
78
- const displayName = await resolveString(opts.displayName, isTTY, [{
79
- type: 'input',
80
- name: 'value',
81
- message: 'Display name:',
82
- default: defaultDisplay
83
- }], {
84
- defaultValue: defaultDisplay
85
- });
86
-
87
- // ── Collect: output directory ─────────────────────────────────────────
88
- const defaultDir = name.split('/').pop();
89
- const dir = await resolveString(opts.dir, isTTY, [{
90
- type: 'input',
91
- name: 'value',
92
- message: 'Output directory:',
93
- default: defaultDir
94
- }], {
95
- defaultValue: defaultDir
96
- });
97
+ // ── Derive: display name and output directory from package name ───────
98
+ const stem = name.split('/').pop();
99
+ const displayName = opts.displayName ?? stem.replace(/-/g, ' ');
100
+ const dir = opts.dir ?? stem;
97
101
  const outDir = path.resolve(process.cwd(), dir);
98
102
  if (fs.existsSync(outDir) && fs.readdirSync(outDir).length > 0) {
99
103
  (0, _print.warn)(`Directory ${outDir} already exists and is not empty`);
@@ -107,16 +111,17 @@ const initCommand = exports.initCommand = new _commander.Command('init').descrip
107
111
 
108
112
  // ── Root config files ─────────────────────────────────────────────────
109
113
  await copyDefault('web5.config.json', path.join(outDir, 'web5.config.json'), subs);
110
- await copyDefault('package.json', path.join(outDir, 'package.json'), subs);
114
+ await copyDefault('package.template.json', path.join(outDir, 'package.json'), subs);
111
115
  await copyDefault('tsconfig.json', path.join(outDir, 'tsconfig.json'));
112
116
 
113
117
  // ── src/ ──────────────────────────────────────────────────────────────
114
118
  await copyDefault('src/index.ts', path.join(outDir, 'src', 'index.ts'), subs);
115
119
  await copyDefault('src/createRegistry.ts', path.join(outDir, 'src', 'createRegistry.ts'));
116
- await copyDefault('src/components/types.ts', path.join(outDir, 'src', 'components', 'types.ts'));
117
-
120
+ await copyDefaultTree('src/components', path.join(outDir, 'src', 'components'));
121
+ await copyDefaultTree('.storybook', path.join(outDir, '.storybook'));
122
+ await copyDefault('src/vite.cdn.config.ts', path.join(outDir, 'src', 'vite.cdn.config.ts'));
118
123
  // ── src/configuration/ ────────────────────────────────────────────────
119
- await copyDefault('src/configuration/client.config.ts', path.join(outDir, 'src', 'configuration', 'client.config.ts'));
124
+ await copyDefault('src/client.config.ts', path.join(outDir, 'src', 'client.config.ts'));
120
125
  await copyDefault('src/configuration/ai/prompt-instructions.yaml', path.join(outDir, 'src', 'configuration', 'ai', 'prompt-instructions.yaml'));
121
126
  await copyDefault('src/configuration/cms/cms-mapping.yaml', path.join(outDir, 'src', 'configuration', 'cms', 'cms-mapping.yaml'));
122
127
  await copyDefault('src/configuration/cms/cms-schema.yaml', path.join(outDir, 'src', 'configuration', 'cms', 'cms-schema.yaml'));
@@ -152,7 +157,7 @@ const initCommand = exports.initCommand = new _commander.Command('init').descrip
152
157
  console.log('');
153
158
  (0, _print.info)('Next steps:');
154
159
  (0, _print.info)(` cd ${dir}`);
155
- (0, _print.info)(' yarn install');
160
+ (0, _print.info)(' npm install');
156
161
  } catch (err_) {
157
162
  (0, _print.error)(err_ instanceof Error ? err_.message : String(err_));
158
163
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"names":["_commander","require","_inquirer","_interopRequireDefault","path","_interopRequireWildcard","fs","_promises","_print","_fs2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULTS_DIR","join","__dirname","copyDefault","srcRelative","destAbsolute","substitutions","srcPath","content","readFile","token","value","entries","replaceAll","atomicWrite","findExistingConfig","startDir","current","parent","dirname","candidate","existsSync","resolveString","flag","isTTY","question","opts","defaultValue","undefined","exitMsg","error","process","exit","answers","inquirer","prompt","initCommand","exports","Command","description","option","action","existing","cwd","warn","Boolean","stdin","mode","name","type","message","validate","v","trim","length","defaultDisplay","split","pop","replace","displayName","defaultDir","dir","outDir","resolve","readdirSync","info","subs","NAME","DISPLAY_NAME","skill","folder","componentDir","ensureDir","success","console","log","err_","Error","String"],"sources":["../../../src/commands/init.ts"],"sourcesContent":["import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { readFile } from 'fs/promises';\nimport { success, error, info, warn } from '../utils/print';\nimport { atomicWrite, ensureDir } from '../utils/fs';\n\nconst DEFAULTS_DIR = path.join(__dirname, '../../../defaults');\n\ntype Mode = 'defaults' | 'scratch';\n\ninterface InitOptions {\n mode?: Mode;\n name?: string;\n displayName?: string;\n dir?: string;\n}\n\nasync function copyDefault(\n srcRelative: string,\n destAbsolute: string,\n substitutions: Record<string, string> = {},\n): Promise<void> {\n const srcPath = path.join(DEFAULTS_DIR, srcRelative);\n let content = await readFile(srcPath, 'utf8');\n for (const [token, value] of Object.entries(substitutions)) {\n content = content.replaceAll(`{{${token}}}`, value);\n }\n await atomicWrite(destAbsolute, content);\n}\n\nfunction findExistingConfig(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n current = parent;\n parent = path.dirname(current);\n }\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n return null;\n}\n\nasync function resolveString(\n flag: string | undefined,\n isTTY: boolean,\n question: Parameters<typeof inquirer.prompt>[0],\n opts: { defaultValue?: string; exitMsg?: string } = {},\n): Promise<string> {\n if (flag) {\n return flag;\n }\n if (!isTTY) {\n if (opts.defaultValue !== undefined) {\n return opts.defaultValue;\n }\n if (opts.exitMsg) {\n error(opts.exitMsg);\n }\n process.exit(1);\n }\n const answers = await inquirer.prompt<{ value: string }>(question);\n return answers.value ?? opts.defaultValue ?? '';\n}\n\nexport const initCommand = new Command('init')\n .description('Scaffold a new Web5 client component library')\n .option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults')\n .option('--name <name>', 'npm package name (e.g. @wix/my-components)')\n .option('--display-name <displayName>', 'human-readable display name')\n .option(\n '--dir <dir>',\n 'output directory (default: derived from package name)',\n )\n .action(async (opts: InitOptions) => {\n try {\n const existing = findExistingConfig(process.cwd());\n if (existing) {\n warn(`web5.config.json already exists at ${existing}`);\n warn('Proceeding will create a nested project.');\n }\n\n const isTTY = Boolean(process.stdin.isTTY);\n const mode: Mode = opts.mode ?? 'defaults';\n\n // ── Collect: package name ─────────────────────────────────────────────\n const name = await resolveString(\n opts.name,\n isTTY,\n [\n {\n type: 'input',\n name: 'value',\n message: 'Package name (e.g. @wix/my-components):',\n validate: (v: string) =>\n v.trim().length > 0 ? true : 'Package name is required',\n },\n ],\n { exitMsg: '--name is required in non-interactive mode' },\n );\n\n // ── Collect: display name ─────────────────────────────────────────────\n const defaultDisplay = name.split('/').pop()!.replace(/-/g, ' ');\n const displayName = await resolveString(\n opts.displayName,\n isTTY,\n [\n {\n type: 'input',\n name: 'value',\n message: 'Display name:',\n default: defaultDisplay,\n },\n ],\n { defaultValue: defaultDisplay },\n );\n\n // ── Collect: output directory ─────────────────────────────────────────\n const defaultDir = name.split('/').pop()!;\n const dir = await resolveString(\n opts.dir,\n isTTY,\n [\n {\n type: 'input',\n name: 'value',\n message: 'Output directory:',\n default: defaultDir,\n },\n ],\n { defaultValue: defaultDir },\n );\n\n const outDir = path.resolve(process.cwd(), dir);\n\n if (fs.existsSync(outDir) && fs.readdirSync(outDir).length > 0) {\n warn(`Directory ${outDir} already exists and is not empty`);\n }\n\n info(`Scaffolding ${name} \\u2192 ${outDir}`);\n void mode;\n\n const subs = { NAME: name, DISPLAY_NAME: displayName };\n\n // ── Root config files ─────────────────────────────────────────────────\n await copyDefault(\n 'web5.config.json',\n path.join(outDir, 'web5.config.json'),\n subs,\n );\n await copyDefault(\n 'package.json',\n path.join(outDir, 'package.json'),\n subs,\n );\n await copyDefault('tsconfig.json', path.join(outDir, 'tsconfig.json'));\n\n // ── src/ ──────────────────────────────────────────────────────────────\n await copyDefault(\n 'src/index.ts',\n path.join(outDir, 'src', 'index.ts'),\n subs,\n );\n await copyDefault(\n 'src/createRegistry.ts',\n path.join(outDir, 'src', 'createRegistry.ts'),\n );\n await copyDefault(\n 'src/components/types.ts',\n path.join(outDir, 'src', 'components', 'types.ts'),\n );\n\n // ── src/configuration/ ────────────────────────────────────────────────\n await copyDefault(\n 'src/configuration/client.config.ts',\n path.join(outDir, 'src', 'configuration', 'client.config.ts'),\n );\n await copyDefault(\n 'src/configuration/ai/prompt-instructions.yaml',\n path.join(\n outDir,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n ),\n );\n await copyDefault(\n 'src/configuration/cms/cms-mapping.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-mapping.yaml'),\n );\n await copyDefault(\n 'src/configuration/cms/cms-schema.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-schema.yaml'),\n );\n\n // ── src/actions/ ──────────────────────────────────────────────────────\n await copyDefault(\n 'src/actions/index.ts',\n path.join(outDir, 'src', 'actions', 'index.ts'),\n );\n await copyDefault(\n 'src/actions/bookDemoAction.ts',\n path.join(outDir, 'src', 'actions', 'bookDemoAction.ts'),\n );\n await copyDefault(\n 'src/actions/book-demo.yaml',\n path.join(outDir, 'src', 'actions', 'book-demo.yaml'),\n );\n await copyDefault(\n 'src/actions/contactAction.ts',\n path.join(outDir, 'src', 'actions', 'contactAction.ts'),\n );\n await copyDefault(\n 'src/actions/contact-action.yaml',\n path.join(outDir, 'src', 'actions', 'contact-action.yaml'),\n );\n\n // ── AGENTS.md ─────────────────────────────────────────────────────────\n await copyDefault('AGENTS.md', path.join(outDir, 'AGENTS.md'), subs);\n\n // ── docs/ ─────────────────────────────────────────────────────────────\n await copyDefault(\n 'docs/architecture.md',\n path.join(outDir, 'docs', 'architecture.md'),\n subs,\n );\n await copyDefault(\n 'docs/api-reference.md',\n path.join(outDir, 'docs', 'api-reference.md'),\n subs,\n );\n\n // ── skills/ ───────────────────────────────────────────────────────────\n for (const skill of [\n 'action-add',\n 'action-remove',\n 'action-update',\n 'section-add',\n 'section-remove',\n 'section-update',\n 'slot-add',\n ]) {\n await copyDefault(\n `skills/${skill}.md`,\n path.join(outDir, 'skills', `${skill}.md`),\n );\n }\n\n // ── Component subdirectories ──────────────────────────────────────────\n for (const folder of ['base', 'slots', 'sections']) {\n const componentDir = path.join(outDir, 'src', 'components', folder);\n await ensureDir(componentDir);\n await atomicWrite(path.join(componentDir, '.gitkeep'), '');\n }\n\n // ── Done ──────────────────────────────────────────────────────────────\n success(`Created ${name}`);\n console.log('');\n info('Next steps:');\n info(` cd ${dir}`);\n info(' yarn install');\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","_inquirer","_interopRequireDefault","path","_interopRequireWildcard","fs","_promises","_chalk","_print","_fs2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULTS_DIR","join","__dirname","printBanner","logo","console","log","line","chalk","cyan","dim","copyDefault","srcRelative","destAbsolute","substitutions","srcPath","content","readFile","token","value","entries","replaceAll","atomicWrite","copyDefaultTree","filter","cp","recursive","findExistingConfig","startDir","current","parent","dirname","candidate","existsSync","resolveString","flag","isTTY","question","opts","defaultValue","undefined","exitMsg","error","process","exit","answers","inquirer","prompt","initCommand","exports","Command","description","option","action","existing","cwd","warn","Boolean","stdin","mode","name","type","message","validate","v","trim","length","stem","split","pop","displayName","replace","dir","outDir","resolve","readdirSync","info","subs","NAME","DISPLAY_NAME","skill","folder","componentDir","ensureDir","success","err_","Error","String"],"sources":["../../../src/commands/init.ts"],"sourcesContent":["import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { readFile, cp } from 'fs/promises';\nimport chalk from 'chalk';\nimport { success, error, info, warn } from '../utils/print';\nimport { atomicWrite, ensureDir } from '../utils/fs';\n\nconst DEFAULTS_DIR = path.join(__dirname, '../../../defaults');\n\nfunction printBanner(): void {\n const logo = [\n '██╗ ██╗ ███████╗ ██████╗ ███████╗',\n '██║ ██║ ██╔════╝ ██╔══██╗ ██╔════╝',\n '██║ █╗ ██║ █████╗ ██████╔╝ ███████╗',\n '██║███╗██║ ██╔══╝ ██╔══██╗ ╚════██║',\n '╚███╔███╔╝ ███████╗ ██████╔╝ ███████║',\n ' ╚══╝╚══╝ ╚══════╝ ╚═════╝ ╚══════╝',\n ];\n console.log('');\n for (const line of logo) {\n console.log(chalk.cyan(line));\n }\n console.log('');\n console.log(chalk.dim(' Build AI-powered client components for the Wix platform.'));\n console.log(chalk.dim(' Define sections, actions, and AI instructions —'));\n console.log(chalk.dim(' the platform interprets user intent and delivers personalized experiences.'));\n console.log('');\n}\n\ntype Mode = 'defaults' | 'scratch';\n\ninterface InitOptions {\n mode?: Mode;\n name?: string;\n displayName?: string;\n dir?: string;\n}\n\nasync function copyDefault(\n srcRelative: string,\n destAbsolute: string,\n substitutions: Record<string, string> = {},\n): Promise<void> {\n const srcPath = path.join(DEFAULTS_DIR, srcRelative);\n let content = await readFile(srcPath, 'utf8');\n for (const [token, value] of Object.entries(substitutions)) {\n content = content.replaceAll(`{{${token}}}`, value);\n }\n await atomicWrite(destAbsolute, content);\n}\n\nasync function copyDefaultTree(\n srcRelative: string,\n destAbsolute: string,\n filter?: (src: string, dest: string) => boolean,\n): Promise<void> {\n const srcPath = path.join(DEFAULTS_DIR, srcRelative);\n await cp(srcPath, destAbsolute, { recursive: true, filter });\n}\n\nfunction findExistingConfig(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n current = parent;\n parent = path.dirname(current);\n }\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n return null;\n}\n\nasync function resolveString(\n flag: string | undefined,\n isTTY: boolean,\n question: Parameters<typeof inquirer.prompt>[0],\n opts: { defaultValue?: string; exitMsg?: string } = {},\n): Promise<string> {\n if (flag) {\n return flag;\n }\n if (!isTTY) {\n if (opts.defaultValue !== undefined) {\n return opts.defaultValue;\n }\n if (opts.exitMsg) {\n error(opts.exitMsg);\n }\n process.exit(1);\n }\n const answers = await inquirer.prompt<{ value: string }>(question);\n return answers.value ?? opts.defaultValue ?? '';\n}\n\nexport const initCommand = new Command('init')\n .description('Scaffold a new Web5 client component library')\n .option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults')\n .option('--name <name>', 'npm package name (e.g. @wix/my-components)')\n .option('--display-name <displayName>', 'human-readable display name')\n .option(\n '--dir <dir>',\n 'output directory (default: derived from package name)',\n )\n .action(async (opts: InitOptions) => {\n try {\n printBanner();\n\n const existing = findExistingConfig(process.cwd());\n if (existing) {\n warn(`web5.config.json already exists at ${existing}`);\n warn('Proceeding will create a nested project.');\n }\n\n const isTTY = Boolean(process.stdin.isTTY);\n const mode: Mode = opts.mode ?? 'defaults';\n\n // ── Collect: package name ─────────────────────────────────────────────\n const name = await resolveString(\n opts.name,\n isTTY,\n [\n {\n type: 'input',\n name: 'value',\n message: 'Package name (e.g. @wix/my-components):',\n validate: (v: string) =>\n v.trim().length > 0 ? true : 'Package name is required',\n },\n ],\n { exitMsg: '--name is required in non-interactive mode' },\n );\n\n // ── Derive: display name and output directory from package name ───────\n const stem = name.split('/').pop()!;\n const displayName = opts.displayName ?? stem.replace(/-/g, ' ');\n const dir = opts.dir ?? stem;\n\n const outDir = path.resolve(process.cwd(), dir);\n\n if (fs.existsSync(outDir) && fs.readdirSync(outDir).length > 0) {\n warn(`Directory ${outDir} already exists and is not empty`);\n }\n\n info(`Scaffolding ${name} \\u2192 ${outDir}`);\n void mode;\n\n const subs = { NAME: name, DISPLAY_NAME: displayName };\n\n // ── Root config files ─────────────────────────────────────────────────\n await copyDefault(\n 'web5.config.json',\n path.join(outDir, 'web5.config.json'),\n subs,\n );\n await copyDefault(\n 'package.template.json',\n path.join(outDir, 'package.json'),\n subs,\n );\n await copyDefault('tsconfig.json', path.join(outDir, 'tsconfig.json'));\n\n // ── src/ ──────────────────────────────────────────────────────────────\n await copyDefault(\n 'src/index.ts',\n path.join(outDir, 'src', 'index.ts'),\n subs,\n );\n await copyDefault(\n 'src/createRegistry.ts',\n path.join(outDir, 'src', 'createRegistry.ts'),\n );\n await copyDefaultTree(\n 'src/components',\n path.join(outDir, 'src', 'components'),\n );\n await copyDefaultTree(\n '.storybook',\n path.join(outDir, '.storybook'),\n );\n await copyDefault(\n 'src/vite.cdn.config.ts',\n path.join(outDir, 'src', 'vite.cdn.config.ts'),\n );\n // ── src/configuration/ ────────────────────────────────────────────────\n await copyDefault(\n 'src/client.config.ts',\n path.join(outDir, 'src', 'client.config.ts'),\n );\n await copyDefault(\n 'src/configuration/ai/prompt-instructions.yaml',\n path.join(\n outDir,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n ),\n );\n await copyDefault(\n 'src/configuration/cms/cms-mapping.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-mapping.yaml'),\n );\n await copyDefault(\n 'src/configuration/cms/cms-schema.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-schema.yaml'),\n );\n\n // ── src/actions/ ──────────────────────────────────────────────────────\n await copyDefault(\n 'src/actions/index.ts',\n path.join(outDir, 'src', 'actions', 'index.ts'),\n );\n await copyDefault(\n 'src/actions/bookDemoAction.ts',\n path.join(outDir, 'src', 'actions', 'bookDemoAction.ts'),\n );\n await copyDefault(\n 'src/actions/book-demo.yaml',\n path.join(outDir, 'src', 'actions', 'book-demo.yaml'),\n );\n await copyDefault(\n 'src/actions/contactAction.ts',\n path.join(outDir, 'src', 'actions', 'contactAction.ts'),\n );\n await copyDefault(\n 'src/actions/contact-action.yaml',\n path.join(outDir, 'src', 'actions', 'contact-action.yaml'),\n );\n\n // ── AGENTS.md ─────────────────────────────────────────────────────────\n await copyDefault('AGENTS.md', path.join(outDir, 'AGENTS.md'), subs);\n\n // ── docs/ ─────────────────────────────────────────────────────────────\n await copyDefault(\n 'docs/architecture.md',\n path.join(outDir, 'docs', 'architecture.md'),\n subs,\n );\n await copyDefault(\n 'docs/api-reference.md',\n path.join(outDir, 'docs', 'api-reference.md'),\n subs,\n );\n\n // ── skills/ ───────────────────────────────────────────────────────────\n for (const skill of [\n 'action-add',\n 'action-remove',\n 'action-update',\n 'section-add',\n 'section-remove',\n 'section-update',\n 'slot-add',\n ]) {\n await copyDefault(\n `skills/${skill}.md`,\n path.join(outDir, 'skills', `${skill}.md`),\n );\n }\n\n // ── Component subdirectories ──────────────────────────────────────────\n for (const folder of ['base', 'slots', 'sections']) {\n const componentDir = path.join(outDir, 'src', 'components', folder);\n await ensureDir(componentDir);\n await atomicWrite(path.join(componentDir, '.gitkeep'), '');\n }\n\n // ── Done ──────────────────────────────────────────────────────────────\n success(`Created ${name}`);\n console.log('');\n info('Next steps:');\n info(` cd ${dir}`);\n info(' npm install');\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":[]}
@@ -0,0 +1,360 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.instructionsCommand = void 0;
6
+ var _commander = require("commander");
7
+ var fs = _interopRequireWildcard(require("fs"));
8
+ var path = _interopRequireWildcard(require("path"));
9
+ var _inquirer = _interopRequireDefault(require("inquirer"));
10
+ var _chalk = _interopRequireDefault(require("chalk"));
11
+ var _ora = _interopRequireDefault(require("ora"));
12
+ var _wixApi = require("../utils/wixApi");
13
+ var _print = require("../utils/print");
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
+ const BASE = '/web5/instructions/cli';
16
+ // ── Wizard ────────────────────────────────────────────────────────────────
17
+
18
+ const BOX_W = 66;
19
+ function printHeader(title) {
20
+ const pad = ' '.repeat(Math.max(0, BOX_W - title.length - 1));
21
+ console.log(_chalk.default.cyan('╔' + '═'.repeat(BOX_W) + '╗'));
22
+ console.log(`${_chalk.default.cyan('║')} ${_chalk.default.bold(title)}${pad}${_chalk.default.cyan('║')}`);
23
+ console.log(_chalk.default.cyan('╚' + '═'.repeat(BOX_W) + '╝'));
24
+ console.log();
25
+ }
26
+ function printDivider(hints) {
27
+ console.log(_chalk.default.dim('─'.repeat(BOX_W + 2)));
28
+ console.log(_chalk.default.dim(` ${hints}`));
29
+ console.log();
30
+ }
31
+ function truncate(text, max = 48) {
32
+ const clean = text.replace(/\n/g, ' ').trim();
33
+ return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;
34
+ }
35
+ async function showInstructionDetail(version, instructions) {
36
+ const inst = instructions.find(i => i.version === version);
37
+ if (!inst) return 'back';
38
+ console.clear();
39
+ const activeLabel = inst.active ? _chalk.default.green(' (active)') : '';
40
+ printHeader(`📋 AI Instructions ❯ Version ${version}${activeLabel}`);
41
+ console.log(_chalk.default.dim(' Content:'));
42
+ console.log(`\n${inst.content}\n`);
43
+ const choices = [{
44
+ name: ` ${_chalk.default.dim('← Back')}`,
45
+ value: 'back'
46
+ }, ...(!inst.active ? [{
47
+ name: ` ${_chalk.default.cyan('⚡ Activate this version')}`,
48
+ value: 'activate'
49
+ }] : []), {
50
+ name: ` ${_chalk.default.red('✕ Exit')}`,
51
+ value: 'exit'
52
+ }];
53
+ const {
54
+ action
55
+ } = await _inquirer.default.prompt([{
56
+ type: 'list',
57
+ name: 'action',
58
+ message: _chalk.default.bold('What would you like to do?'),
59
+ choices
60
+ }]);
61
+ if (action === 'activate') {
62
+ const sp = (0, _ora.default)(`Activating version ${version}…`).start();
63
+ try {
64
+ await (0, _wixApi.wixRequest)({
65
+ path: `${BASE}/activate/${version}`,
66
+ method: 'POST'
67
+ });
68
+ sp.stop();
69
+ console.log(_chalk.default.green(`✔ Version ${version} is now active\n`));
70
+ } catch (err_) {
71
+ sp.fail('Activation failed');
72
+ console.error(_chalk.default.red(err_.message));
73
+ }
74
+ return 'refetch';
75
+ }
76
+ return action;
77
+ }
78
+ async function runInstructionsWizard() {
79
+ process.on('SIGINT', () => {
80
+ console.log(_chalk.default.dim('\nBye.\n'));
81
+ process.exit(0);
82
+ });
83
+
84
+ // Fetch once, keep local copy so activation updates in-memory
85
+ const sp = (0, _ora.default)('Fetching instructions…').start();
86
+ let instructions = [];
87
+ try {
88
+ const data = await (0, _wixApi.wixRequest)({
89
+ path: `${BASE}/query`,
90
+ method: 'POST',
91
+ body: {
92
+ query: {}
93
+ }
94
+ });
95
+ sp.stop();
96
+ instructions = data.instructions ?? [];
97
+ } catch (err_) {
98
+ sp.fail('Failed to fetch instructions');
99
+ console.error(_chalk.default.red(err_.message));
100
+ process.exit(1);
101
+ }
102
+ if (instructions.length === 0) {
103
+ console.log(_chalk.default.yellow('No instructions found.'));
104
+ process.exit(0);
105
+ }
106
+ let running = true;
107
+ while (running) {
108
+ console.clear();
109
+ printHeader(`📋 AI Instructions ${_chalk.default.dim(`${instructions.length} versions`)}`);
110
+ printDivider('[↑↓] Navigate [Enter] Select [Ctrl+C] Quit');
111
+ const choices = [...instructions.map(inst => {
112
+ const activeTag = inst.active ? _chalk.default.green(' ✓ active') : _chalk.default.dim(' ');
113
+ const label = ` v${inst.version}${activeTag} ${_chalk.default.white(truncate(inst.content))}`;
114
+ return {
115
+ name: label,
116
+ value: inst.version
117
+ };
118
+ }), new _inquirer.default.Separator('─'.repeat(BOX_W)), {
119
+ name: ` ${_chalk.default.red('✕ Exit')}`,
120
+ value: '__exit__'
121
+ }];
122
+ const {
123
+ version
124
+ } = await _inquirer.default.prompt([{
125
+ type: 'list',
126
+ name: 'version',
127
+ message: _chalk.default.bold('Select a version'),
128
+ choices,
129
+ pageSize: 12
130
+ }]);
131
+ if (version === '__exit__') break;
132
+ const result = await showInstructionDetail(version, instructions);
133
+ if (result === 'exit') break;
134
+ if (result === 'refetch') {
135
+ try {
136
+ const data = await (0, _wixApi.wixRequest)({
137
+ path: `${BASE}/query`,
138
+ method: 'POST',
139
+ body: {
140
+ query: {}
141
+ }
142
+ });
143
+ instructions = data.instructions ?? instructions;
144
+ } catch {
145
+ // keep existing data if re-fetch fails
146
+ }
147
+ }
148
+ }
149
+ console.clear();
150
+ console.log(_chalk.default.dim('Bye.\n'));
151
+ process.exit(0);
152
+ }
153
+
154
+ // ── Diff helper ───────────────────────────────────────────────────────────
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 ───────────────────────────────────────────────────────────
175
+
176
+ const getActiveCmd = new _commander.Command('get-active').description('Get the currently active instruction').action(async () => {
177
+ const sp = (0, _print.spinner)('Fetching active instruction...');
178
+ try {
179
+ const data = await (0, _wixApi.wixRequest)({
180
+ path: `${BASE}/active`
181
+ });
182
+ sp.stop();
183
+ const {
184
+ version,
185
+ content
186
+ } = data.instruction;
187
+ console.log(_chalk.default.bold(`Version ${version}`));
188
+ console.log();
189
+ console.log(content);
190
+ } catch (err_) {
191
+ sp.stop();
192
+ (0, _print.error)(err_.message);
193
+ process.exit(1);
194
+ }
195
+ });
196
+ const listCmd = new _commander.Command('list').description('List all instructions').option('--active', 'Show only the currently active instruction').option('--format <format>', 'Output format: table (default) or json', 'table').action(async opts => {
197
+ const sp = (0, _print.spinner)('Fetching instructions...');
198
+ try {
199
+ const data = await (0, _wixApi.wixRequest)({
200
+ path: `${BASE}/query`,
201
+ method: 'POST',
202
+ body: {
203
+ query: {}
204
+ }
205
+ });
206
+ sp.stop();
207
+ let items = data.instructions ?? [];
208
+ if (opts.active) {
209
+ items = items.filter(i => i.active);
210
+ }
211
+ if (opts.format === 'json') {
212
+ const view = items.map(({
213
+ version,
214
+ active,
215
+ content
216
+ }) => ({
217
+ version,
218
+ active: active ?? false,
219
+ content
220
+ }));
221
+ console.log(JSON.stringify(view, null, 2));
222
+ } else {
223
+ const header = `${'Version'.padEnd(10)}${'Active'.padEnd(10)}Content`;
224
+ console.log(_chalk.default.bold(header));
225
+ console.log('─'.repeat(60));
226
+ for (const i of items) {
227
+ const ver = `v${i.version}`.padEnd(10);
228
+ const active = (i.active ? '✓' : '').padEnd(10);
229
+ const content = truncate(i.content, 40);
230
+ console.log(`${_chalk.default.cyan(ver)}${_chalk.default.green(active)}${content}`);
231
+ }
232
+ }
233
+ } catch (err_) {
234
+ sp.stop();
235
+ (0, _print.error)(err_.message);
236
+ process.exit(1);
237
+ }
238
+ });
239
+ const activateCmd = new _commander.Command('set-active').description('Set an instruction as active by version number').argument('<version>', 'Version number to activate').action(async version => {
240
+ const sp = (0, _print.spinner)(`Activating instruction version ${version}...`);
241
+ try {
242
+ await (0, _wixApi.wixRequest)({
243
+ path: `${BASE}/activate/${version}`,
244
+ method: 'POST'
245
+ });
246
+ sp.stop();
247
+ (0, _print.success)(`Activated version ${version}`);
248
+ } catch (err_) {
249
+ sp.stop();
250
+ (0, _print.error)(err_.message);
251
+ process.exit(1);
252
+ }
253
+ });
254
+ const getCmd = new _commander.Command('get').description('Get an instruction by version number').argument('<version>', 'Version number').action(async version => {
255
+ const sp = (0, _print.spinner)(`Fetching instruction version ${version}...`);
256
+ try {
257
+ const data = await (0, _wixApi.wixRequest)({
258
+ path: `${BASE}/by-version/${version}`
259
+ });
260
+ sp.stop();
261
+ const {
262
+ version: ver,
263
+ content
264
+ } = data.instruction;
265
+ console.log(_chalk.default.bold(`Version ${ver}`));
266
+ console.log();
267
+ console.log(content);
268
+ } catch (err_) {
269
+ sp.stop();
270
+ (0, _print.error)(err_.message);
271
+ process.exit(1);
272
+ }
273
+ });
274
+ const diffCmd = new _commander.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) => {
275
+ const sp = (0, _print.spinner)(`Fetching versions ${v1} and ${v2}...`);
276
+ try {
277
+ const [d1, d2] = await Promise.all([(0, _wixApi.wixRequest)({
278
+ path: `${BASE}/by-version/${v1}`
279
+ }), (0, _wixApi.wixRequest)({
280
+ path: `${BASE}/by-version/${v2}`
281
+ })]);
282
+ sp.stop();
283
+ console.log(diffContent(d1.instruction.content, d2.instruction.content, v1, v2));
284
+ } catch (err_) {
285
+ sp.stop();
286
+ (0, _print.error)(err_.message);
287
+ process.exit(1);
288
+ }
289
+ });
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 => {
291
+ const sp = (0, _print.spinner)(`Fetching instruction version ${opts.version}...`);
292
+ try {
293
+ const data = await (0, _wixApi.wixRequest)({
294
+ path: `${BASE}/by-version/${opts.version}`
295
+ });
296
+ sp.stop();
297
+ const outPath = path.resolve(opts.output);
298
+ fs.writeFileSync(outPath, data.instruction.content, 'utf8');
299
+ (0, _print.success)(`Exported version ${opts.version} to ${outPath}`);
300
+ } catch (err_) {
301
+ sp.stop();
302
+ (0, _print.error)(err_.message);
303
+ process.exit(1);
304
+ }
305
+ });
306
+ const rollbackCmd = new _commander.Command('rollback').description('Re-activate the version that was active before the current one').action(async () => {
307
+ const sp = (0, _print.spinner)('Fetching instructions...');
308
+ try {
309
+ const data = await (0, _wixApi.wixRequest)({
310
+ path: `${BASE}/query`,
311
+ method: 'POST',
312
+ body: {
313
+ query: {}
314
+ }
315
+ });
316
+ sp.stop();
317
+ const instructions = data.instructions ?? [];
318
+ const active = instructions.find(i => i.active);
319
+ if (!active) {
320
+ (0, _print.error)('No active instruction found — nothing to roll back from.');
321
+ process.exit(1);
322
+ }
323
+ const previous = instructions.filter(i => !i.active && Number(i.version) < Number(active.version)).sort((a, b) => Number(b.version) - Number(a.version))[0];
324
+ if (!previous) {
325
+ (0, _print.error)(`No previous version found before v${active.version}.`);
326
+ process.exit(1);
327
+ }
328
+ const sp2 = (0, _print.spinner)(`Rolling back to version ${previous.version}...`);
329
+ await (0, _wixApi.wixRequest)({
330
+ path: `${BASE}/activate/${previous.version}`,
331
+ method: 'POST'
332
+ });
333
+ sp2.stop();
334
+ (0, _print.success)(`Rolled back to v${previous.version} (was v${active.version})`);
335
+ } catch (err_) {
336
+ sp.stop();
337
+ (0, _print.error)(err_.message);
338
+ process.exit(1);
339
+ }
340
+ });
341
+
342
+ // ── Command export ────────────────────────────────────────────────────────
343
+
344
+ const wizardCmd = new _commander.Command('wizard').description('Open the interactive TUI to browse and activate instruction versions').action(async () => {
345
+ try {
346
+ await runInstructionsWizard();
347
+ } catch (err_) {
348
+ const msg = err_.message ?? '';
349
+ if (msg.includes('force closed') || msg.includes('User force')) {
350
+ console.log(_chalk.default.dim('\nBye.'));
351
+ process.exit(0);
352
+ }
353
+ console.error(_chalk.default.red('Unexpected error: ' + msg));
354
+ process.exit(1);
355
+ }
356
+ });
357
+ const instructionsCommand = exports.instructionsCommand = new _commander.Command('instructions').description('Manage AI instructions').action(function () {
358
+ this.outputHelp();
359
+ }).addCommand(wizardCmd).addCommand(getActiveCmd).addCommand(listCmd).addCommand(activateCmd).addCommand(getCmd).addCommand(diffCmd).addCommand(exportCmd).addCommand(rollbackCmd);
360
+ //# sourceMappingURL=instructions.js.map
@@ -0,0 +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":[]}