| docs: add custom component extension development guide Covers end-to-end flow for creating custom native render components via flexui-component-ext HAR modules, using BadgeView as the complete walkthrough example. Includes architecture overview, step-by-step implementation guide, API reference, and solutions for 6 common pitfalls discovered during actual development. Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| chore: sync ai branch changes onto upstream/ai Squashed commit of all ai branch development work: - feat: component extension system (FlexUIComponentExtension, BadgeView) - feat: HSP resource loading via configurable ResourceManager - feat: dynamic property injection (has.env) - feat: debug logging for ArkTS API entry points - feat: Card Tester mock data via bridge dispatch - feat: flexui adapter split into frontend/backend - fix: console, bridge, serialization, text rendering fixes - refactor: FlexUIBridge rename, as_apis extraction, callback handling - chore: release @flexui/engine v0.1.0 - chore: gitignore HAR, GIF, node_modules build artifacts Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| docs: add flexui-engine ArkTS API reference and integration guides - Add flexui-engine-arkts-api.md: complete ArkTS API surface reference organized by use case (SDK rendering, native modules, bridge, EnvAPI, engine context), with two full examples (FlexView + custom module) - Add agent-runtime-engine-integration.md: how agent-runtime integrates with flexui-engine (module registration, bridge wiring, skill lifecycle) - Update flexui-engine-ohos-usage-guide.md: consolidate three integration patterns (SDK cards, custom modules, agent runtime) into one guide - Include __ascfCallbacks reverse bridge module documentation with all 6 methods detailed (executeSkillApi, onCardEvent, onInstanceCreate, onInstanceDestroy, invokeAsyncCallback, evalSkillCode) Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| feat: add has.env dynamic property injection from ETS to JS - has.ts: add _envStore + __flexui_env global module (updateEnv/replaceEnv) - has_apis.js: expose has.env as live reference to _envStore - entry.js: register __flexui_env in __GLOBAL__.jsModuleList for callJavaScriptModule - EnvAPI.ets: new static API (EnvAPI.setEnv / EnvAPI.setEnvObject) in flexui-engine - FlexUIEngineManagerImpl: auto-inject bridge reference during engine init - index.ets: export EnvAPI from @flexui/engine ETS side pushes key-value pairs via callJavaScriptModule, JS side reads has.env with zero bridge overhead (live object reference). Values flow through JSON, preserving types automatically. Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| refactor: extract as_apis and android-modules from flexui-engine/modules/ Move modules/ohos/as_apis → as_apis/ and modules/android → android-modules/ to the repo root, alongside flexui-engine. These are independent build artifacts (HAR/AAR) not packaged by build-engine. - Update build configs: build-profile.json5, settings.gradle, cmake, oh-package.json5 - Update build scripts: pkg.sh, build-hap.sh, build-agent.sh - Add auto-clean in build-hap/build-agent to handle shared as_apis dependency - Fix AscfAIModuleModule.call() return type to match FlexUINativeModuleBase - Update docs paths Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| fix(engine): keep __slotMap across attribute flushes on slot-host custom components Root cause: __slotMap is a JS-managed sticky ext prop pushed ONLY on structural changes (child attach/detach/slot re-assign), while regular attributes (e.g. collapsed-height on <collapsible-view>) are re-sent on every flush WITHOUT __slotMap. UpdateDomNodes' ext diff (DiffProps) treated the missing __slotMap as DELETED and SetExtStyleMap then wiped it from the node's ext map, so the ArkTS side only received setProp('__slotMap', null); FlexUICustomComponentView. _parseSlotMapProp early-returned and onSlotMapParsed never ran again (C++ slot routing was lost too). Fix (C++): UpdateDomNodes now re-injects the existing __slotMap into update_ext when it is omitted, and filters __slotMap out of ext auto-delete (only an explicit deleteProps entry clears it). Fix (ArkTS): _parseSlotMapProp also invokes onSlotMapParsed(empty map) on the null/empty branch so the subclass hook contract is never silently broken. Demo: collapsibleview-demo scenario 1 now carries collapsed-height=100 with a <text slot=button> child as an on-device regression scenario; docs updated (design flexui-component-slot.md edge case 8, extension guide known-constraint). | 2 months ago |
| docs: 崩溃符号化指南 + P2-F 能力与实测记录 - docs/learn/flexui-dfx-crash-symbolize.md(新增):onCrashReport 栈地址 符号化与定位指南——路径 A(系统 faultlogger 日志,pc offset 直接符号化)、 路径 B(payload 的 flexui+offset 标注直接 addr2line + 旧格式反推法)、 设备 .so 获取与锚点验证、快速排障清单(全部用真机实测数据演示) - guide §3.6:onCrashReport 从 P2 预留改为已实现(机理/payload/局限) - verification:第三轮实测表(G2/G3/补报/base 标注) - 状态文档 §10:P2-F 开发轮记录 | 2 months ago |
| fix(engine): 移除 JSH VM promise-reject hook(系统 jsvm OnPromiseReject SIGSEGV) cppcrash-3(Mate 60 Pro 5.1.0.110,dom_worker 线程,2026-08-25 15:43):业务 JS 产生 unhandled rejection 时,系统 libjsvm.so 内部 OnPromiseReject 构造 rejectInfo 在 v8::Object::Set → LookupIterator::PrepareTransitionToDataProperty 空指针 SIGSEGV,进程前台崩溃。该路径由 7e0aec1c(同日 10:31)注册的 OH_JSVM_SetHandlerForPromiseReject 激活——注册前不可达。 移除(jsh_vm.cc):OH_JSVM_SetHandlerForPromiseReject 注册、PromiseRejectCallback、JSHValueToStdString 及 dfx_collector.h include;构造函数留注释,系统修复前禁止重新注册。DFX ReportRejection 管道保留(V8/Android SetPromiseRejectCallback 与支持事件系统的平台 JS hook 可用)。bootstrap.ts / dfx_collector.h / monitoring-guide 注释同步为已禁用+原因。 验证:./build.sh build-engine BUILD SUCCESSFUL(jsh_vm.cc.o 已刷新)。 | 2 months ago |
| docs: onWindowSummary 移除记录与文档清理 - guide:事件表/配置表(enableErrorCounter/reportIntervalMs 废弃标注)、 §3.2 章节替换为移除说明、FAQ 更新 - verification:实测表与验证清单清理(§2 删除、4.4/6.2 改写、minor 移除) - 状态文档 §12:移除决策与影响确认记录 | 2 months ago |
| docs: update api doc | 2 months ago |
| refactor: extract as_apis and android-modules from flexui-engine/modules/ Move modules/ohos/as_apis → as_apis/ and modules/android → android-modules/ to the repo root, alongside flexui-engine. These are independent build artifacts (HAR/AAR) not packaged by build-engine. - Update build configs: build-profile.json5, settings.gradle, cmake, oh-package.json5 - Update build scripts: pkg.sh, build-hap.sh, build-agent.sh - Add auto-clean in build-hap/build-agent to handle shared as_apis dependency - Fix AscfAIModuleModule.call() return type to match FlexUINativeModuleBase - Update docs paths Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| feat(engine): URL 加载规范 — 自定义 scheme(RFC 3986)+ 无 scheme 默认分流(/ 开头→file,其他→rawfile) - UrlUtils(ETS/Java) 新增 getScheme/hasScheme/isValidScheme/resolveDefaultScheme - loadCard: url 归一化后按 scheme 分流 jsAssetsPath/jsFilePath/raw loader(新 FlexURawUriBundleLoader) - runScriptFromUri/runEngineScriptFromUri 入口归一化,显式 scheme 原样透传 - FlexUIResourceLoader 支持自定义 scheme 路由(构造注入 + registerSchemeHandler,内置 scheme 不可覆盖) - FlexUIEngineConfig.customResourceLoaders / FlexUIEngineContext.registerResourceLoader 双注册通道 - loadModuleWithListener 补上此前缺失的 bundleLoader 优先分支;Android checkModuleLoadParams 校验放宽 - DynamicLoad.js isSchema 正则升级为 RFC 3986(旧正则误判 asset:/ 为无 scheme) - Android resolveDefaultScheme asset 前缀用三斜杠 assets:///(双斜杠会被 java.net.URI 当 authority 吞目录) - 文档:integration.md / usage-guide.md 补充 URL 加载规范说明 Co-Authored-By: Claude <noreply@anthropic.com> | 2 months ago |
| fix: agent skill activation, cross-platform builds, and Java 8 compatibility Agent (ascf-agent): - Add isBridgeReady() for sync bridge wiring check - Support skill re-activation with bootstrap injection - Fix ArkTS compliance: Promise type annotations, string concat - Async bridge wiring with onReady fallback, add skillsBasePath config Android (flexui-engine): - Unify Java source/target compatibility from 1.7 to 1.8 (renderer/native already used 1.8, these 9 modules were missed) - Fix fat-aar AAR output path (no build-type suffix) - Add compileOnly deps for android-demo build Build / Cross-platform: - Auto-detect DevEco Studio on macOS and Windows - Add manifest.json generation for Android skill name resolution - Windows path normalization in component-builder.js - Fix import paths in flexui-typescript (scoped package names) - Rename hxmlEnvGetter to wxmlEnvGetter - Add TypeScript type annotations in flexui-webpack-plugin - Add cross-env for Windows FLEXUI_ARGS compatibility - Quote HVIGORW to support paths with spaces - gitignore: local keystore, IDE artifacts, build outputs | 3 months ago |
| feat: add Card Tester mock data via bridge dispatch + fix Windows path bugs - Card Tester: inject mock data via bridgeManager.callJavaScriptModule('__ascfCallbacks', 'onCardEvent') - FlexView.params carries __ascfInstanceId__ for instance routing - Mock data dispatched in onViewReady with 50ms delay for JS init - Generation guard prevents stale dispatch on rapid card switching - Fix hvigor Windows path bug: copy HAR to ascf-agent/libs/ (relative path) - build-engine.sh auto-copies HAR after build - ascf-agent entry & agent-runtime now reference libs/flexui_engine.har - Fix hdc install path bug on Windows (use relative path) - as_apis uses local framework/ohos source for flexui-engine build Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| docs: add JS-Native bridge call patterns comprehensive guide Covers all 6 JS-to-Native call scenarios with complete call chains: - Fire-and-forget (callId=-1, isCallback=false) - Sync return value (same NAPI stack resolve) - Promise-based async (deferred resolve) - Event callback (no Promise wrapper) - callNativeWithPromise (framework-level Promise) - Manual lifecycle via callNativeWithCallbackId Also documents the two independent channels: - internalBinding (direct C++ sync binding, no Bridge) - flexuiCallNatives (Bridge → FlexUINativeModuleBase) Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| docs: add learning notes and summary docs - docs/learn/: FlexUI engine, ASCF bridge, rendering flow, component analysis - docs/summary/: rendering architecture and ArkUI NDK APIs summary Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| docs: add learning notes and summary docs - docs/learn/: FlexUI engine, ASCF bridge, rendering flow, component analysis - docs/summary/: rendering architecture and ArkUI NDK APIs summary Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| chore: update repo URL to gitcode.com/openwebcore/flexui, add release archive & crash analysis guide - Update all repository/homepage URLs from atomicservice/github to gitcode.com/openwebcore/flexui - Add scripts/archive-release.sh to archive unstripped .so, mapping, HAR for crash symbolization - Add --archive flag to build-engine.sh for release builds - Add docs/learn/release-crash-analysis.md with full crash analysis workflow - Update publish-flexui-engine skill with archive phase (3.5) Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |
| docs: add learning notes and summary docs - docs/learn/: FlexUI engine, ASCF bridge, rendering flow, component analysis - docs/summary/: rendering architecture and ArkUI NDK APIs summary Co-Authored-By: Claude <noreply@anthropic.com> | 3 months ago |