@aweeclaw/scenario-cli 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -402,6 +402,179 @@ my-scenario/
402
402
 
403
403
  ---
404
404
 
405
+ ## 左侧菜单配置
406
+
407
+ 左侧菜单(NavigationRail)是场景 UI 的核心导航区域。通过 `ui.sidebarItems` 配置菜单项,每个菜单项包含图标、标签和对应的面板组件。
408
+
409
+ ### 工作原理
410
+
411
+ ```
412
+ sidebarItems 配置 → NavigationRail 渲染图标 → 用户点击 → 侧边栏显示对应面板
413
+ ```
414
+
415
+ 1. 场景激活时,客户端读取 `ui.sidebarItems` 渲染左侧菜单图标
416
+ 2. 用户点击图标,客户端设置 `activeSidePanel` 为该菜单项的 `id`
417
+ 3. 侧边栏根据 `id` 查找面板组件并渲染
418
+
419
+ ### 内置面板组件
420
+
421
+ 客户端提供了以下内置面板,可直接在 `sidebarItems` 中引用:
422
+
423
+ | component 值 | 说明 |
424
+ |-------------|------|
425
+ | `ExplorerView` | 文件浏览器 |
426
+ | `SearchView` | 全局搜索 |
427
+ | `GitView` | Git 源码管理 |
428
+ | `ProblemsView` | 问题诊断 |
429
+ | `OutlineView` | 符号大纲 |
430
+ | `HistoryView` | 历史记录 |
431
+ | `ShellView` | Shell 终端 |
432
+ | `KnowledgeView` | 知识库 |
433
+ | `NotesView` | 笔记 |
434
+ | `TasksView` | 任务管理 |
435
+ | `BookmarksView` | 书签 |
436
+ | `PromptsView` | 提示词库 |
437
+
438
+ ### 声明式场景配置菜单
439
+
440
+ 在 `scenario.json` 的 `ui.sidebarItems` 中配置,仅支持内置面板:
441
+
442
+ ```json
443
+ {
444
+ "ui": {
445
+ "layout": "chat-centric",
446
+ "sidebarItems": [
447
+ {
448
+ "id": "explorer",
449
+ "icon": "Files",
450
+ "label": "Workspace",
451
+ "labelZh": "工作区",
452
+ "component": "ExplorerView",
453
+ "position": 0
454
+ },
455
+ {
456
+ "id": "knowledge",
457
+ "icon": "BookOpen",
458
+ "label": "Knowledge",
459
+ "labelZh": "知识库",
460
+ "component": "KnowledgeView",
461
+ "position": 1
462
+ },
463
+ {
464
+ "id": "history",
465
+ "icon": "History",
466
+ "label": "History",
467
+ "labelZh": "历史",
468
+ "component": "HistoryView",
469
+ "position": 2
470
+ }
471
+ ]
472
+ }
473
+ }
474
+ ```
475
+
476
+ ### 编程式场景配置菜单
477
+
478
+ 编程式场景支持自定义面板组件,分两步:
479
+
480
+ **第一步:在 `getPlugin()` 的 `ui.sidebarItems` 中声明菜单项**
481
+
482
+ ```typescript
483
+ getPlugin() {
484
+ return {
485
+ // ...其他字段
486
+ ui: {
487
+ layout: 'dashboard-centric',
488
+ panels: [
489
+ { id: 'dashboard', component: 'DashboardPanel', region: 'primary', defaultVisible: true, resizable: true },
490
+ { id: 'sidebar', component: 'Sidebar', region: 'secondary', defaultVisible: true, resizable: true, minWidth: 220, maxWidth: 400 },
491
+ { id: 'chat', component: 'ChatPanel', region: 'auxiliary', defaultVisible: true, resizable: true, minWidth: 300, maxWidth: 800 },
492
+ ],
493
+ sidebarItems: [
494
+ // 自定义面板:component 对应 getComponents() 返回的 key
495
+ { id: 'tasks', icon: 'CheckSquare', label: 'Tasks', labelZh: '任务', component: 'TaskListPanel', position: 0 },
496
+ { id: 'stats', icon: 'BarChart3', label: 'Stats', labelZh: '统计', component: 'StatsPanel', position: 1 },
497
+ // 内置面板:直接引用内置组件名
498
+ { id: 'explorer', icon: 'Files', label: 'Workspace', labelZh: '工作区', component: 'ExplorerView', position: 2 },
499
+ { id: 'knowledge', icon: 'BookOpen', label: 'Knowledge', labelZh: '知识库', component: 'KnowledgeView', position: 3 },
500
+ ],
501
+ statusBarItems: [],
502
+ defaultSidePanel: 'tasks',
503
+ },
504
+ }
505
+ }
506
+ ```
507
+
508
+ **第二步:在 `getComponents()` 中注册自定义组件**
509
+
510
+ ```typescript
511
+ import { TaskListPanel } from './components/TaskListPanel.js'
512
+ import { StatsPanel } from './components/StatsPanel.js'
513
+
514
+ getComponents() {
515
+ return {
516
+ TaskListPanel,
517
+ StatsPanel,
518
+ }
519
+ }
520
+ ```
521
+
522
+ > 关键:`sidebarItems` 中的 `component` 值必须与 `getComponents()` 返回的 key 一致。客户端的 `PanelRegistry` 会自动将两者关联。
523
+
524
+ ### sidebarItems 字段说明
525
+
526
+ | 字段 | 类型 | 必填 | 说明 |
527
+ |------|------|------|------|
528
+ | `id` | `string` | ✅ | 菜单项唯一标识,同时作为面板 ID |
529
+ | `icon` | `string` | ✅ | 图标名称,使用 lucide-react 图标名(如 `Files`、`BookOpen`、`CheckSquare`) |
530
+ | `label` | `string` | ✅ | 英文标签 |
531
+ | `labelZh` | `string` | ✅ | 中文标签 |
532
+ | `component` | `string` | ✅ | 面板组件名,内置面板用内置名,自定义面板用 `getComponents()` 中的 key |
533
+ | `position` | `number` | | 排序位置,从小到大 |
534
+ | `wideMode` | `boolean` | | 宽屏模式下是否作为主面板显示(隐藏侧边栏) |
535
+
536
+ ### 常用图标参考
537
+
538
+ | 图标名 | 适用场景 |
539
+ |--------|---------|
540
+ | `Files` | 文件/工作区 |
541
+ | `Search` | 搜索 |
542
+ | `GitBranch` | Git 管理 |
543
+ | `BookOpen` | 知识库 |
544
+ | `History` | 历史记录 |
545
+ | `Terminal` | 终端 |
546
+ | `CheckSquare` | 任务 |
547
+ | `BarChart3` | 统计/图表 |
548
+ | `Database` | 数据源 |
549
+ | `Settings` | 设置 |
550
+ | `Map` | 地图/行程 |
551
+ | `Wallet` | 预算/财务 |
552
+ | `Stethoscope` | 诊断 |
553
+ | `Brain` | AI/深度思考 |
554
+ | `Zap` | 快速操作 |
555
+ | `FolderTree` | 目录树 |
556
+ | `ListTree` | 大纲 |
557
+ | `AlertCircle` | 问题/告警 |
558
+
559
+ > 完整图标列表参考 [lucide.dev](https://lucide.dev/icons/)
560
+
561
+ ### 布局与菜单的关系
562
+
563
+ 不同 `layout` 值对左侧菜单的显示策略不同:
564
+
565
+ | 布局 | 菜单显示 | 说明 |
566
+ |------|---------|------|
567
+ | `chat-centric` | 有 sidebarItems 时显示 | 无菜单项时隐藏侧边栏 |
568
+ | `editor-centric` | 始终显示 | 左侧菜单 + 中间编辑器 + 右侧聊天 |
569
+ | `dashboard-centric` | 始终显示 | 左侧菜单 + 中间仪表盘 + 右侧聊天 |
570
+ | `analytics-centric` | 始终显示 | 左侧菜单 + 中间分析面板 + 右侧聊天 |
571
+ | `canvas-centric` | 始终显示 | 左侧菜单 + 中间画布 + 右侧聊天 |
572
+ | `minimal` | 不显示 | 仅聊天界面 |
573
+ | `focus-centric` | 不显示 | 编辑器 + 聊天 |
574
+ | `research-centric` | 有 sidebarItems 时显示 | 编辑器 + 聊天 + 可选菜单 |
575
+
576
+ ---
577
+
405
578
  ## 共享依赖机制
406
579
 
407
580
  编程式场景的 React、zustand、lucide-react 等依赖**不打包**进场景包,而是由宿主应用通过全局变量 `__AWEECLAW_SHARED__` 注入。
package/dist/bin.js CHANGED
@@ -277,7 +277,7 @@ function initScenario(cwd, options) {
277
277
  tags: [],
278
278
  license: "MIT",
279
279
  type: scenarioType,
280
- entryPoint: scenarioType === "programmatic" ? "src/index.ts" : void 0,
280
+ entryPoint: scenarioType === "programmatic" ? "src/index.ts" : "",
281
281
  permissions: [],
282
282
  sharedDeps: scenarioType === "programmatic" ? DEFAULT_SHARED_DEPS : void 0,
283
283
  dependencies: []
@@ -291,7 +291,11 @@ function initScenario(cwd, options) {
291
291
  builtinTools: ["web_search", "ask_user", "remember"]
292
292
  };
293
293
  config.ui = {
294
- layout: "chat-centric"
294
+ layout: "chat-centric",
295
+ sidebarItems: [
296
+ { id: "explorer", icon: "Files", label: "Workspace", labelZh: "\u5DE5\u4F5C\u533A", component: "ExplorerView", position: 0 },
297
+ { id: "knowledge", icon: "BookOpen", label: "Knowledge", labelZh: "\u77E5\u8BC6\u5E93", component: "KnowledgeView", position: 1 }
298
+ ]
295
299
  };
296
300
  config.database = {
297
301
  installScriptFiles: [],
@@ -390,7 +394,10 @@ export default {
390
394
  tags: ${JSON.stringify(config.tags)},
391
395
  identity: { systemPrompt: '', securityRules: '', conventions: '', workflow: '' },
392
396
  capabilities: { toolPacks: [], modes: [], contextTypes: [], outputFormats: [] },
393
- ui: { layout: 'chat-centric', panels: [], sidebarItems: [], statusBarItems: [] },
397
+ ui: { layout: 'chat-centric', panels: [], sidebarItems: [
398
+ { id: 'explorer', icon: 'Files', label: 'Workspace', labelZh: '\u5DE5\u4F5C\u533A', component: 'ExplorerView', position: 0 },
399
+ { id: 'knowledge', icon: 'BookOpen', label: 'Knowledge', labelZh: '\u77E5\u8BC6\u5E93', component: 'KnowledgeView', position: 1 },
400
+ ], statusBarItems: [] },
394
401
  dataSources: { workspace: false },
395
402
  }
396
403
  },
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' : undefined,\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 }\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: [], 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: 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aweeclaw/scenario-cli",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "CLI tool for building, packing, and managing Aweeclaw scenarios",
5
5
  "type": "module",
6
6
  "bin": {