@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.
- package/bin/web5.js +1 -2
- package/dist/cjs/auth/deviceFlow.js +96 -17
- package/dist/cjs/auth/deviceFlow.js.map +1 -1
- package/dist/cjs/auth/index.js +40 -10
- package/dist/cjs/auth/index.js.map +1 -1
- package/dist/cjs/cli.js +3 -3
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/commands/bundle.js +12 -4
- package/dist/cjs/commands/bundle.js.map +1 -1
- package/dist/cjs/commands/conversation.js.map +1 -1
- package/dist/cjs/commands/conversationWizard.js +36 -12
- package/dist/cjs/commands/conversationWizard.js.map +1 -1
- package/dist/cjs/commands/deploy.js +55 -10
- package/dist/cjs/commands/deploy.js.map +1 -1
- package/dist/cjs/commands/ecom.js +239 -0
- package/dist/cjs/commands/ecom.js.map +1 -0
- package/dist/cjs/commands/embed.js +41 -52
- package/dist/cjs/commands/embed.js.map +1 -1
- package/dist/cjs/commands/init.js +34 -3
- package/dist/cjs/commands/init.js.map +1 -1
- package/dist/cjs/commands/instructions.js +147 -51
- package/dist/cjs/commands/instructions.js.map +1 -1
- package/dist/cjs/commands/login.js +8 -4
- package/dist/cjs/commands/login.js.map +1 -1
- package/dist/cjs/commands/serve.js.map +1 -1
- package/dist/cjs/commands/validate.js +368 -16
- package/dist/cjs/commands/validate.js.map +1 -1
- package/dist/cjs/commands/whoami.js.map +1 -1
- package/dist/cjs/templates/aiInstructionsSchema.js +5 -1
- package/dist/cjs/templates/aiInstructionsSchema.js.map +1 -1
- package/dist/cjs/templates/cmsMappingSchema.js +132 -0
- package/dist/cjs/templates/cmsMappingSchema.js.map +1 -0
- package/dist/cjs/templates/embedDocs.js +488 -0
- package/dist/cjs/templates/embedDocs.js.map +1 -0
- package/dist/cjs/utils/project.js +13 -0
- package/dist/cjs/utils/project.js.map +1 -1
- package/dist/cjs/utils/wixApi.js +3 -1
- package/dist/cjs/utils/wixApi.js.map +1 -1
- package/dist/esm/auth/deviceFlow.js +95 -17
- package/dist/esm/auth/deviceFlow.js.map +1 -1
- package/dist/esm/auth/index.js +40 -11
- package/dist/esm/auth/index.js.map +1 -1
- package/dist/esm/cli.js +3 -3
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/bundle.js +12 -4
- package/dist/esm/commands/bundle.js.map +1 -1
- package/dist/esm/commands/conversation.js.map +1 -1
- package/dist/esm/commands/conversationWizard.js +36 -12
- package/dist/esm/commands/conversationWizard.js.map +1 -1
- package/dist/esm/commands/deploy.js +55 -10
- package/dist/esm/commands/deploy.js.map +1 -1
- package/dist/esm/commands/ecom.js +234 -0
- package/dist/esm/commands/ecom.js.map +1 -0
- package/dist/esm/commands/embed.js +42 -52
- package/dist/esm/commands/embed.js.map +1 -1
- package/dist/esm/commands/init.js +34 -3
- package/dist/esm/commands/init.js.map +1 -1
- package/dist/esm/commands/instructions.js +152 -53
- package/dist/esm/commands/instructions.js.map +1 -1
- package/dist/esm/commands/login.js +8 -4
- package/dist/esm/commands/login.js.map +1 -1
- package/dist/esm/commands/serve.js.map +1 -1
- package/dist/esm/commands/validate.js +373 -19
- package/dist/esm/commands/validate.js.map +1 -1
- package/dist/esm/commands/whoami.js.map +1 -1
- package/dist/esm/templates/aiInstructionsSchema.js +5 -1
- package/dist/esm/templates/aiInstructionsSchema.js.map +1 -1
- package/dist/esm/templates/cmsMappingSchema.js +128 -0
- package/dist/esm/templates/cmsMappingSchema.js.map +1 -0
- package/dist/esm/templates/embedDocs.js +484 -0
- package/dist/esm/templates/embedDocs.js.map +1 -0
- package/dist/esm/utils/project.js +15 -0
- package/dist/esm/utils/project.js.map +1 -1
- package/dist/esm/utils/wixApi.js +4 -2
- package/dist/esm/utils/wixApi.js.map +1 -1
- package/dist/types/auth/deviceFlow.d.ts +1 -1
- package/dist/types/auth/deviceFlow.d.ts.map +1 -1
- package/dist/types/auth/index.d.ts +2 -1
- package/dist/types/auth/index.d.ts.map +1 -1
- package/dist/types/commands/bundle.d.ts.map +1 -1
- package/dist/types/commands/conversation.d.ts.map +1 -1
- package/dist/types/commands/conversationWizard.d.ts.map +1 -1
- package/dist/types/commands/deploy.d.ts.map +1 -1
- package/dist/types/commands/ecom.d.ts +3 -0
- package/dist/types/commands/ecom.d.ts.map +1 -0
- package/dist/types/commands/embed.d.ts.map +1 -1
- package/dist/types/commands/init.d.ts.map +1 -1
- package/dist/types/commands/instructions.d.ts.map +1 -1
- package/dist/types/commands/login.d.ts.map +1 -1
- package/dist/types/commands/serve.d.ts.map +1 -1
- package/dist/types/commands/validate.d.ts +4 -2
- package/dist/types/commands/validate.d.ts.map +1 -1
- package/dist/types/commands/whoami.d.ts.map +1 -1
- package/dist/types/templates/aiInstructionsSchema.d.ts.map +1 -1
- package/dist/types/templates/cmsMappingSchema.d.ts +2 -0
- package/dist/types/templates/cmsMappingSchema.d.ts.map +1 -0
- package/dist/types/templates/embedDocs.d.ts +2 -0
- package/dist/types/templates/embedDocs.d.ts.map +1 -0
- package/dist/types/utils/project.d.ts +3 -0
- package/dist/types/utils/project.d.ts.map +1 -1
- package/dist/types/utils/wixApi.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/cjs/commands/getClientId.js +0 -60
- package/dist/cjs/commands/getClientId.js.map +0 -1
- package/dist/esm/commands/getClientId.js +0 -56
- package/dist/esm/commands/getClientId.js.map +0 -1
- package/dist/types/commands/getClientId.d.ts +0 -3
- package/dist/types/commands/getClientId.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Command","readline","fs","path","inquirer","chalk","ora","open","wixRequest","verbose","BOX_W","printHeader","breadcrumb","pad","repeat","Math","max","length","console","log","cyan","bold","printFooterHints","hints","line","dim","timeAgo","iso","diff","Date","now","getTime","mins","floor","hours","days","formatTime","toLocaleTimeString","hour","minute","truncate","text","clean","replace","trim","slice","renderMarkdownLine","h3","match","underline","h2","h1","_","t","yellow","renderMarkdown","split","map","join","pressEnterToContinue","rl","createInterface","input","process","stdin","output","stdout","Promise","resolve","question","close","buildRow","createdDate","label","time","ago","divider","white","showRootsScreen","spinner","start","roots","data","method","body","stop","messages","err","fail","error","red","message","type","clear","choices","r","i","name","triggerIdContent","content","value","Separator","rootIndex","prompt","pageSize","selected","messageId","id","userQuery","conversationId","showMessagesScreen","convLabel","msg","push","msgIndex","index","showMessageDetailScreen","isUser","role","icon","tid","triggerId","browserUrl","action","runWizard","verboseFlag","on","exit","screen","running","s","printMessages","format","view","_ref","JSON","stringify","green","getCmd","description","option","opts","answer","listCmd","sp","since","isNaN","filter","limit","parseInt","toLocaleString","exportCmd","requiredOption","outPath","ext","extname","toLowerCase","lines","writeFileSync","openCmd","wizardCmd","logs","includes","conversationsCommand","outputHelp","addCommand"],"sources":["../../../src/commands/conversationWizard.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as readline from 'readline';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport open from 'open';\nimport { wixRequest } from '../utils/wixApi';\n\n// ── API response shapes ────────────────────────────────────────────────────\n\ninterface ConversationRoot {\n id?: string;\n triggerId?: string;\n conversationId?: string;\n content?: string;\n text?: string;\n triggerIdContent?: string;\n createdDate?: string;\n}\n\ninterface QueryRootsResponse {\n messages?: ConversationRoot[];\n}\n\ninterface ConversationMessage {\n id?: string;\n triggerId?: string;\n role?: 'user' | 'assistant' | string;\n content?: string;\n triggerIdContent?: string;\n createdDate?: string;\n}\n\ninterface GetConversationResponse {\n messages?: ConversationMessage[];\n}\n\n// ── Verbose flag ───────────────────────────────────────────────────────────\n\nlet verbose = false;\n\n// ── Wizard state ───────────────────────────────────────────────────────────\n\ntype WizardScreen =\n | { type: 'roots' }\n | {\n type: 'messages';\n messageId: string;\n userQuery: string;\n conversationId: string;\n }\n | {\n type: 'message-detail';\n messages: ConversationMessage[];\n messageId: string;\n userQuery: string;\n conversationId: string;\n index: number;\n }\n | { type: 'exit' };\n\n// ── UI primitives ──────────────────────────────────────────────────────────\n\nconst BOX_W = 66;\n\n/** Double-border header box — visually distinct section for breadcrumbs */\nfunction printHeader(breadcrumb: string): void {\n const pad = ' '.repeat(Math.max(0, BOX_W - breadcrumb.length - 1));\n console.log(chalk.cyan('╔' + '═'.repeat(BOX_W) + '╗'));\n console.log(\n `${chalk.cyan('║')} ${chalk.bold(breadcrumb)}${pad}${chalk.cyan('║')}`,\n );\n console.log(chalk.cyan('╚' + '═'.repeat(BOX_W) + '╝'));\n console.log();\n}\n\n/** Thin separator line with inline hint text */\nfunction printFooterHints(hints: string): void {\n const line = '─'.repeat(BOX_W + 2);\n console.log(chalk.dim(line));\n console.log(chalk.dim(` ${hints}`));\n console.log();\n}\n\n// ── Time helpers ───────────────────────────────────────────────────────────\n\nfunction timeAgo(iso: string | undefined): string {\n if (!iso) {\n return 'unknown';\n }\n const diff = Date.now() - new Date(iso).getTime();\n const mins = Math.floor(diff / 60_000);\n const hours = Math.floor(diff / 3_600_000);\n const days = Math.floor(diff / 86_400_000);\n if (mins < 1) {\n return 'just now';\n }\n if (mins < 60) {\n return `${mins}m ago`;\n }\n if (hours < 24) {\n return `${hours}h ago`;\n }\n return `${days}d ago`;\n}\n\nfunction formatTime(iso: string | undefined): string {\n if (!iso) {\n return '??:??';\n }\n try {\n return new Date(iso).toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n });\n } catch {\n return iso;\n }\n}\n\nfunction truncate(text: string, max = 50): string {\n const clean = text\n .replace(/\\n/g, ' ')\n .replace(/<!--.*?-->/g, '')\n .trim();\n return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;\n}\n\n// ── Markdown renderer ──────────────────────────────────────────────────────\n\nfunction renderMarkdownLine(line: string): string {\n const h3 = line.match(/^### (.+)/);\n if (h3) {\n return chalk.bold.underline(h3[1]);\n }\n const h2 = line.match(/^## (.+)/);\n if (h2) {\n return chalk.bold.underline(h2[1]);\n }\n const h1 = line.match(/^# (.+)/);\n if (h1) {\n return chalk.bold.underline(h1[1]);\n }\n return line\n .replace(/\\*\\*(.+?)\\*\\*/g, (_, t: string) => chalk.bold(t))\n .replace(/`([^`]+)`/g, (_, t: string) => chalk.yellow(t));\n}\n\nfunction renderMarkdown(text: string): string {\n return text.split('\\n').map(renderMarkdownLine).join('\\n');\n}\n\nfunction pressEnterToContinue(): Promise<void> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n return new Promise((resolve) => {\n rl.question(chalk.dim('\\nPress Enter to go back…'), () => {\n rl.close();\n resolve();\n });\n });\n}\n\n// ── Row builder ────────────────────────────────────────────────────────────\n\n/** Builds a single list row: 🕒 HH:MM (Nm ago) │ message text */\nfunction buildRow(createdDate: string | undefined, label: string): string {\n const time = chalk.dim(`🕒 ${formatTime(createdDate)}`);\n const ago = chalk.dim(`(${timeAgo(createdDate)})`);\n const divider = chalk.dim(' │ ');\n const text = chalk.white(truncate(label, 42));\n return ` ${time} ${ago}${divider}${text}`;\n}\n\n// ── Screens ────────────────────────────────────────────────────────────────\n\nasync function showRootsScreen(): Promise<WizardScreen> {\n const spinner = ora('Fetching conversations…').start();\n\n let roots: ConversationRoot[] = [];\n try {\n const data = await wixRequest<QueryRootsResponse>({\n path: '/web5/conversations/cli/roots/query',\n method: 'POST',\n body: {},\n verbose,\n });\n spinner.stop();\n roots = data.messages ?? [];\n } catch (err) {\n spinner.fail('Failed to fetch conversations');\n console.error(chalk.red((err as Error).message));\n await pressEnterToContinue();\n return { type: 'roots' };\n }\n\n if (roots.length === 0) {\n console.clear();\n console.log(chalk.yellow('No conversations found.'));\n await pressEnterToContinue();\n return { type: 'exit' };\n }\n\n console.clear();\n printHeader(`📁 Conversations ${chalk.dim(`${roots.length} total`)}`);\n printFooterHints('[↑↓] Navigate [Enter] Select [Ctrl+C] Quit');\n\n const choices = [\n ...roots.map((r, i) => ({\n name: buildRow(\n r.createdDate,\n r.triggerIdContent ?? r.text ?? r.content ?? '(no content)',\n ),\n value: i,\n })),\n new inquirer.Separator('─'.repeat(BOX_W)),\n { name: ` ${chalk.red('✕ Exit')}`, value: -1 },\n ];\n\n const { rootIndex } = await inquirer.prompt<{ rootIndex: number }>([\n {\n type: 'list',\n name: 'rootIndex',\n message: chalk.bold('Select a conversation'),\n choices,\n pageSize: 12,\n },\n ]);\n\n if (rootIndex === -1) {\n return { type: 'exit' };\n }\n\n const selected = roots[rootIndex];\n return {\n type: 'messages',\n messageId: selected.id ?? '',\n userQuery: selected.triggerIdContent ?? '',\n conversationId: selected.conversationId ?? '',\n };\n}\n\nasync function showMessagesScreen(\n messageId: string,\n userQuery: string,\n conversationId: string,\n): Promise<WizardScreen> {\n if (!messageId) {\n console.error(chalk.red('No message ID — returning to root list.'));\n await pressEnterToContinue();\n return { type: 'roots' };\n }\n\n const spinner = ora('Loading conversation…').start();\n\n let messages: ConversationMessage[] = [];\n try {\n const data = await wixRequest<GetConversationResponse>({\n path: `/web5/conversations/cli/by-message/${messageId}`,\n verbose,\n });\n spinner.stop();\n messages = data.messages ?? [];\n } catch (err) {\n spinner.fail('Failed to load conversation');\n console.error(chalk.red((err as Error).message));\n await pressEnterToContinue();\n return { type: 'roots' };\n }\n\n if (messages.length === 0) {\n console.clear();\n console.log(chalk.yellow('No messages in this conversation.'));\n await pressEnterToContinue();\n return { type: 'roots' };\n }\n\n console.clear();\n const convLabel = conversationId || messageId.slice(0, 12) + '…';\n printHeader(\n `📁 Conversations ❯ 💬 ${convLabel} ${chalk.dim(\n `${messages.length} messages`,\n )}`,\n );\n printFooterHints('[↑↓] Navigate [Enter] Expand [Ctrl+C] Quit');\n\n const choices: (\n | { name: string; value: number }\n | InstanceType<typeof inquirer.Separator>\n )[] = messages.map((msg, i) => ({\n name: buildRow(\n msg.createdDate,\n msg.triggerIdContent ?? msg.content ?? '(no query)',\n ),\n value: i,\n }));\n\n choices.push(new inquirer.Separator('─'.repeat(BOX_W)));\n choices.push({ name: ` ${chalk.dim('← Back')}`, value: -1 });\n choices.push({ name: ` ${chalk.red('✕ Exit')}`, value: -2 });\n\n const { msgIndex } = await inquirer.prompt<{ msgIndex: number }>([\n {\n type: 'list',\n name: 'msgIndex',\n message: chalk.bold('Select a message to expand'),\n choices,\n pageSize: 12,\n },\n ]);\n\n if (msgIndex === -2) {\n return { type: 'exit' };\n }\n if (msgIndex === -1) {\n return { type: 'roots' };\n }\n return {\n type: 'message-detail',\n messages,\n messageId,\n userQuery,\n conversationId,\n index: msgIndex,\n };\n}\n\nasync function showMessageDetailScreen(\n messages: ConversationMessage[],\n index: number,\n conversationId: string,\n): Promise<void> {\n console.clear();\n\n const msg = messages[index];\n if (!msg) {\n console.error(chalk.red('Message not found.'));\n return;\n }\n\n const isUser = msg.role === 'user';\n const icon = isUser ? '👤' : '🤖';\n const label = isUser ? 'User Query' : 'AI Response';\n const convLabel = conversationId || 'message';\n\n printHeader(`📁 Conversations ❯ 💬 ${convLabel} ❯ ${icon} ${label}`);\n\n // Metadata row\n console.log(\n chalk.dim(\n ` 🕒 ${formatTime(msg.createdDate)} (${timeAgo(msg.createdDate)})\\n`,\n ),\n );\n\n // Content\n const content = msg.content ?? '(empty)';\n console.log(isUser ? chalk.cyan(content) : renderMarkdown(content));\n console.log();\n\n // Action section\n console.log(chalk.cyan('╔' + '═'.repeat(BOX_W) + '╗'));\n console.log(\n `${chalk.cyan('║')} ${chalk.bold('Actions')}${' '.repeat(\n BOX_W - 9,\n )}${chalk.cyan('║')}`,\n );\n console.log(chalk.cyan('╚' + '═'.repeat(BOX_W) + '╝'));\n console.log();\n\n const tid = msg.triggerId ?? '';\n const browserUrl = `https://www.copyofcircanafordemo.com/web5#tid=${tid}`;\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 { name: ` ${chalk.dim('← Back')}`, value: 'back' },\n { name: ` 🌐 Open in browser`, value: 'browser' },\n ],\n },\n ]);\n\n if (action === 'browser') {\n await open(browserUrl);\n }\n}\n\n// ── Main loop ──────────────────────────────────────────────────────────────\n\nasync function runWizard(verboseFlag: boolean): Promise<void> {\n verbose = verboseFlag;\n process.on('SIGINT', () => {\n console.log(chalk.dim('\\nBye.\\n'));\n process.exit(0);\n });\n\n let screen: WizardScreen = { type: 'roots' };\n let running = true;\n\n while (running) {\n switch (screen.type) {\n case 'roots':\n screen = await showRootsScreen();\n break;\n\n case 'messages':\n screen = await showMessagesScreen(\n screen.messageId,\n screen.userQuery,\n screen.conversationId,\n );\n break;\n\n case 'message-detail': {\n const s: {\n type: 'message-detail';\n messages: ConversationMessage[];\n messageId: string;\n userQuery: string;\n conversationId: string;\n index: number;\n } = screen;\n await showMessageDetailScreen(s.messages, s.index, s.conversationId);\n screen = {\n type: 'messages',\n messageId: s.messageId,\n userQuery: s.userQuery,\n conversationId: s.conversationId,\n };\n break;\n }\n\n case 'exit':\n console.clear();\n console.log(chalk.dim('Bye.\\n'));\n running = false;\n break;\n }\n }\n process.exit(0);\n}\n\n// ── Subcommands ────────────────────────────────────────────────────────────\n\ninterface ConversationDetail {\n id?: string;\n triggerId?: string;\n active?: boolean;\n messages?: ConversationMessage[];\n [key: string]: unknown;\n}\n\n// ── get ────────────────────────────────────────────────────────────────────\n\nfunction printMessages(messages: ConversationMessage[], format: string): void {\n if (messages.length === 0) {\n console.log('(no messages)');\n return;\n }\n if (format === 'json') {\n const view = messages.map(({ role, content, createdDate }) => ({ role, content, createdDate }));\n console.log(JSON.stringify(view, null, 2));\n return;\n }\n for (const msg of messages) {\n const isUser = msg.role === 'user';\n const role = isUser ? chalk.cyan('user: ') : chalk.green('assistant:');\n const time = msg.createdDate ? chalk.dim(` [${formatTime(msg.createdDate)}]`) : '';\n const text = (isUser ? (msg.triggerIdContent ?? msg.content) : msg.content) ?? '(empty)';\n console.log(`${role}${time}`);\n console.log(text);\n console.log();\n }\n}\n\nconst getCmd = new Command('get')\n .description('Get a conversation by message ID (--id) or trigger ID (--tid)')\n .option('--id <id>', 'Message ID — from conversations list')\n .option('--tid <tid>', 'Trigger ID (TID)')\n .option('--format <format>', 'Output format: text (default) or json', 'text')\n .action(async (opts: { id?: string; tid?: string; format?: string }) => {\n try {\n if (opts.id) {\n const data = await wixRequest<GetConversationResponse>({\n path: `/web5/conversations/cli/by-message/${opts.id}`,\n verbose,\n });\n printMessages(data.messages ?? [], opts.format ?? 'text');\n return;\n }\n\n let tid: string = opts.tid ?? '';\n if (!tid) {\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n tid = await new Promise<string>((resolve) => {\n rl.question('Enter trigger ID (TID): ', (answer) => { rl.close(); resolve(answer.trim()); });\n });\n }\n if (!tid) {\n console.error('Error: provide --id <message-id> or --tid <trigger-id>');\n process.exit(1);\n }\n\n const data = await wixRequest<ConversationDetail>({\n path: `/_api/conversation-history/v1/conversations/by-trigger/${tid}`,\n });\n printMessages(data.messages ?? [], opts.format ?? 'text');\n } catch (err) {\n console.error('Error:', (err as Error).message);\n process.exit(1);\n }\n });\n\n// ── list ───────────────────────────────────────────────────────────────────\n\nconst listCmd = new Command('list')\n .description('List conversations (non-interactive)')\n .option('--limit <n>', 'Maximum number of conversations to show', '50')\n .option('--since <date>', 'Only show conversations created after this ISO date')\n .action(async (opts: { limit?: string; since?: string }) => {\n const sp = ora('Fetching conversations…').start();\n try {\n const data = await wixRequest<QueryRootsResponse>({\n path: '/web5/conversations/cli/roots/query',\n method: 'POST',\n body: {},\n verbose,\n });\n sp.stop();\n\n let roots = data.messages ?? [];\n\n if (opts.since) {\n const since = new Date(opts.since).getTime();\n if (isNaN(since)) {\n console.error('Error: --since must be a valid ISO date string');\n process.exit(1);\n }\n roots = roots.filter((r) => {\n if (!r.createdDate) return true;\n return new Date(r.createdDate).getTime() >= since;\n });\n }\n\n const limit = parseInt(opts.limit ?? '50', 10);\n roots = roots.slice(0, limit);\n\n if (roots.length === 0) {\n console.log(chalk.yellow('No conversations found.'));\n return;\n }\n for (const r of roots) {\n const label = truncate(r.triggerIdContent ?? r.text ?? r.content ?? '(no content)', 80);\n const time = r.createdDate\n ? chalk.dim(`[${new Date(r.createdDate).toLocaleString()}] `)\n : '';\n const id = r.id ? chalk.dim(` --id ${r.id}`) : '';\n console.log(`${time}${label}${id}`);\n }\n } catch (err) {\n sp.stop();\n console.error('Error:', (err as Error).message);\n process.exit(1);\n }\n });\n\n// ── export ─────────────────────────────────────────────────────────────────\n\nconst exportCmd = new Command('export')\n .description('Export a conversation to a file')\n .requiredOption('--id <tid>', 'Trigger ID (TID) of the conversation')\n .requiredOption('--output <file>', 'Output file path (.json or .md)')\n .action(async (opts: { id: string; output: string }) => {\n const sp = ora(`Fetching conversation ${opts.id}…`).start();\n try {\n const data = await wixRequest<ConversationDetail>({\n path: `/_api/conversation-history/v1/conversations/by-trigger/${opts.id}`,\n });\n sp.stop();\n\n const outPath = path.resolve(opts.output);\n const ext = path.extname(outPath).toLowerCase();\n\n if (ext === '.md') {\n const messages = data.messages ?? [];\n const lines: string[] = [`# Conversation ${opts.id}`, ''];\n for (const msg of messages) {\n const role = msg.role === 'user' ? '**User**' : '**Assistant**';\n const time = msg.createdDate ? ` _(${msg.createdDate})_` : '';\n lines.push(`### ${role}${time}`, '', msg.content ?? '(empty)', '');\n }\n fs.writeFileSync(outPath, lines.join('\\n'), 'utf8');\n } else {\n fs.writeFileSync(outPath, JSON.stringify(data, null, 2), 'utf8');\n }\n\n console.log(`Exported conversation to ${outPath}`);\n } catch (err) {\n sp.stop();\n console.error('Error:', (err as Error).message);\n process.exit(1);\n }\n });\n\n// ── open ───────────────────────────────────────────────────────────────────\n\nconst openCmd = new Command('open')\n .description('Open a conversation in the browser')\n .requiredOption('--id <tid>', 'Trigger ID (TID) of the conversation')\n .action(async (opts: { id: string }) => {\n const browserUrl = `https://www.copyofcircanafordemo.com/web5#tid=${opts.id}`;\n console.log(`Opening ${browserUrl}`);\n await open(browserUrl);\n });\n\n// ── Command export ─────────────────────────────────────────────────────────\n\nconst wizardCmd = new Command('wizard')\n .description('Open the interactive TUI to browse conversation history')\n .option('--logs', 'Print raw API requests and responses for debugging')\n .action(async (opts) => {\n try {\n await runWizard(opts.logs ?? false);\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 conversationsCommand = new Command('conversations')\n .description('Conversation history')\n .action(function (this: Command) {\n this.outputHelp();\n })\n .addCommand(wizardCmd)\n .addCommand(getCmd)\n .addCommand(listCmd)\n .addCommand(exportCmd)\n .addCommand(openCmd);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Command","readline","fs","path","inquirer","chalk","ora","open","wixRequest","findProjectRoot","readConfig","getFirstAllowedDomain","_config$allowedDomain","root","process","cwd","config","allowedDomains","verbose","BOX_W","printHeader","breadcrumb","pad","repeat","Math","max","length","console","log","cyan","bold","printFooterHints","hints","line","dim","timeAgo","iso","diff","Date","now","getTime","mins","floor","hours","days","formatTime","toLocaleTimeString","hour","minute","truncate","text","clean","replace","trim","slice","renderMarkdownLine","h3","match","underline","h2","h1","_","t","yellow","renderMarkdown","split","map","join","pressEnterToContinue","rl","createInterface","input","stdin","output","stdout","Promise","resolve","question","close","buildRow","createdDate","label","time","ago","divider","white","showRootsScreen","spinner","start","roots","data","method","body","stop","messages","err","fail","error","red","message","type","clear","choices","r","i","name","triggerIdContent","content","value","Separator","rootIndex","prompt","pageSize","selected","messageId","id","userQuery","conversationId","showMessagesScreen","convLabel","msg","push","msgIndex","index","showMessageDetailScreen","isUser","role","icon","tid","triggerId","domain","action","runWizard","verboseFlag","on","exit","screen","running","s","printMessages","format","view","_ref","JSON","stringify","green","getCmd","description","option","opts","answer","listCmd","sp","since","isNaN","filter","limit","parseInt","toLocaleString","exportCmd","requiredOption","outPath","ext","extname","toLowerCase","lines","writeFileSync","openCmd","browserUrl","wizardCmd","logs","includes","conversationsCommand","outputHelp","addCommand"],"sources":["../../../src/commands/conversationWizard.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as readline from 'readline';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport inquirer from 'inquirer';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport open from 'open';\nimport { wixRequest } from '../utils/wixApi';\nimport { findProjectRoot, readConfig } from '../utils/project';\n\n// ── API response shapes ────────────────────────────────────────────────────\n\ninterface ConversationRoot {\n id?: string;\n triggerId?: string;\n conversationId?: string;\n content?: string;\n text?: string;\n triggerIdContent?: string;\n createdDate?: string;\n}\n\ninterface QueryRootsResponse {\n messages?: ConversationRoot[];\n}\n\ninterface ConversationMessage {\n id?: string;\n triggerId?: string;\n role?: 'user' | 'assistant' | string;\n content?: string;\n triggerIdContent?: string;\n createdDate?: string;\n}\n\ninterface GetConversationResponse {\n messages?: ConversationMessage[];\n}\n\n// ── Config helpers ─────────────────────────────────────────────────────────\n\nfunction getFirstAllowedDomain(): string | null {\n const root = findProjectRoot(process.cwd());\n if (!root) {\n return null;\n }\n const config = readConfig(root);\n return config.allowedDomains?.[0] ?? null;\n}\n\n// ── Verbose flag ───────────────────────────────────────────────────────────\n\nlet verbose = false;\n\n// ── Wizard state ───────────────────────────────────────────────────────────\n\ntype WizardScreen =\n | { type: 'roots' }\n | {\n type: 'messages';\n messageId: string;\n userQuery: string;\n conversationId: string;\n }\n | {\n type: 'message-detail';\n messages: ConversationMessage[];\n messageId: string;\n userQuery: string;\n conversationId: string;\n index: number;\n }\n | { type: 'exit' };\n\n// ── UI primitives ──────────────────────────────────────────────────────────\n\nconst BOX_W = 66;\n\n/** Double-border header box — visually distinct section for breadcrumbs */\nfunction printHeader(breadcrumb: string): void {\n const pad = ' '.repeat(Math.max(0, BOX_W - breadcrumb.length - 1));\n console.log(chalk.cyan('╔' + '═'.repeat(BOX_W) + '╗'));\n console.log(\n `${chalk.cyan('║')} ${chalk.bold(breadcrumb)}${pad}${chalk.cyan('║')}`,\n );\n console.log(chalk.cyan('╚' + '═'.repeat(BOX_W) + '╝'));\n console.log();\n}\n\n/** Thin separator line with inline hint text */\nfunction printFooterHints(hints: string): void {\n const line = '─'.repeat(BOX_W + 2);\n console.log(chalk.dim(line));\n console.log(chalk.dim(` ${hints}`));\n console.log();\n}\n\n// ── Time helpers ───────────────────────────────────────────────────────────\n\nfunction timeAgo(iso: string | undefined): string {\n if (!iso) {\n return 'unknown';\n }\n const diff = Date.now() - new Date(iso).getTime();\n const mins = Math.floor(diff / 60_000);\n const hours = Math.floor(diff / 3_600_000);\n const days = Math.floor(diff / 86_400_000);\n if (mins < 1) {\n return 'just now';\n }\n if (mins < 60) {\n return `${mins}m ago`;\n }\n if (hours < 24) {\n return `${hours}h ago`;\n }\n return `${days}d ago`;\n}\n\nfunction formatTime(iso: string | undefined): string {\n if (!iso) {\n return '??:??';\n }\n try {\n return new Date(iso).toLocaleTimeString([], {\n hour: '2-digit',\n minute: '2-digit',\n });\n } catch {\n return iso;\n }\n}\n\nfunction truncate(text: string, max = 50): string {\n const clean = text\n .replace(/\\n/g, ' ')\n .replace(/<!--.*?-->/g, '')\n .trim();\n return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;\n}\n\n// ── Markdown renderer ──────────────────────────────────────────────────────\n\nfunction renderMarkdownLine(line: string): string {\n const h3 = line.match(/^### (.+)/);\n if (h3) {\n return chalk.bold.underline(h3[1]);\n }\n const h2 = line.match(/^## (.+)/);\n if (h2) {\n return chalk.bold.underline(h2[1]);\n }\n const h1 = line.match(/^# (.+)/);\n if (h1) {\n return chalk.bold.underline(h1[1]);\n }\n return line\n .replace(/\\*\\*(.+?)\\*\\*/g, (_, t: string) => chalk.bold(t))\n .replace(/`([^`]+)`/g, (_, t: string) => chalk.yellow(t));\n}\n\nfunction renderMarkdown(text: string): string {\n return text.split('\\n').map(renderMarkdownLine).join('\\n');\n}\n\nfunction pressEnterToContinue(): Promise<void> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n return new Promise((resolve) => {\n rl.question(chalk.dim('\\nPress Enter to go back…'), () => {\n rl.close();\n resolve();\n });\n });\n}\n\n// ── Row builder ────────────────────────────────────────────────────────────\n\n/** Builds a single list row: 🕒 HH:MM (Nm ago) │ message text */\nfunction buildRow(createdDate: string | undefined, label: string): string {\n const time = chalk.dim(`🕒 ${formatTime(createdDate)}`);\n const ago = chalk.dim(`(${timeAgo(createdDate)})`);\n const divider = chalk.dim(' │ ');\n const text = chalk.white(truncate(label, 42));\n return ` ${time} ${ago}${divider}${text}`;\n}\n\n// ── Screens ────────────────────────────────────────────────────────────────\n\nasync function showRootsScreen(): Promise<WizardScreen> {\n const spinner = ora('Fetching conversations…').start();\n\n let roots: ConversationRoot[] = [];\n try {\n const data = await wixRequest<QueryRootsResponse>({\n path: '/web5/conversations/cli/roots/query',\n method: 'POST',\n body: {},\n verbose,\n });\n spinner.stop();\n roots = data.messages ?? [];\n } catch (err) {\n spinner.fail('Failed to fetch conversations');\n console.error(chalk.red((err as Error).message));\n await pressEnterToContinue();\n return { type: 'roots' };\n }\n\n if (roots.length === 0) {\n console.clear();\n console.log(chalk.yellow('No conversations found.'));\n await pressEnterToContinue();\n return { type: 'exit' };\n }\n\n console.clear();\n printHeader(`📁 Conversations ${chalk.dim(`${roots.length} total`)}`);\n printFooterHints('[↑↓] Navigate [Enter] Select [Ctrl+C] Quit');\n\n const choices = [\n ...roots.map((r, i) => ({\n name: buildRow(\n r.createdDate,\n r.triggerIdContent ?? r.text ?? r.content ?? '(no content)',\n ),\n value: i,\n })),\n new inquirer.Separator('─'.repeat(BOX_W)),\n { name: ` ${chalk.red('✕ Exit')}`, value: -1 },\n ];\n\n const { rootIndex } = await inquirer.prompt<{ rootIndex: number }>([\n {\n type: 'list',\n name: 'rootIndex',\n message: chalk.bold('Select a conversation'),\n choices,\n pageSize: 12,\n },\n ]);\n\n if (rootIndex === -1) {\n return { type: 'exit' };\n }\n\n const selected = roots[rootIndex];\n return {\n type: 'messages',\n messageId: selected.id ?? '',\n userQuery: selected.triggerIdContent ?? '',\n conversationId: selected.conversationId ?? '',\n };\n}\n\nasync function showMessagesScreen(\n messageId: string,\n userQuery: string,\n conversationId: string,\n): Promise<WizardScreen> {\n if (!messageId) {\n console.error(chalk.red('No message ID — returning to root list.'));\n await pressEnterToContinue();\n return { type: 'roots' };\n }\n\n const spinner = ora('Loading conversation…').start();\n\n let messages: ConversationMessage[] = [];\n try {\n const data = await wixRequest<GetConversationResponse>({\n path: `/web5/conversations/cli/by-message/${messageId}`,\n verbose,\n });\n spinner.stop();\n messages = data.messages ?? [];\n } catch (err) {\n spinner.fail('Failed to load conversation');\n console.error(chalk.red((err as Error).message));\n await pressEnterToContinue();\n return { type: 'roots' };\n }\n\n if (messages.length === 0) {\n console.clear();\n console.log(chalk.yellow('No messages in this conversation.'));\n await pressEnterToContinue();\n return { type: 'roots' };\n }\n\n console.clear();\n const convLabel = conversationId || messageId.slice(0, 12) + '…';\n printHeader(\n `📁 Conversations ❯ 💬 ${convLabel} ${chalk.dim(\n `${messages.length} messages`,\n )}`,\n );\n printFooterHints('[↑↓] Navigate [Enter] Expand [Ctrl+C] Quit');\n\n const choices: (\n | { name: string; value: number }\n | InstanceType<typeof inquirer.Separator>\n )[] = messages.map((msg, i) => ({\n name: buildRow(\n msg.createdDate,\n msg.triggerIdContent ?? msg.content ?? '(no query)',\n ),\n value: i,\n }));\n\n choices.push(new inquirer.Separator('─'.repeat(BOX_W)));\n choices.push({ name: ` ${chalk.dim('← Back')}`, value: -1 });\n choices.push({ name: ` ${chalk.red('✕ Exit')}`, value: -2 });\n\n const { msgIndex } = await inquirer.prompt<{ msgIndex: number }>([\n {\n type: 'list',\n name: 'msgIndex',\n message: chalk.bold('Select a message to expand'),\n choices,\n pageSize: 12,\n },\n ]);\n\n if (msgIndex === -2) {\n return { type: 'exit' };\n }\n if (msgIndex === -1) {\n return { type: 'roots' };\n }\n return {\n type: 'message-detail',\n messages,\n messageId,\n userQuery,\n conversationId,\n index: msgIndex,\n };\n}\n\nasync function showMessageDetailScreen(\n messages: ConversationMessage[],\n index: number,\n conversationId: string,\n): Promise<void> {\n console.clear();\n\n const msg = messages[index];\n if (!msg) {\n console.error(chalk.red('Message not found.'));\n return;\n }\n\n const isUser = msg.role === 'user';\n const icon = isUser ? '👤' : '🤖';\n const label = isUser ? 'User Query' : 'AI Response';\n const convLabel = conversationId || 'message';\n\n printHeader(`📁 Conversations ❯ 💬 ${convLabel} ❯ ${icon} ${label}`);\n\n // Metadata row\n console.log(\n chalk.dim(\n ` 🕒 ${formatTime(msg.createdDate)} (${timeAgo(msg.createdDate)})\\n`,\n ),\n );\n\n // Content\n const content = msg.content ?? '(empty)';\n console.log(isUser ? chalk.cyan(content) : renderMarkdown(content));\n console.log();\n\n // Action section\n console.log(chalk.cyan('╔' + '═'.repeat(BOX_W) + '╗'));\n console.log(\n `${chalk.cyan('║')} ${chalk.bold('Actions')}${' '.repeat(\n BOX_W - 9,\n )}${chalk.cyan('║')}`,\n );\n console.log(chalk.cyan('╚' + '═'.repeat(BOX_W) + '╝'));\n console.log();\n\n const tid = msg.triggerId ?? '';\n const domain = getFirstAllowedDomain();\n\n const choices: { name: string; value: string }[] = [\n { name: ` ${chalk.dim('← Back')}`, value: 'back' },\n ];\n if (domain) {\n choices.push({ name: ` 🌐 Open in browser`, value: 'browser' });\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 === 'browser' && domain) {\n await open(`${domain}/web5#tid=${tid}`);\n }\n}\n\n// ── Main loop ──────────────────────────────────────────────────────────────\n\nasync function runWizard(verboseFlag: boolean): Promise<void> {\n verbose = verboseFlag;\n process.on('SIGINT', () => {\n console.log(chalk.dim('\\nBye.\\n'));\n process.exit(0);\n });\n\n let screen: WizardScreen = { type: 'roots' };\n let running = true;\n\n while (running) {\n switch (screen.type) {\n case 'roots':\n screen = await showRootsScreen();\n break;\n\n case 'messages':\n screen = await showMessagesScreen(\n screen.messageId,\n screen.userQuery,\n screen.conversationId,\n );\n break;\n\n case 'message-detail': {\n const s: {\n type: 'message-detail';\n messages: ConversationMessage[];\n messageId: string;\n userQuery: string;\n conversationId: string;\n index: number;\n } = screen;\n await showMessageDetailScreen(s.messages, s.index, s.conversationId);\n screen = {\n type: 'messages',\n messageId: s.messageId,\n userQuery: s.userQuery,\n conversationId: s.conversationId,\n };\n break;\n }\n\n case 'exit':\n console.clear();\n console.log(chalk.dim('Bye.\\n'));\n running = false;\n break;\n }\n }\n process.exit(0);\n}\n\n// ── Subcommands ────────────────────────────────────────────────────────────\n\ninterface ConversationDetail {\n id?: string;\n triggerId?: string;\n active?: boolean;\n messages?: ConversationMessage[];\n [key: string]: unknown;\n}\n\n// ── get ────────────────────────────────────────────────────────────────────\n\nfunction printMessages(messages: ConversationMessage[], format: string): void {\n if (messages.length === 0) {\n console.log('(no messages)');\n return;\n }\n if (format === 'json') {\n const view = messages.map(({ role, content, createdDate }) => ({\n role,\n content,\n createdDate,\n }));\n console.log(JSON.stringify(view, null, 2));\n return;\n }\n for (const msg of messages) {\n const isUser = msg.role === 'user';\n const role = isUser ? chalk.cyan('user: ') : chalk.green('assistant:');\n const time = msg.createdDate\n ? chalk.dim(` [${formatTime(msg.createdDate)}]`)\n : '';\n const text =\n (isUser ? msg.triggerIdContent ?? msg.content : msg.content) ?? '(empty)';\n console.log(`${role}${time}`);\n console.log(text);\n console.log();\n }\n}\n\nconst getCmd = new Command('get')\n .description('Get a conversation by message ID (--id) or trigger ID (--tid)')\n .option('--id <id>', 'Message ID — from conversations list')\n .option('--tid <tid>', 'Trigger ID (TID)')\n .option('--format <format>', 'Output format: text (default) or json', 'text')\n .action(async (opts: { id?: string; tid?: string; format?: string }) => {\n try {\n if (opts.id) {\n const data = await wixRequest<GetConversationResponse>({\n path: `/web5/conversations/cli/by-message/${opts.id}`,\n verbose,\n });\n printMessages(data.messages ?? [], opts.format ?? 'text');\n return;\n }\n\n let tid: string = opts.tid ?? '';\n if (!tid) {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n tid = await new Promise<string>((resolve) => {\n rl.question('Enter trigger ID (TID): ', (answer) => {\n rl.close();\n resolve(answer.trim());\n });\n });\n }\n if (!tid) {\n console.error('Error: provide --id <message-id> or --tid <trigger-id>');\n process.exit(1);\n }\n\n const data = await wixRequest<ConversationDetail>({\n path: `/_api/conversation-history/v1/conversations/by-trigger/${tid}`,\n });\n printMessages(data.messages ?? [], opts.format ?? 'text');\n } catch (err) {\n console.error('Error:', (err as Error).message);\n process.exit(1);\n }\n });\n\n// ── list ───────────────────────────────────────────────────────────────────\n\nconst listCmd = new Command('list')\n .description('List conversations (non-interactive)')\n .option('--limit <n>', 'Maximum number of conversations to show', '50')\n .option(\n '--since <date>',\n 'Only show conversations created after this ISO date',\n )\n .action(async (opts: { limit?: string; since?: string }) => {\n const sp = ora('Fetching conversations…').start();\n try {\n const data = await wixRequest<QueryRootsResponse>({\n path: '/web5/conversations/cli/roots/query',\n method: 'POST',\n body: {},\n verbose,\n });\n sp.stop();\n\n let roots = data.messages ?? [];\n\n if (opts.since) {\n const since = new Date(opts.since).getTime();\n if (isNaN(since)) {\n console.error('Error: --since must be a valid ISO date string');\n process.exit(1);\n }\n roots = roots.filter((r) => {\n if (!r.createdDate) {\n return true;\n }\n return new Date(r.createdDate).getTime() >= since;\n });\n }\n\n const limit = parseInt(opts.limit ?? '50', 10);\n roots = roots.slice(0, limit);\n\n if (roots.length === 0) {\n console.log(chalk.yellow('No conversations found.'));\n return;\n }\n for (const r of roots) {\n const label = truncate(\n r.triggerIdContent ?? r.text ?? r.content ?? '(no content)',\n 80,\n );\n const time = r.createdDate\n ? chalk.dim(`[${new Date(r.createdDate).toLocaleString()}] `)\n : '';\n const id = r.id ? chalk.dim(` --id ${r.id}`) : '';\n console.log(`${time}${label}${id}`);\n }\n } catch (err) {\n sp.stop();\n console.error('Error:', (err as Error).message);\n process.exit(1);\n }\n });\n\n// ── export ─────────────────────────────────────────────────────────────────\n\nconst exportCmd = new Command('export')\n .description('Export a conversation to a file')\n .requiredOption('--id <tid>', 'Trigger ID (TID) of the conversation')\n .requiredOption('--output <file>', 'Output file path (.json or .md)')\n .action(async (opts: { id: string; output: string }) => {\n const sp = ora(`Fetching conversation ${opts.id}…`).start();\n try {\n const data = await wixRequest<ConversationDetail>({\n path: `/_api/conversation-history/v1/conversations/by-trigger/${opts.id}`,\n });\n sp.stop();\n\n const outPath = path.resolve(opts.output);\n const ext = path.extname(outPath).toLowerCase();\n\n if (ext === '.md') {\n const messages = data.messages ?? [];\n const lines: string[] = [`# Conversation ${opts.id}`, ''];\n for (const msg of messages) {\n const role = msg.role === 'user' ? '**User**' : '**Assistant**';\n const time = msg.createdDate ? ` _(${msg.createdDate})_` : '';\n lines.push(`### ${role}${time}`, '', msg.content ?? '(empty)', '');\n }\n fs.writeFileSync(outPath, lines.join('\\n'), 'utf8');\n } else {\n fs.writeFileSync(outPath, JSON.stringify(data, null, 2), 'utf8');\n }\n\n console.log(`Exported conversation to ${outPath}`);\n } catch (err) {\n sp.stop();\n console.error('Error:', (err as Error).message);\n process.exit(1);\n }\n });\n\n// ── open ───────────────────────────────────────────────────────────────────\n\nconst openCmd = new Command('open')\n .description('Open a conversation in the browser')\n .requiredOption('--id <tid>', 'Trigger ID (TID) of the conversation')\n .action(async (opts: { id: string }) => {\n const domain = getFirstAllowedDomain();\n if (!domain) {\n console.error(chalk.red('No allowedDomains configured in web5.config.json'));\n process.exit(1);\n }\n const browserUrl = `${domain}/web5#tid=${opts.id}`;\n console.log(`Opening ${browserUrl}`);\n await open(browserUrl);\n });\n\n// ── Command export ─────────────────────────────────────────────────────────\n\nconst wizardCmd = new Command('wizard')\n .description('Open the interactive TUI to browse conversation history')\n .option('--logs', 'Print raw API requests and responses for debugging')\n .action(async (opts) => {\n try {\n await runWizard(opts.logs ?? false);\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 conversationsCommand = new Command('conversations')\n .description('Conversation history')\n .action(function (this: Command) {\n this.outputHelp();\n })\n .addCommand(wizardCmd)\n .addCommand(getCmd)\n .addCommand(listCmd)\n .addCommand(exportCmd)\n .addCommand(openCmd);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import * as fs from 'fs';
|
|
3
3
|
import * as path from 'path';
|
|
4
|
+
import { load as yamlLoad } from 'js-yaml';
|
|
4
5
|
import { findProjectRoot } from '../utils/project';
|
|
5
6
|
import { wixRequest } from '../utils/wixApi';
|
|
6
7
|
import { success, error, warn, spinner, step } from '../utils/print';
|
|
@@ -27,14 +28,32 @@ async function deployAiInstructions(root, opts) {
|
|
|
27
28
|
process.exit(1);
|
|
28
29
|
}
|
|
29
30
|
const content = fs.readFileSync(yamlPath, 'utf8');
|
|
31
|
+
const parsed = yamlLoad(content);
|
|
32
|
+
|
|
33
|
+
// Load action definitions from src/actions/*.yaml
|
|
34
|
+
const actionsDir = path.join(root, 'src', 'actions');
|
|
35
|
+
const actionInstruction = [];
|
|
36
|
+
if (fs.existsSync(actionsDir)) {
|
|
37
|
+
const files = fs.readdirSync(actionsDir).filter(f => f.endsWith('.yaml'));
|
|
38
|
+
for (const file of files) {
|
|
39
|
+
const action = yamlLoad(fs.readFileSync(path.join(actionsDir, file), 'utf8'));
|
|
40
|
+
if (action) {
|
|
41
|
+
actionInstruction.push(action);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const body = {
|
|
46
|
+
intents: parsed.intent ?? {},
|
|
47
|
+
semantics: parsed.semantics ?? {},
|
|
48
|
+
actions: actionInstruction,
|
|
49
|
+
content: parsed.instructions ?? ''
|
|
50
|
+
};
|
|
30
51
|
const sp = spinner('Deploying AI instructions...');
|
|
31
52
|
try {
|
|
32
53
|
const data = await wixRequest({
|
|
33
54
|
path: '/web5/instruction/cli',
|
|
34
55
|
method: 'POST',
|
|
35
|
-
body
|
|
36
|
-
instruction: content
|
|
37
|
-
}
|
|
56
|
+
body
|
|
38
57
|
});
|
|
39
58
|
sp.stop();
|
|
40
59
|
success(`AI instructions deployed (version ${data.instruction.version})`);
|
|
@@ -102,6 +121,23 @@ async function rollbackInstructions() {
|
|
|
102
121
|
}
|
|
103
122
|
}
|
|
104
123
|
|
|
124
|
+
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
125
|
+
|
|
126
|
+
function deriveValidationFilters(targets) {
|
|
127
|
+
const hasInstructions = targets.includes('instructions');
|
|
128
|
+
const hasComponents = targets.includes('components');
|
|
129
|
+
if (hasInstructions && hasComponents) {
|
|
130
|
+
return undefined; // validate everything
|
|
131
|
+
}
|
|
132
|
+
if (hasInstructions) {
|
|
133
|
+
return ['ai', 'actions'];
|
|
134
|
+
}
|
|
135
|
+
if (hasComponents) {
|
|
136
|
+
return ['cms', 'scripts', 'sections'];
|
|
137
|
+
}
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
|
|
105
141
|
// ── Stepped runner ────────────────────────────────────────────────────────────
|
|
106
142
|
|
|
107
143
|
async function runWithSteps(root, targets, opts) {
|
|
@@ -112,14 +148,19 @@ async function runWithSteps(root, targets, opts) {
|
|
|
112
148
|
|
|
113
149
|
// Calculate total steps
|
|
114
150
|
let totalSteps = 0;
|
|
115
|
-
if (!opts.skipValidate)
|
|
116
|
-
|
|
151
|
+
if (!opts.skipValidate) {
|
|
152
|
+
totalSteps++;
|
|
153
|
+
}
|
|
154
|
+
if (needsBundle && !opts.skipBundle) {
|
|
155
|
+
totalSteps++;
|
|
156
|
+
}
|
|
117
157
|
totalSteps++; // deploy
|
|
118
158
|
|
|
119
159
|
let currentStep = 0;
|
|
120
160
|
if (!opts.skipValidate) {
|
|
121
161
|
step(++currentStep, totalSteps, 'Verification');
|
|
122
|
-
const
|
|
162
|
+
const filters = deriveValidationFilters(targets);
|
|
163
|
+
const valid = runValidation(root, filters);
|
|
123
164
|
if (!valid) {
|
|
124
165
|
error('Verification failed. Fix errors before deploying.');
|
|
125
166
|
process.exit(1);
|
|
@@ -139,10 +180,14 @@ async function runWithSteps(root, targets, opts) {
|
|
|
139
180
|
}
|
|
140
181
|
step(++currentStep, totalSteps, 'Deploy');
|
|
141
182
|
for (const target of targets) {
|
|
142
|
-
if (target === 'components')
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
183
|
+
if (target === 'components') {
|
|
184
|
+
await deployComponents();
|
|
185
|
+
}
|
|
186
|
+
if (target === 'instructions') {
|
|
187
|
+
await deployAiInstructions(root, {
|
|
188
|
+
activate: opts.activate
|
|
189
|
+
});
|
|
190
|
+
}
|
|
146
191
|
}
|
|
147
192
|
console.log('');
|
|
148
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Command","fs","path","findProjectRoot","wixRequest","success","error","warn","spinner","step","execSync","runValidation","getProjectRoot","root","process","cwd","exit","deployAiInstructions","opts","yamlPath","join","existsSync","content","readFileSync","sp","data","method","body","instruction","stop","version","activate","sp2","err_","message","deployComponents","rollbackInstructions","query","instructions","active","find","i","previous","filter","sort","a","b","runWithSteps","targets","needsBundle","includes","totalSteps","skipValidate","skipBundle","currentStep","valid","stdio","target","console","log","instructionsCmd","description","option","action","componentsCmd","deployCommand","rollback","addCommand","on","_ref","cmd"],"sources":["../../../src/commands/deploy.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { findProjectRoot } from '../utils/project';\nimport { wixRequest } from '../utils/wixApi';\nimport { success, error, warn, spinner, step } from '../utils/print';\nimport { execSync } from 'child_process';\nimport { runValidation } from './validate';\n\nfunction getProjectRoot(): string {\n const root = findProjectRoot(process.cwd());\n if (!root) {\n error(\n 'Not inside a web5 project. Run this command from your project directory.',\n );\n process.exit(1);\n }\n return root;\n}\n\n// ── Sub-deployers ─────────────────────────────────────────────────────────────\n\ninterface Instruction {\n id: string;\n version: number;\n content: string;\n active?: boolean;\n}\n\nasync function deployAiInstructions(\n root: string,\n opts: { activate?: boolean } = {},\n): Promise<void> {\n const yamlPath = path.join(\n root,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n );\n\n if (!fs.existsSync(yamlPath)) {\n error(`AI instructions file not found: ${yamlPath}`);\n process.exit(1);\n }\n\n const content = fs.readFileSync(yamlPath, 'utf8');\n const sp = spinner('Deploying AI instructions...');\n\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: '/web5/instruction/cli',\n method: 'POST',\n body: { instruction: content },\n });\n sp.stop();\n success(`AI instructions deployed (version ${data.instruction.version})`);\n\n if (opts.activate) {\n const version = data.instruction.version;\n const sp2 = spinner(`Activating version ${version}...`);\n try {\n await wixRequest({\n path: `/web5/instructions/cli/activate/${version}`,\n method: 'POST',\n });\n sp2.stop();\n success(`Activated version ${version}`);\n } catch (err_) {\n sp2.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n }\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n}\n\nasync function deployComponents(): Promise<void> {\n warn('Components deploy: to be developed');\n}\n\n// ── Rollback ──────────────────────────────────────────────────────────────────\n\nasync function rollbackInstructions(): Promise<void> {\n const sp = spinner('Fetching instructions for rollback...');\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: '/web5/instructions/cli/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 && i.version < active.version)\n .sort((a, b) => b.version - 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: `/web5/instructions/cli/activate/${previous.version}`,\n method: 'POST',\n });\n sp2.stop();\n success(`Rolled back to version ${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// ── Stepped runner ────────────────────────────────────────────────────────────\n\nasync function runWithSteps(\n root: string,\n targets: ('components' | 'instructions')[],\n opts: { skipValidate?: boolean; skipBundle?: boolean; activate?: boolean } = {},\n): Promise<void> {\n const needsBundle = targets.includes('components');\n\n // Calculate total steps\n let totalSteps = 0;\n if (!opts.skipValidate) totalSteps++;\n if (needsBundle && !opts.skipBundle) totalSteps++;\n totalSteps++; // deploy\n\n let currentStep = 0;\n\n if (!opts.skipValidate) {\n step(++currentStep, totalSteps, 'Verification');\n const valid = runValidation(root);\n if (!valid) {\n error('Verification failed. Fix errors before deploying.');\n process.exit(1);\n }\n }\n\n if (needsBundle && !opts.skipBundle) {\n step(++currentStep, totalSteps, 'Bundle');\n try {\n execSync('npm run bundle', { cwd: root, stdio: 'inherit' });\n } catch {\n error('Bundle failed. Fix errors before deploying.');\n process.exit(1);\n }\n }\n\n step(++currentStep, totalSteps, 'Deploy');\n for (const target of targets) {\n if (target === 'components') await deployComponents();\n if (target === 'instructions') await deployAiInstructions(root, { activate: opts.activate });\n }\n\n console.log('');\n}\n\n// ── Subcommands ───────────────────────────────────────────────────────────────\n\nconst instructionsCmd = new Command('instructions')\n .description(\n 'Deploy AI instructions from src/configuration/ai/prompt-instructions.yaml',\n )\n .option('--skip-validate', 'Skip the pre-deploy validation step')\n .option('--activate', 'Automatically activate the deployed version')\n .action(async (opts: { skipValidate?: boolean; activate?: boolean }) => {\n const root = getProjectRoot();\n await runWithSteps(root, ['instructions'], {\n skipValidate: opts.skipValidate,\n activate: opts.activate,\n });\n });\n\nconst componentsCmd = new Command('components')\n .description('Deploy components')\n .option('--skip-validate', 'Skip the pre-deploy validation step')\n .option('--skip-bundle', 'Skip the bundle step (reuse existing build artifact)')\n .action(async (opts: { skipValidate?: boolean; skipBundle?: boolean }) => {\n const root = getProjectRoot();\n await runWithSteps(root, ['components'], {\n skipValidate: opts.skipValidate,\n skipBundle: opts.skipBundle,\n });\n });\n\n// ── Root deploy command ───────────────────────────────────────────────────────\n\nexport const deployCommand = new Command('deploy')\n .description('Deploy project resources to the Web5 platform')\n .option('--target <target>', 'What to deploy: instructions, components, or all')\n .option('--skip-validate', 'Skip the pre-deploy validation step')\n .option('--skip-bundle', 'Skip the bundle step (reuse existing build artifact)')\n .option('--rollback', 'Re-activate the previous instruction version')\n .action(async (opts: {\n target?: string;\n skipValidate?: boolean;\n skipBundle?: boolean;\n rollback?: boolean;\n }) => {\n const root = getProjectRoot();\n\n if (opts.rollback) {\n await rollbackInstructions();\n return;\n }\n\n type DeployTarget = 'components' | 'instructions';\n let targets: DeployTarget[];\n\n if (!opts.target || opts.target === 'all') {\n targets = ['components', 'instructions'];\n } else if (opts.target === 'instructions' || opts.target === 'components') {\n targets = [opts.target as DeployTarget];\n } else {\n error(`Unknown target: '${opts.target}'. Valid values: instructions, components, all`);\n process.exit(1);\n }\n\n await runWithSteps(root, targets, {\n skipValidate: opts.skipValidate,\n skipBundle: opts.skipBundle,\n });\n })\n .addCommand(instructionsCmd)\n .addCommand(componentsCmd);\n\ndeployCommand.on('command:*', ([cmd]: string[]) => {\n error(\n `Unknown deploy target: '${cmd}'. Valid targets: components, instructions`,\n );\n process.exit(1);\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Command","fs","path","load","yamlLoad","findProjectRoot","wixRequest","success","error","warn","spinner","step","execSync","runValidation","getProjectRoot","root","process","cwd","exit","deployAiInstructions","opts","yamlPath","join","existsSync","content","readFileSync","parsed","actionsDir","actionInstruction","files","readdirSync","filter","f","endsWith","file","action","push","body","intents","intent","semantics","actions","instructions","sp","data","method","stop","instruction","version","activate","sp2","err_","message","deployComponents","rollbackInstructions","query","active","find","i","previous","sort","a","b","deriveValidationFilters","targets","hasInstructions","includes","hasComponents","undefined","runWithSteps","needsBundle","totalSteps","skipValidate","skipBundle","currentStep","filters","valid","stdio","target","console","log","instructionsCmd","description","option","componentsCmd","deployCommand","rollback","addCommand","on","_ref","cmd"],"sources":["../../../src/commands/deploy.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { load as yamlLoad } from 'js-yaml';\nimport { findProjectRoot } from '../utils/project';\nimport { wixRequest } from '../utils/wixApi';\nimport { success, error, warn, spinner, step } from '../utils/print';\nimport { execSync } from 'child_process';\nimport { runValidation, DomainFilter } from './validate';\n\nfunction getProjectRoot(): string {\n const root = findProjectRoot(process.cwd());\n if (!root) {\n error(\n 'Not inside a web5 project. Run this command from your project directory.',\n );\n process.exit(1);\n }\n return root;\n}\n\n// ── Sub-deployers ─────────────────────────────────────────────────────────────\n\ninterface Instruction {\n id: string;\n version: number;\n content: string;\n active?: boolean;\n}\n\nasync function deployAiInstructions(\n root: string,\n opts: { activate?: boolean } = {},\n): Promise<void> {\n const yamlPath = path.join(\n root,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n );\n\n if (!fs.existsSync(yamlPath)) {\n error(`AI instructions file not found: ${yamlPath}`);\n process.exit(1);\n }\n\n const content = fs.readFileSync(yamlPath, 'utf8');\n const parsed = yamlLoad(content) as {\n intent?: Record<string, string>;\n semantics?: Record<string, string>;\n instructions?: string;\n [key: string]: unknown;\n };\n\n // Load action definitions from src/actions/*.yaml\n const actionsDir = path.join(root, 'src', 'actions');\n const actionInstruction: unknown[] = [];\n if (fs.existsSync(actionsDir)) {\n const files = fs.readdirSync(actionsDir).filter((f) => f.endsWith('.yaml'));\n for (const file of files) {\n const action = yamlLoad(\n fs.readFileSync(path.join(actionsDir, file), 'utf8'),\n );\n if (action) {\n actionInstruction.push(action);\n }\n }\n }\n\n const body = {\n intents: parsed.intent ?? {},\n semantics: parsed.semantics ?? {},\n actions: actionInstruction,\n content: parsed.instructions ?? '',\n };\n\n const sp = spinner('Deploying AI instructions...');\n\n try {\n const data = await wixRequest<{ instruction: Instruction }>({\n path: '/web5/instruction/cli',\n method: 'POST',\n body,\n });\n sp.stop();\n success(`AI instructions deployed (version ${data.instruction.version})`);\n\n if (opts.activate) {\n const version = data.instruction.version;\n const sp2 = spinner(`Activating version ${version}...`);\n try {\n await wixRequest({\n path: `/web5/instructions/cli/activate/${version}`,\n method: 'POST',\n });\n sp2.stop();\n success(`Activated version ${version}`);\n } catch (err_) {\n sp2.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n }\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n}\n\nasync function deployComponents(): Promise<void> {\n warn('Components deploy: to be developed');\n}\n\n// ── Rollback ──────────────────────────────────────────────────────────────────\n\nasync function rollbackInstructions(): Promise<void> {\n const sp = spinner('Fetching instructions for rollback...');\n try {\n const data = await wixRequest<{ instructions: Instruction[] }>({\n path: '/web5/instructions/cli/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 && i.version < active.version)\n .sort((a, b) => b.version - 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: `/web5/instructions/cli/activate/${previous.version}`,\n method: 'POST',\n });\n sp2.stop();\n success(\n `Rolled back to version ${previous.version} (was v${active.version})`,\n );\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction deriveValidationFilters(\n targets: ('components' | 'instructions')[],\n): DomainFilter[] | undefined {\n const hasInstructions = targets.includes('instructions');\n const hasComponents = targets.includes('components');\n if (hasInstructions && hasComponents) {\n return undefined; // validate everything\n }\n if (hasInstructions) {\n return ['ai', 'actions'];\n }\n if (hasComponents) {\n return ['cms', 'scripts', 'sections'];\n }\n return undefined;\n}\n\n// ── Stepped runner ────────────────────────────────────────────────────────────\n\nasync function runWithSteps(\n root: string,\n targets: ('components' | 'instructions')[],\n opts: {\n skipValidate?: boolean;\n skipBundle?: boolean;\n activate?: boolean;\n } = {},\n): Promise<void> {\n const needsBundle = targets.includes('components');\n\n // Calculate total steps\n let totalSteps = 0;\n if (!opts.skipValidate) {\n totalSteps++;\n }\n if (needsBundle && !opts.skipBundle) {\n totalSteps++;\n }\n totalSteps++; // deploy\n\n let currentStep = 0;\n\n if (!opts.skipValidate) {\n step(++currentStep, totalSteps, 'Verification');\n const filters = deriveValidationFilters(targets);\n const valid = runValidation(root, filters);\n if (!valid) {\n error('Verification failed. Fix errors before deploying.');\n process.exit(1);\n }\n }\n\n if (needsBundle && !opts.skipBundle) {\n step(++currentStep, totalSteps, 'Bundle');\n try {\n execSync('npm run bundle', { cwd: root, stdio: 'inherit' });\n } catch {\n error('Bundle failed. Fix errors before deploying.');\n process.exit(1);\n }\n }\n\n step(++currentStep, totalSteps, 'Deploy');\n for (const target of targets) {\n if (target === 'components') {\n await deployComponents();\n }\n if (target === 'instructions') {\n await deployAiInstructions(root, { activate: opts.activate });\n }\n }\n\n console.log('');\n}\n\n// ── Subcommands ───────────────────────────────────────────────────────────────\n\nconst instructionsCmd = new Command('instructions')\n .description(\n 'Deploy AI instructions from src/configuration/ai/prompt-instructions.yaml',\n )\n .option('--skip-validate', 'Skip the pre-deploy validation step')\n .option('--activate', 'Automatically activate the deployed version')\n .action(async (opts: { skipValidate?: boolean; activate?: boolean }) => {\n const root = getProjectRoot();\n await runWithSteps(root, ['instructions'], {\n skipValidate: opts.skipValidate,\n activate: opts.activate,\n });\n });\n\nconst componentsCmd = new Command('components')\n .description('Deploy components')\n .option('--skip-validate', 'Skip the pre-deploy validation step')\n .option(\n '--skip-bundle',\n 'Skip the bundle step (reuse existing build artifact)',\n )\n .action(async (opts: { skipValidate?: boolean; skipBundle?: boolean }) => {\n const root = getProjectRoot();\n await runWithSteps(root, ['components'], {\n skipValidate: opts.skipValidate,\n skipBundle: opts.skipBundle,\n });\n });\n\n// ── Root deploy command ───────────────────────────────────────────────────────\n\nexport const deployCommand = new Command('deploy')\n .description('Deploy project resources to the Web5 platform')\n .option(\n '--target <target>',\n 'What to deploy: instructions, components, or all',\n )\n .option('--skip-validate', 'Skip the pre-deploy validation step')\n .option(\n '--skip-bundle',\n 'Skip the bundle step (reuse existing build artifact)',\n )\n .option('--rollback', 'Re-activate the previous instruction version')\n .action(\n async (opts: {\n target?: string;\n skipValidate?: boolean;\n skipBundle?: boolean;\n rollback?: boolean;\n }) => {\n const root = getProjectRoot();\n\n if (opts.rollback) {\n await rollbackInstructions();\n return;\n }\n\n type DeployTarget = 'components' | 'instructions';\n let targets: DeployTarget[];\n\n if (!opts.target || opts.target === 'all') {\n targets = ['components', 'instructions'];\n } else if (\n opts.target === 'instructions' ||\n opts.target === 'components'\n ) {\n targets = [opts.target as DeployTarget];\n } else {\n error(\n `Unknown target: '${opts.target}'. Valid values: instructions, components, all`,\n );\n process.exit(1);\n }\n\n await runWithSteps(root, targets, {\n skipValidate: opts.skipValidate,\n skipBundle: opts.skipBundle,\n });\n },\n )\n .addCommand(instructionsCmd)\n .addCommand(componentsCmd);\n\ndeployCommand.on('command:*', ([cmd]: string[]) => {\n error(\n `Unknown deploy target: '${cmd}'. Valid targets: components, instructions`,\n );\n process.exit(1);\n});\n"],"mappings":"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","ignoreList":[]}
|