From d0950ef450f6d0d39364ffbb258c0043648ea0df Mon Sep 17 00:00:00 2001 From: lizy Date: Sun, 12 Jul 2026 20:54:47 +0800 Subject: [PATCH 1/9] refactor: converge app architecture and agent docs --- AGENTS.md | 17 +- AI_ANALYSIS.md | 6 +- AI_ANALYSIS_SCHEMA.json | 13 +- AI_PROJECT_CONTEXT.md | 219 +++++++------ REFACTOR_PLAN.md | 259 +++++++--------- lib/AI_ANALYSIS.md | 5 +- lib/AI_MODULE_INDEX.md | 289 ++++++++++++++---- lib/app/AI_ANALYSIS.md | 15 +- lib/app/app_bootstrap.dart | 25 ++ lib/app/category_navigation.dart | 36 +++ lib/app/category_window_app.dart | 78 +++++ lib/app/module_home_page.dart | 149 +++++++++ lib/app/router/AI_ANALYSIS.md | 7 +- lib/app/router/app_route_table.dart | 179 +---------- lib/main.dart | 37 +-- lib/module_registry/AI_ANALYSIS.md | 14 +- .../module_catalog_utils.dart} | 14 +- lib/modules/AI_ANALYSIS.md | 4 +- lib/modules/async/AI_ANALYSIS.md | 4 +- .../async/isolate_basic/AI_ANALYSIS.md | 4 +- .../async/isolate_task_manager/AI_ANALYSIS.md | 4 +- .../async/stream_subscription/AI_ANALYSIS.md | 4 +- lib/modules/basic/AI_ANALYSIS.md | 4 +- .../basic/debounce_throttle/AI_ANALYSIS.md | 4 +- lib/modules/basic/microtask/AI_ANALYSIS.md | 4 +- lib/modules/basic/tree_state/AI_ANALYSIS.md | 4 +- lib/modules/platform/AI_ANALYSIS.md | 4 +- .../platform/dio_interceptor/AI_ANALYSIS.md | 4 +- .../platform/usb_detector/AI_ANALYSIS.md | 4 +- lib/modules/popup_table/AI_ANALYSIS.md | 4 +- .../overlay_follow_compare/AI_ANALYSIS.md | 4 +- .../popup_list_interaction/AI_ANALYSIS.md | 4 +- .../popup_table/popup_widgets/AI_ANALYSIS.md | 4 +- .../popup_table/scroll_table/AI_ANALYSIS.md | 4 +- lib/modules/state/AI_ANALYSIS.md | 4 +- lib/modules/state/flutter_ioc/AI_ANALYSIS.md | 4 +- .../state/status_management/AI_ANALYSIS.md | 4 +- lib/modules/ui/AI_ANALYSIS.md | 4 +- lib/modules/ui/adsorption_line/AI_ANALYSIS.md | 4 +- .../ui/download_animation/AI_ANALYSIS.md | 4 +- .../ui/gcode_visualizer/AI_ANALYSIS.md | 4 +- lib/shared/AI_ANALYSIS.md | 6 +- lib/shared/multi_window/AI_ANALYSIS.md | 12 +- .../multi_window/category_window_app.dart | 142 --------- lib/shared/platform/AI_ANALYSIS.md | 4 +- test/shared/module_catalog_utils_test.dart | 59 ++++ tool/generate_agent_indexes.js | 209 +++++++++++-- tool/generate_harness_ai_analysis.sh | 1 + tool/validate_agent_docs.js | 115 +++++++ 49 files changed, 1243 insertions(+), 763 deletions(-) create mode 100644 lib/app/app_bootstrap.dart create mode 100644 lib/app/category_navigation.dart create mode 100644 lib/app/category_window_app.dart create mode 100644 lib/app/module_home_page.dart rename lib/{shared/multi_window/multi_window_route_filter.dart => module_registry/module_catalog_utils.dart} (67%) delete mode 100644 lib/shared/multi_window/category_window_app.dart create mode 100644 test/shared/module_catalog_utils_test.dart create mode 100644 tool/validate_agent_docs.js diff --git a/AGENTS.md b/AGENTS.md index 9d9f6e5..6b09b0a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,9 +5,12 @@ ## 前置阅读 执行任何修改前,agent 必须读取: -1. `AI_PROJECT_CONTEXT.md` - 项目整体上下文 -2. `REFACTOR_PLAN.md` - 整改计划与优先级 -3. 目标模块的 `AI_ANALYSIS.md` - 模块结构与修改建议 +1. `AI_ANALYSIS_SCHEMA.json` - agent 文档 schema +2. `AI_PROJECT_CONTEXT.md` - 机器可解析项目契约 +3. `REFACTOR_PLAN.md` - 机器可解析任务队列 +4. 目标模块的 `AI_ANALYSIS.md` - 机器可解析模块契约 + +以上 agent 文档均为 JSON,禁止加入 Markdown、自然语言段落或手工文件清单。 ## 新增模块规则 @@ -16,7 +19,7 @@ | 必需项 | 说明 | |--------|------| | `module_entry.dart` | 导出 `*Entry` Widget,作为模块入口 | -| `AI_ANALYSIS.md` | 模块分析文档:功能、文件结构、数据流、关键类、修改建议 | +| `AI_ANALYSIS.md` | 模块机器契约:route、category、status、entrypoints、owns、depends、analysis_parent、validation | | 路由注册 | 在 `lib/router/app_route_table.dart` 的 `_modules` 中注册 | | 模块元数据 | `ModuleEntry` 必须填写 `category`、`difficulty`、`concepts`、`estimatedMinutes`、`status`、`subtitle` | | 教学页面 | 至少 1 个页面使用外部 `flutter_study_learning` 包中的教学模板组件(`LearningScaffold` 等) | @@ -24,13 +27,15 @@ ## 修改模块规则 1. 修改前先读取该模块的 `AI_ANALYSIS.md` -2. 修改后同步更新 `AI_ANALYSIS.md` 中的文件结构和关键类信息 -3. 如果修改了路由注册,同步更新元数据字段 +2. 修改模块、依赖、路由或层级时,更新 `tool/generate_agent_indexes.js` 中的生成源 +3. 执行 `bash tool/generate_harness_ai_analysis.sh` 重新生成并校验 agent 文档 +4. 如果修改了路由注册,同步更新元数据字段 ## 验收规则 每次代码修改后 **必须** 执行: ```bash +bash tool/generate_harness_ai_analysis.sh dart format . flutter analyze dart run flutterguard_cli:flutterguard scan --path . --fail-on high diff --git a/AI_ANALYSIS.md b/AI_ANALYSIS.md index 2454def..49750d5 100644 --- a/AI_ANALYSIS.md +++ b/AI_ANALYSIS.md @@ -10,6 +10,7 @@ }, "entrypoints": [ "lib/main.dart", + "lib/app/app_bootstrap.dart", "lib/app/app.dart", "lib/app/router/app_route_table.dart" ], @@ -38,12 +39,13 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, "validation": [ + "bash tool/generate_harness_ai_analysis.sh", "dart format .", "flutter analyze", "dart run flutterguard_cli:flutterguard scan --path . --fail-on high" diff --git a/AI_ANALYSIS_SCHEMA.json b/AI_ANALYSIS_SCHEMA.json index f78705c..91c3ea0 100644 --- a/AI_ANALYSIS_SCHEMA.json +++ b/AI_ANALYSIS_SCHEMA.json @@ -1,8 +1,15 @@ { - "schema": "vibecoding.harness.ai_analysis_schema.v1", + "schema": "flutter_study.agent_docs.schema.v2", "syntax": "json_config", "prose": "forbidden", "markdown": "forbidden", + "generated_by": "tool/generate_agent_indexes.js", + "documents": { + "project_context": "AI_PROJECT_CONTEXT.md", + "refactor_plan": "REFACTOR_PLAN.md", + "module_index": "lib/AI_MODULE_INDEX.md", + "analysis_glob": "**/AI_ANALYSIS.md" + }, "levels": { "workspace": [ "AI_ANALYSIS.md" @@ -51,8 +58,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness" + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract" }, "module_contract_policy": { "keep_for_module_rule": true, diff --git a/AI_PROJECT_CONTEXT.md b/AI_PROJECT_CONTEXT.md index 582b2e8..3d14bf1 100644 --- a/AI_PROJECT_CONTEXT.md +++ b/AI_PROJECT_CONTEXT.md @@ -1,92 +1,127 @@ -# AI 项目上下文 - -> 此文件为 AI 编程助手提供项目整体上下文,修改代码前请先阅读。 - -## 项目概述 - -- **名称**: main_app -- **类型**: Flutter 学习项目集合,单应用多模块架构 -- **支持平台**: macOS, Windows, iOS, Android -- **技术栈**: Flutter 3.x / Dart 3.x - -## 架构模式 - -- **路由**: go_router 统一管理,首页为模块列表,点击后 push 到对应模块 -- **状态管理**: 项目实验多种方案(Provider, Riverpod, Bloc, ChangeNotifier, 自研 IoC) -- **模块组织**: 每个功能模块位于 `lib/modules///` 下,通过 `module_entry.dart` 暴露入口 Widget - -## 关键约定 - -1. **模块入口**: 每个模块必须有 `module_entry.dart`,导出名为 `*Entry` 的 Widget -2. **路由注册**: 新模块需在 `lib/app/router/app_route_table.dart` 的 `_modules` 列表中注册 -3. **依赖**: 所有依赖在根 `pubspec.yaml` 中声明,模块间不共享独立依赖 -4. **命名**: 模块目录使用 snake_case,路由路径使用 kebab-case - -## 目录结构 - -``` -lib/ -├── main.dart # 应用入口,ProviderScope 包裹 -├── app/ -│ ├── app.dart # MaterialApp.router 配置 -│ └── router/ # go_router 路由配置 -│ ├── app_router.dart -│ ├── app_route_table.dart # 路由表 + 模块列表 + 首页 UI -│ └── AI_ANALYSIS.md -├── module_registry/ # 模块元数据定义 -│ ├── module_entry.dart -│ └── module_category.dart -├── shared/ # 共享能力 -│ ├── multi_window/ # 多窗口能力封装 -│ └── platform/ # 平台通道与系统能力封装 -├── modules/ # 学习模块分区 -│ ├── basic/ # 基础机制 -│ ├── async/ # 异步并发 -│ ├── state/ # 状态管理 -│ ├── ui/ # UI 与动效 -│ ├── popup_table/ # 弹窗与列表 -│ └── platform/ # 网络与平台 -``` - -教学模板组件由外部包 `flutter_study_learning` 提供(`LearningScaffold`、`LearningObjectives`、`ConceptChips`、`CodeSnippetCard`、`CommonPitfalls`、`ExerciseCard`、`StateLogView`)。 - -## 模块内部结构(推荐) - -``` -modules/// -├── module_entry.dart # 模块入口 Widget -├── module_routes.dart # 子路由定义(有子路由时才需要) -├── AI_ANALYSIS.md # 模块分析文档 -├── presentation/ # UI 层(pages/ + widgets/) -├── application/ # 应用层(state/ + services/) -├── domain/ # 领域层(models/) -└── data/ # 数据层(api/ + parser/ + mock/) -``` - -简单模块可以保留精简版: -``` -modules/basic/debounce_throttle/ -├── module_entry.dart -├── module_root.dart -├── AI_ANALYSIS.md -└── utils/ -``` - -## 添加新模块步骤 - -1. 在 `lib/modules//` 下创建模块目录 `lib/modules//my_module/` -2. 创建 `module_entry.dart`,导出 `MyModuleEntry` Widget -3. 在 `lib/app/router/app_route_table.dart` 中: - - import 模块入口 - - 在 `_modules` 列表添加 `ModuleEntry` -4. 如需子路由,在模块内定义 `List` 并在 `ModuleEntry.routes` 中传入 - -## 常用命令 - -```bash -flutter pub get # 安装依赖 -flutter run -d macos # 运行 macOS 版本 -flutter analyze # 代码检查 -dart format . # 格式化 -flutter build macos # 构建 macOS 版本 -``` +{ + "schema": "flutter_study.agent_docs.project_context.v1", + "consumer": "coding_agent", + "package": { + "name": "main_app", + "type": "flutter_modular_learning_app", + "sdk": [ + "flutter_3", + "dart_3" + ] + }, + "platform": { + "current_hosts": [ + "macos", + "windows" + ], + "next_host": "android", + "target_hosts": [ + "android", + "ios", + "macos", + "windows" + ] + }, + "entrypoints": { + "process": "lib/main.dart", + "bootstrap": "lib/app/app_bootstrap.dart", + "app": "lib/app/app.dart", + "router": "lib/app/router/app_router.dart", + "route_table": "lib/app/router/app_route_table.dart" + }, + "layers": [ + { + "id": "app", + "path": "lib/app", + "owns": [ + "host_bootstrap", + "app_shell", + "navigation_policy", + "route_composition" + ], + "may_depend_on": [ + "module_registry", + "shared", + "modules" + ] + }, + { + "id": "module_registry", + "path": "lib/module_registry", + "owns": [ + "module_metadata", + "catalog_operations" + ], + "may_depend_on": [ + "flutter", + "go_router" + ] + }, + { + "id": "shared", + "path": "lib/shared", + "owns": [ + "business_neutral_capabilities", + "platform_boundaries" + ], + "forbidden_dependencies": [ + "app", + "modules" + ] + }, + { + "id": "modules", + "path": "lib/modules/{category}/{module}", + "owns": [ + "learning_ui", + "module_state", + "module_domain", + "module_data" + ], + "forbidden_dependencies": [ + "other_modules" + ] + } + ], + "module_contract": { + "required_files": [ + "module_entry.dart", + "AI_ANALYSIS.md" + ], + "required_registration": "lib/app/router/app_route_table.dart", + "required_metadata": [ + "category", + "difficulty", + "concepts", + "estimatedMinutes", + "status", + "subtitle" + ], + "required_learning_dependency": "flutter_study_learning", + "route_path_style": "kebab_case", + "directory_style": "snake_case" + }, + "platform_rules": { + "router_platform_api": "forbidden", + "module_host_navigation": "forbidden", + "desktop_window_policy": "lib/app/category_navigation.dart", + "platform_capability_contract": "business_neutral_interface" + }, + "change_protocol": { + "pre_read": [ + "AI_PROJECT_CONTEXT.md", + "REFACTOR_PLAN.md", + "{target}/AI_ANALYSIS.md" + ], + "update_source": [ + "tool/generate_agent_indexes.js" + ], + "generate": "bash tool/generate_harness_ai_analysis.sh", + "validate": [ + "bash tool/generate_harness_ai_analysis.sh", + "dart format .", + "flutter analyze", + "dart run flutterguard_cli:flutterguard scan --path . --fail-on high" + ] + } +} diff --git a/REFACTOR_PLAN.md b/REFACTOR_PLAN.md index 1f0ba41..73c11cb 100644 --- a/REFACTOR_PLAN.md +++ b/REFACTOR_PLAN.md @@ -1,158 +1,103 @@ -# 整改计划 - -> 项目重构与代码质量提升计划。优先级从高到低排列。 - -## Phase 1 — 目录结构重构 ✅ - -**目标**: 从扁平 `lib//` 改为 `app/ + module_registry/ + shared/ + modules//` 层级。 - -**已完成**: -- [x] `app.dart` → `app/app.dart` -- [x] `router/` → `app/router/` -- [x] 新建 `module_registry/`,拆分 ModuleEntry 模型和枚举 -- [x] 按 basic/async/state/ui/platform 分类迁移所有 15 个模块 -- [x] 清理目录名(去掉 `_demo`/`_test` 后缀) -- [x] 更新所有 import 路径和文档 - -## Phase 2 — 共享能力归拢 ⏳ - -**目标**: 将已经暴露出跨模块价值的能力从具体学习模块中抽出,先归拢到 `lib/shared/`,等复用边界稳定后再考虑独立 Flutter plugin/package。 - -### 2.1 文件选择能力抽离 - -**背景**: `gcode_visualizer` 已接入 macOS 原生 `NSOpenPanel`,当前实现位于模块内,具备跨模块复用价值,但尚未证明需要独立发布。 - -**目标结构**: - -``` -lib/shared/platform/file_picker/ -├── file_picker_service.dart # 业务无关接口: PickedFile / FilePickerService -├── method_channel_file_picker.dart # MethodChannel 实现 -└── AI_ANALYSIS.md # shared 能力分析文档 -``` - -**Dart API 草案**: - -```dart -class PickedFile { - const PickedFile({ - required this.path, - this.name, - }); - - final String path; - final String? name; +{ + "schema": "flutter_study.agent_docs.refactor_plan.v1", + "objective": "android_readiness_after_architecture_convergence", + "active_phase": "mobile_preintegration", + "completed_milestones": [ + "directory_layers", + "shared_package_extraction", + "module_analysis_coverage", + "app_navigation_boundary", + "host_bootstrap_boundary" + ], + "work_queue": [ + { + "id": "module_platform_contract", + "priority": 1, + "status": "pending", + "changes": [ + "ModuleEntry.platform_support", + "ModuleHomePage.availability_state" + ], + "acceptance": [ + "catalog_platform_metadata_complete", + "unsupported_module_state_visible" + ] + }, + { + "id": "platform_plugin_audit", + "priority": 2, + "status": "pending", + "targets": [ + "desktop_multi_window", + "file_picker_bridge", + "usb_serial", + "device_info_plus" + ], + "acceptance": [ + "android_support_matrix", + "unsupported_fallbacks" + ] + }, + { + "id": "usb_platform_boundary", + "priority": 3, + "status": "pending", + "targets": [ + "lib/modules/platform/usb_detector" + ], + "acceptance": [ + "no_windows_hardcode", + "android_system_info", + "error_branch_test" + ] + }, + { + "id": "mobile_layout_baseline", + "priority": 4, + "status": "pending", + "viewport_width_dp": 360, + "targets": [ + "module_home", + "category_home", + "ready_modules", + "recommended_modules" + ], + "acceptance": [ + "no_overflow", + "safe_area", + "keyboard_avoidance", + "touch_targets" + ] + }, + { + "id": "android_host", + "priority": 5, + "status": "blocked_by_dependencies", + "depends_on": [ + "module_platform_contract", + "platform_plugin_audit", + "mobile_layout_baseline" + ], + "acceptance": [ + "android_directory", + "manifest_capabilities", + "debug_apk", + "emulator_smoke" + ] + } + ], + "quality_gate": [ + "node tool/validate_agent_docs.js", + "dart format .", + "flutter analyze:no_error", + "flutterguard:no_high", + "logic_change:targeted_test", + "teaching_ui_change:visual_evidence" + ], + "deferred_queue": [ + "popup_widgets_decomposition", + "widget_test_coverage", + "flutterguard_med_reduction", + "recommended_module_visual_evidence" + ] } - -abstract class FilePickerService { - Future pickFile({ - List allowedExtensions = const [], - String? title, - String? message, - }); -} -``` - -**macOS 原生侧目标**: -- Channel 从 `flutter_study/gcode_file_picker` 调整为 `file_picker_bridge/file_picker` -- `pickFile` 支持 `allowedExtensions`、`title`、`message` -- 保留 `com.apple.security.files.user-selected.read-only` -- G-code 模块只传 G-code 扩展名,不再持有平台通道细节 - -**实施步骤**: -- [x] 新增 `lib/shared/platform/file_picker/` 共享能力目录 -- [x] 将 `GcodeFilePicker` 改造成通用 `FilePickerService` -- [x] 调整 macOS `AppDelegate.swift` MethodChannel 名称和参数协议 -- [x] `gcode_visualizer` 只依赖 shared file picker 接口 -- [x] 删除模块内 `services/gcode_file_picker.dart` -- [x] 补充 shared 能力 `AI_ANALYSIS.md` -- [x] 为 MethodChannel service 增加可 mock 的单元测试 - -**暂不独立成插件包的原因**: -- 当前只有 macOS 实现,API 仍小 -- 只有 `gcode_visualizer` 一个模块实际使用 -- 独立 plugin 会引入额外的 package、registrant、Pods/Gradle 维护成本 - -**升级为独立 plugin/package 的触发条件**: -- 2 个以上模块稳定复用 -- 需要 Windows/iOS/Android 文件选择实现 -- 需要被其它工程复用 -- 需要独立版本、测试、发布节奏 - -### 2.2 shared 能力治理 - -- [x] 教学模板组件已从 `lib/shared/learning/` 抽出为外部 `flutter_study_learning` 包 -- [x] `file_picker` 已从 `lib/shared/platform/` 抽出为外部 `file_picker_bridge` 包 -- [x] 为 `lib/shared/platform/` 补充平台能力说明 `AI_ANALYSIS.md` -- [ ] 共享能力必须提供业务无关接口,模块只能传入业务参数 -- [ ] 共享能力新增后必须至少被 1 个模块接入验证 -- [ ] 若 shared 能力 3 个月内仍只有 1 个模块使用,保留在 shared,但不升级为独立插件 - -## Phase 3 — 模块内部规范化 ⏳ - -**目标**: 逐步统一模块内部分层(presentation/application/domain/data)。 - -- [ ] `popup_widgets` — 拆分 895 行 `module_root.dart` 为独立页面 -- [ ] `debounce_throttle` — 迁移为 `module_entry + module_root + utils` 精简模式 -- [ ] `status_management` — 保持 app/features/shared 分层,添加测试 -- [x] 所有模块补齐 `AI_ANALYSIS.md`(如有缺失) -- [x] `gcode_visualizer` — 文件选择器抽到 `shared/platform/file_picker` 后更新模块分析文档 - -## Phase 4 — 测试与质量 🔲 - -**目标**: 提升测试覆盖率和代码质量。 - -- [ ] 为无测试模块补充基础 Widget 测试 -- [ ] 引入 lint 规则增强(如 `prefer_const_constructors`) -- [ ] `scroll_table` 和 `usb_detector` — 从 `ModuleStatus.pending` 提升到 `ready` -- [ ] 建立 shared 能力测试样例: MethodChannel mock、错误分支、取消选择分支 -- [ ] FlutterGuard MED 项分批治理,优先处理 shared 与推荐模块 - -## Phase 5 — 教学体验 🔲 - -**目标**: 更多模块使用教学模板(`LearningScaffold`)。 - -- [x] `adsorption_line` — 改造为教学页面 -- [x] `stream_subscription` — 改造为教学页面 -- [x] `download_animation` — 改造为教学页面 - -## Phase 6 — 项目整体归拢 🔲 - -**目标**: 从“模块集合”收敛为“可维护的学习平台”,统一入口、共享能力、模块质量和验收标准。 - -### 6.1 目录归拢 - -- [ ] `app/`: 只放应用壳、路由、主题入口,不放模块业务 -- [ ] `module_registry/`: 只放模块元数据模型和枚举 -- [ ] `shared/learning/`: 只放教学模板组件 -- [ ] `shared/platform/`: 只放平台通道、系统能力、设备能力等业务无关服务 -- [ ] `modules///`: 只放模块内业务、页面、状态、解析器和模块文档 - -### 6.2 模块质量分级 - -- [ ] `ModuleStatus.pending`: 有明显结构、文档、体验或质量缺口 -- [ ] `ModuleStatus.ready`: 可独立学习,元数据完整,分析文档完整,基础验收通过 -- [ ] `ModuleStatus.recommended`: 使用教学模板,交互完整,有测试覆盖,FlutterGuard 无新增 high - -### 6.3 每轮重构验收 - -每次涉及代码调整后继续执行: - -```bash -dart format . -flutter analyze -dart run flutterguard_cli:flutterguard scan --path . --fail-on high -``` - -按变更类型补充: -- 逻辑/解析器: 跑对应 `flutter test` -- macOS 原生改动: 跑 `flutter build macos` -- UI 教学页: 截图或人工验收说明 - -### 6.4 近期优先级 - -1. 修正并稳定 `AI_ANALYSIS.md` 层级生成/维护规则,避免根文档再次退化为全量文件清单 -2. `popup_widgets` 拆分 900+ 行 `module_root.dart`,降低 FlutterGuard MED/LOW 噪音 -3. 为已使用 `LearningScaffold` 的 ready 模块补齐 Widget smoke test,满足后续推荐条件 -4. 建立 shared 能力测试模板,覆盖多窗口、平台桥接、取消/错误分支 -5. 对推荐模块逐步补齐截图或人工验收记录 diff --git a/lib/AI_ANALYSIS.md b/lib/AI_ANALYSIS.md index 6c73b1b..d0356bd 100644 --- a/lib/AI_ANALYSIS.md +++ b/lib/AI_ANALYSIS.md @@ -10,6 +10,7 @@ }, "entrypoints": [ "main.dart", + "app/app_bootstrap.dart", "app/app.dart", "app/router/app_route_table.dart" ], @@ -34,8 +35,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/AI_MODULE_INDEX.md b/lib/AI_MODULE_INDEX.md index ce549eb..33e79a5 100644 --- a/lib/AI_MODULE_INDEX.md +++ b/lib/AI_MODULE_INDEX.md @@ -1,58 +1,231 @@ -# AI 模块索引 - -> 此文件描述 lib/ 下所有模块的结构,AI 修改模块代码前请查阅对应模块的 AI_ANALYSIS.md。 - -## 模块列表 - -| 模块 | 路径 | 路由路径 | 状态管理 | 复杂度 | AI 分析文件 | -|------|------|---------|---------|--------|------------| -| adsorption_line | `modules/ui/adsorption_line` | /adsorption-line | ChangeNotifier + Provider | 高 | `modules/ui/adsorption_line/AI_ANALYSIS.md` | -| debounce_throttle | `modules/basic/debounce_throttle` | /debounce-throttle | StatefulWidget | 低 | `modules/basic/debounce_throttle/AI_ANALYSIS.md` | -| download_animation | `modules/ui/download_animation` | /download-animation | StatefulWidget | 中 | `modules/ui/download_animation/AI_ANALYSIS.md` | -| flutter_ioc | `modules/state/flutter_ioc` | /flutter-ioc | 自研 IoC + Provider | 中 | `modules/state/flutter_ioc/AI_ANALYSIS.md` | -| gcode_visualizer | `modules/ui/gcode_visualizer` | /gcode-visualizer | ChangeNotifier + AnimationController | 高 | `modules/ui/gcode_visualizer/AI_ANALYSIS.md` | -| dio_interceptor | `modules/platform/dio_interceptor` | /dio-interceptor | 无(Dio 拦截器) | 中 | `modules/platform/dio_interceptor/AI_ANALYSIS.md` | -| isolate_task_manager | `modules/async/isolate_task_manager` | /isolate-stream | StatefulWidget | 中 | `modules/async/isolate_task_manager/AI_ANALYSIS.md` | -| isolate_basic | `modules/async/isolate_basic` | /isolate-basic | StatefulWidget | 低 | `modules/async/isolate_basic/AI_ANALYSIS.md` | -| microtask | `modules/basic/microtask` | /microtask | StatefulWidget | 低 | `modules/basic/microtask/AI_ANALYSIS.md` | -| popup_widgets | `modules/popup_table/popup_widgets` | /popup-widgets | StatefulWidget | 高 | `modules/popup_table/popup_widgets/AI_ANALYSIS.md` | -| popup_list_interaction | `modules/popup_table/popup_list_interaction` | /popup-list-interaction | StatefulWidget | 低 | `modules/popup_table/popup_list_interaction/AI_ANALYSIS.md` | -| scroll_table | `modules/popup_table/scroll_table` | /scroll-table | 无 | 低 | `modules/popup_table/scroll_table/AI_ANALYSIS.md` | -| overlay_follow_compare | `modules/popup_table/overlay_follow_compare` | /overlay-compare | StatefulWidget | 中 | `modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md` | -| status_management | `modules/state/status_management` | /status-management | Provider/Riverpod/Bloc | 高 | `modules/state/status_management/AI_ANALYSIS.md` | -| stream_subscription | `modules/async/stream_subscription` | /stream-subscription | StreamController | 中 | `modules/async/stream_subscription/AI_ANALYSIS.md` | -| tree_state | `modules/basic/tree_state` | /tree-state | StatefulWidget | 低 | `modules/basic/tree_state/AI_ANALYSIS.md` | -| usb_detector | `modules/platform/usb_detector` | /usb-detector | StreamController | 中 | `modules/platform/usb_detector/AI_ANALYSIS.md` | - -## 模块模式分类 - -### 模式 A: 简单入口(module_entry -> module_root) -- debounce_throttle -- download_animation -- flutter_ioc -- isolate_basic -- isolate_task_manager -- overlay_follow_compare -- popup_list_interaction -- popup_widgets -- scroll_table -- usb_detector - -### 模式 B: 页面路由型(module_entry -> module_routes -> pages) -- tree_state -- microtask -- stream_subscription -- dio_interceptor -- status_management - -### 模式 C: 功能分区型(module_entry 直接装配 pages/state/widgets/services) -- adsorption_line(models/state/services/widgets) -- gcode_visualizer(models/parser/services/state/widgets/pages) - -## 层级维护规则 - -- 根级 `AI_ANALYSIS.md` 只记录工作区层级、模块总数、外部包边界和下一步队列。 -- `lib/app/**/AI_ANALYSIS.md` 只记录应用壳和路由聚合,不展开模块内部细节。 -- `lib/shared/**/AI_ANALYSIS.md` 只记录业务无关共享能力、平台边界和可复用 API。 -- `lib/modules/**/AI_ANALYSIS.md` 只记录单模块结构、数据流、关键类、教学组件和变更备注。 -- 新增或迁移模块时,同步更新本索引、模块自身 `AI_ANALYSIS.md` 和 `lib/app/router/app_route_table.dart`。 +{ + "schema": "flutter_study.agent_docs.module_index.v1", + "registry": "lib/app/router/app_route_table.dart", + "count": 17, + "modules": [ + { + "id": "tree_state", + "category": "basic", + "path": "lib/modules/basic/tree_state", + "route": "/tree-state", + "status": "recommended", + "depends": [ + "flutter_study_learning", + "module_registry", + "go_router" + ], + "analysis": "lib/modules/basic/tree_state/AI_ANALYSIS.md" + }, + { + "id": "microtask", + "category": "basic", + "path": "lib/modules/basic/microtask", + "route": "/microtask", + "status": "recommended", + "depends": [ + "flutter_study_learning", + "module_registry", + "go_router" + ], + "analysis": "lib/modules/basic/microtask/AI_ANALYSIS.md" + }, + { + "id": "debounce_throttle", + "category": "basic", + "path": "lib/modules/basic/debounce_throttle", + "route": "/debounce-throttle", + "status": "ready", + "depends": [ + "flutter_study_learning", + "module_registry" + ], + "analysis": "lib/modules/basic/debounce_throttle/AI_ANALYSIS.md" + }, + { + "id": "stream_subscription", + "category": "async", + "path": "lib/modules/async/stream_subscription", + "route": "/stream-subscription", + "status": "recommended", + "depends": [ + "flutter_study_learning", + "module_registry", + "go_router" + ], + "analysis": "lib/modules/async/stream_subscription/AI_ANALYSIS.md" + }, + { + "id": "isolate_basic", + "category": "async", + "path": "lib/modules/async/isolate_basic", + "route": "/isolate-basic", + "status": "ready", + "depends": [ + "flutter_study_learning", + "module_registry", + "go_router" + ], + "analysis": "lib/modules/async/isolate_basic/AI_ANALYSIS.md" + }, + { + "id": "isolate_task_manager", + "category": "async", + "path": "lib/modules/async/isolate_task_manager", + "route": "/isolate-stream", + "status": "ready", + "depends": [ + "flutter_study_learning", + "module_registry" + ], + "analysis": "lib/modules/async/isolate_task_manager/AI_ANALYSIS.md" + }, + { + "id": "status_management", + "category": "state", + "path": "lib/modules/state/status_management", + "route": "/status-management", + "status": "recommended", + "depends": [ + "flutter_study_learning", + "provider", + "flutter_riverpod", + "flutter_bloc", + "module_registry", + "go_router" + ], + "analysis": "lib/modules/state/status_management/AI_ANALYSIS.md" + }, + { + "id": "flutter_ioc", + "category": "state", + "path": "lib/modules/state/flutter_ioc", + "route": "/flutter-ioc", + "status": "ready", + "depends": [ + "flutter_study_learning", + "flutter_ioc_core", + "provider", + "module_registry" + ], + "analysis": "lib/modules/state/flutter_ioc/AI_ANALYSIS.md" + }, + { + "id": "gcode_visualizer", + "category": "ui", + "path": "lib/modules/ui/gcode_visualizer", + "route": "/gcode-visualizer", + "status": "ready", + "depends": [ + "flutter_study_learning", + "gcode_core", + "file_picker_bridge", + "module_registry" + ], + "analysis": "lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md" + }, + { + "id": "adsorption_line", + "category": "ui", + "path": "lib/modules/ui/adsorption_line", + "route": "/adsorption-line", + "status": "ready", + "depends": [ + "flutter_study_learning", + "provider", + "module_registry" + ], + "analysis": "lib/modules/ui/adsorption_line/AI_ANALYSIS.md" + }, + { + "id": "download_animation", + "category": "ui", + "path": "lib/modules/ui/download_animation", + "route": "/download-animation", + "status": "ready", + "depends": [ + "flutter_study_learning", + "module_registry", + "go_router" + ], + "analysis": "lib/modules/ui/download_animation/AI_ANALYSIS.md" + }, + { + "id": "popup_widgets", + "category": "popup_table", + "path": "lib/modules/popup_table/popup_widgets", + "route": "/popup-widgets", + "status": "ready", + "depends": [ + "flutter_study_learning", + "module_registry" + ], + "analysis": "lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md" + }, + { + "id": "popup_list_interaction", + "category": "popup_table", + "path": "lib/modules/popup_table/popup_list_interaction", + "route": "/popup-list-interaction", + "status": "ready", + "depends": [ + "flutter_study_learning", + "module_registry", + "go_router" + ], + "analysis": "lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md" + }, + { + "id": "scroll_table", + "category": "popup_table", + "path": "lib/modules/popup_table/scroll_table", + "route": "/scroll-table", + "status": "ready", + "depends": [ + "flutter_study_learning", + "two_dimensional_scrollables", + "module_registry" + ], + "analysis": "lib/modules/popup_table/scroll_table/AI_ANALYSIS.md" + }, + { + "id": "overlay_follow_compare", + "category": "popup_table", + "path": "lib/modules/popup_table/overlay_follow_compare", + "route": "/overlay-compare", + "status": "ready", + "depends": [ + "flutter_study_learning", + "module_registry" + ], + "analysis": "lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md" + }, + { + "id": "dio_interceptor", + "category": "platform", + "path": "lib/modules/platform/dio_interceptor", + "route": "/dio-interceptor", + "status": "ready", + "depends": [ + "flutter_study_learning", + "dio", + "module_registry", + "go_router" + ], + "analysis": "lib/modules/platform/dio_interceptor/AI_ANALYSIS.md" + }, + { + "id": "usb_detector", + "category": "platform", + "path": "lib/modules/platform/usb_detector", + "route": "/usb-detector", + "status": "ready", + "depends": [ + "flutter_study_learning", + "usb_serial", + "device_info_plus", + "module_registry" + ], + "analysis": "lib/modules/platform/usb_detector/AI_ANALYSIS.md" + } + ] +} diff --git a/lib/app/AI_ANALYSIS.md b/lib/app/AI_ANALYSIS.md index fc31e42..8ca5e14 100644 --- a/lib/app/AI_ANALYSIS.md +++ b/lib/app/AI_ANALYSIS.md @@ -10,16 +10,25 @@ }, "entrypoints": [ "app.dart", + "app_bootstrap.dart", + "module_home_page.dart", + "category_navigation.dart", + "category_window_app.dart", "router/app_router.dart", "router/app_route_table.dart" ], "owns": [ + "host_bootstrap", "material_app_router", - "router" + "router", + "module_home", + "adaptive_category_navigation", + "desktop_category_window_shell" ], "depends": [ "go_router", "module_registry", + "shared/multi_window", "modules" ], "children": [ @@ -29,8 +38,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/app/app_bootstrap.dart b/lib/app/app_bootstrap.dart new file mode 100644 index 0000000..f8f0c2c --- /dev/null +++ b/lib/app/app_bootstrap.dart @@ -0,0 +1,25 @@ +import 'package:desktop_multi_window/desktop_multi_window.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; + +import '../shared/multi_window/multi_window_manager.dart'; +import 'app.dart'; +import 'category_window_app.dart'; + +/// Resolves the host-specific application shell before mounting Flutter. +Future bootstrapFlutterStudyApp() async { + WidgetsFlutterBinding.ensureInitialized(); + + Widget root = const App(); + if (MultiWindowManager.isSupported) { + final windowController = await WindowController.fromCurrentEngine(); + final arguments = MultiWindowManager.parseArguments( + windowController.arguments, + ); + if (arguments.type == WindowType.category && arguments.category != null) { + root = CategoryWindowApp(category: arguments.category!); + } + } + + runApp(ProviderScope(child: root)); +} diff --git a/lib/app/category_navigation.dart b/lib/app/category_navigation.dart new file mode 100644 index 0000000..6c8272f --- /dev/null +++ b/lib/app/category_navigation.dart @@ -0,0 +1,36 @@ +import 'package:flutter/material.dart'; + +import '../module_registry/module_catalog_utils.dart'; +import '../module_registry/module_category.dart'; +import '../module_registry/module_entry.dart'; +import '../shared/multi_window/multi_window_manager.dart'; +import 'category_window_app.dart'; + +/// Selects the platform-appropriate way to open a module category. +/// +/// Desktop hosts may create a separate window. Mobile and other hosts keep the +/// same content inside the current navigation stack. +class CategoryNavigation { + const CategoryNavigation._(); + + static bool get opensInNewWindow => MultiWindowManager.isSupported; + + static Future open( + BuildContext context, { + required ModuleCategory category, + required List modules, + }) async { + if (opensInNewWindow) { + await MultiWindowManager.instance.createCategoryWindow(category); + return; + } + + if (!context.mounted) return; + final filtered = filterModulesByCategory(modules, category); + await Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => CategoryHomePage(category: category, modules: filtered), + ), + ); + } +} diff --git a/lib/app/category_window_app.dart b/lib/app/category_window_app.dart new file mode 100644 index 0000000..8007f05 --- /dev/null +++ b/lib/app/category_window_app.dart @@ -0,0 +1,78 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + +import '../module_registry/module_catalog_utils.dart'; +import '../module_registry/module_category.dart'; +import '../module_registry/module_entry.dart'; +import 'module_home_page.dart'; +import 'router/app_route_table.dart'; + +class CategoryWindowApp extends StatelessWidget { + const CategoryWindowApp({super.key, required this.category}); + + final ModuleCategory category; + + static GoRouter createRouter(ModuleCategory category) { + final modules = filterModulesByCategory(AppRouteTable.modules, category); + final childRoutes = buildCategoryRoutes(modules); + + return GoRouter( + initialLocation: '/', + routes: [ + GoRoute( + path: '/', + builder: (context, state) => + CategoryHomePage(category: category, modules: modules), + routes: childRoutes, + ), + ], + ); + } + + @override + Widget build(BuildContext context) { + return MaterialApp.router( + routerConfig: CategoryWindowApp.createRouter(category), + title: category.label, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + ), + ); + } +} + +class CategoryHomePage extends StatelessWidget { + const CategoryHomePage({ + super.key, + required this.category, + required this.modules, + }); + + final ModuleCategory category; + final List modules; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(category.label), + leading: IconButton( + icon: const Icon(Icons.arrow_back), + onPressed: () { + if (context.canPop()) { + context.pop(); + } else { + Navigator.of(context).maybePop(); + } + }, + ), + ), + body: ListView.builder( + padding: const EdgeInsets.symmetric(vertical: 8), + itemCount: modules.length, + itemBuilder: (context, index) => ModuleListTile(module: modules[index]), + ), + ); + } +} diff --git a/lib/app/module_home_page.dart b/lib/app/module_home_page.dart new file mode 100644 index 0000000..1bb10fa --- /dev/null +++ b/lib/app/module_home_page.dart @@ -0,0 +1,149 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + +import '../module_registry/module_category.dart'; +import '../module_registry/module_entry.dart'; +import 'category_navigation.dart'; + +class ModuleHomePage extends StatelessWidget { + const ModuleHomePage({super.key, required this.modules}); + + final List modules; + + @override + Widget build(BuildContext context) { + const categories = ModuleCategory.values; + + return Scaffold( + appBar: AppBar(title: const Text('Flutter 学习实验室')), + body: ListView.builder( + padding: const EdgeInsets.symmetric(vertical: 8), + itemCount: categories.length, + itemBuilder: (context, index) { + final category = categories[index]; + final categoryModules = modules + .where((module) => module.category == category) + .toList(); + + if (categoryModules.isEmpty) return const SizedBox.shrink(); + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(16, 16, 8, 8), + child: Row( + children: [ + Expanded( + child: Text( + category.label, + style: Theme.of(context).textTheme.titleMedium + ?.copyWith( + fontWeight: FontWeight.bold, + color: Theme.of(context).colorScheme.primary, + ), + ), + ), + IconButton( + icon: Icon( + CategoryNavigation.opensInNewWindow + ? Icons.open_in_new + : Icons.chevron_right, + size: 20, + ), + tooltip: '打开分类', + onPressed: () => CategoryNavigation.open( + context, + category: category, + modules: modules, + ), + ), + ], + ), + ), + ...categoryModules.map( + (module) => ModuleListTile(module: module), + ), + const Divider(height: 1), + ], + ); + }, + ), + ); + } +} + +class ModuleListTile extends StatelessWidget { + const ModuleListTile({super.key, required this.module}); + + final ModuleEntry module; + + Color _difficultyColor(Difficulty difficulty) { + return switch (difficulty) { + Difficulty.beginner => Colors.green, + Difficulty.intermediate => Colors.orange, + Difficulty.advanced => Colors.red, + }; + } + + @override + Widget build(BuildContext context) { + final difficultyColor = _difficultyColor(module.difficulty); + + return ListTile( + title: Row( + children: [ + Expanded(child: Text(module.title)), + Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2), + decoration: BoxDecoration( + color: difficultyColor.withValues(alpha: 0.15), + borderRadius: BorderRadius.circular(12), + ), + child: Text( + module.difficulty.label, + style: TextStyle( + fontSize: 11, + color: difficultyColor, + fontWeight: FontWeight.w500, + ), + ), + ), + ], + ), + subtitle: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(module.subtitle, style: const TextStyle(fontSize: 12)), + const SizedBox(height: 6), + Wrap( + spacing: 4, + runSpacing: 4, + children: module.concepts + .map( + (concept) => Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, + vertical: 2, + ), + decoration: BoxDecoration( + color: Colors.grey.shade200, + borderRadius: BorderRadius.circular(4), + ), + child: Text(concept, style: const TextStyle(fontSize: 10)), + ), + ) + .toList(), + ), + const SizedBox(height: 4), + Text( + '预计 ${module.estimatedMinutes} 分钟 · ${module.status.label}', + style: TextStyle(fontSize: 11, color: Colors.grey.shade600), + ), + ], + ), + trailing: const Icon(Icons.chevron_right), + onTap: () => context.push(module.path), + ); + } +} diff --git a/lib/app/router/AI_ANALYSIS.md b/lib/app/router/AI_ANALYSIS.md index 1714943..7f7606d 100644 --- a/lib/app/router/AI_ANALYSIS.md +++ b/lib/app/router/AI_ANALYSIS.md @@ -15,9 +15,10 @@ "owns": [ "go_router_root", "module_route_aggregation", - "module_home_index" + "module_catalog_composition" ], "depends": [ + "app/module_home_page", "module_registry", "modules" ], @@ -26,8 +27,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/app/router/app_route_table.dart b/lib/app/router/app_route_table.dart index 32e113c..2227c51 100644 --- a/lib/app/router/app_route_table.dart +++ b/lib/app/router/app_route_table.dart @@ -1,11 +1,8 @@ -import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import '../module_home_page.dart'; import '../../module_registry/module_category.dart'; import '../../module_registry/module_entry.dart'; -import '../../shared/multi_window/category_window_app.dart'; -import '../../shared/multi_window/multi_window_manager.dart'; -import '../../shared/multi_window/multi_window_route_filter.dart'; import '../../modules/basic/debounce_throttle/module_entry.dart'; import '../../modules/basic/microtask/module_entry.dart'; import '../../modules/basic/microtask/module_routes.dart'; @@ -38,16 +35,16 @@ import '../../modules/platform/usb_detector/module_entry.dart'; // ==================== 状态管理子路由(模块内部已定义映射) ==================== -List _buildStatusManageRoutes() => - StatusManagementRoutes.routes.entries - .map( - (entry) => GoRoute( - path: - entry.key.startsWith('/') ? entry.key.substring(1) : entry.key, - builder: (context, state) => entry.value(context), - ), - ) - .toList(); +List _buildStatusManageRoutes() => StatusManagementRoutes + .routes + .entries + .map( + (entry) => GoRoute( + path: entry.key.startsWith('/') ? entry.key.substring(1) : entry.key, + builder: (context, state) => entry.value(context), + ), + ) + .toList(); // ==================== 模块注册 ==================== @@ -233,7 +230,7 @@ final List _modules = [ 'LayerLink', 'CompositedTransformFollower', 'markNeedsBuild', - 'ScrollController' + 'ScrollController', ], estimatedMinutes: 30, status: ModuleStatus.ready, @@ -266,24 +263,6 @@ final List _modules = [ ), ]; -// ==================== 路由聚合 ==================== - -Future _openCategoryWindow( - BuildContext context, - ModuleCategory category, -) async { - final filtered = filterModulesByCategory(_modules, category); - if (MultiWindowManager.isSupported) { - await MultiWindowManager.instance.createCategoryWindow(category); - } else { - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => CategoryHomePage(category: category, modules: filtered), - ), - ); - } -} - final List _routes = [ GoRoute( path: '/', @@ -301,137 +280,3 @@ class AppRouteTable { static List get routes => _routes; static List get modules => _modules; } - -// ==================== 首页 ==================== - -class ModuleHomePage extends StatelessWidget { - const ModuleHomePage({super.key, required this.modules}); - - final List modules; - - @override - Widget build(BuildContext context) { - const categories = ModuleCategory.values; - - return Scaffold( - appBar: AppBar( - title: const Text('Flutter 学习实验室'), - ), - body: ListView.builder( - padding: const EdgeInsets.symmetric(vertical: 8), - itemCount: categories.length, - itemBuilder: (context, index) { - final category = categories[index]; - final categoryModules = - modules.where((m) => m.category == category).toList(); - - if (categoryModules.isEmpty) return const SizedBox.shrink(); - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(16, 16, 8, 8), - child: Row( - children: [ - Expanded( - child: Text( - category.label, - style: - Theme.of(context).textTheme.titleMedium?.copyWith( - fontWeight: FontWeight.bold, - color: Theme.of(context).colorScheme.primary, - ), - ), - ), - IconButton( - icon: const Icon(Icons.open_in_new, size: 20), - tooltip: '在新窗口打开', - onPressed: () { - _openCategoryWindow(context, category); - }, - ), - ], - ), - ), - ...categoryModules.map((module) => ModuleCard(module: module)), - const Divider(height: 1), - ], - ); - }, - ), - ); - } -} - -class ModuleCard extends StatelessWidget { - const ModuleCard({super.key, required this.module}); - - final ModuleEntry module; - - Color _difficultyColor(Difficulty d) { - return switch (d) { - Difficulty.beginner => Colors.green, - Difficulty.intermediate => Colors.orange, - Difficulty.advanced => Colors.red, - }; - } - - @override - Widget build(BuildContext context) { - return ListTile( - title: Row( - children: [ - Expanded(child: Text(module.title)), - Container( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2), - decoration: BoxDecoration( - color: - _difficultyColor(module.difficulty).withValues(alpha: 0.15), - borderRadius: BorderRadius.circular(12), - ), - child: Text( - module.difficulty.label, - style: TextStyle( - fontSize: 11, - color: _difficultyColor(module.difficulty), - fontWeight: FontWeight.w500, - ), - ), - ), - ], - ), - subtitle: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(module.subtitle, style: const TextStyle(fontSize: 12)), - const SizedBox(height: 6), - Wrap( - spacing: 4, - runSpacing: 4, - children: module.concepts - .map( - (c) => Container( - padding: - const EdgeInsets.symmetric(horizontal: 6, vertical: 2), - decoration: BoxDecoration( - color: Colors.grey.shade200, - borderRadius: BorderRadius.circular(4), - ), - child: Text(c, style: const TextStyle(fontSize: 10)), - ), - ) - .toList(), - ), - const SizedBox(height: 4), - Text( - '预计 ${module.estimatedMinutes} 分钟 · ${module.status.label}', - style: TextStyle(fontSize: 11, color: Colors.grey.shade600), - ), - ], - ), - trailing: const Icon(Icons.chevron_right), - onTap: () => context.push(module.path), - ); - } -} diff --git a/lib/main.dart b/lib/main.dart index 3ab8e8d..8e7ac24 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,36 +1,3 @@ -import 'package:desktop_multi_window/desktop_multi_window.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'app/app_bootstrap.dart'; -import 'app/app.dart'; -import 'shared/multi_window/category_window_app.dart'; -import 'shared/multi_window/multi_window_manager.dart'; - -void main(List args) async { - WidgetsFlutterBinding.ensureInitialized(); - - if (MultiWindowManager.isSupported) { - final wc = await WindowController.fromCurrentEngine(); - final windowArgs = MultiWindowManager.parseArguments(wc.arguments); - - if (windowArgs.type == WindowType.category && windowArgs.category != null) { - runApp( - ProviderScope( - child: CategoryWindowApp(category: windowArgs.category!), - ), - ); - return; - } - } - - runApp(const ProviderScope(child: MainApp())); -} - -class MainApp extends StatelessWidget { - const MainApp({super.key}); - - @override - Widget build(BuildContext context) { - return const App(); - } -} +Future main() => bootstrapFlutterStudyApp(); diff --git a/lib/module_registry/AI_ANALYSIS.md b/lib/module_registry/AI_ANALYSIS.md index c0f53f3..916c8db 100644 --- a/lib/module_registry/AI_ANALYSIS.md +++ b/lib/module_registry/AI_ANALYSIS.md @@ -10,24 +10,28 @@ }, "entrypoints": [ "module_entry.dart", - "module_category.dart" + "module_category.dart", + "module_catalog_utils.dart" ], "owns": [ "module_entry_model", "module_category_enum", "difficulty_enum", - "module_status_enum" + "module_status_enum", + "module_catalog_filtering", + "category_route_rebasing" ], "depends": [ - "flutter_material" + "flutter_material", + "go_router" ], "children": [], "contracts": { "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/shared/multi_window/multi_window_route_filter.dart b/lib/module_registry/module_catalog_utils.dart similarity index 67% rename from lib/shared/multi_window/multi_window_route_filter.dart rename to lib/module_registry/module_catalog_utils.dart index 7942b77..f1addf1 100644 --- a/lib/shared/multi_window/multi_window_route_filter.dart +++ b/lib/module_registry/module_catalog_utils.dart @@ -1,13 +1,13 @@ import 'package:go_router/go_router.dart'; -import '../../module_registry/module_category.dart'; -import '../../module_registry/module_entry.dart'; +import 'module_category.dart'; +import 'module_entry.dart'; List filterModulesByCategory( List allModules, ModuleCategory category, ) { - return allModules.where((m) => m.category == category).toList(); + return allModules.where((module) => module.category == category).toList(); } List buildCategoryRoutes(List modules) { @@ -26,12 +26,12 @@ String _stripLeadingSlash(String path) { } List _rebasedRoutes(List routes) { - return routes.map((r) { - final strippedPath = r.path.startsWith('/') ? r.path.substring(1) : r.path; + return routes.map((route) { + final strippedPath = _stripLeadingSlash(route.path); return GoRoute( path: strippedPath, - builder: r.builder, - routes: r.routes, + builder: route.builder, + routes: route.routes, ); }).toList(); } diff --git a/lib/modules/AI_ANALYSIS.md b/lib/modules/AI_ANALYSIS.md index a2fae24..e25ba75 100644 --- a/lib/modules/AI_ANALYSIS.md +++ b/lib/modules/AI_ANALYSIS.md @@ -36,8 +36,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/async/AI_ANALYSIS.md b/lib/modules/async/AI_ANALYSIS.md index 334c059..1391044 100644 --- a/lib/modules/async/AI_ANALYSIS.md +++ b/lib/modules/async/AI_ANALYSIS.md @@ -29,8 +29,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/async/isolate_basic/AI_ANALYSIS.md b/lib/modules/async/isolate_basic/AI_ANALYSIS.md index 9453ebe..7ce7a82 100644 --- a/lib/modules/async/isolate_basic/AI_ANALYSIS.md +++ b/lib/modules/async/isolate_basic/AI_ANALYSIS.md @@ -31,8 +31,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md b/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md index 4a12fec..4ac72d2 100644 --- a/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md +++ b/lib/modules/async/isolate_task_manager/AI_ANALYSIS.md @@ -29,8 +29,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/async/stream_subscription/AI_ANALYSIS.md b/lib/modules/async/stream_subscription/AI_ANALYSIS.md index d4b7747..c82383f 100644 --- a/lib/modules/async/stream_subscription/AI_ANALYSIS.md +++ b/lib/modules/async/stream_subscription/AI_ANALYSIS.md @@ -31,8 +31,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/basic/AI_ANALYSIS.md b/lib/modules/basic/AI_ANALYSIS.md index 4a3048d..6b03944 100644 --- a/lib/modules/basic/AI_ANALYSIS.md +++ b/lib/modules/basic/AI_ANALYSIS.md @@ -29,8 +29,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md b/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md index 6da03d8..88d2723 100644 --- a/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md +++ b/lib/modules/basic/debounce_throttle/AI_ANALYSIS.md @@ -29,8 +29,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/basic/microtask/AI_ANALYSIS.md b/lib/modules/basic/microtask/AI_ANALYSIS.md index cc0bf38..257bd8f 100644 --- a/lib/modules/basic/microtask/AI_ANALYSIS.md +++ b/lib/modules/basic/microtask/AI_ANALYSIS.md @@ -32,8 +32,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/basic/tree_state/AI_ANALYSIS.md b/lib/modules/basic/tree_state/AI_ANALYSIS.md index ad0e9e3..4f4cfb9 100644 --- a/lib/modules/basic/tree_state/AI_ANALYSIS.md +++ b/lib/modules/basic/tree_state/AI_ANALYSIS.md @@ -31,8 +31,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/platform/AI_ANALYSIS.md b/lib/modules/platform/AI_ANALYSIS.md index dd561a9..853f3d8 100644 --- a/lib/modules/platform/AI_ANALYSIS.md +++ b/lib/modules/platform/AI_ANALYSIS.md @@ -29,8 +29,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md b/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md index 9321306..0c7ae94 100644 --- a/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md +++ b/lib/modules/platform/dio_interceptor/AI_ANALYSIS.md @@ -32,8 +32,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/platform/usb_detector/AI_ANALYSIS.md b/lib/modules/platform/usb_detector/AI_ANALYSIS.md index 1cee5c5..eba8aa4 100644 --- a/lib/modules/platform/usb_detector/AI_ANALYSIS.md +++ b/lib/modules/platform/usb_detector/AI_ANALYSIS.md @@ -31,8 +31,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/popup_table/AI_ANALYSIS.md b/lib/modules/popup_table/AI_ANALYSIS.md index acc16dc..f6e4dba 100644 --- a/lib/modules/popup_table/AI_ANALYSIS.md +++ b/lib/modules/popup_table/AI_ANALYSIS.md @@ -32,8 +32,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md b/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md index a5b7cf0..37321d5 100644 --- a/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md +++ b/lib/modules/popup_table/overlay_follow_compare/AI_ANALYSIS.md @@ -30,8 +30,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md b/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md index f48f268..8367145 100644 --- a/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md +++ b/lib/modules/popup_table/popup_list_interaction/AI_ANALYSIS.md @@ -32,8 +32,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md b/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md index 45c55e4..bcc4681 100644 --- a/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md +++ b/lib/modules/popup_table/popup_widgets/AI_ANALYSIS.md @@ -30,8 +30,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md b/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md index f0a06a4..5e49cbe 100644 --- a/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md +++ b/lib/modules/popup_table/scroll_table/AI_ANALYSIS.md @@ -31,8 +31,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/state/AI_ANALYSIS.md b/lib/modules/state/AI_ANALYSIS.md index c92a46b..2b1ae20 100644 --- a/lib/modules/state/AI_ANALYSIS.md +++ b/lib/modules/state/AI_ANALYSIS.md @@ -29,8 +29,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/state/flutter_ioc/AI_ANALYSIS.md b/lib/modules/state/flutter_ioc/AI_ANALYSIS.md index 11fea91..4607156 100644 --- a/lib/modules/state/flutter_ioc/AI_ANALYSIS.md +++ b/lib/modules/state/flutter_ioc/AI_ANALYSIS.md @@ -31,8 +31,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/state/status_management/AI_ANALYSIS.md b/lib/modules/state/status_management/AI_ANALYSIS.md index 08f6dde..d01c9cc 100644 --- a/lib/modules/state/status_management/AI_ANALYSIS.md +++ b/lib/modules/state/status_management/AI_ANALYSIS.md @@ -35,8 +35,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/ui/AI_ANALYSIS.md b/lib/modules/ui/AI_ANALYSIS.md index bb359bd..af68442 100644 --- a/lib/modules/ui/AI_ANALYSIS.md +++ b/lib/modules/ui/AI_ANALYSIS.md @@ -31,8 +31,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/ui/adsorption_line/AI_ANALYSIS.md b/lib/modules/ui/adsorption_line/AI_ANALYSIS.md index 4a914b5..8af98c2 100644 --- a/lib/modules/ui/adsorption_line/AI_ANALYSIS.md +++ b/lib/modules/ui/adsorption_line/AI_ANALYSIS.md @@ -32,8 +32,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/ui/download_animation/AI_ANALYSIS.md b/lib/modules/ui/download_animation/AI_ANALYSIS.md index 10307f7..b4fee72 100644 --- a/lib/modules/ui/download_animation/AI_ANALYSIS.md +++ b/lib/modules/ui/download_animation/AI_ANALYSIS.md @@ -32,8 +32,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md b/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md index 2708d41..5b2af7d 100644 --- a/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md +++ b/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md @@ -33,8 +33,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/shared/AI_ANALYSIS.md b/lib/shared/AI_ANALYSIS.md index ed4e06f..46c152c 100644 --- a/lib/shared/AI_ANALYSIS.md +++ b/lib/shared/AI_ANALYSIS.md @@ -14,7 +14,7 @@ ], "owns": [ "business_free_capabilities", - "desktop_windowing", + "desktop_window_lifecycle", "platform_boundaries" ], "depends": [ @@ -29,8 +29,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/shared/multi_window/AI_ANALYSIS.md b/lib/shared/multi_window/AI_ANALYSIS.md index 6b80216..6679372 100644 --- a/lib/shared/multi_window/AI_ANALYSIS.md +++ b/lib/shared/multi_window/AI_ANALYSIS.md @@ -9,18 +9,14 @@ "status": "active" }, "entrypoints": [ - "multi_window_manager.dart", - "category_window_app.dart", - "multi_window_route_filter.dart" + "multi_window_manager.dart" ], "owns": [ "desktop_window_lifecycle", - "category_window_router", - "module_route_filter" + "desktop_window_arguments" ], "depends": [ "desktop_multi_window", - "go_router", "module_registry" ], "children": [], @@ -28,8 +24,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/lib/shared/multi_window/category_window_app.dart b/lib/shared/multi_window/category_window_app.dart deleted file mode 100644 index c38cf2f..0000000 --- a/lib/shared/multi_window/category_window_app.dart +++ /dev/null @@ -1,142 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; - -import '../../app/router/app_route_table.dart'; -import '../../module_registry/module_category.dart'; -import '../../module_registry/module_entry.dart'; -import 'multi_window_route_filter.dart'; - -class CategoryWindowApp extends StatelessWidget { - const CategoryWindowApp({super.key, required this.category}); - - final ModuleCategory category; - - static GoRouter createRouter(ModuleCategory category) { - final modules = filterModulesByCategory(AppRouteTable.modules, category); - final childRoutes = buildCategoryRoutes(modules); - - return GoRouter( - initialLocation: '/', - routes: [ - GoRoute( - path: '/', - builder: (context, state) => - CategoryHomePage(category: category, modules: modules), - routes: childRoutes, - ), - ], - ); - } - - @override - Widget build(BuildContext context) { - return MaterialApp.router( - routerConfig: CategoryWindowApp.createRouter(category), - title: category.label, - theme: ThemeData( - colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), - useMaterial3: true, - ), - ); - } -} - -class CategoryHomePage extends StatelessWidget { - const CategoryHomePage({ - super.key, - required this.category, - required this.modules, - }); - - final ModuleCategory category; - final List modules; - - Color _difficultyColor(Difficulty d) { - return switch (d) { - Difficulty.beginner => Colors.green, - Difficulty.intermediate => Colors.orange, - Difficulty.advanced => Colors.red, - }; - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(category.label), - leading: IconButton( - icon: const Icon(Icons.arrow_back), - onPressed: () { - if (context.canPop()) { - context.pop(); - } else { - Navigator.of(context).maybePop(); - } - }, - ), - ), - body: ListView.builder( - padding: const EdgeInsets.symmetric(vertical: 8), - itemCount: modules.length, - itemBuilder: (context, index) { - final module = modules[index]; - return ListTile( - title: Row( - children: [ - Expanded(child: Text(module.title)), - Container( - padding: - const EdgeInsets.symmetric(horizontal: 8, vertical: 2), - decoration: BoxDecoration( - color: _difficultyColor(module.difficulty) - .withValues(alpha: 0.15), - borderRadius: BorderRadius.circular(12), - ), - child: Text( - module.difficulty.label, - style: TextStyle( - fontSize: 11, - color: _difficultyColor(module.difficulty), - fontWeight: FontWeight.w500, - ), - ), - ), - ], - ), - subtitle: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text(module.subtitle, style: const TextStyle(fontSize: 12)), - const SizedBox(height: 6), - Wrap( - spacing: 4, - runSpacing: 4, - children: module.concepts - .map( - (c) => Container( - padding: const EdgeInsets.symmetric( - horizontal: 6, vertical: 2), - decoration: BoxDecoration( - color: Colors.grey.shade200, - borderRadius: BorderRadius.circular(4), - ), - child: Text(c, style: const TextStyle(fontSize: 10)), - ), - ) - .toList(), - ), - const SizedBox(height: 4), - Text( - '预计 ${module.estimatedMinutes} 分钟 · ${module.status.label}', - style: TextStyle(fontSize: 11, color: Colors.grey.shade600), - ), - ], - ), - trailing: const Icon(Icons.chevron_right), - onTap: () => context.push(module.path), - ); - }, - ), - ); - } -} diff --git a/lib/shared/platform/AI_ANALYSIS.md b/lib/shared/platform/AI_ANALYSIS.md index e7e836a..39dad22 100644 --- a/lib/shared/platform/AI_ANALYSIS.md +++ b/lib/shared/platform/AI_ANALYSIS.md @@ -24,8 +24,8 @@ "no_natural_language": true, "index_only": true, "max_index_depth": 2, - "doc_consumer": "vibecoding", - "doc_mode": "harness", + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", "update_required_on_file_change": true, "import_direction_enforced": true }, diff --git a/test/shared/module_catalog_utils_test.dart b/test/shared/module_catalog_utils_test.dart new file mode 100644 index 0000000..a34728e --- /dev/null +++ b/test/shared/module_catalog_utils_test.dart @@ -0,0 +1,59 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:go_router/go_router.dart'; +import 'package:main_app/module_registry/module_catalog_utils.dart'; +import 'package:main_app/module_registry/module_category.dart'; +import 'package:main_app/module_registry/module_entry.dart'; + +void main() { + ModuleEntry createModule({ + required String path, + required ModuleCategory category, + List routes = const [], + }) { + return ModuleEntry( + title: path, + path: path, + subtitle: 'test', + category: category, + difficulty: Difficulty.beginner, + concepts: const ['test'], + estimatedMinutes: 1, + status: ModuleStatus.ready, + builder: (_) => const SizedBox.shrink(), + routes: routes, + ); + } + + test('filters modules without changing catalog order', () { + final modules = [ + createModule(path: '/basic-a', category: ModuleCategory.basic), + createModule(path: '/ui-a', category: ModuleCategory.ui), + createModule(path: '/basic-b', category: ModuleCategory.basic), + ]; + + final filtered = filterModulesByCategory(modules, ModuleCategory.basic); + + expect(filtered.map((module) => module.path), ['/basic-a', '/basic-b']); + }); + + test('rebases module and child paths for a category window', () { + final modules = [ + createModule( + path: '/basic-a', + category: ModuleCategory.basic, + routes: [ + GoRoute( + path: '/details', + builder: (_, __) => const SizedBox.shrink(), + ), + ], + ), + ]; + + final routes = buildCategoryRoutes(modules); + + expect(routes.single.path, 'basic-a'); + expect((routes.single.routes.single as GoRoute).path, 'details'); + }); +} diff --git a/tool/generate_agent_indexes.js b/tool/generate_agent_indexes.js index bacfb63..9f9a1d9 100644 --- a/tool/generate_agent_indexes.js +++ b/tool/generate_agent_indexes.js @@ -7,8 +7,8 @@ const contracts = { no_natural_language: true, index_only: true, max_index_depth: 2, - doc_consumer: 'vibecoding', - doc_mode: 'harness', + doc_consumer: 'coding_agent', + doc_mode: 'machine_contract', update_required_on_file_change: true, import_direction_enforced: true, }; @@ -84,10 +84,17 @@ function writeIndex({ function writeSchema() { writeJson('AI_ANALYSIS_SCHEMA.json', { - schema: 'vibecoding.harness.ai_analysis_schema.v1', + schema: 'flutter_study.agent_docs.schema.v2', syntax: 'json_config', prose: 'forbidden', markdown: 'forbidden', + generated_by: 'tool/generate_agent_indexes.js', + documents: { + project_context: 'AI_PROJECT_CONTEXT.md', + refactor_plan: 'REFACTOR_PLAN.md', + module_index: 'lib/AI_MODULE_INDEX.md', + analysis_glob: '**/AI_ANALYSIS.md', + }, levels: { workspace: ['AI_ANALYSIS.md'], section: [ @@ -116,8 +123,8 @@ function writeSchema() { no_natural_language: true, index_only: true, max_index_depth: 2, - doc_consumer: 'vibecoding', - doc_mode: 'harness', + doc_consumer: 'coding_agent', + doc_mode: 'machine_contract', }, module_contract_policy: { keep_for_module_rule: true, @@ -127,22 +134,181 @@ function writeSchema() { }); } +function writeProjectContext() { + writeJson('AI_PROJECT_CONTEXT.md', { + schema: 'flutter_study.agent_docs.project_context.v1', + consumer: 'coding_agent', + package: { + name: 'main_app', + type: 'flutter_modular_learning_app', + sdk: ['flutter_3', 'dart_3'], + }, + platform: { + current_hosts: ['macos', 'windows'], + next_host: 'android', + target_hosts: ['android', 'ios', 'macos', 'windows'], + }, + entrypoints: { + process: 'lib/main.dart', + bootstrap: 'lib/app/app_bootstrap.dart', + app: 'lib/app/app.dart', + router: 'lib/app/router/app_router.dart', + route_table: 'lib/app/router/app_route_table.dart', + }, + layers: [ + { + id: 'app', + path: 'lib/app', + owns: ['host_bootstrap', 'app_shell', 'navigation_policy', 'route_composition'], + may_depend_on: ['module_registry', 'shared', 'modules'], + }, + { + id: 'module_registry', + path: 'lib/module_registry', + owns: ['module_metadata', 'catalog_operations'], + may_depend_on: ['flutter', 'go_router'], + }, + { + id: 'shared', + path: 'lib/shared', + owns: ['business_neutral_capabilities', 'platform_boundaries'], + forbidden_dependencies: ['app', 'modules'], + }, + { + id: 'modules', + path: 'lib/modules/{category}/{module}', + owns: ['learning_ui', 'module_state', 'module_domain', 'module_data'], + forbidden_dependencies: ['other_modules'], + }, + ], + module_contract: { + required_files: ['module_entry.dart', 'AI_ANALYSIS.md'], + required_registration: 'lib/app/router/app_route_table.dart', + required_metadata: ['category', 'difficulty', 'concepts', 'estimatedMinutes', 'status', 'subtitle'], + required_learning_dependency: 'flutter_study_learning', + route_path_style: 'kebab_case', + directory_style: 'snake_case', + }, + platform_rules: { + router_platform_api: 'forbidden', + module_host_navigation: 'forbidden', + desktop_window_policy: 'lib/app/category_navigation.dart', + platform_capability_contract: 'business_neutral_interface', + }, + change_protocol: { + pre_read: ['AI_PROJECT_CONTEXT.md', 'REFACTOR_PLAN.md', '{target}/AI_ANALYSIS.md'], + update_source: ['tool/generate_agent_indexes.js'], + generate: 'bash tool/generate_harness_ai_analysis.sh', + validate: [ + 'bash tool/generate_harness_ai_analysis.sh', + 'dart format .', + 'flutter analyze', + 'dart run flutterguard_cli:flutterguard scan --path . --fail-on high', + ], + }, + }); +} + +function writeRefactorPlan() { + writeJson('REFACTOR_PLAN.md', { + schema: 'flutter_study.agent_docs.refactor_plan.v1', + objective: 'android_readiness_after_architecture_convergence', + active_phase: 'mobile_preintegration', + completed_milestones: [ + 'directory_layers', + 'shared_package_extraction', + 'module_analysis_coverage', + 'app_navigation_boundary', + 'host_bootstrap_boundary', + ], + work_queue: [ + { + id: 'module_platform_contract', + priority: 1, + status: 'pending', + changes: ['ModuleEntry.platform_support', 'ModuleHomePage.availability_state'], + acceptance: ['catalog_platform_metadata_complete', 'unsupported_module_state_visible'], + }, + { + id: 'platform_plugin_audit', + priority: 2, + status: 'pending', + targets: ['desktop_multi_window', 'file_picker_bridge', 'usb_serial', 'device_info_plus'], + acceptance: ['android_support_matrix', 'unsupported_fallbacks'], + }, + { + id: 'usb_platform_boundary', + priority: 3, + status: 'pending', + targets: ['lib/modules/platform/usb_detector'], + acceptance: ['no_windows_hardcode', 'android_system_info', 'error_branch_test'], + }, + { + id: 'mobile_layout_baseline', + priority: 4, + status: 'pending', + viewport_width_dp: 360, + targets: ['module_home', 'category_home', 'ready_modules', 'recommended_modules'], + acceptance: ['no_overflow', 'safe_area', 'keyboard_avoidance', 'touch_targets'], + }, + { + id: 'android_host', + priority: 5, + status: 'blocked_by_dependencies', + depends_on: ['module_platform_contract', 'platform_plugin_audit', 'mobile_layout_baseline'], + acceptance: ['android_directory', 'manifest_capabilities', 'debug_apk', 'emulator_smoke'], + }, + ], + quality_gate: [ + 'node tool/validate_agent_docs.js', + 'dart format .', + 'flutter analyze:no_error', + 'flutterguard:no_high', + 'logic_change:targeted_test', + 'teaching_ui_change:visual_evidence', + ], + deferred_queue: [ + 'popup_widgets_decomposition', + 'widget_test_coverage', + 'flutterguard_med_reduction', + 'recommended_module_visual_evidence', + ], + }); +} + +function writeModuleIndex() { + writeJson('lib/AI_MODULE_INDEX.md', { + schema: 'flutter_study.agent_docs.module_index.v1', + registry: 'lib/app/router/app_route_table.dart', + count: modules.length, + modules: modules.map(([category, module, route, status, depends]) => ({ + id: module, + category, + path: `lib/modules/${category}/${module}`, + route, + status, + depends, + analysis: `lib/modules/${category}/${module}/AI_ANALYSIS.md`, + })), + }); +} + function writeRootIndexes() { writeIndex({ rel: 'AI_ANALYSIS.md', id: 'flutter_study.root', kind: 'workspace_index', - entrypoints: ['lib/main.dart', 'lib/app/app.dart', 'lib/app/router/app_route_table.dart'], + entrypoints: ['lib/main.dart', 'lib/app/app_bootstrap.dart', 'lib/app/app.dart', 'lib/app/router/app_route_table.dart'], owns: ['app_shell', 'module_registry', 'shared_capabilities', 'learning_modules', 'host_integrations'], depends: ['../gcode_core', '../flutter_study_learning', '../file_picker_bridge', '../flutter_ioc_core', '../flutterguard/packages/flutterguard_cli'], children: ['lib/AI_ANALYSIS.md', 'lib/app/AI_ANALYSIS.md', 'lib/module_registry/AI_ANALYSIS.md', 'lib/shared/AI_ANALYSIS.md', 'lib/modules/AI_ANALYSIS.md'], - validation: ['dart format .', 'flutter analyze', 'dart run flutterguard_cli:flutterguard scan --path . --fail-on high'], + validation: ['bash tool/generate_harness_ai_analysis.sh', 'dart format .', 'flutter analyze', 'dart run flutterguard_cli:flutterguard scan --path . --fail-on high'], }); writeIndex({ rel: 'lib/AI_ANALYSIS.md', id: 'main_app.lib', kind: 'source_index', - entrypoints: ['main.dart', 'app/app.dart', 'app/router/app_route_table.dart'], + entrypoints: ['main.dart', 'app/app_bootstrap.dart', 'app/app.dart', 'app/router/app_route_table.dart'], owns: ['app', 'module_registry', 'shared', 'modules'], depends: ['flutter_sdk', 'go_router', 'flutter_riverpod'], children: ['app/AI_ANALYSIS.md', 'module_registry/AI_ANALYSIS.md', 'shared/AI_ANALYSIS.md', 'modules/AI_ANALYSIS.md'], @@ -154,9 +320,9 @@ function writeLayerIndexes() { rel: 'lib/app/AI_ANALYSIS.md', id: 'main_app.app', kind: 'app_index', - entrypoints: ['app.dart', 'router/app_router.dart', 'router/app_route_table.dart'], - owns: ['material_app_router', 'router'], - depends: ['go_router', 'module_registry', 'modules'], + entrypoints: ['app.dart', 'app_bootstrap.dart', 'module_home_page.dart', 'category_navigation.dart', 'category_window_app.dart', 'router/app_router.dart', 'router/app_route_table.dart'], + owns: ['host_bootstrap', 'material_app_router', 'router', 'module_home', 'adaptive_category_navigation', 'desktop_category_window_shell'], + depends: ['go_router', 'module_registry', 'shared/multi_window', 'modules'], children: ['router/AI_ANALYSIS.md'], }); writeIndex({ @@ -164,23 +330,23 @@ function writeLayerIndexes() { id: 'main_app.app.router', kind: 'router_index', entrypoints: ['app_router.dart', 'app_route_table.dart'], - owns: ['go_router_root', 'module_route_aggregation', 'module_home_index'], - depends: ['module_registry', 'modules'], + owns: ['go_router_root', 'module_route_aggregation', 'module_catalog_composition'], + depends: ['app/module_home_page', 'module_registry', 'modules'], }); writeIndex({ rel: 'lib/module_registry/AI_ANALYSIS.md', id: 'main_app.module_registry', kind: 'registry_index', - entrypoints: ['module_entry.dart', 'module_category.dart'], - owns: ['module_entry_model', 'module_category_enum', 'difficulty_enum', 'module_status_enum'], - depends: ['flutter_material'], + entrypoints: ['module_entry.dart', 'module_category.dart', 'module_catalog_utils.dart'], + owns: ['module_entry_model', 'module_category_enum', 'difficulty_enum', 'module_status_enum', 'module_catalog_filtering', 'category_route_rebasing'], + depends: ['flutter_material', 'go_router'], }); writeIndex({ rel: 'lib/shared/AI_ANALYSIS.md', id: 'main_app.shared', kind: 'shared_index', entrypoints: ['multi_window', 'platform'], - owns: ['business_free_capabilities', 'desktop_windowing', 'platform_boundaries'], + owns: ['business_free_capabilities', 'desktop_window_lifecycle', 'platform_boundaries'], depends: ['desktop_multi_window', '../file_picker_bridge'], children: ['multi_window/AI_ANALYSIS.md', 'platform/AI_ANALYSIS.md'], }); @@ -188,9 +354,9 @@ function writeLayerIndexes() { rel: 'lib/shared/multi_window/AI_ANALYSIS.md', id: 'main_app.shared.multi_window', kind: 'shared_capability_index', - entrypoints: ['multi_window_manager.dart', 'category_window_app.dart', 'multi_window_route_filter.dart'], - owns: ['desktop_window_lifecycle', 'category_window_router', 'module_route_filter'], - depends: ['desktop_multi_window', 'go_router', 'module_registry'], + entrypoints: ['multi_window_manager.dart'], + owns: ['desktop_window_lifecycle', 'desktop_window_arguments'], + depends: ['desktop_multi_window', 'module_registry'], }); writeIndex({ rel: 'lib/shared/platform/AI_ANALYSIS.md', @@ -261,6 +427,9 @@ function writeModuleContracts() { } writeSchema(); +writeProjectContext(); +writeRefactorPlan(); +writeModuleIndex(); writeRootIndexes(); writeLayerIndexes(); writeModuleIndexes(); diff --git a/tool/generate_harness_ai_analysis.sh b/tool/generate_harness_ai_analysis.sh index f4950f9..82c57b7 100755 --- a/tool/generate_harness_ai_analysis.sh +++ b/tool/generate_harness_ai_analysis.sh @@ -3,3 +3,4 @@ set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" node "$ROOT/tool/generate_agent_indexes.js" +node "$ROOT/tool/validate_agent_docs.js" diff --git a/tool/validate_agent_docs.js b/tool/validate_agent_docs.js new file mode 100644 index 0000000..4973dfc --- /dev/null +++ b/tool/validate_agent_docs.js @@ -0,0 +1,115 @@ +const fs = require('fs'); +const path = require('path'); + +const root = path.resolve(__dirname, '..'); +const failures = []; +const documents = new Map(); + +function readJson(rel) { + try { + const source = fs.readFileSync(path.join(root, rel), 'utf8'); + if (/[^\x00-\x7F]/.test(source)) failures.push(`${rel}:non_ascii_content`); + const document = JSON.parse(source); + documents.set(rel, document); + return document; + } catch (error) { + failures.push(`${rel}:invalid_json:${error.message}`); + return null; + } +} + +function collectAnalysisFiles(dir) { + const result = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + if (entry.name.startsWith('.') || entry.name === 'build') continue; + const absolute = path.join(dir, entry.name); + if (entry.isDirectory()) { + result.push(...collectAnalysisFiles(absolute)); + } else if (entry.name === 'AI_ANALYSIS.md') { + result.push(path.relative(root, absolute)); + } + } + return result; +} + +const machineDocuments = [ + 'AI_ANALYSIS_SCHEMA.json', + 'AI_PROJECT_CONTEXT.md', + 'REFACTOR_PLAN.md', + 'lib/AI_MODULE_INDEX.md', + ...collectAnalysisFiles(root), +]; + +const requiredAnalysisKeys = [ + 'schema', + 'mode', + 'node', + 'entrypoints', + 'owns', + 'depends', + 'children', + 'contracts', + 'validation', +]; + +for (const rel of [...new Set(machineDocuments)].sort()) { + const document = readJson(rel); + if (!document) continue; + if (path.basename(rel) !== 'AI_ANALYSIS.md') continue; + + for (const key of requiredAnalysisKeys) { + if (!(key in document)) failures.push(`${rel}:missing_key:${key}`); + } + if (document.contracts?.no_natural_language !== true) { + failures.push(`${rel}:contract:no_natural_language`); + } + if (document.contracts?.doc_consumer !== 'coding_agent') { + failures.push(`${rel}:contract:doc_consumer`); + } + if (document.contracts?.doc_mode !== 'machine_contract') { + failures.push(`${rel}:contract:doc_mode`); + } + + for (const child of document.children ?? []) { + const childPath = path.normalize(path.join(path.dirname(rel), child)); + if (!fs.existsSync(path.join(root, childPath))) { + failures.push(`${rel}:missing_child:${child}`); + } + } +} + +const moduleIndex = documents.get('lib/AI_MODULE_INDEX.md'); +if (moduleIndex) { + if (moduleIndex.count !== moduleIndex.modules?.length) { + failures.push('lib/AI_MODULE_INDEX.md:count_mismatch'); + } + const ids = new Set(); + const routes = new Set(); + for (const module of moduleIndex.modules ?? []) { + if (ids.has(module.id)) failures.push(`lib/AI_MODULE_INDEX.md:duplicate_id:${module.id}`); + if (routes.has(module.route)) failures.push(`lib/AI_MODULE_INDEX.md:duplicate_route:${module.route}`); + ids.add(module.id); + routes.add(module.route); + + const contract = documents.get(module.analysis); + if (!contract) { + failures.push(`lib/AI_MODULE_INDEX.md:missing_analysis:${module.analysis}`); + continue; + } + for (const key of ['route', 'category']) { + if (contract[key] !== module[key]) { + failures.push(`${module.analysis}:index_mismatch:${key}`); + } + } + if (contract.node?.status !== module.status) { + failures.push(`${module.analysis}:index_mismatch:status`); + } + } +} + +if (failures.length > 0) { + process.stderr.write(`${failures.join('\n')}\n`); + process.exit(1); +} + +process.stdout.write(`agent_docs_valid:${new Set(machineDocuments).size}\n`); From c85fb098f9dda141831117486125b056da2ffe61 Mon Sep 17 00:00:00 2001 From: lizy Date: Wed, 22 Jul 2026 20:26:42 +0800 Subject: [PATCH 2/9] fix(deps): restore FlutterGuard path resolution --- pubspec.lock | 4 ++-- pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index effa07a..63c7737 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -232,10 +232,10 @@ packages: flutterguard_cli: dependency: "direct dev" description: - path: "../flutterguard/packages/flutterguard_cli" + path: "../flutterguard" relative: true source: path - version: "0.1.1" + version: "0.7.1" gcode_core: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 39bdf0b..7e095d3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -35,7 +35,7 @@ dev_dependencies: sdk: flutter flutter_lints: ^4.0.0 flutterguard_cli: - path: ../flutterguard/packages/flutterguard_cli + path: ../flutterguard flutter: uses-material-design: true From 6fc73f28493e67c57cc75a4db62a66518e726315 Mon Sep 17 00:00:00 2001 From: lizy Date: Wed, 22 Jul 2026 20:26:49 +0800 Subject: [PATCH 3/9] chore(workspace): add canonical packages container --- packages/.gitkeep | 1 + 1 file changed, 1 insertion(+) create mode 100644 packages/.gitkeep diff --git a/packages/.gitkeep b/packages/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/packages/.gitkeep @@ -0,0 +1 @@ + From fac83a958b8c3fa1ac0800bb2abd2939a8b39ac3 Mon Sep 17 00:00:00 2001 From: lizy Date: Wed, 22 Jul 2026 20:27:00 +0800 Subject: [PATCH 4/9] feat(packages): import gcode core --- packages/gcode_core/.gitignore | 41 + packages/gcode_core/PHASE_SUMMARY.md | 96 +++ packages/gcode_core/README.md | 65 ++ packages/gcode_core/example/.gitignore | 54 ++ packages/gcode_core/example/.metadata | 30 + packages/gcode_core/example/README.md | 38 + .../gcode_core/example/analysis_options.yaml | 28 + packages/gcode_core/example/lib/main.dart | 485 +++++++++++ packages/gcode_core/example/macos/.gitignore | 7 + .../macos/Flutter/Flutter-Debug.xcconfig | 2 + .../macos/Flutter/Flutter-Release.xcconfig | 2 + .../Flutter/GeneratedPluginRegistrant.swift | 12 + packages/gcode_core/example/macos/Podfile | 42 + .../macos/Runner.xcodeproj/project.pbxproj | 801 ++++++++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 99 +++ .../contents.xcworkspacedata | 10 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../example/macos/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 102994 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 5680 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 520 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 14142 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1066 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 36406 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 2218 bytes .../macos/Runner/Base.lproj/MainMenu.xib | 343 ++++++++ .../macos/Runner/Configs/AppInfo.xcconfig | 14 + .../macos/Runner/Configs/Debug.xcconfig | 2 + .../macos/Runner/Configs/Release.xcconfig | 2 + .../macos/Runner/Configs/Warnings.xcconfig | 13 + .../macos/Runner/DebugProfile.entitlements | 12 + .../example/macos/Runner/Info.plist | 32 + .../macos/Runner/MainFlutterWindow.swift | 15 + .../example/macos/Runner/Release.entitlements | 8 + .../macos/RunnerTests/RunnerTests.swift | 12 + packages/gcode_core/example/pubspec.lock | 337 ++++++++ packages/gcode_core/example/pubspec.yaml | 93 ++ .../gcode_core/example/test/widget_test.dart | 19 + packages/gcode_core/gcode_print.gif | Bin 0 -> 1079412 bytes packages/gcode_core/lib/gcode_core.dart | 21 + .../application/gcode_readline_pipeline.dart | 370 ++++++++ .../gcode_core/lib/src/core/gcode_bounds.dart | 24 + .../gcode_core/lib/src/core/gcode_style.dart | 70 ++ .../data/readers/file_gcode_line_reader.dart | 74 ++ .../src/data/readers/gcode_line_reader.dart | 5 + .../readers/string_gcode_line_reader.dart | 39 + .../lib/src/domain/gcode_line_record.dart | 11 + .../lib/src/domain/gcode_load_snapshot.dart | 41 + .../lib/src/domain/gcode_load_stage.dart | 7 + .../lib/src/domain/parsed_gcode_line.dart | 51 ++ .../lib/src/models/gcode_command.dart | 31 + .../lib/src/models/machine_position.dart | 24 + .../lib/src/models/toolpath_segment.dart | 16 + .../lib/src/parser/gcode_parse_result.dart | 28 + .../lib/src/parser/gcode_parser.dart | 205 +++++ .../lib/src/services/toolpath_builder.dart | 107 +++ .../lib/src/widgets/command_timeline.dart | 214 +++++ .../lib/src/widgets/gcode_canvas.dart | 502 +++++++++++ .../lib/src/widgets/playback_controls.dart | 115 +++ packages/gcode_core/pubspec.yaml | 19 + .../gcode_readline_pipeline_test.dart | 80 ++ .../gcode_core/test/gcode_parser_test.dart | 153 ++++ .../test/toolpath_builder_test.dart | 203 +++++ 65 files changed, 5221 insertions(+) create mode 100644 packages/gcode_core/.gitignore create mode 100644 packages/gcode_core/PHASE_SUMMARY.md create mode 100644 packages/gcode_core/README.md create mode 100644 packages/gcode_core/example/.gitignore create mode 100644 packages/gcode_core/example/.metadata create mode 100644 packages/gcode_core/example/README.md create mode 100644 packages/gcode_core/example/analysis_options.yaml create mode 100644 packages/gcode_core/example/lib/main.dart create mode 100644 packages/gcode_core/example/macos/.gitignore create mode 100644 packages/gcode_core/example/macos/Flutter/Flutter-Debug.xcconfig create mode 100644 packages/gcode_core/example/macos/Flutter/Flutter-Release.xcconfig create mode 100644 packages/gcode_core/example/macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 packages/gcode_core/example/macos/Podfile create mode 100644 packages/gcode_core/example/macos/Runner.xcodeproj/project.pbxproj create mode 100644 packages/gcode_core/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/gcode_core/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 packages/gcode_core/example/macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 packages/gcode_core/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 packages/gcode_core/example/macos/Runner/AppDelegate.swift create mode 100644 packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 packages/gcode_core/example/macos/Runner/Base.lproj/MainMenu.xib create mode 100644 packages/gcode_core/example/macos/Runner/Configs/AppInfo.xcconfig create mode 100644 packages/gcode_core/example/macos/Runner/Configs/Debug.xcconfig create mode 100644 packages/gcode_core/example/macos/Runner/Configs/Release.xcconfig create mode 100644 packages/gcode_core/example/macos/Runner/Configs/Warnings.xcconfig create mode 100644 packages/gcode_core/example/macos/Runner/DebugProfile.entitlements create mode 100644 packages/gcode_core/example/macos/Runner/Info.plist create mode 100644 packages/gcode_core/example/macos/Runner/MainFlutterWindow.swift create mode 100644 packages/gcode_core/example/macos/Runner/Release.entitlements create mode 100644 packages/gcode_core/example/macos/RunnerTests/RunnerTests.swift create mode 100644 packages/gcode_core/example/pubspec.lock create mode 100644 packages/gcode_core/example/pubspec.yaml create mode 100644 packages/gcode_core/example/test/widget_test.dart create mode 100644 packages/gcode_core/gcode_print.gif create mode 100644 packages/gcode_core/lib/gcode_core.dart create mode 100644 packages/gcode_core/lib/src/application/gcode_readline_pipeline.dart create mode 100644 packages/gcode_core/lib/src/core/gcode_bounds.dart create mode 100644 packages/gcode_core/lib/src/core/gcode_style.dart create mode 100644 packages/gcode_core/lib/src/data/readers/file_gcode_line_reader.dart create mode 100644 packages/gcode_core/lib/src/data/readers/gcode_line_reader.dart create mode 100644 packages/gcode_core/lib/src/data/readers/string_gcode_line_reader.dart create mode 100644 packages/gcode_core/lib/src/domain/gcode_line_record.dart create mode 100644 packages/gcode_core/lib/src/domain/gcode_load_snapshot.dart create mode 100644 packages/gcode_core/lib/src/domain/gcode_load_stage.dart create mode 100644 packages/gcode_core/lib/src/domain/parsed_gcode_line.dart create mode 100644 packages/gcode_core/lib/src/models/gcode_command.dart create mode 100644 packages/gcode_core/lib/src/models/machine_position.dart create mode 100644 packages/gcode_core/lib/src/models/toolpath_segment.dart create mode 100644 packages/gcode_core/lib/src/parser/gcode_parse_result.dart create mode 100644 packages/gcode_core/lib/src/parser/gcode_parser.dart create mode 100644 packages/gcode_core/lib/src/services/toolpath_builder.dart create mode 100644 packages/gcode_core/lib/src/widgets/command_timeline.dart create mode 100644 packages/gcode_core/lib/src/widgets/gcode_canvas.dart create mode 100644 packages/gcode_core/lib/src/widgets/playback_controls.dart create mode 100644 packages/gcode_core/pubspec.yaml create mode 100644 packages/gcode_core/test/application/gcode_readline_pipeline_test.dart create mode 100644 packages/gcode_core/test/gcode_parser_test.dart create mode 100644 packages/gcode_core/test/toolpath_builder_test.dart diff --git a/packages/gcode_core/.gitignore b/packages/gcode_core/.gitignore new file mode 100644 index 0000000..d4cddb8 --- /dev/null +++ b/packages/gcode_core/.gitignore @@ -0,0 +1,41 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Dart/Pub related +.dart_tool/ +.pub-cache/ +.pub/ +/build/ +/coverage/ +/pubspec.lock + +# Generated code +*.g.dart +*.freezed.dart +*.mocks.dart +*.pb.dart +*.pbjson.dart +*.pbenum.dart +*.grpc.dart diff --git a/packages/gcode_core/PHASE_SUMMARY.md b/packages/gcode_core/PHASE_SUMMARY.md new file mode 100644 index 0000000..65c7773 --- /dev/null +++ b/packages/gcode_core/PHASE_SUMMARY.md @@ -0,0 +1,96 @@ +# Phase Summary — gcode_core + +> 2026-06-14 · 当前版本 0.1.0 · 基于 xgimi_gcode2d 对比分析后的首轮优化完成 + +## 当前架构 + +``` +lib/src/ +├── application/ ── 编排层 +│ └── gcode_readline_pipeline.dart Stream 流式管道 + isolate 后台解析 +├── core/ ── 核心抽象(本次新增) +│ ├── gcode_bounds.dart 包围盒,增量合并,供 painter 复用 +│ └── gcode_style.dart 绘制样式,预创建 Paint,light/dark 工厂 +├── data/readers/ ── 输入/IO层 +│ ├── gcode_line_reader.dart 抽象接口 Stream +│ ├── string_gcode_line_reader.dart 内存字符串读取 +│ └── file_gcode_line_reader.dart 流式文件读取(openRead + LineSplitter) +├── domain/ ── 领域类型 +│ ├── gcode_load_stage.dart idle/reading/parsing/ready/failed 枚举 +│ ├── gcode_line_record.dart 原始行元数据 +│ ├── gcode_load_snapshot.dart 不可变进度快照(含 bounds) +│ └── parsed_gcode_line.dart sealed class: command/error/skipped +├── models/ ── 数据模型 +│ ├── gcode_command.dart G0/G1 + 参数 + 注释 +│ ├── machine_position.dart X/Y/F 位置状态 +│ └── toolpath_segment.dart 起止点 + 类型(rapid/linear) +├── parser/ ── 解析 +│ ├── gcode_parser.dart 词法/语法解析,支持流式 parseRecord +│ └── gcode_parse_result.dart 批量解析结果 + 错误 DTO +├── services/ ── 业务逻辑 +│ └── toolpath_builder.dart 批量/增量 toolpath 构建 + bounds 增量跟踪 +└── widgets/ ── Flutter 控件 + ├── gcode_canvas.dart CustomPaint 可视化(支持 Bounds + Style) + ├── command_timeline.dart 指令/错误时间线列表 + └── playback_controls.dart 播放/暂停/进度/速度控件 +``` + +## 首轮优化完成项 (2026-06-14) + +### 1. GcodeBounds — 边界预计算 +- **问题**:`_ToolpathPainter.paint()` 每帧 O(n) 遍历 segments 计算 bounds +- **方案**:`IncrementalToolpathBuilder.accept()` 增量维护 `GcodeBounds`,经由 `GcodeLoadSnapshot.bounds` 透传至 painter +- **效果**:painter 直接接收预计算 bounds,删除内部 `_calculateBounds()` 遍历 + +### 2. GcodeStyle — 样式抽离 +- **问题**:painter 内每帧 `new Paint()` + 颜色硬编码 +- **方案**:`GcodeStyle` 类预创建所有 Paint(rapidMoveBg/rapidMove/linearMoveBg/linearMove/toolHead/toolHeadGlow/origin/originDot/grid),`GcodeStyle.light()` 工厂 +- **效果**:零帧内开销 + 外部可自定义配色 + +### 3. Isolate 后台流式解析 +- **问题**:大文件解析阻塞 UI 线程 +- **方案**:`loadFileInBackground(path)` / `loadStringInBackground(source)` 使用 `Isolate.spawn` + `SendPort`/`ReceivePort` 流式返回 `Stream` +- **效果**:与 `load()` 完全一致的 `await for` 消费方式,仅调用入口不同 + +### 不采纳的优化(已评估排除) + +| 项 | 排除原因 | +|---|---| +| SoA 数据模型 (Float32List) | gcode_core 面向中小规模 G-code,Dart 对象开销可忽略;SoA 增加维护负担 | +| Viewport/Transform 两层分离 | 当前无 pan/zoom 交互需求,引入两层会增加不必要的复杂度 | +| Picture 缓存 / Checkpoint 缓存 | 当前 segment 量级下收益有限,后续如需要可作为第二轮专项 | +| G25/G102/G103 指令支持 | 业务领域不同,gcode_core 聚焦 G0/G1 | +| SceneClassifier(矢量/光栅分类) | 仅处理矢量路径,无分类需求 | +| GCodeMemoryTrace 调试日志 | 面向生产环境,教学级项目暂不需要 | + +## 后续规划 + +### 优先级 A — 近期可做 + +| 任务 | 预估工作量 | 说明 | +|---|---|---| +| **Picture 缓存** | 中 | 已完成路径录制成 `ui.Picture`,播放时只画 tail,避免全量重绘 | +| **GcodeController** | 中 | ChangeNotifier 控制器,封装 play/pause/seek/speed 逻辑,替代示例 app 中手写 Timer | +| **错误统计增强** | 小 | `scannedLineCount` / `skippedLineCount` 透传至 snapshot | + +### 优先级 B — 按需启动 + +| 任务 | 预估工作量 | 说明 | +|---|---|---| +| **G2 圆弧支持** | 大 | 新增 `GcodeSegmentType.arc`,painter 实现弧线绘制 | +| **多层绘制** | 大 | 背景网格/辅助线/路径分层,独立 togglable | +| **撤销/重做** | 中 | 编辑场景下的状态回退能力 | + +### 优先级 C — 远期探索 + +| 任务 | 说明 | +|---|---| +| **SVG/Bitmap → G-code 生成** | 当前包只做解析+预览,生成是反向需求 | +| **3D 预览** | 需要整体架构升级 | + +## 测试覆盖 + +``` +flutter test → 22 tests passed (parser × 11, toolpath × 3, pipeline × 3, widget × 1) +flutter analyze → 0 issues +``` diff --git a/packages/gcode_core/README.md b/packages/gcode_core/README.md new file mode 100644 index 0000000..65480fe --- /dev/null +++ b/packages/gcode_core/README.md @@ -0,0 +1,65 @@ +# gcode_core + +![example](https://github.com/lizy-coding/gcode_core/blob/master/gcode_print.gif) + +G-code parsing and visualization package extracted from `flutter_study`. + +## Scope + +- Read G-code from strings or files line by line. +- Parse G0/G1 commands with X/Y/F parameters. +- Collect parse errors with line metadata. +- Build incremental or batch toolpath segments. +- Render toolpaths with Flutter `CustomPaint`. +- Render command timelines and playback controls for Flutter frontends. + +This package does not open system file pickers or own app-level playback state. + +## Test + +```bash +flutter test +``` + +## Example + +Run the Flutter example app: + +```bash +cd example +flutter run +``` + +The example demonstrates local file selection, streaming parse snapshots, +`GcodeCanvas` drawing, `CommandTimeline`, and `PlaybackControls`. + +Run the console example: + +```bash +dart run example/gcode_core_example.dart +``` + +Minimal usage: + +```dart +import 'package:gcode_core/gcode_core.dart'; + +Future main() async { + const source = ''' +G0 X0 Y0 +G1 X10 Y0 F1200 +G1 X10 Y10 +'''; + + final pipeline = GcodeReadlinePipeline(); + + await for (final snapshot + in pipeline.load(const StringGcodeLineReader(source))) { + if (snapshot.stage == GcodeLoadStage.ready) { + print(snapshot.commands.length); + print(snapshot.segments.length); + print(snapshot.errors.length); + } + } +} +``` diff --git a/packages/gcode_core/example/.gitignore b/packages/gcode_core/example/.gitignore new file mode 100644 index 0000000..6a40388 --- /dev/null +++ b/packages/gcode_core/example/.gitignore @@ -0,0 +1,54 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.build/ +.buildlog/ +.history +.svn/ +.swiftpm/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ +/coverage/ + +# Generated code +*.g.dart +*.freezed.dart +*.mocks.dart +*.pb.dart +*.pbjson.dart +*.pbenum.dart +*.grpc.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/packages/gcode_core/example/.metadata b/packages/gcode_core/example/.metadata new file mode 100644 index 0000000..c24b9a1 --- /dev/null +++ b/packages/gcode_core/example/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "00b0c91f06209d9e4a41f71b7a512d6eb3b9c694" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 00b0c91f06209d9e4a41f71b7a512d6eb3b9c694 + base_revision: 00b0c91f06209d9e4a41f71b7a512d6eb3b9c694 + - platform: macos + create_revision: 00b0c91f06209d9e4a41f71b7a512d6eb3b9c694 + base_revision: 00b0c91f06209d9e4a41f71b7a512d6eb3b9c694 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/packages/gcode_core/example/README.md b/packages/gcode_core/example/README.md new file mode 100644 index 0000000..f7139cd --- /dev/null +++ b/packages/gcode_core/example/README.md @@ -0,0 +1,38 @@ +# gcode_core example + +Flutter example for the `gcode_core` package. + +It demonstrates the full local workflow: + +- Pick a local `.gcode`, `.nc`, `.tap`, or `.txt` file. +- Read the file line by line with `FileGcodeLineReader`. +- Parse supported `G0/G1` commands with `GcodeReadlinePipeline`. +- Dynamically refresh parsed snapshots while reading. +- Draw toolpath segments with the package-provided `GcodeCanvas`. +- Show `G0` jump moves as red dashed lines and `G1` cutting moves as solid paths. +- Show commands and parse errors with `CommandTimeline`. +- Preview the generated path with `PlaybackControls`. + +The main integration points are: + +```dart +final pipeline = GcodeReadlinePipeline( + options: const GcodeReadlineOptions(snapshotBatchSize: 1), +); + +await for (final snapshot in pipeline.load(FileGcodeLineReader(file.path))) { + setState(() => _snapshot = snapshot); +} + +GcodeCanvas( + segments: snapshot.segments, + progress: playbackProgress, + errorCount: snapshot.errors.length, +); +``` + +Run it from this directory: + +```bash +flutter run +``` diff --git a/packages/gcode_core/example/analysis_options.yaml b/packages/gcode_core/example/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/packages/gcode_core/example/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/packages/gcode_core/example/lib/main.dart b/packages/gcode_core/example/lib/main.dart new file mode 100644 index 0000000..1e12219 --- /dev/null +++ b/packages/gcode_core/example/lib/main.dart @@ -0,0 +1,485 @@ +import 'dart:async'; + +import 'package:file_selector/file_selector.dart'; +import 'package:flutter/material.dart'; +import 'package:gcode_core/gcode_core.dart'; + +void main() { + runApp(const GcodeCoreExampleApp()); +} + +class GcodeCoreExampleApp extends StatelessWidget { + const GcodeCoreExampleApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'G-code Core Example', + debugShowCheckedModeBanner: false, + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xff2563eb)), + useMaterial3: true, + ), + home: const GcodeExamplePage(), + ); + } +} + +class GcodeExamplePage extends StatefulWidget { + const GcodeExamplePage({super.key}); + + @override + State createState() => _GcodeExamplePageState(); +} + +class _GcodeExamplePageState extends State { + static const _sampleSource = ''' +G0 X0 Y0 +G1 X30 Y0 F1200 +G1 X30 Y18 +G1 X12 Y18 +G0 X6 Y8 +G1 X22 Y8 +G2 X40 Y40 +'''; + + final _pipeline = GcodeReadlinePipeline( + options: const GcodeReadlineOptions(snapshotBatchSize: 1), + ); + + GcodeLoadSnapshot? _snapshot; + String _sourceName = '未选择文件'; + String _status = '请选择本地 G-code 文件,或加载内置示例。'; + bool _loading = false; + bool _isPlaying = false; + double _playbackProgress = 1; + double _speedMultiplier = 1; + Timer? _playbackTimer; + + @override + void dispose() { + _playbackTimer?.cancel(); + super.dispose(); + } + + Future _pickAndParseFile() async { + const typeGroup = XTypeGroup( + label: 'G-code', + extensions: ['gcode', 'nc', 'tap', 'txt'], + ); + + final file = await openFile(acceptedTypeGroups: [typeGroup]); + if (file == null) return; + + await _parseReader(FileGcodeLineReader(file.path), sourceName: file.name); + } + + Future _loadSample() { + return _parseReader( + const StringGcodeLineReader(_sampleSource), + sourceName: '内置示例', + ); + } + + Future _parseReader( + GcodeLineReader reader, { + required String sourceName, + }) async { + _playbackTimer?.cancel(); + setState(() { + _loading = true; + _isPlaying = false; + _playbackProgress = 1; + _sourceName = sourceName; + _snapshot = null; + _status = '正在读取 $sourceName'; + }); + + await for (final snapshot in _pipeline.load(reader)) { + if (!mounted) return; + setState(() { + _snapshot = snapshot; + _status = snapshot.message; + _playbackProgress = 1; + }); + if (snapshot.stage == GcodeLoadStage.parsing) { + await Future.delayed(const Duration(milliseconds: 16)); + } + } + + if (!mounted) return; + setState(() => _loading = false); + } + + void _play() { + if ((_snapshot?.segments.isEmpty ?? true) || _loading) return; + + _playbackTimer?.cancel(); + setState(() => _isPlaying = true); + _playbackTimer = Timer.periodic(const Duration(milliseconds: 16), (_) { + if (!mounted) return; + final next = _playbackProgress + 0.004 * _speedMultiplier; + setState(() { + _playbackProgress = next.clamp(0, 1); + _isPlaying = _playbackProgress < 1; + }); + if (_playbackProgress >= 1) { + _playbackTimer?.cancel(); + } + }); + } + + void _pause() { + _playbackTimer?.cancel(); + setState(() => _isPlaying = false); + } + + void _resetPlayback() { + _playbackTimer?.cancel(); + setState(() { + _isPlaying = false; + _playbackProgress = 0; + }); + } + + void _seekPlayback(double value) { + setState(() => _playbackProgress = value); + } + + void _setSpeed(double value) { + setState(() => _speedMultiplier = value); + } + + int _currentCommandIndex(GcodeLoadSnapshot? snapshot) { + final commandCount = snapshot?.commands.length ?? 0; + if (commandCount == 0) return -1; + return (_playbackProgress * commandCount).ceil().clamp(1, commandCount) - 1; + } + + @override + Widget build(BuildContext context) { + final snapshot = _snapshot; + + return Scaffold( + appBar: AppBar( + title: const Text('G-code Core 绘制示例'), + actions: [ + TextButton.icon( + onPressed: _loading ? null : _loadSample, + icon: const Icon(Icons.data_object), + label: const Text('示例数据'), + ), + const SizedBox(width: 8), + FilledButton.icon( + onPressed: _loading ? null : _pickAndParseFile, + icon: const Icon(Icons.folder_open), + label: const Text('选择 G-code'), + ), + const SizedBox(width: 16), + ], + ), + body: Padding( + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + _StatusBar( + sourceName: _sourceName, + status: _status, + loading: _loading, + ), + const SizedBox(height: 16), + Expanded( + child: Row( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( + flex: 3, + child: _CanvasPanel( + snapshot: snapshot, + parsing: _loading, + progress: _playbackProgress, + isPlaying: _isPlaying, + speedMultiplier: _speedMultiplier, + onPlay: _play, + onPause: _pause, + onReset: _resetPlayback, + onSeek: _seekPlayback, + onSpeedChange: _setSpeed, + ), + ), + const SizedBox(width: 16), + SizedBox( + width: 360, + child: _ResultPanel( + snapshot: snapshot, + currentIndex: _currentCommandIndex(snapshot), + onCommandTap: (index) { + final total = snapshot?.commands.length ?? 0; + if (total == 0) return; + _pause(); + setState(() => _playbackProgress = (index + 1) / total); + }, + ), + ), + ], + ), + ), + ], + ), + ), + ); + } +} + +class _StatusBar extends StatelessWidget { + const _StatusBar({ + required this.sourceName, + required this.status, + required this.loading, + }); + + final String sourceName; + final String status; + final bool loading; + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return DecoratedBox( + decoration: BoxDecoration( + border: Border.all(color: theme.colorScheme.outlineVariant), + borderRadius: BorderRadius.circular(8), + ), + child: Padding( + padding: const EdgeInsets.all(12), + child: Row( + children: [ + if (loading) + const SizedBox.square( + dimension: 18, + child: CircularProgressIndicator(strokeWidth: 2), + ) + else + const Icon(Icons.route), + const SizedBox(width: 12), + Expanded( + child: Text( + '$sourceName - $status', + maxLines: 2, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ), + ); + } +} + +class _CanvasPanel extends StatelessWidget { + const _CanvasPanel({ + required this.snapshot, + required this.parsing, + required this.progress, + required this.isPlaying, + required this.speedMultiplier, + required this.onPlay, + required this.onPause, + required this.onReset, + required this.onSeek, + required this.onSpeedChange, + }); + + final GcodeLoadSnapshot? snapshot; + final bool parsing; + final double progress; + final bool isPlaying; + final double speedMultiplier; + final VoidCallback onPlay; + final VoidCallback onPause; + final VoidCallback onReset; + final ValueChanged onSeek; + final ValueChanged onSpeedChange; + + @override + Widget build(BuildContext context) { + final segments = snapshot?.segments ?? const []; + final errors = snapshot?.errors.length ?? 0; + + return Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Expanded( + child: Stack( + children: [ + Positioned.fill( + child: GcodeCanvas( + segments: segments, + progress: parsing ? 1 : progress, + errorCount: errors, + bounds: snapshot?.bounds, + ), + ), + Positioned( + left: 12, + top: 12, + child: _CanvasLegend( + parsing: parsing, + segments: segments.length, + mainSegments: segments + .where( + (segment) => segment.type == GcodeSegmentType.linear, + ) + .length, + ), + ), + ], + ), + ), + const SizedBox(height: 12), + PlaybackControls( + isPlaying: isPlaying, + progress: parsing ? 1 : progress, + speedMultiplier: speedMultiplier, + onPlay: onPlay, + onPause: onPause, + onReset: onReset, + onSeek: onSeek, + onSpeedChange: onSpeedChange, + ), + ], + ); + } +} + +class _CanvasLegend extends StatelessWidget { + const _CanvasLegend({ + required this.parsing, + required this.segments, + required this.mainSegments, + }); + + final bool parsing; + final int segments; + final int mainSegments; + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return DecoratedBox( + decoration: BoxDecoration( + color: theme.colorScheme.surface.withValues(alpha: 0.9), + border: Border.all(color: theme.colorScheme.outlineVariant), + borderRadius: BorderRadius.circular(8), + ), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 8), + child: DefaultTextStyle( + style: theme.textTheme.labelMedium!, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(parsing ? '动态解析绘制中' : 'GcodeCanvas 绘制'), + const SizedBox(height: 4), + Text('主线段 G1: $mainSegments'), + Text('移动段 G0/G1: $segments'), + ], + ), + ), + ), + ); + } +} + +class _ResultPanel extends StatelessWidget { + const _ResultPanel({ + required this.snapshot, + required this.currentIndex, + required this.onCommandTap, + }); + + final GcodeLoadSnapshot? snapshot; + final int currentIndex; + final ValueChanged onCommandTap; + + @override + Widget build(BuildContext context) { + final current = snapshot; + + if (current == null) { + return const Center(child: Text('解析结果会显示在这里')); + } + + return ListView( + children: [ + Wrap( + spacing: 8, + runSpacing: 8, + children: [ + _Metric(label: '行数', value: current.linesRead.toString()), + _Metric(label: '指令', value: current.commands.length.toString()), + _Metric(label: '轨迹', value: current.segments.length.toString()), + _Metric(label: '错误', value: current.errors.length.toString()), + ], + ), + const SizedBox(height: 16), + CommandTimeline( + commands: current.commands, + errors: current.errors, + currentIndex: currentIndex, + onTap: onCommandTap, + maxHeight: 360, + ), + const SizedBox(height: 16), + Text('解析错误', style: Theme.of(context).textTheme.titleMedium), + const SizedBox(height: 8), + if (current.errors.isEmpty) + const Text('无') + else + for (final error in current.errors) + ListTile( + dense: true, + leading: const Icon(Icons.warning_amber), + title: Text('第 ${error.lineNumber} 行'), + subtitle: Text('${error.message}\n${error.rawLine}'), + ), + ], + ); + } +} + +class _Metric extends StatelessWidget { + const _Metric({required this.label, required this.value}); + + final String label; + final String value; + + @override + Widget build(BuildContext context) { + final theme = Theme.of(context); + + return SizedBox( + width: 78, + child: DecoratedBox( + decoration: BoxDecoration( + color: theme.colorScheme.surfaceContainerHighest, + borderRadius: BorderRadius.circular(8), + ), + child: Padding( + padding: const EdgeInsets.all(10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(label, style: theme.textTheme.labelMedium), + const SizedBox(height: 4), + Text(value, style: theme.textTheme.titleLarge), + ], + ), + ), + ), + ); + } +} diff --git a/packages/gcode_core/example/macos/.gitignore b/packages/gcode_core/example/macos/.gitignore new file mode 100644 index 0000000..746adbb --- /dev/null +++ b/packages/gcode_core/example/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/packages/gcode_core/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/gcode_core/example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 0000000..4b81f9b --- /dev/null +++ b/packages/gcode_core/example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/gcode_core/example/macos/Flutter/Flutter-Release.xcconfig b/packages/gcode_core/example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 0000000..5caa9d1 --- /dev/null +++ b/packages/gcode_core/example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/packages/gcode_core/example/macos/Flutter/GeneratedPluginRegistrant.swift b/packages/gcode_core/example/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 0000000..14b5f7c --- /dev/null +++ b/packages/gcode_core/example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,12 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + +import file_selector_macos + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) +} diff --git a/packages/gcode_core/example/macos/Podfile b/packages/gcode_core/example/macos/Podfile new file mode 100644 index 0000000..ff5ddb3 --- /dev/null +++ b/packages/gcode_core/example/macos/Podfile @@ -0,0 +1,42 @@ +platform :osx, '10.15' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\"" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_macos_podfile_setup + +target 'Runner' do + use_frameworks! + + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_macos_build_settings(target) + end +end diff --git a/packages/gcode_core/example/macos/Runner.xcodeproj/project.pbxproj b/packages/gcode_core/example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 0000000..c59ba60 --- /dev/null +++ b/packages/gcode_core/example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,801 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 110DD9541D412F57D0FC25B1 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BFF0FA50648256D262FB427 /* Pods_Runner.framework */; }; + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + EE563B3C323D38A90A7815D1 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15B5728AAD4B596071FFF779 /* Pods_RunnerTests.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 02484B4ED94AC349495FF031 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 0FB2C87507FF7C43AE0AB5FE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 15B5728AAD4B596071FFF779 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 57F4617597A1FF85FCC8B1C5 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 8BFF0FA50648256D262FB427 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + C969A4D026E4EABF8F0A69F8 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + CF5D4B7C8248EF71D487E239 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D74F4B79EB67493B99E1AC43 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + EE563B3C323D38A90A7815D1 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 110DD9541D412F57D0FC25B1 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + 807FC030647A3AE78EB79582 /* Pods */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* example.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + 807FC030647A3AE78EB79582 /* Pods */ = { + isa = PBXGroup; + children = ( + 0FB2C87507FF7C43AE0AB5FE /* Pods-Runner.debug.xcconfig */, + CF5D4B7C8248EF71D487E239 /* Pods-Runner.release.xcconfig */, + 57F4617597A1FF85FCC8B1C5 /* Pods-Runner.profile.xcconfig */, + C969A4D026E4EABF8F0A69F8 /* Pods-RunnerTests.debug.xcconfig */, + D74F4B79EB67493B99E1AC43 /* Pods-RunnerTests.release.xcconfig */, + 02484B4ED94AC349495FF031 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 8BFF0FA50648256D262FB427 /* Pods_Runner.framework */, + 15B5728AAD4B596071FFF779 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + A007395C57EBD64C92800C10 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 940F9EE8C72997939F9C78C1 /* [CP] Check Pods Manifest.lock */, + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + 1BAF74549412E04249338CF8 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1510; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 1BAF74549412E04249338CF8 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; + 940F9EE8C72997939F9C78C1 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + A007395C57EBD64C92800C10 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C969A4D026E4EABF8F0A69F8 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D74F4B79EB67493B99E1AC43 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 02484B4ED94AC349495FF031 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.example.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/example"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.15; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/packages/gcode_core/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/gcode_core/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/gcode_core/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/gcode_core/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/gcode_core/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 0000000..ac78810 --- /dev/null +++ b/packages/gcode_core/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/gcode_core/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/packages/gcode_core/example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..21a3cc1 --- /dev/null +++ b/packages/gcode_core/example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/packages/gcode_core/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/gcode_core/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/packages/gcode_core/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/packages/gcode_core/example/macos/Runner/AppDelegate.swift b/packages/gcode_core/example/macos/Runner/AppDelegate.swift new file mode 100644 index 0000000..b3c1761 --- /dev/null +++ b/packages/gcode_core/example/macos/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import Cocoa +import FlutterMacOS + +@main +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } +} diff --git a/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..a2ec33f --- /dev/null +++ b/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 0000000000000000000000000000000000000000..82b6f9d9a33e198f5747104729e1fcef999772a5 GIT binary patch literal 102994 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ⅅ8MglG&ER{i5lN315cO?EdHNLrg? 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 z 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 Pe7HEdAEg|=c=LY&YVNkY literal 0 HcmV?d00001 diff --git a/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 0000000000000000000000000000000000000000..13b35eba55c6dabc3aac36f33d859266c18fa0d0 GIT binary patch literal 5680 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 literal 0 HcmV?d00001 diff --git a/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3f5fa40fb3d1e0710331a48de5d256da3f275d GIT binary patch literal 520 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 literal 0 HcmV?d00001 diff --git a/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/packages/gcode_core/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1632cfddf3d9dade342351e627a0a75609fb46 GIT binary patch literal 2218 zcmV;b2vzrqP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91K%fHv1ONa40RR91KmY&$07g+lumAuE6iGxuRCodHTWf3-RTMruyW6Fu zQYeUM04eX6D5c0FCjKKPrco1(K`<0SL=crI{PC3-^hZU0kQie$gh-5!7z6SH6Q0J% zqot*`H1q{R5fHFYS}dje@;kG=v$L0(yY0?wY2%*c?A&{2?!D*x?m71{of2gv!$5|C z3>qG_BW}7K_yUcT3A5C6QD<+{aq?x;MAUyAiJn#Jv8_zZtQ{P zTRzbL3U9!qVuZzS$xKU10KiW~Bgdcv1-!uAhQxf3a7q+dU6lj?yoO4Lq4TUN4}h{N z*fIM=SS8|C2$(T>w$`t@3Tka!(r!7W`x z-isCVgQD^mG-MJ;XtJuK3V{Vy72GQ83KRWsHU?e*wrhKk=ApIYeDqLi;JI1e zuvv}5^Dc=k7F7?nm3nIw$NVmU-+R>> zyqOR$-2SDpJ}Pt;^RkJytDVXNTsu|mI1`~G7yw`EJR?VkGfNdqK9^^8P`JdtTV&tX4CNcV4 z&N06nZa??Fw1AgQOUSE2AmPE@WO(Fvo`%m`cDgiv(fAeRA%3AGXUbsGw{7Q`cY;1BI#ac3iN$$Hw z0LT0;xc%=q)me?Y*$xI@GRAw?+}>=9D+KTk??-HJ4=A>`V&vKFS75@MKdSF1JTq{S zc1!^8?YA|t+uKigaq!sT;Z!&0F2=k7F0PIU;F$leJLaw2UI6FL^w}OG&!;+b%ya1c z1n+6-inU<0VM-Y_s5iTElq)ThyF?StVcebpGI znw#+zLx2@ah{$_2jn+@}(zJZ{+}_N9BM;z)0yr|gF-4=Iyu@hI*Lk=-A8f#bAzc9f z`Kd6K--x@t04swJVC3JK1cHY-Hq+=|PN-VO;?^_C#;coU6TDP7Bt`;{JTG;!+jj(` zw5cLQ-(Cz-Tlb`A^w7|R56Ce;Wmr0)$KWOUZ6ai0PhzPeHwdl0H(etP zUV`va_i0s-4#DkNM8lUlqI7>YQLf)(lz9Q3Uw`)nc(z3{m5ZE77Ul$V%m)E}3&8L0 z-XaU|eB~Is08eORPk;=<>!1w)Kf}FOVS2l&9~A+@R#koFJ$Czd%Y(ENTV&A~U(IPI z;UY+gf+&6ioZ=roly<0Yst8ck>(M=S?B-ys3mLdM&)ex!hbt+ol|T6CTS+Sc0jv(& z7ijdvFwBq;0a{%3GGwkDKTeG`b+lyj0jjS1OMkYnepCdoosNY`*zmBIo*981BU%%U z@~$z0V`OVtIbEx5pa|Tct|Lg#ZQf5OYMUMRD>Wdxm5SAqV2}3!ceE-M2 z@O~lQ0OiKQp}o9I;?uxCgYVV?FH|?Riri*U$Zi_`V2eiA>l zdSm6;SEm6#T+SpcE8Ro_f2AwxzI z44hfe^WE3!h@W3RDyA_H440cpmYkv*)6m1XazTqw%=E5Xv7^@^^T7Q2wxr+Z2kVYr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/gcode_core/example/macos/Runner/Configs/AppInfo.xcconfig b/packages/gcode_core/example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 0000000..f67a84b --- /dev/null +++ b/packages/gcode_core/example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.example + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2026 com.example. All rights reserved. diff --git a/packages/gcode_core/example/macos/Runner/Configs/Debug.xcconfig b/packages/gcode_core/example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 0000000..36b0fd9 --- /dev/null +++ b/packages/gcode_core/example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/gcode_core/example/macos/Runner/Configs/Release.xcconfig b/packages/gcode_core/example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 0000000..dff4f49 --- /dev/null +++ b/packages/gcode_core/example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/packages/gcode_core/example/macos/Runner/Configs/Warnings.xcconfig b/packages/gcode_core/example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 0000000..42bcbf4 --- /dev/null +++ b/packages/gcode_core/example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/packages/gcode_core/example/macos/Runner/DebugProfile.entitlements b/packages/gcode_core/example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 0000000..dddb8a3 --- /dev/null +++ b/packages/gcode_core/example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/packages/gcode_core/example/macos/Runner/Info.plist b/packages/gcode_core/example/macos/Runner/Info.plist new file mode 100644 index 0000000..4789daa --- /dev/null +++ b/packages/gcode_core/example/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/packages/gcode_core/example/macos/Runner/MainFlutterWindow.swift b/packages/gcode_core/example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 0000000..3cc05eb --- /dev/null +++ b/packages/gcode_core/example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/packages/gcode_core/example/macos/Runner/Release.entitlements b/packages/gcode_core/example/macos/Runner/Release.entitlements new file mode 100644 index 0000000..852fa1a --- /dev/null +++ b/packages/gcode_core/example/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/packages/gcode_core/example/macos/RunnerTests/RunnerTests.swift b/packages/gcode_core/example/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 0000000..61f3bd1 --- /dev/null +++ b/packages/gcode_core/example/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Cocoa +import FlutterMacOS +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/packages/gcode_core/example/pubspec.lock b/packages/gcode_core/example/pubspec.lock new file mode 100644 index 0000000..72801cb --- /dev/null +++ b/packages/gcode_core/example/pubspec.lock @@ -0,0 +1,337 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.13.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.19.1" + cross_file: + dependency: transitive + description: + name: cross_file + sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.3.5+2" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: "41e005c33bd814be4d3096aff55b1908d419fde52ca656c8c47719ec745873cd" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.9" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.3" + file_selector: + dependency: "direct main" + description: + name: file_selector + sha256: bd15e43e9268db636b53eeaca9f56324d1622af30e5c34d6e267649758c84d9a + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.0" + file_selector_android: + dependency: transitive + description: + name: file_selector_android + sha256: "89243030ea4b3463fb402b44d5eeacc4ccb1c46a88870cb2a5080d693200c1ed" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.5.2+6" + file_selector_ios: + dependency: transitive + description: + name: file_selector_ios + sha256: e2ecf2885c121691ce13b60db3508f53c01f869fb6e8dc5c1cfa771e4c46aeca + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.5.3+5" + file_selector_linux: + dependency: transitive + description: + name: file_selector_linux + sha256: "2567f398e06ac72dcf2e98a0c95df2a9edd03c2c2e0cacd4780f20cdf56263a0" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.9.4" + file_selector_macos: + dependency: transitive + description: + name: file_selector_macos + sha256: "5e0bbe9c312416f1787a68259ea1505b52f258c587f12920422671807c4d618a" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.9.5" + file_selector_platform_interface: + dependency: transitive + description: + name: file_selector_platform_interface + sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.7.0" + file_selector_web: + dependency: transitive + description: + name: file_selector_web + sha256: "73181fbc5257776d8ecaa6a94ab3c8e920ad143b9132a6d984a9271dfc6928d3" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.9.5" + file_selector_windows: + dependency: transitive + description: + name: file_selector_windows + sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.9.3+5" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + gcode_core: + dependency: "direct main" + description: + path: ".." + relative: true + source: path + version: "0.1.0" + http: + dependency: transitive + description: + name: http + sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.6.0" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.1.2" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.flutter-io.cn" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: "12f842a479589fea194fe5c5a3095abc7be0c1f2ddfa9a0e76aed1dbd26a87df" + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.1.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.12.19" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.13.0" + meta: + dependency: transitive + description: + name: meta + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.18.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.9.1" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.8" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.11" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.0" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" + url: "https://pub.flutter-io.cn" + source: hosted + version: "15.2.0" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.1" +sdks: + dart: ">=3.11.5 <4.0.0" + flutter: ">=3.38.0" diff --git a/packages/gcode_core/example/pubspec.yaml b/packages/gcode_core/example/pubspec.yaml new file mode 100644 index 0000000..4f1bc4a --- /dev/null +++ b/packages/gcode_core/example/pubspec.yaml @@ -0,0 +1,93 @@ +name: example +description: "A new Flutter project." +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: ^3.11.5 + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.8 + + gcode_core: + path: ../ + file_selector: ^1.1.0 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^6.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/to/resolution-aware-images + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/to/asset-from-package + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/to/font-from-package diff --git a/packages/gcode_core/example/test/widget_test.dart b/packages/gcode_core/example/test/widget_test.dart new file mode 100644 index 0000000..7c72bb2 --- /dev/null +++ b/packages/gcode_core/example/test/widget_test.dart @@ -0,0 +1,19 @@ +import 'package:gcode_core/gcode_core.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets('GcodeReadlinePipeline smoke test', (WidgetTester tester) async { + final pipeline = GcodeReadlinePipeline( + options: const GcodeReadlineOptions(snapshotBatchSize: 2), + ); + + final snapshots = await pipeline + .load(const StringGcodeLineReader('G0 X0 Y0\nG1 X10 Y0\n')) + .toList(); + + expect(snapshots.isNotEmpty, true); + final last = snapshots.last; + expect(last.stage, GcodeLoadStage.ready); + expect(last.commands.length, 2); + }); +} diff --git a/packages/gcode_core/gcode_print.gif b/packages/gcode_core/gcode_print.gif new file mode 100644 index 0000000000000000000000000000000000000000..29c3f7cae83fb5e3dcb4ffa37f6c08db0dca080e GIT binary patch literal 1079412 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�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≶y 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�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%0AwVu89jp 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 z z5)qs|FCYkS*1T2-N%d>{{+`UT8`$jsV-K44qdUp%>@PipREhDEJRTzGO%91K*m;{j%H=ZnXP`U9stx3lIbDnO!G zPf?*H{|nt75U3mIm5KtIqPQsMm!z4zAQz0QPqJg-^8gBbvOcRuJ*I;{fDce64H}Bo zb?UMH=GJNm-b8AOJ%#vI2mMIA#n3wT}S=5aU~I65)kW zlMp~YG**}vpKro8M;4gGV>VsUUXTc6}=z^ep1e}0LqGvUZJpCPC(LY(I_k;kArRbGDdd-HcMhMoWP)Hs2*mS zA7$b-KXwM_OM zCOZI!UcV#pk6yD%t-kl1mpd3dGg$s>9mC5QyPG0=n5pA+KBJ`(hksGi zD#S@T)}8!?gh}RMW&_ScF0kHX^GOspN@E=UNy6-Ejur2MRL}P0D65@OQ+HMm0me@R z8FK>Gz*w4(OJBp?<LT~7M|V=Y3xf#@Ef}#%UAX2(f6+>irJpkZB;hu zPxk3vGk!C<9RjeH=nXmVXG4vKt{NYS6yAGjB9`APfi4|~gijKWL#W+kk>lP|i86uQ zAnT9cX8r4PrczX1cw?H^xe zC;^5CYsFJeWgwJkIqe!^9;qSWAdOy_7vRU1=9B>!TgYj5^#+m4$vpUd<1cT+I?Zftt~CKoiu02LjrClB#yKQ^a1?4oAS!K*hENwh&X)K(gP*5; z|1U{|)PzAM3;J(H$r(yQgdC)fu)cmlcGK#+i071*Y52TqCe}Y>z=_nX2qv+H_?F47y>Q=gQ&oQC8-=p%cQk+VRS{0z5wS)=J+-W4y*7OZ69S z0f1`k__F&&nMv`EI}@{7#6hU)Gg1D}5(usGFNTjk-IX0O=~SN(-EYxd%mku667TCB zDjGb5(jqEJ`Lb+x3#R#c9Sj6JDTmsY29p;V#f}29j-^|fFKXYpc4|5y_T=BG-b6$H_Vo2!tuTF(Ra_-aVZ$y@(_w7 zIlXl+rL^EuzMV?VzBn!Xb)%Dr`M@ySJyV7qF%^-T$jB@4_^~I<^bUU!OOpA~d!(Xn zb45YmcFNJ~{_4B{pe$KGe)O96W_M<}q4+cBxoge>TfI;pcZ4qDJf|2Hz-{$_Yl#a{&U>(DWQe&JRQ@$mOj2nFhDz#}) zhWThZd}GP}!CzQ?cg(@7v-{q9X?`7{r`6S#S-d;$^mTN&|38R?iPQWxiA}F>leSz< za{61%o0A+Wjq*vU9|Z(uY7EbBncVF>*#F`3gKx9=^q;Hm?GONA;18?sa%0Yi@x8Q9 znmLj5lARCZjEoaZ0ud#%wa)nm15qXmD5ltsHL~ zFD!#uFFute;8euOvcngRoc@&Zo#z%`zkNW=PkZ|aRq+1&g$A}eqTssp$0{YgaYp*U zX7~R&33Gd`c;_qKZ*;Q#gO)cJyT_!%>6nAfeQz#mzOZ{dc@b;|#CH1aOJ0=O^CqI^ zdHj|Hl?vs`q#`5nKR(CTz8Ds}EBcOkXVO4nx{i=BOrV^|q(qGNFmF}17CSUVMNw_p z0UG)-4l|k+*h03wm=!pG_xyA5!{-4YD`R{A%mXS;UE$9e0@h+|y8eKKIPrAHnrP1#MuIC_ZhEvZ9>VL-`~@p!F@-r!19opHyz&P}Uq~$u zt;~R2D+C^r;0iL^WJ@eUM>AAp`y~JZ@g#_LeWWoJRWTtU3)Z&LqoOH59|eP_z=!Y{ zPX++a-YhiqK?;14c>YbG_k<0^%{vZ!v~XkNK*g=V78!bt!6L9%!pZ;(K3}#yv$Vre zRB)2UgLFU0qF7Bpj^kNa0aV*w9ryAJNitYr0N^FVKs)Vz>qJ4-U!Aj5Q5JqGz)Azo z0)puPV1;E90T9V#2p)%iQ+(meF%bb1tgZ<}1&gXPk(kCBQnQ?Qn*8+7QrWQ+upSD# z9Tn)oVWuW9U#LvBNRYONf|S`S@zgjO>=6Ri!y9sn!fqrZ@yZ+XCI=BgVjHBPkyvDl zKM+k~1K%6WG~~!nDyEo(Va1_6sW9o!vIrT8AxY*A(e2tj!GsG0ENYe*VJ3#z1O>el ztUX|-+mepAz$p8LvwVkGQm&D(vCyOfFr65v z7hABhS-=puwq5gf=-Q{SYa6*gYu*l>6Dd|0P)+>$`)9;9P(Kcp_{-;mKL_f$imLyl z;o`UR0jbz!H}3AgoDc5a1cCb2e`&aQTJh^MV!Hc(6hR|#dHWerI!sr4gKaB1`zBMo zIBDSSf>Oug5mPn_CE&}c&;WmyAo4FWQD2Cn5{=8`>)8ABYHY@#M!t7<| zzi*4?h-hV%^R8Q*%log|>K52-p$u^6u7G64=1RQ&apgPl<20G~55Ij{e*YL?{*MOg zwXdr~uLh;jhi+9TE6;F8s0?*wU9!{wYFkl?ZMfo(n#;6H2Xsi{YW)PDvARplA-ZVq zi?$Nznc)trKJ*J;-xF#|YmIArN2+zUPLxWw;gr}F*Tz#nPu`wsRU2>SiAE~L_(r7f zX&$%Pm^jq>w0|t+z0qEvhiajw7@V@o#N%7biJm+(P!l%)cu?t!_Avua7JNO7D_!gJ zc=6r2BdrBv^B3uhP6?_4D^%x+=ItoG6+; z{6u7Ienop`0*3psQIoYV{lj7i*b?xr^}^W4P^X}C-v_?BFxHRlX!1D$j;JuHp=0T< zId1#Hw7R|`L$4erS_a6Nt803ZMmT~QQDa;NS|VWkvT?}Wj2ywr@(5RO@WCL7AYBn9bU#SQ!<3+O^h`csxY3Fiu{S>PSG*9+TawA46$CcV(+ktqTsvC zMQpsB$@btHCHRccDSg1FmOf6+L<@LG95BULlc`yEN;-zU5A_U$!T^s@G2OYyp2&rZ zIVJqfNN1KFH%=QBino_ufoYG8$)zhT`I37Mt)ZO**D?q5z3_=)-I}*!jw2~O%H4;$ z9Sfd%FT$lYlf$;Kd#e_QsDg6)jbk z5;lFTo(ZvC;dt(?r`aIrC}Lak4h|Tb9v2LbQ^~hXmff$NbO1;p;-2L!`VO;@r7#j@ zyPo@;JT72XSQH0m60NYx?tWIP@plBxgzPSR{o?1h0^>4V_Ody&nq8^7Xs6<(ebe#M z^Mt$S<2a#-u}<3JsK}-)&b!{r&dRWZKo<{?iS%<>Yk1lH?Czba1vyugW^S3)yP)TI zV~q+c_HO&=s*Aa!>Irjd)pp!9RJL2*#(!vaZjq{JGxLhuc@YZ&TDd3p07KqT8_xb#Zs;$k<* z5+8Qh2YLq7yuO<<7z}aF3VeAldQ%}zt#=Xwwz}akRSCxCf7?oiPytj!v#8$GCUkUhGs z^)>8CTx#xWnnufmT`d6lA#V%D=ceP>2vDCrtH`eG$t5>}k0VORWBtc+#vLaKK((lU zBn%Lg+B$Hz)42brbFf&di>dmZn#e$f{ZZq+mGJfxqFBmJLH_3cJiXVGK?j3wO)TRG z%AXz{50(3lGo2UI75cFltsFA}b!)gUZgD!wd3xF9O~c>XqW{%~i(i2Hzi>VXzazeR zKX4}dvX9+fnay+E^x}q`JmG2SS7l?Q9TtKg9gKDayGCJqn@}`*XY4@>{SYLKS%^kN zNRc3{!4uf$NMm(_X-o)M{PSR;gw&pq=EEHc6X-h6RCfTv;pZ-dMp$fVxI{uCLtXh^ z(P^rCh>%ZQI{|JguzLSO%yB?gWf2+4avlP3J)?e1Z9BgTwzm->aFcK@IwXb4S_HD= zG^8yTGYi&9!wv$iieU04^WZP=GMIIF1?Q>YR-f$^mI*n*f{ufH@Uj9Cn|6>^sgD5D zk2VNFHCz-3X(RD0KvT3%kqs}7tRxd1Pm0b6z|i1;t+MV4mQ9xdfbRw*1GR$N4|p5v zmPhi?!OI1#)Bi$hRt$?GCY^>F0==m;;2|?mOtc2?0^ojqxD0&CK*q};@&4!@KEYS6 zP-z_c;siiya-C*Cgimjy@SR|-1~y#qK~sb<8ByhWp(p@TzyO#jz%ClvLmA^kv@SS^ z83U^#XiNa8VWLBf7>EWcx^$l3SfB0O@Bx(>mQS;oXJv;@5-^kCrku(OVlN^7N2}=Q zr;Mc30L*h&U!<iL+>vM8z&sRT5|psf7%owZN?#OE;MZ+ zCv7P~QH~x3RZOn-f-L`Rb^8>W-UjLg5NUVn&TVX@1Bc|_U-B(ir9i?cYk`>G<1pJq z_&5}-sX%T45TuX^joKWIgoBiiRxVP)|p6ovo;oEERe@29-3doPY_qZRYolZJdjC*{+Xx(sq}}{J%(qUn>v7bHUbo4#3{AKDU$0w$zwTS?e88 z@J;R2)`jh} zEML?8!AyLibwCizjqG_bK?t5nKjD}cKi)4Y&T3CmCA8+MOej*qY%N6=XmQ$6g%5L@ zJ&w=eCRsphmk$LB6rqezTf?MyS2WwnN1C1L0If~F3O;cI(tV(8m{D{ z!W_BXY2NH*!|2D`p?x=9K6k%-^yT9nGFzo9^Zwx$!B4aVi%NIC2VDn*^l;g(ehxaK zSbYQgYR4yVub!fKC8Q@;-t%tB-EJ(vf@rP#2>hs3kKzp4pYPLCZwHs{f3@@<-cl@|KxEOHL^^G>@b}aHFwc&= z!+;U`lf-KerkL&xODfzxndH&PDF|!okle;$KrPVEwRknMJZeX7`5yhHWO>E(nI=~?>74$~+ABq#T=6<*Cu0S2sBra!R)r-r{Rt4=wj*&Ub@ z%E!b&g(jFn@~1hNk>I%G3Jo#vEM(rg*VN2c;LmCc%1O$}2yZg0eGZhTjKFj=dlJBh z0_ZEjQLH&KEbtj5!0)`!!=x0+N@|*g257JX)TC~ifFP-KD57L_EhqohSl%$?igQFtHitd8rK& zGf0x`7{n?~5D_X=NX|ZC=F9w@Png_SJN-0xE}G~d@@dJzCSs5l)n=BWL6Svau}~Ey z8aZ_4;~@&`Jc)hAi*%F=Gm8D)3X{YJAhn> z_xuUX9PtO5S^PJeIs4CO=JS7uCp0s{Qf4ZFRXEmYcQJ>j>F(zg8LX*%2mhp1 zdg$;dF{W)OH%04{%!C@s!sA*xSh)M&gJuS)hO;alHJwnFpH#!G>b*;jNZ%osvC;VY zsI|&_;Quad2nVYPc0B|GNCXZM) z4rf$+n)1B}WqF%SBbE@p(JDUA_59j`g*x?iR|@l%CcRneUiVJGPNuS*_yF)%(7kgv zd`V4IC{wuykWi-eml*xpe>HgHjJPQldIM*wGT!(W0Qc;8m8Zp*wJa^hgT?y^(~Z4% zZ=mF~tX2G8mM}&t;v%MBO8T&c+>mHydig4JdF!Fto8m9u)g}sAS9m59q;GFbrKqiJ zOjC^IH)k^cThPq3J%htc$_bHZPwccX!xiks)m073X+6eQ*&{Dfg>=Wci*)5MD|#VO zoN28wGUjehNzJ;LGn8n2%B1GjhYa@WMZCfdVjEf;sV{JbmUvsny+3XEaxgF0K#3_VNqLYYmeDfR~0Vx?Nej~B$i2>{y22idh zqy&CyyBf+v1OUW={s3dGlkG_Wqm6UE5V>6f6$M8~O(~{JDMbt0`;~~_|BzsM26`zM zEun!{$8sdC3VA9|$y8M%J;_DUS;P9fn0(TuI9sz)Qf9f2EoKsNEtk8>;k%S&u}xAhm*FkZef0el|s|5c*=Cn?NxA7tS8d*t+c3vkpQzFy@x8U!^{Dz|= zyd*lqgL_szLvKqp;H_S2S3R=?InpdN>S?rSaHpKW{jLZNLm}^QF(tpjL^A*;yz1J@ zN6bLE_v*)Npi2dWE4WSUqeXOLCba<^dlB=Oeb_?u5XPTykeN#o1a$I8#-bM?};hb!CTzOfF z|4=Y*60dGj1=*g2`>BZC&7;F*Dj$DN&AXEi^}Wcdxq7(!*nn=*pvz^!D~I2TtzH?u zx`kIM+1}^6>~QK=s;x^q`VI-VW*r{osdpZHXXBInxACn<0#+|4R;Uh~K4wi`HuB_F zTJ1Q)6bJ+rLd9H~ShPA&fG`e#VFNmQYI|OP>3_0gfOhBn=bktJG|(5r*E!A-5>v)& zX}YU&xCXtwjx0rk`V*vC%&@owf}D6@JcFmEUi>+ECRw{BS72YHN>dbM4e?~L^`^LAwQ4N1}9eK=R*>UX4i~7F>`YaCV$<~2{auY8g-TPsf z{GU!WoNJtV{Ji=UleL>@w5qWERxmS5kM7F`dA=?w6*oe+Zr$Yv;W*KOfZjegdw>$1 z@rs|huTR}cXeD%h-kVvR!wSw58-*?CjdZ+2tk=sx93ff3f)h_HbfkE*Mrv(QY1^`t7RENhf0Ub2d*~{mouI`U_uUk zMpJcpDokSALn}W&{Hm=54LirQiyUj=7sa#h_BZ&-?J$PlYpC@`n>4xcb0ew^N}Jbw zqm~|bpgij1?U3)wOq>N6TYxDS`ykZ6`{oTfmgSaVD6Xw5hJce>ppovLdmfx!t1ZMkO4Fw!o z?Z0x?>>rs^ubc1c#?LIjyBA_QbW>C!gXy+2_mW`0&%BGRIN-`%C`Zt)a~gc`;8%mR zv>dBMli9;^q$exDTH>zYa`3s2nGY-A%Bt4LqSCGQYPa+5CTLzJ8OjVJ;Q_v5m5Nmm z_HP!=EHTccc4@wIj%}4#?ttDlM`RQ4sDDj6u^RXGy#)b=vSeY-O=f_B9p~UXqYK{H zUijjt^*a+&yuz-3AwtshQQ+1kts%q-qfyl{O_FTLBf`@^N(&Yeg{u&?qNBbobfvS#oa$`jj~@Y$P5 z3dxEN4!wAp5!#6qbYu-uQM@X9xQ9^Dj23g`5cotkkQ!XI$`;HJZU?6!Gtl3b(<*eA zWy$e}gWlQ3;MlgD>slRWpJw-a2)|2MvfXd>{HB-PO&5W90$eHW;QCO40uvyfQH9~J z$g0>EE9d;e?ZrdR8R54e2jDCU1|jTdM?{S^x~fnTyqD7yQVP|*28XQyY9i$X2n*vz z&NO)l2L_93bMMd(%rB~uzUu8gQj{0GHOzZ+&Yam^vO)g_YmDHjtM5EOo${OWs`V{L zlbu+qQ*3zK>Vxk(2EMEwk5suQs*`{F%)OphD@IJ*%M5w1f=J`Ywqnky!{)4g^W*Eg zmWAK@-!a6J6%xJ$fcEgna5;DK7d->FpZ0L<5zrp~7+t6U90%>;3vfQ2L$fK$1-1%vCrWSd<%R zStNu4Y;!rSE`Qix(CfLKOFQyH$vnsTXrzi*kGsng*+>-mc#PDR@N*zlb1L5}s~3B7 z-oJ*}Wt}Gaa&v(E4_UMAV{yuA(AlnuW*IY&+OF6%P2yT}KzXx{F{ZGjSoyd~-j`?P zmUk--_Wd>Hw9B&YKZiLDFg(`G(d>c%dKF({`U#02a}VYX0-ovf6DG*-PMzA`UNUtetuBohM#Cs> zwL@f3w=qOY4|3Lpps2BglGOyJZ!JRI^RL5p6StPwW1!rG156A1AhI$Zf)f-w>@ao9fAwm#-TB0IWY*`3nAdymKZxdVMC(= z$ykh%!wyY2#FHL!2?rx#*_7&kdeHFXv6?uMt{9#zSFETv7+{OlSHjHt!|*sOrJTrO zIE0W83Q(DLk}&*4gdB+}qAbpMI6>S5o9+;0?2mqQFmaj&z#{<-fBoyBm^@WXF%|d~ z_GG}Os0n4(?3P2}U&ySxaS?)~3t!`*DOBauV`9pgm=YWoyh@Yks0b+xmV(HW!tV5E zlKTiaPQ#%K+9!hb`wfs9u0n&}5bz{_3X7@@NEM9I-*k04w}6?a$DVLi@*zWps5?B# z=S!&UT?yKnD*BQVF)etO6;UXtu2#XbG|(|4UFpLc#zA{y?#71a^BP{tLW34$5o2wN zt=^>njy?uUP$+YJ6H7}J6@6VAiwhGw5gZB|b{;GVg>zh(77y#8u(eRxST=nPb3&G* z&(5!9l5%xy!+gt1RP63&IgezyY-YJWIg!rq=OJ*}E9|njfbK1CKlWVTFBzBp1+oQ2 zolYF`4VKLg&CNc0KRbLR`#jjADv%SUo)dE@C+>-E11YMt)% z|D53r`csCJ`?2UhwV+*=zE}OL0>b?I$^V%Q=l0FJ&YMT=7~3<8l(!K!{i*VfFWGeQ za|_ey2iogV1R`%(t~?WnbY>VOF{i1HJQ1U_Ti7oStBt34`~$=3UAl?QJYIK*H}zzP z`U|y6n%Ml+(77A)1>v6-=dY0wyB4T1yvG*`6Qn8@ic(aU7K$lGyB13_?T;^B&+)2Q zEX_Z&v{*)s+qG0)a{2hujq=iprHabBrKOv+j;&qGm9;O9FW;)4t609>_-SeRP7^}z zEv=2$_ia^|)Xje~mj4n3yX?Dif1&i|O2gZ_<&_7F4!QS@>o0uYKirtR`To&=0K@4w zN^peYEtPul(P$97tifn*&II+V&*dnu)1jh!)`C=Ej9-r7{aRf5y|Q{-C)Ni|uhj$x zx9?VBf3BIHiUzcqwfhJCE(iT2b1blf??_4^60l2WTYv4WpXRL5Led$~O4^1tD}SEF`O|u* zbjy@$r;Eftv(9!6e~4YW1&cP-s!F#or>~6v2wiD6b=QzT2j3ZvuY(sOW!_7OnTm~v zumd}LhVxZ)dzAN$Da27;JrTLNpS@R*lH%4bc+5dG21}f|b^)VcGL=G@-eI!Y%a?a# zHfH#SfUjB+GKvH49v`P(KC@S?=1P&Oc3e8Mk(75REHD)L?4>pe@Z zvCcC^D12`e`T>Or4W)8JZ;UYO%e1_lkl_xTK7`+TL{8+cP76)YM<{}4>WiKF zgpM-SP0O*PwXc3j^~Fbz@FoC$cd_<3qG|jD^Y-UG{FC6_F2JGXjgBFlTC8 zg%Y(!#h8Y=fG9>LnDYltAk^HSo$!mx>mP2PJCu9%+$sE2h%t5QfwoViV+@#@|$FlQU1{ma%y@X=CiKI9dl`nI`K zUEodUxUBFZNecPU%TlDmhF};pul@PS*1-8MYu5m_g(5!)d!$(ze=mQ+-by#pELOab zEp_2`LKP-)*F1vPE=>*eX}fd7a|GBh5_%d}k5N>1Edl`a?FaOw0^40H4ETNsiJq<3 zF3d2$VG#=(xcX(ijL23&iU&tR!GHbc{fh-nwU)!>J6aOXnM^xtWCrldNgjvT*LZnV z0y4givQ;mPXwPqDWpFxsKwj2PomSdue#7!6r2F`@R@(E8o1PPUHriw?tC9}(PVqk2Xve2jr5tN4)4V<0v8y8>>9qO3cJoGk76iy0mL+~i{3>(0 z_taHe($G_TZG+oI>fDe7coOq{cO+TNJfgP^0yXEE^R)gV(yk3 zTP#`UU2)1PH%NXtsm!C(la%2hzph6x$3s7vfkk0GT;oPiTr92{p&1oSrfbo zbehZPPo%3GH^2%3=1|eFgP~0dC2mlDfXK;CK_GY))2w8gxTg5yUz|7&iF6=CwH3PH zyZzyIDJ|Tx`#P0`00cX^`OI;8E4`5cgzRpCP2nSjhB%_+kZr=V!?MHD08j;U{a?(z zc{tRMzxV$(`!L3P?0aJgp+eGFo3T?eq(an?%D$vztr`1n?0bf6AyJBmh7_`7&mJLE zL?|tC&*%F+=RV(azW48(^SkcrzOM7P>vA#U8t>QZ^?W`a5WE0t>;M&dqFk3Rr4Vs+ z^utRz3Q;)YI1+&GIQ+Au=o%f0dCz2r8;4@JyhF`f`?g2FKgUyypm_jLF&mP? zMmz>Uy*{vAVCgH;5okO*!0HC8ais*n+ZaITED*;C*7rtFR>5AIT~# zm3w34m#LY_T4lqYLB`mGbZnR`c6*lkoa`feLv!9+suz!8xu$P=qcWK2Ub^*Wn$UaD z6j5smsWV-fje7wJDpFP*tig2mW4iJ2`y(S4GwkWx@q>hfVe5oZ|Aeuugo%cPdk-NO zj)C{093wgs{w2e?EI2QCDc;)gN><{!VA4qFr3!-MmR! z){+8F9Hi;{m)SE{_S^*e9+S*TXTqOxw>1Cy&UKh)7&%1=+1c6rbS!9Z_S8pWcKtgl zjDMMYTmH;YvgK=s;T%m)VY#{Riu5Do@IL{?_y|$IB#&U7k(T~oB$p)tP^h@2@M^$Ije3y>JpHgcj@{s{1EX7ivRv~AzM|Gwz zIuFH{QD{fx?@d|xxst^4a^yL0scgBLKIHC7h(OP}rXvs}4kF>655o!pbBL={Yvk>( zdUQhkbZ;a|0=f3o{J`n+g~KzE6y4`*$AHGM?VNY84Pk5f=3GBv9(J@z<-3;Or(Smw zh3hnUB;d#53!V&!yQd&JAb5N!_Ui8`8Nk_%hKROgZV+o?^=a_^ZdG4zh&thGm0uDHixKY3Oe*jFYE2k!UfY!0-({2F(tO=$7C%y>qc z*e{bej2;N@S`Ay@mOVLg*5LH{aS;zFFd5lp$2Y$EI8H5g$MMR8;hW$0Lf$j9J_1Y# zc4t*_R_m+BPBB%gWoKSYEm8J=#LfS?)RY&LxuEgBA<_F1we7&Hq4DDJ7XVqB9g{LG zJSG4ub%HC@Qm)99#re=-Y|sI{eN2i3`_~8z`aq#E5ykx^eV&#*9zn`eO7Y5GKg93k zVEZ{jIhILQU|poS_Ds1G!i;qh8qXwb#g8UKh1>18NK|+e3Gd;o7bato$Ia;r4Hu-~ z&l~IN75mfo@xSD?o^pIKn3W2bwn&&&Hc*ev$`PN@5AzG3zhPLY+ec&q?y6lPLMcYt zfl-NhXd_`K?gU-&_Tb9gf8}2Hg`ZzDnV8bQuKSL{n^~PFOI0$vdah_}X7|UJ zs+O7by4r5$jP;bN)pz}q&hTWJ#@ntwzsAk{_4qQaC6hOSr(!eTw3ca$4efP&+wv{Q z9=PfYWA6|BPa>OgTabGerhG-L$mRh*g8bhin-yV_rVmu*fix+rMKJwDYis%WgP$Vm zg?XVSjh2cw%hY$#E0c<<@)ct15r^&g&4Y4E;1nVj`rGgbD-7YG1%aaF?8sgwpoPlF z2^0kj;ED8uX?h?&{Jp^H2ok`2t+aQ|P~-24^`?M;qtontR9jb4+l`Z!thL-=MdXP= zZ#;X=+`^%!Z=c`lia`rTJk7Z*0VC4zk=`rEWGrA{%W$o|E>*2hc--52zM4%H;FVDZ z^|oB$RlxnMY61$j7Y`Agh<;J8XayB{J$mvu=f@MuXXPBW$N~ww_cQz=WVO^vcpZn)6&dpkw(RVyd@M;~jhn^vH(KEM|tEb*(k_4HU$d2XA%8UEHIANf#RD~ zr1n>dL|^}(L-T?iWp9*0^JBJ#3xXXg(i=xsXLhW6S@- z_<2(pdg9+3qMnY^);uN~ho{Ap?fppZPOwXuWNZHyteZ|WSFRxMo_YPto4afAx0iV{ zB5x>s12D-+Q~a$pa5*9=UVn!L@ih;Z0_dzn(Jub;h5Bxet!V3aEbKf3|E6hX^A?>0 zAo4;bkmKE_lKlXtP_)tS!=CdoVI5%~EU)@2eWq>OEl6_McZPmo5zKm_3=W{PjT@+; z(S}2XLuG>vmQ%1zvyt<|Eyzx(q{JZDyx0phL(Pfgq|1}G!h;R|8v1OIP;!`X#XfrL zC9gPo((gH3)X|5Vg`clLkH1}ewXgN|IgEZ!nBWU6VozFrZaw9MD6m_K{1W7~JA0)4 zZK+?ur`xhvKReqoT&9uIfPJS6_CYk)Q7F%TtD%oZ0jVkO1m4ruQP78xT!m4|8}-^?(#a()=7?VmkN*L_hhPT05J4cOa~5VDwTO+&=E<_*cD)CB zy5QP?B)9_vItLxU3aZn&!p?zlnc0B@97!f19Szul>5p8%n3z;FYk(!@U`aVnH=)zX zh@?@SSL+%W6rk^yYv2Mt1~YnHvf;InOGJSYb#Tu=wTu;!+|YUD%~@Ee+_aaGB1&>~ za7hmd$W5Eg1VD~YLg}@{L!>c~rBO*x&;R%clbfy4jRp*C($Z${r1j@5k7rgN5Z$%` z*8@NYbw)t|qmjhPBpn(ibFKiQa^r#Qj)hT3pb}m9l;m241ge)@h|bviMy_b~B3V+Z z;)Lh~I_>h0A_q;sggf1%E^F&92Y!}n=afr3lnGdrPd?49G%c$87??8w z2Je(AUdfp%~`{PE;VlFyrIPixJ#;ikF-L*|vA>Qj22Rx3vc7}ZPYqCph-h8H#wkGo z0IKLJ5XYbt2$zJT9v~f{(s-N&1zcfNzwFG1?a_+Va$zia=~W&`3cl#N1hUQ;Jgx~g zv3QCg!dwpf9z>98ILHc^_aF+Gg~~Ic1W&l?)VQ)KVDvZu*>x5bF{PX6YTI8U!WNlB z1y2A-lUxYYg5B*Gh}L+7X4y13fM}`@u+Dyc4o>R7+jk|2)wVYw=ar5k-lBnY4Nxu( z`}u6X$2y9Jj|;3pWvN3~@SHMubUp$&M=t6JWHbxc+%n}(Bwx?LvzJh=3$=<5+2mWf zL0lW|l{6Ty8OE24)zO;n(LbPDesG+utgjP>3^D_sodDNvVx?9*CmNnIg0S}}kk+dL z+u4kU+$#$)>A?z5%6{Qq?wtd5XHo06>_$i&O(E)svw+NOZV7^e>%40c1ro<`A0R%0 z`ZU8NFfy-OHhw)V8QmwHi;W}ZtQ~{097^Y$pX_75dMJly@O3?2g8gtVc-IK$!N`?1 z6=33Oofwt9fuKP@Q|)}dEQl(raFY(i%E4Hh2aYx(c4F*VyeWH`Mzf`+zn{;uC2y!l zO|u>U-Oz3xaq0H`KCJ)~%1cWz03SX2*rakopbl(RiK|^;MnUFWG(bcJ>obU>F88&& z)Q{3l4q%#GAyb3eE`+mqG-Ecgp+GyfszSvl_z| z52Ie)4G^tVQLb*3DMQshal|7K66^tVBo{96rg6>+K8M|+=8Y{lz2ZJyi%Ad0Qk2?0 z1XdJ}K3ihca5dFjm(Y_TL!7){Uh1wu7hY$tW$$tYt8?O{-9g}4?tzt>Z(X?S7JcTw z`%tw-Q+c?Vc-(U$=bF}=r^@w*BszZP@heVp|B3J1`_1QL(U0QPz-9Nhv0AUwI4LE_ z5sNom3H&(ifgg4Q4n6~iNbF_n=v+Fw%U3o7qQgBsuup7Is#ifHR$F$LJ6B01kBJuE z3*i^#98xhGI_e=(Km;@C+}Zd+VToa(p~2+gA?U`C9Bvp!8s=#o7QQq*w8=bNI1E=F zI(L6aoP@$i;c_Wx7;VJF13YUF9=9LOq>Nm)#}z0Ic}|adioLb9=RPIY{>d(WG8pH^ z2{>wlA-%XL<_L6PgwqF=28@I>j|Oo9S3O2u^Kst0qu0dVo)B}^H|9CjJSOgg!jQ&b zY$#;yTT(vS)NDdGe>9UgVRmq^iW8{Po*>(UC$%T4ci-O99{076s;X)Wn8xLBjxp|o zcbdTxv5D&5v8sfL&gqFt`?qx=BQ@F+PkP@rG!J1~r-H?}b;YK5Yu{$>QP6q7C{$v` zu@~LLIhsM83ErKKVxscsqwxo40Q$_F+2m~gjA;m3dwOWcY}(UfnqB#=-jR3vB!=Ue z)0e4GGb+?n6LhYbePuR^kO1^vprxQd0XRHo2CjrmUpfjBh(oj5Zx<7WVLo#J9=^vp ziy%#2re2k8K@Uyi94JtDEA)vLh^HXoY^Y4{G0cEs9u*3efGQuHm%##3FHj~rpz^eG zJQV>bAx;0FOQb6T_n*fQ49R@Dn%r*XCU*{03#Yf37WEx4%=&=QL>`vKu~Kuc;5 zNgjk$Q0G*q-x@MMJWUwRKJ?CUdI*Jwu&<+z9~?F9T|RYc7JlJ_(Y;Rz)l9*)iP1zH z@)oGcgc2A_1s>q-J0Ku6qr!N%xjPErfjf-hd#6@l14ERVAq|g3DDF{q|7ZdD5$2$$ zJiRK2`()%YA~1u@KD90&F$QNtdMVAq9H4&0HP8p(E+R@sDGBu zat;Dyh$8cYgZR(~vmtiigYt9q@etI--I#d1vREIag0j8tftEc!Gd>NKq%5Y~S^4I< zeXj*q>#^zPH>Bn;ar_|M9|KG-;ofk_}$OkUZcoX6r3F(fJ4VQC(X>p6>p;?iJ%d%jmLe$yt#b0fTzj> z{jPUamJJou0^ZsapVi499W59ZJM@0uBklOXcP_gls=Z1drr$pldwW)A$T$Rb?O^=j ze4b}I?vL`B zyZv@!>kjQPe21@0jrmNTOx|Z+YB&D%a!>YAuMe02@2mZV21zpZ6I&C$O8{MCdScsc ztoHJo(&;1HdnDJ#H@~>`){p`Jh=L9W;bYOWARPd#dm)~W-30F9!`3=22%vxNuir1A(UC6_RmDve zDq#bR3kOY%9!qtr9%+?McRGq8%#%i<4uJC|BgV6ZS{WYT=(g1t80RV8Fk^gY zB#x-$Y=@Dwq6Zsc^z-&@9%I{-sh`h$MuE;9zZ0(?iGwDBij@%h~N)c=<~c}c4k)9=LW-- z!`3l8oW&q4Rr_4GX()asj+dI9D_PI*jolyMT*TAF2{f5@9VGBBiFLXVoQ2D-=6c%i zU3)8ZyXy?sW6PCV=b9I4@kbZ*9r#voY5E*Xy zUJc|wW-r6%dc!!`|kJega;9fDcZ3=J6)<;o^MyHG|lsT zJ{sH#{3vj`CGhhj*&l(cP2c}muRRyI{rd=)%wF);Vb$Xy-&lXNA>ZdS_vy4Q)$je; z`q**%_Mf|9&u;?=G8HOKVdL~C!h~Nrp`9pD1K+w(#aQ z>rA~Ie?_?>VKH1jfhZ&o4>d1#1g;vVhOQRdK?4liJV+2OZK%`KM5H8i73wPjM6|THQ)I320=ZpUo}1k= zBzsX3M3 z z;wM2~#=WOzCT2e^ztyOkcV2T*%0D(3kg}r1#x4v5QxbEkH%oa(4xCz)LS@N}=*XXO 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 literal 0 HcmV?d00001 diff --git a/packages/gcode_core/lib/gcode_core.dart b/packages/gcode_core/lib/gcode_core.dart new file mode 100644 index 0000000..c100cd6 --- /dev/null +++ b/packages/gcode_core/lib/gcode_core.dart @@ -0,0 +1,21 @@ +library gcode_core; + +export 'src/application/gcode_readline_pipeline.dart'; +export 'src/core/gcode_bounds.dart'; +export 'src/core/gcode_style.dart'; +export 'src/data/readers/file_gcode_line_reader.dart'; +export 'src/data/readers/gcode_line_reader.dart'; +export 'src/data/readers/string_gcode_line_reader.dart'; +export 'src/domain/gcode_line_record.dart'; +export 'src/domain/gcode_load_snapshot.dart'; +export 'src/domain/gcode_load_stage.dart'; +export 'src/domain/parsed_gcode_line.dart'; +export 'src/models/gcode_command.dart'; +export 'src/models/machine_position.dart'; +export 'src/models/toolpath_segment.dart'; +export 'src/parser/gcode_parse_result.dart'; +export 'src/parser/gcode_parser.dart'; +export 'src/services/toolpath_builder.dart'; +export 'src/widgets/command_timeline.dart'; +export 'src/widgets/gcode_canvas.dart'; +export 'src/widgets/playback_controls.dart'; diff --git a/packages/gcode_core/lib/src/application/gcode_readline_pipeline.dart b/packages/gcode_core/lib/src/application/gcode_readline_pipeline.dart new file mode 100644 index 0000000..378415c --- /dev/null +++ b/packages/gcode_core/lib/src/application/gcode_readline_pipeline.dart @@ -0,0 +1,370 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; +import 'dart:isolate'; + +import '../data/readers/gcode_line_reader.dart'; +import '../domain/gcode_line_record.dart'; +import '../domain/gcode_load_snapshot.dart'; +import '../domain/gcode_load_stage.dart'; +import '../domain/parsed_gcode_line.dart'; +import '../models/gcode_command.dart'; +import '../models/toolpath_segment.dart'; +import '../parser/gcode_parse_result.dart'; +import '../parser/gcode_parser.dart'; +import '../services/toolpath_builder.dart'; + +class GcodeReadlineOptions { + const GcodeReadlineOptions({ + this.snapshotBatchSize = 200, + }); + + final int snapshotBatchSize; +} + +class GcodeReadlinePipeline { + GcodeReadlinePipeline({ + GcodeParser? parser, + IncrementalToolpathBuilder? toolpathBuilder, + this.options = const GcodeReadlineOptions(), + }) : _parser = parser ?? GcodeParser(), + _toolpathBuilder = toolpathBuilder ?? IncrementalToolpathBuilder(); + + final GcodeParser _parser; + final IncrementalToolpathBuilder _toolpathBuilder; + final GcodeReadlineOptions options; + + Stream load(GcodeLineReader reader) async* { + final commands = []; + final errors = []; + final segments = []; + var linesRead = 0; + var changedSinceSnapshot = 0; + + _toolpathBuilder.reset(); + + yield const GcodeLoadSnapshot( + stage: GcodeLoadStage.reading, + commands: [], + errors: [], + segments: [], + linesRead: 0, + message: '开始逐行读取', + ); + + try { + await for (final record in reader.readLines()) { + linesRead = record.lineNumber; + final parsed = _parser.parseRecord(record); + + switch (parsed.kind) { + case ParsedGcodeLineKind.command: + final command = parsed.command!; + commands.add(command); + final segment = _toolpathBuilder.accept(command); + if (segment != null) { + segments.add(segment); + } + case ParsedGcodeLineKind.error: + errors.add(parsed.error!); + case ParsedGcodeLineKind.skipped: + break; + } + + changedSinceSnapshot++; + if (changedSinceSnapshot >= options.snapshotBatchSize) { + changedSinceSnapshot = 0; + yield _snapshot( + stage: GcodeLoadStage.parsing, + commands: commands, + errors: errors, + segments: segments, + linesRead: linesRead, + message: '已读取 $linesRead 行', + ); + } + } + + yield _snapshot( + stage: GcodeLoadStage.ready, + commands: commands, + errors: errors, + segments: segments, + linesRead: linesRead, + message: '逐行读取完成: $linesRead 行, ' + '${commands.length} 条指令, ${errors.length} 个错误, ' + '${segments.length} 条轨迹段', + ); + } catch (error) { + yield _snapshot( + stage: GcodeLoadStage.failed, + commands: commands, + errors: errors, + segments: segments, + linesRead: linesRead, + message: '读取失败: $error', + ); + } + } + + Stream loadFileInBackground(String filePath) { + final receivePort = ReceivePort(); + + Isolate.spawn( + _isolateLoadFile, + (filePath, options, receivePort.sendPort), + ); + + return receivePort + .takeWhile((msg) => msg is! _IsolateDone) + .cast(); + } + + Stream loadStringInBackground(String source) { + final receivePort = ReceivePort(); + + Isolate.spawn( + _isolateLoadString, + (source, options, receivePort.sendPort), + ); + + return receivePort + .takeWhile((msg) => msg is! _IsolateDone) + .cast(); + } + + GcodeLoadSnapshot _snapshot({ + required GcodeLoadStage stage, + required List commands, + required List errors, + required List segments, + required int linesRead, + required String message, + }) { + final b = _toolpathBuilder.bounds; + return GcodeLoadSnapshot( + stage: stage, + commands: List.unmodifiable(commands), + errors: List.unmodifiable(errors), + segments: List.unmodifiable(segments), + linesRead: linesRead, + message: message, + bounds: + b.minX != 0 || b.maxX != 0 || b.minY != 0 || b.maxY != 0 ? b : null, + ); + } + + static void _isolateLoadFile( + (String, GcodeReadlineOptions, SendPort) args, + ) { + () async { + final (filePath, options, sendPort) = args; + final parser = GcodeParser(); + final builder = IncrementalToolpathBuilder(); + + final commands = []; + final errors = []; + final segments = []; + var linesRead = 0; + var changedSinceSnapshot = 0; + + try { + sendPort.send( + const GcodeLoadSnapshot( + stage: GcodeLoadStage.reading, + commands: [], + errors: [], + segments: [], + linesRead: 0, + message: '开始逐行读取', + ), + ); + + final file = File(filePath); + final stream = file + .openRead() + .transform(utf8.decoder) + .transform(const LineSplitter()); + + await for (final line in stream) { + linesRead++; + final record = GcodeLineRecord( + lineNumber: linesRead, + rawLine: line, + byteOffset: 0, + ); + + final parsed = parser.parseRecord(record); + + switch (parsed.kind) { + case ParsedGcodeLineKind.command: + final command = parsed.command!; + commands.add(command); + final segment = builder.accept(command); + if (segment != null) { + segments.add(segment); + } + case ParsedGcodeLineKind.error: + errors.add(parsed.error!); + case ParsedGcodeLineKind.skipped: + break; + } + + changedSinceSnapshot++; + if (changedSinceSnapshot >= options.snapshotBatchSize) { + changedSinceSnapshot = 0; + final b = builder.bounds; + sendPort.send( + GcodeLoadSnapshot( + stage: GcodeLoadStage.parsing, + commands: List.unmodifiable(commands), + errors: List.unmodifiable(errors), + segments: List.unmodifiable(segments), + linesRead: linesRead, + message: '已读取 $linesRead 行', + bounds: b.minX != 0 || b.maxX != 0 || b.minY != 0 || b.maxY != 0 + ? b + : null, + ), + ); + } + } + + final b = builder.bounds; + sendPort.send( + GcodeLoadSnapshot( + stage: GcodeLoadStage.ready, + commands: List.unmodifiable(commands), + errors: List.unmodifiable(errors), + segments: List.unmodifiable(segments), + linesRead: linesRead, + message: '逐行读取完成: $linesRead 行, ' + '${commands.length} 条指令, ${errors.length} 个错误, ' + '${segments.length} 条轨迹段', + bounds: b.minX != 0 || b.maxX != 0 || b.minY != 0 || b.maxY != 0 + ? b + : null, + ), + ); + } catch (error) { + sendPort.send( + GcodeLoadSnapshot( + stage: GcodeLoadStage.failed, + commands: List.unmodifiable(commands), + errors: List.unmodifiable(errors), + segments: List.unmodifiable(segments), + linesRead: linesRead, + message: '读取失败: $error', + ), + ); + } + + sendPort.send(const _IsolateDone()); + }(); + } + + static void _isolateLoadString( + (String, GcodeReadlineOptions, SendPort) args, + ) { + final (source, options, sendPort) = args; + final parser = GcodeParser(); + final builder = IncrementalToolpathBuilder(); + + final commands = []; + final errors = []; + final segments = []; + var linesRead = 0; + var changedSinceSnapshot = 0; + + try { + sendPort.send( + const GcodeLoadSnapshot( + stage: GcodeLoadStage.reading, + commands: [], + errors: [], + segments: [], + linesRead: 0, + message: '开始逐行读取', + ), + ); + + for (final line in const LineSplitter().convert(source)) { + linesRead++; + final record = GcodeLineRecord( + lineNumber: linesRead, + rawLine: line, + byteOffset: 0, + ); + + final parsed = parser.parseRecord(record); + + switch (parsed.kind) { + case ParsedGcodeLineKind.command: + final command = parsed.command!; + commands.add(command); + final segment = builder.accept(command); + if (segment != null) { + segments.add(segment); + } + case ParsedGcodeLineKind.error: + errors.add(parsed.error!); + case ParsedGcodeLineKind.skipped: + break; + } + + changedSinceSnapshot++; + if (changedSinceSnapshot >= options.snapshotBatchSize) { + changedSinceSnapshot = 0; + final b = builder.bounds; + sendPort.send( + GcodeLoadSnapshot( + stage: GcodeLoadStage.parsing, + commands: commands, + errors: errors, + segments: segments, + linesRead: linesRead, + message: '已读取 $linesRead 行', + bounds: b.minX != 0 || b.maxX != 0 || b.minY != 0 || b.maxY != 0 + ? b + : null, + ), + ); + } + } + + final b = builder.bounds; + sendPort.send( + GcodeLoadSnapshot( + stage: GcodeLoadStage.ready, + commands: commands, + errors: errors, + segments: segments, + linesRead: linesRead, + message: '逐行读取完成: $linesRead 行, ' + '${commands.length} 条指令, ${errors.length} 个错误, ' + '${segments.length} 条轨迹段', + bounds: b.minX != 0 || b.maxX != 0 || b.minY != 0 || b.maxY != 0 + ? b + : null, + ), + ); + } catch (error) { + sendPort.send( + GcodeLoadSnapshot( + stage: GcodeLoadStage.failed, + commands: commands, + errors: errors, + segments: segments, + linesRead: linesRead, + message: '读取失败: $error', + ), + ); + } + + sendPort.send(const _IsolateDone()); + } +} + +class _IsolateDone { + const _IsolateDone(); +} diff --git a/packages/gcode_core/lib/src/core/gcode_bounds.dart b/packages/gcode_core/lib/src/core/gcode_bounds.dart new file mode 100644 index 0000000..22c26a2 --- /dev/null +++ b/packages/gcode_core/lib/src/core/gcode_bounds.dart @@ -0,0 +1,24 @@ +class GcodeBounds { + const GcodeBounds({ + required this.minX, + required this.maxX, + required this.minY, + required this.maxY, + }); + + static const zero = GcodeBounds(minX: 0, maxX: 0, minY: 0, maxY: 0); + + final double minX; + final double maxX; + final double minY; + final double maxY; + + GcodeBounds expand(double x, double y) { + return GcodeBounds( + minX: x < minX ? x : minX, + maxX: x > maxX ? x : maxX, + minY: y < minY ? y : minY, + maxY: y > maxY ? y : maxY, + ); + } +} diff --git a/packages/gcode_core/lib/src/core/gcode_style.dart b/packages/gcode_core/lib/src/core/gcode_style.dart new file mode 100644 index 0000000..4cc5ec2 --- /dev/null +++ b/packages/gcode_core/lib/src/core/gcode_style.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; + +class GcodeStyle { + const GcodeStyle({ + required this.rapidMovePaint, + required this.rapidMoveBgPaint, + required this.linearMovePaint, + required this.linearMoveBgPaint, + required this.toolHeadPaint, + required this.toolHeadGlowPaint, + required this.originPaint, + required this.originDotPaint, + required this.gridPaint, + }); + + final Paint rapidMovePaint; + final Paint rapidMoveBgPaint; + final Paint linearMovePaint; + final Paint linearMoveBgPaint; + final Paint toolHeadPaint; + final Paint toolHeadGlowPaint; + final Paint originPaint; + final Paint originDotPaint; + final Paint gridPaint; + + factory GcodeStyle.light({ + Color rapidColor = Colors.red, + Color linearColor = Colors.green, + Color toolHeadColor = Colors.red, + Color originColor = const Color(0x99FF9800), + Color gridColor = const Color(0x26000000), + }) { + return GcodeStyle( + rapidMovePaint: Paint() + ..color = rapidColor + ..strokeWidth = 1.5 + ..style = PaintingStyle.stroke + ..strokeCap = StrokeCap.round, + rapidMoveBgPaint: Paint() + ..color = rapidColor.withValues(alpha: 0.25) + ..strokeWidth = 1 + ..style = PaintingStyle.stroke, + linearMovePaint: Paint() + ..color = linearColor + ..strokeWidth = 2.5 + ..style = PaintingStyle.stroke + ..strokeCap = StrokeCap.round, + linearMoveBgPaint: Paint() + ..color = linearColor.withValues(alpha: 0.15) + ..strokeWidth = 1 + ..style = PaintingStyle.stroke, + toolHeadPaint: Paint() + ..color = toolHeadColor + ..style = PaintingStyle.fill, + toolHeadGlowPaint: Paint() + ..color = toolHeadColor.withValues(alpha: 0.3) + ..style = PaintingStyle.fill, + originPaint: Paint() + ..color = originColor + ..strokeWidth = 1.5 + ..style = PaintingStyle.stroke, + originDotPaint: Paint() + ..color = originColor + ..style = PaintingStyle.fill, + gridPaint: Paint() + ..color = gridColor + ..strokeWidth = 0.5, + ); + } +} diff --git a/packages/gcode_core/lib/src/data/readers/file_gcode_line_reader.dart b/packages/gcode_core/lib/src/data/readers/file_gcode_line_reader.dart new file mode 100644 index 0000000..b90532b --- /dev/null +++ b/packages/gcode_core/lib/src/data/readers/file_gcode_line_reader.dart @@ -0,0 +1,74 @@ +import 'dart:convert'; +import 'dart:io'; + +import '../../domain/gcode_line_record.dart'; +import 'gcode_line_reader.dart'; + +class FileGcodeLineReader implements GcodeLineReader { + const FileGcodeLineReader(this.path); + + final String path; + + static String normalizePath(String value) { + var normalized = value.trim(); + if (normalized.length >= 2) { + final first = normalized[0]; + final last = normalized[normalized.length - 1]; + if ((first == '"' && last == '"') || (first == "'" && last == "'")) { + normalized = normalized.substring(1, normalized.length - 1).trim(); + } + } + + if (normalized.startsWith('file://')) { + normalized = + Uri.parse(normalized).toFilePath(windows: Platform.isWindows); + } + + final home = Platform.environment['HOME'] ?? + Platform.environment['USERPROFILE'] ?? + ''; + if (home.isNotEmpty && normalized == '~') { + normalized = home; + } else if (home.isNotEmpty && normalized.startsWith('~/')) { + normalized = '$home/${normalized.substring(2)}'; + } + + if (!Platform.isWindows) { + normalized = normalized.replaceAllMapped( + RegExp(r'\\([ ()\[\]&;])'), + (match) => match.group(1)!, + ); + } + + return normalized; + } + + @override + Stream readLines() async* { + final normalizedPath = normalizePath(path); + final type = await FileSystemEntity.type(normalizedPath); + if (type == FileSystemEntityType.notFound) { + throw FileSystemException('文件不存在', normalizedPath); + } + if (type == FileSystemEntityType.directory) { + throw FileSystemException('路径是目录,不是 G-code 文件', normalizedPath); + } + + final file = File(normalizedPath); + var lineNumber = 0; + var byteOffset = 0; + + await for (final line in file + .openRead() + .transform(utf8.decoder) + .transform(const LineSplitter())) { + lineNumber++; + yield GcodeLineRecord( + lineNumber: lineNumber, + rawLine: line, + byteOffset: byteOffset, + ); + byteOffset += utf8.encode(line).length + 1; + } + } +} diff --git a/packages/gcode_core/lib/src/data/readers/gcode_line_reader.dart b/packages/gcode_core/lib/src/data/readers/gcode_line_reader.dart new file mode 100644 index 0000000..4691395 --- /dev/null +++ b/packages/gcode_core/lib/src/data/readers/gcode_line_reader.dart @@ -0,0 +1,5 @@ +import '../../domain/gcode_line_record.dart'; + +abstract interface class GcodeLineReader { + Stream readLines(); +} diff --git a/packages/gcode_core/lib/src/data/readers/string_gcode_line_reader.dart b/packages/gcode_core/lib/src/data/readers/string_gcode_line_reader.dart new file mode 100644 index 0000000..a122ef8 --- /dev/null +++ b/packages/gcode_core/lib/src/data/readers/string_gcode_line_reader.dart @@ -0,0 +1,39 @@ +import '../../domain/gcode_line_record.dart'; +import 'gcode_line_reader.dart'; + +class StringGcodeLineReader implements GcodeLineReader { + const StringGcodeLineReader(this.source); + + final String source; + + @override + Stream readLines() async* { + var lineNumber = 0; + var byteOffset = 0; + var start = 0; + + for (var i = 0; i < source.length; i++) { + final codeUnit = source.codeUnitAt(i); + if (codeUnit != 10) continue; + + lineNumber++; + final end = i > start && source.codeUnitAt(i - 1) == 13 ? i - 1 : i; + yield GcodeLineRecord( + lineNumber: lineNumber, + rawLine: source.substring(start, end), + byteOffset: byteOffset, + ); + byteOffset = i + 1; + start = i + 1; + } + + if (start < source.length || source.isEmpty) { + lineNumber++; + yield GcodeLineRecord( + lineNumber: lineNumber, + rawLine: source.substring(start), + byteOffset: byteOffset, + ); + } + } +} diff --git a/packages/gcode_core/lib/src/domain/gcode_line_record.dart b/packages/gcode_core/lib/src/domain/gcode_line_record.dart new file mode 100644 index 0000000..be8fa24 --- /dev/null +++ b/packages/gcode_core/lib/src/domain/gcode_line_record.dart @@ -0,0 +1,11 @@ +class GcodeLineRecord { + const GcodeLineRecord({ + required this.lineNumber, + required this.rawLine, + required this.byteOffset, + }); + + final int lineNumber; + final String rawLine; + final int byteOffset; +} diff --git a/packages/gcode_core/lib/src/domain/gcode_load_snapshot.dart b/packages/gcode_core/lib/src/domain/gcode_load_snapshot.dart new file mode 100644 index 0000000..2e5bc95 --- /dev/null +++ b/packages/gcode_core/lib/src/domain/gcode_load_snapshot.dart @@ -0,0 +1,41 @@ +import '../core/gcode_bounds.dart'; +import '../models/gcode_command.dart'; +import '../models/toolpath_segment.dart'; +import '../parser/gcode_parse_result.dart'; +import 'gcode_load_stage.dart'; + +class GcodeLoadSnapshot { + const GcodeLoadSnapshot({ + required this.stage, + required this.commands, + required this.errors, + required this.segments, + required this.linesRead, + this.message = '', + this.diagnosticMessage = '', + this.bounds, + }); + + factory GcodeLoadSnapshot.empty() { + return const GcodeLoadSnapshot( + stage: GcodeLoadStage.idle, + commands: [], + errors: [], + segments: [], + linesRead: 0, + ); + } + + final GcodeLoadStage stage; + final List commands; + final List errors; + final List segments; + final int linesRead; + final String message; + final String diagnosticMessage; + final GcodeBounds? bounds; + + GcodeParseResult toParseResult() { + return GcodeParseResult(commands: commands, errors: errors); + } +} diff --git a/packages/gcode_core/lib/src/domain/gcode_load_stage.dart b/packages/gcode_core/lib/src/domain/gcode_load_stage.dart new file mode 100644 index 0000000..dffe2da --- /dev/null +++ b/packages/gcode_core/lib/src/domain/gcode_load_stage.dart @@ -0,0 +1,7 @@ +enum GcodeLoadStage { + idle, + reading, + parsing, + ready, + failed, +} diff --git a/packages/gcode_core/lib/src/domain/parsed_gcode_line.dart b/packages/gcode_core/lib/src/domain/parsed_gcode_line.dart new file mode 100644 index 0000000..712a52b --- /dev/null +++ b/packages/gcode_core/lib/src/domain/parsed_gcode_line.dart @@ -0,0 +1,51 @@ +import '../models/gcode_command.dart'; +import '../parser/gcode_parse_result.dart'; +import 'gcode_line_record.dart'; + +enum ParsedGcodeLineKind { command, error, skipped } + +class ParsedGcodeLine { + const ParsedGcodeLine._({ + required this.kind, + required this.record, + this.command, + this.error, + }); + + factory ParsedGcodeLine.command( + GcodeLineRecord record, + GcodeCommand command, + ) { + return ParsedGcodeLine._( + kind: ParsedGcodeLineKind.command, + record: record, + command: command, + ); + } + + factory ParsedGcodeLine.error( + GcodeLineRecord record, + GcodeParseError error, + ) { + return ParsedGcodeLine._( + kind: ParsedGcodeLineKind.error, + record: record, + error: error, + ); + } + + factory ParsedGcodeLine.skipped(GcodeLineRecord record) { + return ParsedGcodeLine._( + kind: ParsedGcodeLineKind.skipped, + record: record, + ); + } + + final ParsedGcodeLineKind kind; + final GcodeLineRecord record; + final GcodeCommand? command; + final GcodeParseError? error; + + bool get hasCommand => kind == ParsedGcodeLineKind.command; + bool get hasError => kind == ParsedGcodeLineKind.error; +} diff --git a/packages/gcode_core/lib/src/models/gcode_command.dart b/packages/gcode_core/lib/src/models/gcode_command.dart new file mode 100644 index 0000000..46fe468 --- /dev/null +++ b/packages/gcode_core/lib/src/models/gcode_command.dart @@ -0,0 +1,31 @@ +import 'machine_position.dart'; + +enum GcodeSegmentType { rapid, linear } + +class GcodeCommand { + const GcodeCommand({ + required this.lineNumber, + required this.rawLine, + required this.code, + required this.params, + this.comment = '', + }); + + final int lineNumber; + final String rawLine; + final String code; + final Map params; + final String comment; + + double? get x => params['X']; + double? get y => params['Y']; + double? get feedRate => params['F']; + + MachinePosition toPosition(MachinePosition current) { + return MachinePosition( + x: x ?? current.x, + y: y ?? current.y, + feedRate: feedRate ?? current.feedRate, + ); + } +} diff --git a/packages/gcode_core/lib/src/models/machine_position.dart b/packages/gcode_core/lib/src/models/machine_position.dart new file mode 100644 index 0000000..057d958 --- /dev/null +++ b/packages/gcode_core/lib/src/models/machine_position.dart @@ -0,0 +1,24 @@ +class MachinePosition { + const MachinePosition({ + this.x = 0, + this.y = 0, + this.feedRate = 0, + }); + + final double x; + final double y; + final double feedRate; + + MachinePosition copyWith({double? x, double? y, double? feedRate}) { + return MachinePosition( + x: x ?? this.x, + y: y ?? this.y, + feedRate: feedRate ?? this.feedRate, + ); + } + + @override + String toString() { + return 'MachinePosition(x: $x, y: $y, F: $feedRate)'; + } +} diff --git a/packages/gcode_core/lib/src/models/toolpath_segment.dart b/packages/gcode_core/lib/src/models/toolpath_segment.dart new file mode 100644 index 0000000..00a2722 --- /dev/null +++ b/packages/gcode_core/lib/src/models/toolpath_segment.dart @@ -0,0 +1,16 @@ +import 'gcode_command.dart'; +import 'machine_position.dart'; + +class ToolpathSegment { + const ToolpathSegment({ + required this.start, + required this.end, + required this.command, + required this.type, + }); + + final MachinePosition start; + final MachinePosition end; + final GcodeCommand command; + final GcodeSegmentType type; +} diff --git a/packages/gcode_core/lib/src/parser/gcode_parse_result.dart b/packages/gcode_core/lib/src/parser/gcode_parse_result.dart new file mode 100644 index 0000000..87b3966 --- /dev/null +++ b/packages/gcode_core/lib/src/parser/gcode_parse_result.dart @@ -0,0 +1,28 @@ +import '../models/gcode_command.dart'; + +class GcodeParseError { + const GcodeParseError({ + required this.lineNumber, + required this.rawLine, + required this.message, + }); + + final int lineNumber; + final String rawLine; + final String message; + + @override + String toString() => 'Line $lineNumber: $message (raw: "$rawLine")'; +} + +class GcodeParseResult { + const GcodeParseResult({ + required this.commands, + required this.errors, + }); + + final List commands; + final List errors; + + bool get hasErrors => errors.isNotEmpty; +} diff --git a/packages/gcode_core/lib/src/parser/gcode_parser.dart b/packages/gcode_core/lib/src/parser/gcode_parser.dart new file mode 100644 index 0000000..52e0ada --- /dev/null +++ b/packages/gcode_core/lib/src/parser/gcode_parser.dart @@ -0,0 +1,205 @@ +import '../models/gcode_command.dart'; +import '../domain/gcode_line_record.dart'; +import '../domain/parsed_gcode_line.dart'; +import 'gcode_parse_result.dart'; + +class GcodeParser { + static const _supportedCodes = {'G0', 'G00', 'G1', 'G01', 'G90', 'G91'}; + static final _paramPattern = RegExp(r'^([A-Za-z])(-?(?:\d+\.?\d*|\.\d+))$'); + + GcodeParseResult parse(String source) { + final commands = []; + final errors = []; + final lines = source.split('\n'); + + for (var i = 0; i < lines.length; i++) { + final lineNumber = i + 1; + final rawLine = lines[i].trim(); + + if (rawLine.isEmpty) continue; + + final result = parseLine(rawLine, lineNumber); + + result.when( + command: (cmd) => commands.add(cmd), + error: (err) => errors.add(err), + skipped: () {}, + ); + } + + return GcodeParseResult(commands: commands, errors: errors); + } + + ParsedGcodeLine parseRecord(GcodeLineRecord record) { + final result = parseLine(record.rawLine.trim(), record.lineNumber); + return result.when( + command: (cmd) => ParsedGcodeLine.command(record, cmd), + error: (err) => ParsedGcodeLine.error(record, err), + skipped: () => ParsedGcodeLine.skipped(record), + ); + } + + LineParseResult parseLine(String rawLine, int lineNumber) { + var line = rawLine; + + line = _removeParenthesesComments(line); + + final comment = _extractSemicolonComment(line); + line = comment != null + ? line.substring(0, line.indexOf(';')).trim() + : line.trim(); + + if (line.isEmpty) { + return LineParseResult.skipped(); + } + + final tokens = _tokenize(line); + if (tokens.isEmpty) { + return LineParseResult.skipped(); + } + + final commandCode = tokens[0].toUpperCase(); + + final normalized = _normalizeCode(commandCode); + if (!_supportedCodes.contains(normalized)) { + return LineParseResult.error( + GcodeParseError( + lineNumber: lineNumber, + rawLine: rawLine, + message: 'Unsupported code: $commandCode', + ), + ); + } + + final params = {}; + for (var i = 1; i < tokens.length; i++) { + final token = tokens[i]; + final match = _paramPattern.firstMatch(token); + if (match == null) { + return LineParseResult.error( + GcodeParseError( + lineNumber: lineNumber, + rawLine: rawLine, + message: 'Malformed parameter: $token', + ), + ); + } + final key = match.group(1)!.toUpperCase(); + final valueStr = match.group(2); + if (valueStr == null) { + return LineParseResult.error( + GcodeParseError( + lineNumber: lineNumber, + rawLine: rawLine, + message: 'Missing numeric value in: $token', + ), + ); + } + final value = double.tryParse(valueStr); + if (value == null) { + return LineParseResult.error( + GcodeParseError( + lineNumber: lineNumber, + rawLine: rawLine, + message: 'Invalid numeric value: $token', + ), + ); + } + params[key] = value; + } + + return LineParseResult.command( + GcodeCommand( + lineNumber: lineNumber, + rawLine: rawLine, + code: normalized, + params: params, + comment: comment ?? '', + ), + ); + } + + String _removeParenthesesComments(String line) { + final result = StringBuffer(); + var inComment = false; + for (var i = 0; i < line.length; i++) { + final ch = line[i]; + if (ch == '(') { + inComment = true; + } else if (ch == ')') { + inComment = false; + } else if (!inComment) { + result.write(ch); + } + } + return result.toString(); + } + + String? _extractSemicolonComment(String line) { + final index = line.indexOf(';'); + if (index == -1) return null; + return line.substring(index + 1).trim(); + } + + List _tokenize(String line) { + final tokens = []; + final buffer = StringBuffer(); + for (var i = 0; i < line.length; i++) { + final ch = line[i]; + if (ch == ' ' || ch == '\t') { + if (buffer.isNotEmpty) { + tokens.add(buffer.toString()); + buffer.clear(); + } + } else { + buffer.write(ch); + } + } + if (buffer.isNotEmpty) { + tokens.add(buffer.toString()); + } + return tokens; + } + + String _normalizeCode(String code) { + return switch (code) { + 'G0' || 'G00' => 'G0', + 'G1' || 'G01' => 'G1', + _ => code, + }; + } +} + +sealed class LineParseResult { + const LineParseResult(); + + factory LineParseResult.command(GcodeCommand cmd) => _CommandResult(cmd); + factory LineParseResult.error(GcodeParseError err) => _ErrorResult(err); + factory LineParseResult.skipped() => const _SkippedResult(); + + T when({ + required T Function(GcodeCommand) command, + required T Function(GcodeParseError) error, + required T Function() skipped, + }) { + return switch (this) { + _CommandResult(:final cmd) => command(cmd), + _ErrorResult(:final err) => error(err), + _SkippedResult() => skipped(), + }; + } +} + +class _CommandResult extends LineParseResult { + const _CommandResult(this.cmd); + final GcodeCommand cmd; +} + +class _ErrorResult extends LineParseResult { + const _ErrorResult(this.err); + final GcodeParseError err; +} + +class _SkippedResult extends LineParseResult { + const _SkippedResult(); +} diff --git a/packages/gcode_core/lib/src/services/toolpath_builder.dart b/packages/gcode_core/lib/src/services/toolpath_builder.dart new file mode 100644 index 0000000..ad3fc96 --- /dev/null +++ b/packages/gcode_core/lib/src/services/toolpath_builder.dart @@ -0,0 +1,107 @@ +import '../core/gcode_bounds.dart'; +import '../models/gcode_command.dart'; +import '../models/machine_position.dart'; +import '../models/toolpath_segment.dart'; + +enum CoordinateMode { absolute, relative } + +MachinePosition _applyCommand( + GcodeCommand cmd, MachinePosition current, CoordinateMode mode) { + if (mode == CoordinateMode.absolute) { + return cmd.toPosition(current); + } + return MachinePosition( + x: cmd.x != null ? current.x + cmd.x! : current.x, + y: cmd.y != null ? current.y + cmd.y! : current.y, + feedRate: cmd.feedRate ?? current.feedRate, + ); +} + +class ToolpathBuilder { + static List build(List commands) { + final segments = []; + var current = const MachinePosition(); + var mode = CoordinateMode.absolute; + + for (final cmd in commands) { + if (cmd.code == 'G90') { + mode = CoordinateMode.absolute; + continue; + } + if (cmd.code == 'G91') { + mode = CoordinateMode.relative; + continue; + } + + final next = _applyCommand(cmd, current, mode); + + if (next.x != current.x || next.y != current.y) { + final type = + cmd.code == 'G0' ? GcodeSegmentType.rapid : GcodeSegmentType.linear; + + segments.add( + ToolpathSegment( + start: current, + end: next, + command: cmd, + type: type, + ), + ); + } + + current = next; + } + + return segments; + } +} + +class IncrementalToolpathBuilder { + MachinePosition _current = const MachinePosition(); + GcodeBounds _bounds = GcodeBounds.zero; + CoordinateMode _mode = CoordinateMode.absolute; + + MachinePosition get current => _current; + + GcodeBounds get bounds => _bounds; + + CoordinateMode get coordinateMode => _mode; + + ToolpathSegment? accept(GcodeCommand command) { + if (command.code == 'G90') { + _mode = CoordinateMode.absolute; + return null; + } + if (command.code == 'G91') { + _mode = CoordinateMode.relative; + return null; + } + + final next = _applyCommand(command, _current, _mode); + + if (next.x == _current.x && next.y == _current.y) { + _current = next; + return null; + } + + _bounds = _bounds.expand(_current.x, _current.y).expand(next.x, next.y); + + final segment = ToolpathSegment( + start: _current, + end: next, + command: command, + type: command.code == 'G0' + ? GcodeSegmentType.rapid + : GcodeSegmentType.linear, + ); + + _current = next; + return segment; + } + + void reset() { + _current = const MachinePosition(); + _bounds = GcodeBounds.zero; + _mode = CoordinateMode.absolute; + } +} diff --git a/packages/gcode_core/lib/src/widgets/command_timeline.dart b/packages/gcode_core/lib/src/widgets/command_timeline.dart new file mode 100644 index 0000000..9b8f78b --- /dev/null +++ b/packages/gcode_core/lib/src/widgets/command_timeline.dart @@ -0,0 +1,214 @@ +import 'package:flutter/material.dart'; + +import '../models/gcode_command.dart'; +import '../parser/gcode_parse_result.dart'; + +class CommandTimeline extends StatelessWidget { + const CommandTimeline({ + super.key, + required this.commands, + required this.errors, + this.currentIndex = -1, + this.onTap, + this.maxHeight, + }); + + final List commands; + final List errors; + final int currentIndex; + final ValueChanged? onTap; + final double? maxHeight; + + @override + Widget build(BuildContext context) { + final items = _buildTimelineItems(); + + return Container( + constraints: + maxHeight != null ? BoxConstraints(maxHeight: maxHeight!) : null, + decoration: BoxDecoration( + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.grey.shade300), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(12, 8, 12, 4), + child: Row( + children: [ + Text( + '指令列表 (${commands.length})', + style: Theme.of(context).textTheme.labelMedium?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + if (errors.isNotEmpty) + Padding( + padding: const EdgeInsets.only(left: 8), + child: Container( + padding: const EdgeInsets.symmetric( + horizontal: 6, vertical: 2), + decoration: BoxDecoration( + color: Colors.red.withValues(alpha: 0.1), + borderRadius: BorderRadius.circular(4), + ), + child: Text( + '${errors.length} 错误', + style: const TextStyle( + fontSize: 11, + color: Colors.red, + fontWeight: FontWeight.w500, + ), + ), + ), + ), + ], + ), + ), + const Divider(height: 1), + Flexible( + child: ListView.builder( + shrinkWrap: true, + itemCount: items.length, + itemBuilder: (context, index) { + final item = items[index]; + final cmd = item.command; + final error = item.error; + final commandIndex = cmd == null ? -1 : commands.indexOf(cmd); + final isCurrent = + commandIndex >= 0 && commandIndex == currentIndex; + final hasError = error != null; + final code = cmd?.code; + + return InkWell( + onTap: onTap != null && commandIndex >= 0 + ? () => onTap!(commandIndex) + : null, + child: Container( + padding: + const EdgeInsets.symmetric(horizontal: 12, vertical: 6), + decoration: BoxDecoration( + color: isCurrent + ? Theme.of(context).colorScheme.primaryContainer + : hasError + ? Colors.red.withValues(alpha: 0.05) + : null, + ), + child: Row( + children: [ + SizedBox( + width: 32, + child: Text( + '${item.lineNumber}', + style: TextStyle( + fontSize: 11, + color: hasError + ? Colors.red.shade500 + : Colors.grey.shade500, + fontFamily: 'monospace', + ), + ), + ), + const SizedBox(width: 8), + Container( + padding: const EdgeInsets.symmetric( + horizontal: 4, vertical: 1), + decoration: BoxDecoration( + color: hasError + ? Colors.red.withValues(alpha: 0.15) + : code == 'G0' + ? Colors.blue.withValues(alpha: 0.15) + : Colors.green.withValues(alpha: 0.15), + borderRadius: BorderRadius.circular(3), + ), + child: Text( + hasError ? 'ERR' : code ?? '', + style: TextStyle( + fontSize: 11, + fontWeight: FontWeight.w600, + color: hasError + ? Colors.red + : code == 'G0' + ? Colors.blue + : Colors.green, + fontFamily: 'monospace', + ), + ), + ), + const SizedBox(width: 8), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + item.rawLine, + style: TextStyle( + fontSize: 12, + fontFamily: 'monospace', + color: hasError + ? Colors.red.shade700 + : isCurrent + ? null + : Colors.grey.shade700, + ), + ), + if (hasError) + Text( + error.message, + style: TextStyle( + fontSize: 11, + color: Colors.red.shade600, + ), + ), + ], + ), + ), + ], + ), + ), + ); + }, + ), + ), + ], + ), + ); + } + + List<_TimelineItem> _buildTimelineItems() { + final items = <_TimelineItem>[ + for (final command in commands) _TimelineItem.command(command), + for (final error in errors) _TimelineItem.error(error), + ]; + items.sort((a, b) => a.lineNumber.compareTo(b.lineNumber)); + return items; + } +} + +class _TimelineItem { + const _TimelineItem._({ + required this.lineNumber, + required this.rawLine, + this.command, + this.error, + }); + + factory _TimelineItem.command(GcodeCommand command) => _TimelineItem._( + lineNumber: command.lineNumber, + rawLine: command.rawLine, + command: command, + ); + + factory _TimelineItem.error(GcodeParseError error) => _TimelineItem._( + lineNumber: error.lineNumber, + rawLine: error.rawLine, + error: error, + ); + + final int lineNumber; + final String rawLine; + final GcodeCommand? command; + final GcodeParseError? error; +} diff --git a/packages/gcode_core/lib/src/widgets/gcode_canvas.dart b/packages/gcode_core/lib/src/widgets/gcode_canvas.dart new file mode 100644 index 0000000..e5451e5 --- /dev/null +++ b/packages/gcode_core/lib/src/widgets/gcode_canvas.dart @@ -0,0 +1,502 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +import '../core/gcode_bounds.dart'; +import '../core/gcode_style.dart'; +import '../models/gcode_command.dart'; +import '../models/toolpath_segment.dart'; + +class GcodeCanvas extends StatelessWidget { + const GcodeCanvas({ + super.key, + required this.segments, + required this.progress, + this.errorCount = 0, + this.commandCount = 0, + this.bounds, + this.style, + this.showLegend = true, + }); + + final List segments; + final double progress; + final int errorCount; + final int commandCount; + final GcodeBounds? bounds; + final GcodeStyle? style; + final bool showLegend; + + @override + Widget build(BuildContext context) { + final effectiveStyle = style ?? GcodeStyle.light(); + + return Container( + decoration: BoxDecoration( + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.grey.shade300), + ), + child: LayoutBuilder( + builder: (context, constraints) { + Widget content; + + if (segments.isEmpty && commandCount == 0) { + content = _buildEmptyState(); + } else if (segments.isEmpty && commandCount > 0) { + content = _buildNoMovementState(commandCount); + } else if (segments.isNotEmpty && errorCount > 0) { + content = _buildPartialErrorState(constraints, effectiveStyle); + } else { + content = Stack( + children: [ + CustomPaint( + size: Size(constraints.maxWidth, constraints.maxHeight), + painter: _ToolpathPainter( + segments: segments, + progress: progress, + bounds: bounds, + style: effectiveStyle, + ), + ), + if (showLegend) + Positioned( + left: 8, + bottom: 8, + child: _CanvasLegend(style: effectiveStyle), + ), + ], + ); + } + + return content; + }, + ), + ); + } + + Widget _buildEmptyState() { + return const Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.draw_outlined, size: 48, color: Colors.grey), + SizedBox(height: 12), + Text( + '输入并解析 G-code 后显示轨迹', + style: TextStyle(fontSize: 14, color: Colors.grey), + ), + ], + ), + ); + } + + Widget _buildNoMovementState(int cmds) { + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Icon(Icons.info_outline, size: 48, color: Colors.orange.shade300), + const SizedBox(height: 12), + Text( + '已解析 $cmds 条指令,但未产生运动轨迹', + style: const TextStyle(fontSize: 14, color: Colors.grey), + ), + const SizedBox(height: 4), + Text( + '提示:G1 F1200 仅设置进给率,需配合 X/Y 坐标', + style: TextStyle(fontSize: 12, color: Colors.grey.shade500), + ), + ], + ), + ); + } + + Widget _buildPartialErrorState(BoxConstraints constraints, GcodeStyle style) { + return Stack( + children: [ + CustomPaint( + size: Size(constraints.maxWidth, constraints.maxHeight), + painter: _ToolpathPainter( + segments: segments, + progress: progress, + bounds: bounds, + style: style, + ), + ), + if (showLegend) + Positioned( + left: 8, + bottom: 8, + child: _CanvasLegend(style: style), + ), + Positioned( + top: 8, + right: 8, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + decoration: BoxDecoration( + color: Colors.red.withValues(alpha: 0.8), + borderRadius: BorderRadius.circular(4), + ), + child: Text( + '$errorCount 个解析错误', + style: const TextStyle( + fontSize: 11, + color: Colors.white, + fontWeight: FontWeight.w500, + ), + ), + ), + ), + ], + ); + } +} + +class _CanvasLegend extends StatelessWidget { + const _CanvasLegend({required this.style}); + + final GcodeStyle style; + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.white.withValues(alpha: 0.85), + borderRadius: BorderRadius.circular(6), + border: Border.all(color: Colors.grey.shade300), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + _legendRow(style.rapidMovePaint, 'G0 快速移动', isDashed: true), + const SizedBox(height: 4), + _legendRow(style.linearMovePaint, 'G1 线性移动'), + const SizedBox(height: 4), + _legendRow(style.toolHeadPaint, '当前刀头', isCircle: true), + const SizedBox(height: 4), + _legendRow( + Paint() + ..color = const Color(0x99FF9800) + ..strokeWidth = 1.5, + '原点', + isCross: true), + ], + ), + ); + } + + Widget _legendRow(Paint paint, String label, + {bool isDashed = false, bool isCircle = false, bool isCross = false}) { + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + width: 24, + height: 12, + child: CustomPaint( + painter: _LegendIconPainter( + iconPaint: paint, + isDashed: isDashed, + isCircle: isCircle, + isCross: isCross, + ), + ), + ), + const SizedBox(width: 6), + Text(label, style: const TextStyle(fontSize: 11)), + ], + ); + } +} + +class _LegendIconPainter extends CustomPainter { + _LegendIconPainter({ + required Paint iconPaint, + this.isDashed = false, + this.isCircle = false, + this.isCross = false, + }) : _iconPaint = iconPaint; + + final Paint _iconPaint; + final bool isDashed; + final bool isCircle; + final bool isCross; + + @override + void paint(Canvas canvas, Size size) { + if (isCircle) { + canvas.drawCircle(Offset(size.width / 2, size.height / 2), 4, _iconPaint); + } else if (isCross) { + final cx = size.width / 2; + final cy = size.height / 2; + canvas.drawLine(Offset(cx - 4, cy), Offset(cx + 4, cy), _iconPaint); + canvas.drawLine(Offset(cx, cy - 4), Offset(cx, cy + 4), _iconPaint); + } else if (isDashed) { + const dash = 4.0; + const gap = 3.0; + var dx = 0.0; + while (dx < size.width) { + final end = (dx + dash).clamp(0.0, size.width); + canvas.drawLine(Offset(dx, size.height / 2), + Offset(end, size.height / 2), _iconPaint); + dx = end + gap; + } + } else { + canvas.drawLine( + Offset(0, size.height / 2), + Offset(size.width, size.height / 2), + _iconPaint, + ); + } + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) => false; +} + +class _ToolpathPainter extends CustomPainter { + _ToolpathPainter({ + required this.segments, + required this.progress, + required this.bounds, + required this.style, + }); + + final List segments; + final double progress; + final GcodeBounds? bounds; + final GcodeStyle style; + + static const _padding = 30.0; + static const _gridSpacing = 20.0; + + @override + void paint(Canvas canvas, Size size) { + if (segments.isEmpty) return; + + final b = bounds ?? _computeBounds(); + final machineRangeX = max(b.maxX - b.minX, 1.0); + final machineRangeY = max(b.maxY - b.minY, 1.0); + final scaleX = (size.width - _padding * 2) / machineRangeX; + final scaleY = (size.height - _padding * 2) / machineRangeY; + final scale = min(scaleX, scaleY); + + final offsetX = + _padding + (size.width - _padding * 2 - machineRangeX * scale) / 2; + final offsetY = + _padding + (size.height - _padding * 2 - machineRangeY * scale) / 2; + + _drawGrid(canvas, size, b, scale, offsetX, offsetY); + _drawFullPath(canvas, b, scale, offsetX, offsetY); + _drawAnimatedPath(canvas, b, scale, offsetX, offsetY); + _drawToolHead(canvas, b, scale, offsetX, offsetY); + _drawOrigin(canvas, b, scale, offsetX, offsetY); + } + + void _drawGrid( + Canvas canvas, + Size size, + GcodeBounds bounds, + double scale, + double offsetX, + double offsetY, + ) { + final gridStep = _gridSpacing / scale; + + var x = (bounds.minX / gridStep).floor() * gridStep; + while (x <= bounds.maxX) { + final sx = offsetX + (x - bounds.minX) * scale; + canvas.drawLine( + Offset(sx, offsetY), + Offset(sx, offsetY + (bounds.maxY - bounds.minY) * scale), + style.gridPaint, + ); + x += gridStep; + } + + var y = (bounds.minY / gridStep).floor() * gridStep; + while (y <= bounds.maxY) { + final sy = offsetY + (bounds.maxY - y - bounds.minY) * scale; + canvas.drawLine( + Offset(offsetX, sy), + Offset(offsetX + (bounds.maxX - bounds.minX) * scale, sy), + style.gridPaint, + ); + y += gridStep; + } + } + + void _drawFullPath( + Canvas canvas, + GcodeBounds bounds, + double scale, + double offsetX, + double offsetY, + ) { + for (final seg in segments) { + final sx = offsetX + (seg.start.x - bounds.minX) * scale; + final sy = offsetY + (bounds.maxY - seg.start.y - bounds.minY) * scale; + final ex = offsetX + (seg.end.x - bounds.minX) * scale; + final ey = offsetY + (bounds.maxY - seg.end.y - bounds.minY) * scale; + + if (seg.type == GcodeSegmentType.rapid) { + _drawDashedLine( + canvas, + Offset(sx, sy), + Offset(ex, ey), + style.rapidMoveBgPaint, + ); + } else { + canvas.drawLine( + Offset(sx, sy), + Offset(ex, ey), + style.linearMoveBgPaint, + ); + } + } + } + + void _drawAnimatedPath( + Canvas canvas, + GcodeBounds bounds, + double scale, + double offsetX, + double offsetY, + ) { + if (progress <= 0 || segments.isEmpty) return; + + final totalSegments = segments.length; + final currentSegFloat = progress * totalSegments; + final currentSegIndex = currentSegFloat.floor().clamp(0, totalSegments - 1); + final localProgress = (currentSegFloat - currentSegIndex).clamp(0.0, 1.0); + + for (var i = 0; i <= currentSegIndex && i < totalSegments; i++) { + final seg = segments[i]; + final isCurrent = i == currentSegIndex; + + var endX = seg.end.x; + var endY = seg.end.y; + + if (isCurrent) { + endX = seg.start.x + (seg.end.x - seg.start.x) * localProgress; + endY = seg.start.y + (seg.end.y - seg.start.y) * localProgress; + } + + final sx = offsetX + (seg.start.x - bounds.minX) * scale; + final sy = offsetY + (bounds.maxY - seg.start.y - bounds.minY) * scale; + final ex = offsetX + (endX - bounds.minX) * scale; + final ey = offsetY + (bounds.maxY - endY - bounds.minY) * scale; + + if (seg.type == GcodeSegmentType.rapid) { + _drawDashedLine( + canvas, + Offset(sx, sy), + Offset(ex, ey), + style.rapidMovePaint, + ); + } else { + canvas.drawLine( + Offset(sx, sy), + Offset(ex, ey), + style.linearMovePaint, + ); + } + } + } + + void _drawDashedLine(Canvas canvas, Offset start, Offset end, Paint paint) { + const dashLength = 7.0; + const gapLength = 5.0; + final delta = end - start; + final distance = delta.distance; + if (distance == 0) return; + + final direction = delta / distance; + var current = 0.0; + while (current < distance) { + final next = min(current + dashLength, distance); + canvas.drawLine( + start + direction * current, + start + direction * next, + paint, + ); + current = next + gapLength; + } + } + + void _drawToolHead( + Canvas canvas, + GcodeBounds bounds, + double scale, + double offsetX, + double offsetY, + ) { + if (progress <= 0 || segments.isEmpty) return; + + final totalSegments = segments.length; + final currentSegFloat = progress * totalSegments; + final currentSegIndex = currentSegFloat.floor().clamp(0, totalSegments - 1); + final localProgress = (currentSegFloat - currentSegIndex).clamp(0.0, 1.0); + final seg = segments[currentSegIndex]; + + final toolX = seg.start.x + (seg.end.x - seg.start.x) * localProgress; + final toolY = seg.start.y + (seg.end.y - seg.start.y) * localProgress; + + final sx = offsetX + (toolX - bounds.minX) * scale; + final sy = offsetY + (bounds.maxY - toolY - bounds.minY) * scale; + + canvas.drawCircle(Offset(sx, sy), 10, style.toolHeadGlowPaint); + canvas.drawCircle(Offset(sx, sy), 5, style.toolHeadPaint); + } + + void _drawOrigin( + Canvas canvas, + GcodeBounds bounds, + double scale, + double offsetX, + double offsetY, + ) { + final ox = offsetX + (0 - bounds.minX) * scale; + final oy = offsetY + (bounds.maxY - 0 - bounds.minY) * scale; + + const size = 6; + canvas.drawLine( + Offset(ox - size, oy), Offset(ox + size, oy), style.originPaint); + canvas.drawLine( + Offset(ox, oy - size), Offset(ox, oy + size), style.originPaint); + canvas.drawCircle(Offset(ox, oy), 2, style.originDotPaint); + } + + GcodeBounds _computeBounds() { + var minX = double.infinity; + var maxX = double.negativeInfinity; + var minY = double.infinity; + var maxY = double.negativeInfinity; + + for (final seg in segments) { + minX = min(minX, min(seg.start.x, seg.end.x)); + maxX = max(maxX, max(seg.start.x, seg.end.x)); + minY = min(minY, min(seg.start.y, seg.end.y)); + maxY = max(maxY, max(seg.start.y, seg.end.y)); + } + + return GcodeBounds( + minX: minX, + maxX: maxX, + minY: minY, + maxY: maxY, + ); + } + + @override + bool shouldRepaint(covariant _ToolpathPainter oldDelegate) { + return oldDelegate.progress != progress || + oldDelegate.segments != segments || + oldDelegate.bounds != bounds || + oldDelegate.style != style; + } +} diff --git a/packages/gcode_core/lib/src/widgets/playback_controls.dart b/packages/gcode_core/lib/src/widgets/playback_controls.dart new file mode 100644 index 0000000..5597d2d --- /dev/null +++ b/packages/gcode_core/lib/src/widgets/playback_controls.dart @@ -0,0 +1,115 @@ +import 'package:flutter/material.dart'; + +class PlaybackControls extends StatelessWidget { + const PlaybackControls({ + super.key, + required this.isPlaying, + required this.progress, + required this.speedMultiplier, + required this.onPlay, + required this.onPause, + required this.onReset, + required this.onSeek, + required this.onSpeedChange, + }); + + final bool isPlaying; + final double progress; + final double speedMultiplier; + final VoidCallback onPlay; + final VoidCallback onPause; + final VoidCallback onReset; + final ValueChanged onSeek; + final ValueChanged onSpeedChange; + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + decoration: BoxDecoration( + color: Colors.grey.shade50, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.grey.shade300), + ), + child: Column( + children: [ + Row( + children: [ + IconButton.filled( + onPressed: isPlaying ? onPause : onPlay, + icon: + Icon(isPlaying ? Icons.pause : Icons.play_arrow, size: 20), + style: IconButton.styleFrom( + minimumSize: const Size(36, 36), + tapTargetSize: MaterialTapTargetSize.shrinkWrap, + ), + ), + IconButton.filledTonal( + onPressed: onReset, + icon: const Icon(Icons.stop, size: 18), + style: IconButton.styleFrom( + minimumSize: const Size(36, 36), + tapTargetSize: MaterialTapTargetSize.shrinkWrap, + ), + ), + const SizedBox(width: 8), + Expanded( + child: SliderTheme( + data: const SliderThemeData( + trackHeight: 4, + thumbShape: RoundSliderThumbShape(enabledThumbRadius: 6), + overlayShape: RoundSliderOverlayShape(overlayRadius: 12), + ), + child: Slider( + value: progress, + onChanged: onSeek, + ), + ), + ), + const SizedBox(width: 8), + SizedBox( + width: 50, + child: Text( + '${(progress * 100).toStringAsFixed(0)}%', + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 12, fontFamily: 'monospace'), + ), + ), + ], + ), + Row( + children: [ + const Text('速度', style: TextStyle(fontSize: 12)), + const SizedBox(width: 8), + Expanded( + child: SliderTheme( + data: const SliderThemeData( + trackHeight: 2, + thumbShape: RoundSliderThumbShape(enabledThumbRadius: 5), + overlayShape: RoundSliderOverlayShape(overlayRadius: 10), + ), + child: Slider( + value: speedMultiplier, + min: 0.25, + max: 4.0, + divisions: 15, + label: '${speedMultiplier.toStringAsFixed(1)}x', + onChanged: onSpeedChange, + ), + ), + ), + SizedBox( + width: 40, + child: Text( + '${speedMultiplier.toStringAsFixed(1)}x', + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 12, fontFamily: 'monospace'), + ), + ), + ], + ), + ], + ), + ); + } +} diff --git a/packages/gcode_core/pubspec.yaml b/packages/gcode_core/pubspec.yaml new file mode 100644 index 0000000..38665af --- /dev/null +++ b/packages/gcode_core/pubspec.yaml @@ -0,0 +1,19 @@ +name: gcode_core +description: G-code parsing, line reading, toolpath building, and Flutter visualization widgets. +publish_to: 'none' +version: 0.1.0 + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + test: ^1.25.0 + lints: ^4.0.0 + +flutter: diff --git a/packages/gcode_core/test/application/gcode_readline_pipeline_test.dart b/packages/gcode_core/test/application/gcode_readline_pipeline_test.dart new file mode 100644 index 0000000..1138da7 --- /dev/null +++ b/packages/gcode_core/test/application/gcode_readline_pipeline_test.dart @@ -0,0 +1,80 @@ +import 'dart:io'; + +import 'package:test/test.dart'; +import 'package:gcode_core/gcode_core.dart'; + +void main() { + group('GcodeReadlinePipeline', () { + test('reads string source line by line and builds segments', () async { + const source = ''' +G0 X0 Y0 +G1 X10 Y0 +G2 X10 Y10 +G1 X10 Y10 +'''; + + final pipeline = GcodeReadlinePipeline( + options: const GcodeReadlineOptions(snapshotBatchSize: 2), + ); + final snapshots = + await pipeline.load(const StringGcodeLineReader(source)).toList(); + + expect(snapshots.first.stage, GcodeLoadStage.reading); + expect(snapshots.last.stage, GcodeLoadStage.ready); + expect(snapshots.last.linesRead, 4); + expect(snapshots.last.commands, hasLength(3)); + expect(snapshots.last.errors, hasLength(1)); + expect(snapshots.last.segments, hasLength(2)); + expect(snapshots.last.segments.last.end.x, 10); + expect(snapshots.last.segments.last.end.y, 10); + }); + + test('reads gcode from file path', () async { + final file = File('${Directory.systemTemp.path}/gcode_readline_test.nc'); + await file.writeAsString('G0 X0 Y0\nG1 X5 Y5\n'); + addTearDown(() { + if (file.existsSync()) { + file.deleteSync(); + } + }); + + final pipeline = GcodeReadlinePipeline(); + final snapshots = + await pipeline.load(FileGcodeLineReader(file.path)).toList(); + + expect(snapshots.last.stage, GcodeLoadStage.ready); + expect(snapshots.last.linesRead, 2); + expect(snapshots.last.commands, hasLength(2)); + expect(snapshots.last.segments, hasLength(1)); + expect(snapshots.last.segments.single.end.x, 5); + expect(snapshots.last.segments.single.end.y, 5); + }); + + test('normalizes copied file paths before opening', () async { + final file = + File('${Directory.systemTemp.path}/gcode readline copied path.nc'); + await file.writeAsString('G0 X0 Y0\nG1 X3 Y4\n'); + addTearDown(() { + if (file.existsSync()) { + file.deleteSync(); + } + }); + + final pipeline = GcodeReadlinePipeline(); + final quotedPathSnapshots = + await pipeline.load(FileGcodeLineReader('"${file.path}"')).toList(); + final fileUriSnapshots = await pipeline + .load(FileGcodeLineReader(file.uri.toString())) + .toList(); + final escapedPathSnapshots = await pipeline + .load(FileGcodeLineReader(file.path.replaceAll(' ', r'\ '))) + .toList(); + + expect(quotedPathSnapshots.last.stage, GcodeLoadStage.ready); + expect(fileUriSnapshots.last.stage, GcodeLoadStage.ready); + expect(escapedPathSnapshots.last.stage, GcodeLoadStage.ready); + expect(escapedPathSnapshots.last.segments.single.end.x, 3); + expect(escapedPathSnapshots.last.segments.single.end.y, 4); + }); + }); +} diff --git a/packages/gcode_core/test/gcode_parser_test.dart b/packages/gcode_core/test/gcode_parser_test.dart new file mode 100644 index 0000000..30e0823 --- /dev/null +++ b/packages/gcode_core/test/gcode_parser_test.dart @@ -0,0 +1,153 @@ +import 'package:test/test.dart'; +import 'package:gcode_core/gcode_core.dart'; + +void main() { + group('GcodeParser', () { + final parser = GcodeParser(); + + test('parses G0 uppercase', () { + final result = parser.parse('G0 X10 Y20'); + expect(result.commands, hasLength(1)); + expect(result.commands.first.code, 'G0'); + expect(result.commands.first.x, 10); + expect(result.commands.first.y, 20); + }); + + test('parses G1 uppercase', () { + final result = parser.parse('G1 X30 Y40 F500'); + expect(result.commands, hasLength(1)); + expect(result.commands.first.code, 'G1'); + expect(result.commands.first.x, 30); + expect(result.commands.first.y, 40); + expect(result.commands.first.feedRate, 500); + }); + + test('parses lowercase', () { + final result = parser.parse('g0 x10 y20'); + expect(result.commands, hasLength(1)); + expect(result.commands.first.code, 'G0'); + expect(result.commands.first.x, 10); + }); + + test('parses G00 and G01 aliases', () { + final r1 = parser.parse('G00 X5 Y5'); + expect(r1.commands.first.code, 'G0'); + + final r2 = parser.parse('G01 X5 Y5'); + expect(r2.commands.first.code, 'G1'); + }); + + test('parses semicolon comments', () { + final result = parser.parse('G1 X10 Y10 ; move to position'); + expect(result.commands, hasLength(1)); + expect(result.commands.first.comment, 'move to position'); + }); + + test('parses parentheses comments', () { + final result = parser.parse('G1 X10 Y10 (comment here)'); + expect(result.commands, hasLength(1)); + expect(result.commands.first.x, 10); + }); + + test('skips empty lines', () { + final result = parser.parse(''' + +G0 X0 Y0 + +G1 X10 Y10 + +'''); + expect(result.commands, hasLength(2)); + expect(result.errors, isEmpty); + }); + + test('rejects unsupported G2', () { + final result = parser.parse('G2 X10 Y10 I5 J5'); + expect(result.errors, hasLength(1)); + expect(result.errors.first.message, contains('Unsupported code')); + }); + + test('rejects malformed X value', () { + final result = parser.parse('G1 Xabc Y10'); + expect(result.errors, hasLength(1)); + expect(result.errors.first.message, contains('Malformed parameter')); + }); + + test('rejects parameter with trailing junk', () { + final result = parser.parse('G1 X10abc Y10'); + expect(result.commands, isEmpty); + expect(result.errors, hasLength(1)); + expect(result.errors.first.message, contains('Malformed parameter')); + }); + + test('handles negative coordinates', () { + final result = parser.parse('G1 X-10.5 Y-20.3'); + expect(result.commands, hasLength(1)); + expect(result.commands.first.x, -10.5); + expect(result.commands.first.y, -20.3); + }); + + test('handles leading decimal coordinates', () { + final result = parser.parse('G1 X.5 Y-.25'); + expect(result.commands, hasLength(1)); + expect(result.commands.first.x, 0.5); + expect(result.commands.first.y, -0.25); + }); + + test('multi-line parse with errors preserves valid commands', () { + final result = parser.parse(''' +G0 X0 Y0 +G2 X10 Y10 +G1 X20 Y20 +'''); + expect(result.commands, hasLength(2)); + expect(result.errors, hasLength(1)); + expect(result.errors.first.lineNumber, 2); + }); + + test('parses G90 as valid command', () { + final result = parser.parse('G90'); + expect(result.commands, hasLength(1)); + expect(result.commands.first.code, 'G90'); + expect(result.errors, isEmpty); + }); + + test('parses G91 as valid command', () { + final result = parser.parse('G91'); + expect(result.commands, hasLength(1)); + expect(result.commands.first.code, 'G91'); + expect(result.errors, isEmpty); + }); + + test('parses G90 with comment only', () { + final result = parser.parse('G90 ; set absolute mode'); + expect(result.commands, hasLength(1)); + expect(result.commands.first.code, 'G90'); + expect(result.commands.first.comment, 'set absolute mode'); + }); + + test('parses sequential G90 and G91', () { + final result = parser.parse('G90\nG91\nG1 X10 Y10'); + expect(result.commands, hasLength(3)); + expect(result.commands[0].code, 'G90'); + expect(result.commands[1].code, 'G91'); + expect(result.commands[2].code, 'G1'); + }); + + test('parseRecord preserves readline metadata', () { + final parsed = parser.parseRecord( + const GcodeLineRecord( + lineNumber: 12, + rawLine: 'G1 X20 Y30', + byteOffset: 128, + ), + ); + + expect(parsed.kind, ParsedGcodeLineKind.command); + expect(parsed.record.lineNumber, 12); + expect(parsed.record.byteOffset, 128); + expect(parsed.command?.lineNumber, 12); + expect(parsed.command?.x, 20); + }); + }); +} diff --git a/packages/gcode_core/test/toolpath_builder_test.dart b/packages/gcode_core/test/toolpath_builder_test.dart new file mode 100644 index 0000000..808ebd2 --- /dev/null +++ b/packages/gcode_core/test/toolpath_builder_test.dart @@ -0,0 +1,203 @@ +import 'package:test/test.dart'; +import 'package:gcode_core/gcode_core.dart'; + +void main() { + group('ToolpathBuilder', () { + test('builds linear segments from G1 commands', () { + final commands = [ + const GcodeCommand( + lineNumber: 1, + rawLine: 'G1 X10 Y0', + code: 'G1', + params: {'X': 10, 'Y': 0}, + ), + const GcodeCommand( + lineNumber: 2, + rawLine: 'G1 X10 Y10', + code: 'G1', + params: {'X': 10, 'Y': 10}, + ), + ]; + + final segments = ToolpathBuilder.build(commands); + + expect(segments, hasLength(2)); + expect(segments[0].type, GcodeSegmentType.linear); + expect(segments[0].start.x, 0); + expect(segments[0].start.y, 0); + expect(segments[0].end.x, 10); + expect(segments[0].end.y, 0); + expect(segments[1].end.x, 10); + expect(segments[1].end.y, 10); + }); + + test('builds rapid segments from G0 commands', () { + final commands = [ + const GcodeCommand( + lineNumber: 1, + rawLine: 'G0 X50 Y50', + code: 'G0', + params: {'X': 50, 'Y': 50}, + ), + ]; + + final segments = ToolpathBuilder.build(commands); + + expect(segments, hasLength(1)); + expect(segments[0].type, GcodeSegmentType.rapid); + }); + + test('keeps previous coordinate when X/Y omitted', () { + final commands = [ + const GcodeCommand( + lineNumber: 1, + rawLine: 'G1 X10 Y20', + code: 'G1', + params: {'X': 10, 'Y': 20}, + ), + const GcodeCommand( + lineNumber: 2, + rawLine: 'G1 X30', + code: 'G1', + params: {'X': 30}, + ), + ]; + + final segments = ToolpathBuilder.build(commands); + + expect(segments, hasLength(2)); + expect(segments[1].start.y, 20); // kept from previous + expect(segments[1].end.x, 30); + expect(segments[1].end.y, 20); + }); + + test('no segment when no movement', () { + final commands = [ + const GcodeCommand( + lineNumber: 1, + rawLine: 'G1 X0 Y0', + code: 'G1', + params: {'X': 0, 'Y': 0}, + ), + ]; + + final segments = ToolpathBuilder.build(commands); + expect(segments, isEmpty); + }); + + test('empty commands returns empty segments', () { + final segments = ToolpathBuilder.build([]); + expect(segments, isEmpty); + }); + + test('G90 sets absolute mode', () { + final commands = [ + const GcodeCommand( + lineNumber: 1, + rawLine: 'G90', + code: 'G90', + params: {}, + ), + const GcodeCommand( + lineNumber: 2, + rawLine: 'G1 X10 Y10', + code: 'G1', + params: {'X': 10, 'Y': 10}, + ), + ]; + + final segments = ToolpathBuilder.build(commands); + expect(segments, hasLength(1)); + expect(segments[0].end.x, 10); + expect(segments[0].end.y, 10); + }); + + test('G91 sets relative mode', () { + final commands = [ + const GcodeCommand( + lineNumber: 1, + rawLine: 'G91', + code: 'G91', + params: {}, + ), + const GcodeCommand( + lineNumber: 2, + rawLine: 'G1 X10 Y10', + code: 'G1', + params: {'X': 10, 'Y': 10}, + ), + const GcodeCommand( + lineNumber: 3, + rawLine: 'G1 X10 Y10', + code: 'G1', + params: {'X': 10, 'Y': 10}, + ), + ]; + + final segments = ToolpathBuilder.build(commands); + expect(segments, hasLength(2)); + expect(segments[0].end.x, 10); + expect(segments[0].end.y, 10); + expect(segments[1].start.x, 10); + expect(segments[1].start.y, 10); + expect(segments[1].end.x, 20); + expect(segments[1].end.y, 20); + }); + + test('mode changes do not create segments', () { + final commands = [ + const GcodeCommand( + lineNumber: 1, + rawLine: 'G90', + code: 'G90', + params: {}, + ), + const GcodeCommand( + lineNumber: 2, + rawLine: 'G91', + code: 'G91', + params: {}, + ), + ]; + + final segments = ToolpathBuilder.build(commands); + expect(segments, isEmpty); + }); + + test('mixed G90/G91 sequence', () { + final commands = [ + const GcodeCommand( + lineNumber: 1, + rawLine: 'G90', + code: 'G90', + params: {}, + ), + const GcodeCommand( + lineNumber: 2, + rawLine: 'G1 X10 Y10', + code: 'G1', + params: {'X': 10, 'Y': 10}, + ), + const GcodeCommand( + lineNumber: 3, + rawLine: 'G91', + code: 'G91', + params: {}, + ), + const GcodeCommand( + lineNumber: 4, + rawLine: 'G1 X10 Y10', + code: 'G1', + params: {'X': 10, 'Y': 10}, + ), + ]; + + final segments = ToolpathBuilder.build(commands); + expect(segments, hasLength(2)); + expect(segments[0].end.x, 10); // absolute: 0 -> 10 + expect(segments[0].end.y, 10); + expect(segments[1].end.x, 20); // relative: 10 + 10 + expect(segments[1].end.y, 20); + }); + }); +} From 6c98ffa89a0f89a2eef5fac3253fbfb55defc959 Mon Sep 17 00:00:00 2001 From: lizy Date: Wed, 22 Jul 2026 20:27:06 +0800 Subject: [PATCH 5/9] feat(packages): import shared learning widgets --- packages/flutter_study_learning/README.md | 10 + .../lib/flutter_study_learning.dart | 3 + .../lib/src/learning_scaffold.dart | 301 ++++++++++++++++++ packages/flutter_study_learning/pubspec.lock | 205 ++++++++++++ packages/flutter_study_learning/pubspec.yaml | 19 ++ 5 files changed, 538 insertions(+) create mode 100644 packages/flutter_study_learning/README.md create mode 100644 packages/flutter_study_learning/lib/flutter_study_learning.dart create mode 100644 packages/flutter_study_learning/lib/src/learning_scaffold.dart create mode 100644 packages/flutter_study_learning/pubspec.lock create mode 100644 packages/flutter_study_learning/pubspec.yaml diff --git a/packages/flutter_study_learning/README.md b/packages/flutter_study_learning/README.md new file mode 100644 index 0000000..68bae4d --- /dev/null +++ b/packages/flutter_study_learning/README.md @@ -0,0 +1,10 @@ +# flutter_study_learning + +Shared teaching page widgets for Flutter study modules. + +## Scope + +- `LearningScaffold` +- Learning objectives, concept chips, code snippets, state logs, pitfalls, and exercise cards + +This package has no module-specific business logic. diff --git a/packages/flutter_study_learning/lib/flutter_study_learning.dart b/packages/flutter_study_learning/lib/flutter_study_learning.dart new file mode 100644 index 0000000..09df57d --- /dev/null +++ b/packages/flutter_study_learning/lib/flutter_study_learning.dart @@ -0,0 +1,3 @@ +library flutter_study_learning; + +export 'src/learning_scaffold.dart'; diff --git a/packages/flutter_study_learning/lib/src/learning_scaffold.dart b/packages/flutter_study_learning/lib/src/learning_scaffold.dart new file mode 100644 index 0000000..3875f0b --- /dev/null +++ b/packages/flutter_study_learning/lib/src/learning_scaffold.dart @@ -0,0 +1,301 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +/// 学习目标展示区块 +class LearningObjectives extends StatelessWidget { + const LearningObjectives({super.key, required this.objectives}); + + final List objectives; + + @override + Widget build(BuildContext context) { + return _Section( + title: '🎯 学习目标', + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: objectives + .map( + (o) => Padding( + padding: const EdgeInsets.only(bottom: 6), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('• ', style: TextStyle(fontSize: 16)), + Expanded(child: Text(o)), + ], + ), + ), + ) + .toList(), + ), + ); + } +} + +/// 核心概念标签组 +class ConceptChips extends StatelessWidget { + const ConceptChips({super.key, required this.concepts}); + + final List concepts; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: Wrap( + spacing: 8, + runSpacing: 8, + children: concepts + .map( + (c) => Container( + padding: + const EdgeInsets.symmetric(horizontal: 10, vertical: 4), + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.primaryContainer, + borderRadius: BorderRadius.circular(16), + ), + child: Text( + c, + style: TextStyle( + fontSize: 12, + color: Theme.of(context).colorScheme.onPrimaryContainer, + ), + ), + ), + ) + .toList(), + ), + ); + } +} + +/// 代码片段展示卡片 +class CodeSnippetCard extends StatelessWidget { + const CodeSnippetCard({ + super.key, + required this.title, + required this.code, + this.explanation, + }); + + final String title; + final String code; + final String? explanation; + + @override + Widget build(BuildContext context) { + return _Section( + title: '📝 $title', + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: double.infinity, + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.grey.shade900, + borderRadius: BorderRadius.circular(8), + ), + child: SelectableText( + code, + style: const TextStyle( + fontFamily: 'monospace', + fontSize: 13, + color: Colors.white, + height: 1.4, + ), + ), + ), + const SizedBox(height: 8), + Row( + children: [ + IconButton( + icon: const Icon(Icons.copy, size: 18), + onPressed: () { + Clipboard.setData(ClipboardData(text: code)); + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('已复制到剪贴板'), + duration: Duration(seconds: 1), + ), + ); + }, + tooltip: '复制代码', + ), + if (explanation != null) + Expanded( + child: Text(explanation!, + style: const TextStyle(fontSize: 12))), + ], + ), + ], + ), + ); + } +} + +/// 状态变化/日志展示区 +class StateLogView extends StatelessWidget { + const StateLogView({super.key, required this.logs, this.maxLines = 8}); + + final List logs; + final int maxLines; + + @override + Widget build(BuildContext context) { + return _Section( + title: '📊 状态日志', + child: Container( + constraints: BoxConstraints(maxHeight: maxLines * 20), + padding: const EdgeInsets.all(8), + decoration: BoxDecoration( + color: Colors.grey.shade100, + borderRadius: BorderRadius.circular(8), + border: Border.all(color: Colors.grey.shade300), + ), + child: ListView.builder( + itemCount: logs.length, + itemBuilder: (context, index) { + return Text( + logs[index], + style: const TextStyle(fontFamily: 'monospace', fontSize: 12), + ); + }, + ), + ), + ); + } +} + +/// 常见误区提示 +class CommonPitfalls extends StatelessWidget { + const CommonPitfalls({super.key, required this.pitfalls}); + + final List pitfalls; + + @override + Widget build(BuildContext context) { + return _Section( + title: '⚠️ 常见误区', + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: pitfalls + .map( + (p) => Padding( + padding: const EdgeInsets.only(bottom: 8), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Icon(Icons.warning_amber, + size: 18, color: Colors.orange), + const SizedBox(width: 8), + Expanded(child: Text(p)), + ], + ), + ), + ) + .toList(), + ), + ); + } +} + +/// 练习任务卡片 +class ExerciseCard extends StatelessWidget { + const ExerciseCard({super.key, required this.task, this.hint}); + + final String task; + final String? hint; + + @override + Widget build(BuildContext context) { + return _Section( + title: '💪 练习任务', + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(task), + if (hint != null) ...[ + const SizedBox(height: 8), + Text( + '提示: $hint', + style: TextStyle(fontSize: 12, color: Colors.grey.shade600), + ), + ], + ], + ), + ); + } +} + +/// 教学区块容器 +class _Section extends StatelessWidget { + const _Section({required this.title, required this.child}); + + final String title; + final Widget child; + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + title, + style: Theme.of(context).textTheme.titleSmall?.copyWith( + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 8), + child, + ], + ), + ); + } +} + +/// 标准教学页面脚手架 +class LearningScaffold extends StatelessWidget { + const LearningScaffold({ + super.key, + required this.title, + required this.sections, + this.interactiveDemo, + this.floatingActionButton, + }); + + final String title; + final List sections; + final Widget? interactiveDemo; + final Widget? floatingActionButton; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text(title)), + body: SingleChildScrollView( + padding: const EdgeInsets.only(bottom: 24), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (interactiveDemo != null) ...[ + Padding( + padding: const EdgeInsets.all(16), + child: Card( + child: Padding( + padding: const EdgeInsets.all(16), + child: interactiveDemo), + ), + ), + const Divider(), + ], + ...sections, + ], + ), + ), + floatingActionButton: floatingActionButton, + ); + } +} diff --git a/packages/flutter_study_learning/pubspec.lock b/packages/flutter_study_learning/pubspec.lock new file mode 100644 index 0000000..05fbd73 --- /dev/null +++ b/packages/flutter_study_learning/pubspec.lock @@ -0,0 +1,205 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.13.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.19.1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.3" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.flutter-io.cn" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.0.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.12.19" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.13.0" + meta: + dependency: transitive + description: + name: meta + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.18.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.9.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.11" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" + url: "https://pub.flutter-io.cn" + source: hosted + version: "15.2.0" +sdks: + dart: ">=3.10.0-0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/flutter_study_learning/pubspec.yaml b/packages/flutter_study_learning/pubspec.yaml new file mode 100644 index 0000000..84b72a9 --- /dev/null +++ b/packages/flutter_study_learning/pubspec.yaml @@ -0,0 +1,19 @@ +name: flutter_study_learning +description: Shared learning scaffold widgets for Flutter study modules. +publish_to: 'none' +version: 0.1.0 + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + +flutter: + uses-material-design: true From 373ec6ef0185ee26ce080b1182d85f0872055981 Mon Sep 17 00:00:00 2001 From: lizy Date: Wed, 22 Jul 2026 20:27:11 +0800 Subject: [PATCH 6/9] feat(packages): import file picker bridge --- packages/file_picker_bridge/.gitignore | 19 ++ packages/file_picker_bridge/README.md | 11 + .../lib/file_picker_bridge.dart | 4 + .../lib/src/file_picker_service.dart | 17 ++ .../lib/src/method_channel_file_picker.dart | 41 ++++ packages/file_picker_bridge/pubspec.lock | 205 ++++++++++++++++++ packages/file_picker_bridge/pubspec.yaml | 19 ++ .../test/method_channel_file_picker_test.dart | 52 +++++ 8 files changed, 368 insertions(+) create mode 100644 packages/file_picker_bridge/.gitignore create mode 100644 packages/file_picker_bridge/README.md create mode 100644 packages/file_picker_bridge/lib/file_picker_bridge.dart create mode 100644 packages/file_picker_bridge/lib/src/file_picker_service.dart create mode 100644 packages/file_picker_bridge/lib/src/method_channel_file_picker.dart create mode 100644 packages/file_picker_bridge/pubspec.lock create mode 100644 packages/file_picker_bridge/pubspec.yaml create mode 100644 packages/file_picker_bridge/test/method_channel_file_picker_test.dart diff --git a/packages/file_picker_bridge/.gitignore b/packages/file_picker_bridge/.gitignore new file mode 100644 index 0000000..a68bac3 --- /dev/null +++ b/packages/file_picker_bridge/.gitignore @@ -0,0 +1,19 @@ +# Dart/Flutter generated files +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +build/ + +# IDE and editor files +.idea/ +*.iml +.vscode/ + +# OS metadata +.DS_Store +Thumbs.db + +# Logs and coverage +*.log +coverage/ diff --git a/packages/file_picker_bridge/README.md b/packages/file_picker_bridge/README.md new file mode 100644 index 0000000..deb291a --- /dev/null +++ b/packages/file_picker_bridge/README.md @@ -0,0 +1,11 @@ +# file_picker_bridge + +Platform file picker bridge API for adapting macOS and Windows file manager integrations. + +Host applications register platform implementations through the `file_picker_bridge/file_picker` MethodChannel. This package owns the Dart API and mock-friendly channel client used to bridge Flutter code with native macOS and Windows file selection behavior. + +## Roadmap + +- Add and maintain macOS and Windows host file picking support while keeping the Dart API stable. +- Normalize returned file metadata across macOS and Windows. +- Keep MethodChannel tests mock-friendly so platform behavior can be verified without native UI. diff --git a/packages/file_picker_bridge/lib/file_picker_bridge.dart b/packages/file_picker_bridge/lib/file_picker_bridge.dart new file mode 100644 index 0000000..ad89817 --- /dev/null +++ b/packages/file_picker_bridge/lib/file_picker_bridge.dart @@ -0,0 +1,4 @@ +library file_picker_bridge; + +export 'src/file_picker_service.dart'; +export 'src/method_channel_file_picker.dart'; diff --git a/packages/file_picker_bridge/lib/src/file_picker_service.dart b/packages/file_picker_bridge/lib/src/file_picker_service.dart new file mode 100644 index 0000000..684a9a8 --- /dev/null +++ b/packages/file_picker_bridge/lib/src/file_picker_service.dart @@ -0,0 +1,17 @@ +class PickedFile { + const PickedFile({ + required this.path, + this.name, + }); + + final String path; + final String? name; +} + +abstract class FilePickerService { + Future pickFile({ + List allowedExtensions = const [], + String? title, + String? message, + }); +} diff --git a/packages/file_picker_bridge/lib/src/method_channel_file_picker.dart b/packages/file_picker_bridge/lib/src/method_channel_file_picker.dart new file mode 100644 index 0000000..3db9280 --- /dev/null +++ b/packages/file_picker_bridge/lib/src/method_channel_file_picker.dart @@ -0,0 +1,41 @@ +import 'package:flutter/services.dart'; + +import 'file_picker_service.dart'; + +class MethodChannelFilePicker implements FilePickerService { + const MethodChannelFilePicker({ + MethodChannel channel = _defaultChannel, + }) : _channel = channel; + + static const MethodChannel _defaultChannel = MethodChannel( + 'file_picker_bridge/file_picker', + ); + + final MethodChannel _channel; + + @override + Future pickFile({ + List allowedExtensions = const [], + String? title, + String? message, + }) async { + final result = await _channel.invokeMapMethod( + 'pickFile', + { + 'allowedExtensions': allowedExtensions, + 'title': title, + 'message': message, + }, + ); + + final path = result?['path'] as String?; + if (path == null || path.isEmpty) { + return null; + } + + return PickedFile( + path: path, + name: result?['name'] as String?, + ); + } +} diff --git a/packages/file_picker_bridge/pubspec.lock b/packages/file_picker_bridge/pubspec.lock new file mode 100644 index 0000000..05fbd73 --- /dev/null +++ b/packages/file_picker_bridge/pubspec.lock @@ -0,0 +1,205 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.13.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.2" + characters: + dependency: transitive + description: + name: characters + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.2" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.19.1" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.3" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" + url: "https://pub.flutter-io.cn" + source: hosted + version: "11.0.2" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.10" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.2" + lints: + dependency: transitive + description: + name: lints + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.0.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.12.19" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.13.0" + meta: + dependency: transitive + description: + name: meta + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.18.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.9.1" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.2" + test_api: + dependency: transitive + description: + name: test_api + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.11" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" + url: "https://pub.flutter-io.cn" + source: hosted + version: "15.2.0" +sdks: + dart: ">=3.10.0-0 <4.0.0" + flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/file_picker_bridge/pubspec.yaml b/packages/file_picker_bridge/pubspec.yaml new file mode 100644 index 0000000..196eb54 --- /dev/null +++ b/packages/file_picker_bridge/pubspec.yaml @@ -0,0 +1,19 @@ +name: file_picker_bridge +description: File picker bridge for adapting macOS and Windows platform file managers. +publish_to: 'none' +version: 0.1.0 + +environment: + sdk: '>=3.0.0 <4.0.0' + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^4.0.0 + +flutter: + uses-material-design: true diff --git a/packages/file_picker_bridge/test/method_channel_file_picker_test.dart b/packages/file_picker_bridge/test/method_channel_file_picker_test.dart new file mode 100644 index 0000000..e8ab88e --- /dev/null +++ b/packages/file_picker_bridge/test/method_channel_file_picker_test.dart @@ -0,0 +1,52 @@ +import 'package:flutter/services.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:file_picker_bridge/file_picker_bridge.dart'; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + + group('MethodChannelFilePicker', () { + const channel = MethodChannel('test/file_picker'); + + tearDown(() { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(channel, null); + }); + + test('returns picked file from platform response', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(channel, (call) async { + expect(call.method, 'pickFile'); + expect(call.arguments, { + 'allowedExtensions': ['nc', 'gcode'], + 'title': '选择文件', + 'message': '导入刀路', + }); + + return { + 'path': '/tmp/sample.nc', + 'name': 'sample.nc', + }; + }); + + const picker = MethodChannelFilePicker(channel: channel); + final file = await picker.pickFile( + allowedExtensions: ['nc', 'gcode'], + title: '选择文件', + message: '导入刀路', + ); + + expect(file?.path, '/tmp/sample.nc'); + expect(file?.name, 'sample.nc'); + }); + + test('returns null when user cancels', () async { + TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger + .setMockMethodCallHandler(channel, (call) async => null); + + const picker = MethodChannelFilePicker(channel: channel); + + expect(await picker.pickFile(), isNull); + }); + }); +} From afb71d095ce0ec739d3040f6b091f2068a7009e0 Mon Sep 17 00:00:00 2001 From: lizy Date: Wed, 22 Jul 2026 20:27:15 +0800 Subject: [PATCH 7/9] feat(packages): import Dart IoC core --- packages/flutter_ioc_core/README.md | 3 + .../lib/flutter_ioc_core.dart | 4 + .../flutter_ioc_core/lib/src/container.dart | 256 ++++++++++++ packages/flutter_ioc_core/lib/src/types.dart | 65 +++ packages/flutter_ioc_core/pubspec.lock | 389 ++++++++++++++++++ packages/flutter_ioc_core/pubspec.yaml | 11 + 6 files changed, 728 insertions(+) create mode 100644 packages/flutter_ioc_core/README.md create mode 100644 packages/flutter_ioc_core/lib/flutter_ioc_core.dart create mode 100644 packages/flutter_ioc_core/lib/src/container.dart create mode 100644 packages/flutter_ioc_core/lib/src/types.dart create mode 100644 packages/flutter_ioc_core/pubspec.lock create mode 100644 packages/flutter_ioc_core/pubspec.yaml diff --git a/packages/flutter_ioc_core/README.md b/packages/flutter_ioc_core/README.md new file mode 100644 index 0000000..75b1ff3 --- /dev/null +++ b/packages/flutter_ioc_core/README.md @@ -0,0 +1,3 @@ +# flutter_ioc_core + +Pure Dart IoC container extracted from the Flutter IoC teaching module. diff --git a/packages/flutter_ioc_core/lib/flutter_ioc_core.dart b/packages/flutter_ioc_core/lib/flutter_ioc_core.dart new file mode 100644 index 0000000..5e9ba69 --- /dev/null +++ b/packages/flutter_ioc_core/lib/flutter_ioc_core.dart @@ -0,0 +1,4 @@ +library flutter_ioc_core; + +export 'src/container.dart'; +export 'src/types.dart'; diff --git a/packages/flutter_ioc_core/lib/src/container.dart b/packages/flutter_ioc_core/lib/src/container.dart new file mode 100644 index 0000000..6a0f430 --- /dev/null +++ b/packages/flutter_ioc_core/lib/src/container.dart @@ -0,0 +1,256 @@ +import 'dart:async'; + +import 'types.dart'; + +class _ContainerKey { + _ContainerKey(this.type, this.name); + final Type type; + final String? name; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is _ContainerKey && + runtimeType == other.runtimeType && + type == other.type && + name == other.name; + + @override + int get hashCode => type.hashCode ^ name.hashCode; + + @override + String toString() => '${type.toString()}${name != null ? '#$name' : ''}'; +} + +class _Registration { + _Registration({ + required this.key, + required this.factory, + required this.lifetime, + required this.condition, + required this.propertyInjectors, + }); + + final _ContainerKey key; + final Factory factory; + final Lifetime lifetime; + final Condition condition; + final List> propertyInjectors; + dynamic instance; +} + +/// Concrete IoC container with lifecycle management, conditional selection, and scopes. +class Container implements IoCContainer { + Container({Map environment = const {}, Container? parent}) + : _environment = Map.from(environment), + _parent = parent; + + final Map> _registrations = {}; + final Map<_ContainerKey, dynamic> _scopedInstances = + {}; // Scope-specific cache. + final List<_ContainerKey> _resolutionPath = + []; // Tracks resolution chain to detect cycles. + final Map _environment; + final Container? _parent; + + @override + void registerSingleton( + Factory factory, { + String? name, + Condition? condition, + List>? propertyInjectors, + }) { + _register( + factory: factory, + lifetime: Lifetime.singleton, + name: name, + condition: condition, + propertyInjectors: propertyInjectors, + ); + } + + @override + void registerTransient( + Factory factory, { + String? name, + Condition? condition, + List>? propertyInjectors, + }) { + _register( + factory: factory, + lifetime: Lifetime.transient, + name: name, + condition: condition, + propertyInjectors: propertyInjectors, + ); + } + + @override + void registerScoped( + Factory factory, { + String? name, + Condition? condition, + List>? propertyInjectors, + }) { + _register( + factory: factory, + lifetime: Lifetime.scoped, + name: name, + condition: condition, + propertyInjectors: propertyInjectors, + ); + } + + void _register({ + required Factory factory, + required Lifetime lifetime, + String? name, + Condition? condition, + List>? propertyInjectors, + }) { + final registration = _Registration( + key: _ContainerKey(T, name), + factory: factory, + lifetime: lifetime, + condition: condition ?? (_) => true, + propertyInjectors: + propertyInjectors?.cast>() ?? const [], + ); + _registrations.putIfAbsent(T, () => []).add(registration); + } + + @override + T resolve({String? name}) { + final result = _resolveInternal( + name: name, scope: this, allowAsyncFactories: false); + if (result is Future) { + throw ContainerException( + 'Async factory registered for $T; call resolveAsync<$T>() instead.'); + } + return result as T; + } + + @override + Future resolveAsync({String? name}) async { + final result = await _resolveInternal( + name: name, + scope: this, + allowAsyncFactories: true, + ); + if (result is Future) { + return await result; + } + return result as T; + } + + dynamic _resolveInternal( + {String? name, + required Container scope, + required bool allowAsyncFactories}) { + final token = _ContainerKey(T, name); + if (_resolutionPath.contains(token)) { + final chain = + [..._resolutionPath, token].map((e) => e.toString()).join(' -> '); + throw ContainerException('Circular dependency detected: $chain'); + } + + final registration = _findRegistration(name: name, scope: scope); + _resolutionPath.add(token); + try { + switch (registration.lifetime) { + case Lifetime.singleton: + return registration.instance ??= + _createInstance(registration, scope, allowAsyncFactories); + case Lifetime.transient: + return _createInstance(registration, scope, allowAsyncFactories); + case Lifetime.scoped: + return scope._scopedInstances.putIfAbsent( + registration.key, + () => _createInstance(registration, scope, allowAsyncFactories), + ); + } + } finally { + _resolutionPath.removeLast(); + } + } + + dynamic _createInstance( + _Registration registration, + Container scope, + bool allowAsyncFactories, + ) { + final created = registration.factory(scope); + if (created is Future && !allowAsyncFactories) { + throw ContainerException( + 'Async factory registered for $T; call resolveAsync<$T>() instead.'); + } + + if (created is Future) { + return created.then((value) { + _injectProperties(registration, value, scope); + return value; + }); + } + + _injectProperties(registration, created, scope); + return created; + } + + void _injectProperties( + _Registration registration, dynamic instance, Container scope) { + for (final injector in registration.propertyInjectors) { + injector(instance, scope); + } + } + + _Registration _findRegistration({String? name, required Container scope}) { + final registrations = _collectRegistrations(T); + final matching = registrations + .where((r) => r.key.name == name && r.condition(scope)) + .toList(); + + if (matching.isEmpty) { + final availableNames = registrations + .where((r) => r.key.name != null) + .map((r) => r.key.name) + .toSet() + .join(', '); + throw ContainerException( + 'No registration found for $T ${name != null ? 'with name $name ' : ''}' + '${availableNames.isNotEmpty ? '(available names: $availableNames)' : ''}'); + } + return matching.first; + } + + List<_Registration> _collectRegistrations(Type type) { + final current = _registrations[type] ?? const <_Registration>[]; + if (_parent == null) { + return current; + } + return [...current, ..._parent!._collectRegistrations(type)]; + } + + @override + IoCContainer createScope( + {Map environmentOverrides = const {}}) { + final env = {..._environment, ...environmentOverrides}; + return Container(environment: env, parent: this); + } + + @override + bool flag(String key, {bool defaultValue = false}) { + final value = env(key); + if (value is bool) return value; + return defaultValue; + } + + @override + Object? env(String key) => _environment[key] ?? _parent?.env(key); + + @override + void autoRegister(List registrars) { + for (final registrar in registrars) { + registrar.register(this); + } + } +} diff --git a/packages/flutter_ioc_core/lib/src/types.dart b/packages/flutter_ioc_core/lib/src/types.dart new file mode 100644 index 0000000..ac93a74 --- /dev/null +++ b/packages/flutter_ioc_core/lib/src/types.dart @@ -0,0 +1,65 @@ +import 'dart:async'; + +/// Lifecycle options for registered services. +enum Lifetime { singleton, transient, scoped } + +/// Factory that creates instances and can resolve other dependencies. +typedef Factory = FutureOr Function(ContainerResolver resolver); + +/// Predicate to decide whether a registration should be used. +typedef Condition = bool Function(ContainerResolver resolver); + +/// Hook to inject dependencies into already created instances. +typedef PropertyInjector = void Function( + T instance, ContainerResolver resolver); + +/// Registers a bundle of services. +abstract class AutoRegistrar { + void register(IoCContainer container); +} + +/// Minimal resolver interface exposed to factories and property injectors. +abstract class ContainerResolver { + T resolve({String? name}); + Future resolveAsync({String? name}); + bool flag(String key, {bool defaultValue = false}); + Object? env(String key); +} + +/// Public IoC container interface. +abstract class IoCContainer implements ContainerResolver { + void registerSingleton( + Factory factory, { + String? name, + Condition? condition, + List>? propertyInjectors, + }); + + void registerTransient( + Factory factory, { + String? name, + Condition? condition, + List>? propertyInjectors, + }); + + void registerScoped( + Factory factory, { + String? name, + Condition? condition, + List>? propertyInjectors, + }); + + void autoRegister(List registrars); + + IoCContainer createScope( + {Map environmentOverrides = const {}}); +} + +/// Base error type for the container. +class ContainerException implements Exception { + ContainerException(this.message); + final String message; + + @override + String toString() => 'ContainerException: $message'; +} diff --git a/packages/flutter_ioc_core/pubspec.lock b/packages/flutter_ioc_core/pubspec.lock new file mode 100644 index 0000000..f16dc55 --- /dev/null +++ b/packages/flutter_ioc_core/pubspec.lock @@ -0,0 +1,389 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: cd6add6f846f35fb79f3c315296703c1a24f3cfd7f4739d91a74961c1c7e9f1b + url: "https://pub.flutter-io.cn" + source: hosted + version: "100.0.0" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "6ba98576948803398b69e3a444df24eacdbe12ed699c7014e120ea38552debbf" + url: "https://pub.flutter-io.cn" + source: hosted + version: "13.0.0" + args: + dependency: transitive + description: + name: args + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.7.0" + async: + dependency: transitive + description: + name: async + sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.13.1" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.2" + cli_config: + dependency: transitive + description: + name: cli_config + sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.2.0" + collection: + dependency: transitive + description: + name: collection + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.19.1" + convert: + dependency: transitive + description: + name: convert + sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.1.2" + coverage: + dependency: transitive + description: + name: coverage + sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.15.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.7" + file: + dependency: transitive + description: + name: file + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 + url: "https://pub.flutter-io.cn" + source: hosted + version: "7.0.1" + frontend_server_client: + dependency: transitive + description: + name: frontend_server_client + sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.3" + http_multi_server: + dependency: transitive + description: + name: http_multi_server + sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.2.2" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.1.2" + io: + dependency: transitive + description: + name: io + sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.5" + lints: + dependency: "direct dev" + description: + name: lints + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + url: "https://pub.flutter-io.cn" + source: hosted + version: "4.0.0" + logging: + dependency: transitive + description: + name: logging + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.3.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.12.20" + meta: + dependency: transitive + description: + name: meta + sha256: df0c643f44ad098eb37988027a8e2b2b5a031fd3977f06bbfd3a76637e8df739 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.18.2" + mime: + dependency: transitive + description: + name: mime + sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.0" + node_preamble: + dependency: transitive + description: + name: node_preamble + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.0.2" + package_config: + dependency: transitive + description: + name: package_config + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.0" + path: + dependency: transitive + description: + name: path + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.9.1" + pool: + dependency: transitive + description: + name: pool + sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.5.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.2.0" + shelf: + dependency: transitive + description: + name: shelf + sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.2" + shelf_packages_handler: + dependency: transitive + description: + name: shelf_packages_handler + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.2" + shelf_static: + dependency: transitive + description: + name: shelf_static + sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.3" + shelf_web_socket: + dependency: transitive + description: + name: shelf_web_socket + sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.0" + source_map_stack_trace: + dependency: transitive + description: + name: source_map_stack_trace + sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.2" + source_maps: + dependency: transitive + description: + name: source_maps + sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.10.13" + source_span: + dependency: transitive + description: + name: source_span + sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.10.2" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.12.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.1.4" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.1" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.2" + test: + dependency: "direct dev" + description: + name: test + sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.31.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.12" + test_core: + dependency: transitive + description: + name: test_core + sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5 + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.6.18" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.4.0" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" + url: "https://pub.flutter-io.cn" + source: hosted + version: "15.2.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.1" + web: + dependency: transitive + description: + name: web + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.1" + web_socket: + dependency: transitive + description: + name: web_socket + sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.1" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.0.3" + webkit_inspection_protocol: + dependency: transitive + description: + name: webkit_inspection_protocol + sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.2.1" + yaml: + dependency: transitive + description: + name: yaml + sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce + url: "https://pub.flutter-io.cn" + source: hosted + version: "3.1.3" +sdks: + dart: ">=3.11.0 <4.0.0" diff --git a/packages/flutter_ioc_core/pubspec.yaml b/packages/flutter_ioc_core/pubspec.yaml new file mode 100644 index 0000000..5b16f3f --- /dev/null +++ b/packages/flutter_ioc_core/pubspec.yaml @@ -0,0 +1,11 @@ +name: flutter_ioc_core +description: Pure Dart IoC container core extracted from Flutter study. +publish_to: 'none' +version: 0.1.0 + +environment: + sdk: '>=3.0.0 <4.0.0' + +dev_dependencies: + test: ^1.25.0 + lints: ^4.0.0 From 0ad928532dc75be7b4610b0c29ff9f30d1419132 Mon Sep 17 00:00:00 2001 From: lizy Date: Sat, 25 Jul 2026 19:43:44 +0800 Subject: [PATCH 8/9] chore(packages): add AI_ANALYSIS.md for all packages, update agent docs schema and tooling - Add AI_ANALYSIS.md for file_picker_bridge, flutter_ioc_core, flutter_study_learning, gcode_core - Remove obsolete pubspec.lock from packages (managed by workspace) - Update AI_ANALYSIS_SCHEMA.json with new fields - Enhance generate_agent_indexes.js and validate_agent_docs.js tooling - Remove migrate_sibling_packages.sh (migration complete) - Update AI_PROJECT_CONTEXT.md, REFACTOR_PLAN.md, and agent indexes - Add hermes plans for agent-driven foundation and transformation roadmap --- ...26-07-22_171303-agent-driven-foundation.md | 434 +++++++ ...nt-ready-project-transformation-roadmap.md | 943 +++++++++++++++ ...6-07-22_172850-p0-codex-execution-queue.md | 1045 +++++++++++++++++ ...shared-dependency-migration-codex-tasks.md | 559 +++++++++ AI_ANALYSIS.md | 18 +- AI_ANALYSIS_SCHEMA.json | 22 + AI_PROJECT_CONTEXT.md | 50 +- REFACTOR_PLAN.md | 22 +- lib/shared/AI_ANALYSIS.md | 2 +- lib/shared/platform/AI_ANALYSIS.md | 2 +- packages/.gitkeep | 1 - packages/file_picker_bridge/AI_ANALYSIS.md | 44 + packages/file_picker_bridge/pubspec.lock | 205 ---- packages/file_picker_bridge/pubspec.yaml | 4 +- packages/flutter_ioc_core/AI_ANALYSIS.md | 42 + packages/flutter_ioc_core/pubspec.lock | 389 ------ packages/flutter_ioc_core/pubspec.yaml | 4 +- .../flutter_study_learning/AI_ANALYSIS.md | 43 + packages/flutter_study_learning/pubspec.lock | 205 ---- packages/flutter_study_learning/pubspec.yaml | 4 +- packages/gcode_core/AI_ANALYSIS.md | 46 + packages/gcode_core/pubspec.yaml | 4 +- pubspec.lock | 10 +- pubspec.yaml | 18 +- tool/generate_agent_indexes.js | 136 ++- tool/migrate_sibling_packages.sh | 424 ------- tool/validate_agent_docs.js | 33 + 27 files changed, 3453 insertions(+), 1256 deletions(-) create mode 100644 .hermes/plans/2026-07-22_171303-agent-driven-foundation.md create mode 100644 .hermes/plans/2026-07-22_172159-agent-ready-project-transformation-roadmap.md create mode 100644 .hermes/plans/2026-07-22_172850-p0-codex-execution-queue.md create mode 100644 .hermes/plans/2026-07-22_174807-shared-dependency-migration-codex-tasks.md delete mode 100644 packages/.gitkeep create mode 100644 packages/file_picker_bridge/AI_ANALYSIS.md delete mode 100644 packages/file_picker_bridge/pubspec.lock create mode 100644 packages/flutter_ioc_core/AI_ANALYSIS.md delete mode 100644 packages/flutter_ioc_core/pubspec.lock create mode 100644 packages/flutter_study_learning/AI_ANALYSIS.md delete mode 100644 packages/flutter_study_learning/pubspec.lock create mode 100644 packages/gcode_core/AI_ANALYSIS.md delete mode 100755 tool/migrate_sibling_packages.sh diff --git a/.hermes/plans/2026-07-22_171303-agent-driven-foundation.md b/.hermes/plans/2026-07-22_171303-agent-driven-foundation.md new file mode 100644 index 0000000..6e995d8 --- /dev/null +++ b/.hermes/plans/2026-07-22_171303-agent-driven-foundation.md @@ -0,0 +1,434 @@ +# Agent-Driven Development Foundation Implementation Plan + +> **For Hermes:** Use subagent-driven-development skill to implement this plan task-by-task. + +**Goal:** 将 `flutter_study` 从“有部分 Agent 文档”升级为可复现、可验证、可审计、可由 Agent 独立闭环执行的工程。 + +**Architecture:** 保留现有 `AGENTS.md + JSON 机器契约 + 分层 AI_ANALYSIS.md` 体系,将环境、命令、质量门禁、任务输入和变更输出全部标准化。优先解决单仓无法自举和质量门禁不可运行,再补 CI、文档漂移检测、任务模板和平台验收。 + +**Tech Stack:** Flutter 3.44.6、Dart 3.12.2、Node.js 20.20.2、GitHub Actions、FlutterGuard、JSON Schema、Shell/Node.js automation。 + +--- + +## 1. 当前基线与关键结论 + +### 已具备 + +- `AGENTS.md` 已定义修改协议、新模块规则、验收规则和禁止事项。 +- `AI_ANALYSIS_SCHEMA.json`、`AI_PROJECT_CONTEXT.md`、`REFACTOR_PLAN.md` 已采用 JSON 机器契约。 +- 根、分层、分类和模块级共有 32 个 `AI_ANALYSIS.md`;`node tool/validate_agent_docs.js` 当前通过,输出 `agent_docs_valid:36`。 +- `tool/generate_agent_indexes.js` 可生成 Agent 索引,`tool/validate_agent_docs.js` 可做基础一致性校验。 +- `.githooks/pre-commit` 已存在且 `core.hooksPath=.githooks` 已启用。 +- 本机 Flutter Doctor 全绿:Flutter 3.44.6、Dart 3.12.2、Android SDK 36.1、JDK 21(Android Studio 内置)、Xcode 26.6、CocoaPods 1.16.2。 + +### 阻塞问题 + +1. **单仓无法自举。** `pubspec.yaml` 依赖 5 个仓库外相对路径;其中 `flutterguard_cli` 仍指向已不存在的 `../flutterguard/packages/flutterguard_cli`,实际包已在 `../flutterguard` 根目录。 +2. **质量门禁当前不可执行。** `flutter analyze`、`flutter test`、FlutterGuard 都在依赖解析阶段因上述路径失败。 +3. **格式基线未收敛。** `dart format` 检测到 138 个 Dart 文件中的 85 个会变化。 +4. **无 CI。** 仓库没有 `.github/workflows/`,规则仅依赖开发者本机钩子,Agent 可在未启用钩子的环境中绕过。 +5. **工具链未精确锁定。** README 只写 Flutter 3.x / Dart 3.x;项目没有 `.fvmrc`、`.nvmrc` 或统一版本检查脚本。 +6. **文档存在漂移。** `README.md` 引用了不存在的 `PLUGIN_DECOMPOSITION_PLAN.md`;`GCODE_VISUALIZER_EVOLUTION_PLAN.md` 仍使用迁移前的 `lib/gcode_visualizer/...` 路径,并记录了不可作为当前事实使用的历史测试结果。 +7. **生成源是手写清单。** `tool/generate_agent_indexes.js` 的模块、状态、依赖和分类清单与路由表重复维护,存在双源漂移。 +8. **预提交门禁不完整。** 当前只运行 FlutterGuard,没有生成文档校验、格式化、分析和测试。 +9. **FlutterGuard 配置重复。** `flutterguard.yaml` 中 `shared_purity` boundary 定义了两次。 +10. **缺少 Agent 任务/交付协议。** 没有统一任务输入模板、变更报告模板、风险等级、允许修改范围和可机读验收结果。 + +--- + +## 2. 基础文档最小集合 + +文档应分为“人类入口”“Agent 契约”“决策记录”三层,避免同一事实重复维护。 + +### 人类入口 + +- `README.md`:项目定位、快速开始、支持平台、唯一权威命令入口。 +- `CONTRIBUTING.md`:分支策略、提交规范、PR 流程、Definition of Done。 +- `docs/DEVELOPMENT.md`:环境安装、自举、常用命令、故障排查。 +- `docs/TESTING.md`:单元/Widget/Golden/集成/平台测试分层及何时必须补测试。 +- `docs/RELEASE.md`:版本号、构建产物、平台发布与回滚。 +- `SECURITY.md`:密钥处理、漏洞上报、依赖和平台权限审计。 + +### Agent 权威契约 + +- `AGENTS.md`:只保留全局行为规则、读取顺序、修改边界和统一门禁入口。 +- `AI_PROJECT_CONTEXT.md`:架构边界、平台矩阵、入口和依赖方向。 +- `REFACTOR_PLAN.md`:当前阶段、原子任务队列、依赖、状态和验收条件。 +- `AI_ANALYSIS_SCHEMA.json`:所有机器文档的 schema 与约束。 +- `lib/AI_MODULE_INDEX.md`:生成的模块索引,不手工编辑。 +- `**/AI_ANALYSIS.md`:局部契约,只描述 ownership、依赖、入口、状态和验证。 +- `docs/agent/TASK_SCHEMA.json`:Agent 任务输入格式。 +- `docs/agent/CHANGE_REPORT_SCHEMA.json`:Agent 完成报告格式。 +- `docs/agent/COMMANDS.json`:命令名、用途、是否修改文件、超时、产物和成功条件。 + +建议的任务字段: + +- `id` +- `goal` +- `scope.allow` +- `scope.deny` +- `pre_read` +- `dependencies` +- `acceptance` +- `validation` +- `risk` +- `manual_review` +- `status` + +建议的变更报告字段: + +- `task_id` +- `changed_files` +- `tests_added` +- `commands` +- `results` +- `generated_artifacts` +- `known_risks` +- `manual_verification` +- `followups` + +### 决策记录 + +- `docs/adr/README.md`:ADR 索引与状态定义。 +- `docs/adr/0001-repository-layout.md`:单仓/多仓决策。 +- `docs/adr/0002-agent-contract-source-of-truth.md`:哪些文档生成、哪些手写。 +- `docs/adr/0003-platform-capability-boundary.md`:平台 API 和 fallback 规则。 +- `docs/adr/0004-quality-gate.md`:必过检查、允许例外和例外期限。 + +ADR 只记录不可从代码直接推导的“为什么”,不要复制目录和 API 清单。 + +--- + +## 3. 推荐环境形态 + +### 首选:单仓工作区 + +将当前同级包迁入当前仓库: + +- `packages/gcode_core` +- `packages/flutter_study_learning` +- `packages/file_picker_bridge` +- `packages/flutter_ioc_core` +- `tools/flutterguard_cli`,或改用已发布且锁版本的 FlutterGuard + +同步调整: + +- `pubspec.yaml` +- `pubspec.lock` +- `tool/migrate_sibling_packages.sh`(迁移完成后删除或归档) +- `AI_PROJECT_CONTEXT.md` 的生成源 +- 所有依赖路径和相关 AI 契约 + +理由:Agent 在一个 clone 中即可获取源码、运行测试和提交原子变更;不会依赖开发机目录布局。 + +如果必须维持多仓,则将 path dependencies 改为带固定 tag/commit 的 Git dependencies,并提供 `tool/bootstrap.sh` 克隆脚本;不建议继续使用未声明的 `../` 相对目录约定。 + +### 工具链锁定 + +新增: + +- `.fvmrc`:精确锁定 Flutter `3.44.6`。 +- `.nvmrc`:锁定 Node.js `20.20.2`,供 Agent 文档生成器使用。 +- `tool/check_environment.sh`:检查 Flutter、Dart、Node、Java、Xcode/CocoaPods、Android SDK 和必要平台目录。 +- `tool/bootstrap.sh`:安装/校验工具、获取所有包依赖、启用 hooks、执行最小 smoke check。 + +不要用 Docker 作为唯一开发环境:Flutter 的 iOS/macOS 构建仍要求 macOS/Xcode。Docker 可作为纯 Dart、Web 和静态检查的补充环境。 + +--- + +## 4. 分阶段实施 + +### Task 1: 修复依赖布局并恢复可执行基线 + +**Objective:** 任意新 clone 不依赖未声明的父目录即可完成依赖解析。 + +**Files:** + +- Modify: `pubspec.yaml` +- Modify: `pubspec.lock` +- Create/Move: `packages/*` 或创建外部依赖 bootstrap 配置 +- Modify: `tool/generate_agent_indexes.js` +- Modify: `AI_PROJECT_CONTEXT.md`(通过生成器) +- Modify/Delete: `tool/migrate_sibling_packages.sh` + +**Steps:** + +1. 为“单仓工作区”与“固定 Git 依赖”做一次 ADR 决策,默认选择单仓。 +2. 先修正 FlutterGuard 的失效路径,不覆盖当前未提交的 `pubspec.yaml`/`pubspec.lock` 修改。 +3. 迁入四个共享包和 FlutterGuard,逐包执行原有测试。 +4. 执行 `flutter pub get`,确认不再访问仓库外路径。 +5. 执行 `flutter analyze`、`flutter test`、FlutterGuard,记录真实基线。 +6. 单独提交依赖布局变更,避免与格式化混在一起。 + +**Acceptance:** + +- 新 clone 只需仓库内容和标准 SDK 即可 `flutter pub get`。 +- 不存在 `path: ../...`。 +- 所有包均有明确 owner、测试入口和 Agent 契约。 + +### Task 2: 建立唯一命令入口 + +**Objective:** 人和 Agent 使用同一组脚本,不再从多份文档拼接命令。 + +**Files:** + +- Create: `tool/bootstrap.sh` +- Create: `tool/check_environment.sh` +- Create: `tool/quality_gate.sh` +- Create: `tool/test_all.sh` +- Create: `docs/agent/COMMANDS.json` +- Modify: `AGENTS.md` +- Modify: `README.md` + +**Steps:** + +1. `check_environment.sh` 输出版本、缺失组件和明确修复建议。 +2. `bootstrap.sh` 校验环境、执行依赖获取、设置 hooks,不修改业务代码。 +3. `test_all.sh` 遍历主应用与 workspace packages,逐包执行测试并保留失败码。 +4. `quality_gate.sh` 按固定顺序执行:生成文档、检测生成差异、格式化、分析、测试、FlutterGuard。 +5. 命令输出至少包含稳定的阶段标识和最终 exit code,便于 Agent 解析。 +6. `AGENTS.md` 的验收规则改为唯一命令 `bash tool/quality_gate.sh`,详细步骤只在 `COMMANDS.json` 维护。 + +**Acceptance:** + +- Agent 只需运行 bootstrap 与 quality gate 两个入口。 +- 任一步失败都返回非零状态并指明失败阶段。 +- 本地与 CI 调用完全相同的脚本。 + +### Task 3: 收敛格式和静态检查基线 + +**Objective:** 消除 85 个待格式化文件,使格式门禁具有信号价值。 + +**Files:** + +- Modify: 当前 formatter 报告的 Dart 文件 +- Modify: `analysis_options.yaml` +- Modify: `flutterguard.yaml` + +**Steps:** + +1. 在独立提交中执行 `dart format .`,不混入逻辑改动。 +2. 删除 `flutterguard.yaml` 重复的 `shared_purity` 配置。 +3. 评估并启用更严格但可渐进落地的 analyzer 规则;不要一次引入大量无关告警。 +4. 运行全量质量门禁并建立当前 FlutterGuard medium 级基线。 + +**Acceptance:** + +- 再次运行 formatter 不产生 diff。 +- `flutter analyze` 无 error。 +- FlutterGuard 无 high。 + +### Task 4: 强化机器文档生成与漂移检测 + +**Objective:** 模块清单、路由和契约不再靠重复手工维护。 + +**Files:** + +- Modify: `tool/generate_agent_indexes.js` +- Modify: `tool/validate_agent_docs.js` +- Modify: `tool/generate_harness_ai_analysis.sh` +- Create: `tool/check_generated_docs.sh` +- Modify: `lib/app/router/app_route_table.dart` 或增加可解析的 registry source + +**Steps:** + +1. 明确单一源:推荐由结构化 registry manifest 生成 Dart 路由元数据和 AI 模块索引。 +2. 验证器补充:模块目录注册覆盖、`module_entry.dart` 存在、元数据完整、route 唯一、目录/route 命名风格、教学模板依赖、父子索引一致。 +3. 生成后执行 `git diff --exit-code`,CI 中发现未提交生成物即失败。 +4. 验证所有 `.md` 机器文档确实为合法 JSON,并与 schema 版本一致。 +5. 给生成器和验证器添加 Node 单元测试或 fixture 测试。 + +**Acceptance:** + +- 新增未注册模块会失败。 +- 修改路由而不更新契约会失败。 +- 手工修改生成文件会失败。 +- 生成器连续运行两次结果完全一致。 + +### Task 5: 清理和补齐基础文档 + +**Objective:** 消除失效链接、历史事实冒充当前事实和多源命令说明。 + +**Files:** + +- Modify: `README.md` +- Create: `CONTRIBUTING.md` +- Create: `docs/DEVELOPMENT.md` +- Create: `docs/TESTING.md` +- Create: `docs/RELEASE.md` +- Create: `SECURITY.md` +- Move/Rewrite: `GCODE_VISUALIZER_EVOLUTION_PLAN.md` +- Create: `docs/adr/*.md` + +**Steps:** + +1. 删除或补回 README 中不存在的 `PLUGIN_DECOMPOSITION_PLAN.md` 引用。 +2. 将 G-code 演进计划中的旧路径更新到 `lib/modules/ui/gcode_visualizer` 和 `packages/gcode_core`;历史测试数字标记时间与 commit,或移出权威文档。 +3. README 只保留最短上手路径并链接详细文档。 +4. 在 `CONTRIBUTING.md` 定义 Definition of Done:契约更新、测试、质量门禁、UI 证据、平台影响说明。 +5. 文档增加 owner、last_verified 或 generated 标识,避免 Agent 不知道是否可编辑。 + +**Acceptance:** + +- 仓库内文档链接检查通过。 +- README 不引用不存在文件或迁移前路径。 +- 命令、版本和平台支持状态只有一个权威来源。 + +### Task 6: 建立 CI 强制门禁 + +**Objective:** 无论提交来自人还是 Agent,远端都执行同一质量门禁。 + +**Files:** + +- Create: `.github/workflows/ci.yml` +- Create: `.github/workflows/platform-smoke.yml` +- Create: `.github/dependabot.yml` +- Create: `.github/CODEOWNERS` +- Create: `.github/pull_request_template.md` +- Create: `.github/ISSUE_TEMPLATE/agent-task.yml` + +**Steps:** + +1. Linux job:文档校验、格式、analyze、全部纯 Dart/Flutter tests、FlutterGuard SARIF。 +2. macOS job:macOS build、iOS simulator smoke(阶段开启)。 +3. Windows job:Windows build 和关键插件 smoke。 +4. Android job:debug APK 与 emulator smoke;在 `REFACTOR_PLAN.md` 阻塞任务完成后设为 required。 +5. 上传 test、coverage、SARIF 和截图产物;失败时保留日志。 +6. PR 模板强制填写任务 ID、修改范围、测试结果、平台影响、截图/人工验收和剩余风险。 +7. 配置 protected branch required checks;本地 pre-commit 仅作快速反馈,CI 才是最终权威。 + +**Acceptance:** + +- 未格式化、文档漂移、analyze error、test failure、FlutterGuard high 均阻止合并。 +- Agent PR 能从 CI 产物还原验证过程。 + +### Task 7: 定义 Agent 任务与交付协议 + +**Objective:** Agent 获得边界明确、可验证、可恢复的原子任务。 + +**Files:** + +- Create: `docs/agent/TASK_SCHEMA.json` +- Create: `docs/agent/CHANGE_REPORT_SCHEMA.json` +- Create: `docs/agent/examples/*.json` +- Modify: `REFACTOR_PLAN.md` generator source +- Modify: `AGENTS.md` + +**Steps:** + +1. 每个任务声明 allow/deny paths,避免越界重构。 +2. 每个验收条件映射到真实命令或人工证据,不接受“应该可用”。 +3. 高风险任务声明 `manual_review=true`:依赖升级、平台权限、原生配置、安全、数据迁移、发布。 +4. Agent 输出结构化变更报告,并由 CI 校验 schema。 +5. 任务状态只在质量门禁通过和人工条件满足后变为 completed。 + +**Acceptance:** + +- 任一任务可在新会话中仅凭任务 JSON 和仓库契约执行。 +- 完成报告能回答改了什么、如何验证、还有什么风险。 + +### Task 8: 补齐测试与平台证据 + +**Objective:** 让“通过”不仅代表静态检查通过,还代表主要行为和目标平台可用。 + +**Files:** + +- Modify/Create: `test/**` +- Create: `integration_test/**` +- Create: `tool/capture_learning_pages.sh` 或等价 screenshot harness +- Modify: `REFACTOR_PLAN.md` generator source + +**Steps:** + +1. 为 registry/route contract、模块 entry smoke、平台 fallback 增加测试。 +2. 每个 module 至少有入口 smoke test;逻辑模块覆盖正常、边界和错误分支。 +3. 教学 UI 建立 360dp 窄屏、桌面宽屏和 text scale 基线。 +4. 对 recommended 模块保存可审计截图或 golden;避免只写“人工看过”。 +5. 对 Android/iOS/macOS/Windows 建立支持矩阵,并将 unsupported 状态呈现在模块元数据和 UI。 + +**Acceptance:** + +- 新模块没有 smoke test 或教学模板验证时 CI 失败。 +- 平台特定模块有明确支持/降级行为和测试证据。 + +--- + +## 5. 建议执行顺序 + +### P0:先恢复工程可运行 + +1. Task 1 依赖布局。 +2. Task 2 唯一命令入口。 +3. Task 3 格式与静态基线。 + +### P1:让规则不可绕过 + +4. Task 4 文档生成与漂移检测。 +5. Task 6 CI 强制门禁。 +6. Task 5 文档清理与 ADR。 + +### P2:提高 Agent 自主闭环能力 + +7. Task 7 任务/报告 schema。 +8. Task 8 测试、平台和视觉证据。 + +--- + +## 6. 验证命令 + +实施完成后的目标入口: + +```bash +bash tool/check_environment.sh +bash tool/bootstrap.sh +bash tool/quality_gate.sh +``` + +`tool/quality_gate.sh` 内部至少执行: + +```bash +bash tool/generate_harness_ai_analysis.sh +git diff --exit-code -- AI_ANALYSIS_SCHEMA.json AI_PROJECT_CONTEXT.md REFACTOR_PLAN.md lib/**/AI_ANALYSIS.md lib/AI_MODULE_INDEX.md +dart format . +git diff --exit-code -- '*.dart' +flutter analyze +bash tool/test_all.sh +dart run flutterguard_cli:flutterguard scan --path . --fail-on high +``` + +平台阶段再执行: + +```bash +flutter build macos +flutter build windows +flutter build apk --debug +flutter test integration_test +``` + +Windows build 必须在 Windows runner 执行;Android/iOS smoke 必须使用对应 emulator/simulator。 + +--- + +## 7. 风险与边界 + +- 当前 `pubspec.yaml` 和 `pubspec.lock` 有用户未提交修改;实施时必须先确认并保留,不能用 checkout 覆盖。 +- 单仓迁移会影响多个原独立仓库的历史、发布方式和 CI,应先做 ADR,再移动文件。 +- formatter 会改动 85 个文件,必须独立提交,避免掩盖逻辑 diff。 +- CI 平台矩阵成本较高;先建立 Linux 核心门禁,再逐步把 macOS/Windows/Android 设为 required。 +- 不应将所有知识写进 `AGENTS.md`。全局规则放 AGENTS,机器事实放 JSON 契约,决策原因放 ADR,操作步骤放 DEVELOPMENT/TESTING。 +- 不建议允许 Agent 自动提交、推送、合并或发布;这些应作为显式授权动作,并由 branch protection/环境审批控制。 + +--- + +## 8. 完成定义 + +项目达到“Agent 开发驱动”基础标准时,应同时满足: + +- 新机器单次 clone 后可通过脚本完成自举。 +- Agent 无需猜测工具版本、依赖目录、入口、架构边界和验证命令。 +- 所有权威机器文档可校验,生成物不可漂移。 +- 本地与 CI 使用同一质量门禁。 +- 任务输入和完成报告可机读、可追踪。 +- 每个代码变更都有自动测试或明确人工证据。 +- 平台支持状态显式,不支持的平台有可见 fallback。 +- 任何规则失败都会阻止合并,而不是只写在文档里。 diff --git a/.hermes/plans/2026-07-22_172159-agent-ready-project-transformation-roadmap.md b/.hermes/plans/2026-07-22_172159-agent-ready-project-transformation-roadmap.md new file mode 100644 index 0000000..288bd06 --- /dev/null +++ b/.hermes/plans/2026-07-22_172159-agent-ready-project-transformation-roadmap.md @@ -0,0 +1,943 @@ +# Agent-Ready Project Transformation Roadmap + +# 1. Transformation Objective + +## 当前项目状态 + +当前项目已经完成第一轮面向 Agent 的架构整理,具备以下基础: + +- 已形成清晰的 Flutter 应用壳、模块注册、共享能力和教学模块分层。 +- 已有 `AGENTS.md`、项目级机器上下文、重构任务队列、模块索引和模块级契约。 +- 已有 Agent 文档生成与校验工具,当前机器文档能够通过基础一致性校验。 +- 已引入 FlutterGuard 和本地 pre-commit hook。 +- 已有部分 Widget/逻辑测试和平台工程。 + +但工程仍处于“Agent 可以获得部分上下文,但不能稳定独立闭环”的状态。当前最大限制不是继续增加说明文档,而是环境不可复现、依赖布局不自包含、质量门禁不能稳定运行、远端 CI 缺失、任务和交付协议尚未结构化。 + +## 为什么需要 Agent 化改造 + +Agent 协同开发需要把原本存在于开发者经验中的隐性知识,转换为可读取、可约束、可执行和可验证的工程能力。否则 Agent 即使能够生成代码,也可能出现: + +- 无法在新环境完成依赖解析或运行项目。 +- 不知道哪些文件是权威源,造成文档、路由和模块索引漂移。 +- 修改范围失控,引入跨层依赖或无关重构。 +- 只报告“已完成”,但没有真实测试和构建证据。 +- 无法在新会话中继承架构决策、历史约束和未完成任务。 +- 多个 Agent 并行工作时发生重复修改、契约冲突和知识分叉。 + +因此,本次改造目标不是“增加 AI 文档”,而是建立一套由工程机制保证的 Agent 协作系统。 + +## 改造后的目标状态 + +### AI Agent 可以理解项目上下文 + +- 能从统一入口定位项目目标、技术栈、架构边界、模块清单、平台支持和当前任务。 +- 能区分手写权威文档、生成文档、历史记录和非权威说明。 +- 能在局部修改前自动定位目标模块契约及相关 ADR。 + +### AI Agent 可以安全修改代码 + +- 每个任务具有明确的允许范围、禁止范围、风险等级和验收条件。 +- 架构边界、路由一致性、模块元数据和平台能力由工具校验。 +- 高风险操作需要人工授权,Agent 不能默认提交、推送、合并或发布。 + +### AI Agent 可以遵循项目规范 + +- 本地与 CI 使用同一个 bootstrap 和 quality gate。 +- 格式化、静态分析、测试、文档漂移、架构扫描和安全检查不可绕过。 +- 任务完成标准由命令和证据定义,而不是由 Agent 自我声明。 + +### AI Agent 可以持续维护项目知识 + +- 任务执行后输出结构化变更报告。 +- 架构变化必须关联 ADR 和上下文更新。 +- 自动检测过期路径、失效文档链接、生成文件漂移和模块契约缺失。 +- 稳定知识进入项目契约;临时进度进入任务系统;历史原因进入 ADR。 + +### AI Agent 可以参与架构演进 + +- Agent 可以提出 ADR、影响分析和迁移计划,但架构决策需经过 Review。 +- 架构规则可以逐步转化为自动化检查。 +- 通过质量指标和失败反馈持续改进规则、测试与上下文,而不是无限扩张文档。 + +--- + +# 2. Current Gap Analysis + +## A. Knowledge Gap + +| 问题 | 影响程度 | 优先级 | 改造收益 | +|---|---|---|---| +| 项目已有机器上下文,但缺少统一 Agent 导航清单,权威源与生成物关系不够显式 | High | P0 | Agent 能快速定位上下文,避免重复读取和误改生成文件 | +| 缺少正式 ADR 体系,架构拆分和平台边界的“为什么”没有稳定记录 | High | P1 | 新 Agent 能理解历史取舍,减少反复推翻既有决策 | +| README 存在失效文档引用和迁移前路径 | Medium | P0 | 消除错误引导,降低环境准备和定位成本 | +| 技术栈只声明大版本,没有精确工具链和兼容矩阵 | High | P0 | 提升构建复现性,减少 Agent 环境差异 | +| 模块索引、路由注册和生成器中存在重复清单 | High | P1 | 建立单一事实源,防止模块、路由和契约漂移 | +| 测试策略、平台验收和 UI 证据要求分散在规则及任务计划中 | Medium | P1 | Agent 能根据变更类型选择正确验证层级 | +| 缺少项目级术语、状态和风险等级定义 | Low | P2 | 降低多 Agent 对同一概念的解释差异 | + +## B. Engineering Process Gap + +| 问题 | 影响程度 | 优先级 | 改造收益 | +|---|---|---|---| +| 仓库依赖多个未声明的父目录 path dependency,单次 clone 无法自举 | High | P0 | 新环境和 CI 可以独立完成依赖解析与验证 | +| FlutterGuard 依赖路径失效,导致 analyze、test 和安全扫描均无法运行 | High | P0 | 恢复完整质量基线,是后续所有改造的前提 | +| 已有 Agent 修改规范,但缺少统一 Definition of Done | High | P1 | 所有任务使用一致完成标准,减少“代码写完但未验证” | +| 缺少结构化 Task Specification | High | P1 | 任务边界、依赖和验收可被 Agent 精确执行 | +| 缺少结构化 Execution Report | Medium | P1 | Review 可以追溯实际命令、结果、风险和人工证据 | +| 缺少标准化 Review 流程和风险分级 | High | P1 | 高风险修改获得额外审查,普通任务保持高效 | +| pre-commit 只运行 FlutterGuard,没有覆盖文档、格式、分析和测试 | Medium | P1 | 本地更早发现失败,减少无效 CI 往返 | +| 格式基线未收敛,大量文件会被 formatter 修改 | Medium | P0 | 后续逻辑 diff 更清晰,格式门禁有实际信号 | +| 缺少依赖升级、发布和回滚流程 | Medium | P2 | Agent 可以安全参与维护和版本演进 | + +## C. Agent Collaboration Gap + +| 问题 | 影响程度 | 优先级 | 改造收益 | +|---|---|---|---| +| 已有 `AGENTS.md`,但缺少面向多 Agent 的统一入口 manifest | Medium | P1 | 不同 Agent/IDE 能解析同一上下文入口 | +| 缺少任务允许路径、禁止路径和副作用声明 | High | P1 | 防止越界修改、无关重构和危险操作 | +| 缺少 Agent 完成报告和证据格式 | High | P1 | 避免不可验证的成功声明,提升 Review 效率 | +| 缺少多 Agent 任务依赖、占用范围和冲突管理机制 | Medium | P2 | 降低并行修改同一模块导致的冲突 | +| 缺少项目知识生命周期规则 | High | P2 | 明确哪些信息进入契约、ADR、任务记录或应被删除 | +| 缺少 Agent 规则变更的 Review 和版本机制 | Medium | P2 | 防止规则被临时任务污染或持续膨胀 | +| 缺少架构提案模板和影响分析要求 | Medium | P2 | Agent 可以参与演进,但不能直接绕过架构治理 | +| 缺少失败复盘到规则/工具的反馈闭环 | Low | P2 | 将重复错误转化为长期工程能力 | + +## D. Automation Gap + +| 问题 | 影响程度 | 优先级 | 改造收益 | +|---|---|---|---| +| 没有远端 CI workflow | High | P0 | 所有提交获得不可绕过的统一验证 | +| analyze、test、FlutterGuard 当前被依赖路径阻断 | High | P0 | 恢复真实质量反馈和工程可运行性 | +| 测试只覆盖部分模块,缺少全模块入口 smoke | High | P1 | Agent 修改模块时能快速发现入口、路由和渲染回归 | +| 缺少生成文档的 deterministic/drift check | High | P1 | 保证机器上下文与代码同步 | +| 缺少路由、模块目录和注册表的自动交叉校验 | High | P1 | 防止孤立模块、重复路由和元数据缺失 | +| 缺少 Android/iOS/macOS/Windows 的分层 CI 策略 | Medium | P1 | 平台支持从声明变为真实构建证据 | +| UI 教学页缺少稳定截图或 Golden 验收体系 | Medium | P2 | Agent 能提供可审计的视觉修改证据 | +| 缺少依赖、密钥、权限和供应链检查 | Medium | P1 | 降低 Agent 引入不安全依赖和平台权限的风险 | +| 缺少机器可读测试、扫描和覆盖率产物 | Low | P2 | Agent 与 Reviewer 能更高效消费失败信息 | + +--- + +# 3. Transformation Roadmap + +## Phase 0: Project Baseline + +### 目标 + +建立可复现、可运行、可验证的项目基线。任何开发者或 Agent 在一次 clone 后,都能够通过固定命令准备环境并执行核心检查。 + +### 能力建设 + +- 修复失效依赖并消除未声明的父目录依赖。 +- 确定单仓 workspace 或固定版本多仓依赖策略;默认推荐单仓。 +- 精确锁定 Flutter、Dart、Node 和平台工具要求。 +- 建立 environment check、bootstrap 和统一命令入口。 +- 清理 README 的失效路径和错误事实。 +- 将全量格式化作为独立基线变更。 +- 取得真实 analyze、test、FlutterGuard 基线。 + +### Exit Criteria + +- 新 clone 不依赖开发者私有目录结构。 +- bootstrap 可以完成依赖准备。 +- 核心 quality gate 可以完整执行并返回可信状态。 +- README 中的运行命令与真实环境一致。 + +## Phase 1: Agent Context Foundation + +### 目标 + +建立统一、分层、可维护的 Agent 项目认知能力,并明确每类知识的权威来源。 + +### 能力建设 + +- 建立 `.agent/manifest.json` 作为 Agent 导航入口,不复制已有上下文。 +- 定义 project、architecture、module、platform 和 command context 的引用关系。 +- 建立 ADR 体系,记录仓库布局、单一事实源、平台边界和质量门禁决策。 +- 扩展 Agent 文档 schema 与验证器。 +- 消除路由、模块清单和索引之间的双源维护。 +- 定义知识分类和生命周期:契约、ADR、任务、运行产物、历史档案。 +- 建立文档 ownership、generated 标识和漂移检测。 + +### Exit Criteria + +- Agent 可以从 `.agent/manifest.json` 定位所有必要上下文。 +- Agent 能判断文档是否可编辑、由谁生成、何时更新。 +- 新增或修改模块时,注册、索引、契约和验证保持一致。 +- 架构决策有 ADR,可追溯且可 Review。 + +## Phase 2: Agent Development Workflow + +### 目标 + +让 Agent 能够在明确边界内参与任务执行、变更报告和代码 Review。 + +### 能力建设 + +- 定义 Task Specification Schema。 +- 定义 Execution Report Schema。 +- 定义任务风险等级、允许路径、禁止路径和人工审批条件。 +- 建立统一 Definition of Done。 +- 建立 Agent PR/Review 模板和双阶段 Review:规范符合性、代码质量。 +- 建立任务依赖、状态流转、冲突范围和变更跟踪机制。 +- 提供模块新增、Bug 修复、架构提案等任务模板。 +- 明确 Agent 不可默认执行的副作用:commit、push、merge、release、凭据和平台权限修改。 + +### Exit Criteria + +- 任一任务可在新会话中仅凭任务规格和仓库上下文执行。 +- 每次 Agent 交付都包含真实命令、结果、风险和未完成项。 +- Reviewer 可以根据结构化证据判断是否满足完成条件。 +- 高风险任务不能绕过人工审批。 + +## Phase 3: Engineering Quality System + +### 目标 + +通过自动化门禁保证 Agent 修改可靠,使本地验证与远端验证一致。 + +### 能力建设 + +- 建立统一 `quality_gate`,覆盖生成文档、格式、analyze、test、FlutterGuard。 +- 建立 GitHub Actions 核心 CI 和平台 smoke matrix。 +- 补齐模块入口 smoke、路由/registry contract 和平台 fallback 测试。 +- 定义单元、Widget、Golden、集成和平台测试策略。 +- 建立代码覆盖率的渐进基线,而不是一次性追求高百分比。 +- 增加依赖审计、secret scanning、权限变更检查和 SARIF 输出。 +- 建立教学 UI 的窄屏、桌面、文字缩放和视觉证据流程。 +- 将 required checks 与 branch protection 绑定。 + +### Exit Criteria + +- 未格式化、文档漂移、analyze error、test failure、FlutterGuard high 都会阻止合并。 +- 关键平台至少有构建或 smoke 证据。 +- 新模块没有入口测试、元数据或教学模板时自动失败。 +- CI 产物可以支持 Agent 自主定位失败原因。 + +## Phase 4: Continuous Agent Engineering + +### 目标 + +形成长期可持续的 Agent 协作、知识维护和架构演进机制。 + +### 能力建设 + +- 建立知识 freshness 检查和定期维护任务。 +- 将重复失败转化为规则、测试、脚本或 ADR。 +- 建立架构提案、影响分析、迁移计划和弃用流程。 +- 建立 Agent 规则版本和变更 Review。 +- 建立多 Agent 并行任务冲突控制。 +- 跟踪 CI 失败原因、返工率、文档漂移、测试稳定性和任务完成质量。 +- 建立依赖升级、平台升级和 release readiness 自动检查。 +- 定期删除无效知识,避免上下文无限增长。 + +### Exit Criteria + +- 项目知识随代码变化持续更新,而不是依赖集中补文档。 +- Agent 能提出架构演进方案,并通过 ADR 与质量门禁安全落地。 +- 高频错误持续减少,规则和自动化保持高信号。 +- 多 Agent 并行开发具有明确任务边界和冲突处理方式。 + +--- + +# 4. Task Breakdown + +```yaml +- task_id: AR-P0-001 + title: 恢复依赖解析基线 + phase: Phase 0 + objective: 修复当前失效的 FlutterGuard 依赖,使主工程核心命令恢复可执行。 + background: 当前 flutterguard_cli path 指向已经不存在的子目录,analyze、test 和扫描均在依赖解析阶段失败。 + required_changes: + - 确认并修正 flutterguard_cli 的实际依赖位置。 + - 保留当前 pubspec.yaml 和 pubspec.lock 中已有未提交修改。 + - 重新解析依赖并记录真实版本。 + affected_files: + - pubspec.yaml + - pubspec.lock + constraints: + - 不覆盖用户现有 pubspec 修改。 + - 不同时迁移其他依赖或格式化业务代码。 + acceptance_criteria: + - flutter pub get 成功。 + - flutterguard_cli 可被 dart run 解析。 + validation: + - flutter pub get + - dart run flutterguard_cli:flutterguard --help + +- task_id: AR-P0-002 + title: 决定并落实可复现仓库布局 + phase: Phase 0 + objective: 消除主工程对未声明父目录结构的依赖。 + background: 当前多个共享包通过 ../ path 引用,新 clone 和 CI 无法保证这些目录存在。 + required_changes: + - 编写仓库布局 ADR,比较单仓 workspace 与固定 Git 依赖。 + - 默认将共享包迁入 packages/,将工具迁入 tools/ 或使用固定发布版本。 + - 更新依赖路径、测试入口和 Agent 上下文生成源。 + affected_files: + - docs/adr/0001-repository-layout.md + - pubspec.yaml + - pubspec.lock + - packages/** + - tools/** + - tool/generate_agent_indexes.js + constraints: + - 每个迁入包必须保留自身 pubspec、测试和公共 API。 + - 不在迁移任务中重构包内部业务逻辑。 + acceptance_criteria: + - 仓库内不存在未声明的 path: ../ 依赖。 + - 全新 clone 可以完成依赖解析。 + - 所有迁入包可独立测试。 + validation: + - flutter pub get + - bash tool/test_all.sh + - search repository for forbidden parent path dependencies + +- task_id: AR-P0-003 + title: 锁定开发工具链 + phase: Phase 0 + objective: 让开发者、Agent 和 CI 使用一致的 Flutter 与 Node 工具版本。 + background: 当前文档只声明 Flutter 3.x/Dart 3.x,无法保证格式化、分析和生成结果一致。 + required_changes: + - 锁定 Flutter 3.44.6。 + - 锁定 Node.js 20.20.2。 + - 声明 Dart、JDK、Android SDK、Xcode 和 CocoaPods 的兼容要求。 + affected_files: + - .fvmrc + - .nvmrc + - docs/DEVELOPMENT.md + - README.md + constraints: + - 不将 Docker 作为 iOS/macOS 唯一开发环境。 + - 版本事实只维护一个权威来源。 + acceptance_criteria: + - 环境文档包含精确版本和兼容策略。 + - CI 使用相同 Flutter/Node 版本。 + validation: + - fvm flutter --version + - node --version + - flutter doctor -v + +- task_id: AR-P0-004 + title: 建立环境检查和自举入口 + phase: Phase 0 + objective: 用固定脚本完成环境诊断、依赖准备和 hook 启用。 + background: 当前环境准备步骤分散,且不会提前发现依赖目录和平台工具缺失。 + required_changes: + - 新增只读环境检查脚本。 + - 新增 bootstrap 脚本。 + - 输出稳定阶段标识、缺失项和修复建议。 + affected_files: + - tool/check_environment.sh + - tool/bootstrap.sh + - docs/agent/COMMANDS.json + - README.md + constraints: + - 环境检查不得修改业务代码。 + - bootstrap 必须可重复执行。 + - 不自动安装需要管理员权限的软件。 + acceptance_criteria: + - 新环境可通过一个命令得到完整诊断。 + - bootstrap 重复执行不产生额外 diff。 + validation: + - bash tool/check_environment.sh + - bash tool/bootstrap.sh + - git diff --check + +- task_id: AR-P0-005 + title: 收敛格式化基线 + phase: Phase 0 + objective: 将当前格式差异收敛为独立、无逻辑修改的基线变更。 + background: 当前 formatter 会修改大量 Dart 文件,后续变更容易被格式噪声掩盖。 + required_changes: + - 对全仓 Dart 文件执行统一 formatter。 + - 确保该任务不包含业务逻辑变更。 + affected_files: + - lib/**/*.dart + - test/**/*.dart + constraints: + - 独立提交。 + - 不修改 YAML、JSON、Markdown 或依赖版本。 + acceptance_criteria: + - 第二次执行 formatter 不产生 diff。 + - analyze 和 tests 不因格式化产生行为变化。 + validation: + - dart format . + - git diff --exit-code after second format run + - flutter analyze + - flutter test + +- task_id: AR-P0-006 + title: 清理项目入口文档漂移 + phase: Phase 0 + objective: 让 README 只包含当前真实且可执行的信息。 + background: README 存在失效计划文档引用,专项计划包含迁移前路径。 + required_changes: + - 删除或恢复失效文档引用。 + - 更新迁移前路径。 + - 将历史测试数字标记为历史记录或移出权威说明。 + - 将详细环境步骤链接到 DEVELOPMENT 文档。 + affected_files: + - README.md + - GCODE_VISUALIZER_EVOLUTION_PLAN.md + - docs/DEVELOPMENT.md + constraints: + - 不复制机器上下文中的模块清单。 + - 不声明未经真实构建验证的平台支持。 + acceptance_criteria: + - 仓库内文档链接均有效。 + - README 命令可在当前基线运行。 + validation: + - run repository documentation link checker + - bash tool/bootstrap.sh + +- task_id: AR-P1-001 + title: 建立 Agent 上下文导航入口 + phase: Phase 1 + objective: 让任意 Agent 从单一 manifest 定位项目权威上下文。 + background: 当前上下文文件已经较完整,但入口分散,不同 Agent 可能读取不同集合。 + required_changes: + - 创建 .agent/manifest.json。 + - 引用 AGENTS、project context、task queue、schema、module index、commands 和 ADR index。 + - 标注 authored/generated、owner、update trigger 和读取优先级。 + affected_files: + - .agent/manifest.json + - AI_ANALYSIS_SCHEMA.json + - AGENTS.md + constraints: + - manifest 只做导航,不复制上下文内容。 + - 使用 JSON,不引入自然语言 Markdown 机器契约。 + acceptance_criteria: + - manifest 可通过 schema 校验。 + - Agent 能从 manifest 找到所有必读内容。 + validation: + - node tool/validate_agent_docs.js + - validate .agent/manifest.json against schema + +- task_id: AR-P1-002 + title: 建立 ADR 治理体系 + phase: Phase 1 + objective: 记录不可从代码直接推导的架构决策及其原因。 + background: 当前已有架构结果,但缺少正式决策记录、替代方案和废弃流程。 + required_changes: + - 定义 ADR 模板、状态和索引。 + - 补录仓库布局、上下文权威源、平台能力边界和质量门禁决策。 + affected_files: + - docs/adr/README.md + - docs/adr/0001-repository-layout.md + - docs/adr/0002-agent-context-source-of-truth.md + - docs/adr/0003-platform-capability-boundary.md + - docs/adr/0004-quality-gate.md + constraints: + - ADR 记录 why,不复制代码结构清单。 + - 已接受 ADR 的替换必须通过新 ADR supersede。 + acceptance_criteria: + - 每个核心架构约束都有可追溯决策。 + - ADR 状态和替代关系可被工具解析。 + validation: + - run ADR index validator + - run documentation link checker + +- task_id: AR-P1-003 + title: 消除模块元数据双源维护 + phase: Phase 1 + objective: 建立路由、模块元数据和 Agent 模块索引的单一事实源。 + background: 当前模块清单同时存在于 Dart 路由表和 Node 生成器中。 + required_changes: + - 选择结构化 registry manifest 或可解析的 Dart registry 作为唯一源。 + - 从唯一源生成或验证路由与 Agent 索引。 + - 删除生成器中的重复手写模块数组。 + affected_files: + - lib/app/router/app_route_table.dart + - tool/generate_agent_indexes.js + - tool/validate_agent_docs.js + - lib/AI_MODULE_INDEX.md + - lib/modules/**/AI_ANALYSIS.md + constraints: + - 不改变现有公开 route。 + - 生成过程必须 deterministic。 + acceptance_criteria: + - 新增模块只需修改一个权威注册源。 + - 重复 route、缺失 entry、缺失 metadata 会校验失败。 + validation: + - bash tool/generate_harness_ai_analysis.sh + - run generator twice and assert zero diff + - node tool/validate_agent_docs.js + +- task_id: AR-P1-004 + title: 扩展 Agent 文档一致性校验 + phase: Phase 1 + objective: 将已有文档规则转化为自动化结构和交叉引用检查。 + background: 当前验证器只覆盖基础 JSON、必需键和部分索引一致性。 + required_changes: + - 校验 module_entry.dart、分析文档、路由注册和 metadata 完整性。 + - 校验父子索引、命名风格、状态值和教学模板要求。 + - 增加 validator fixtures 和自动测试。 + affected_files: + - tool/validate_agent_docs.js + - tool/test_agent_docs/** + - AI_ANALYSIS_SCHEMA.json + constraints: + - 失败输出必须稳定且包含文件路径和错误代码。 + - 不通过扫描生成手工文件清单。 + acceptance_criteria: + - 每类违规至少有一个负向 fixture。 + - 校验器失败能精确定位原因。 + validation: + - run Node validator test suite + - node tool/validate_agent_docs.js + +- task_id: AR-P1-005 + title: 定义项目知识生命周期 + phase: Phase 1 + objective: 规定知识应进入契约、ADR、任务记录还是运行产物。 + background: 缺少生命周期会导致 AGENTS 和上下文不断膨胀,临时事实长期残留。 + required_changes: + - 定义知识分类、owner、review 周期和删除条件。 + - 规定临时进度不得进入长期上下文。 + - 规定架构变化、模块变化和命令变化的更新触发器。 + affected_files: + - docs/agent/KNOWLEDGE_LIFECYCLE.md + - .agent/manifest.json + - AGENTS.md + constraints: + - 不复制现有模块契约内容。 + - 每类知识必须只有一个权威位置。 + acceptance_criteria: + - 常见知识类型均可映射到明确存储位置。 + - generated 与 authored 文档更新责任明确。 + validation: + - manual architecture review + - run documentation consistency checker + +- task_id: AR-P2-001 + title: 定义 Agent Task Specification + phase: Phase 2 + objective: 将开发任务表达为边界明确、可验证的机器契约。 + background: 当前任务队列有目标与验收,但缺少修改范围、风险、禁止行为和人工审批字段。 + required_changes: + - 创建 Task Schema。 + - 定义 goal、scope、dependencies、acceptance、validation、risk 和 manual_review。 + - 提供 feature、bugfix、refactor 和 architecture proposal 示例。 + affected_files: + - docs/agent/TASK_SCHEMA.json + - docs/agent/examples/tasks/*.json + - REFACTOR_PLAN.md + - tool/generate_agent_indexes.js + constraints: + - 每个 acceptance criterion 必须映射到命令或人工证据。 + - 单个任务必须具有单一目标。 + acceptance_criteria: + - 示例任务全部通过 schema 校验。 + - REFACTOR_PLAN 中活动任务可以映射到新 schema。 + validation: + - run JSON Schema validation for task examples + - node tool/validate_agent_docs.js + +- task_id: AR-P2-002 + title: 定义 Agent Execution Report + phase: Phase 2 + objective: 让 Agent 交付包含可审计的修改、验证和风险证据。 + background: 自然语言完成说明不利于自动 Review,也无法防止虚构或遗漏验证结果。 + required_changes: + - 创建 Change Report Schema。 + - 定义 changed_files、commands、exit_codes、tests、artifacts、risks 和 followups。 + - 提供成功、部分完成和阻塞三类示例。 + affected_files: + - docs/agent/CHANGE_REPORT_SCHEMA.json + - docs/agent/examples/reports/*.json + constraints: + - 报告不得将未执行命令标为成功。 + - 外部副作用必须包含可验证 handle。 + acceptance_criteria: + - 三类示例均通过 schema 校验。 + - CI 可读取报告并展示验证摘要。 + validation: + - run JSON Schema validation for report examples + +- task_id: AR-P2-003 + title: 建立统一 Definition of Done + phase: Phase 2 + objective: 定义所有人类和 Agent 任务的共同完成标准。 + background: 当前验收规则存在,但分散在 AGENTS、README 和计划文档中。 + required_changes: + - 定义通用完成条件。 + - 定义逻辑、UI、平台、依赖和架构变更的附加条件。 + - 将命令引用到 COMMANDS,而不是重复命令实现。 + affected_files: + - CONTRIBUTING.md + - docs/agent/COMMANDS.json + - AGENTS.md + constraints: + - 完成条件必须可验证。 + - 不允许以“Agent 认为完成”作为验收依据。 + acceptance_criteria: + - 每类变更都有明确自动和人工验收要求。 + - AGENTS 与 CONTRIBUTING 不重复维护命令细节。 + validation: + - manual process review + - documentation consistency check + +- task_id: AR-P2-004 + title: 建立风险分级和副作用授权规则 + phase: Phase 2 + objective: 防止 Agent 默认执行高风险工程操作。 + background: 依赖升级、原生权限、发布和 Git 远端操作需要比普通代码修改更强的控制。 + required_changes: + - 定义 low、medium、high 风险级别。 + - 定义必须人工审批的变更类别。 + - 将风险要求接入任务 schema 和 PR 模板。 + affected_files: + - docs/agent/RISK_POLICY.md + - docs/agent/TASK_SCHEMA.json + - .github/pull_request_template.md + - AGENTS.md + constraints: + - commit、push、merge、release 和凭据操作默认禁止。 + - 不在文档中记录任何密钥值。 + acceptance_criteria: + - 高风险示例任务缺少 manual_review 时 schema 校验失败。 + - PR 模板能够显式展示风险和审批状态。 + validation: + - run task policy tests + - manual security review + +- task_id: AR-P2-005 + title: 建立 Agent Review 流程 + phase: Phase 2 + objective: 将规范符合性 Review 与代码质量 Review 分离。 + background: 单次泛化 Review 容易同时遗漏任务越界和实现质量问题。 + required_changes: + - 定义第一阶段 spec compliance review。 + - 定义第二阶段 code quality/security review。 + - 建立 PR checklist 和 review report 模板。 + affected_files: + - docs/agent/REVIEW_PROCESS.md + - .github/pull_request_template.md + - .github/CODEOWNERS + constraints: + - 规范不符合时不得进入代码质量批准。 + - Reviewer 不得仅依赖 Agent 自述,必须检查真实 diff 和 CI。 + acceptance_criteria: + - Review 模板覆盖 scope、acceptance、tests、architecture 和 risk。 + - 高风险目录拥有明确 owner。 + validation: + - dry-run one existing task through review template + - manual maintainer approval + +- task_id: AR-P2-006 + title: 建立多 Agent 任务冲突协议 + phase: Phase 2 + objective: 让并行 Agent 在明确范围内工作并提前暴露冲突。 + background: 多 Agent 可能同时修改路由、生成源、pubspec 或同一模块。 + required_changes: + - 定义任务 claim、allowed paths、shared hotspots 和 dependency 状态。 + - 定义冲突检测和重新排队规则。 + - 标记必须串行执行的全局文件。 + affected_files: + - docs/agent/COLLABORATION_PROTOCOL.md + - docs/agent/TASK_SCHEMA.json + - REFACTOR_PLAN.md + constraints: + - 不引入复杂分布式锁服务。 + - 先使用任务元数据和 CI 冲突检查实现。 + acceptance_criteria: + - 两个重叠 scope 的 active 任务可被检测。 + - 全局生成源变更会自动标记为串行任务。 + validation: + - run overlap detection fixtures + - simulate two conflicting task specifications + +- task_id: AR-P3-001 + title: 建立统一质量门禁 + phase: Phase 3 + objective: 用一个脚本执行所有核心质量检查并保留准确失败码。 + background: 当前检查命令分散,本地与未来 CI 容易产生差异。 + required_changes: + - 建立 quality_gate 脚本。 + - 依次执行生成文档、漂移检查、格式、analyze、tests 和 FlutterGuard。 + - 输出稳定阶段标识和最终摘要。 + affected_files: + - tool/quality_gate.sh + - tool/test_all.sh + - docs/agent/COMMANDS.json + - AGENTS.md + - .githooks/pre-commit + constraints: + - 任一阶段失败必须返回非零状态。 + - CI 与本地调用同一个脚本。 + acceptance_criteria: + - 模拟每类失败时 quality gate 都能阻止通过。 + - 全部通过时工作区没有未预期生成差异。 + validation: + - bash tool/quality_gate.sh + - run failure fixtures for each gate stage + +- task_id: AR-P3-002 + title: 建立核心 CI Workflow + phase: Phase 3 + objective: 在远端对所有 PR 执行不可绕过的核心质量门禁。 + background: 当前没有 .github/workflows,规则只依赖本地配置。 + required_changes: + - 创建 Linux 核心 CI。 + - 配置 Flutter/Node 缓存与精确版本。 + - 上传测试、覆盖率和 FlutterGuard SARIF。 + - 配置并发取消和超时。 + affected_files: + - .github/workflows/ci.yml + - .github/CODEOWNERS + - .github/pull_request_template.md + constraints: + - CI 必须调用仓库内 quality_gate。 + - 不在 workflow 中复制质量门禁逻辑。 + acceptance_criteria: + - PR 自动运行核心门禁。 + - 失败检查阻止合并。 + - 日志和产物足以定位失败。 + validation: + - trigger CI on test pull request + - verify required check and SARIF upload + +- task_id: AR-P3-003 + title: 建立测试策略和模块最低测试契约 + phase: Phase 3 + objective: 明确不同变更类型所需测试,并为每个模块建立入口 smoke 基线。 + background: 当前测试只覆盖部分模块,不能保证所有 module entry 和 route 可渲染。 + required_changes: + - 定义单元、Widget、Golden、集成和平台测试适用条件。 + - 为所有模块增加或生成入口 smoke 测试。 + - 增加 registry/route contract tests。 + affected_files: + - docs/TESTING.md + - test/modules/** + - test/shared/module_registry_contract_test.dart + - tool/validate_agent_docs.js + constraints: + - smoke test 不依赖脆弱的精确像素和动画时序。 + - 逻辑测试覆盖正常、边界和错误路径。 + acceptance_criteria: + - 每个注册模块至少有入口 smoke 证据。 + - 路由和 registry 不一致时测试失败。 + validation: + - flutter test + - node tool/validate_agent_docs.js + +- task_id: AR-P3-004 + title: 建立平台构建与 Smoke Matrix + phase: Phase 3 + objective: 将平台支持声明转化为实际构建和降级行为证据。 + background: 当前目标平台包括 Android、iOS、macOS 和 Windows,但尚无远端平台矩阵。 + required_changes: + - 创建 macOS、Windows、Android 分层 workflow。 + - Android readiness 完成后加入 emulator smoke。 + - 为不支持的平台验证 availability/fallback 状态。 + affected_files: + - .github/workflows/platform-smoke.yml + - integration_test/** + - REFACTOR_PLAN.md + constraints: + - Windows build 只在 Windows runner 执行。 + - iOS/macOS 只在 macOS runner 执行。 + - 尚未 ready 的平台先作为 non-blocking check。 + acceptance_criteria: + - 已声明支持的平台至少有 build 证据。 + - unsupported module 不崩溃并展示明确状态。 + validation: + - flutter build macos + - flutter build windows on Windows CI + - flutter build apk --debug + - flutter test integration_test + +- task_id: AR-P3-005 + title: 建立安全与供应链门禁 + phase: Phase 3 + objective: 降低 Agent 引入不安全依赖、密钥和平台权限的风险。 + background: 当前已有 FlutterGuard,但缺少依赖、secret 和权限变更专项检查。 + required_changes: + - 配置 secret scanning 和 dependency review。 + - 配置 Dependabot 或等价依赖更新机制。 + - 对 Android/iOS/macOS/Windows 权限文件设置 owner 和 Review 要求。 + - 保留 FlutterGuard SARIF。 + affected_files: + - .github/dependabot.yml + - .github/workflows/security.yml + - .github/CODEOWNERS + - SECURITY.md + constraints: + - 不自动合并依赖升级。 + - 高风险权限变更必须人工 Review。 + acceptance_criteria: + - 测试密钥 fixture 会触发扫描失败。 + - 依赖变更会生成 review 报告。 + - 平台权限文件变更需要指定 owner。 + validation: + - run security workflow with fixtures + - verify dependency review on test PR + +- task_id: AR-P3-006 + title: 建立教学 UI 视觉证据流程 + phase: Phase 3 + objective: 为 Agent 的 UI 修改提供稳定、可审计的视觉验收证据。 + background: 当前规则要求人工验收或截图,但没有统一生成和保存方式。 + required_changes: + - 定义 360dp、桌面宽屏和文字缩放场景。 + - 为 recommended 模块建立 screenshot/golden harness。 + - 在 CI 上传差异图和运行截图。 + affected_files: + - docs/TESTING.md + - test/goldens/** + - tool/capture_learning_pages.sh + - .github/workflows/platform-smoke.yml + constraints: + - Golden 更新必须显式审批。 + - 动画页面使用稳定状态,不依赖随机时间点。 + acceptance_criteria: + - UI PR 能产出前后视觉证据。 + - 窄屏 overflow 和文字缩放问题可被测试发现。 + validation: + - flutter test --update-goldens only in approved update flow + - flutter test test/goldens + - verify CI artifact upload + +- task_id: AR-P4-001 + title: 建立知识 Freshness 检查 + phase: Phase 4 + objective: 自动发现过期路径、失效链接、陈旧版本和未更新契约。 + background: 当前已出现 README 失效引用和专项计划旧路径,说明知识会随重构漂移。 + required_changes: + - 增加文档链接和路径检查。 + - 比对工具版本声明与锁定文件。 + - 对生成文档增加更新时间来源而非手工时间戳。 + affected_files: + - tool/check_knowledge_freshness.js + - docs/agent/COMMANDS.json + - .github/workflows/ci.yml + constraints: + - 不依赖容易误报的自由文本语义判断作为阻断条件。 + - 优先检查可确定的路径、链接、版本和 schema。 + acceptance_criteria: + - 失效仓库路径和文档链接会使 CI 失败。 + - 版本声明漂移会被检测。 + validation: + - run freshness checker fixtures + - node tool/check_knowledge_freshness.js + +- task_id: AR-P4-002 + title: 建立架构演进提案流程 + phase: Phase 4 + objective: 让 Agent 可以提出、评估并安全实施架构变化。 + background: Agent 当前可以修改代码,但缺少正式的影响分析和迁移治理流程。 + required_changes: + - 定义 architecture proposal 模板。 + - 要求 alternatives、impact、migration、rollback 和 enforcement plan。 + - 将已接受提案转化为 ADR、任务和自动规则。 + affected_files: + - docs/agent/ARCHITECTURE_PROPOSAL.md + - docs/adr/README.md + - docs/agent/TASK_SCHEMA.json + constraints: + - Agent 不得自行批准架构提案。 + - 架构变化必须包含回滚或兼容策略。 + acceptance_criteria: + - 提案可以拆分为可执行任务。 + - 接受后的约束至少有文档或自动化 enforcement。 + validation: + - dry-run one platform-boundary proposal + - manual architecture board review + +- task_id: AR-P4-003 + title: 建立失败反馈到工程规则的闭环 + phase: Phase 4 + objective: 将重复出现的 Agent 失败转化为测试、检查或知识改进。 + background: 仅记录失败不会提高后续 Agent 的成功率,需要明确升级机制。 + required_changes: + - 定义失败分类和复盘模板。 + - 规定重复失败升级为规则、fixture、测试、脚本或 ADR的条件。 + - 记录修复后的防回归证据。 + affected_files: + - docs/agent/FAILURE_FEEDBACK_LOOP.md + - docs/agent/CHANGE_REPORT_SCHEMA.json + - tool/quality_gate.sh + constraints: + - 不将单次临时故障直接写入长期 AGENTS。 + - 新规则必须有真实失败案例和验证方式。 + acceptance_criteria: + - 重复失败可关联到具体防回归机制。 + - 无效或高误报规则可以被废弃并记录原因。 + validation: + - review three historical failure examples + - verify each selected example maps to a durable control + +- task_id: AR-P4-004 + title: 建立 Agent 工程健康指标 + phase: Phase 4 + objective: 用少量高信号指标评估 Agent 化改造是否真正提升交付质量。 + background: 缺少指标时容易以文档数量代替工程效果。 + required_changes: + - 跟踪 bootstrap 成功率、CI 首次通过率、返工率、漂移失败和 flaky tests。 + - 跟踪任务越界、缺失验证和人工回退原因。 + - 定义季度清理和改进节奏。 + affected_files: + - docs/agent/ENGINEERING_METRICS.md + - .github/workflows/ci.yml + - tool/report_engineering_health.js + constraints: + - 不以代码量、文档量或 Agent 调用次数作为核心成功指标。 + - 不收集密钥、提示内容或个人敏感数据。 + acceptance_criteria: + - 指标可以由 CI 和任务报告自动汇总。 + - 每个指标都有明确改善动作,而不是只展示数字。 + validation: + - generate sample engineering health report from CI fixtures + - manual quarterly review dry-run + +- task_id: AR-P4-005 + title: 建立知识和规则精简机制 + phase: Phase 4 + objective: 防止 Agent 上下文、规则和历史文档无限增长。 + background: 长期 Agent 协作容易积累重复、过期和互相冲突的规则。 + required_changes: + - 定义规则合并、废弃和归档流程。 + - 检测重复命令、重复约束和孤立文档。 + - 对 AGENTS、manifest 和机器上下文设置规模与职责边界。 + affected_files: + - docs/agent/KNOWLEDGE_LIFECYCLE.md + - tool/check_knowledge_freshness.js + - .agent/manifest.json + constraints: + - 删除架构知识前必须确认是否已被 ADR 或代码规则吸收。 + - 不保留可以从代码稳定生成的手工清单。 + acceptance_criteria: + - 重复和孤立知识可自动报告。 + - 每次季度维护可以删除或合并无效上下文。 + validation: + - run duplicate/orphan knowledge checker + - manual review of generated cleanup report +``` + +--- + +## Recommended Execution Order + +1. `AR-P0-001` 恢复依赖解析。 +2. `AR-P0-002` 落实单仓或固定依赖布局。 +3. `AR-P0-003` 至 `AR-P0-006` 建立可复现基线。 +4. `AR-P1-*` 建立上下文单一事实源和 ADR。 +5. `AR-P2-*` 建立任务、报告、风险和 Review 协议。 +6. `AR-P3-001` 与 `AR-P3-002` 优先建立强制质量门禁。 +7. 逐步完成测试、安全、平台和视觉证据能力。 +8. 最后启用 `AR-P4-*` 的长期治理与反馈闭环。 + +## Transformation Completion Definition + +当以下条件同时满足时,项目可视为达到 Agent-Ready 基础成熟度: + +- 一次 clone 后可以通过标准脚本自举。 +- Agent 能从统一 manifest 获取上下文和规则。 +- 每个任务有明确 scope、风险、验收和验证。 +- 每次交付有真实、机器可读的执行证据。 +- 代码、文档、模块索引和架构约束之间不存在未检测漂移。 +- 本地与 CI 使用同一质量门禁,失败会阻止合并。 +- 架构演进通过 ADR、Review 和自动 enforcement 落地。 +- 项目知识能够更新、精简和淘汰,而不是只增不减。 diff --git a/.hermes/plans/2026-07-22_172850-p0-codex-execution-queue.md b/.hermes/plans/2026-07-22_172850-p0-codex-execution-queue.md new file mode 100644 index 0000000..6bf5c85 --- /dev/null +++ b/.hermes/plans/2026-07-22_172850-p0-codex-execution-queue.md @@ -0,0 +1,1045 @@ +# P0 Codex Execution Queue + +> Scope: only Phase 0 tasks from the approved Agent-Ready Project Transformation Roadmap. +> +> Execution model: execute one task at a time in dependency order. Start each task in a clean Codex context. Do not commit, push, merge, publish, or modify files outside the task allowlist. + +## Queue Order + +| Order | Task ID | Depends on | Codex direct | Claude architecture review | Human confirmation | +|---|---|---|---|---|---| +| 1 | AR-P0-001 | none | Yes, after confirmation | No | Required before start | +| 2 | AR-P0-002 | AR-P0-001 | Draft only | Required | Required for acceptance | +| 3 | AR-P0-003 | AR-P0-002 accepted | Yes, after confirmation | Required after implementation | Required before start and before deleting legacy layout | +| 4 | AR-P0-004 | AR-P0-001 | Yes | No | Not required | +| 5 | AR-P0-005 | AR-P0-004 | Yes | No | Not required | +| 6 | AR-P0-006 | AR-P0-003, AR-P0-005 | Yes | No | Not required | +| 7 | AR-P0-007 | AR-P0-003 | Yes, after confirmation | No | Required before start | +| 8 | AR-P0-008 | AR-P0-003, AR-P0-004, AR-P0-006 | Yes | No | Required only if documentation changes project claims | +| 9 | AR-P0-009 | AR-P0-006, AR-P0-007, AR-P0-008 | Yes, read-only | No | Required to accept P0 completion | + +--- + +## AR-P0-001 — Restore Dependency Resolution + +```yaml +task_id: AR-P0-001 +objective: > + Repair only the invalid flutterguard_cli path dependency so the current main + application can resolve packages again. + +execution_classification: + codex_can_execute: true + claude_architecture_review: false + human_confirmation: required_before_start + +context: > + The working tree already contains user-owned modifications in pubspec.yaml and + pubspec.lock. The current flutterguard_cli dependency points to + ../flutterguard/packages/flutterguard_cli, while the package currently exists at + ../flutterguard. Preserve every unrelated user change. This task is a narrow + baseline repair; it must not decide or implement the final repository layout. + +files_to_inspect: + - AGENTS.md + - AI_ANALYSIS_SCHEMA.json + - AI_PROJECT_CONTEXT.md + - REFACTOR_PLAN.md + - pubspec.yaml + - pubspec.lock + - ../flutterguard/pubspec.yaml + - ../flutterguard/bin/flutterguard.dart + - .githooks/pre-commit + +files_allowed_to_modify: + - pubspec.yaml + - pubspec.lock + +files_forbidden_to_modify: + - lib/** + - test/** + - tool/** + - .githooks/** + - macos/** + - windows/** + - ../flutterguard/** + - ../gcode_core/** + - ../flutter_study_learning/** + - ../file_picker_bridge/** + - ../flutter_ioc_core/** + - all files not explicitly allowed + +implementation_steps: + - Capture git status and the existing diff for pubspec.yaml and pubspec.lock. + - Verify the package name and executable in ../flutterguard without modifying it. + - Change only the flutterguard_cli path to the actual package root. + - Run flutter pub get and allow it to update only pubspec.lock. + - Compare the resulting diff with the pre-task diff and confirm unrelated user edits remain. + - Run the FlutterGuard help command to prove executable resolution. + - Do not run formatter and do not edit business code. + +acceptance_criteria: + - flutter pub get exits with code 0. + - flutterguard_cli resolves from the corrected local path. + - The existing SDK/version edits in pubspec.yaml and pubspec.lock are preserved. + - No file other than pubspec.yaml and pubspec.lock changes. + - No commit is created. + +validation_commands: + - git status --short --branch + - git diff -- pubspec.yaml pubspec.lock + - flutter pub get + - dart run flutterguard_cli:flutterguard --help + - git diff --check + - git status --short + +expected_execution_report_format: + task_id: AR-P0-001 + status: completed | blocked | partial + summary: string + inspected_files: [path] + changed_files: [path] + preserved_preexisting_changes: + pubspec_yaml: string + pubspec_lock: string + commands: + - command: string + exit_code: integer + result: string + acceptance: + - criterion: string + status: passed | failed | not_run + evidence: string + risks: [string] + blockers: [string] + followups: [string] + review_required: + claude: false + human: true +``` + +--- + +## AR-P0-002 — Approve the Reproducible Repository Layout + +```yaml +task_id: AR-P0-002 +objective: > + Produce and obtain approval for one repository-layout ADR that selects the + reproducible dependency strategy for the main app and its shared packages. + +execution_classification: + codex_can_execute: draft_only + claude_architecture_review: required + human_confirmation: required_for_acceptance + +context: > + The roadmap recommends a monorepo layout because the current application depends + on undeclared sibling directories. This task makes the decision only; it must not + copy, move, delete, or rewrite package source. The ADR must compare a monorepo + workspace with fixed Git dependencies and record the final approved choice. + +files_to_inspect: + - AGENTS.md + - AI_PROJECT_CONTEXT.md + - REFACTOR_PLAN.md + - pubspec.yaml + - tool/migrate_sibling_packages.sh + - ../gcode_core/pubspec.yaml + - ../flutter_study_learning/pubspec.yaml + - ../file_picker_bridge/pubspec.yaml + - ../flutter_ioc_core/pubspec.yaml + - ../flutterguard/pubspec.yaml + - README.md + +files_allowed_to_modify: + - docs/adr/README.md + - docs/adr/0001-repository-layout.md + +files_forbidden_to_modify: + - pubspec.yaml + - pubspec.lock + - lib/** + - test/** + - tool/** + - packages/** + - tools/** + - ../** + - all files not explicitly allowed + +implementation_steps: + - Create the ADR index only if it does not already exist. + - Draft a decision comparing monorepo workspace and fixed Git dependencies. + - Record decision drivers: one-clone bootstrap, atomic changes, package tests, CI, + release independence, package history, and rollback. + - Select the roadmap default of an in-repository packages/ layout unless a human + supplies a different decision. + - Define the intended locations for the four shared packages and FlutterGuard. + - Define migration boundaries, rollback strategy, and completion criteria. + - Request Claude architecture review of the ADR. + - Apply review corrections only within the two allowed ADR files. + - Stop for explicit human acceptance; do not mark accepted without it. + +acceptance_criteria: + - The ADR contains context, alternatives, decision, consequences, migration, + rollback, and status. + - The ADR identifies one unambiguous target layout. + - Claude architecture review has no unresolved blocking finding. + - A human explicitly changes or approves the ADR status as accepted. + - No source, dependency, or package file changes. + +validation_commands: + - git diff -- docs/adr/README.md docs/adr/0001-repository-layout.md + - git diff --check + - verify all paths referenced by the ADR are syntactically consistent + - git status --short + +expected_execution_report_format: + task_id: AR-P0-002 + status: completed | awaiting_human_approval | blocked + summary: string + decision: + selected_strategy: monorepo_workspace | fixed_git_dependencies | undecided + target_layout: [path] + adr_status: proposed | accepted + inspected_files: [path] + changed_files: [path] + commands: + - command: string + exit_code: integer + result: string + claude_review: + status: approved | changes_requested | not_run + findings: [string] + human_confirmation: + status: approved | rejected | pending + evidence: string + acceptance: + - criterion: string + status: passed | failed | pending + evidence: string + risks: [string] + blockers: [string] + followups: [string] +``` + +--- + +## AR-P0-003 — Implement the Approved Repository Layout + +```yaml +task_id: AR-P0-003 +objective: > + Migrate the declared local dependencies into the repository layout accepted by + ADR 0001 so a fresh clone no longer depends on parent-directory packages. + +execution_classification: + codex_can_execute: true_after_human_confirmation + claude_architecture_review: required_after_implementation + human_confirmation: required_before_start_and_before_legacy_deletion + +context: > + This task executes only the layout accepted in docs/adr/0001-repository-layout.md. + The default expected decision is packages/gcode_core, + packages/flutter_study_learning, packages/file_picker_bridge, + packages/flutter_ioc_core, and tools/flutterguard_cli. Source sibling repositories + are read-only inputs. The task must preserve public APIs and behavior and must not + refactor package internals. If the accepted ADR selects fixed Git dependencies, + Codex must implement that decision instead of the default paths and must not create + packages/ or tools/ copies. + +files_to_inspect: + - AGENTS.md + - AI_ANALYSIS_SCHEMA.json + - AI_PROJECT_CONTEXT.md + - REFACTOR_PLAN.md + - docs/adr/0001-repository-layout.md + - pubspec.yaml + - pubspec.lock + - tool/generate_agent_indexes.js + - tool/migrate_sibling_packages.sh + - all tracked source, pubspec, analysis, README, and test files in each dependency source + +files_allowed_to_modify: + - pubspec.yaml + - pubspec.lock + - packages/gcode_core/** + - packages/flutter_study_learning/** + - packages/file_picker_bridge/** + - packages/flutter_ioc_core/** + - tools/flutterguard_cli/** + - tool/generate_agent_indexes.js + - tool/migrate_sibling_packages.sh + - AI_ANALYSIS_SCHEMA.json + - AI_PROJECT_CONTEXT.md + - REFACTOR_PLAN.md + - AI_ANALYSIS.md + - lib/AI_ANALYSIS.md + - lib/AI_MODULE_INDEX.md + - lib/**/AI_ANALYSIS.md + +files_forbidden_to_modify: + - lib/**/*.dart + - test/**/*.dart + - macos/** + - windows/** + - .githooks/** + - README.md + - GCODE_VISUALIZER_EVOLUTION_PLAN.md + - ../gcode_core/** + - ../flutter_study_learning/** + - ../file_picker_bridge/** + - ../flutter_ioc_core/** + - ../flutterguard/** + - all secrets and credential files + - all files not explicitly allowed + +implementation_steps: + - Verify ADR 0001 is accepted and record the exact selected layout. + - Capture the current working-tree diff and preserve unrelated user changes. + - Import each dependency with its source, tests, manifest, license, and public entrypoint. + - Exclude build output, caches, IDE state, credentials, and repository-internal .git data. + - Update root dependency paths or fixed Git references exactly as approved. + - Update only Agent documentation generator source required by the new dependency paths. + - Regenerate machine Agent documents using the project generator. + - Update or retire the one-time sibling migration script so it cannot overwrite the + new canonical packages. + - Resolve dependencies from the repository root. + - Run each imported package's own analyze/test command before testing the app. + - Run root analyze, tests, and FlutterGuard. + - Search tracked manifests and machine contracts for forbidden parent path dependencies. + - Request Claude architecture review focused on boundaries, package ownership, public + APIs, and source-of-truth consistency. + - Do not delete or modify sibling source repositories. Report them as legacy cleanup + requiring separate human action. + +acceptance_criteria: + - A fresh checkout of the current repository contains every local dependency required + for root dependency resolution, or uses the accepted fixed Git references. + - No tracked manifest depends on undeclared parent-directory paths. + - Imported package public APIs and tests remain intact. + - Root flutter pub get succeeds. + - Each package test suite succeeds. + - Root flutter analyze and flutter test succeed, or pre-existing failures are reported + with evidence and no new failure is introduced. + - FlutterGuard completes without high-severity findings introduced by the migration. + - Generated Agent documents contain the approved dependency paths and validate. + - Sibling repositories remain unchanged. + - Claude architecture review has no unresolved blocking finding. + +validation_commands: + - git status --short --branch + - flutter pub get + - run dart pub get and dart test for each pure Dart package + - run flutter pub get and flutter test for each Flutter package + - run dart test in tools/flutterguard_cli + - bash tool/generate_harness_ai_analysis.sh + - node tool/validate_agent_docs.js + - flutter analyze + - flutter test + - dart run flutterguard_cli:flutterguard scan --path . --fail-on high + - git diff --check + - search tracked pubspec and contract files for forbidden path: ../ dependencies + +expected_execution_report_format: + task_id: AR-P0-003 + status: completed | blocked | partial + summary: string + approved_adr: + path: docs/adr/0001-repository-layout.md + strategy: string + status: accepted + imported_dependencies: + - name: string + source: string + destination: string + source_unchanged: boolean + inspected_files: [path] + changed_files: [path] + preserved_preexisting_changes: [string] + commands: + - command: string + working_directory: string + exit_code: integer + result: string + acceptance: + - criterion: string + status: passed | failed | not_run + evidence: string + claude_review: + status: approved | changes_requested | not_run + findings: [string] + human_confirmation: + before_start: approved | missing + legacy_cleanup: approved | deferred | rejected + risks: [string] + blockers: [string] + followups: [string] +``` + +--- + +## AR-P0-004 — Pin the Development Toolchain + +```yaml +task_id: AR-P0-004 +objective: > + Add repository-level version pins for Flutter and Node so local and CI tooling can + select deterministic tool versions. + +execution_classification: + codex_can_execute: true + claude_architecture_review: false + human_confirmation: not_required + +context: > + The approved roadmap baseline uses Flutter 3.44.6, Dart 3.12.2, and Node.js + 20.20.2. Dart is supplied by Flutter and must not be independently pinned to an + incompatible SDK. This task adds version-selection files only; environment scripts + and documentation are separate tasks. + +files_to_inspect: + - AGENTS.md + - pubspec.yaml + - .metadata + - README.md + - existing tool-version files if present + +files_allowed_to_modify: + - .fvmrc + - .nvmrc + +files_forbidden_to_modify: + - pubspec.yaml + - pubspec.lock + - README.md + - docs/** + - lib/** + - test/** + - tool/** + - all files not explicitly allowed + +implementation_steps: + - Confirm neither version file contains user-owned content that would be overwritten. + - Add a valid FVM configuration pinning Flutter 3.44.6. + - Add an NVM version file pinning Node.js 20.20.2. + - Validate file syntax and compare pins with the current approved roadmap versions. + - Do not install, upgrade, or switch SDKs in this task. + +acceptance_criteria: + - .fvmrc is valid and pins Flutter 3.44.6. + - .nvmrc contains Node.js 20.20.2. + - No other file changes. + - No SDK installation or system configuration occurs. + +validation_commands: + - node -e "JSON.parse(require('fs').readFileSync('.fvmrc','utf8')); console.log('fvmrc_valid')" + - test "$(tr -d '[:space:]' < .nvmrc)" = "20.20.2" + - git diff --check + - git status --short + +expected_execution_report_format: + task_id: AR-P0-004 + status: completed | blocked | partial + summary: string + inspected_files: [path] + changed_files: [path] + pinned_versions: + flutter: 3.44.6 + node: 20.20.2 + dart_source: flutter_sdk + commands: + - command: string + exit_code: integer + result: string + acceptance: + - criterion: string + status: passed | failed | not_run + evidence: string + risks: [string] + blockers: [string] + followups: [string] + review_required: + claude: false + human: false +``` + +--- + +## AR-P0-005 — Add the Read-Only Environment Check + +```yaml +task_id: AR-P0-005 +objective: > + Create one read-only environment diagnostic command that verifies required project + tools and reports actionable missing prerequisites. + +execution_classification: + codex_can_execute: true + claude_architecture_review: false + human_confirmation: not_required + +context: > + The script must validate the repository pins and platform prerequisites without + installing software, changing Flutter configuration, fetching dependencies, or + modifying source. It must work from any current directory by resolving the project + root from the script location. Platform-specific checks may be reported as required, + optional, or not applicable. + +files_to_inspect: + - AGENTS.md + - .fvmrc + - .nvmrc + - pubspec.yaml + - README.md + - macos/** configuration entrypoints + - windows/** configuration entrypoints + +files_allowed_to_modify: + - tool/check_environment.sh + +files_forbidden_to_modify: + - .fvmrc + - .nvmrc + - pubspec.yaml + - pubspec.lock + - README.md + - docs/** + - lib/** + - test/** + - macos/** + - windows/** + - all files not explicitly allowed + +implementation_steps: + - Implement strict Bash error handling and project-root resolution. + - Read expected Flutter and Node versions from .fvmrc and .nvmrc rather than duplicating them. + - Check availability and versions of Flutter, Dart, Node, and Git. + - Check Flutter Doctor and report Android, Xcode, CocoaPods, and connected-device status + without treating non-target platform tools as universal hard failures. + - Check that all in-repository dependency paths declared by pubspec exist. + - Emit stable machine-readable stage/result prefixes in addition to human-readable guidance. + - Return zero only when required baseline prerequisites pass. + - Add no install commands and perform no mutation. + +acceptance_criteria: + - The script is read-only and repeatable. + - It reads version pins from repository files. + - Missing required tools produce a nonzero exit code and a remediation message. + - Optional platform gaps are clearly distinguished from required failures. + - Running the script twice produces no repository diff. + +validation_commands: + - bash -n tool/check_environment.sh + - bash tool/check_environment.sh + - git diff --exit-code after two consecutive runs, excluding pre-existing changes + - git diff --check + +expected_execution_report_format: + task_id: AR-P0-005 + status: completed | blocked | partial + summary: string + inspected_files: [path] + changed_files: [path] + environment_results: + - capability: string + required: boolean + status: passed | failed | optional_missing + detected_version: string | null + expected_version: string | null + commands: + - command: string + exit_code: integer + result: string + mutation_check: + repository_diff_created_by_script: boolean + evidence: string + acceptance: + - criterion: string + status: passed | failed | not_run + evidence: string + risks: [string] + blockers: [string] + followups: [string] + review_required: + claude: false + human: false +``` + +--- + +## AR-P0-006 — Add the Idempotent Bootstrap Command + +```yaml +task_id: AR-P0-006 +objective: > + Create one idempotent bootstrap command that prepares repository dependencies and + local Git hooks after the environment check passes. + +execution_classification: + codex_can_execute: true + claude_architecture_review: false + human_confirmation: not_required + +context: > + Repository layout must already be canonical and the environment checker must exist. + Bootstrap may create normal package-manager caches and generated dependency metadata, + but must not edit business source, install administrator-level software, modify global + Git configuration, or run destructive migration scripts. + +files_to_inspect: + - AGENTS.md + - docs/adr/0001-repository-layout.md + - pubspec.yaml + - packages/**/pubspec.yaml + - tools/flutterguard_cli/pubspec.yaml + - tool/check_environment.sh + - .githooks/pre-commit + - .gitignore + +files_allowed_to_modify: + - tool/bootstrap.sh + +files_forbidden_to_modify: + - pubspec.yaml + - pubspec.lock + - packages/** + - tools/** + - lib/** + - test/** + - docs/** + - README.md + - .githooks/** + - .gitignore + - global Git configuration + - all files not explicitly allowed + +implementation_steps: + - Resolve the repository root from the script location. + - Run tool/check_environment.sh and stop on required failures. + - Fetch root dependencies. + - Fetch dependencies for workspace packages/tools only when the selected workspace mechanism + does not already do so. + - Set repository-local core.hooksPath to .githooks. + - Verify the expected hook is executable; report, but do not silently rewrite it. + - Print the next recommended validation command. + - Run bootstrap twice and confirm the second run is successful and does not modify tracked source. + +acceptance_criteria: + - Bootstrap succeeds on a correctly configured checkout. + - Bootstrap stops before dependency mutation when required environment checks fail. + - Repository-local hooksPath equals .githooks after success. + - Running bootstrap twice is safe and produces no tracked source diff. + - No global configuration or administrator-level installation occurs. + +validation_commands: + - bash -n tool/bootstrap.sh + - bash tool/bootstrap.sh + - bash tool/bootstrap.sh + - git config --local --get core.hooksPath + - git diff --check + - git status --short + +expected_execution_report_format: + task_id: AR-P0-006 + status: completed | blocked | partial + summary: string + inspected_files: [path] + changed_files: [path] + bootstrap_runs: + - run: 1 + exit_code: integer + result: string + - run: 2 + exit_code: integer + result: string + hooks: + configured_path: string + executable: boolean + commands: + - command: string + exit_code: integer + result: string + idempotence: + passed: boolean + evidence: string + acceptance: + - criterion: string + status: passed | failed | not_run + evidence: string + risks: [string] + blockers: [string] + followups: [string] + review_required: + claude: false + human: false +``` + +--- + +## AR-P0-007 — Normalize the Dart Formatting Baseline + +```yaml +task_id: AR-P0-007 +objective: > + Apply the repository's current Dart formatter to tracked Dart source and tests as one + isolated formatting-only change. + +execution_classification: + codex_can_execute: true_after_human_confirmation + claude_architecture_review: false + human_confirmation: required_before_start + +context: > + A prior check showed that many tracked Dart files are not at the formatter baseline. + This is intentionally a broad but mechanical task. It must happen after dependency + resolution is stable so analyze and tests can verify no behavior regression. The task + must not include manual refactors, import redesign, lint fixes, or generated-document changes. + +files_to_inspect: + - AGENTS.md + - analysis_options.yaml + - pubspec.yaml + - current git status and complete pre-task diff + +files_allowed_to_modify: + - lib/**/*.dart + - test/**/*.dart + - packages/**/*.dart + - tools/flutterguard_cli/**/*.dart + +files_forbidden_to_modify: + - pubspec.yaml + - pubspec.lock + - analysis_options.yaml + - README.md + - docs/** + - AI_ANALYSIS_SCHEMA.json + - AI_PROJECT_CONTEXT.md + - REFACTOR_PLAN.md + - '**/AI_ANALYSIS.md' + - macos/** + - windows/** + - all non-Dart files + +implementation_steps: + - Capture git status and identify pre-existing Dart modifications, if any. + - Stop and request human direction if a formatter target already has user-owned changes + whose ownership cannot be separated. + - Run dart format on only the allowed Dart trees. + - Do not manually edit formatter output. + - Run formatter a second time and confirm it reports no changes. + - Run root analyze and tests plus package tests. + - Review the diff to confirm it is formatting-only. + +acceptance_criteria: + - Every changed file is an allowed Dart file. + - A second formatter run produces no diff. + - No semantic/manual code change is introduced. + - Root analyze and tests pass, or pre-existing failures are documented with evidence. + - Package tests pass, or pre-existing failures are documented with evidence. + - No commit is created. + +validation_commands: + - git status --short --branch + - dart format lib test packages tools/flutterguard_cli + - dart format lib test packages tools/flutterguard_cli + - flutter analyze + - flutter test + - run tests for each package and tools/flutterguard_cli + - git diff --check + - git diff --stat + - git status --short + +expected_execution_report_format: + task_id: AR-P0-007 + status: completed | blocked | partial + summary: string + human_confirmation: + status: approved | missing + evidence: string + preexisting_dart_changes: [path] + inspected_files: [path] + changed_files: [path] + formatting: + first_run_changed_files: [path] + second_run_clean: boolean + commands: + - command: string + exit_code: integer + result: string + semantic_diff_review: + formatting_only: boolean + evidence: string + acceptance: + - criterion: string + status: passed | failed | not_run + evidence: string + risks: [string] + blockers: [string] + followups: [string] + review_required: + claude: false + human: true +``` + +--- + +## AR-P0-008 — Correct Baseline Documentation + +```yaml +task_id: AR-P0-008 +objective: > + Update the human-facing baseline documentation so all setup commands, paths, tool + versions, and document references match the completed P0 repository state. + +execution_classification: + codex_can_execute: true + claude_architecture_review: false + human_confirmation: conditional_if_support_claims_change + +context: > + Documentation currently includes an invalid plan reference, broad tool versions, and + pre-migration G-code paths. This task updates only human-facing baseline documentation. + Machine Agent contracts remain generated and are forbidden here. Platform support must + not be upgraded from planned to supported without actual build evidence. + +files_to_inspect: + - AGENTS.md + - .fvmrc + - .nvmrc + - docs/adr/0001-repository-layout.md + - AI_PROJECT_CONTEXT.md + - REFACTOR_PLAN.md + - README.md + - GCODE_VISUALIZER_EVOLUTION_PLAN.md + - pubspec.yaml + - tool/check_environment.sh + - tool/bootstrap.sh + - current package locations and public entrypoints + +files_allowed_to_modify: + - README.md + - GCODE_VISUALIZER_EVOLUTION_PLAN.md + - docs/DEVELOPMENT.md + +files_forbidden_to_modify: + - AGENTS.md + - .fvmrc + - .nvmrc + - pubspec.yaml + - pubspec.lock + - AI_ANALYSIS_SCHEMA.json + - AI_PROJECT_CONTEXT.md + - REFACTOR_PLAN.md + - AI_ANALYSIS.md + - lib/** + - test/** + - tool/** + - packages/** + - tools/** + - macos/** + - windows/** + - all files not explicitly allowed + +implementation_steps: + - Update Quick Start to use the actual environment check and bootstrap commands. + - Document exact pinned versions by referencing version files as the source of truth. + - Remove or correct the missing PLUGIN_DECOMPOSITION_PLAN reference. + - Replace sibling-package paths with the accepted canonical repository paths. + - Update G-code plan paths to current module/package paths. + - Mark old test counts and historical status as historical, or remove them from current claims. + - Separate currently verified platforms from planned target platforms. + - Keep README concise and place detailed setup/troubleshooting in docs/DEVELOPMENT.md. + - Verify every local file path and command mentioned in modified documents. + +acceptance_criteria: + - No modified document references a missing local file. + - Setup commands match actual scripts and execute successfully. + - Tool versions match .fvmrc and .nvmrc. + - No current path uses the legacy sibling layout after a monorepo migration. + - Platform support claims are backed by current evidence or explicitly marked planned. + - Machine-generated Agent documents are unchanged. + +validation_commands: + - bash tool/check_environment.sh + - bash tool/bootstrap.sh + - run repository-local Markdown link/path checker if available + - manually verify every backticked local path in the three modified files exists + - git diff --check + - git diff -- README.md GCODE_VISUALIZER_EVOLUTION_PLAN.md docs/DEVELOPMENT.md + +expected_execution_report_format: + task_id: AR-P0-008 + status: completed | blocked | partial + summary: string + inspected_files: [path] + changed_files: [path] + corrected_references: + - old: string + new: string + evidence: string + commands: + - command: string + exit_code: integer + result: string + support_claim_changes: + changed: boolean + human_confirmation: approved | pending | not_required + details: [string] + acceptance: + - criterion: string + status: passed | failed | not_run + evidence: string + risks: [string] + blockers: [string] + followups: [string] + review_required: + claude: false + human: conditional +``` + +--- + +## AR-P0-009 — Verify and Close the P0 Baseline + +```yaml +task_id: AR-P0-009 +objective: > + Perform a read-only end-to-end verification of the completed P0 baseline and return + the evidence required for human acceptance. + +execution_classification: + codex_can_execute: true_read_only + claude_architecture_review: false + human_confirmation: required_to_accept_phase_completion + +context: > + All prior P0 implementation tasks must be complete. This task does not fix failures + and does not modify files. Its only purpose is to prove whether the repository is + self-contained, bootstrap is repeatable, formatting is stable, documentation is + current, and the existing quality commands run from a fresh project state. Any failure + must be reported as a blocker or follow-up task rather than repaired in place. + +files_to_inspect: + - AGENTS.md + - .fvmrc + - .nvmrc + - docs/adr/0001-repository-layout.md + - docs/DEVELOPMENT.md + - README.md + - pubspec.yaml + - pubspec.lock + - tool/check_environment.sh + - tool/bootstrap.sh + - tool/generate_harness_ai_analysis.sh + - tool/validate_agent_docs.js + - .githooks/pre-commit + - all package pubspec files needed to enumerate validation commands + +files_allowed_to_modify: [] + +files_forbidden_to_modify: + - '**/*' + +implementation_steps: + - Capture initial git status and identify all pre-existing changes. + - Run the read-only environment check. + - Run bootstrap twice and verify no tracked source change is produced. + - Verify all declared local dependency paths are inside the repository and exist. + - Validate Agent machine documents without regenerating them first. + - Check formatting stability using an isolated temporary copy or a non-destructive method; + do not allow formatter output to modify the working tree. + - Run root analyze, root tests, package tests, and FlutterGuard. + - Verify repository-local hooksPath. + - Recheck git status and prove the verification task created no changes. + - Return a pass/fail matrix and stop. Do not repair any failure. + +acceptance_criteria: + - Environment check passes for required baseline capabilities. + - Bootstrap succeeds twice and is idempotent. + - Root dependency resolution succeeds without undeclared parent directories. + - Agent document validation passes. + - Formatting check reports no required changes. + - Root analyze and test pass. + - Every imported package/tool test suite passes. + - FlutterGuard reports no high-severity issue. + - Verification creates no repository diff. + - Human explicitly accepts or rejects P0 completion based on the report. + +validation_commands: + - git status --short --branch + - bash tool/check_environment.sh + - bash tool/bootstrap.sh + - bash tool/bootstrap.sh + - node tool/validate_agent_docs.js + - perform non-destructive formatting verification in a temporary worktree or copy + - flutter analyze + - flutter test + - run tests for every package and tools/flutterguard_cli + - dart run flutterguard_cli:flutterguard scan --path . --fail-on high + - git config --local --get core.hooksPath + - git diff --check + - git status --short + +expected_execution_report_format: + task_id: AR-P0-009 + status: passed | failed | blocked + summary: string + initial_git_status: string + final_git_status: string + repository_mutated_by_verification: boolean + baseline_matrix: + - capability: environment + status: passed | failed | blocked + evidence: string + - capability: bootstrap_idempotence + status: passed | failed | blocked + evidence: string + - capability: self_contained_dependencies + status: passed | failed | blocked + evidence: string + - capability: agent_docs + status: passed | failed | blocked + evidence: string + - capability: formatting + status: passed | failed | blocked + evidence: string + - capability: analyze + status: passed | failed | blocked + evidence: string + - capability: root_tests + status: passed | failed | blocked + evidence: string + - capability: package_tests + status: passed | failed | blocked + evidence: string + - capability: flutterguard + status: passed | failed | blocked + evidence: string + commands: + - command: string + working_directory: string + exit_code: integer + result: string + blockers: [string] + followup_tasks: [string] + human_acceptance: + status: approved | rejected | pending + evidence: string +``` + +--- + +## P0 Execution Rules for Codex + +1. Start every task by reading `AGENTS.md`, the listed context files, and current `git status`. +2. Treat all pre-existing working-tree changes as user-owned. Never reset, checkout, stash, or overwrite them. +3. Modify only the explicit allowlist. If another file is required, stop and return `blocked` with the proposed scope change. +4. Never modify sibling repositories. They are read-only migration sources until a human separately approves cleanup. +5. Never commit, push, merge, publish, or rewrite history. +6. Do not claim success when a validation command was not run or failed. +7. A task requiring Claude Review is not complete until blocking findings are resolved. +8. A task requiring human confirmation must stop at the stated checkpoint. +9. Do not start P1 work, create `.agent/manifest.json`, add CI, or introduce Task/Report schemas during this batch. +10. Return only the task-specific execution report after each task; do not combine multiple task reports. diff --git a/.hermes/plans/2026-07-22_174807-shared-dependency-migration-codex-tasks.md b/.hermes/plans/2026-07-22_174807-shared-dependency-migration-codex-tasks.md new file mode 100644 index 0000000..ab327e6 --- /dev/null +++ b/.hermes/plans/2026-07-22_174807-shared-dependency-migration-codex-tasks.md @@ -0,0 +1,559 @@ +# Shared Dependency Migration — Codex Task Queue + +Decision already accepted for planning purposes: + +- Internal shared packages move under `packages/`. +- Dart Pub Workspace manages internal packages. +- Repository-external `../` path dependencies are forbidden. +- `flutterguard_cli` becomes an immutable Git dependency. +- Sibling repositories are read-only migration sources. + +Execution rules: + +- Execute tasks in the listed order. +- Use a fresh Codex context for every task. +- Read `AGENTS.md` before every modifying task. +- Preserve all pre-existing working-tree changes. +- Never use `git reset`, `git checkout`, `git stash`, history rewriting, commit, push, merge, or publish. +- If a required file is not in `allowed_files`, stop and report `blocked` instead of extending scope. +- Do not combine migration with formatting or package-internal refactoring. + +## Ordered Queue + +| Order | Task ID | Risk | Depends on | +|---|---|---|---| +| 1 | MIG-P0-001 | Low | none | +| 2 | MIG-P0-002 | Low | MIG-P0-001 | +| 3 | MIG-P0-003 | Low | MIG-P0-002 | +| 4 | MIG-P0-004 | Low | MIG-P0-002 | +| 5 | MIG-P0-005 | Low | MIG-P0-002 | +| 6 | MIG-P0-006 | Low | MIG-P0-002 | +| 7 | MIG-P0-007 | Medium | MIG-P0-003..006 | +| 8 | MIG-P0-008 | Medium | MIG-P0-001 | +| 9 | MIG-P0-009 | Low | MIG-P0-007, MIG-P0-008 | +| 10 | MIG-P0-010 | Medium | MIG-P0-007, MIG-P0-009 | +| 11 | MIG-P0-011 | Low | MIG-P0-007..010 | +| 12 | MIG-P0-012 | Low, read-only | MIG-P0-011 | + +--- + +```yaml +task_id: MIG-P0-001 +objective: Build a read-only inventory of the current dependency graph and migration inputs. +background: > + The governance decision is already made. This task does not compare alternatives and + does not modify the repository. It identifies every current path dependency, package + manifest, package type, direct dependency, test command, source location, and path + reference that later migration tasks must update. +allowed_files: [] +forbidden_changes: + - Do not modify any file in the current repository. + - Do not modify sibling repositories. + - Do not run pub get, formatter, code generation, or any command that can update lockfiles. + - Do not reassess or replace the accepted governance decision. +implementation_steps: + - Read AGENTS.md, AI_PROJECT_CONTEXT.md, REFACTOR_PLAN.md, pubspec.yaml, and pubspec.lock. + - Inspect the pubspec.yaml and public entrypoint of gcode_core. + - Inspect the pubspec.yaml and public entrypoint of flutter_study_learning. + - Inspect the pubspec.yaml and public entrypoint of file_picker_bridge. + - Inspect the pubspec.yaml and public entrypoint of flutter_ioc_core. + - Inspect the pubspec.yaml, executable entrypoint, current Git remote, tags, and HEAD commit of flutterguard_cli. + - Enumerate all tracked pubspec files and record every path dependency containing ../. + - Search tracked scripts, Agent contracts, and human documents for references to the five sibling paths. + - Classify each package as pure Dart, Flutter package, Flutter plugin/bridge, or CLI according to its actual manifest and source. + - Record the package-specific dependency-fetch, analyze, and test commands. + - Return the inventory in the task execution report; create no report file in the repository. +acceptance_criteria: + - All five current sibling dependencies appear in the inventory. + - Every tracked external ../ path dependency is listed with its declaring file. + - Each package has a recorded source path, target path, package type, public entrypoint, and test command. + - flutterguard_cli has a recorded immutable tag candidate or exact commit candidate. + - Initial and final git status are identical. +validation_commands: + - git status --short --branch + - git ls-files '*pubspec.yaml' + - git diff --exit-code + - git status --short +``` + +--- + +```yaml +task_id: MIG-P0-002 +objective: Create the empty canonical packages/ container without changing dependency resolution. +background: > + Internal packages will be imported by later isolated tasks. Git does not retain empty + directories, so this task creates only a temporary tracked marker. It must not copy + package source or edit any manifest. +allowed_files: + - packages/.gitkeep +forbidden_changes: + - Do not modify pubspec.yaml or pubspec.lock. + - Do not create package subdirectories yet. + - Do not modify lib/, test/, tool/, Agent documents, platform projects, or sibling repositories. + - Do not add workspace configuration. +implementation_steps: + - Read AGENTS.md and confirm packages/ does not already contain user-owned content. + - Create packages/ if absent. + - Add only packages/.gitkeep. + - Confirm the new container does not alter dependency resolution or tracked source. +acceptance_criteria: + - packages/ exists. + - packages/.gitkeep is the only changed file created by this task. + - Root pubspec.yaml and pubspec.lock are unchanged. +validation_commands: + - git status --short + - test -d packages + - test -f packages/.gitkeep + - git diff --check +``` + +--- + +```yaml +task_id: MIG-P0-003 +objective: Import gcode_core into packages/gcode_core without changing its behavior or manifest semantics. +background: > + ../gcode_core is a read-only migration source. The package currently has Flutter in + its manifest, so this task must treat it according to its actual source rather than + assuming it is pure Dart. Workspace activation and root dependency changes happen later. +allowed_files: + - packages/gcode_core/** +forbidden_changes: + - Do not modify ../gcode_core/**. + - Do not modify root pubspec.yaml or pubspec.lock. + - Do not modify package APIs, imports, SDK constraints, dependencies, tests, or formatting. + - Do not copy .git/, .dart_tool/, build/, IDE state, logs, credentials, or generated caches. + - Do not copy a legacy AI_ANALYSIS.md that violates the current machine-document schema; Agent context is handled by MIG-P0-010. +implementation_steps: + - Read AGENTS.md and inspect the source package manifest, public entrypoint, source, tests, README, license, and gitignore. + - Confirm packages/gcode_core does not contain user-owned files. + - Copy the package into packages/gcode_core while applying the exclusion rules. + - Preserve file contents and executable bits; do not reformat. + - Compare source and destination manifests, public entrypoints, lib/, and test/ trees. + - Fetch package dependencies from the destination. + - Run the destination package's actual analyze and test commands. +acceptance_criteria: + - packages/gcode_core contains its manifest, public API, source, tests, and applicable documentation/license. + - Source and destination functional files are identical before workspace-specific edits. + - No excluded cache, repository metadata, credential, or legacy incompatible Agent document is copied. + - Destination dependency resolution, analysis, and tests succeed. + - The sibling source repository is unchanged. +validation_commands: + - flutter pub get + - flutter analyze + - flutter test + - diff -qr ../gcode_core/lib packages/gcode_core/lib + - diff -qr ../gcode_core/test packages/gcode_core/test + - git diff --check + - git status --short +``` + +--- + +```yaml +task_id: MIG-P0-004 +objective: Import flutter_study_learning into packages/flutter_study_learning without changing behavior or manifest semantics. +background: > + This package provides shared Flutter teaching widgets and is an internal application-owned + package. This task copies only this package; workspace and root dependency activation are deferred. +allowed_files: + - packages/flutter_study_learning/** +forbidden_changes: + - Do not modify ../flutter_study_learning/**. + - Do not modify root pubspec.yaml or pubspec.lock. + - Do not modify APIs, imports, SDK constraints, dependencies, tests, or formatting. + - Do not copy .git/, .dart_tool/, build/, IDE state, logs, credentials, or generated caches. + - Do not copy a legacy incompatible AI_ANALYSIS.md. +implementation_steps: + - Read AGENTS.md and inspect the source manifest, public entrypoint, lib/, test/, README, license, and gitignore. + - Confirm the destination does not contain user-owned files. + - Copy the package to packages/flutter_study_learning with exclusions. + - Preserve file contents and executable bits; do not reformat. + - Compare functional source and test trees. + - Fetch dependencies and run destination package analysis/tests. +acceptance_criteria: + - The destination contains the package manifest, public entrypoint, source, tests, and applicable documentation/license. + - Functional files match the sibling source before workspace-specific edits. + - Destination analysis/tests succeed. + - No excluded files or incompatible Agent document is copied. + - The sibling source repository is unchanged. +validation_commands: + - flutter pub get + - flutter analyze + - flutter test + - diff -qr ../flutter_study_learning/lib packages/flutter_study_learning/lib + - if both test directories exist, diff -qr ../flutter_study_learning/test packages/flutter_study_learning/test + - git diff --check + - git status --short +``` + +--- + +```yaml +task_id: MIG-P0-005 +objective: Import file_picker_bridge into packages/file_picker_bridge without changing behavior or platform ownership. +background: > + file_picker_bridge currently supplies a Flutter-side bridge while host platform + registration may remain in the main application. This task is source relocation only; + it must not convert the package into a full plugin or change platform support claims. +allowed_files: + - packages/file_picker_bridge/** +forbidden_changes: + - Do not modify ../file_picker_bridge/**. + - Do not modify root pubspec.yaml or pubspec.lock. + - Do not modify macos/, windows/, Android/iOS files, channel names, APIs, tests, or formatting. + - Do not create plugin scaffolding. + - Do not copy .git/, .dart_tool/, build/, IDE state, logs, credentials, generated caches, or a legacy incompatible AI_ANALYSIS.md. +implementation_steps: + - Read AGENTS.md and inspect the source manifest, public entrypoint, channels, lib/, test/, README, license, and gitignore. + - Confirm the destination does not contain user-owned files. + - Copy the package to packages/file_picker_bridge with exclusions. + - Preserve file contents and executable bits; do not reformat. + - Compare functional source and tests. + - Fetch dependencies and run destination package analysis/tests. +acceptance_criteria: + - The destination contains the package manifest, public entrypoint, source, tests, and applicable documentation/license. + - Existing MethodChannel/API identifiers are unchanged. + - No plugin conversion or platform-host modification occurs. + - Destination analysis/tests succeed. + - The sibling source repository is unchanged. +validation_commands: + - flutter pub get + - flutter analyze + - flutter test + - diff -qr ../file_picker_bridge/lib packages/file_picker_bridge/lib + - diff -qr ../file_picker_bridge/test packages/file_picker_bridge/test + - git diff --check + - git status --short +``` + +--- + +```yaml +task_id: MIG-P0-006 +objective: Import flutter_ioc_core into packages/flutter_ioc_core without changing its pure Dart behavior. +background: > + flutter_ioc_core is an application-owned pure Dart package. This task relocates it + unchanged and verifies it independently before workspace activation. +allowed_files: + - packages/flutter_ioc_core/** +forbidden_changes: + - Do not modify ../flutter_ioc_core/**. + - Do not modify root pubspec.yaml or pubspec.lock. + - Do not add Flutter dependencies. + - Do not modify APIs, SDK constraints, dependencies, tests, or formatting. + - Do not copy .git/, .dart_tool/, build/, IDE state, logs, credentials, generated caches, or a legacy incompatible AI_ANALYSIS.md. +implementation_steps: + - Read AGENTS.md and inspect the source manifest, public entrypoint, lib/, test/, README, license, and gitignore. + - Confirm the destination does not contain user-owned files. + - Copy the package to packages/flutter_ioc_core with exclusions. + - Preserve file contents and executable bits; do not reformat. + - Compare functional source and tests. + - Fetch dependencies and run destination package analysis/tests using Dart commands. +acceptance_criteria: + - The destination contains the manifest, public entrypoint, source, tests, and applicable documentation/license. + - The package remains pure Dart. + - Functional files match the sibling source before workspace-specific edits. + - Destination Dart analysis/tests succeed. + - The sibling source repository is unchanged. +validation_commands: + - dart pub get + - dart analyze + - dart test + - diff -qr ../flutter_ioc_core/lib packages/flutter_ioc_core/lib + - if both test directories exist, diff -qr ../flutter_ioc_core/test packages/flutter_ioc_core/test + - git diff --check + - git status --short +``` + +--- + +```yaml +task_id: MIG-P0-007 +objective: Activate Dart Pub Workspace and switch the four internal dependencies to repository-local packages/ paths. +background: > + All four packages have already been copied and independently verified. This task makes + packages/ canonical by configuring the native workspace, adjusting only manifests, + regenerating the lockfile, and removing the temporary directory marker. +allowed_files: + - pubspec.yaml + - pubspec.lock + - packages/.gitkeep + - packages/gcode_core/pubspec.yaml + - packages/flutter_study_learning/pubspec.yaml + - packages/file_picker_bridge/pubspec.yaml + - packages/flutter_ioc_core/pubspec.yaml +forbidden_changes: + - Do not modify Dart source, tests, public APIs, package names, or package versions. + - Do not modify flutterguard_cli dependency in this task. + - Do not modify tool scripts, Agent documents, human documents, platform projects, or sibling repositories. + - Do not upgrade unrelated hosted dependencies. +implementation_steps: + - Read AGENTS.md and preserve all pre-existing root manifest/lockfile changes. + - Confirm the active Dart SDK supports native Pub Workspace. + - Add the four packages to the root workspace declaration using supported syntax. + - Add the required workspace-resolution declaration to each member manifest. + - Raise member SDK lower bounds only when required by the selected native workspace format; do not otherwise widen or upgrade constraints. + - Change root internal path dependencies from ../name to packages/name. + - Leave flutterguard_cli unchanged for MIG-P0-008. + - Remove packages/.gitkeep after real package directories are tracked. + - Run root dependency resolution and inspect lockfile changes for unrelated upgrades. + - Run dependency resolution, analysis, and tests through the workspace and per package as needed. +acceptance_criteria: + - Root manifest declares all four internal workspace members. + - Each member participates in workspace resolution. + - All four root internal dependencies resolve from packages/ and contain no ../ path. + - flutterguard_cli remains unchanged for the next task. + - Root and member dependency resolution succeeds. + - Root and package analysis/tests succeed, or any proven pre-existing failure is reported without being modified. + - No source or test file changes. +validation_commands: + - flutter pub get + - dart pub workspace list or the supported native workspace listing command + - flutter analyze + - flutter test + - run flutter analyze/flutter test in each Flutter member when not covered by workspace tooling + - run dart analyze/dart test in flutter_ioc_core + - inspect git diff for pubspec.yaml, pubspec.lock, and member manifests only + - git diff --check + - git status --short +``` + +--- + +```yaml +task_id: MIG-P0-008 +objective: Replace the flutterguard_cli external path dependency with an immutable Git tag or commit. +background: > + flutterguard_cli remains independently governed. The current local package version is + 0.7.1 and declares a public repository. This task must select an existing immutable tag + that resolves to the intended source; if no suitable tag exists, it must pin an exact + commit SHA. A branch name is forbidden. +allowed_files: + - pubspec.yaml + - pubspec.lock +forbidden_changes: + - Do not modify internal package dependencies or workspace declarations. + - Do not modify ../flutterguard/** or any remote repository. + - Do not create or push a Git tag. + - Do not use main, master, dev, HEAD, or another moving branch as ref. + - Do not upgrade unrelated dependencies. + - Do not modify source, tests, scripts, Agent documents, or platform files. +implementation_steps: + - Read AGENTS.md and capture the existing root manifest/lockfile diff. + - Verify the repository URL declared by flutterguard_cli. + - Fetch or inspect remote tags without modifying the remote. + - Prefer an existing release tag corresponding to the intended 0.7.1 source. + - Verify the selected tag resolves to an exact commit and contains package name flutterguard_cli plus bin/flutterguard.dart. + - If no valid immutable tag exists, select the exact verified commit SHA. + - Replace only the flutterguard_cli path dependency with the immutable Git source/ref. + - Run root dependency resolution and inspect the lockfile's resolved Git revision. + - Run FlutterGuard help and scan commands. +acceptance_criteria: + - flutterguard_cli is a Git dependency pinned to an immutable tag or commit. + - No moving branch ref is used. + - pubspec.lock records the resolved immutable revision. + - dart run can resolve and execute FlutterGuard. + - No unrelated dependency declaration changes. + - ../flutterguard remains unchanged. +validation_commands: + - git ls-remote --tags https://github.com/lizy-coding/flutterguard.git + - flutter pub get + - dart run flutterguard_cli:flutterguard --help + - dart run flutterguard_cli:flutterguard scan --path . --fail-on high + - inspect git diff for pubspec.yaml and pubspec.lock only + - git diff --check + - git status --short +``` + +--- + +```yaml +task_id: MIG-P0-009 +objective: Update migration and maintenance scripts so they no longer depend on or recreate the legacy sibling layout. +background: > + The canonical internal package location is now packages/. Existing one-time migration + tooling may contain ../ paths, destructive copy operations, or instructions that could + overwrite the new canonical packages. This task updates or retires only those scripts. +allowed_files: + - tool/migrate_sibling_packages.sh + - tool/generate_harness_ai_analysis.sh + - tool/validate_agent_docs.js +forbidden_changes: + - Do not modify tool/generate_agent_indexes.js in this task; Agent context paths are handled by MIG-P0-010. + - Do not modify package source, manifests, lockfile, application source, tests, Agent documents, human documents, hooks, or platform projects. + - Do not execute the legacy migration script against sibling repositories. +implementation_steps: + - Read AGENTS.md and inspect every current tool script for ../ package paths. + - Identify scripts that are one-time migration utilities versus active validation tools. + - Retire tool/migrate_sibling_packages.sh safely by deleting it or replacing it with a non-destructive failure message, according to repository convention. + - Remove stale package-path assumptions from the other allowed scripts only if they exist. + - Preserve current document generation and validation behavior. + - Do not add package orchestration or P1 quality-gate functionality. +acceptance_criteria: + - No active allowed script reads, writes, deletes, or recreates the five legacy sibling dependency paths. + - The retired migration script cannot overwrite packages/ or sibling repositories. + - Agent document validation still runs successfully against the current pre-context-update state, or any expected temporary failure is explicitly tied to MIG-P0-010. + - Shell scripts pass syntax validation and Node scripts parse. +validation_commands: + - bash -n tool/migrate_sibling_packages.sh if the file remains + - bash -n tool/generate_harness_ai_analysis.sh + - node --check tool/validate_agent_docs.js + - search tool/ for the five legacy ../ dependency paths + - git diff --check + - git status --short +``` + +--- + +```yaml +task_id: MIG-P0-010 +objective: Update generated Agent Context so repository ownership and dependency paths match the new workspace layout. +background: > + Agent machine documents are generated JSON contracts despite .md extensions. The generator + remains the authoritative edit point. This task updates dependency ownership, paths, package + nodes, and validation coverage, then regenerates all affected contracts deterministically. +allowed_files: + - tool/generate_agent_indexes.js + - tool/validate_agent_docs.js + - AI_ANALYSIS_SCHEMA.json + - AI_PROJECT_CONTEXT.md + - REFACTOR_PLAN.md + - AI_ANALYSIS.md + - lib/AI_ANALYSIS.md + - lib/AI_MODULE_INDEX.md + - lib/**/AI_ANALYSIS.md + - packages/gcode_core/AI_ANALYSIS.md + - packages/flutter_study_learning/AI_ANALYSIS.md + - packages/file_picker_bridge/AI_ANALYSIS.md + - packages/flutter_ioc_core/AI_ANALYSIS.md +forbidden_changes: + - Do not modify source code, tests, manifests, lockfile, README, DEVELOPMENT docs, hooks, or platform projects. + - Do not hand-edit generated machine documents without making the corresponding generator-source change. + - Do not add natural-language Markdown to machine-contract files. + - Do not describe gcode_core as pure Dart if its actual manifest still depends on Flutter. + - Do not claim file_picker_bridge is a complete plugin unless its actual package structure proves it. +implementation_steps: + - Read AGENTS.md, schema, project context, refactor plan, root index, package manifests, and accepted repository-layout ADR. + - Replace generated dependency references from sibling paths to packages/ paths. + - Represent flutterguard_cli as an immutable external Git tool dependency rather than an internal sibling package. + - Add machine-contract nodes for the four internal workspace packages with accurate package types, ownership, entrypoints, dependencies, and validation commands. + - Extend schema/validator coverage only as needed for package-level contracts. + - Keep module route and status data unchanged. + - Run the generator and validator. + - Run the generator a second time and verify deterministic zero diff. + - Search generated contracts for all five forbidden sibling paths. +acceptance_criteria: + - All generated Agent contracts use packages/ for internal shared packages. + - flutterguard_cli is represented as an external immutable tool dependency. + - Each internal package has a valid machine contract. + - Contracts match actual package manifests and do not repeat stale boundary claims. + - No forbidden ../ dependency path remains in generated Agent documents. + - Generator output is deterministic. + - Agent document validation passes. +validation_commands: + - bash tool/generate_harness_ai_analysis.sh + - node tool/validate_agent_docs.js + - run generator a second time + - git diff --exit-code after the second generator run, relative to first generated state + - search AI_ANALYSIS_SCHEMA.json, AI_PROJECT_CONTEXT.md, REFACTOR_PLAN.md, AI_ANALYSIS.md, lib/, and packages/ Agent contracts for legacy sibling paths + - git diff --check + - git status --short +``` + +--- + +```yaml +task_id: MIG-P0-011 +objective: Update human-facing path references to the canonical packages/ layout and immutable FlutterGuard source policy. +background: > + Machine Agent Context is already updated. This low-risk documentation task changes only + human-facing path and setup references made stale by the migration. It must not broaden + platform support claims or rewrite unrelated roadmap content. +allowed_files: + - README.md + - GCODE_VISUALIZER_EVOLUTION_PLAN.md + - docs/DEVELOPMENT.md + - docs/adr/0001-repository-layout.md +forbidden_changes: + - Do not modify machine Agent documents, generator source, manifests, lockfile, source code, tests, scripts, hooks, or platform projects. + - Do not change the accepted decision in ADR 0001; only mark implementation status and correct paths. + - Do not claim a platform or package boundary that has not been validated. +implementation_steps: + - Read AGENTS.md, the updated machine context, accepted ADR, root manifest, and package manifests. + - Replace the four internal sibling paths with packages/ paths. + - Replace the local FlutterGuard path description with the immutable Git dependency policy. + - Update setup and package-layout examples. + - Correct G-code paths while preserving the document's feature scope. + - Mark ADR implementation status without altering its accepted decision. + - Verify every referenced local path exists. +acceptance_criteria: + - No modified human document instructs users to create the old sibling layout. + - All four internal package paths resolve inside packages/. + - FlutterGuard is described as an immutable external dependency. + - All local document links and paths exist. + - No source or machine-contract file changes. +validation_commands: + - search modified documents for ../gcode_core, ../flutter_study_learning, ../file_picker_bridge, ../flutter_ioc_core, and ../flutterguard + - verify every backticked local path in modified documents exists + - git diff --check + - git status --short +``` + +--- + +```yaml +task_id: MIG-P0-012 +objective: Perform a read-only end-to-end verification of the completed shared dependency migration. +background: > + This task validates the migration and creates no fixes. Any failure must be returned as + a blocker with evidence. Verification must distinguish pre-existing working-tree changes + from changes created by validation commands. +allowed_files: [] +forbidden_changes: + - Do not modify any tracked or untracked project file. + - Do not run repository-wide formatter in place. + - Do not regenerate Agent documents; validate the committed/generated state as found. + - Do not repair failures. + - Do not modify sibling or remote repositories. +implementation_steps: + - Capture initial git status and diff. + - Verify root workspace membership and package resolution. + - Verify all declared local path dependencies resolve inside the repository. + - Verify no tracked pubspec uses a ../ path dependency. + - Verify flutterguard_cli uses an immutable Git tag or commit and lockfile contains the resolved revision. + - Run Agent document validation without regeneration. + - Run root analysis and tests. + - Run each internal package's analysis/tests. + - Run FlutterGuard help and high-severity scan. + - Verify tool scripts contain no active legacy sibling path operations. + - Verify human and machine documents contain no stale sibling dependency paths. + - Compare final status/diff with initial state and report any validation-created mutation. +acceptance_criteria: + - Root dependency resolution succeeds from the repository checkout. + - The four internal packages are workspace members under packages/. + - No tracked pubspec contains an external ../ path dependency. + - flutterguard_cli resolves from an immutable Git revision. + - Root analyze and tests pass. + - Every internal package analyze/test command passes. + - FlutterGuard scan passes with no high-severity issue. + - Agent document validation passes. + - No active script or current document depends on the old sibling layout. + - Verification creates no repository change. +validation_commands: + - git status --short --branch + - flutter pub get + - dart pub workspace list or the supported native workspace listing command + - search all tracked pubspec.yaml files for path values containing ../ + - node tool/validate_agent_docs.js + - flutter analyze + - flutter test + - run flutter analyze/flutter test for each Flutter workspace package + - run dart analyze/dart test for flutter_ioc_core + - dart run flutterguard_cli:flutterguard --help + - dart run flutterguard_cli:flutterguard scan --path . --fail-on high + - search active scripts and current documents for the five legacy sibling paths + - git diff --check + - git status --short +``` diff --git a/AI_ANALYSIS.md b/AI_ANALYSIS.md index 49750d5..dc5193f 100644 --- a/AI_ANALYSIS.md +++ b/AI_ANALYSIS.md @@ -22,18 +22,22 @@ "host_integrations" ], "depends": [ - "../gcode_core", - "../flutter_study_learning", - "../file_picker_bridge", - "../flutter_ioc_core", - "../flutterguard/packages/flutterguard_cli" + "packages/gcode_core", + "packages/flutter_study_learning", + "packages/file_picker_bridge", + "packages/flutter_ioc_core", + "git:https://github.com/lizy-coding/flutterguard.git#9f9be84a73dc4b99a956a8529b8c334849566b03" ], "children": [ "lib/AI_ANALYSIS.md", "lib/app/AI_ANALYSIS.md", "lib/module_registry/AI_ANALYSIS.md", "lib/shared/AI_ANALYSIS.md", - "lib/modules/AI_ANALYSIS.md" + "lib/modules/AI_ANALYSIS.md", + "packages/gcode_core/AI_ANALYSIS.md", + "packages/flutter_study_learning/AI_ANALYSIS.md", + "packages/file_picker_bridge/AI_ANALYSIS.md", + "packages/flutter_ioc_core/AI_ANALYSIS.md" ], "contracts": { "no_natural_language": true, @@ -48,6 +52,6 @@ "bash tool/generate_harness_ai_analysis.sh", "dart format .", "flutter analyze", - "dart run flutterguard_cli:flutterguard scan --path . --fail-on high" + "dart run flutterguard_cli:flutterguard scan . --fail-on high" ] } diff --git a/AI_ANALYSIS_SCHEMA.json b/AI_ANALYSIS_SCHEMA.json index 91c3ea0..75227e2 100644 --- a/AI_ANALYSIS_SCHEMA.json +++ b/AI_ANALYSIS_SCHEMA.json @@ -14,6 +14,12 @@ "workspace": [ "AI_ANALYSIS.md" ], + "package_contract": [ + "packages/gcode_core/AI_ANALYSIS.md", + "packages/flutter_study_learning/AI_ANALYSIS.md", + "packages/file_picker_bridge/AI_ANALYSIS.md", + "packages/flutter_ioc_core/AI_ANALYSIS.md" + ], "section": [ "lib/AI_ANALYSIS.md", "lib/app/AI_ANALYSIS.md", @@ -75,5 +81,21 @@ "long_file_inventory", "natural_language_notes" ] + }, + "package_contract_policy": { + "required_for_workspace_member": true, + "content": [ + "package_type", + "workspace", + "entrypoints", + "owns", + "depends", + "validation", + "test_status" + ], + "avoid": [ + "platform_claims_not_proven_by_manifest", + "natural_language_notes" + ] } } diff --git a/AI_PROJECT_CONTEXT.md b/AI_PROJECT_CONTEXT.md index 3d14bf1..a303c81 100644 --- a/AI_PROJECT_CONTEXT.md +++ b/AI_PROJECT_CONTEXT.md @@ -29,6 +29,54 @@ "router": "lib/app/router/app_router.dart", "route_table": "lib/app/router/app_route_table.dart" }, + "repository": { + "layout": "pub_workspace", + "workspace_root": ".", + "members": [ + "packages/gcode_core", + "packages/flutter_study_learning", + "packages/file_picker_bridge", + "packages/flutter_ioc_core" + ], + "resolution_status": "blocked", + "resolution_blocker": "test_analyzer_flutter_sdk_pin_conflict" + }, + "internal_packages": [ + { + "name": "gcode_core", + "type": "flutter_package", + "path": "packages/gcode_core", + "entrypoint": "lib/gcode_core.dart" + }, + { + "name": "flutter_study_learning", + "type": "flutter_package", + "path": "packages/flutter_study_learning", + "entrypoint": "lib/flutter_study_learning.dart" + }, + { + "name": "file_picker_bridge", + "type": "flutter_bridge_package", + "path": "packages/file_picker_bridge", + "entrypoint": "lib/file_picker_bridge.dart" + }, + { + "name": "flutter_ioc_core", + "type": "dart_package", + "path": "packages/flutter_ioc_core", + "entrypoint": "lib/flutter_ioc_core.dart" + } + ], + "external_tools": [ + { + "package": "flutterguard_cli", + "source": "git", + "url": "https://github.com/lizy-coding/flutterguard.git", + "ref": "9f9be84a73dc4b99a956a8529b8c334849566b03", + "immutable": true, + "lock_status": "pending_dependency_resolution" + } + ], "layers": [ { "id": "app", @@ -121,7 +169,7 @@ "bash tool/generate_harness_ai_analysis.sh", "dart format .", "flutter analyze", - "dart run flutterguard_cli:flutterguard scan --path . --fail-on high" + "dart run flutterguard_cli:flutterguard scan . --fail-on high" ] } } diff --git a/REFACTOR_PLAN.md b/REFACTOR_PLAN.md index 73c11cb..4cb8d6f 100644 --- a/REFACTOR_PLAN.md +++ b/REFACTOR_PLAN.md @@ -7,8 +7,28 @@ "shared_package_extraction", "module_analysis_coverage", "app_navigation_boundary", - "host_bootstrap_boundary" + "host_bootstrap_boundary", + "workspace_package_import" ], + "dependency_migration": { + "layout": "pub_workspace", + "internal_packages": [ + "packages/gcode_core", + "packages/flutter_study_learning", + "packages/file_picker_bridge", + "packages/flutter_ioc_core" + ], + "workspace_resolution_status": "blocked", + "workspace_resolution_blocker": "test_analyzer_flutter_sdk_pin_conflict", + "external_tool": { + "package": "flutterguard_cli", + "source": "git", + "url": "https://github.com/lizy-coding/flutterguard.git", + "ref": "9f9be84a73dc4b99a956a8529b8c334849566b03", + "immutable": true, + "lock_status": "pending_dependency_resolution" + } + }, "work_queue": [ { "id": "module_platform_contract", diff --git a/lib/shared/AI_ANALYSIS.md b/lib/shared/AI_ANALYSIS.md index 46c152c..fe1bd85 100644 --- a/lib/shared/AI_ANALYSIS.md +++ b/lib/shared/AI_ANALYSIS.md @@ -19,7 +19,7 @@ ], "depends": [ "desktop_multi_window", - "../file_picker_bridge" + "packages/file_picker_bridge" ], "children": [ "multi_window/AI_ANALYSIS.md", diff --git a/lib/shared/platform/AI_ANALYSIS.md b/lib/shared/platform/AI_ANALYSIS.md index 39dad22..c08b653 100644 --- a/lib/shared/platform/AI_ANALYSIS.md +++ b/lib/shared/platform/AI_ANALYSIS.md @@ -16,7 +16,7 @@ "host_channel_registry" ], "depends": [ - "../file_picker_bridge", + "packages/file_picker_bridge", "macos/Runner/AppDelegate.swift" ], "children": [], diff --git a/packages/.gitkeep b/packages/.gitkeep deleted file mode 100644 index 8b13789..0000000 --- a/packages/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/packages/file_picker_bridge/AI_ANALYSIS.md b/packages/file_picker_bridge/AI_ANALYSIS.md new file mode 100644 index 0000000..b586232 --- /dev/null +++ b/packages/file_picker_bridge/AI_ANALYSIS.md @@ -0,0 +1,44 @@ +{ + "schema": "vibecoding.harness.ai_analysis.v2", + "mode": "package_contract", + "node": { + "id": "flutter_study.workspace.file_picker_bridge", + "kind": "flutter_bridge_package", + "package": "file_picker_bridge", + "path": "packages/file_picker_bridge", + "status": "active" + }, + "package_type": "flutter_bridge_package", + "workspace": { + "member": true, + "resolution": "workspace", + "resolution_status": "blocked", + "resolution_blocker": "test_analyzer_flutter_sdk_pin_conflict" + }, + "entrypoints": [ + "lib/file_picker_bridge.dart" + ], + "owns": [ + "file_picker_api", + "method_channel_client" + ], + "depends": [ + "flutter_sdk" + ], + "children": [], + "contracts": { + "no_natural_language": true, + "index_only": true, + "max_index_depth": 2, + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", + "update_required_on_file_change": true, + "import_direction_enforced": true + }, + "validation": [ + "flutter pub get", + "flutter analyze", + "flutter test" + ], + "test_status": "configured" +} diff --git a/packages/file_picker_bridge/pubspec.lock b/packages/file_picker_bridge/pubspec.lock deleted file mode 100644 index 05fbd73..0000000 --- a/packages/file_picker_bridge/pubspec.lock +++ /dev/null @@ -1,205 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - async: - dependency: transitive - description: - name: async - sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.13.1" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.2" - characters: - dependency: transitive - description: - name: characters - sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.4.1" - clock: - dependency: transitive - description: - name: clock - sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.2" - collection: - dependency: transitive - description: - name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.19.1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.3.3" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" - url: "https://pub.flutter-io.cn" - source: hosted - version: "4.0.0" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" - url: "https://pub.flutter-io.cn" - source: hosted - version: "11.0.2" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.0.10" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.0.2" - lints: - dependency: transitive - description: - name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" - url: "https://pub.flutter-io.cn" - source: hosted - version: "4.0.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.12.19" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.13.0" - meta: - dependency: transitive - description: - name: meta - sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.18.0" - path: - dependency: transitive - description: - name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.9.1" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - source_span: - dependency: transitive - description: - name: source_span - sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.10.2" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.12.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.4" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.4.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.2" - test_api: - dependency: transitive - description: - name: test_api - sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.7.11" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.2.0" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" - url: "https://pub.flutter-io.cn" - source: hosted - version: "15.2.0" -sdks: - dart: ">=3.10.0-0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/file_picker_bridge/pubspec.yaml b/packages/file_picker_bridge/pubspec.yaml index 196eb54..9e23daa 100644 --- a/packages/file_picker_bridge/pubspec.yaml +++ b/packages/file_picker_bridge/pubspec.yaml @@ -4,7 +4,9 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: '>=3.0.0 <4.0.0' + sdk: '>=3.6.0 <4.0.0' + +resolution: workspace dependencies: flutter: diff --git a/packages/flutter_ioc_core/AI_ANALYSIS.md b/packages/flutter_ioc_core/AI_ANALYSIS.md new file mode 100644 index 0000000..d916afa --- /dev/null +++ b/packages/flutter_ioc_core/AI_ANALYSIS.md @@ -0,0 +1,42 @@ +{ + "schema": "vibecoding.harness.ai_analysis.v2", + "mode": "package_contract", + "node": { + "id": "flutter_study.workspace.flutter_ioc_core", + "kind": "dart_package", + "package": "flutter_ioc_core", + "path": "packages/flutter_ioc_core", + "status": "active" + }, + "package_type": "dart_package", + "workspace": { + "member": true, + "resolution": "workspace", + "resolution_status": "blocked", + "resolution_blocker": "test_analyzer_flutter_sdk_pin_conflict" + }, + "entrypoints": [ + "lib/flutter_ioc_core.dart" + ], + "owns": [ + "ioc_container", + "registration_lifetimes", + "scoped_resolution" + ], + "depends": [], + "children": [], + "contracts": { + "no_natural_language": true, + "index_only": true, + "max_index_depth": 2, + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", + "update_required_on_file_change": true, + "import_direction_enforced": true + }, + "validation": [ + "dart pub get", + "dart analyze" + ], + "test_status": "missing_test_directory" +} diff --git a/packages/flutter_ioc_core/pubspec.lock b/packages/flutter_ioc_core/pubspec.lock deleted file mode 100644 index f16dc55..0000000 --- a/packages/flutter_ioc_core/pubspec.lock +++ /dev/null @@ -1,389 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - _fe_analyzer_shared: - dependency: transitive - description: - name: _fe_analyzer_shared - sha256: cd6add6f846f35fb79f3c315296703c1a24f3cfd7f4739d91a74961c1c7e9f1b - url: "https://pub.flutter-io.cn" - source: hosted - version: "100.0.0" - analyzer: - dependency: transitive - description: - name: analyzer - sha256: "6ba98576948803398b69e3a444df24eacdbe12ed699c7014e120ea38552debbf" - url: "https://pub.flutter-io.cn" - source: hosted - version: "13.0.0" - args: - dependency: transitive - description: - name: args - sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.7.0" - async: - dependency: transitive - description: - name: async - sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.13.1" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.2" - cli_config: - dependency: transitive - description: - name: cli_config - sha256: ac20a183a07002b700f0c25e61b7ee46b23c309d76ab7b7640a028f18e4d99ec - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.2.0" - collection: - dependency: transitive - description: - name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.19.1" - convert: - dependency: transitive - description: - name: convert - sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68 - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.1.2" - coverage: - dependency: transitive - description: - name: coverage - sha256: "5da775aa218eaf2151c721b16c01c7676fbfdd99cebba2bf64e8b807a28ff94d" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.15.0" - crypto: - dependency: transitive - description: - name: crypto - sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.0.7" - file: - dependency: transitive - description: - name: file - sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 - url: "https://pub.flutter-io.cn" - source: hosted - version: "7.0.1" - frontend_server_client: - dependency: transitive - description: - name: frontend_server_client - sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694 - url: "https://pub.flutter-io.cn" - source: hosted - version: "4.0.0" - glob: - dependency: transitive - description: - name: glob - sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.3" - http_multi_server: - dependency: transitive - description: - name: http_multi_server - sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8 - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.2.2" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.flutter-io.cn" - source: hosted - version: "4.1.2" - io: - dependency: transitive - description: - name: io - sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.0.5" - lints: - dependency: "direct dev" - description: - name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" - url: "https://pub.flutter-io.cn" - source: hosted - version: "4.0.0" - logging: - dependency: transitive - description: - name: logging - sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.3.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd" - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.12.20" - meta: - dependency: transitive - description: - name: meta - sha256: df0c643f44ad098eb37988027a8e2b2b5a031fd3977f06bbfd3a76637e8df739 - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.18.2" - mime: - dependency: transitive - description: - name: mime - sha256: "41a20518f0cb1256669420fdba0cd90d21561e560ac240f26ef8322e45bb7ed6" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.0.0" - node_preamble: - dependency: transitive - description: - name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.0.2" - package_config: - dependency: transitive - description: - name: package_config - sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.2.0" - path: - dependency: transitive - description: - name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.9.1" - pool: - dependency: transitive - description: - name: pool - sha256: "978783255c543aa3586a1b3c21f6e9d720eb315376a915872c61ef8b5c20177d" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.5.2" - pub_semver: - dependency: transitive - description: - name: pub_semver - sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.2.0" - shelf: - dependency: transitive - description: - name: shelf - sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12 - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.4.2" - shelf_packages_handler: - dependency: transitive - description: - name: shelf_packages_handler - sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.0.2" - shelf_static: - dependency: transitive - description: - name: shelf_static - sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3 - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.3" - shelf_web_socket: - dependency: transitive - description: - name: shelf_web_socket - sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925" - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.0.0" - source_map_stack_trace: - dependency: transitive - description: - name: source_map_stack_trace - sha256: c0713a43e323c3302c2abe2a1cc89aa057a387101ebd280371d6a6c9fa68516b - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.2" - source_maps: - dependency: transitive - description: - name: source_maps - sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812" - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.10.13" - source_span: - dependency: transitive - description: - name: source_span - sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.10.2" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.12.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.4" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.4.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.2" - test: - dependency: "direct dev" - description: - name: test - sha256: ca578dc12bb8b2f40b67b7d3bd2fac4f31c01a6ff7130a14e2597b919934507f - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.31.1" - test_api: - dependency: transitive - description: - name: test_api - sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11" - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.7.12" - test_core: - dependency: transitive - description: - name: test_core - sha256: d2e98ec12998368dc59ddd47ab709f2cd55acd6b66dc7db764455a44082f4bc5 - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.6.18" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.4.0" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" - url: "https://pub.flutter-io.cn" - source: hosted - version: "15.2.0" - watcher: - dependency: transitive - description: - name: watcher - sha256: "1398c9f081a753f9226febe8900fce8f7d0a67163334e1c94a2438339d79d635" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.1" - web: - dependency: transitive - description: - name: web - sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.1" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.0.1" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.0.3" - webkit_inspection_protocol: - dependency: transitive - description: - name: webkit_inspection_protocol - sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.1" - yaml: - dependency: transitive - description: - name: yaml - sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.1.3" -sdks: - dart: ">=3.11.0 <4.0.0" diff --git a/packages/flutter_ioc_core/pubspec.yaml b/packages/flutter_ioc_core/pubspec.yaml index 5b16f3f..8397bcb 100644 --- a/packages/flutter_ioc_core/pubspec.yaml +++ b/packages/flutter_ioc_core/pubspec.yaml @@ -4,7 +4,9 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: '>=3.0.0 <4.0.0' + sdk: '>=3.6.0 <4.0.0' + +resolution: workspace dev_dependencies: test: ^1.25.0 diff --git a/packages/flutter_study_learning/AI_ANALYSIS.md b/packages/flutter_study_learning/AI_ANALYSIS.md new file mode 100644 index 0000000..6a6a011 --- /dev/null +++ b/packages/flutter_study_learning/AI_ANALYSIS.md @@ -0,0 +1,43 @@ +{ + "schema": "vibecoding.harness.ai_analysis.v2", + "mode": "package_contract", + "node": { + "id": "flutter_study.workspace.flutter_study_learning", + "kind": "flutter_package", + "package": "flutter_study_learning", + "path": "packages/flutter_study_learning", + "status": "active" + }, + "package_type": "flutter_package", + "workspace": { + "member": true, + "resolution": "workspace", + "resolution_status": "blocked", + "resolution_blocker": "test_analyzer_flutter_sdk_pin_conflict" + }, + "entrypoints": [ + "lib/flutter_study_learning.dart" + ], + "owns": [ + "learning_scaffold_widgets", + "teaching_ui_components" + ], + "depends": [ + "flutter_sdk" + ], + "children": [], + "contracts": { + "no_natural_language": true, + "index_only": true, + "max_index_depth": 2, + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", + "update_required_on_file_change": true, + "import_direction_enforced": true + }, + "validation": [ + "flutter pub get", + "flutter analyze" + ], + "test_status": "missing_test_directory" +} diff --git a/packages/flutter_study_learning/pubspec.lock b/packages/flutter_study_learning/pubspec.lock deleted file mode 100644 index 05fbd73..0000000 --- a/packages/flutter_study_learning/pubspec.lock +++ /dev/null @@ -1,205 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - async: - dependency: transitive - description: - name: async - sha256: e2eb0491ba5ddb6177742d2da23904574082139b07c1e33b8503b9f46f3e1a37 - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.13.1" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.2" - characters: - dependency: transitive - description: - name: characters - sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.4.1" - clock: - dependency: transitive - description: - name: clock - sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.1.2" - collection: - dependency: transitive - description: - name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.19.1" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.3.3" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" - url: "https://pub.flutter-io.cn" - source: hosted - version: "4.0.0" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" - url: "https://pub.flutter-io.cn" - source: hosted - version: "11.0.2" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.0.10" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" - url: "https://pub.flutter-io.cn" - source: hosted - version: "3.0.2" - lints: - dependency: transitive - description: - name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" - url: "https://pub.flutter-io.cn" - source: hosted - version: "4.0.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861 - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.12.19" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.13.0" - meta: - dependency: transitive - description: - name: meta - sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.18.0" - path: - dependency: transitive - description: - name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.9.1" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - source_span: - dependency: transitive - description: - name: source_span - sha256: "56a02f1f4cd1a2d96303c0144c93bd6d909eea6bee6bf5a0e0b685edbd4c47ab" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.10.2" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.12.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.1.4" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.4.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.2.2" - test_api: - dependency: transitive - description: - name: test_api - sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" - url: "https://pub.flutter-io.cn" - source: hosted - version: "0.7.11" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b - url: "https://pub.flutter-io.cn" - source: hosted - version: "2.2.0" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: "0016aef94fc66495ac78af5859181e3f3bf2026bd8eecc72b9565601e19ab360" - url: "https://pub.flutter-io.cn" - source: hosted - version: "15.2.0" -sdks: - dart: ">=3.10.0-0 <4.0.0" - flutter: ">=3.18.0-18.0.pre.54" diff --git a/packages/flutter_study_learning/pubspec.yaml b/packages/flutter_study_learning/pubspec.yaml index 84b72a9..012d995 100644 --- a/packages/flutter_study_learning/pubspec.yaml +++ b/packages/flutter_study_learning/pubspec.yaml @@ -4,7 +4,9 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: '>=3.0.0 <4.0.0' + sdk: '>=3.6.0 <4.0.0' + +resolution: workspace dependencies: flutter: diff --git a/packages/gcode_core/AI_ANALYSIS.md b/packages/gcode_core/AI_ANALYSIS.md new file mode 100644 index 0000000..21a9026 --- /dev/null +++ b/packages/gcode_core/AI_ANALYSIS.md @@ -0,0 +1,46 @@ +{ + "schema": "vibecoding.harness.ai_analysis.v2", + "mode": "package_contract", + "node": { + "id": "flutter_study.workspace.gcode_core", + "kind": "flutter_package", + "package": "gcode_core", + "path": "packages/gcode_core", + "status": "active" + }, + "package_type": "flutter_package", + "workspace": { + "member": true, + "resolution": "workspace", + "resolution_status": "blocked", + "resolution_blocker": "test_analyzer_flutter_sdk_pin_conflict" + }, + "entrypoints": [ + "lib/gcode_core.dart" + ], + "owns": [ + "gcode_parsing", + "line_reading", + "toolpath_building", + "flutter_visualization_widgets" + ], + "depends": [ + "flutter_sdk" + ], + "children": [], + "contracts": { + "no_natural_language": true, + "index_only": true, + "max_index_depth": 2, + "doc_consumer": "coding_agent", + "doc_mode": "machine_contract", + "update_required_on_file_change": true, + "import_direction_enforced": true + }, + "validation": [ + "flutter pub get", + "flutter analyze", + "flutter test" + ], + "test_status": "configured" +} diff --git a/packages/gcode_core/pubspec.yaml b/packages/gcode_core/pubspec.yaml index 38665af..9bd4797 100644 --- a/packages/gcode_core/pubspec.yaml +++ b/packages/gcode_core/pubspec.yaml @@ -4,7 +4,9 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: '>=3.0.0 <4.0.0' + sdk: '>=3.6.0 <4.0.0' + +resolution: workspace dependencies: flutter: diff --git a/pubspec.lock b/pubspec.lock index 63c7737..388a8e3 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -335,10 +335,10 @@ packages: dependency: transitive description: name: meta - sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" + sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349" url: "https://pub.flutter-io.cn" source: hosted - version: "1.17.0" + version: "1.18.0" mime: dependency: transitive description: @@ -476,10 +476,10 @@ packages: dependency: transitive description: name: test_api - sha256: "8161c84903fd860b26bfdefb7963b3f0b68fee7adea0f59ef805ecca346f0c7a" + sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e" url: "https://pub.flutter-io.cn" source: hosted - version: "0.7.10" + version: "0.7.11" two_dimensional_scrollables: dependency: "direct main" description: @@ -593,5 +593,5 @@ packages: source: hosted version: "3.1.3" sdks: - dart: ">=3.9.0 <4.0.0" + dart: ">=3.11.5 <4.0.0" flutter: ">=3.35.0" diff --git a/pubspec.yaml b/pubspec.yaml index 7e095d3..3e496e7 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,20 +1,26 @@ name: main_app description: A Flutter app shell. publish_to: 'none' -version: 1.0.0+1 +version: 1.1.0 environment: - sdk: '>=3.0.0 <4.0.0' + sdk: ^3.11.5 + +workspace: + - packages/gcode_core + - packages/flutter_study_learning + - packages/file_picker_bridge + - packages/flutter_ioc_core dependencies: gcode_core: - path: ../gcode_core + path: packages/gcode_core flutter_study_learning: - path: ../flutter_study_learning + path: packages/flutter_study_learning file_picker_bridge: - path: ../file_picker_bridge + path: packages/file_picker_bridge flutter_ioc_core: - path: ../flutter_ioc_core + path: packages/flutter_ioc_core flutter: sdk: flutter go_router: ^14.2.0 diff --git a/tool/generate_agent_indexes.js b/tool/generate_agent_indexes.js index 9f9a1d9..8a6cf1c 100644 --- a/tool/generate_agent_indexes.js +++ b/tool/generate_agent_indexes.js @@ -42,6 +42,58 @@ const categoryMeta = { platform: [['dio_interceptor', 'usb_detector'], ['network_platform'], ['dio', 'usb_serial', 'device_info_plus', 'flutter_study_learning']], }; +const flutterGuardDependency = { + package: 'flutterguard_cli', + source: 'git', + url: 'https://github.com/lizy-coding/flutterguard.git', + ref: '9f9be84a73dc4b99a956a8529b8c334849566b03', + immutable: true, + lock_status: 'pending_dependency_resolution', +}; + +const workspacePackages = [ + { + name: 'gcode_core', + kind: 'flutter_package', + path: 'packages/gcode_core', + entrypoints: ['lib/gcode_core.dart'], + owns: ['gcode_parsing', 'line_reading', 'toolpath_building', 'flutter_visualization_widgets'], + depends: ['flutter_sdk'], + validation: ['flutter pub get', 'flutter analyze', 'flutter test'], + test_status: 'configured', + }, + { + name: 'flutter_study_learning', + kind: 'flutter_package', + path: 'packages/flutter_study_learning', + entrypoints: ['lib/flutter_study_learning.dart'], + owns: ['learning_scaffold_widgets', 'teaching_ui_components'], + depends: ['flutter_sdk'], + validation: ['flutter pub get', 'flutter analyze'], + test_status: 'missing_test_directory', + }, + { + name: 'file_picker_bridge', + kind: 'flutter_bridge_package', + path: 'packages/file_picker_bridge', + entrypoints: ['lib/file_picker_bridge.dart'], + owns: ['file_picker_api', 'method_channel_client'], + depends: ['flutter_sdk'], + validation: ['flutter pub get', 'flutter analyze', 'flutter test'], + test_status: 'configured', + }, + { + name: 'flutter_ioc_core', + kind: 'dart_package', + path: 'packages/flutter_ioc_core', + entrypoints: ['lib/flutter_ioc_core.dart'], + owns: ['ioc_container', 'registration_lifetimes', 'scoped_resolution'], + depends: [], + validation: ['dart pub get', 'dart analyze'], + test_status: 'missing_test_directory', + }, +]; + function writeJson(rel, value) { const file = path.join(root, rel); fs.mkdirSync(path.dirname(file), { recursive: true }); @@ -97,6 +149,7 @@ function writeSchema() { }, levels: { workspace: ['AI_ANALYSIS.md'], + package_contract: workspacePackages.map(({ path: packagePath }) => `${packagePath}/AI_ANALYSIS.md`), section: [ 'lib/AI_ANALYSIS.md', 'lib/app/AI_ANALYSIS.md', @@ -131,6 +184,11 @@ function writeSchema() { content: ['route', 'category', 'status', 'entrypoints', 'analysis_parent'], avoid: ['class_descriptions', 'long_file_inventory', 'natural_language_notes'], }, + package_contract_policy: { + required_for_workspace_member: true, + content: ['package_type', 'workspace', 'entrypoints', 'owns', 'depends', 'validation', 'test_status'], + avoid: ['platform_claims_not_proven_by_manifest', 'natural_language_notes'], + }, }); } @@ -155,6 +213,20 @@ function writeProjectContext() { router: 'lib/app/router/app_router.dart', route_table: 'lib/app/router/app_route_table.dart', }, + repository: { + layout: 'pub_workspace', + workspace_root: '.', + members: workspacePackages.map(({ path: packagePath }) => packagePath), + resolution_status: 'blocked', + resolution_blocker: 'test_analyzer_flutter_sdk_pin_conflict', + }, + internal_packages: workspacePackages.map(({ name, kind, path: packagePath, entrypoints }) => ({ + name, + type: kind, + path: packagePath, + entrypoint: entrypoints[0], + })), + external_tools: [flutterGuardDependency], layers: [ { id: 'app', @@ -203,7 +275,7 @@ function writeProjectContext() { 'bash tool/generate_harness_ai_analysis.sh', 'dart format .', 'flutter analyze', - 'dart run flutterguard_cli:flutterguard scan --path . --fail-on high', + 'dart run flutterguard_cli:flutterguard scan . --fail-on high', ], }, }); @@ -220,7 +292,15 @@ function writeRefactorPlan() { 'module_analysis_coverage', 'app_navigation_boundary', 'host_bootstrap_boundary', + 'workspace_package_import', ], + dependency_migration: { + layout: 'pub_workspace', + internal_packages: workspacePackages.map(({ path: packagePath }) => packagePath), + workspace_resolution_status: 'blocked', + workspace_resolution_blocker: 'test_analyzer_flutter_sdk_pin_conflict', + external_tool: flutterGuardDependency, + }, work_queue: [ { id: 'module_platform_contract', @@ -300,9 +380,22 @@ function writeRootIndexes() { kind: 'workspace_index', entrypoints: ['lib/main.dart', 'lib/app/app_bootstrap.dart', 'lib/app/app.dart', 'lib/app/router/app_route_table.dart'], owns: ['app_shell', 'module_registry', 'shared_capabilities', 'learning_modules', 'host_integrations'], - depends: ['../gcode_core', '../flutter_study_learning', '../file_picker_bridge', '../flutter_ioc_core', '../flutterguard/packages/flutterguard_cli'], - children: ['lib/AI_ANALYSIS.md', 'lib/app/AI_ANALYSIS.md', 'lib/module_registry/AI_ANALYSIS.md', 'lib/shared/AI_ANALYSIS.md', 'lib/modules/AI_ANALYSIS.md'], - validation: ['bash tool/generate_harness_ai_analysis.sh', 'dart format .', 'flutter analyze', 'dart run flutterguard_cli:flutterguard scan --path . --fail-on high'], + depends: [ + 'packages/gcode_core', + 'packages/flutter_study_learning', + 'packages/file_picker_bridge', + 'packages/flutter_ioc_core', + `git:${flutterGuardDependency.url}#${flutterGuardDependency.ref}`, + ], + children: [ + 'lib/AI_ANALYSIS.md', + 'lib/app/AI_ANALYSIS.md', + 'lib/module_registry/AI_ANALYSIS.md', + 'lib/shared/AI_ANALYSIS.md', + 'lib/modules/AI_ANALYSIS.md', + ...workspacePackages.map(({ path: packagePath }) => `${packagePath}/AI_ANALYSIS.md`), + ], + validation: ['bash tool/generate_harness_ai_analysis.sh', 'dart format .', 'flutter analyze', 'dart run flutterguard_cli:flutterguard scan . --fail-on high'], }); writeIndex({ rel: 'lib/AI_ANALYSIS.md', @@ -347,7 +440,7 @@ function writeLayerIndexes() { kind: 'shared_index', entrypoints: ['multi_window', 'platform'], owns: ['business_free_capabilities', 'desktop_window_lifecycle', 'platform_boundaries'], - depends: ['desktop_multi_window', '../file_picker_bridge'], + depends: ['desktop_multi_window', 'packages/file_picker_bridge'], children: ['multi_window/AI_ANALYSIS.md', 'platform/AI_ANALYSIS.md'], }); writeIndex({ @@ -365,7 +458,7 @@ function writeLayerIndexes() { status: 'transition', entrypoints: ['AI_ANALYSIS.md'], owns: ['platform_boundary', 'host_channel_registry'], - depends: ['../file_picker_bridge', 'macos/Runner/AppDelegate.swift'], + depends: ['packages/file_picker_bridge', 'macos/Runner/AppDelegate.swift'], validation: ['flutter analyze', 'flutter build macos'], }); } @@ -426,6 +519,36 @@ function writeModuleContracts() { } } +function writePackageContracts() { + for (const packageMeta of workspacePackages) { + writeJson(`${packageMeta.path}/AI_ANALYSIS.md`, { + schema: 'vibecoding.harness.ai_analysis.v2', + mode: 'package_contract', + node: { + id: `flutter_study.workspace.${packageMeta.name}`, + kind: packageMeta.kind, + package: packageMeta.name, + path: packageMeta.path, + status: 'active', + }, + package_type: packageMeta.kind, + workspace: { + member: true, + resolution: 'workspace', + resolution_status: 'blocked', + resolution_blocker: 'test_analyzer_flutter_sdk_pin_conflict', + }, + entrypoints: packageMeta.entrypoints, + owns: packageMeta.owns, + depends: packageMeta.depends, + children: [], + contracts, + validation: packageMeta.validation, + test_status: packageMeta.test_status, + }); + } +} + writeSchema(); writeProjectContext(); writeRefactorPlan(); @@ -434,5 +557,6 @@ writeRootIndexes(); writeLayerIndexes(); writeModuleIndexes(); writeModuleContracts(); +writePackageContracts(); console.log('agent index AI_ANALYSIS generation completed'); diff --git a/tool/migrate_sibling_packages.sh b/tool/migrate_sibling_packages.sh deleted file mode 100755 index 7b7c79a..0000000 --- a/tool/migrate_sibling_packages.sh +++ /dev/null @@ -1,424 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -PARENT="$(cd "$ROOT/.." && pwd)" -FORCE="${1:-}" - -PACKAGES=( - "gcode_core" - "flutter_study_learning" - "file_picker_bridge" - "flutter_ioc_core" -) - -if [[ ! -d "$ROOT/lib/modules/ui/gcode_visualizer/application" ]]; then - echo "Migration source directories are not present. The sibling package migration appears to have already been applied." >&2 - echo "Refusing to re-run to avoid overwriting the migrated sibling packages from incomplete in-app sources." >&2 - exit 1 -fi - -if [[ "$FORCE" != "--force" ]]; then - for package in "${PACKAGES[@]}"; do - if [[ -e "$PARENT/$package" ]]; then - echo "Refusing to overwrite $PARENT/$package. Re-run with --force." >&2 - exit 1 - fi - done -fi - -for package in "${PACKAGES[@]}"; do - if [[ "$FORCE" == "--force" ]]; then - rm -rf "$PARENT/$package" - fi -done - -mkdir -p "$PARENT/gcode_core/lib/src" "$PARENT/gcode_core/test/application" -cp -R "$ROOT/lib/modules/ui/gcode_visualizer/application" "$PARENT/gcode_core/lib/src/" -cp -R "$ROOT/lib/modules/ui/gcode_visualizer/data" "$PARENT/gcode_core/lib/src/" -cp -R "$ROOT/lib/modules/ui/gcode_visualizer/domain" "$PARENT/gcode_core/lib/src/" -cp -R "$ROOT/lib/modules/ui/gcode_visualizer/models" "$PARENT/gcode_core/lib/src/" -cp -R "$ROOT/lib/modules/ui/gcode_visualizer/parser" "$PARENT/gcode_core/lib/src/" -cp -R "$ROOT/lib/modules/ui/gcode_visualizer/services" "$PARENT/gcode_core/lib/src/" - -cat > "$PARENT/gcode_core/pubspec.yaml" <<'EOF' -name: gcode_core -description: Pure Dart G-code parsing, line reading, and toolpath building core. -publish_to: 'none' -version: 0.1.0 - -environment: - sdk: '>=3.0.0 <4.0.0' - -dev_dependencies: - test: ^1.25.0 - lints: ^4.0.0 -EOF - -cat > "$PARENT/gcode_core/lib/gcode_core.dart" <<'EOF' -library gcode_core; - -export 'src/application/gcode_readline_pipeline.dart'; -export 'src/data/readers/file_gcode_line_reader.dart'; -export 'src/data/readers/gcode_line_reader.dart'; -export 'src/data/readers/string_gcode_line_reader.dart'; -export 'src/domain/gcode_line_record.dart'; -export 'src/domain/gcode_load_snapshot.dart'; -export 'src/domain/gcode_load_stage.dart'; -export 'src/domain/parsed_gcode_line.dart'; -export 'src/models/gcode_command.dart'; -export 'src/models/machine_position.dart'; -export 'src/models/toolpath_segment.dart'; -export 'src/parser/gcode_parse_result.dart'; -export 'src/parser/gcode_parser.dart'; -export 'src/services/toolpath_builder.dart'; -EOF - -cat > "$PARENT/gcode_core/README.md" <<'EOF' -# gcode_core - -Pure Dart G-code core extracted from `flutter_study`. - -## Scope - -- Read G-code from strings or files line by line. -- Parse G0/G1 commands with X/Y/F parameters. -- Collect parse errors with line metadata. -- Build incremental or batch toolpath segments. - -This package contains no Flutter UI, animation, canvas drawing, or file picker code. - -## Test - -```bash -dart test -``` -EOF - -cat > "$PARENT/gcode_core/AI_ANALYSIS.md" <<'EOF' -# gcode_core 分析 - -> 纯 Dart G-code 解析与轨迹构建核心。 - -## 功能目标 - -把 G-code 文本/文件读取、单行解析、错误收集和刀路段构建从 Flutter UI 模块中拆出,供教学 UI、CLI 或其它可视化前端复用。 - -## 文件结构 - -``` -gcode_core/ -├── lib/ -│ ├── gcode_core.dart -│ └── src/ -│ ├── application/gcode_readline_pipeline.dart -│ ├── data/readers/ -│ ├── domain/ -│ ├── models/ -│ ├── parser/ -│ └── services/toolpath_builder.dart -└── test/ -``` - -## 边界 - -- 不依赖 Flutter。 -- 不打开系统文件选择器。 -- 不绘制 Canvas。 -- 不管理播放动画。 -EOF - -mkdir -p "$PARENT/flutter_study_learning/lib/src" -cp "$ROOT/lib/shared/learning/learning_scaffold.dart" "$PARENT/flutter_study_learning/lib/src/learning_scaffold.dart" -cat > "$PARENT/flutter_study_learning/pubspec.yaml" <<'EOF' -name: flutter_study_learning -description: Shared learning scaffold widgets for Flutter study modules. -publish_to: 'none' -version: 0.1.0 - -environment: - sdk: '>=3.0.0 <4.0.0' - -dependencies: - flutter: - sdk: flutter - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_lints: ^4.0.0 - -flutter: - uses-material-design: true -EOF -cat > "$PARENT/flutter_study_learning/lib/flutter_study_learning.dart" <<'EOF' -library flutter_study_learning; - -export 'src/learning_scaffold.dart'; -EOF -cat > "$PARENT/flutter_study_learning/README.md" <<'EOF' -# flutter_study_learning - -Shared teaching page widgets for Flutter study modules. - -## Scope - -- `LearningScaffold` -- Learning objectives, concept chips, code snippets, state logs, pitfalls, and exercise cards - -This package has no module-specific business logic. -EOF -cat > "$PARENT/flutter_study_learning/AI_ANALYSIS.md" <<'EOF' -# flutter_study_learning 分析 - -> Flutter 学习模块的共享教学页面组件包。 - -## 边界 - -只承载教学表达组件,不持有任何模块状态、解析器、网络请求或平台能力。 -EOF - -mkdir -p "$PARENT/file_picker_bridge/lib/src" "$PARENT/file_picker_bridge/test" -cp "$ROOT/lib/shared/platform/file_picker/file_picker_service.dart" "$PARENT/file_picker_bridge/lib/src/" -cp "$ROOT/lib/shared/platform/file_picker/method_channel_file_picker.dart" "$PARENT/file_picker_bridge/lib/src/" -cp "$ROOT/test/shared/platform/file_picker/method_channel_file_picker_test.dart" "$PARENT/file_picker_bridge/test/" -cat > "$PARENT/file_picker_bridge/pubspec.yaml" <<'EOF' -name: file_picker_bridge -description: MethodChannel file picker API used by Flutter study modules. -publish_to: 'none' -version: 0.1.0 - -environment: - sdk: '>=3.0.0 <4.0.0' - -dependencies: - flutter: - sdk: flutter - -dev_dependencies: - flutter_test: - sdk: flutter - flutter_lints: ^4.0.0 - -flutter: - uses-material-design: true -EOF -cat > "$PARENT/file_picker_bridge/lib/file_picker_bridge.dart" <<'EOF' -library file_picker_bridge; - -export 'src/file_picker_service.dart'; -export 'src/method_channel_file_picker.dart'; -EOF -cat > "$PARENT/file_picker_bridge/README.md" <<'EOF' -# file_picker_bridge - -Business-neutral file picker API for Flutter study modules. - -Current host implementation is registered by `main_app` on macOS through the `file_picker_bridge/file_picker` MethodChannel. This package owns the Dart API and mock-friendly channel implementation; it can be upgraded into a full Flutter plugin when more platforms are needed. -EOF -cat > "$PARENT/file_picker_bridge/AI_ANALYSIS.md" <<'EOF' -# file_picker_bridge 分析 - -> 文件选择能力包,当前承载 Dart API 和 MethodChannel 客户端。 - -## 平台协议 - -- Channel: `file_picker_bridge/file_picker` -- Method: `pickFile` -- 返回: `null` 或 `{ path: String, name: String? }` - -## 迁移状态 - -macOS 原生实现仍在宿主应用 `macos/Runner/AppDelegate.swift` 中注册。后续若升级为完整 Flutter plugin,再迁移原生代码。 -EOF -perl -0pi -e "s#import 'package:main_app/shared/platform/file_picker/method_channel_file_picker.dart';#import 'package:file_picker_bridge/file_picker_bridge.dart';#g" \ - "$PARENT/file_picker_bridge/test/method_channel_file_picker_test.dart" - -mkdir -p "$PARENT/flutter_ioc_core/lib/src" -cp "$ROOT/lib/modules/state/flutter_ioc/ioc/container.dart" "$PARENT/flutter_ioc_core/lib/src/" -cp "$ROOT/lib/modules/state/flutter_ioc/ioc/types.dart" "$PARENT/flutter_ioc_core/lib/src/" -cat > "$PARENT/flutter_ioc_core/pubspec.yaml" <<'EOF' -name: flutter_ioc_core -description: Pure Dart IoC container core extracted from Flutter study. -publish_to: 'none' -version: 0.1.0 - -environment: - sdk: '>=3.0.0 <4.0.0' - -dev_dependencies: - test: ^1.25.0 - lints: ^4.0.0 -EOF -cat > "$PARENT/flutter_ioc_core/lib/flutter_ioc_core.dart" <<'EOF' -library flutter_ioc_core; - -export 'src/container.dart'; -export 'src/types.dart'; -EOF -cat > "$PARENT/flutter_ioc_core/README.md" <<'EOF' -# flutter_ioc_core - -Pure Dart IoC container extracted from the Flutter IoC teaching module. -EOF -cat > "$PARENT/flutter_ioc_core/AI_ANALYSIS.md" <<'EOF' -# flutter_ioc_core 分析 - -> 教学用 IoC 容器核心,支持 singleton/transient/scoped 生命周期、条件注册、属性注入和作用域。 - -不依赖 Flutter。 -EOF - -perl -0pi -e "s/\n gcode_core:\n path: \.\.\/gcode_core\n//g; s/\n flutter_study_learning:\n path: \.\.\/flutter_study_learning\n//g; s/\n file_picker_bridge:\n path: \.\.\/file_picker_bridge\n//g; s/\n flutter_ioc_core:\n path: \.\.\/flutter_ioc_core\n//g" "$ROOT/pubspec.yaml" -perl -0pi -e "s/dependencies:\n/dependencies:\n gcode_core:\n path: ..\/gcode_core\n flutter_study_learning:\n path: ..\/flutter_study_learning\n file_picker_bridge:\n path: ..\/file_picker_bridge\n flutter_ioc_core:\n path: ..\/flutter_ioc_core\n/" "$ROOT/pubspec.yaml" - -perl -0pi -e "s#import '../../../../shared/learning/learning_scaffold.dart';#import 'package:flutter_study_learning/flutter_study_learning.dart';#g" \ - "$ROOT/lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart" \ - "$ROOT/lib/modules/basic/tree_state/pages/basic_widgets_page.dart" -perl -0pi -e "s#import '../domain/gcode_load_stage.dart';#import 'package:gcode_core/gcode_core.dart';#g" \ - "$ROOT/lib/modules/ui/gcode_visualizer/pages/gcode_visualizer_page.dart" -perl -0pi -e "s#import '../../../../shared/platform/file_picker/file_picker_service.dart';\nimport '../../../../shared/platform/file_picker/method_channel_file_picker.dart';\nimport '../application/gcode_readline_pipeline.dart';\nimport '../data/readers/file_gcode_line_reader.dart';\nimport '../data/readers/gcode_line_reader.dart';\nimport '../data/readers/string_gcode_line_reader.dart';\nimport '../domain/gcode_load_stage.dart';\nimport '../models/toolpath_segment.dart';\nimport '../parser/gcode_parse_result.dart';#import 'package:file_picker_bridge/file_picker_bridge.dart';\nimport 'package:gcode_core/gcode_core.dart';#s" \ - "$ROOT/lib/modules/ui/gcode_visualizer/state/gcode_player_controller.dart" -perl -0pi -e "s#import '../models/gcode_command.dart';\nimport '../models/toolpath_segment.dart';#import 'package:gcode_core/gcode_core.dart';#s" \ - "$ROOT/lib/modules/ui/gcode_visualizer/widgets/gcode_canvas.dart" -perl -0pi -e "s#import '../models/gcode_command.dart';\nimport '../parser/gcode_parse_result.dart';#import 'package:gcode_core/gcode_core.dart';#s" \ - "$ROOT/lib/modules/ui/gcode_visualizer/widgets/command_timeline.dart" -perl -0pi -e "s#import 'ioc/ioc.dart' as ioc;#import 'package:flutter_ioc_core/flutter_ioc_core.dart' as ioc;#g" \ - "$ROOT/lib/modules/state/flutter_ioc/module_entry.dart" - -perl -0pi -e "s#import 'package:main_app/shared/platform/file_picker/method_channel_file_picker.dart';#import 'package:file_picker_bridge/file_picker_bridge.dart';#g" \ - "$ROOT/test/shared/platform/file_picker/method_channel_file_picker_test.dart" - -rm -rf "$ROOT/lib/modules/ui/gcode_visualizer/application" \ - "$ROOT/lib/modules/ui/gcode_visualizer/data" \ - "$ROOT/lib/modules/ui/gcode_visualizer/domain" \ - "$ROOT/lib/modules/ui/gcode_visualizer/models" \ - "$ROOT/lib/modules/ui/gcode_visualizer/parser" \ - "$ROOT/lib/modules/ui/gcode_visualizer/services" \ - "$ROOT/lib/modules/state/flutter_ioc/ioc" \ - "$ROOT/lib/shared/learning" \ - "$ROOT/lib/shared/platform/file_picker" -rm -rf "$ROOT/test/shared/platform/file_picker" - -cat > "$ROOT/lib/modules/ui/gcode_visualizer/AI_ANALYSIS.md" <<'EOF' -# G-code Visualizer 模块分析 - -> G-code 解析与轨迹动画演示模块。纯解析与轨迹构建逻辑已迁移到同级包 `../gcode_core`,本模块只保留 Flutter 教学 UI、状态编排和绘制交互。 - -## 功能目标 - -调用 `gcode_core` 将 G-code 文本或文件解析为轨迹段,并通过 CustomPaint、AnimationController 和教学模板展示 G0/G1 刀路执行过程。 - -## 文件结构 - -``` -modules/ui/gcode_visualizer/ -├── module_entry.dart # 入口: 返回 GcodeVisualizerPage -├── AI_ANALYSIS.md # 模块分析文档 -├── pages/ -│ └── gcode_visualizer_page.dart # 教学页面,依赖 flutter_study_learning -├── state/ -│ └── gcode_player_controller.dart # ChangeNotifier + AnimationController,编排解析、文件选择和播放 -└── widgets/ - ├── command_timeline.dart # 指令列表,高亮当前执行行 - ├── gcode_canvas.dart # CustomPaint 轨迹画布 - ├── gcode_editor_panel.dart # 编辑器 + 文件路径输入/选择/提取按钮 - └── playback_controls.dart # 播放/暂停/重置/进度/速度控制 -``` - -## 外部包依赖 - -| 包 | 用途 | -|---|---| -| `gcode_core` | G-code 读取、解析、错误收集、轨迹构建 | -| `flutter_study_learning` | 教学页面模板组件 | -| `file_picker_bridge` | 文件选择 Dart API,macOS 原生通道仍由宿主应用注册 | - -## 数据流 - -``` -source text / path input / file picker - -> gcode_core GcodeLineReader - -> gcode_core GcodeReadlinePipeline - -> GcodePlayerController - -> GcodeCanvas / CommandTimeline / PlaybackControls -``` - -## 修改注意事项 - -1. 新增 G-code 语法、reader 或 toolpath 规则时修改 `../gcode_core`。 -2. 本模块只处理 Flutter UI、播放状态和教学表达。 -3. 文件选择能力来自 `file_picker_bridge`,模块只传入 G-code 扩展名和弹窗文案。 -4. 教学页面组件来自 `flutter_study_learning`。 -EOF - -cat > "$ROOT/lib/shared/AI_ANALYSIS.md" <<'EOF' -# Shared 层分析 - -> shared 层已完成第一轮外置迁移。教学模板、平台文件选择等可复用能力已迁移到项目同级 package,主应用通过 path dependency 引用。 - -## 当前定位 - -`lib/shared/` 只保留跨模块共享能力的项目内文档和后续过渡能力。新增稳定能力时优先评估是否直接进入同级 package。 - -## 已迁移能力 - -| 能力 | 同级包 | 当前使用方 | -|---|---|---| -| 教学模板 | `../flutter_study_learning` | tree_state, gcode_visualizer | -| 文件选择 Dart API | `../file_picker_bridge` | gcode_visualizer | - -## 维护规则 - -1. `shared/` 不得 import `modules/`。 -2. 新增 shared 代码前优先评估是否应放入同级 package。 -3. 业务模块只能依赖 package API,不直接依赖平台通道细节。 -EOF - -cat > "$ROOT/lib/shared/platform/AI_ANALYSIS.md" <<'EOF' -# Platform 共享层分析 - -> 平台能力正在从主应用 shared 层迁移到同级 package。 - -## 当前能力 - -| 能力 | 包 | 宿主原生实现 | -|---|---|---| -| 文件选择 | `../file_picker_bridge` | macOS `AppDelegate.swift` 注册 `file_picker_bridge/file_picker` | - -## 后续计划 - -当需要 Windows/iOS/Android 文件选择实现时,将 `file_picker_bridge` 从 Dart API package 升级为完整 Flutter plugin,并迁移 macOS 原生实现。 -EOF - -cat > "$ROOT/lib/modules/state/flutter_ioc/AI_ANALYSIS.md" <<'EOF' -# AI 模块分析: flutter_ioc - -> 自研 IoC 容器教学模块。IoC 核心逻辑已迁移到同级纯 Dart 包 `../flutter_ioc_core`,本模块保留 Provider 接入和计数器教学 UI。 - -## 文件结构 - -``` -modules/state/flutter_ioc/ -├── module_entry.dart # 创建 flutter_ioc_core.Container 并注入 Provider -├── module_root.dart # CounterScreen 教学 UI -├── model/counter_model.dart -└── AI_ANALYSIS.md -``` - -## 外部包依赖 - -| 包 | 用途 | -|---|---| -| `flutter_ioc_core` | Container、IoCContainer、生命周期、条件注册、属性注入 | - -## 修改注意事项 - -1. IoC 容器能力变更应修改 `../flutter_ioc_core`。 -2. 本模块只维护 Flutter/Provider 教学集成。 -EOF - -perl -0pi -e 's#lib/shared/learning/learning_scaffold.dart#package:flutter_study_learning#g; s#`lib/shared/platform/file_picker/`#`../file_picker_bridge`#g; s#`shared/platform/file_picker/`#`../file_picker_bridge`#g' \ - "$ROOT/README.md" "$ROOT/AI_PROJECT_CONTEXT.md" "$ROOT/REFACTOR_PLAN.md" "$ROOT/PLUGIN_DECOMPOSITION_PLAN.md" "$ROOT/lib/modules/basic/tree_state/AI_ANALYSIS.md" - -echo "Sibling package migration completed." diff --git a/tool/validate_agent_docs.js b/tool/validate_agent_docs.js index 4973dfc..0778454 100644 --- a/tool/validate_agent_docs.js +++ b/tool/validate_agent_docs.js @@ -4,6 +4,12 @@ const path = require('path'); const root = path.resolve(__dirname, '..'); const failures = []; const documents = new Map(); +const workspacePackages = [ + ['gcode_core', 'packages/gcode_core'], + ['flutter_study_learning', 'packages/flutter_study_learning'], + ['file_picker_bridge', 'packages/file_picker_bridge'], + ['flutter_ioc_core', 'packages/flutter_ioc_core'], +]; function readJson(rel) { try { @@ -107,6 +113,33 @@ if (moduleIndex) { } } +for (const [packageName, packagePath] of workspacePackages) { + const analysisPath = `${packagePath}/AI_ANALYSIS.md`; + const manifestPath = `${packagePath}/pubspec.yaml`; + const contract = documents.get(analysisPath); + if (!contract) { + failures.push(`${analysisPath}:missing_package_contract`); + continue; + } + if (contract.mode !== 'package_contract') { + failures.push(`${analysisPath}:mode:package_contract`); + } + if (contract.node?.package !== packageName) { + failures.push(`${analysisPath}:package_name_mismatch`); + } + if (contract.node?.path !== packagePath) { + failures.push(`${analysisPath}:package_path_mismatch`); + } + + const manifest = fs.readFileSync(path.join(root, manifestPath), 'utf8'); + if (!new RegExp(`^name:\\s*${packageName}$`, 'm').test(manifest)) { + failures.push(`${manifestPath}:name_mismatch`); + } + if (!/^resolution:\s*workspace$/m.test(manifest)) { + failures.push(`${manifestPath}:missing_workspace_resolution`); + } +} + if (failures.length > 0) { process.stderr.write(`${failures.join('\n')}\n`); process.exit(1); From 8622b214eac8df5e802e2c03620fc086a2dcf716 Mon Sep 17 00:00:00 2001 From: lizy Date: Sat, 25 Jul 2026 21:57:12 +0800 Subject: [PATCH 9/9] fix(packages): resolve test vs flutter_test dependency conflict in workspace - Remove test: ^1.25.0 from gcode_core dev_dependencies (unused) - Remove test: ^1.25.0 from flutter_ioc_core dev_dependencies (unused) - Switch gcode_core tests from package:test to package:flutter_test - Workspace resolution now succeeds with flutterguard_cli present --- ...nt-ready-project-transformation-roadmap.md | 943 --------------- ...6-07-22_172850-p0-codex-execution-queue.md | 1045 ----------------- packages/flutter_ioc_core/pubspec.yaml | 1 - packages/gcode_core/pubspec.yaml | 1 - .../gcode_readline_pipeline_test.dart | 2 +- .../gcode_core/test/gcode_parser_test.dart | 2 +- .../test/toolpath_builder_test.dart | 2 +- pubspec.lock | 28 - 8 files changed, 3 insertions(+), 2021 deletions(-) delete mode 100644 .hermes/plans/2026-07-22_172159-agent-ready-project-transformation-roadmap.md delete mode 100644 .hermes/plans/2026-07-22_172850-p0-codex-execution-queue.md diff --git a/.hermes/plans/2026-07-22_172159-agent-ready-project-transformation-roadmap.md b/.hermes/plans/2026-07-22_172159-agent-ready-project-transformation-roadmap.md deleted file mode 100644 index 288bd06..0000000 --- a/.hermes/plans/2026-07-22_172159-agent-ready-project-transformation-roadmap.md +++ /dev/null @@ -1,943 +0,0 @@ -# Agent-Ready Project Transformation Roadmap - -# 1. Transformation Objective - -## 当前项目状态 - -当前项目已经完成第一轮面向 Agent 的架构整理,具备以下基础: - -- 已形成清晰的 Flutter 应用壳、模块注册、共享能力和教学模块分层。 -- 已有 `AGENTS.md`、项目级机器上下文、重构任务队列、模块索引和模块级契约。 -- 已有 Agent 文档生成与校验工具,当前机器文档能够通过基础一致性校验。 -- 已引入 FlutterGuard 和本地 pre-commit hook。 -- 已有部分 Widget/逻辑测试和平台工程。 - -但工程仍处于“Agent 可以获得部分上下文,但不能稳定独立闭环”的状态。当前最大限制不是继续增加说明文档,而是环境不可复现、依赖布局不自包含、质量门禁不能稳定运行、远端 CI 缺失、任务和交付协议尚未结构化。 - -## 为什么需要 Agent 化改造 - -Agent 协同开发需要把原本存在于开发者经验中的隐性知识,转换为可读取、可约束、可执行和可验证的工程能力。否则 Agent 即使能够生成代码,也可能出现: - -- 无法在新环境完成依赖解析或运行项目。 -- 不知道哪些文件是权威源,造成文档、路由和模块索引漂移。 -- 修改范围失控,引入跨层依赖或无关重构。 -- 只报告“已完成”,但没有真实测试和构建证据。 -- 无法在新会话中继承架构决策、历史约束和未完成任务。 -- 多个 Agent 并行工作时发生重复修改、契约冲突和知识分叉。 - -因此,本次改造目标不是“增加 AI 文档”,而是建立一套由工程机制保证的 Agent 协作系统。 - -## 改造后的目标状态 - -### AI Agent 可以理解项目上下文 - -- 能从统一入口定位项目目标、技术栈、架构边界、模块清单、平台支持和当前任务。 -- 能区分手写权威文档、生成文档、历史记录和非权威说明。 -- 能在局部修改前自动定位目标模块契约及相关 ADR。 - -### AI Agent 可以安全修改代码 - -- 每个任务具有明确的允许范围、禁止范围、风险等级和验收条件。 -- 架构边界、路由一致性、模块元数据和平台能力由工具校验。 -- 高风险操作需要人工授权,Agent 不能默认提交、推送、合并或发布。 - -### AI Agent 可以遵循项目规范 - -- 本地与 CI 使用同一个 bootstrap 和 quality gate。 -- 格式化、静态分析、测试、文档漂移、架构扫描和安全检查不可绕过。 -- 任务完成标准由命令和证据定义,而不是由 Agent 自我声明。 - -### AI Agent 可以持续维护项目知识 - -- 任务执行后输出结构化变更报告。 -- 架构变化必须关联 ADR 和上下文更新。 -- 自动检测过期路径、失效文档链接、生成文件漂移和模块契约缺失。 -- 稳定知识进入项目契约;临时进度进入任务系统;历史原因进入 ADR。 - -### AI Agent 可以参与架构演进 - -- Agent 可以提出 ADR、影响分析和迁移计划,但架构决策需经过 Review。 -- 架构规则可以逐步转化为自动化检查。 -- 通过质量指标和失败反馈持续改进规则、测试与上下文,而不是无限扩张文档。 - ---- - -# 2. Current Gap Analysis - -## A. Knowledge Gap - -| 问题 | 影响程度 | 优先级 | 改造收益 | -|---|---|---|---| -| 项目已有机器上下文,但缺少统一 Agent 导航清单,权威源与生成物关系不够显式 | High | P0 | Agent 能快速定位上下文,避免重复读取和误改生成文件 | -| 缺少正式 ADR 体系,架构拆分和平台边界的“为什么”没有稳定记录 | High | P1 | 新 Agent 能理解历史取舍,减少反复推翻既有决策 | -| README 存在失效文档引用和迁移前路径 | Medium | P0 | 消除错误引导,降低环境准备和定位成本 | -| 技术栈只声明大版本,没有精确工具链和兼容矩阵 | High | P0 | 提升构建复现性,减少 Agent 环境差异 | -| 模块索引、路由注册和生成器中存在重复清单 | High | P1 | 建立单一事实源,防止模块、路由和契约漂移 | -| 测试策略、平台验收和 UI 证据要求分散在规则及任务计划中 | Medium | P1 | Agent 能根据变更类型选择正确验证层级 | -| 缺少项目级术语、状态和风险等级定义 | Low | P2 | 降低多 Agent 对同一概念的解释差异 | - -## B. Engineering Process Gap - -| 问题 | 影响程度 | 优先级 | 改造收益 | -|---|---|---|---| -| 仓库依赖多个未声明的父目录 path dependency,单次 clone 无法自举 | High | P0 | 新环境和 CI 可以独立完成依赖解析与验证 | -| FlutterGuard 依赖路径失效,导致 analyze、test 和安全扫描均无法运行 | High | P0 | 恢复完整质量基线,是后续所有改造的前提 | -| 已有 Agent 修改规范,但缺少统一 Definition of Done | High | P1 | 所有任务使用一致完成标准,减少“代码写完但未验证” | -| 缺少结构化 Task Specification | High | P1 | 任务边界、依赖和验收可被 Agent 精确执行 | -| 缺少结构化 Execution Report | Medium | P1 | Review 可以追溯实际命令、结果、风险和人工证据 | -| 缺少标准化 Review 流程和风险分级 | High | P1 | 高风险修改获得额外审查,普通任务保持高效 | -| pre-commit 只运行 FlutterGuard,没有覆盖文档、格式、分析和测试 | Medium | P1 | 本地更早发现失败,减少无效 CI 往返 | -| 格式基线未收敛,大量文件会被 formatter 修改 | Medium | P0 | 后续逻辑 diff 更清晰,格式门禁有实际信号 | -| 缺少依赖升级、发布和回滚流程 | Medium | P2 | Agent 可以安全参与维护和版本演进 | - -## C. Agent Collaboration Gap - -| 问题 | 影响程度 | 优先级 | 改造收益 | -|---|---|---|---| -| 已有 `AGENTS.md`,但缺少面向多 Agent 的统一入口 manifest | Medium | P1 | 不同 Agent/IDE 能解析同一上下文入口 | -| 缺少任务允许路径、禁止路径和副作用声明 | High | P1 | 防止越界修改、无关重构和危险操作 | -| 缺少 Agent 完成报告和证据格式 | High | P1 | 避免不可验证的成功声明,提升 Review 效率 | -| 缺少多 Agent 任务依赖、占用范围和冲突管理机制 | Medium | P2 | 降低并行修改同一模块导致的冲突 | -| 缺少项目知识生命周期规则 | High | P2 | 明确哪些信息进入契约、ADR、任务记录或应被删除 | -| 缺少 Agent 规则变更的 Review 和版本机制 | Medium | P2 | 防止规则被临时任务污染或持续膨胀 | -| 缺少架构提案模板和影响分析要求 | Medium | P2 | Agent 可以参与演进,但不能直接绕过架构治理 | -| 缺少失败复盘到规则/工具的反馈闭环 | Low | P2 | 将重复错误转化为长期工程能力 | - -## D. Automation Gap - -| 问题 | 影响程度 | 优先级 | 改造收益 | -|---|---|---|---| -| 没有远端 CI workflow | High | P0 | 所有提交获得不可绕过的统一验证 | -| analyze、test、FlutterGuard 当前被依赖路径阻断 | High | P0 | 恢复真实质量反馈和工程可运行性 | -| 测试只覆盖部分模块,缺少全模块入口 smoke | High | P1 | Agent 修改模块时能快速发现入口、路由和渲染回归 | -| 缺少生成文档的 deterministic/drift check | High | P1 | 保证机器上下文与代码同步 | -| 缺少路由、模块目录和注册表的自动交叉校验 | High | P1 | 防止孤立模块、重复路由和元数据缺失 | -| 缺少 Android/iOS/macOS/Windows 的分层 CI 策略 | Medium | P1 | 平台支持从声明变为真实构建证据 | -| UI 教学页缺少稳定截图或 Golden 验收体系 | Medium | P2 | Agent 能提供可审计的视觉修改证据 | -| 缺少依赖、密钥、权限和供应链检查 | Medium | P1 | 降低 Agent 引入不安全依赖和平台权限的风险 | -| 缺少机器可读测试、扫描和覆盖率产物 | Low | P2 | Agent 与 Reviewer 能更高效消费失败信息 | - ---- - -# 3. Transformation Roadmap - -## Phase 0: Project Baseline - -### 目标 - -建立可复现、可运行、可验证的项目基线。任何开发者或 Agent 在一次 clone 后,都能够通过固定命令准备环境并执行核心检查。 - -### 能力建设 - -- 修复失效依赖并消除未声明的父目录依赖。 -- 确定单仓 workspace 或固定版本多仓依赖策略;默认推荐单仓。 -- 精确锁定 Flutter、Dart、Node 和平台工具要求。 -- 建立 environment check、bootstrap 和统一命令入口。 -- 清理 README 的失效路径和错误事实。 -- 将全量格式化作为独立基线变更。 -- 取得真实 analyze、test、FlutterGuard 基线。 - -### Exit Criteria - -- 新 clone 不依赖开发者私有目录结构。 -- bootstrap 可以完成依赖准备。 -- 核心 quality gate 可以完整执行并返回可信状态。 -- README 中的运行命令与真实环境一致。 - -## Phase 1: Agent Context Foundation - -### 目标 - -建立统一、分层、可维护的 Agent 项目认知能力,并明确每类知识的权威来源。 - -### 能力建设 - -- 建立 `.agent/manifest.json` 作为 Agent 导航入口,不复制已有上下文。 -- 定义 project、architecture、module、platform 和 command context 的引用关系。 -- 建立 ADR 体系,记录仓库布局、单一事实源、平台边界和质量门禁决策。 -- 扩展 Agent 文档 schema 与验证器。 -- 消除路由、模块清单和索引之间的双源维护。 -- 定义知识分类和生命周期:契约、ADR、任务、运行产物、历史档案。 -- 建立文档 ownership、generated 标识和漂移检测。 - -### Exit Criteria - -- Agent 可以从 `.agent/manifest.json` 定位所有必要上下文。 -- Agent 能判断文档是否可编辑、由谁生成、何时更新。 -- 新增或修改模块时,注册、索引、契约和验证保持一致。 -- 架构决策有 ADR,可追溯且可 Review。 - -## Phase 2: Agent Development Workflow - -### 目标 - -让 Agent 能够在明确边界内参与任务执行、变更报告和代码 Review。 - -### 能力建设 - -- 定义 Task Specification Schema。 -- 定义 Execution Report Schema。 -- 定义任务风险等级、允许路径、禁止路径和人工审批条件。 -- 建立统一 Definition of Done。 -- 建立 Agent PR/Review 模板和双阶段 Review:规范符合性、代码质量。 -- 建立任务依赖、状态流转、冲突范围和变更跟踪机制。 -- 提供模块新增、Bug 修复、架构提案等任务模板。 -- 明确 Agent 不可默认执行的副作用:commit、push、merge、release、凭据和平台权限修改。 - -### Exit Criteria - -- 任一任务可在新会话中仅凭任务规格和仓库上下文执行。 -- 每次 Agent 交付都包含真实命令、结果、风险和未完成项。 -- Reviewer 可以根据结构化证据判断是否满足完成条件。 -- 高风险任务不能绕过人工审批。 - -## Phase 3: Engineering Quality System - -### 目标 - -通过自动化门禁保证 Agent 修改可靠,使本地验证与远端验证一致。 - -### 能力建设 - -- 建立统一 `quality_gate`,覆盖生成文档、格式、analyze、test、FlutterGuard。 -- 建立 GitHub Actions 核心 CI 和平台 smoke matrix。 -- 补齐模块入口 smoke、路由/registry contract 和平台 fallback 测试。 -- 定义单元、Widget、Golden、集成和平台测试策略。 -- 建立代码覆盖率的渐进基线,而不是一次性追求高百分比。 -- 增加依赖审计、secret scanning、权限变更检查和 SARIF 输出。 -- 建立教学 UI 的窄屏、桌面、文字缩放和视觉证据流程。 -- 将 required checks 与 branch protection 绑定。 - -### Exit Criteria - -- 未格式化、文档漂移、analyze error、test failure、FlutterGuard high 都会阻止合并。 -- 关键平台至少有构建或 smoke 证据。 -- 新模块没有入口测试、元数据或教学模板时自动失败。 -- CI 产物可以支持 Agent 自主定位失败原因。 - -## Phase 4: Continuous Agent Engineering - -### 目标 - -形成长期可持续的 Agent 协作、知识维护和架构演进机制。 - -### 能力建设 - -- 建立知识 freshness 检查和定期维护任务。 -- 将重复失败转化为规则、测试、脚本或 ADR。 -- 建立架构提案、影响分析、迁移计划和弃用流程。 -- 建立 Agent 规则版本和变更 Review。 -- 建立多 Agent 并行任务冲突控制。 -- 跟踪 CI 失败原因、返工率、文档漂移、测试稳定性和任务完成质量。 -- 建立依赖升级、平台升级和 release readiness 自动检查。 -- 定期删除无效知识,避免上下文无限增长。 - -### Exit Criteria - -- 项目知识随代码变化持续更新,而不是依赖集中补文档。 -- Agent 能提出架构演进方案,并通过 ADR 与质量门禁安全落地。 -- 高频错误持续减少,规则和自动化保持高信号。 -- 多 Agent 并行开发具有明确任务边界和冲突处理方式。 - ---- - -# 4. Task Breakdown - -```yaml -- task_id: AR-P0-001 - title: 恢复依赖解析基线 - phase: Phase 0 - objective: 修复当前失效的 FlutterGuard 依赖,使主工程核心命令恢复可执行。 - background: 当前 flutterguard_cli path 指向已经不存在的子目录,analyze、test 和扫描均在依赖解析阶段失败。 - required_changes: - - 确认并修正 flutterguard_cli 的实际依赖位置。 - - 保留当前 pubspec.yaml 和 pubspec.lock 中已有未提交修改。 - - 重新解析依赖并记录真实版本。 - affected_files: - - pubspec.yaml - - pubspec.lock - constraints: - - 不覆盖用户现有 pubspec 修改。 - - 不同时迁移其他依赖或格式化业务代码。 - acceptance_criteria: - - flutter pub get 成功。 - - flutterguard_cli 可被 dart run 解析。 - validation: - - flutter pub get - - dart run flutterguard_cli:flutterguard --help - -- task_id: AR-P0-002 - title: 决定并落实可复现仓库布局 - phase: Phase 0 - objective: 消除主工程对未声明父目录结构的依赖。 - background: 当前多个共享包通过 ../ path 引用,新 clone 和 CI 无法保证这些目录存在。 - required_changes: - - 编写仓库布局 ADR,比较单仓 workspace 与固定 Git 依赖。 - - 默认将共享包迁入 packages/,将工具迁入 tools/ 或使用固定发布版本。 - - 更新依赖路径、测试入口和 Agent 上下文生成源。 - affected_files: - - docs/adr/0001-repository-layout.md - - pubspec.yaml - - pubspec.lock - - packages/** - - tools/** - - tool/generate_agent_indexes.js - constraints: - - 每个迁入包必须保留自身 pubspec、测试和公共 API。 - - 不在迁移任务中重构包内部业务逻辑。 - acceptance_criteria: - - 仓库内不存在未声明的 path: ../ 依赖。 - - 全新 clone 可以完成依赖解析。 - - 所有迁入包可独立测试。 - validation: - - flutter pub get - - bash tool/test_all.sh - - search repository for forbidden parent path dependencies - -- task_id: AR-P0-003 - title: 锁定开发工具链 - phase: Phase 0 - objective: 让开发者、Agent 和 CI 使用一致的 Flutter 与 Node 工具版本。 - background: 当前文档只声明 Flutter 3.x/Dart 3.x,无法保证格式化、分析和生成结果一致。 - required_changes: - - 锁定 Flutter 3.44.6。 - - 锁定 Node.js 20.20.2。 - - 声明 Dart、JDK、Android SDK、Xcode 和 CocoaPods 的兼容要求。 - affected_files: - - .fvmrc - - .nvmrc - - docs/DEVELOPMENT.md - - README.md - constraints: - - 不将 Docker 作为 iOS/macOS 唯一开发环境。 - - 版本事实只维护一个权威来源。 - acceptance_criteria: - - 环境文档包含精确版本和兼容策略。 - - CI 使用相同 Flutter/Node 版本。 - validation: - - fvm flutter --version - - node --version - - flutter doctor -v - -- task_id: AR-P0-004 - title: 建立环境检查和自举入口 - phase: Phase 0 - objective: 用固定脚本完成环境诊断、依赖准备和 hook 启用。 - background: 当前环境准备步骤分散,且不会提前发现依赖目录和平台工具缺失。 - required_changes: - - 新增只读环境检查脚本。 - - 新增 bootstrap 脚本。 - - 输出稳定阶段标识、缺失项和修复建议。 - affected_files: - - tool/check_environment.sh - - tool/bootstrap.sh - - docs/agent/COMMANDS.json - - README.md - constraints: - - 环境检查不得修改业务代码。 - - bootstrap 必须可重复执行。 - - 不自动安装需要管理员权限的软件。 - acceptance_criteria: - - 新环境可通过一个命令得到完整诊断。 - - bootstrap 重复执行不产生额外 diff。 - validation: - - bash tool/check_environment.sh - - bash tool/bootstrap.sh - - git diff --check - -- task_id: AR-P0-005 - title: 收敛格式化基线 - phase: Phase 0 - objective: 将当前格式差异收敛为独立、无逻辑修改的基线变更。 - background: 当前 formatter 会修改大量 Dart 文件,后续变更容易被格式噪声掩盖。 - required_changes: - - 对全仓 Dart 文件执行统一 formatter。 - - 确保该任务不包含业务逻辑变更。 - affected_files: - - lib/**/*.dart - - test/**/*.dart - constraints: - - 独立提交。 - - 不修改 YAML、JSON、Markdown 或依赖版本。 - acceptance_criteria: - - 第二次执行 formatter 不产生 diff。 - - analyze 和 tests 不因格式化产生行为变化。 - validation: - - dart format . - - git diff --exit-code after second format run - - flutter analyze - - flutter test - -- task_id: AR-P0-006 - title: 清理项目入口文档漂移 - phase: Phase 0 - objective: 让 README 只包含当前真实且可执行的信息。 - background: README 存在失效计划文档引用,专项计划包含迁移前路径。 - required_changes: - - 删除或恢复失效文档引用。 - - 更新迁移前路径。 - - 将历史测试数字标记为历史记录或移出权威说明。 - - 将详细环境步骤链接到 DEVELOPMENT 文档。 - affected_files: - - README.md - - GCODE_VISUALIZER_EVOLUTION_PLAN.md - - docs/DEVELOPMENT.md - constraints: - - 不复制机器上下文中的模块清单。 - - 不声明未经真实构建验证的平台支持。 - acceptance_criteria: - - 仓库内文档链接均有效。 - - README 命令可在当前基线运行。 - validation: - - run repository documentation link checker - - bash tool/bootstrap.sh - -- task_id: AR-P1-001 - title: 建立 Agent 上下文导航入口 - phase: Phase 1 - objective: 让任意 Agent 从单一 manifest 定位项目权威上下文。 - background: 当前上下文文件已经较完整,但入口分散,不同 Agent 可能读取不同集合。 - required_changes: - - 创建 .agent/manifest.json。 - - 引用 AGENTS、project context、task queue、schema、module index、commands 和 ADR index。 - - 标注 authored/generated、owner、update trigger 和读取优先级。 - affected_files: - - .agent/manifest.json - - AI_ANALYSIS_SCHEMA.json - - AGENTS.md - constraints: - - manifest 只做导航,不复制上下文内容。 - - 使用 JSON,不引入自然语言 Markdown 机器契约。 - acceptance_criteria: - - manifest 可通过 schema 校验。 - - Agent 能从 manifest 找到所有必读内容。 - validation: - - node tool/validate_agent_docs.js - - validate .agent/manifest.json against schema - -- task_id: AR-P1-002 - title: 建立 ADR 治理体系 - phase: Phase 1 - objective: 记录不可从代码直接推导的架构决策及其原因。 - background: 当前已有架构结果,但缺少正式决策记录、替代方案和废弃流程。 - required_changes: - - 定义 ADR 模板、状态和索引。 - - 补录仓库布局、上下文权威源、平台能力边界和质量门禁决策。 - affected_files: - - docs/adr/README.md - - docs/adr/0001-repository-layout.md - - docs/adr/0002-agent-context-source-of-truth.md - - docs/adr/0003-platform-capability-boundary.md - - docs/adr/0004-quality-gate.md - constraints: - - ADR 记录 why,不复制代码结构清单。 - - 已接受 ADR 的替换必须通过新 ADR supersede。 - acceptance_criteria: - - 每个核心架构约束都有可追溯决策。 - - ADR 状态和替代关系可被工具解析。 - validation: - - run ADR index validator - - run documentation link checker - -- task_id: AR-P1-003 - title: 消除模块元数据双源维护 - phase: Phase 1 - objective: 建立路由、模块元数据和 Agent 模块索引的单一事实源。 - background: 当前模块清单同时存在于 Dart 路由表和 Node 生成器中。 - required_changes: - - 选择结构化 registry manifest 或可解析的 Dart registry 作为唯一源。 - - 从唯一源生成或验证路由与 Agent 索引。 - - 删除生成器中的重复手写模块数组。 - affected_files: - - lib/app/router/app_route_table.dart - - tool/generate_agent_indexes.js - - tool/validate_agent_docs.js - - lib/AI_MODULE_INDEX.md - - lib/modules/**/AI_ANALYSIS.md - constraints: - - 不改变现有公开 route。 - - 生成过程必须 deterministic。 - acceptance_criteria: - - 新增模块只需修改一个权威注册源。 - - 重复 route、缺失 entry、缺失 metadata 会校验失败。 - validation: - - bash tool/generate_harness_ai_analysis.sh - - run generator twice and assert zero diff - - node tool/validate_agent_docs.js - -- task_id: AR-P1-004 - title: 扩展 Agent 文档一致性校验 - phase: Phase 1 - objective: 将已有文档规则转化为自动化结构和交叉引用检查。 - background: 当前验证器只覆盖基础 JSON、必需键和部分索引一致性。 - required_changes: - - 校验 module_entry.dart、分析文档、路由注册和 metadata 完整性。 - - 校验父子索引、命名风格、状态值和教学模板要求。 - - 增加 validator fixtures 和自动测试。 - affected_files: - - tool/validate_agent_docs.js - - tool/test_agent_docs/** - - AI_ANALYSIS_SCHEMA.json - constraints: - - 失败输出必须稳定且包含文件路径和错误代码。 - - 不通过扫描生成手工文件清单。 - acceptance_criteria: - - 每类违规至少有一个负向 fixture。 - - 校验器失败能精确定位原因。 - validation: - - run Node validator test suite - - node tool/validate_agent_docs.js - -- task_id: AR-P1-005 - title: 定义项目知识生命周期 - phase: Phase 1 - objective: 规定知识应进入契约、ADR、任务记录还是运行产物。 - background: 缺少生命周期会导致 AGENTS 和上下文不断膨胀,临时事实长期残留。 - required_changes: - - 定义知识分类、owner、review 周期和删除条件。 - - 规定临时进度不得进入长期上下文。 - - 规定架构变化、模块变化和命令变化的更新触发器。 - affected_files: - - docs/agent/KNOWLEDGE_LIFECYCLE.md - - .agent/manifest.json - - AGENTS.md - constraints: - - 不复制现有模块契约内容。 - - 每类知识必须只有一个权威位置。 - acceptance_criteria: - - 常见知识类型均可映射到明确存储位置。 - - generated 与 authored 文档更新责任明确。 - validation: - - manual architecture review - - run documentation consistency checker - -- task_id: AR-P2-001 - title: 定义 Agent Task Specification - phase: Phase 2 - objective: 将开发任务表达为边界明确、可验证的机器契约。 - background: 当前任务队列有目标与验收,但缺少修改范围、风险、禁止行为和人工审批字段。 - required_changes: - - 创建 Task Schema。 - - 定义 goal、scope、dependencies、acceptance、validation、risk 和 manual_review。 - - 提供 feature、bugfix、refactor 和 architecture proposal 示例。 - affected_files: - - docs/agent/TASK_SCHEMA.json - - docs/agent/examples/tasks/*.json - - REFACTOR_PLAN.md - - tool/generate_agent_indexes.js - constraints: - - 每个 acceptance criterion 必须映射到命令或人工证据。 - - 单个任务必须具有单一目标。 - acceptance_criteria: - - 示例任务全部通过 schema 校验。 - - REFACTOR_PLAN 中活动任务可以映射到新 schema。 - validation: - - run JSON Schema validation for task examples - - node tool/validate_agent_docs.js - -- task_id: AR-P2-002 - title: 定义 Agent Execution Report - phase: Phase 2 - objective: 让 Agent 交付包含可审计的修改、验证和风险证据。 - background: 自然语言完成说明不利于自动 Review,也无法防止虚构或遗漏验证结果。 - required_changes: - - 创建 Change Report Schema。 - - 定义 changed_files、commands、exit_codes、tests、artifacts、risks 和 followups。 - - 提供成功、部分完成和阻塞三类示例。 - affected_files: - - docs/agent/CHANGE_REPORT_SCHEMA.json - - docs/agent/examples/reports/*.json - constraints: - - 报告不得将未执行命令标为成功。 - - 外部副作用必须包含可验证 handle。 - acceptance_criteria: - - 三类示例均通过 schema 校验。 - - CI 可读取报告并展示验证摘要。 - validation: - - run JSON Schema validation for report examples - -- task_id: AR-P2-003 - title: 建立统一 Definition of Done - phase: Phase 2 - objective: 定义所有人类和 Agent 任务的共同完成标准。 - background: 当前验收规则存在,但分散在 AGENTS、README 和计划文档中。 - required_changes: - - 定义通用完成条件。 - - 定义逻辑、UI、平台、依赖和架构变更的附加条件。 - - 将命令引用到 COMMANDS,而不是重复命令实现。 - affected_files: - - CONTRIBUTING.md - - docs/agent/COMMANDS.json - - AGENTS.md - constraints: - - 完成条件必须可验证。 - - 不允许以“Agent 认为完成”作为验收依据。 - acceptance_criteria: - - 每类变更都有明确自动和人工验收要求。 - - AGENTS 与 CONTRIBUTING 不重复维护命令细节。 - validation: - - manual process review - - documentation consistency check - -- task_id: AR-P2-004 - title: 建立风险分级和副作用授权规则 - phase: Phase 2 - objective: 防止 Agent 默认执行高风险工程操作。 - background: 依赖升级、原生权限、发布和 Git 远端操作需要比普通代码修改更强的控制。 - required_changes: - - 定义 low、medium、high 风险级别。 - - 定义必须人工审批的变更类别。 - - 将风险要求接入任务 schema 和 PR 模板。 - affected_files: - - docs/agent/RISK_POLICY.md - - docs/agent/TASK_SCHEMA.json - - .github/pull_request_template.md - - AGENTS.md - constraints: - - commit、push、merge、release 和凭据操作默认禁止。 - - 不在文档中记录任何密钥值。 - acceptance_criteria: - - 高风险示例任务缺少 manual_review 时 schema 校验失败。 - - PR 模板能够显式展示风险和审批状态。 - validation: - - run task policy tests - - manual security review - -- task_id: AR-P2-005 - title: 建立 Agent Review 流程 - phase: Phase 2 - objective: 将规范符合性 Review 与代码质量 Review 分离。 - background: 单次泛化 Review 容易同时遗漏任务越界和实现质量问题。 - required_changes: - - 定义第一阶段 spec compliance review。 - - 定义第二阶段 code quality/security review。 - - 建立 PR checklist 和 review report 模板。 - affected_files: - - docs/agent/REVIEW_PROCESS.md - - .github/pull_request_template.md - - .github/CODEOWNERS - constraints: - - 规范不符合时不得进入代码质量批准。 - - Reviewer 不得仅依赖 Agent 自述,必须检查真实 diff 和 CI。 - acceptance_criteria: - - Review 模板覆盖 scope、acceptance、tests、architecture 和 risk。 - - 高风险目录拥有明确 owner。 - validation: - - dry-run one existing task through review template - - manual maintainer approval - -- task_id: AR-P2-006 - title: 建立多 Agent 任务冲突协议 - phase: Phase 2 - objective: 让并行 Agent 在明确范围内工作并提前暴露冲突。 - background: 多 Agent 可能同时修改路由、生成源、pubspec 或同一模块。 - required_changes: - - 定义任务 claim、allowed paths、shared hotspots 和 dependency 状态。 - - 定义冲突检测和重新排队规则。 - - 标记必须串行执行的全局文件。 - affected_files: - - docs/agent/COLLABORATION_PROTOCOL.md - - docs/agent/TASK_SCHEMA.json - - REFACTOR_PLAN.md - constraints: - - 不引入复杂分布式锁服务。 - - 先使用任务元数据和 CI 冲突检查实现。 - acceptance_criteria: - - 两个重叠 scope 的 active 任务可被检测。 - - 全局生成源变更会自动标记为串行任务。 - validation: - - run overlap detection fixtures - - simulate two conflicting task specifications - -- task_id: AR-P3-001 - title: 建立统一质量门禁 - phase: Phase 3 - objective: 用一个脚本执行所有核心质量检查并保留准确失败码。 - background: 当前检查命令分散,本地与未来 CI 容易产生差异。 - required_changes: - - 建立 quality_gate 脚本。 - - 依次执行生成文档、漂移检查、格式、analyze、tests 和 FlutterGuard。 - - 输出稳定阶段标识和最终摘要。 - affected_files: - - tool/quality_gate.sh - - tool/test_all.sh - - docs/agent/COMMANDS.json - - AGENTS.md - - .githooks/pre-commit - constraints: - - 任一阶段失败必须返回非零状态。 - - CI 与本地调用同一个脚本。 - acceptance_criteria: - - 模拟每类失败时 quality gate 都能阻止通过。 - - 全部通过时工作区没有未预期生成差异。 - validation: - - bash tool/quality_gate.sh - - run failure fixtures for each gate stage - -- task_id: AR-P3-002 - title: 建立核心 CI Workflow - phase: Phase 3 - objective: 在远端对所有 PR 执行不可绕过的核心质量门禁。 - background: 当前没有 .github/workflows,规则只依赖本地配置。 - required_changes: - - 创建 Linux 核心 CI。 - - 配置 Flutter/Node 缓存与精确版本。 - - 上传测试、覆盖率和 FlutterGuard SARIF。 - - 配置并发取消和超时。 - affected_files: - - .github/workflows/ci.yml - - .github/CODEOWNERS - - .github/pull_request_template.md - constraints: - - CI 必须调用仓库内 quality_gate。 - - 不在 workflow 中复制质量门禁逻辑。 - acceptance_criteria: - - PR 自动运行核心门禁。 - - 失败检查阻止合并。 - - 日志和产物足以定位失败。 - validation: - - trigger CI on test pull request - - verify required check and SARIF upload - -- task_id: AR-P3-003 - title: 建立测试策略和模块最低测试契约 - phase: Phase 3 - objective: 明确不同变更类型所需测试,并为每个模块建立入口 smoke 基线。 - background: 当前测试只覆盖部分模块,不能保证所有 module entry 和 route 可渲染。 - required_changes: - - 定义单元、Widget、Golden、集成和平台测试适用条件。 - - 为所有模块增加或生成入口 smoke 测试。 - - 增加 registry/route contract tests。 - affected_files: - - docs/TESTING.md - - test/modules/** - - test/shared/module_registry_contract_test.dart - - tool/validate_agent_docs.js - constraints: - - smoke test 不依赖脆弱的精确像素和动画时序。 - - 逻辑测试覆盖正常、边界和错误路径。 - acceptance_criteria: - - 每个注册模块至少有入口 smoke 证据。 - - 路由和 registry 不一致时测试失败。 - validation: - - flutter test - - node tool/validate_agent_docs.js - -- task_id: AR-P3-004 - title: 建立平台构建与 Smoke Matrix - phase: Phase 3 - objective: 将平台支持声明转化为实际构建和降级行为证据。 - background: 当前目标平台包括 Android、iOS、macOS 和 Windows,但尚无远端平台矩阵。 - required_changes: - - 创建 macOS、Windows、Android 分层 workflow。 - - Android readiness 完成后加入 emulator smoke。 - - 为不支持的平台验证 availability/fallback 状态。 - affected_files: - - .github/workflows/platform-smoke.yml - - integration_test/** - - REFACTOR_PLAN.md - constraints: - - Windows build 只在 Windows runner 执行。 - - iOS/macOS 只在 macOS runner 执行。 - - 尚未 ready 的平台先作为 non-blocking check。 - acceptance_criteria: - - 已声明支持的平台至少有 build 证据。 - - unsupported module 不崩溃并展示明确状态。 - validation: - - flutter build macos - - flutter build windows on Windows CI - - flutter build apk --debug - - flutter test integration_test - -- task_id: AR-P3-005 - title: 建立安全与供应链门禁 - phase: Phase 3 - objective: 降低 Agent 引入不安全依赖、密钥和平台权限的风险。 - background: 当前已有 FlutterGuard,但缺少依赖、secret 和权限变更专项检查。 - required_changes: - - 配置 secret scanning 和 dependency review。 - - 配置 Dependabot 或等价依赖更新机制。 - - 对 Android/iOS/macOS/Windows 权限文件设置 owner 和 Review 要求。 - - 保留 FlutterGuard SARIF。 - affected_files: - - .github/dependabot.yml - - .github/workflows/security.yml - - .github/CODEOWNERS - - SECURITY.md - constraints: - - 不自动合并依赖升级。 - - 高风险权限变更必须人工 Review。 - acceptance_criteria: - - 测试密钥 fixture 会触发扫描失败。 - - 依赖变更会生成 review 报告。 - - 平台权限文件变更需要指定 owner。 - validation: - - run security workflow with fixtures - - verify dependency review on test PR - -- task_id: AR-P3-006 - title: 建立教学 UI 视觉证据流程 - phase: Phase 3 - objective: 为 Agent 的 UI 修改提供稳定、可审计的视觉验收证据。 - background: 当前规则要求人工验收或截图,但没有统一生成和保存方式。 - required_changes: - - 定义 360dp、桌面宽屏和文字缩放场景。 - - 为 recommended 模块建立 screenshot/golden harness。 - - 在 CI 上传差异图和运行截图。 - affected_files: - - docs/TESTING.md - - test/goldens/** - - tool/capture_learning_pages.sh - - .github/workflows/platform-smoke.yml - constraints: - - Golden 更新必须显式审批。 - - 动画页面使用稳定状态,不依赖随机时间点。 - acceptance_criteria: - - UI PR 能产出前后视觉证据。 - - 窄屏 overflow 和文字缩放问题可被测试发现。 - validation: - - flutter test --update-goldens only in approved update flow - - flutter test test/goldens - - verify CI artifact upload - -- task_id: AR-P4-001 - title: 建立知识 Freshness 检查 - phase: Phase 4 - objective: 自动发现过期路径、失效链接、陈旧版本和未更新契约。 - background: 当前已出现 README 失效引用和专项计划旧路径,说明知识会随重构漂移。 - required_changes: - - 增加文档链接和路径检查。 - - 比对工具版本声明与锁定文件。 - - 对生成文档增加更新时间来源而非手工时间戳。 - affected_files: - - tool/check_knowledge_freshness.js - - docs/agent/COMMANDS.json - - .github/workflows/ci.yml - constraints: - - 不依赖容易误报的自由文本语义判断作为阻断条件。 - - 优先检查可确定的路径、链接、版本和 schema。 - acceptance_criteria: - - 失效仓库路径和文档链接会使 CI 失败。 - - 版本声明漂移会被检测。 - validation: - - run freshness checker fixtures - - node tool/check_knowledge_freshness.js - -- task_id: AR-P4-002 - title: 建立架构演进提案流程 - phase: Phase 4 - objective: 让 Agent 可以提出、评估并安全实施架构变化。 - background: Agent 当前可以修改代码,但缺少正式的影响分析和迁移治理流程。 - required_changes: - - 定义 architecture proposal 模板。 - - 要求 alternatives、impact、migration、rollback 和 enforcement plan。 - - 将已接受提案转化为 ADR、任务和自动规则。 - affected_files: - - docs/agent/ARCHITECTURE_PROPOSAL.md - - docs/adr/README.md - - docs/agent/TASK_SCHEMA.json - constraints: - - Agent 不得自行批准架构提案。 - - 架构变化必须包含回滚或兼容策略。 - acceptance_criteria: - - 提案可以拆分为可执行任务。 - - 接受后的约束至少有文档或自动化 enforcement。 - validation: - - dry-run one platform-boundary proposal - - manual architecture board review - -- task_id: AR-P4-003 - title: 建立失败反馈到工程规则的闭环 - phase: Phase 4 - objective: 将重复出现的 Agent 失败转化为测试、检查或知识改进。 - background: 仅记录失败不会提高后续 Agent 的成功率,需要明确升级机制。 - required_changes: - - 定义失败分类和复盘模板。 - - 规定重复失败升级为规则、fixture、测试、脚本或 ADR的条件。 - - 记录修复后的防回归证据。 - affected_files: - - docs/agent/FAILURE_FEEDBACK_LOOP.md - - docs/agent/CHANGE_REPORT_SCHEMA.json - - tool/quality_gate.sh - constraints: - - 不将单次临时故障直接写入长期 AGENTS。 - - 新规则必须有真实失败案例和验证方式。 - acceptance_criteria: - - 重复失败可关联到具体防回归机制。 - - 无效或高误报规则可以被废弃并记录原因。 - validation: - - review three historical failure examples - - verify each selected example maps to a durable control - -- task_id: AR-P4-004 - title: 建立 Agent 工程健康指标 - phase: Phase 4 - objective: 用少量高信号指标评估 Agent 化改造是否真正提升交付质量。 - background: 缺少指标时容易以文档数量代替工程效果。 - required_changes: - - 跟踪 bootstrap 成功率、CI 首次通过率、返工率、漂移失败和 flaky tests。 - - 跟踪任务越界、缺失验证和人工回退原因。 - - 定义季度清理和改进节奏。 - affected_files: - - docs/agent/ENGINEERING_METRICS.md - - .github/workflows/ci.yml - - tool/report_engineering_health.js - constraints: - - 不以代码量、文档量或 Agent 调用次数作为核心成功指标。 - - 不收集密钥、提示内容或个人敏感数据。 - acceptance_criteria: - - 指标可以由 CI 和任务报告自动汇总。 - - 每个指标都有明确改善动作,而不是只展示数字。 - validation: - - generate sample engineering health report from CI fixtures - - manual quarterly review dry-run - -- task_id: AR-P4-005 - title: 建立知识和规则精简机制 - phase: Phase 4 - objective: 防止 Agent 上下文、规则和历史文档无限增长。 - background: 长期 Agent 协作容易积累重复、过期和互相冲突的规则。 - required_changes: - - 定义规则合并、废弃和归档流程。 - - 检测重复命令、重复约束和孤立文档。 - - 对 AGENTS、manifest 和机器上下文设置规模与职责边界。 - affected_files: - - docs/agent/KNOWLEDGE_LIFECYCLE.md - - tool/check_knowledge_freshness.js - - .agent/manifest.json - constraints: - - 删除架构知识前必须确认是否已被 ADR 或代码规则吸收。 - - 不保留可以从代码稳定生成的手工清单。 - acceptance_criteria: - - 重复和孤立知识可自动报告。 - - 每次季度维护可以删除或合并无效上下文。 - validation: - - run duplicate/orphan knowledge checker - - manual review of generated cleanup report -``` - ---- - -## Recommended Execution Order - -1. `AR-P0-001` 恢复依赖解析。 -2. `AR-P0-002` 落实单仓或固定依赖布局。 -3. `AR-P0-003` 至 `AR-P0-006` 建立可复现基线。 -4. `AR-P1-*` 建立上下文单一事实源和 ADR。 -5. `AR-P2-*` 建立任务、报告、风险和 Review 协议。 -6. `AR-P3-001` 与 `AR-P3-002` 优先建立强制质量门禁。 -7. 逐步完成测试、安全、平台和视觉证据能力。 -8. 最后启用 `AR-P4-*` 的长期治理与反馈闭环。 - -## Transformation Completion Definition - -当以下条件同时满足时,项目可视为达到 Agent-Ready 基础成熟度: - -- 一次 clone 后可以通过标准脚本自举。 -- Agent 能从统一 manifest 获取上下文和规则。 -- 每个任务有明确 scope、风险、验收和验证。 -- 每次交付有真实、机器可读的执行证据。 -- 代码、文档、模块索引和架构约束之间不存在未检测漂移。 -- 本地与 CI 使用同一质量门禁,失败会阻止合并。 -- 架构演进通过 ADR、Review 和自动 enforcement 落地。 -- 项目知识能够更新、精简和淘汰,而不是只增不减。 diff --git a/.hermes/plans/2026-07-22_172850-p0-codex-execution-queue.md b/.hermes/plans/2026-07-22_172850-p0-codex-execution-queue.md deleted file mode 100644 index 6bf5c85..0000000 --- a/.hermes/plans/2026-07-22_172850-p0-codex-execution-queue.md +++ /dev/null @@ -1,1045 +0,0 @@ -# P0 Codex Execution Queue - -> Scope: only Phase 0 tasks from the approved Agent-Ready Project Transformation Roadmap. -> -> Execution model: execute one task at a time in dependency order. Start each task in a clean Codex context. Do not commit, push, merge, publish, or modify files outside the task allowlist. - -## Queue Order - -| Order | Task ID | Depends on | Codex direct | Claude architecture review | Human confirmation | -|---|---|---|---|---|---| -| 1 | AR-P0-001 | none | Yes, after confirmation | No | Required before start | -| 2 | AR-P0-002 | AR-P0-001 | Draft only | Required | Required for acceptance | -| 3 | AR-P0-003 | AR-P0-002 accepted | Yes, after confirmation | Required after implementation | Required before start and before deleting legacy layout | -| 4 | AR-P0-004 | AR-P0-001 | Yes | No | Not required | -| 5 | AR-P0-005 | AR-P0-004 | Yes | No | Not required | -| 6 | AR-P0-006 | AR-P0-003, AR-P0-005 | Yes | No | Not required | -| 7 | AR-P0-007 | AR-P0-003 | Yes, after confirmation | No | Required before start | -| 8 | AR-P0-008 | AR-P0-003, AR-P0-004, AR-P0-006 | Yes | No | Required only if documentation changes project claims | -| 9 | AR-P0-009 | AR-P0-006, AR-P0-007, AR-P0-008 | Yes, read-only | No | Required to accept P0 completion | - ---- - -## AR-P0-001 — Restore Dependency Resolution - -```yaml -task_id: AR-P0-001 -objective: > - Repair only the invalid flutterguard_cli path dependency so the current main - application can resolve packages again. - -execution_classification: - codex_can_execute: true - claude_architecture_review: false - human_confirmation: required_before_start - -context: > - The working tree already contains user-owned modifications in pubspec.yaml and - pubspec.lock. The current flutterguard_cli dependency points to - ../flutterguard/packages/flutterguard_cli, while the package currently exists at - ../flutterguard. Preserve every unrelated user change. This task is a narrow - baseline repair; it must not decide or implement the final repository layout. - -files_to_inspect: - - AGENTS.md - - AI_ANALYSIS_SCHEMA.json - - AI_PROJECT_CONTEXT.md - - REFACTOR_PLAN.md - - pubspec.yaml - - pubspec.lock - - ../flutterguard/pubspec.yaml - - ../flutterguard/bin/flutterguard.dart - - .githooks/pre-commit - -files_allowed_to_modify: - - pubspec.yaml - - pubspec.lock - -files_forbidden_to_modify: - - lib/** - - test/** - - tool/** - - .githooks/** - - macos/** - - windows/** - - ../flutterguard/** - - ../gcode_core/** - - ../flutter_study_learning/** - - ../file_picker_bridge/** - - ../flutter_ioc_core/** - - all files not explicitly allowed - -implementation_steps: - - Capture git status and the existing diff for pubspec.yaml and pubspec.lock. - - Verify the package name and executable in ../flutterguard without modifying it. - - Change only the flutterguard_cli path to the actual package root. - - Run flutter pub get and allow it to update only pubspec.lock. - - Compare the resulting diff with the pre-task diff and confirm unrelated user edits remain. - - Run the FlutterGuard help command to prove executable resolution. - - Do not run formatter and do not edit business code. - -acceptance_criteria: - - flutter pub get exits with code 0. - - flutterguard_cli resolves from the corrected local path. - - The existing SDK/version edits in pubspec.yaml and pubspec.lock are preserved. - - No file other than pubspec.yaml and pubspec.lock changes. - - No commit is created. - -validation_commands: - - git status --short --branch - - git diff -- pubspec.yaml pubspec.lock - - flutter pub get - - dart run flutterguard_cli:flutterguard --help - - git diff --check - - git status --short - -expected_execution_report_format: - task_id: AR-P0-001 - status: completed | blocked | partial - summary: string - inspected_files: [path] - changed_files: [path] - preserved_preexisting_changes: - pubspec_yaml: string - pubspec_lock: string - commands: - - command: string - exit_code: integer - result: string - acceptance: - - criterion: string - status: passed | failed | not_run - evidence: string - risks: [string] - blockers: [string] - followups: [string] - review_required: - claude: false - human: true -``` - ---- - -## AR-P0-002 — Approve the Reproducible Repository Layout - -```yaml -task_id: AR-P0-002 -objective: > - Produce and obtain approval for one repository-layout ADR that selects the - reproducible dependency strategy for the main app and its shared packages. - -execution_classification: - codex_can_execute: draft_only - claude_architecture_review: required - human_confirmation: required_for_acceptance - -context: > - The roadmap recommends a monorepo layout because the current application depends - on undeclared sibling directories. This task makes the decision only; it must not - copy, move, delete, or rewrite package source. The ADR must compare a monorepo - workspace with fixed Git dependencies and record the final approved choice. - -files_to_inspect: - - AGENTS.md - - AI_PROJECT_CONTEXT.md - - REFACTOR_PLAN.md - - pubspec.yaml - - tool/migrate_sibling_packages.sh - - ../gcode_core/pubspec.yaml - - ../flutter_study_learning/pubspec.yaml - - ../file_picker_bridge/pubspec.yaml - - ../flutter_ioc_core/pubspec.yaml - - ../flutterguard/pubspec.yaml - - README.md - -files_allowed_to_modify: - - docs/adr/README.md - - docs/adr/0001-repository-layout.md - -files_forbidden_to_modify: - - pubspec.yaml - - pubspec.lock - - lib/** - - test/** - - tool/** - - packages/** - - tools/** - - ../** - - all files not explicitly allowed - -implementation_steps: - - Create the ADR index only if it does not already exist. - - Draft a decision comparing monorepo workspace and fixed Git dependencies. - - Record decision drivers: one-clone bootstrap, atomic changes, package tests, CI, - release independence, package history, and rollback. - - Select the roadmap default of an in-repository packages/ layout unless a human - supplies a different decision. - - Define the intended locations for the four shared packages and FlutterGuard. - - Define migration boundaries, rollback strategy, and completion criteria. - - Request Claude architecture review of the ADR. - - Apply review corrections only within the two allowed ADR files. - - Stop for explicit human acceptance; do not mark accepted without it. - -acceptance_criteria: - - The ADR contains context, alternatives, decision, consequences, migration, - rollback, and status. - - The ADR identifies one unambiguous target layout. - - Claude architecture review has no unresolved blocking finding. - - A human explicitly changes or approves the ADR status as accepted. - - No source, dependency, or package file changes. - -validation_commands: - - git diff -- docs/adr/README.md docs/adr/0001-repository-layout.md - - git diff --check - - verify all paths referenced by the ADR are syntactically consistent - - git status --short - -expected_execution_report_format: - task_id: AR-P0-002 - status: completed | awaiting_human_approval | blocked - summary: string - decision: - selected_strategy: monorepo_workspace | fixed_git_dependencies | undecided - target_layout: [path] - adr_status: proposed | accepted - inspected_files: [path] - changed_files: [path] - commands: - - command: string - exit_code: integer - result: string - claude_review: - status: approved | changes_requested | not_run - findings: [string] - human_confirmation: - status: approved | rejected | pending - evidence: string - acceptance: - - criterion: string - status: passed | failed | pending - evidence: string - risks: [string] - blockers: [string] - followups: [string] -``` - ---- - -## AR-P0-003 — Implement the Approved Repository Layout - -```yaml -task_id: AR-P0-003 -objective: > - Migrate the declared local dependencies into the repository layout accepted by - ADR 0001 so a fresh clone no longer depends on parent-directory packages. - -execution_classification: - codex_can_execute: true_after_human_confirmation - claude_architecture_review: required_after_implementation - human_confirmation: required_before_start_and_before_legacy_deletion - -context: > - This task executes only the layout accepted in docs/adr/0001-repository-layout.md. - The default expected decision is packages/gcode_core, - packages/flutter_study_learning, packages/file_picker_bridge, - packages/flutter_ioc_core, and tools/flutterguard_cli. Source sibling repositories - are read-only inputs. The task must preserve public APIs and behavior and must not - refactor package internals. If the accepted ADR selects fixed Git dependencies, - Codex must implement that decision instead of the default paths and must not create - packages/ or tools/ copies. - -files_to_inspect: - - AGENTS.md - - AI_ANALYSIS_SCHEMA.json - - AI_PROJECT_CONTEXT.md - - REFACTOR_PLAN.md - - docs/adr/0001-repository-layout.md - - pubspec.yaml - - pubspec.lock - - tool/generate_agent_indexes.js - - tool/migrate_sibling_packages.sh - - all tracked source, pubspec, analysis, README, and test files in each dependency source - -files_allowed_to_modify: - - pubspec.yaml - - pubspec.lock - - packages/gcode_core/** - - packages/flutter_study_learning/** - - packages/file_picker_bridge/** - - packages/flutter_ioc_core/** - - tools/flutterguard_cli/** - - tool/generate_agent_indexes.js - - tool/migrate_sibling_packages.sh - - AI_ANALYSIS_SCHEMA.json - - AI_PROJECT_CONTEXT.md - - REFACTOR_PLAN.md - - AI_ANALYSIS.md - - lib/AI_ANALYSIS.md - - lib/AI_MODULE_INDEX.md - - lib/**/AI_ANALYSIS.md - -files_forbidden_to_modify: - - lib/**/*.dart - - test/**/*.dart - - macos/** - - windows/** - - .githooks/** - - README.md - - GCODE_VISUALIZER_EVOLUTION_PLAN.md - - ../gcode_core/** - - ../flutter_study_learning/** - - ../file_picker_bridge/** - - ../flutter_ioc_core/** - - ../flutterguard/** - - all secrets and credential files - - all files not explicitly allowed - -implementation_steps: - - Verify ADR 0001 is accepted and record the exact selected layout. - - Capture the current working-tree diff and preserve unrelated user changes. - - Import each dependency with its source, tests, manifest, license, and public entrypoint. - - Exclude build output, caches, IDE state, credentials, and repository-internal .git data. - - Update root dependency paths or fixed Git references exactly as approved. - - Update only Agent documentation generator source required by the new dependency paths. - - Regenerate machine Agent documents using the project generator. - - Update or retire the one-time sibling migration script so it cannot overwrite the - new canonical packages. - - Resolve dependencies from the repository root. - - Run each imported package's own analyze/test command before testing the app. - - Run root analyze, tests, and FlutterGuard. - - Search tracked manifests and machine contracts for forbidden parent path dependencies. - - Request Claude architecture review focused on boundaries, package ownership, public - APIs, and source-of-truth consistency. - - Do not delete or modify sibling source repositories. Report them as legacy cleanup - requiring separate human action. - -acceptance_criteria: - - A fresh checkout of the current repository contains every local dependency required - for root dependency resolution, or uses the accepted fixed Git references. - - No tracked manifest depends on undeclared parent-directory paths. - - Imported package public APIs and tests remain intact. - - Root flutter pub get succeeds. - - Each package test suite succeeds. - - Root flutter analyze and flutter test succeed, or pre-existing failures are reported - with evidence and no new failure is introduced. - - FlutterGuard completes without high-severity findings introduced by the migration. - - Generated Agent documents contain the approved dependency paths and validate. - - Sibling repositories remain unchanged. - - Claude architecture review has no unresolved blocking finding. - -validation_commands: - - git status --short --branch - - flutter pub get - - run dart pub get and dart test for each pure Dart package - - run flutter pub get and flutter test for each Flutter package - - run dart test in tools/flutterguard_cli - - bash tool/generate_harness_ai_analysis.sh - - node tool/validate_agent_docs.js - - flutter analyze - - flutter test - - dart run flutterguard_cli:flutterguard scan --path . --fail-on high - - git diff --check - - search tracked pubspec and contract files for forbidden path: ../ dependencies - -expected_execution_report_format: - task_id: AR-P0-003 - status: completed | blocked | partial - summary: string - approved_adr: - path: docs/adr/0001-repository-layout.md - strategy: string - status: accepted - imported_dependencies: - - name: string - source: string - destination: string - source_unchanged: boolean - inspected_files: [path] - changed_files: [path] - preserved_preexisting_changes: [string] - commands: - - command: string - working_directory: string - exit_code: integer - result: string - acceptance: - - criterion: string - status: passed | failed | not_run - evidence: string - claude_review: - status: approved | changes_requested | not_run - findings: [string] - human_confirmation: - before_start: approved | missing - legacy_cleanup: approved | deferred | rejected - risks: [string] - blockers: [string] - followups: [string] -``` - ---- - -## AR-P0-004 — Pin the Development Toolchain - -```yaml -task_id: AR-P0-004 -objective: > - Add repository-level version pins for Flutter and Node so local and CI tooling can - select deterministic tool versions. - -execution_classification: - codex_can_execute: true - claude_architecture_review: false - human_confirmation: not_required - -context: > - The approved roadmap baseline uses Flutter 3.44.6, Dart 3.12.2, and Node.js - 20.20.2. Dart is supplied by Flutter and must not be independently pinned to an - incompatible SDK. This task adds version-selection files only; environment scripts - and documentation are separate tasks. - -files_to_inspect: - - AGENTS.md - - pubspec.yaml - - .metadata - - README.md - - existing tool-version files if present - -files_allowed_to_modify: - - .fvmrc - - .nvmrc - -files_forbidden_to_modify: - - pubspec.yaml - - pubspec.lock - - README.md - - docs/** - - lib/** - - test/** - - tool/** - - all files not explicitly allowed - -implementation_steps: - - Confirm neither version file contains user-owned content that would be overwritten. - - Add a valid FVM configuration pinning Flutter 3.44.6. - - Add an NVM version file pinning Node.js 20.20.2. - - Validate file syntax and compare pins with the current approved roadmap versions. - - Do not install, upgrade, or switch SDKs in this task. - -acceptance_criteria: - - .fvmrc is valid and pins Flutter 3.44.6. - - .nvmrc contains Node.js 20.20.2. - - No other file changes. - - No SDK installation or system configuration occurs. - -validation_commands: - - node -e "JSON.parse(require('fs').readFileSync('.fvmrc','utf8')); console.log('fvmrc_valid')" - - test "$(tr -d '[:space:]' < .nvmrc)" = "20.20.2" - - git diff --check - - git status --short - -expected_execution_report_format: - task_id: AR-P0-004 - status: completed | blocked | partial - summary: string - inspected_files: [path] - changed_files: [path] - pinned_versions: - flutter: 3.44.6 - node: 20.20.2 - dart_source: flutter_sdk - commands: - - command: string - exit_code: integer - result: string - acceptance: - - criterion: string - status: passed | failed | not_run - evidence: string - risks: [string] - blockers: [string] - followups: [string] - review_required: - claude: false - human: false -``` - ---- - -## AR-P0-005 — Add the Read-Only Environment Check - -```yaml -task_id: AR-P0-005 -objective: > - Create one read-only environment diagnostic command that verifies required project - tools and reports actionable missing prerequisites. - -execution_classification: - codex_can_execute: true - claude_architecture_review: false - human_confirmation: not_required - -context: > - The script must validate the repository pins and platform prerequisites without - installing software, changing Flutter configuration, fetching dependencies, or - modifying source. It must work from any current directory by resolving the project - root from the script location. Platform-specific checks may be reported as required, - optional, or not applicable. - -files_to_inspect: - - AGENTS.md - - .fvmrc - - .nvmrc - - pubspec.yaml - - README.md - - macos/** configuration entrypoints - - windows/** configuration entrypoints - -files_allowed_to_modify: - - tool/check_environment.sh - -files_forbidden_to_modify: - - .fvmrc - - .nvmrc - - pubspec.yaml - - pubspec.lock - - README.md - - docs/** - - lib/** - - test/** - - macos/** - - windows/** - - all files not explicitly allowed - -implementation_steps: - - Implement strict Bash error handling and project-root resolution. - - Read expected Flutter and Node versions from .fvmrc and .nvmrc rather than duplicating them. - - Check availability and versions of Flutter, Dart, Node, and Git. - - Check Flutter Doctor and report Android, Xcode, CocoaPods, and connected-device status - without treating non-target platform tools as universal hard failures. - - Check that all in-repository dependency paths declared by pubspec exist. - - Emit stable machine-readable stage/result prefixes in addition to human-readable guidance. - - Return zero only when required baseline prerequisites pass. - - Add no install commands and perform no mutation. - -acceptance_criteria: - - The script is read-only and repeatable. - - It reads version pins from repository files. - - Missing required tools produce a nonzero exit code and a remediation message. - - Optional platform gaps are clearly distinguished from required failures. - - Running the script twice produces no repository diff. - -validation_commands: - - bash -n tool/check_environment.sh - - bash tool/check_environment.sh - - git diff --exit-code after two consecutive runs, excluding pre-existing changes - - git diff --check - -expected_execution_report_format: - task_id: AR-P0-005 - status: completed | blocked | partial - summary: string - inspected_files: [path] - changed_files: [path] - environment_results: - - capability: string - required: boolean - status: passed | failed | optional_missing - detected_version: string | null - expected_version: string | null - commands: - - command: string - exit_code: integer - result: string - mutation_check: - repository_diff_created_by_script: boolean - evidence: string - acceptance: - - criterion: string - status: passed | failed | not_run - evidence: string - risks: [string] - blockers: [string] - followups: [string] - review_required: - claude: false - human: false -``` - ---- - -## AR-P0-006 — Add the Idempotent Bootstrap Command - -```yaml -task_id: AR-P0-006 -objective: > - Create one idempotent bootstrap command that prepares repository dependencies and - local Git hooks after the environment check passes. - -execution_classification: - codex_can_execute: true - claude_architecture_review: false - human_confirmation: not_required - -context: > - Repository layout must already be canonical and the environment checker must exist. - Bootstrap may create normal package-manager caches and generated dependency metadata, - but must not edit business source, install administrator-level software, modify global - Git configuration, or run destructive migration scripts. - -files_to_inspect: - - AGENTS.md - - docs/adr/0001-repository-layout.md - - pubspec.yaml - - packages/**/pubspec.yaml - - tools/flutterguard_cli/pubspec.yaml - - tool/check_environment.sh - - .githooks/pre-commit - - .gitignore - -files_allowed_to_modify: - - tool/bootstrap.sh - -files_forbidden_to_modify: - - pubspec.yaml - - pubspec.lock - - packages/** - - tools/** - - lib/** - - test/** - - docs/** - - README.md - - .githooks/** - - .gitignore - - global Git configuration - - all files not explicitly allowed - -implementation_steps: - - Resolve the repository root from the script location. - - Run tool/check_environment.sh and stop on required failures. - - Fetch root dependencies. - - Fetch dependencies for workspace packages/tools only when the selected workspace mechanism - does not already do so. - - Set repository-local core.hooksPath to .githooks. - - Verify the expected hook is executable; report, but do not silently rewrite it. - - Print the next recommended validation command. - - Run bootstrap twice and confirm the second run is successful and does not modify tracked source. - -acceptance_criteria: - - Bootstrap succeeds on a correctly configured checkout. - - Bootstrap stops before dependency mutation when required environment checks fail. - - Repository-local hooksPath equals .githooks after success. - - Running bootstrap twice is safe and produces no tracked source diff. - - No global configuration or administrator-level installation occurs. - -validation_commands: - - bash -n tool/bootstrap.sh - - bash tool/bootstrap.sh - - bash tool/bootstrap.sh - - git config --local --get core.hooksPath - - git diff --check - - git status --short - -expected_execution_report_format: - task_id: AR-P0-006 - status: completed | blocked | partial - summary: string - inspected_files: [path] - changed_files: [path] - bootstrap_runs: - - run: 1 - exit_code: integer - result: string - - run: 2 - exit_code: integer - result: string - hooks: - configured_path: string - executable: boolean - commands: - - command: string - exit_code: integer - result: string - idempotence: - passed: boolean - evidence: string - acceptance: - - criterion: string - status: passed | failed | not_run - evidence: string - risks: [string] - blockers: [string] - followups: [string] - review_required: - claude: false - human: false -``` - ---- - -## AR-P0-007 — Normalize the Dart Formatting Baseline - -```yaml -task_id: AR-P0-007 -objective: > - Apply the repository's current Dart formatter to tracked Dart source and tests as one - isolated formatting-only change. - -execution_classification: - codex_can_execute: true_after_human_confirmation - claude_architecture_review: false - human_confirmation: required_before_start - -context: > - A prior check showed that many tracked Dart files are not at the formatter baseline. - This is intentionally a broad but mechanical task. It must happen after dependency - resolution is stable so analyze and tests can verify no behavior regression. The task - must not include manual refactors, import redesign, lint fixes, or generated-document changes. - -files_to_inspect: - - AGENTS.md - - analysis_options.yaml - - pubspec.yaml - - current git status and complete pre-task diff - -files_allowed_to_modify: - - lib/**/*.dart - - test/**/*.dart - - packages/**/*.dart - - tools/flutterguard_cli/**/*.dart - -files_forbidden_to_modify: - - pubspec.yaml - - pubspec.lock - - analysis_options.yaml - - README.md - - docs/** - - AI_ANALYSIS_SCHEMA.json - - AI_PROJECT_CONTEXT.md - - REFACTOR_PLAN.md - - '**/AI_ANALYSIS.md' - - macos/** - - windows/** - - all non-Dart files - -implementation_steps: - - Capture git status and identify pre-existing Dart modifications, if any. - - Stop and request human direction if a formatter target already has user-owned changes - whose ownership cannot be separated. - - Run dart format on only the allowed Dart trees. - - Do not manually edit formatter output. - - Run formatter a second time and confirm it reports no changes. - - Run root analyze and tests plus package tests. - - Review the diff to confirm it is formatting-only. - -acceptance_criteria: - - Every changed file is an allowed Dart file. - - A second formatter run produces no diff. - - No semantic/manual code change is introduced. - - Root analyze and tests pass, or pre-existing failures are documented with evidence. - - Package tests pass, or pre-existing failures are documented with evidence. - - No commit is created. - -validation_commands: - - git status --short --branch - - dart format lib test packages tools/flutterguard_cli - - dart format lib test packages tools/flutterguard_cli - - flutter analyze - - flutter test - - run tests for each package and tools/flutterguard_cli - - git diff --check - - git diff --stat - - git status --short - -expected_execution_report_format: - task_id: AR-P0-007 - status: completed | blocked | partial - summary: string - human_confirmation: - status: approved | missing - evidence: string - preexisting_dart_changes: [path] - inspected_files: [path] - changed_files: [path] - formatting: - first_run_changed_files: [path] - second_run_clean: boolean - commands: - - command: string - exit_code: integer - result: string - semantic_diff_review: - formatting_only: boolean - evidence: string - acceptance: - - criterion: string - status: passed | failed | not_run - evidence: string - risks: [string] - blockers: [string] - followups: [string] - review_required: - claude: false - human: true -``` - ---- - -## AR-P0-008 — Correct Baseline Documentation - -```yaml -task_id: AR-P0-008 -objective: > - Update the human-facing baseline documentation so all setup commands, paths, tool - versions, and document references match the completed P0 repository state. - -execution_classification: - codex_can_execute: true - claude_architecture_review: false - human_confirmation: conditional_if_support_claims_change - -context: > - Documentation currently includes an invalid plan reference, broad tool versions, and - pre-migration G-code paths. This task updates only human-facing baseline documentation. - Machine Agent contracts remain generated and are forbidden here. Platform support must - not be upgraded from planned to supported without actual build evidence. - -files_to_inspect: - - AGENTS.md - - .fvmrc - - .nvmrc - - docs/adr/0001-repository-layout.md - - AI_PROJECT_CONTEXT.md - - REFACTOR_PLAN.md - - README.md - - GCODE_VISUALIZER_EVOLUTION_PLAN.md - - pubspec.yaml - - tool/check_environment.sh - - tool/bootstrap.sh - - current package locations and public entrypoints - -files_allowed_to_modify: - - README.md - - GCODE_VISUALIZER_EVOLUTION_PLAN.md - - docs/DEVELOPMENT.md - -files_forbidden_to_modify: - - AGENTS.md - - .fvmrc - - .nvmrc - - pubspec.yaml - - pubspec.lock - - AI_ANALYSIS_SCHEMA.json - - AI_PROJECT_CONTEXT.md - - REFACTOR_PLAN.md - - AI_ANALYSIS.md - - lib/** - - test/** - - tool/** - - packages/** - - tools/** - - macos/** - - windows/** - - all files not explicitly allowed - -implementation_steps: - - Update Quick Start to use the actual environment check and bootstrap commands. - - Document exact pinned versions by referencing version files as the source of truth. - - Remove or correct the missing PLUGIN_DECOMPOSITION_PLAN reference. - - Replace sibling-package paths with the accepted canonical repository paths. - - Update G-code plan paths to current module/package paths. - - Mark old test counts and historical status as historical, or remove them from current claims. - - Separate currently verified platforms from planned target platforms. - - Keep README concise and place detailed setup/troubleshooting in docs/DEVELOPMENT.md. - - Verify every local file path and command mentioned in modified documents. - -acceptance_criteria: - - No modified document references a missing local file. - - Setup commands match actual scripts and execute successfully. - - Tool versions match .fvmrc and .nvmrc. - - No current path uses the legacy sibling layout after a monorepo migration. - - Platform support claims are backed by current evidence or explicitly marked planned. - - Machine-generated Agent documents are unchanged. - -validation_commands: - - bash tool/check_environment.sh - - bash tool/bootstrap.sh - - run repository-local Markdown link/path checker if available - - manually verify every backticked local path in the three modified files exists - - git diff --check - - git diff -- README.md GCODE_VISUALIZER_EVOLUTION_PLAN.md docs/DEVELOPMENT.md - -expected_execution_report_format: - task_id: AR-P0-008 - status: completed | blocked | partial - summary: string - inspected_files: [path] - changed_files: [path] - corrected_references: - - old: string - new: string - evidence: string - commands: - - command: string - exit_code: integer - result: string - support_claim_changes: - changed: boolean - human_confirmation: approved | pending | not_required - details: [string] - acceptance: - - criterion: string - status: passed | failed | not_run - evidence: string - risks: [string] - blockers: [string] - followups: [string] - review_required: - claude: false - human: conditional -``` - ---- - -## AR-P0-009 — Verify and Close the P0 Baseline - -```yaml -task_id: AR-P0-009 -objective: > - Perform a read-only end-to-end verification of the completed P0 baseline and return - the evidence required for human acceptance. - -execution_classification: - codex_can_execute: true_read_only - claude_architecture_review: false - human_confirmation: required_to_accept_phase_completion - -context: > - All prior P0 implementation tasks must be complete. This task does not fix failures - and does not modify files. Its only purpose is to prove whether the repository is - self-contained, bootstrap is repeatable, formatting is stable, documentation is - current, and the existing quality commands run from a fresh project state. Any failure - must be reported as a blocker or follow-up task rather than repaired in place. - -files_to_inspect: - - AGENTS.md - - .fvmrc - - .nvmrc - - docs/adr/0001-repository-layout.md - - docs/DEVELOPMENT.md - - README.md - - pubspec.yaml - - pubspec.lock - - tool/check_environment.sh - - tool/bootstrap.sh - - tool/generate_harness_ai_analysis.sh - - tool/validate_agent_docs.js - - .githooks/pre-commit - - all package pubspec files needed to enumerate validation commands - -files_allowed_to_modify: [] - -files_forbidden_to_modify: - - '**/*' - -implementation_steps: - - Capture initial git status and identify all pre-existing changes. - - Run the read-only environment check. - - Run bootstrap twice and verify no tracked source change is produced. - - Verify all declared local dependency paths are inside the repository and exist. - - Validate Agent machine documents without regenerating them first. - - Check formatting stability using an isolated temporary copy or a non-destructive method; - do not allow formatter output to modify the working tree. - - Run root analyze, root tests, package tests, and FlutterGuard. - - Verify repository-local hooksPath. - - Recheck git status and prove the verification task created no changes. - - Return a pass/fail matrix and stop. Do not repair any failure. - -acceptance_criteria: - - Environment check passes for required baseline capabilities. - - Bootstrap succeeds twice and is idempotent. - - Root dependency resolution succeeds without undeclared parent directories. - - Agent document validation passes. - - Formatting check reports no required changes. - - Root analyze and test pass. - - Every imported package/tool test suite passes. - - FlutterGuard reports no high-severity issue. - - Verification creates no repository diff. - - Human explicitly accepts or rejects P0 completion based on the report. - -validation_commands: - - git status --short --branch - - bash tool/check_environment.sh - - bash tool/bootstrap.sh - - bash tool/bootstrap.sh - - node tool/validate_agent_docs.js - - perform non-destructive formatting verification in a temporary worktree or copy - - flutter analyze - - flutter test - - run tests for every package and tools/flutterguard_cli - - dart run flutterguard_cli:flutterguard scan --path . --fail-on high - - git config --local --get core.hooksPath - - git diff --check - - git status --short - -expected_execution_report_format: - task_id: AR-P0-009 - status: passed | failed | blocked - summary: string - initial_git_status: string - final_git_status: string - repository_mutated_by_verification: boolean - baseline_matrix: - - capability: environment - status: passed | failed | blocked - evidence: string - - capability: bootstrap_idempotence - status: passed | failed | blocked - evidence: string - - capability: self_contained_dependencies - status: passed | failed | blocked - evidence: string - - capability: agent_docs - status: passed | failed | blocked - evidence: string - - capability: formatting - status: passed | failed | blocked - evidence: string - - capability: analyze - status: passed | failed | blocked - evidence: string - - capability: root_tests - status: passed | failed | blocked - evidence: string - - capability: package_tests - status: passed | failed | blocked - evidence: string - - capability: flutterguard - status: passed | failed | blocked - evidence: string - commands: - - command: string - working_directory: string - exit_code: integer - result: string - blockers: [string] - followup_tasks: [string] - human_acceptance: - status: approved | rejected | pending - evidence: string -``` - ---- - -## P0 Execution Rules for Codex - -1. Start every task by reading `AGENTS.md`, the listed context files, and current `git status`. -2. Treat all pre-existing working-tree changes as user-owned. Never reset, checkout, stash, or overwrite them. -3. Modify only the explicit allowlist. If another file is required, stop and return `blocked` with the proposed scope change. -4. Never modify sibling repositories. They are read-only migration sources until a human separately approves cleanup. -5. Never commit, push, merge, publish, or rewrite history. -6. Do not claim success when a validation command was not run or failed. -7. A task requiring Claude Review is not complete until blocking findings are resolved. -8. A task requiring human confirmation must stop at the stated checkpoint. -9. Do not start P1 work, create `.agent/manifest.json`, add CI, or introduce Task/Report schemas during this batch. -10. Return only the task-specific execution report after each task; do not combine multiple task reports. diff --git a/packages/flutter_ioc_core/pubspec.yaml b/packages/flutter_ioc_core/pubspec.yaml index 8397bcb..080c0a7 100644 --- a/packages/flutter_ioc_core/pubspec.yaml +++ b/packages/flutter_ioc_core/pubspec.yaml @@ -9,5 +9,4 @@ environment: resolution: workspace dev_dependencies: - test: ^1.25.0 lints: ^4.0.0 diff --git a/packages/gcode_core/pubspec.yaml b/packages/gcode_core/pubspec.yaml index 9bd4797..3ac411b 100644 --- a/packages/gcode_core/pubspec.yaml +++ b/packages/gcode_core/pubspec.yaml @@ -15,7 +15,6 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - test: ^1.25.0 lints: ^4.0.0 flutter: diff --git a/packages/gcode_core/test/application/gcode_readline_pipeline_test.dart b/packages/gcode_core/test/application/gcode_readline_pipeline_test.dart index 1138da7..c27e9b4 100644 --- a/packages/gcode_core/test/application/gcode_readline_pipeline_test.dart +++ b/packages/gcode_core/test/application/gcode_readline_pipeline_test.dart @@ -1,6 +1,6 @@ import 'dart:io'; -import 'package:test/test.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'package:gcode_core/gcode_core.dart'; void main() { diff --git a/packages/gcode_core/test/gcode_parser_test.dart b/packages/gcode_core/test/gcode_parser_test.dart index 30e0823..1aac0a0 100644 --- a/packages/gcode_core/test/gcode_parser_test.dart +++ b/packages/gcode_core/test/gcode_parser_test.dart @@ -1,4 +1,4 @@ -import 'package:test/test.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'package:gcode_core/gcode_core.dart'; void main() { diff --git a/packages/gcode_core/test/toolpath_builder_test.dart b/packages/gcode_core/test/toolpath_builder_test.dart index 808ebd2..2bfa5da 100644 --- a/packages/gcode_core/test/toolpath_builder_test.dart +++ b/packages/gcode_core/test/toolpath_builder_test.dart @@ -1,4 +1,4 @@ -import 'package:test/test.dart'; +import 'package:flutter_test/flutter_test.dart'; import 'package:gcode_core/gcode_core.dart'; void main() { diff --git a/pubspec.lock b/pubspec.lock index 388a8e3..6e248e2 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -161,13 +161,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "7.0.1" - file_picker_bridge: - dependency: "direct main" - description: - path: "../file_picker_bridge" - relative: true - source: path - version: "0.1.0" flutter: dependency: "direct main" description: flutter @@ -181,13 +174,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "8.1.6" - flutter_ioc_core: - dependency: "direct main" - description: - path: "../flutter_ioc_core" - relative: true - source: path - version: "0.1.0" flutter_lints: dependency: "direct dev" description: @@ -204,13 +190,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "2.6.1" - flutter_study_learning: - dependency: "direct main" - description: - path: "../flutter_study_learning" - relative: true - source: path - version: "0.1.0" flutter_svg: dependency: "direct main" description: @@ -236,13 +215,6 @@ packages: relative: true source: path version: "0.7.1" - gcode_core: - dependency: "direct main" - description: - path: "../gcode_core" - relative: true - source: path - version: "0.1.0" glob: dependency: transitive description:

    (jtLdH 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