@aweeclaw/scenario-cli 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +2 -2
- package/dist/bin.js.map +1 -1
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
@@ -691,10 +691,10 @@ async function packScenario(cwd, options = {}) {
|
|
|
691
691
|
{
|
|
692
692
|
gzip: true,
|
|
693
693
|
file: outputPath,
|
|
694
|
-
cwd: distDir,
|
|
694
|
+
cwd: path4.dirname(distDir),
|
|
695
695
|
portable: true
|
|
696
696
|
},
|
|
697
|
-
|
|
697
|
+
[path4.basename(distDir)]
|
|
698
698
|
);
|
|
699
699
|
const stats = fs4.statSync(outputPath);
|
|
700
700
|
const sizeKB = (stats.size / 1024).toFixed(1);
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/bin.ts","../src/commands/init.ts","../src/utils/helpers.ts","../src/utils/types.ts","../src/commands/build.ts","../src/commands/pack.ts","../src/commands/dev.ts","../src/commands/validate.ts"],"sourcesContent":["import { Command } from 'commander'\nimport { initScenario } from './commands/init.js'\nimport { buildScenario } from './commands/build.js'\nimport { packScenario } from './commands/pack.js'\nimport { devScenario } from './commands/dev.js'\nimport { validateScenario } from './commands/validate.js'\n\nconst program = new Command()\n\nprogram\n .name('aweeclaw-scenario')\n .description('CLI tool for building, packing, and managing Aweeclaw scenarios')\n .version('1.0.0')\n\nprogram\n .command('init')\n .description('Initialize a new scenario project')\n .argument('<name>', 'Scenario name (e.g. my-scenario)')\n .option('--name-zh <nameZh>', 'Chinese name for the scenario')\n .option('--category <category>', 'Scenario category', 'custom')\n .option('--type <type>', 'Scenario type: declarative or programmatic', 'programmatic')\n .option('--author <author>', 'Author name')\n .action((name, opts) => {\n try {\n initScenario(process.cwd(), {\n name,\n nameZh: opts.nameZh,\n category: opts.category,\n type: opts.type,\n author: opts.author,\n })\n } catch (err) {\n console.error('❌ Init failed:', err instanceof Error ? err.message : String(err))\n process.exit(1)\n }\n })\n\nprogram\n .command('build')\n .description('Build the scenario into dist/')\n .option('--out-dir <dir>', 'Output directory', 'dist')\n .option('--minify', 'Minify output', false)\n .option('--no-sourcemap', 'Disable sourcemap')\n .action(async (opts) => {\n try {\n await buildScenario(process.cwd(), {\n outDir: opts.outDir,\n minify: opts.minify,\n sourcemap: opts.sourcemap,\n })\n } catch (err) {\n console.error('❌ Build failed:', err instanceof Error ? err.message : String(err))\n process.exit(1)\n }\n })\n\nprogram\n .command('pack')\n .description('Pack dist/ into a tar.gz archive')\n .option('--out-dir <dir>', 'Output directory for the archive', '.')\n .action(async (opts) => {\n try {\n await packScenario(process.cwd(), { outDir: opts.outDir })\n } catch (err) {\n console.error('❌ Pack failed:', err instanceof Error ? err.message : String(err))\n process.exit(1)\n }\n })\n\nprogram\n .command('dev')\n .description('Start local development server with hot reload')\n .option('--port <port>', 'Dev server port', '3210')\n .action(async (opts) => {\n try {\n await devScenario(process.cwd(), { port: parseInt(opts.port, 10) })\n } catch (err) {\n console.error('❌ Dev server failed:', err instanceof Error ? err.message : String(err))\n process.exit(1)\n }\n })\n\nprogram\n .command('validate')\n .description('Validate the built scenario package')\n .option('--strict', 'Enable strict validation', false)\n .action(async (opts) => {\n try {\n const valid = await validateScenario(process.cwd(), { strict: opts.strict })\n process.exit(valid ? 0 : 1)\n } catch (err) {\n console.error('❌ Validation failed:', err instanceof Error ? err.message : String(err))\n process.exit(1)\n }\n })\n\nprogram.parse()\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { ensureDir, writeJson } from '../utils/helpers.js'\nimport { DEFAULT_SHARED_DEPS } from '../utils/types.js'\nimport type { ScenarioConfig } from '../utils/types.js'\n\nexport interface InitOptions {\n name: string\n nameZh?: string\n category?: string\n type?: 'declarative' | 'programmatic'\n author?: string\n}\n\nexport function initScenario(cwd: string, options: InitOptions): void {\n const scenarioId = options.name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n\n if (!scenarioId) {\n throw new Error('Invalid scenario name: must produce a non-empty ID')\n }\n\n const scenarioDir = path.join(cwd, scenarioId)\n if (fs.existsSync(scenarioDir)) {\n throw new Error(`Directory \"${scenarioId}\" already exists`)\n }\n\n ensureDir(scenarioDir)\n\n const scenarioType = options.type || 'programmatic'\n\n const config: ScenarioConfig = {\n id: scenarioId,\n version: '1.0.0',\n name: options.name,\n nameZh: options.nameZh || options.name,\n description: '',\n descriptionZh: '',\n author: options.author || 'unknown',\n icon: 'Package',\n category: (options.category || 'custom') as ScenarioConfig['category'],\n tags: [],\n license: 'MIT',\n type: scenarioType,\n entryPoint: scenarioType === 'programmatic' ? 'src/index.ts' : '',\n permissions: [],\n sharedDeps: scenarioType === 'programmatic' ? DEFAULT_SHARED_DEPS : undefined,\n dependencies: [],\n }\n\n if (scenarioType === 'declarative') {\n config.identity = {\n systemPromptFile: 'prompts/system.md',\n workflowFile: 'prompts/workflow.md',\n }\n config.capabilities = {\n builtinTools: ['web_search', 'ask_user', 'remember'],\n }\n config.ui = {\n layout: 'chat-centric',\n sidebarItems: [\n { id: 'explorer', icon: 'Files', label: 'Workspace', labelZh: '工作区', component: 'ExplorerView', position: 0 },\n { id: 'knowledge', icon: 'BookOpen', label: 'Knowledge', labelZh: '知识库', component: 'KnowledgeView', position: 1 },\n ],\n }\n config.database = {\n installScriptFiles: [],\n uninstallScriptFiles: [],\n }\n config.scripts = {\n onActivateFile: 'scripts/onActivate.js',\n onDeactivateFile: 'scripts/onDeactivate.js',\n }\n }\n\n writeJson(path.join(scenarioDir, 'scenario.json'), config)\n\n if (scenarioType === 'programmatic') {\n writeProgrammaticTemplate(scenarioDir, config)\n } else {\n writeDeclarativeTemplate(scenarioDir, config)\n }\n\n const packageJson: Record<string, unknown> = {\n name: `@aweeclaw/scenario-${scenarioId}`,\n version: config.version,\n private: true,\n type: 'module',\n scripts: {\n build: 'aweeclaw-scenario build',\n pack: 'aweeclaw-scenario pack',\n dev: 'aweeclaw-scenario dev',\n validate: 'aweeclaw-scenario validate',\n },\n }\n\n if (scenarioType === 'programmatic') {\n packageJson.devDependencies = {\n '@aweeclaw/scenario-sdk': '^1.0.0',\n '@types/react': '^18.3.0',\n typescript: '^5.3.0',\n }\n } else {\n packageJson.devDependencies = {\n '@aweeclaw/scenario-sdk': '^1.0.0',\n }\n }\n\n writeJson(path.join(scenarioDir, 'package.json'), packageJson)\n\n if (scenarioType === 'programmatic') {\n writeTsConfig(scenarioDir)\n }\n\n console.log(`✅ Scenario \"${scenarioId}\" initialized at ${scenarioDir}`)\n console.log(`\\n cd ${scenarioId}`)\n console.log(` npm install`)\n if (scenarioType === 'programmatic') {\n console.log(` aweeclaw-scenario dev`)\n } else {\n console.log(` # Edit scenario.json and prompts/ files`)\n console.log(` aweeclaw-scenario build`)\n }\n console.log()\n}\n\nfunction writeProgrammaticTemplate(dir: string, config: ScenarioConfig): void {\n const srcDir = path.join(dir, 'src')\n const componentsDir = path.join(srcDir, 'components')\n ensureDir(componentsDir)\n\n fs.writeFileSync(\n path.join(srcDir, 'index.ts'),\n `import type { ScenarioModule, ScenarioModuleContext, ScenarioToolDefinition } from '@aweeclaw/scenario-sdk'\nimport { DashboardPanel } from './components/DashboardPanel.js'\n\nexport default {\n id: '${config.id}',\n version: '${config.version}',\n\n getManifest() {\n return {\n id: '${config.id}',\n version: '${config.version}',\n name: '${config.name}',\n nameZh: '${config.nameZh}',\n description: '${config.description}',\n descriptionZh: '${config.descriptionZh}',\n author: '${config.author}',\n icon: '${config.icon}',\n category: '${config.category}',\n tags: ${JSON.stringify(config.tags)},\n entryPoint: 'bundle/index.js',\n }\n },\n\n getPlugin() {\n return {\n id: '${config.id}',\n name: '${config.name}',\n nameZh: '${config.nameZh}',\n icon: '${config.icon}',\n description: '${config.description}',\n descriptionZh: '${config.descriptionZh}',\n version: '${config.version}',\n author: '${config.author}',\n category: '${config.category}',\n tags: ${JSON.stringify(config.tags)},\n identity: { systemPrompt: '', securityRules: '', conventions: '', workflow: '' },\n capabilities: { toolPacks: [], modes: [], contextTypes: [], outputFormats: [] },\n ui: { layout: 'chat-centric', panels: [], sidebarItems: [\n { id: 'explorer', icon: 'Files', label: 'Workspace', labelZh: '工作区', component: 'ExplorerView', position: 0 },\n { id: 'knowledge', icon: 'BookOpen', label: 'Knowledge', labelZh: '知识库', component: 'KnowledgeView', position: 1 },\n ], statusBarItems: [] },\n dataSources: { workspace: false },\n }\n },\n\n getTools(): ScenarioToolDefinition[] {\n return []\n },\n\n getComponents() {\n return {\n DashboardPanel,\n }\n },\n\n async onActivate(context: ScenarioModuleContext): Promise<void> {\n context.publishData('scenario:activated', {\n scenarioId: '${config.id}',\n version: '${config.version}',\n type: 'programmatic',\n })\n },\n\n async onDeactivate(context: ScenarioModuleContext): Promise<void> {\n context.publishData('scenario:deactivated', { scenarioId: '${config.id}' })\n },\n\n async onHealthCheck() {\n return [{ name: 'module', status: 'healthy' as const, message: '${config.name} is running' }]\n },\n} satisfies ScenarioModule\n`,\n 'utf-8',\n )\n\n fs.writeFileSync(\n path.join(componentsDir, 'DashboardPanel.tsx'),\n `export function DashboardPanel() {\n return (\n <div style={{ padding: 16 }}>\n <h2 style={{ fontSize: 16, fontWeight: 600, marginBottom: 8 }}>\n ${config.name}\n </h2>\n <p style={{ fontSize: 13, opacity: 0.7 }}>\n This is the dashboard panel for ${config.name} scenario.\n Customize this component to build your scenario UI.\n </p>\n </div>\n )\n}\n`,\n 'utf-8',\n )\n\n const promptsDir = path.join(dir, 'prompts')\n ensureDir(promptsDir)\n fs.writeFileSync(\n path.join(promptsDir, 'system.md'),\n `You are the ${config.name} scenario assistant.\\nHelp users with ${config.category} related tasks.\\n`,\n 'utf-8',\n )\n}\n\nfunction writeDeclarativeTemplate(dir: string, config: ScenarioConfig): void {\n const promptsDir = path.join(dir, 'prompts')\n ensureDir(promptsDir)\n\n fs.writeFileSync(\n path.join(promptsDir, 'system.md'),\n `You are the ${config.name} scenario assistant.\\n\\nYour role is to help users with ${config.category} related tasks.\\nBe professional, accurate, and helpful.\\n`,\n 'utf-8',\n )\n\n fs.writeFileSync(\n path.join(promptsDir, 'workflow.md'),\n `## Workflow\\n\\n1. Understand user request\\n2. Process and respond\\n3. Offer follow-up suggestions\\n`,\n 'utf-8',\n )\n\n const scriptsDir = path.join(dir, 'scripts')\n ensureDir(scriptsDir)\n\n fs.writeFileSync(\n path.join(scriptsDir, 'onActivate.js'),\n `// This script runs when the scenario is activated\\n// Available globals: console, fetch, JSON\\nconsole.log('${config.name} activated')\\n`,\n 'utf-8',\n )\n\n fs.writeFileSync(\n path.join(scriptsDir, 'onDeactivate.js'),\n `// This script runs when the scenario is deactivated\\nconsole.log('${config.name} deactivated')\\n`,\n 'utf-8',\n )\n\n const dbDir = path.join(dir, 'db')\n ensureDir(dbDir)\n\n fs.writeFileSync(\n path.join(dbDir, 'install.sql'),\n `-- Database install script for ${config.name}\\n-- Add your table creation statements here\\n`,\n 'utf-8',\n )\n\n fs.writeFileSync(\n path.join(dbDir, 'uninstall.sql'),\n `-- Database uninstall script for ${config.name}\\n-- Add your table drop statements here\\n`,\n 'utf-8',\n )\n}\n\nfunction writeTsConfig(dir: string): void {\n writeJson(path.join(dir, 'tsconfig.json'), {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n jsx: 'react-jsx',\n outDir: 'dist',\n rootDir: 'src',\n types: ['node'],\n paths: {\n '@aweeclaw/scenario-sdk': ['./node_modules/@aweeclaw/scenario-sdk'],\n },\n },\n include: ['src'],\n exclude: ['node_modules', 'dist'],\n })\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport crypto from 'node:crypto'\nimport { ScenarioConfigSchema } from './types.js'\nimport type { ScenarioConfig, ManifestJson } from './types.js'\n\nexport function readScenarioConfig(dir: string): ScenarioConfig {\n const configPath = path.join(dir, 'scenario.json')\n if (!fs.existsSync(configPath)) {\n throw new Error(`scenario.json not found in ${dir}`)\n }\n const raw = fs.readFileSync(configPath, 'utf-8')\n const json = JSON.parse(raw)\n\n const parsed = ScenarioConfigSchema.safeParse(json)\n if (!parsed.success) {\n const errors = parsed.error.issues\n .map((i: { path: (string | number)[]; message: string }) => ` - ${i.path.join('.')}: ${i.message}`)\n .join('\\n')\n throw new Error(`Invalid scenario.json:\\n${errors}`)\n }\n return parsed.data\n}\n\nexport function writeJson(filePath: string, data: unknown): void {\n const dir = path.dirname(filePath)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2) + '\\n', 'utf-8')\n}\n\nexport function computeChecksum(filePath: string): string {\n const content = fs.readFileSync(filePath)\n return crypto.createHash('sha256').update(content).digest('hex')\n}\n\nexport function computeDirectoryChecksum(dir: string): string {\n const hash = crypto.createHash('sha256')\n const files = listFiles(dir).filter(f => !f.endsWith('manifest.json')).sort()\n for (const file of files) {\n const rel = path.relative(dir, file)\n hash.update(rel)\n hash.update(fs.readFileSync(file))\n }\n return hash.digest('hex')\n}\n\nexport function listFiles(dir: string): string[] {\n const results: string[] = []\n if (!fs.existsSync(dir)) return results\n\n const entries = fs.readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name)\n if (entry.isDirectory()) {\n results.push(...listFiles(fullPath))\n } else {\n results.push(fullPath)\n }\n }\n return results\n}\n\nexport function buildManifest(config: ScenarioConfig, checksum: string): ManifestJson {\n return {\n id: config.id,\n version: config.version,\n name: config.name,\n nameZh: config.nameZh,\n description: config.description,\n descriptionZh: config.descriptionZh,\n author: config.author,\n icon: config.icon,\n category: config.category,\n tags: config.tags,\n minAppVersion: config.minAppVersion,\n homepage: config.homepage,\n license: config.license,\n type: config.type,\n bundleEntry: config.type === 'programmatic' ? 'bundle/index.js' : undefined,\n sharedDeps: config.sharedDeps ? Object.keys(config.sharedDeps) : undefined,\n apiVersion: '1.0.0',\n checksum,\n createdAt: new Date().toISOString(),\n }\n}\n\nexport function ensureDir(dir: string): void {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n}\n\nexport function copyTemplate(src: string, dest: string, vars: Record<string, string>): void {\n const content = fs.readFileSync(src, 'utf-8')\n const processed = content.replace(/\\{\\{(\\w+)\\}\\}/g, (_: string, key: string) => vars[key] || `{{${key}}}`)\n ensureDir(path.dirname(dest))\n fs.writeFileSync(dest, processed, 'utf-8')\n}\n","import { z } from 'zod'\n\nconst DeclarativeToolParamSchema: z.ZodType<DeclarativeToolParam> = z.lazy(() =>\n z.object({\n type: z.enum(['string', 'number', 'boolean', 'array', 'object']),\n description: z.string(),\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n enum: z.array(z.string()).optional(),\n items: DeclarativeToolParamSchema.optional(),\n properties: z.record(DeclarativeToolParamSchema).optional(),\n })\n)\n\ninterface DeclarativeToolParam {\n type: 'string' | 'number' | 'boolean' | 'array' | 'object'\n description: string\n required?: boolean\n default?: unknown\n enum?: string[]\n items?: DeclarativeToolParam\n properties?: Record<string, DeclarativeToolParam>\n}\n\nconst DeclarativeCustomToolSchema = z.object({\n name: z.string().min(1),\n description: z.string(),\n parameters: z.record(DeclarativeToolParamSchema),\n executor: z.enum(['sql_query', 'run_command', 'read_file', 'write_file', 'web_search', 'read_url']),\n template: z.string().optional(),\n postProcess: z.enum(['json', 'table', 'text', 'markdown']).optional(),\n})\n\nconst DeclarativeIdentitySchema = z.object({\n systemPrompt: z.string().optional(),\n systemPromptFile: z.string().optional(),\n securityRules: z.string().optional(),\n securityRulesFile: z.string().optional(),\n conventions: z.string().optional(),\n conventionsFile: z.string().optional(),\n workflow: z.string().optional(),\n workflowFile: z.string().optional(),\n outputFormat: z.string().optional(),\n toolGuidelines: z.string().optional(),\n})\n\nconst DeclarativeUISchema = z.object({\n layout: z.enum(['chat-centric', 'split', 'editor-centric', 'custom']).optional(),\n panels: z.array(z.string()).optional(),\n sidebarItems: z.array(z.object({\n id: z.string(),\n icon: z.string(),\n label: z.string(),\n labelZh: z.string(),\n component: z.string(),\n position: z.number().optional(),\n })).optional(),\n welcomeComponent: z.string().optional(),\n})\n\nconst DeclarativeDatabaseSchema = z.object({\n installScriptFiles: z.array(z.string()).optional(),\n uninstallScriptFiles: z.array(z.string()).optional(),\n installScripts: z.array(z.object({\n id: z.string(),\n description: z.string().optional(),\n sql: z.string(),\n })).optional(),\n uninstallScripts: z.array(z.object({\n id: z.string(),\n description: z.string().optional(),\n sql: z.string(),\n })).optional(),\n})\n\nconst DeclarativeCapabilitiesSchema = z.object({\n builtinTools: z.array(z.string()).optional(),\n customTools: z.array(DeclarativeCustomToolSchema).optional(),\n modes: z.array(z.object({\n id: z.string(),\n label: z.string(),\n labelZh: z.string(),\n icon: z.string(),\n description: z.string(),\n descriptionZh: z.string(),\n toolPolicy: z.object({\n enabled: z.boolean(),\n requireApproval: z.boolean().optional(),\n }),\n })).optional(),\n contextTypes: z.array(z.object({\n type: z.string(),\n label: z.string(),\n labelZh: z.string(),\n priority: z.number(),\n })).optional(),\n outputFormats: z.array(z.string()).optional(),\n})\n\nconst DeclarativeScriptToolSchema = z.object({\n name: z.string().min(1),\n description: z.string(),\n scriptFile: z.string(),\n parameters: z.record(DeclarativeToolParamSchema),\n})\n\nconst DeclarativeScriptsSchema = z.object({\n onActivate: z.string().optional(),\n onActivateFile: z.string().optional(),\n onDeactivate: z.string().optional(),\n onDeactivateFile: z.string().optional(),\n onHealthCheck: z.string().optional(),\n onHealthCheckFile: z.string().optional(),\n tools: z.array(DeclarativeScriptToolSchema).optional(),\n})\n\nexport const ScenarioConfigSchema = z.object({\n id: z.string().min(1).regex(/^[a-z0-9-]+$/, 'Scenario ID must be lowercase alphanumeric with hyphens'),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+/, 'Version must be semver (e.g. 1.0.0)'),\n name: z.string().min(1),\n nameZh: z.string().min(1),\n description: z.string().default(''),\n descriptionZh: z.string().default(''),\n author: z.string().default('unknown'),\n icon: z.string().default('Package'),\n category: z.enum([\n 'productivity', 'development', 'education', 'business',\n 'creative', 'lifestyle', 'health', 'finance', 'legal', 'custom',\n ]).default('custom'),\n tags: z.array(z.string()).default([]),\n minAppVersion: z.string().optional(),\n homepage: z.string().optional(),\n license: z.string().default('MIT'),\n type: z.enum(['declarative', 'programmatic']).default('programmatic'),\n entryPoint: z.string().default('src/index.ts'),\n permissions: z.array(z.string()).default([]),\n sharedDeps: z.record(z.string()).optional(),\n dependencies: z.array(z.object({\n id: z.string(),\n versionRange: z.string().optional(),\n required: z.boolean().default(true),\n })).default([]),\n\n identity: DeclarativeIdentitySchema.optional(),\n capabilities: DeclarativeCapabilitiesSchema.optional(),\n ui: DeclarativeUISchema.optional(),\n database: DeclarativeDatabaseSchema.optional(),\n scripts: DeclarativeScriptsSchema.optional(),\n\n source: z.string().optional(),\n hasSettings: z.boolean().optional(),\n requiresWorkspace: z.boolean().optional(),\n})\n\nexport type ScenarioConfig = z.infer<typeof ScenarioConfigSchema>\n\nexport interface ManifestJson {\n id: string\n version: string\n name: string\n nameZh: string\n description: string\n descriptionZh: string\n author: string\n icon: string\n category: string\n tags: string[]\n minAppVersion?: string\n homepage?: string\n license: string\n type: 'declarative' | 'programmatic'\n bundleEntry?: string\n sharedDeps?: string[]\n apiVersion?: string\n checksum?: string\n signature?: string\n createdAt: string\n}\n\nexport const SHARED_EXTERNALS = [\n 'react',\n 'react-dom',\n 'react-dom/client',\n 'react/jsx-runtime',\n 'zustand',\n 'lucide-react',\n]\n\nexport const SHARED_GLOBALS: Record<string, string> = {\n 'react': '__AWEECLAW_SHARED__.modules.react',\n 'react-dom': '__AWEECLAW_SHARED__.modules.reactDom',\n 'react-dom/client': '__AWEECLAW_SHARED__.modules.reactDom',\n 'react/jsx-runtime': '__AWEECLAW_SHARED__.modules.jsxRuntime',\n 'zustand': '__AWEECLAW_SHARED__.modules.zustand',\n 'lucide-react': '__AWEECLAW_SHARED__.modules.lucideReact',\n}\n\nexport const DEFAULT_SHARED_DEPS: Record<string, string> = {\n react: '^18.3.0',\n 'react-dom': '^18.3.0',\n zustand: '^5.0.0',\n 'lucide-react': '^0.562.0',\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { build, type UserConfig, type Plugin } from 'vite'\nimport { readScenarioConfig, writeJson, buildManifest, computeDirectoryChecksum, ensureDir } from '../utils/helpers.js'\nimport { SHARED_EXTERNALS, SHARED_GLOBALS } from '../utils/types.js'\nimport type { ScenarioConfig } from '../utils/types.js'\n\nexport interface BuildOptions {\n outDir?: string\n minify?: boolean\n sourcemap?: boolean\n}\n\nexport async function buildScenario(cwd: string, options: BuildOptions = {}): Promise<void> {\n const config = readScenarioConfig(cwd)\n\n if (config.type === 'declarative') {\n buildDeclarative(cwd, config, options)\n return\n }\n\n await buildProgrammatic(cwd, config, options)\n}\n\nasync function buildProgrammatic(\n cwd: string,\n config: ScenarioConfig,\n options: BuildOptions,\n): Promise<void> {\n const outDir = path.resolve(cwd, options.outDir || 'dist')\n const entryPoint = path.resolve(cwd, config.entryPoint || 'src/index.ts')\n\n if (!fs.existsSync(entryPoint)) {\n throw new Error(`Entry point not found: ${entryPoint}`)\n }\n\n const sharedExternalsPlugin: Plugin = {\n name: 'aweeclaw-shared-externals',\n enforce: 'pre',\n resolveId(source: string) {\n if (SHARED_EXTERNALS.includes(source)) {\n return { id: source, external: true }\n }\n return null\n },\n }\n\n const viteConfig: UserConfig = {\n root: cwd,\n logLevel: 'warn',\n build: {\n lib: {\n entry: entryPoint,\n formats: ['es'],\n fileName: () => 'bundle/index.js',\n },\n outDir,\n emptyOutDir: true,\n minify: options.minify ?? false,\n sourcemap: options.sourcemap ?? true,\n target: 'esnext',\n cssCodeSplit: true,\n rollupOptions: {\n external: SHARED_EXTERNALS,\n output: {\n format: 'es',\n globals: SHARED_GLOBALS,\n paths(id: string) {\n if (SHARED_GLOBALS[id]) {\n return SHARED_GLOBALS[id]\n }\n return id\n },\n manualChunks(id: string) {\n if (id.includes('/src/components/')) {\n const match = id.match(/\\/src\\/components\\/(.+?)\\./)\n if (match) {\n return match[1]\n }\n }\n return undefined\n },\n chunkFileNames: 'bundle/[name].js',\n assetFileNames: 'bundle/[name].[ext]',\n },\n },\n },\n plugins: [sharedExternalsPlugin],\n }\n\n console.log(`🔨 Building scenario \"${config.id}\" v${config.version}...`)\n\n await build(viteConfig)\n\n const configDir = path.join(outDir, 'config')\n ensureDir(configDir)\n writeJson(path.join(configDir, 'scenario.json'), config)\n\n if (fs.existsSync(path.join(cwd, 'prompts'))) {\n copyDir(path.join(cwd, 'prompts'), path.join(outDir, 'prompts'))\n }\n\n if (fs.existsSync(path.join(cwd, 'db'))) {\n copyDir(path.join(cwd, 'db'), path.join(outDir, 'db'))\n }\n\n if (fs.existsSync(path.join(cwd, 'assets'))) {\n copyDir(path.join(cwd, 'assets'), path.join(outDir, 'assets'))\n }\n\n const checksum = computeDirectoryChecksum(outDir)\n const manifest = buildManifest(config, checksum)\n writeJson(path.join(outDir, 'manifest.json'), manifest)\n\n console.log(`✅ Build complete: ${outDir}`)\n console.log(` Checksum: ${checksum.substring(0, 16)}...`)\n}\n\nfunction buildDeclarative(\n cwd: string,\n config: ScenarioConfig,\n options: BuildOptions,\n): void {\n const outDir = path.resolve(cwd, options.outDir || 'dist')\n ensureDir(outDir)\n\n const configDir = path.join(outDir, 'config')\n ensureDir(configDir)\n writeJson(path.join(configDir, 'scenario.json'), config)\n\n if (fs.existsSync(path.join(cwd, 'prompts'))) {\n copyDir(path.join(cwd, 'prompts'), path.join(outDir, 'prompts'))\n }\n\n if (fs.existsSync(path.join(cwd, 'scripts'))) {\n copyDir(path.join(cwd, 'scripts'), path.join(outDir, 'scripts'))\n }\n\n if (fs.existsSync(path.join(cwd, 'db'))) {\n copyDir(path.join(cwd, 'db'), path.join(outDir, 'db'))\n }\n\n if (fs.existsSync(path.join(cwd, 'assets'))) {\n copyDir(path.join(cwd, 'assets'), path.join(outDir, 'assets'))\n }\n\n const checksum = computeDirectoryChecksum(outDir)\n const manifest = buildManifest(config, checksum)\n writeJson(path.join(outDir, 'manifest.json'), manifest)\n\n console.log(`✅ Declarative scenario packaged: ${outDir}`)\n}\n\nfunction copyDir(src: string, dest: string): void {\n if (!fs.existsSync(src)) return\n ensureDir(dest)\n\n const entries = fs.readdirSync(src, { withFileTypes: true })\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name)\n const destPath = path.join(dest, entry.name)\n if (entry.isDirectory()) {\n copyDir(srcPath, destPath)\n } else {\n fs.copyFileSync(srcPath, destPath)\n }\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { create as createTar } from 'tar'\nimport { readScenarioConfig, computeDirectoryChecksum, buildManifest, writeJson } from '../utils/helpers.js'\n\nexport interface PackOptions {\n outDir?: string\n}\n\nexport async function packScenario(cwd: string, options: PackOptions = {}): Promise<string> {\n const distDir = path.resolve(cwd, 'dist')\n if (!fs.existsSync(distDir)) {\n throw new Error('dist/ directory not found. Run \"aweeclaw-scenario build\" first.')\n }\n\n const config = readScenarioConfig(cwd)\n\n const checksum = computeDirectoryChecksum(distDir)\n const manifest = buildManifest(config, checksum)\n writeJson(path.join(distDir, 'manifest.json'), manifest)\n\n const outDir = path.resolve(cwd, options.outDir || '.')\n const fileName = `${config.id}-${config.version}.tar.gz`\n const outputPath = path.join(outDir, fileName)\n\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true })\n }\n\n if (fs.existsSync(outputPath)) {\n fs.unlinkSync(outputPath)\n }\n\n await createTar(\n {\n gzip: true,\n file: outputPath,\n cwd: distDir,\n portable: true,\n },\n fs.readdirSync(distDir),\n )\n\n const stats = fs.statSync(outputPath)\n const sizeKB = (stats.size / 1024).toFixed(1)\n\n console.log(`📦 Packed: ${outputPath}`)\n console.log(` Size: ${sizeKB} KB`)\n console.log(` Checksum: ${checksum.substring(0, 16)}...`)\n\n return outputPath\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { createServer, type ViteDevServer } from 'vite'\nimport { readScenarioConfig } from '../utils/helpers.js'\nimport { SHARED_EXTERNALS } from '../utils/types.js'\n\nexport interface DevOptions {\n port?: number\n}\n\nexport async function devScenario(cwd: string, options: DevOptions = {}): Promise<void> {\n const config = readScenarioConfig(cwd)\n\n if (config.type === 'declarative') {\n console.log('ℹ️ Declarative scenarios do not require a dev server.')\n console.log(' Edit prompts/ and scenario.json directly, then run \"aweeclaw-scenario build\".')\n return\n }\n\n const entryPoint = path.resolve(cwd, config.entryPoint || 'src/index.ts')\n if (!fs.existsSync(entryPoint)) {\n throw new Error(`Entry point not found: ${entryPoint}`)\n }\n\n const port = options.port || 3210\n\n const server: ViteDevServer = await createServer({\n root: cwd,\n logLevel: 'info',\n server: {\n port,\n strictPort: false,\n },\n resolve: {\n alias: {\n '@aweeclaw/scenario-sdk': path.resolve(cwd, 'node_modules/@aweeclaw/scenario-sdk'),\n },\n },\n build: {\n target: 'esnext',\n },\n define: {\n '__AWEECLAW_SHARED__': 'window.__AWEECLAW_SHARED__',\n },\n })\n\n await server.listen()\n\n console.log(`\\n🚀 Dev server for \"${config.id}\" running at:`)\n console.log(` ${server.resolvedUrls?.local?.[0] || `http://localhost:${port}`}`)\n console.log(`\\n Edit src/ files and changes will hot-reload.`)\n console.log(` Press Ctrl+C to stop.\\n`)\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { readScenarioConfig, computeDirectoryChecksum, listFiles } from '../utils/helpers.js'\nimport { SHARED_EXTERNALS } from '../utils/types.js'\n\nexport interface ValidateOptions {\n strict?: boolean\n}\n\nexport async function validateScenario(cwd: string, options: ValidateOptions = {}): Promise<boolean> {\n const errors: string[] = []\n const warnings: string[] = []\n\n console.log(`🔍 Validating scenario in ${cwd}...\\n`)\n\n let config: ReturnType<typeof readScenarioConfig> | null = null\n try {\n config = readScenarioConfig(cwd)\n console.log(` ✓ scenario.json is valid (id: ${config.id}, v${config.version})`)\n } catch (err) {\n errors.push(err instanceof Error ? err.message : String(err))\n printResults(errors, warnings)\n return false\n }\n\n const distDir = path.resolve(cwd, 'dist')\n if (!fs.existsSync(distDir)) {\n errors.push('dist/ directory not found. Run \"aweeclaw-scenario build\" first.')\n printResults(errors, warnings)\n return false\n }\n\n const manifestPath = path.join(distDir, 'manifest.json')\n if (!fs.existsSync(manifestPath)) {\n errors.push('manifest.json not found in dist/')\n } else {\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'))\n if (!manifest.id) errors.push('manifest.json missing \"id\"')\n if (!manifest.version) errors.push('manifest.json missing \"version\"')\n if (!manifest.type) errors.push('manifest.json missing \"type\"')\n if (!manifest.checksum) errors.push('manifest.json missing \"checksum\"')\n console.log(' ✓ manifest.json is valid')\n } catch {\n errors.push('manifest.json is not valid JSON')\n }\n }\n\n if (config.type === 'programmatic') {\n validateProgrammatic(distDir, config, errors, warnings, options.strict)\n }\n\n if (config.type === 'declarative') {\n validateDeclarative(distDir, config, errors, warnings)\n }\n\n if (fs.existsSync(manifestPath)) {\n const checksum = computeDirectoryChecksum(distDir)\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'))\n if (manifest.checksum === checksum) {\n console.log(' ✓ Checksum matches')\n } else {\n errors.push(`Checksum mismatch: manifest has \"${manifest.checksum?.substring(0, 16)}...\", actual is \"${checksum.substring(0, 16)}...\"`)\n }\n }\n\n const files = listFiles(distDir)\n const totalSize = files.reduce((sum, f) => sum + fs.statSync(f).size, 0)\n const sizeMB = (totalSize / 1024 / 1024).toFixed(2)\n console.log(` ✓ Total size: ${sizeMB} MB (${files.length} files)`)\n\n if (totalSize > 50 * 1024 * 1024) {\n warnings.push(`Package size (${sizeMB} MB) exceeds 50 MB limit`)\n }\n\n printResults(errors, warnings)\n return errors.length === 0\n}\n\nfunction validateProgrammatic(\n distDir: string,\n config: ReturnType<typeof readScenarioConfig>,\n errors: string[],\n warnings: string[],\n strict?: boolean,\n): void {\n const bundleEntry = path.join(distDir, 'bundle', 'index.js')\n if (!fs.existsSync(bundleEntry)) {\n errors.push('bundle/index.js not found (required for programmatic scenarios)')\n return\n }\n\n const content = fs.readFileSync(bundleEntry, 'utf-8')\n\n for (const ext of SHARED_EXTERNALS) {\n const importPattern = new RegExp(`import.*from\\\\s+['\"]${ext.replace('/', '\\\\/')}['\"]`)\n const requirePattern = new RegExp(`require\\\\(['\"]${ext.replace('/', '\\\\/')}['\"]\\\\)`)\n if (importPattern.test(content) || requirePattern.test(content)) {\n console.log(` ✓ Shared dependency \"${ext}\" is externalized`)\n }\n }\n\n if (content.includes('__AWEECLAW_SHARED__')) {\n console.log(' ✓ Uses __AWEECLAW_SHARED__ for shared dependencies')\n } else if (strict) {\n warnings.push('Bundle does not reference __AWEECLAW_SHARED__. Ensure shared deps are externalized.')\n }\n}\n\nfunction validateDeclarative(\n distDir: string,\n config: ReturnType<typeof readScenarioConfig>,\n errors: string[],\n warnings: string[],\n): void {\n const configDir = path.join(distDir, 'config')\n const distConfigPath = path.join(configDir, 'scenario.json')\n if (!fs.existsSync(distConfigPath)) {\n errors.push('config/scenario.json not found in dist/')\n }\n\n const promptsDir = path.join(distDir, 'prompts')\n if (!fs.existsSync(promptsDir)) {\n warnings.push('prompts/ directory not found (recommended for declarative scenarios)')\n } else {\n const systemMd = path.join(promptsDir, 'system.md')\n if (!fs.existsSync(systemMd)) {\n if (config.identity?.systemPromptFile) {\n errors.push(`prompts/system.md not found (referenced by identity.systemPromptFile)`)\n } else {\n warnings.push('prompts/system.md not found (recommended for declarative scenarios)')\n }\n } else {\n console.log(' ✓ prompts/system.md exists')\n }\n }\n\n if (config.identity) {\n const fileRefs = [\n { key: 'systemPromptFile', path: config.identity.systemPromptFile },\n { key: 'securityRulesFile', path: config.identity.securityRulesFile },\n { key: 'conventionsFile', path: config.identity.conventionsFile },\n { key: 'workflowFile', path: config.identity.workflowFile },\n ]\n for (const ref of fileRefs) {\n if (ref.path && !fs.existsSync(path.join(distDir, ref.path))) {\n errors.push(`identity.${ref.key} references \"${ref.path}\" but file not found in dist/`)\n }\n }\n }\n\n if (config.database) {\n const scriptRefs = [\n { key: 'installScriptFiles', paths: config.database.installScriptFiles },\n { key: 'uninstallScriptFiles', paths: config.database.uninstallScriptFiles },\n ]\n for (const ref of scriptRefs) {\n if (ref.paths) {\n for (const scriptPath of ref.paths) {\n if (!fs.existsSync(path.join(distDir, scriptPath))) {\n errors.push(`database.${ref.key} references \"${scriptPath}\" but file not found in dist/`)\n }\n }\n }\n }\n }\n\n if (config.scripts) {\n const scriptRefs = [\n { key: 'onActivateFile', path: config.scripts.onActivateFile },\n { key: 'onDeactivateFile', path: config.scripts.onDeactivateFile },\n { key: 'onHealthCheckFile', path: config.scripts.onHealthCheckFile },\n ]\n for (const ref of scriptRefs) {\n if (ref.path && !fs.existsSync(path.join(distDir, ref.path))) {\n errors.push(`scripts.${ref.key} references \"${ref.path}\" but file not found in dist/`)\n }\n }\n\n if (config.scripts.tools) {\n for (const tool of config.scripts.tools) {\n if (tool.scriptFile && !fs.existsSync(path.join(distDir, tool.scriptFile))) {\n errors.push(`scripts.tools[${tool.name}].scriptFile references \"${tool.scriptFile}\" but file not found in dist/`)\n }\n }\n }\n }\n\n if (config.capabilities?.customTools) {\n for (const tool of config.capabilities.customTools) {\n if (!tool.name) errors.push(`capabilities.customTools: tool missing \"name\"`)\n if (!tool.executor) errors.push(`capabilities.customTools[${tool.name}]: tool missing \"executor\"`)\n }\n }\n\n console.log(' ✓ Declarative scenario structure validated')\n}\n\nfunction printResults(errors: string[], warnings: string[]): void {\n console.log()\n\n if (warnings.length > 0) {\n console.log('⚠️ Warnings:')\n for (const w of warnings) {\n console.log(` - ${w}`)\n }\n console.log()\n }\n\n if (errors.length > 0) {\n console.log('❌ Errors:')\n for (const e of errors) {\n console.log(` - ${e}`)\n }\n console.log()\n console.log('Validation failed.')\n } else {\n console.log('✅ Validation passed!')\n }\n}\n"],"mappings":"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","names":["fs","path","path","fs","fs","path","path","fs","fs","path","path","fs","fs","path","path","fs","fs","path","path","fs"]}
|
|
1
|
+
{"version":3,"sources":["../src/bin.ts","../src/commands/init.ts","../src/utils/helpers.ts","../src/utils/types.ts","../src/commands/build.ts","../src/commands/pack.ts","../src/commands/dev.ts","../src/commands/validate.ts"],"sourcesContent":["import { Command } from 'commander'\nimport { initScenario } from './commands/init.js'\nimport { buildScenario } from './commands/build.js'\nimport { packScenario } from './commands/pack.js'\nimport { devScenario } from './commands/dev.js'\nimport { validateScenario } from './commands/validate.js'\n\nconst program = new Command()\n\nprogram\n .name('aweeclaw-scenario')\n .description('CLI tool for building, packing, and managing Aweeclaw scenarios')\n .version('1.0.0')\n\nprogram\n .command('init')\n .description('Initialize a new scenario project')\n .argument('<name>', 'Scenario name (e.g. my-scenario)')\n .option('--name-zh <nameZh>', 'Chinese name for the scenario')\n .option('--category <category>', 'Scenario category', 'custom')\n .option('--type <type>', 'Scenario type: declarative or programmatic', 'programmatic')\n .option('--author <author>', 'Author name')\n .action((name, opts) => {\n try {\n initScenario(process.cwd(), {\n name,\n nameZh: opts.nameZh,\n category: opts.category,\n type: opts.type,\n author: opts.author,\n })\n } catch (err) {\n console.error('❌ Init failed:', err instanceof Error ? err.message : String(err))\n process.exit(1)\n }\n })\n\nprogram\n .command('build')\n .description('Build the scenario into dist/')\n .option('--out-dir <dir>', 'Output directory', 'dist')\n .option('--minify', 'Minify output', false)\n .option('--no-sourcemap', 'Disable sourcemap')\n .action(async (opts) => {\n try {\n await buildScenario(process.cwd(), {\n outDir: opts.outDir,\n minify: opts.minify,\n sourcemap: opts.sourcemap,\n })\n } catch (err) {\n console.error('❌ Build failed:', err instanceof Error ? err.message : String(err))\n process.exit(1)\n }\n })\n\nprogram\n .command('pack')\n .description('Pack dist/ into a tar.gz archive')\n .option('--out-dir <dir>', 'Output directory for the archive', '.')\n .action(async (opts) => {\n try {\n await packScenario(process.cwd(), { outDir: opts.outDir })\n } catch (err) {\n console.error('❌ Pack failed:', err instanceof Error ? err.message : String(err))\n process.exit(1)\n }\n })\n\nprogram\n .command('dev')\n .description('Start local development server with hot reload')\n .option('--port <port>', 'Dev server port', '3210')\n .action(async (opts) => {\n try {\n await devScenario(process.cwd(), { port: parseInt(opts.port, 10) })\n } catch (err) {\n console.error('❌ Dev server failed:', err instanceof Error ? err.message : String(err))\n process.exit(1)\n }\n })\n\nprogram\n .command('validate')\n .description('Validate the built scenario package')\n .option('--strict', 'Enable strict validation', false)\n .action(async (opts) => {\n try {\n const valid = await validateScenario(process.cwd(), { strict: opts.strict })\n process.exit(valid ? 0 : 1)\n } catch (err) {\n console.error('❌ Validation failed:', err instanceof Error ? err.message : String(err))\n process.exit(1)\n }\n })\n\nprogram.parse()\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { ensureDir, writeJson } from '../utils/helpers.js'\nimport { DEFAULT_SHARED_DEPS } from '../utils/types.js'\nimport type { ScenarioConfig } from '../utils/types.js'\n\nexport interface InitOptions {\n name: string\n nameZh?: string\n category?: string\n type?: 'declarative' | 'programmatic'\n author?: string\n}\n\nexport function initScenario(cwd: string, options: InitOptions): void {\n const scenarioId = options.name\n .toLowerCase()\n .replace(/[^a-z0-9-]/g, '-')\n .replace(/-+/g, '-')\n .replace(/^-|-$/g, '')\n\n if (!scenarioId) {\n throw new Error('Invalid scenario name: must produce a non-empty ID')\n }\n\n const scenarioDir = path.join(cwd, scenarioId)\n if (fs.existsSync(scenarioDir)) {\n throw new Error(`Directory \"${scenarioId}\" already exists`)\n }\n\n ensureDir(scenarioDir)\n\n const scenarioType = options.type || 'programmatic'\n\n const config: ScenarioConfig = {\n id: scenarioId,\n version: '1.0.0',\n name: options.name,\n nameZh: options.nameZh || options.name,\n description: '',\n descriptionZh: '',\n author: options.author || 'unknown',\n icon: 'Package',\n category: (options.category || 'custom') as ScenarioConfig['category'],\n tags: [],\n license: 'MIT',\n type: scenarioType,\n entryPoint: scenarioType === 'programmatic' ? 'src/index.ts' : '',\n permissions: [],\n sharedDeps: scenarioType === 'programmatic' ? DEFAULT_SHARED_DEPS : undefined,\n dependencies: [],\n }\n\n if (scenarioType === 'declarative') {\n config.identity = {\n systemPromptFile: 'prompts/system.md',\n workflowFile: 'prompts/workflow.md',\n }\n config.capabilities = {\n builtinTools: ['web_search', 'ask_user', 'remember'],\n }\n config.ui = {\n layout: 'chat-centric',\n sidebarItems: [\n { id: 'explorer', icon: 'Files', label: 'Workspace', labelZh: '工作区', component: 'ExplorerView', position: 0 },\n { id: 'knowledge', icon: 'BookOpen', label: 'Knowledge', labelZh: '知识库', component: 'KnowledgeView', position: 1 },\n ],\n }\n config.database = {\n installScriptFiles: [],\n uninstallScriptFiles: [],\n }\n config.scripts = {\n onActivateFile: 'scripts/onActivate.js',\n onDeactivateFile: 'scripts/onDeactivate.js',\n }\n }\n\n writeJson(path.join(scenarioDir, 'scenario.json'), config)\n\n if (scenarioType === 'programmatic') {\n writeProgrammaticTemplate(scenarioDir, config)\n } else {\n writeDeclarativeTemplate(scenarioDir, config)\n }\n\n const packageJson: Record<string, unknown> = {\n name: `@aweeclaw/scenario-${scenarioId}`,\n version: config.version,\n private: true,\n type: 'module',\n scripts: {\n build: 'aweeclaw-scenario build',\n pack: 'aweeclaw-scenario pack',\n dev: 'aweeclaw-scenario dev',\n validate: 'aweeclaw-scenario validate',\n },\n }\n\n if (scenarioType === 'programmatic') {\n packageJson.devDependencies = {\n '@aweeclaw/scenario-sdk': '^1.0.0',\n '@types/react': '^18.3.0',\n typescript: '^5.3.0',\n }\n } else {\n packageJson.devDependencies = {\n '@aweeclaw/scenario-sdk': '^1.0.0',\n }\n }\n\n writeJson(path.join(scenarioDir, 'package.json'), packageJson)\n\n if (scenarioType === 'programmatic') {\n writeTsConfig(scenarioDir)\n }\n\n console.log(`✅ Scenario \"${scenarioId}\" initialized at ${scenarioDir}`)\n console.log(`\\n cd ${scenarioId}`)\n console.log(` npm install`)\n if (scenarioType === 'programmatic') {\n console.log(` aweeclaw-scenario dev`)\n } else {\n console.log(` # Edit scenario.json and prompts/ files`)\n console.log(` aweeclaw-scenario build`)\n }\n console.log()\n}\n\nfunction writeProgrammaticTemplate(dir: string, config: ScenarioConfig): void {\n const srcDir = path.join(dir, 'src')\n const componentsDir = path.join(srcDir, 'components')\n ensureDir(componentsDir)\n\n fs.writeFileSync(\n path.join(srcDir, 'index.ts'),\n `import type { ScenarioModule, ScenarioModuleContext, ScenarioToolDefinition } from '@aweeclaw/scenario-sdk'\nimport { DashboardPanel } from './components/DashboardPanel.js'\n\nexport default {\n id: '${config.id}',\n version: '${config.version}',\n\n getManifest() {\n return {\n id: '${config.id}',\n version: '${config.version}',\n name: '${config.name}',\n nameZh: '${config.nameZh}',\n description: '${config.description}',\n descriptionZh: '${config.descriptionZh}',\n author: '${config.author}',\n icon: '${config.icon}',\n category: '${config.category}',\n tags: ${JSON.stringify(config.tags)},\n entryPoint: 'bundle/index.js',\n }\n },\n\n getPlugin() {\n return {\n id: '${config.id}',\n name: '${config.name}',\n nameZh: '${config.nameZh}',\n icon: '${config.icon}',\n description: '${config.description}',\n descriptionZh: '${config.descriptionZh}',\n version: '${config.version}',\n author: '${config.author}',\n category: '${config.category}',\n tags: ${JSON.stringify(config.tags)},\n identity: { systemPrompt: '', securityRules: '', conventions: '', workflow: '' },\n capabilities: { toolPacks: [], modes: [], contextTypes: [], outputFormats: [] },\n ui: { layout: 'chat-centric', panels: [], sidebarItems: [\n { id: 'explorer', icon: 'Files', label: 'Workspace', labelZh: '工作区', component: 'ExplorerView', position: 0 },\n { id: 'knowledge', icon: 'BookOpen', label: 'Knowledge', labelZh: '知识库', component: 'KnowledgeView', position: 1 },\n ], statusBarItems: [] },\n dataSources: { workspace: false },\n }\n },\n\n getTools(): ScenarioToolDefinition[] {\n return []\n },\n\n getComponents() {\n return {\n DashboardPanel,\n }\n },\n\n async onActivate(context: ScenarioModuleContext): Promise<void> {\n context.publishData('scenario:activated', {\n scenarioId: '${config.id}',\n version: '${config.version}',\n type: 'programmatic',\n })\n },\n\n async onDeactivate(context: ScenarioModuleContext): Promise<void> {\n context.publishData('scenario:deactivated', { scenarioId: '${config.id}' })\n },\n\n async onHealthCheck() {\n return [{ name: 'module', status: 'healthy' as const, message: '${config.name} is running' }]\n },\n} satisfies ScenarioModule\n`,\n 'utf-8',\n )\n\n fs.writeFileSync(\n path.join(componentsDir, 'DashboardPanel.tsx'),\n `export function DashboardPanel() {\n return (\n <div style={{ padding: 16 }}>\n <h2 style={{ fontSize: 16, fontWeight: 600, marginBottom: 8 }}>\n ${config.name}\n </h2>\n <p style={{ fontSize: 13, opacity: 0.7 }}>\n This is the dashboard panel for ${config.name} scenario.\n Customize this component to build your scenario UI.\n </p>\n </div>\n )\n}\n`,\n 'utf-8',\n )\n\n const promptsDir = path.join(dir, 'prompts')\n ensureDir(promptsDir)\n fs.writeFileSync(\n path.join(promptsDir, 'system.md'),\n `You are the ${config.name} scenario assistant.\\nHelp users with ${config.category} related tasks.\\n`,\n 'utf-8',\n )\n}\n\nfunction writeDeclarativeTemplate(dir: string, config: ScenarioConfig): void {\n const promptsDir = path.join(dir, 'prompts')\n ensureDir(promptsDir)\n\n fs.writeFileSync(\n path.join(promptsDir, 'system.md'),\n `You are the ${config.name} scenario assistant.\\n\\nYour role is to help users with ${config.category} related tasks.\\nBe professional, accurate, and helpful.\\n`,\n 'utf-8',\n )\n\n fs.writeFileSync(\n path.join(promptsDir, 'workflow.md'),\n `## Workflow\\n\\n1. Understand user request\\n2. Process and respond\\n3. Offer follow-up suggestions\\n`,\n 'utf-8',\n )\n\n const scriptsDir = path.join(dir, 'scripts')\n ensureDir(scriptsDir)\n\n fs.writeFileSync(\n path.join(scriptsDir, 'onActivate.js'),\n `// This script runs when the scenario is activated\\n// Available globals: console, fetch, JSON\\nconsole.log('${config.name} activated')\\n`,\n 'utf-8',\n )\n\n fs.writeFileSync(\n path.join(scriptsDir, 'onDeactivate.js'),\n `// This script runs when the scenario is deactivated\\nconsole.log('${config.name} deactivated')\\n`,\n 'utf-8',\n )\n\n const dbDir = path.join(dir, 'db')\n ensureDir(dbDir)\n\n fs.writeFileSync(\n path.join(dbDir, 'install.sql'),\n `-- Database install script for ${config.name}\\n-- Add your table creation statements here\\n`,\n 'utf-8',\n )\n\n fs.writeFileSync(\n path.join(dbDir, 'uninstall.sql'),\n `-- Database uninstall script for ${config.name}\\n-- Add your table drop statements here\\n`,\n 'utf-8',\n )\n}\n\nfunction writeTsConfig(dir: string): void {\n writeJson(path.join(dir, 'tsconfig.json'), {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n esModuleInterop: true,\n skipLibCheck: true,\n jsx: 'react-jsx',\n outDir: 'dist',\n rootDir: 'src',\n types: ['node'],\n paths: {\n '@aweeclaw/scenario-sdk': ['./node_modules/@aweeclaw/scenario-sdk'],\n },\n },\n include: ['src'],\n exclude: ['node_modules', 'dist'],\n })\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport crypto from 'node:crypto'\nimport { ScenarioConfigSchema } from './types.js'\nimport type { ScenarioConfig, ManifestJson } from './types.js'\n\nexport function readScenarioConfig(dir: string): ScenarioConfig {\n const configPath = path.join(dir, 'scenario.json')\n if (!fs.existsSync(configPath)) {\n throw new Error(`scenario.json not found in ${dir}`)\n }\n const raw = fs.readFileSync(configPath, 'utf-8')\n const json = JSON.parse(raw)\n\n const parsed = ScenarioConfigSchema.safeParse(json)\n if (!parsed.success) {\n const errors = parsed.error.issues\n .map((i: { path: (string | number)[]; message: string }) => ` - ${i.path.join('.')}: ${i.message}`)\n .join('\\n')\n throw new Error(`Invalid scenario.json:\\n${errors}`)\n }\n return parsed.data\n}\n\nexport function writeJson(filePath: string, data: unknown): void {\n const dir = path.dirname(filePath)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n fs.writeFileSync(filePath, JSON.stringify(data, null, 2) + '\\n', 'utf-8')\n}\n\nexport function computeChecksum(filePath: string): string {\n const content = fs.readFileSync(filePath)\n return crypto.createHash('sha256').update(content).digest('hex')\n}\n\nexport function computeDirectoryChecksum(dir: string): string {\n const hash = crypto.createHash('sha256')\n const files = listFiles(dir).filter(f => !f.endsWith('manifest.json')).sort()\n for (const file of files) {\n const rel = path.relative(dir, file)\n hash.update(rel)\n hash.update(fs.readFileSync(file))\n }\n return hash.digest('hex')\n}\n\nexport function listFiles(dir: string): string[] {\n const results: string[] = []\n if (!fs.existsSync(dir)) return results\n\n const entries = fs.readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name)\n if (entry.isDirectory()) {\n results.push(...listFiles(fullPath))\n } else {\n results.push(fullPath)\n }\n }\n return results\n}\n\nexport function buildManifest(config: ScenarioConfig, checksum: string): ManifestJson {\n return {\n id: config.id,\n version: config.version,\n name: config.name,\n nameZh: config.nameZh,\n description: config.description,\n descriptionZh: config.descriptionZh,\n author: config.author,\n icon: config.icon,\n category: config.category,\n tags: config.tags,\n minAppVersion: config.minAppVersion,\n homepage: config.homepage,\n license: config.license,\n type: config.type,\n bundleEntry: config.type === 'programmatic' ? 'bundle/index.js' : undefined,\n sharedDeps: config.sharedDeps ? Object.keys(config.sharedDeps) : undefined,\n apiVersion: '1.0.0',\n checksum,\n createdAt: new Date().toISOString(),\n }\n}\n\nexport function ensureDir(dir: string): void {\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n}\n\nexport function copyTemplate(src: string, dest: string, vars: Record<string, string>): void {\n const content = fs.readFileSync(src, 'utf-8')\n const processed = content.replace(/\\{\\{(\\w+)\\}\\}/g, (_: string, key: string) => vars[key] || `{{${key}}}`)\n ensureDir(path.dirname(dest))\n fs.writeFileSync(dest, processed, 'utf-8')\n}\n","import { z } from 'zod'\n\nconst DeclarativeToolParamSchema: z.ZodType<DeclarativeToolParam> = z.lazy(() =>\n z.object({\n type: z.enum(['string', 'number', 'boolean', 'array', 'object']),\n description: z.string(),\n required: z.boolean().optional(),\n default: z.unknown().optional(),\n enum: z.array(z.string()).optional(),\n items: DeclarativeToolParamSchema.optional(),\n properties: z.record(DeclarativeToolParamSchema).optional(),\n })\n)\n\ninterface DeclarativeToolParam {\n type: 'string' | 'number' | 'boolean' | 'array' | 'object'\n description: string\n required?: boolean\n default?: unknown\n enum?: string[]\n items?: DeclarativeToolParam\n properties?: Record<string, DeclarativeToolParam>\n}\n\nconst DeclarativeCustomToolSchema = z.object({\n name: z.string().min(1),\n description: z.string(),\n parameters: z.record(DeclarativeToolParamSchema),\n executor: z.enum(['sql_query', 'run_command', 'read_file', 'write_file', 'web_search', 'read_url']),\n template: z.string().optional(),\n postProcess: z.enum(['json', 'table', 'text', 'markdown']).optional(),\n})\n\nconst DeclarativeIdentitySchema = z.object({\n systemPrompt: z.string().optional(),\n systemPromptFile: z.string().optional(),\n securityRules: z.string().optional(),\n securityRulesFile: z.string().optional(),\n conventions: z.string().optional(),\n conventionsFile: z.string().optional(),\n workflow: z.string().optional(),\n workflowFile: z.string().optional(),\n outputFormat: z.string().optional(),\n toolGuidelines: z.string().optional(),\n})\n\nconst DeclarativeUISchema = z.object({\n layout: z.enum(['chat-centric', 'split', 'editor-centric', 'custom']).optional(),\n panels: z.array(z.string()).optional(),\n sidebarItems: z.array(z.object({\n id: z.string(),\n icon: z.string(),\n label: z.string(),\n labelZh: z.string(),\n component: z.string(),\n position: z.number().optional(),\n })).optional(),\n welcomeComponent: z.string().optional(),\n})\n\nconst DeclarativeDatabaseSchema = z.object({\n installScriptFiles: z.array(z.string()).optional(),\n uninstallScriptFiles: z.array(z.string()).optional(),\n installScripts: z.array(z.object({\n id: z.string(),\n description: z.string().optional(),\n sql: z.string(),\n })).optional(),\n uninstallScripts: z.array(z.object({\n id: z.string(),\n description: z.string().optional(),\n sql: z.string(),\n })).optional(),\n})\n\nconst DeclarativeCapabilitiesSchema = z.object({\n builtinTools: z.array(z.string()).optional(),\n customTools: z.array(DeclarativeCustomToolSchema).optional(),\n modes: z.array(z.object({\n id: z.string(),\n label: z.string(),\n labelZh: z.string(),\n icon: z.string(),\n description: z.string(),\n descriptionZh: z.string(),\n toolPolicy: z.object({\n enabled: z.boolean(),\n requireApproval: z.boolean().optional(),\n }),\n })).optional(),\n contextTypes: z.array(z.object({\n type: z.string(),\n label: z.string(),\n labelZh: z.string(),\n priority: z.number(),\n })).optional(),\n outputFormats: z.array(z.string()).optional(),\n})\n\nconst DeclarativeScriptToolSchema = z.object({\n name: z.string().min(1),\n description: z.string(),\n scriptFile: z.string(),\n parameters: z.record(DeclarativeToolParamSchema),\n})\n\nconst DeclarativeScriptsSchema = z.object({\n onActivate: z.string().optional(),\n onActivateFile: z.string().optional(),\n onDeactivate: z.string().optional(),\n onDeactivateFile: z.string().optional(),\n onHealthCheck: z.string().optional(),\n onHealthCheckFile: z.string().optional(),\n tools: z.array(DeclarativeScriptToolSchema).optional(),\n})\n\nexport const ScenarioConfigSchema = z.object({\n id: z.string().min(1).regex(/^[a-z0-9-]+$/, 'Scenario ID must be lowercase alphanumeric with hyphens'),\n version: z.string().regex(/^\\d+\\.\\d+\\.\\d+/, 'Version must be semver (e.g. 1.0.0)'),\n name: z.string().min(1),\n nameZh: z.string().min(1),\n description: z.string().default(''),\n descriptionZh: z.string().default(''),\n author: z.string().default('unknown'),\n icon: z.string().default('Package'),\n category: z.enum([\n 'productivity', 'development', 'education', 'business',\n 'creative', 'lifestyle', 'health', 'finance', 'legal', 'custom',\n ]).default('custom'),\n tags: z.array(z.string()).default([]),\n minAppVersion: z.string().optional(),\n homepage: z.string().optional(),\n license: z.string().default('MIT'),\n type: z.enum(['declarative', 'programmatic']).default('programmatic'),\n entryPoint: z.string().default('src/index.ts'),\n permissions: z.array(z.string()).default([]),\n sharedDeps: z.record(z.string()).optional(),\n dependencies: z.array(z.object({\n id: z.string(),\n versionRange: z.string().optional(),\n required: z.boolean().default(true),\n })).default([]),\n\n identity: DeclarativeIdentitySchema.optional(),\n capabilities: DeclarativeCapabilitiesSchema.optional(),\n ui: DeclarativeUISchema.optional(),\n database: DeclarativeDatabaseSchema.optional(),\n scripts: DeclarativeScriptsSchema.optional(),\n\n source: z.string().optional(),\n hasSettings: z.boolean().optional(),\n requiresWorkspace: z.boolean().optional(),\n})\n\nexport type ScenarioConfig = z.infer<typeof ScenarioConfigSchema>\n\nexport interface ManifestJson {\n id: string\n version: string\n name: string\n nameZh: string\n description: string\n descriptionZh: string\n author: string\n icon: string\n category: string\n tags: string[]\n minAppVersion?: string\n homepage?: string\n license: string\n type: 'declarative' | 'programmatic'\n bundleEntry?: string\n sharedDeps?: string[]\n apiVersion?: string\n checksum?: string\n signature?: string\n createdAt: string\n}\n\nexport const SHARED_EXTERNALS = [\n 'react',\n 'react-dom',\n 'react-dom/client',\n 'react/jsx-runtime',\n 'zustand',\n 'lucide-react',\n]\n\nexport const SHARED_GLOBALS: Record<string, string> = {\n 'react': '__AWEECLAW_SHARED__.modules.react',\n 'react-dom': '__AWEECLAW_SHARED__.modules.reactDom',\n 'react-dom/client': '__AWEECLAW_SHARED__.modules.reactDom',\n 'react/jsx-runtime': '__AWEECLAW_SHARED__.modules.jsxRuntime',\n 'zustand': '__AWEECLAW_SHARED__.modules.zustand',\n 'lucide-react': '__AWEECLAW_SHARED__.modules.lucideReact',\n}\n\nexport const DEFAULT_SHARED_DEPS: Record<string, string> = {\n react: '^18.3.0',\n 'react-dom': '^18.3.0',\n zustand: '^5.0.0',\n 'lucide-react': '^0.562.0',\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { build, type UserConfig, type Plugin } from 'vite'\nimport { readScenarioConfig, writeJson, buildManifest, computeDirectoryChecksum, ensureDir } from '../utils/helpers.js'\nimport { SHARED_EXTERNALS, SHARED_GLOBALS } from '../utils/types.js'\nimport type { ScenarioConfig } from '../utils/types.js'\n\nexport interface BuildOptions {\n outDir?: string\n minify?: boolean\n sourcemap?: boolean\n}\n\nexport async function buildScenario(cwd: string, options: BuildOptions = {}): Promise<void> {\n const config = readScenarioConfig(cwd)\n\n if (config.type === 'declarative') {\n buildDeclarative(cwd, config, options)\n return\n }\n\n await buildProgrammatic(cwd, config, options)\n}\n\nasync function buildProgrammatic(\n cwd: string,\n config: ScenarioConfig,\n options: BuildOptions,\n): Promise<void> {\n const outDir = path.resolve(cwd, options.outDir || 'dist')\n const entryPoint = path.resolve(cwd, config.entryPoint || 'src/index.ts')\n\n if (!fs.existsSync(entryPoint)) {\n throw new Error(`Entry point not found: ${entryPoint}`)\n }\n\n const sharedExternalsPlugin: Plugin = {\n name: 'aweeclaw-shared-externals',\n enforce: 'pre',\n resolveId(source: string) {\n if (SHARED_EXTERNALS.includes(source)) {\n return { id: source, external: true }\n }\n return null\n },\n }\n\n const viteConfig: UserConfig = {\n root: cwd,\n logLevel: 'warn',\n build: {\n lib: {\n entry: entryPoint,\n formats: ['es'],\n fileName: () => 'bundle/index.js',\n },\n outDir,\n emptyOutDir: true,\n minify: options.minify ?? false,\n sourcemap: options.sourcemap ?? true,\n target: 'esnext',\n cssCodeSplit: true,\n rollupOptions: {\n external: SHARED_EXTERNALS,\n output: {\n format: 'es',\n globals: SHARED_GLOBALS,\n paths(id: string) {\n if (SHARED_GLOBALS[id]) {\n return SHARED_GLOBALS[id]\n }\n return id\n },\n manualChunks(id: string) {\n if (id.includes('/src/components/')) {\n const match = id.match(/\\/src\\/components\\/(.+?)\\./)\n if (match) {\n return match[1]\n }\n }\n return undefined\n },\n chunkFileNames: 'bundle/[name].js',\n assetFileNames: 'bundle/[name].[ext]',\n },\n },\n },\n plugins: [sharedExternalsPlugin],\n }\n\n console.log(`🔨 Building scenario \"${config.id}\" v${config.version}...`)\n\n await build(viteConfig)\n\n const configDir = path.join(outDir, 'config')\n ensureDir(configDir)\n writeJson(path.join(configDir, 'scenario.json'), config)\n\n if (fs.existsSync(path.join(cwd, 'prompts'))) {\n copyDir(path.join(cwd, 'prompts'), path.join(outDir, 'prompts'))\n }\n\n if (fs.existsSync(path.join(cwd, 'db'))) {\n copyDir(path.join(cwd, 'db'), path.join(outDir, 'db'))\n }\n\n if (fs.existsSync(path.join(cwd, 'assets'))) {\n copyDir(path.join(cwd, 'assets'), path.join(outDir, 'assets'))\n }\n\n const checksum = computeDirectoryChecksum(outDir)\n const manifest = buildManifest(config, checksum)\n writeJson(path.join(outDir, 'manifest.json'), manifest)\n\n console.log(`✅ Build complete: ${outDir}`)\n console.log(` Checksum: ${checksum.substring(0, 16)}...`)\n}\n\nfunction buildDeclarative(\n cwd: string,\n config: ScenarioConfig,\n options: BuildOptions,\n): void {\n const outDir = path.resolve(cwd, options.outDir || 'dist')\n ensureDir(outDir)\n\n const configDir = path.join(outDir, 'config')\n ensureDir(configDir)\n writeJson(path.join(configDir, 'scenario.json'), config)\n\n if (fs.existsSync(path.join(cwd, 'prompts'))) {\n copyDir(path.join(cwd, 'prompts'), path.join(outDir, 'prompts'))\n }\n\n if (fs.existsSync(path.join(cwd, 'scripts'))) {\n copyDir(path.join(cwd, 'scripts'), path.join(outDir, 'scripts'))\n }\n\n if (fs.existsSync(path.join(cwd, 'db'))) {\n copyDir(path.join(cwd, 'db'), path.join(outDir, 'db'))\n }\n\n if (fs.existsSync(path.join(cwd, 'assets'))) {\n copyDir(path.join(cwd, 'assets'), path.join(outDir, 'assets'))\n }\n\n const checksum = computeDirectoryChecksum(outDir)\n const manifest = buildManifest(config, checksum)\n writeJson(path.join(outDir, 'manifest.json'), manifest)\n\n console.log(`✅ Declarative scenario packaged: ${outDir}`)\n}\n\nfunction copyDir(src: string, dest: string): void {\n if (!fs.existsSync(src)) return\n ensureDir(dest)\n\n const entries = fs.readdirSync(src, { withFileTypes: true })\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name)\n const destPath = path.join(dest, entry.name)\n if (entry.isDirectory()) {\n copyDir(srcPath, destPath)\n } else {\n fs.copyFileSync(srcPath, destPath)\n }\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { create as createTar } from 'tar'\nimport { readScenarioConfig, computeDirectoryChecksum, buildManifest, writeJson } from '../utils/helpers.js'\n\nexport interface PackOptions {\n outDir?: string\n}\n\nexport async function packScenario(cwd: string, options: PackOptions = {}): Promise<string> {\n const distDir = path.resolve(cwd, 'dist')\n if (!fs.existsSync(distDir)) {\n throw new Error('dist/ directory not found. Run \"aweeclaw-scenario build\" first.')\n }\n\n const config = readScenarioConfig(cwd)\n\n const checksum = computeDirectoryChecksum(distDir)\n const manifest = buildManifest(config, checksum)\n writeJson(path.join(distDir, 'manifest.json'), manifest)\n\n const outDir = path.resolve(cwd, options.outDir || '.')\n const fileName = `${config.id}-${config.version}.tar.gz`\n const outputPath = path.join(outDir, fileName)\n\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true })\n }\n\n if (fs.existsSync(outputPath)) {\n fs.unlinkSync(outputPath)\n }\n\n await createTar(\n {\n gzip: true,\n file: outputPath,\n cwd: path.dirname(distDir),\n portable: true,\n },\n [path.basename(distDir)],\n )\n\n const stats = fs.statSync(outputPath)\n const sizeKB = (stats.size / 1024).toFixed(1)\n\n console.log(`📦 Packed: ${outputPath}`)\n console.log(` Size: ${sizeKB} KB`)\n console.log(` Checksum: ${checksum.substring(0, 16)}...`)\n\n return outputPath\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { createServer, type ViteDevServer } from 'vite'\nimport { readScenarioConfig } from '../utils/helpers.js'\nimport { SHARED_EXTERNALS } from '../utils/types.js'\n\nexport interface DevOptions {\n port?: number\n}\n\nexport async function devScenario(cwd: string, options: DevOptions = {}): Promise<void> {\n const config = readScenarioConfig(cwd)\n\n if (config.type === 'declarative') {\n console.log('ℹ️ Declarative scenarios do not require a dev server.')\n console.log(' Edit prompts/ and scenario.json directly, then run \"aweeclaw-scenario build\".')\n return\n }\n\n const entryPoint = path.resolve(cwd, config.entryPoint || 'src/index.ts')\n if (!fs.existsSync(entryPoint)) {\n throw new Error(`Entry point not found: ${entryPoint}`)\n }\n\n const port = options.port || 3210\n\n const server: ViteDevServer = await createServer({\n root: cwd,\n logLevel: 'info',\n server: {\n port,\n strictPort: false,\n },\n resolve: {\n alias: {\n '@aweeclaw/scenario-sdk': path.resolve(cwd, 'node_modules/@aweeclaw/scenario-sdk'),\n },\n },\n build: {\n target: 'esnext',\n },\n define: {\n '__AWEECLAW_SHARED__': 'window.__AWEECLAW_SHARED__',\n },\n })\n\n await server.listen()\n\n console.log(`\\n🚀 Dev server for \"${config.id}\" running at:`)\n console.log(` ${server.resolvedUrls?.local?.[0] || `http://localhost:${port}`}`)\n console.log(`\\n Edit src/ files and changes will hot-reload.`)\n console.log(` Press Ctrl+C to stop.\\n`)\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { readScenarioConfig, computeDirectoryChecksum, listFiles } from '../utils/helpers.js'\nimport { SHARED_EXTERNALS } from '../utils/types.js'\n\nexport interface ValidateOptions {\n strict?: boolean\n}\n\nexport async function validateScenario(cwd: string, options: ValidateOptions = {}): Promise<boolean> {\n const errors: string[] = []\n const warnings: string[] = []\n\n console.log(`🔍 Validating scenario in ${cwd}...\\n`)\n\n let config: ReturnType<typeof readScenarioConfig> | null = null\n try {\n config = readScenarioConfig(cwd)\n console.log(` ✓ scenario.json is valid (id: ${config.id}, v${config.version})`)\n } catch (err) {\n errors.push(err instanceof Error ? err.message : String(err))\n printResults(errors, warnings)\n return false\n }\n\n const distDir = path.resolve(cwd, 'dist')\n if (!fs.existsSync(distDir)) {\n errors.push('dist/ directory not found. Run \"aweeclaw-scenario build\" first.')\n printResults(errors, warnings)\n return false\n }\n\n const manifestPath = path.join(distDir, 'manifest.json')\n if (!fs.existsSync(manifestPath)) {\n errors.push('manifest.json not found in dist/')\n } else {\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'))\n if (!manifest.id) errors.push('manifest.json missing \"id\"')\n if (!manifest.version) errors.push('manifest.json missing \"version\"')\n if (!manifest.type) errors.push('manifest.json missing \"type\"')\n if (!manifest.checksum) errors.push('manifest.json missing \"checksum\"')\n console.log(' ✓ manifest.json is valid')\n } catch {\n errors.push('manifest.json is not valid JSON')\n }\n }\n\n if (config.type === 'programmatic') {\n validateProgrammatic(distDir, config, errors, warnings, options.strict)\n }\n\n if (config.type === 'declarative') {\n validateDeclarative(distDir, config, errors, warnings)\n }\n\n if (fs.existsSync(manifestPath)) {\n const checksum = computeDirectoryChecksum(distDir)\n const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'))\n if (manifest.checksum === checksum) {\n console.log(' ✓ Checksum matches')\n } else {\n errors.push(`Checksum mismatch: manifest has \"${manifest.checksum?.substring(0, 16)}...\", actual is \"${checksum.substring(0, 16)}...\"`)\n }\n }\n\n const files = listFiles(distDir)\n const totalSize = files.reduce((sum, f) => sum + fs.statSync(f).size, 0)\n const sizeMB = (totalSize / 1024 / 1024).toFixed(2)\n console.log(` ✓ Total size: ${sizeMB} MB (${files.length} files)`)\n\n if (totalSize > 50 * 1024 * 1024) {\n warnings.push(`Package size (${sizeMB} MB) exceeds 50 MB limit`)\n }\n\n printResults(errors, warnings)\n return errors.length === 0\n}\n\nfunction validateProgrammatic(\n distDir: string,\n config: ReturnType<typeof readScenarioConfig>,\n errors: string[],\n warnings: string[],\n strict?: boolean,\n): void {\n const bundleEntry = path.join(distDir, 'bundle', 'index.js')\n if (!fs.existsSync(bundleEntry)) {\n errors.push('bundle/index.js not found (required for programmatic scenarios)')\n return\n }\n\n const content = fs.readFileSync(bundleEntry, 'utf-8')\n\n for (const ext of SHARED_EXTERNALS) {\n const importPattern = new RegExp(`import.*from\\\\s+['\"]${ext.replace('/', '\\\\/')}['\"]`)\n const requirePattern = new RegExp(`require\\\\(['\"]${ext.replace('/', '\\\\/')}['\"]\\\\)`)\n if (importPattern.test(content) || requirePattern.test(content)) {\n console.log(` ✓ Shared dependency \"${ext}\" is externalized`)\n }\n }\n\n if (content.includes('__AWEECLAW_SHARED__')) {\n console.log(' ✓ Uses __AWEECLAW_SHARED__ for shared dependencies')\n } else if (strict) {\n warnings.push('Bundle does not reference __AWEECLAW_SHARED__. Ensure shared deps are externalized.')\n }\n}\n\nfunction validateDeclarative(\n distDir: string,\n config: ReturnType<typeof readScenarioConfig>,\n errors: string[],\n warnings: string[],\n): void {\n const configDir = path.join(distDir, 'config')\n const distConfigPath = path.join(configDir, 'scenario.json')\n if (!fs.existsSync(distConfigPath)) {\n errors.push('config/scenario.json not found in dist/')\n }\n\n const promptsDir = path.join(distDir, 'prompts')\n if (!fs.existsSync(promptsDir)) {\n warnings.push('prompts/ directory not found (recommended for declarative scenarios)')\n } else {\n const systemMd = path.join(promptsDir, 'system.md')\n if (!fs.existsSync(systemMd)) {\n if (config.identity?.systemPromptFile) {\n errors.push(`prompts/system.md not found (referenced by identity.systemPromptFile)`)\n } else {\n warnings.push('prompts/system.md not found (recommended for declarative scenarios)')\n }\n } else {\n console.log(' ✓ prompts/system.md exists')\n }\n }\n\n if (config.identity) {\n const fileRefs = [\n { key: 'systemPromptFile', path: config.identity.systemPromptFile },\n { key: 'securityRulesFile', path: config.identity.securityRulesFile },\n { key: 'conventionsFile', path: config.identity.conventionsFile },\n { key: 'workflowFile', path: config.identity.workflowFile },\n ]\n for (const ref of fileRefs) {\n if (ref.path && !fs.existsSync(path.join(distDir, ref.path))) {\n errors.push(`identity.${ref.key} references \"${ref.path}\" but file not found in dist/`)\n }\n }\n }\n\n if (config.database) {\n const scriptRefs = [\n { key: 'installScriptFiles', paths: config.database.installScriptFiles },\n { key: 'uninstallScriptFiles', paths: config.database.uninstallScriptFiles },\n ]\n for (const ref of scriptRefs) {\n if (ref.paths) {\n for (const scriptPath of ref.paths) {\n if (!fs.existsSync(path.join(distDir, scriptPath))) {\n errors.push(`database.${ref.key} references \"${scriptPath}\" but file not found in dist/`)\n }\n }\n }\n }\n }\n\n if (config.scripts) {\n const scriptRefs = [\n { key: 'onActivateFile', path: config.scripts.onActivateFile },\n { key: 'onDeactivateFile', path: config.scripts.onDeactivateFile },\n { key: 'onHealthCheckFile', path: config.scripts.onHealthCheckFile },\n ]\n for (const ref of scriptRefs) {\n if (ref.path && !fs.existsSync(path.join(distDir, ref.path))) {\n errors.push(`scripts.${ref.key} references \"${ref.path}\" but file not found in dist/`)\n }\n }\n\n if (config.scripts.tools) {\n for (const tool of config.scripts.tools) {\n if (tool.scriptFile && !fs.existsSync(path.join(distDir, tool.scriptFile))) {\n errors.push(`scripts.tools[${tool.name}].scriptFile references \"${tool.scriptFile}\" but file not found in dist/`)\n }\n }\n }\n }\n\n if (config.capabilities?.customTools) {\n for (const tool of config.capabilities.customTools) {\n if (!tool.name) errors.push(`capabilities.customTools: tool missing \"name\"`)\n if (!tool.executor) errors.push(`capabilities.customTools[${tool.name}]: tool missing \"executor\"`)\n }\n }\n\n console.log(' ✓ Declarative scenario structure validated')\n}\n\nfunction printResults(errors: string[], warnings: string[]): void {\n console.log()\n\n if (warnings.length > 0) {\n console.log('⚠️ Warnings:')\n for (const w of warnings) {\n console.log(` - ${w}`)\n }\n console.log()\n }\n\n if (errors.length > 0) {\n console.log('❌ Errors:')\n for (const e of errors) {\n console.log(` - ${e}`)\n }\n console.log()\n console.log('Validation failed.')\n } else {\n console.log('✅ Validation passed!')\n }\n}\n"],"mappings":"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","names":["fs","path","path","fs","fs","path","path","fs","fs","path","path","fs","fs","path","path","fs","fs","path","path","fs"]}
|