可用于快速搭建基于 ArkTS 1.2 的静态 ArkUI 界面应用。项目提供 Koala ArkTS 框架,面向 ArkTS UI 应用开发,支持静态 ArkTS 1.2,适合作为 ArkUI 应用、组件或演示页面的基础模板。【此简介由AI生成】
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
a theming cleanup: drop .colors, straighen out card background roles | 5 天前 | |
Build with TypeScript 6.0.3 + ts-patch 4.0.1 (tspc) instead of @koalaui/ets-tsc ## Что это Замена патченного @koalaui/ets-tsc 4.9.5 на **typescript 6.0.3 + ts-patch 4.0.1**: всё, что компилировалось через ets-tsc, теперь собирается tspc — live-компилятором ts-patch, который патчит TypeScript в памяти и применяет plugins-трансформы из tsconfig (koala memo-rewrite). Та же схема, что в koala_projects_2 (коммиты 20e2ea51c, 63212f6e3). ## Декларации компилятора - typescript@6.0.3 + ts-patch@4.0.1 — devDependencies **в корне** arkui3 и в корне koala-haus (отдельный npm-проект), с overrides на оба — все пакеты получают один и тот же компилятор, peer auto-install не может протянуть другой. - Пер-пакетные декларации typescript убраны, **кроме runtime-потребителей**: - haus2/loader: optional peers ts-patch >=4.0.0, typescript >=6.0.0 (compile worker) - haus2/widgets: peer typescript >=4.9.5 (TSC widget) - haus: dependencies ts-patch + typescript (демон спавнит компилятор) - generator, resource-plugin (standalone-установки): запинен 6.0.3 — иначе npm ставит произвольный peer typescript (наблюдали 7.0.2 и сломанную сборку) ## Замены ets-tsc → tspc / ts-patch/compiler | Потребитель | Было | Стало | |---|---|---| | haus, haus2/* compile-скрипты | ets-tsc -p … | tspc -p … | | kh2 compile worker (compile-worker.ts) | require("@koalaui/ets-tsc") | require("ts-patch/compiler") | | haus daemon (compile-build-scripts.mjs) | require("@koalaui/ets-tsc") | require("ts-patch/compiler") + абсолютный резолв трансформа | | demo (rollup) | typescript({ typescript: etsTsc }) | typescript({ typescript: require("ts-patch/compiler") }) | | smarty build-ops (19 tsconfig) | node …/ets-tsc/bin/ets-tsc -p | tspc -p | Тулчейн @koalaui/*@1.5.0-dev.78036-10137 уже готов к TS6: compiler-plugin биндится к инстансу компилятора через ts-patch extras, harness гоняет ts-node на ts-patch/compiler. ## Налог TypeScript 6 - ignoreDeprecations: "6.0" везде, где явный moduleResolution: "node" (~45 tsconfig, включая 24 smarty build-ops, и обе in-memory конфигурации) - явный types: ["node"] — TS6 больше не подхватывает @types/* автоматически - явный rootDir — неявный общий каталог источников теперь ошибка TS5011 (исправлены generator и одна фикстура widgets-теста) ## Попутно - **Удалён мёртвый @idlizer/dtsgen** из graphics: вход dts/ удалён ещё в !725, закоммиченный idl/ — источник правды для генератора, dts2idl ничего не вызывает, а published-пакет не грузится (в тарболле нет модулей). Скрипт начинался с rimraf ./idl — случайный запуск снёс бы закоммиченные 129 .idl. Заодно из дерева ушёл последний жёсткий typescript@4.9.5. - Доки обновлены (CLAUDE.md, loader.md, README haus2, second-brain). ## Локальная верификация - haus2 ×4, haus, demo — компиляция + harness: engine **378 passed**, loader **82 passed**, generation/widgets — те же наборы падений, что до миграции (сверено через baseline на stash) - все 12 daemon-интеграционных скриптов koala-haus — pass - smarty: tsc, plugins, 19 build-ops, koala-интеграции (2×10 passed), корневой kh2 (70 скриптов) - grasp/cli, grasp/server, sdk/cli, ohos-plugin, generator, resource-plugin, host-previewer, arkts build — собираются - ets-tsc в репозитории не осталось нигде | 2 天前 | |
a theming cleanup: drop .colors, straighen out card background roles | 5 天前 | |
Build runnable bundles with arkts bundle; bump toolchain; remove pack.mjs ## Summary - **Toolchain bump** to 1.5.0-dev.78036-10093 (npm run bump:toolchain). The new @koalaui/arkts adds arkts bundle. - **Bundles come from arkts bundle.** Several tools assembled a runnable bundle out of undocumented .arkts_tool/ internals: arkts_build_<mode>/run/<id>/, per-package *_common.abc files, a stub PANDA_SDK_PATH to capture ark's argv, arkts run -v parsing, or whole .arkts_tool/ copies so that arkts run --no-build works in a deployment. They now use the documented arkts bundle output: run.sh + one linked bin/<app>.abc + lib/*.so. - **a2ui-server:** build-run-bundle.sh wraps arkts bundle --tag headless --arch …. The Rust and Node servers launch the bundle's run.sh. Docker staging, SFX and CI use the bundle. - **aesthetics:** the cascade runs EST_EVAL_BUNDLE / EST_CONVERGENCE_BUNDLE (dev mode keeps arkts run). pack-sfx.sh and Docker staging ship two debug bundles plus @panda/sdk, and no longer ship node, the arkts CLI or .arkts_tool copies. pack-sfx.sh also works on a fresh checkout now: it creates dist/, copies @panda/sdk dereferenced (the facade is relative symlinks), and ships only the model sets the server reads (SFX ~514 MB instead of ~897 MB). - **abc-opt bench.sh:** builds one bundle per sample, optimizes a copy, runs AOT through ARK_OPTS. - **deal-ui wire-host.sh:** the guest boots the bundle of the guest target. - **assembler tests:** read the canonical linked artifact, a path documented in arkts help bundle. - **Removed:** scripts/pack.mjs (obsolete), arkui3 pack, the pack:chat* / pack:demo* scripts, and the SDK's copy of the packer and the SFX launcher. Docs now point to arkts bundle. ## Behaviour changes to review - The a2ui-server renderer bundle is **release** by default (stripped + abc-opt); it was debug before. It starts and loads its modules locally. - arkts bundle puts every native module declared in the workspace into lib/. The renderer bundle grows from 4 .so (~28 MB) to 15 (67 MB). - The aesthetics bundles are built --debug: release stripping breaks eval (NullPointerError in waitForCompletion). This looks like an arkts stripping bug. - bench.sh now optimizes the whole linked closure, so the measured numbers changed. - The wire-host.sh guest now boots its whole target closure instead of a hand-listed classpath. ## Verification (local) - a2ui-server cargo: 8/8. aesthetics cargo: 20/20. SDK CLI tsc passes. assembler: 97/97. libc: 43/43. chat builds. - The renderer starts from the bundle that build-run-bundle.sh produces. - The aesthetics eval and convergence bundles run end to end. - bench.sh and the wire-host.sh player path run. - The x86 aesthetics SFX was built and run in a clean environment (env -i): /healthz, /v1/score/image (L2 5/5 vendors) and /v1/aesthetics/convergence work. - Not run locally: the Docker image build, arm64 bundles. ## CI The last run (on the pre-merge base) failed only on causes outside this PR: - the npm mirror did not yet serve rollup@4.64.6 (published that morning), which broke every job that installs the resource-plugin or koala-haus; - test:arkui3-sdk:solveme:ohos fails since 223bf5694 moved the SDK's ohos-plugin to plugins/ohos-plugin, while solveme ships an older platforms/ohos/arkts.js. 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 15 天前 | |
datamine: columnar data analysis, CSV/JSON/XLSX I/O, and a spreadsheet engine ## What this adds ** @arktsx/datamine** — a columnar data-analysis package in pure ArkTS: - **Tables and I/O.** Table/Column with numeric, text, boolean and time columns. CSV (RFC 4180), TSV, JSON array-of-objects / JSON Lines, and XLSX read/write, including row-level streaming (streamXlsxRows, streamCsvToXlsx, streamXlsxToCsv) so memory stays proportional to the row, not the file. - **Statistics.** Descriptive moments, quantiles, correlations, cross-tabs, t-test, chi-square, linear regression, histograms, z-score/IQR outliers. - **Learning and preprocessing.** k-NN, k-means, logistic regression, naive Bayes, PCA, decision trees, evaluation metrics; scaling, imputation, label and one-hot encoding, binning; association rules; TF-IDF. - **Sketches and series.** Bloom, count-min, HyperLogLog, reservoir sampling, quantile sketch; rolling windows, resampling, EMA, gap filling. - **Spreadsheet engine (lib/sheet).** Parser, Worksheet/Workbook, FormulaEvaluator with cycle detection, and value formatting. Split into formula / worksheet / evaluator / workbook, held acyclic by two interfaces (SheetOwner, SheetLookup). - **Demos.** An R-style workspace (demo/demo.ets + studio / inspector / theme) with CSV/XLSX import-export through the framework FilePicker, and a spreadsheet app (demo/sheet.ets + grid/dialogs/samples/session helpers). **Supporting changes** - @arktsx/compress: ZIP64 (EOCD + extra fields + streamed entries with data descriptors), ZipEntryStream, and a chunked crc32Update binding. - @arktsx/io: 64-bit DirectBuffer lengths (chunked at the 2 GiB boundary) and a LocalVfs. - @arktsx/libc: memorySet. - @arktsx/ui: a reusable FilePicker component, extracted from the preso player (the player's private browser is deleted). - @arktsx/xml: exports escapeText / escapeAttributeValue, so the XLSX writer reuses them instead of carrying a copy. - SDK allowlist, root package wiring, and second-brain notes. ## Correctness notes - XLSX cell references are validated and capped at Excel's 16384 columns before they reach an index or an allocation; the ZIP *stream* reader bounds the declared compressed size before allocating natively. - writeXlsxFile / streamCsvToXlsx close their writer in finally, and the native CRC binding rejects a negative length. - Demos publish fresh state identities and key lists on content, not on mutable array identity. ## Testing - arktsx/datamine — 77 tests (tables, CSV/JSON/XLSX round-trips, streaming pipelines, statistics, ML, sketches, series, formula evaluation). - arktsx/io — 148 tests; arktsx/compress — 24; arktsx/xml — 35. - arkts build --target demo succeeds for the datamine demos; a headless run of the workspace demo starts and renders without errors. 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 2 分钟前 | |
datamine: columnar data analysis, CSV/JSON/XLSX I/O, and a spreadsheet engine ## What this adds ** @arktsx/datamine** — a columnar data-analysis package in pure ArkTS: - **Tables and I/O.** Table/Column with numeric, text, boolean and time columns. CSV (RFC 4180), TSV, JSON array-of-objects / JSON Lines, and XLSX read/write, including row-level streaming (streamXlsxRows, streamCsvToXlsx, streamXlsxToCsv) so memory stays proportional to the row, not the file. - **Statistics.** Descriptive moments, quantiles, correlations, cross-tabs, t-test, chi-square, linear regression, histograms, z-score/IQR outliers. - **Learning and preprocessing.** k-NN, k-means, logistic regression, naive Bayes, PCA, decision trees, evaluation metrics; scaling, imputation, label and one-hot encoding, binning; association rules; TF-IDF. - **Sketches and series.** Bloom, count-min, HyperLogLog, reservoir sampling, quantile sketch; rolling windows, resampling, EMA, gap filling. - **Spreadsheet engine (lib/sheet).** Parser, Worksheet/Workbook, FormulaEvaluator with cycle detection, and value formatting. Split into formula / worksheet / evaluator / workbook, held acyclic by two interfaces (SheetOwner, SheetLookup). - **Demos.** An R-style workspace (demo/demo.ets + studio / inspector / theme) with CSV/XLSX import-export through the framework FilePicker, and a spreadsheet app (demo/sheet.ets + grid/dialogs/samples/session helpers). **Supporting changes** - @arktsx/compress: ZIP64 (EOCD + extra fields + streamed entries with data descriptors), ZipEntryStream, and a chunked crc32Update binding. - @arktsx/io: 64-bit DirectBuffer lengths (chunked at the 2 GiB boundary) and a LocalVfs. - @arktsx/libc: memorySet. - @arktsx/ui: a reusable FilePicker component, extracted from the preso player (the player's private browser is deleted). - @arktsx/xml: exports escapeText / escapeAttributeValue, so the XLSX writer reuses them instead of carrying a copy. - SDK allowlist, root package wiring, and second-brain notes. ## Correctness notes - XLSX cell references are validated and capped at Excel's 16384 columns before they reach an index or an allocation; the ZIP *stream* reader bounds the declared compressed size before allocating natively. - writeXlsxFile / streamCsvToXlsx close their writer in finally, and the native CRC binding rejects a negative length. - Demos publish fresh state identities and key lists on content, not on mutable array identity. ## Testing - arktsx/datamine — 77 tests (tables, CSV/JSON/XLSX round-trips, streaming pipelines, statistics, ML, sketches, series, formula evaluation). - arktsx/io — 148 tests; arktsx/compress — 24; arktsx/xml — 35. - arkts build --target demo succeeds for the datamine demos; a headless run of the workspace demo starts and renders without errors. 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 2 分钟前 | |
more tests through kh2 on CI Moves the host tests of CI onto kh2: one test:kh2 job (npx kh2 -j 6 test smoke check) replaces the per-package test jobs, and the OHOS/Android natives build through kh2 too. The plan and its four stages are in docs/second-brain/40_Development_Workflow/CI_kh2_Migration.md. ## Stages 1. **Package suites through kh2 only.** ArktsxPackage gains test.launcher (http-client's WebSocket server through with-server.mjs) and test.checks (abc-opt test:node, deal-ui protocol tables, assembler check:tables). The 43 duplicate test:<pkg> jobs are gone. 2. **Smokes, checks and bundles.** smoke-<name> (headless app runs), check-<name> (node tools, lints, the vault, the SDK CLI tests), bundle-<name> (linux bundles), all requested on demand, so a plain kh2 <pkg> builds none of them. 3. **Only the downloads are cached between pipelines.** test:kh2 builds the checkout from scratch and caches the npm cache and the apm package cache (.arkts_cache/). The stage first cached the kh2 state (.kh/ and the trees its records describe); that was dropped, see below. 4. **OHOS and Android natives.** compile:native:ohos-arm64 / compile:native:android-arm64 (the slices each hook/build.yml promises) and compile:ohos (arkts build --platform ohos) replace the npm --workspaces scripts and the four canary jobs. Each stage has a review-fix commit after it. ## On top of the stages - **Input lists named by role.** *Inputs are keyed inputs, *Barrier order-only ones. ArktsxPackage's arktsDeps becomes buildInputs; the test options split into inputs (this package's tests) and globalBarrier (what every launch waits for). PackageTest(…, buildInputs, globalTestBarrier, selfTestInputs, …); TestBuilds becomes GlobalTestBarrier. - **A timeout on every package test launch.** 10 minutes by default, test.timeoutMs per package. haus2 Exec/runProcess gain timeoutMs: past it the process group is terminated and the rule fails with CommandTimedOut. The hang it guards against is a race in the runtime's MarkableQueue.clear(), fixed in koala_projects!26. - **The web platform suites as checks.** Master added node --test platforms/web/ to the npm test:all of seven packages. WebPlatformCheck() runs them under kh2: in test-<name> for curl, device, http-client, interop and webview; as check-camera / check-haptics for the packages without arkts suites, replacing their CI jobs. - **CI: no kh2 state cache, -j 6.** The first CI runs of this PR showed why a cached kh2 state is fragile: the meson setups' get_prebuilt.mjs writes arktsx/*/subprojects/*/prebuilt/, which the cached tree list missed, so the restored setups stayed up to date without their prebuilts and curl, cv and graphics compiled without their headers. Such a state fails every later run until the key changes, for every branch. Only the downloads are cached now. The pod has a 4-CPU quota: at -j 10, the first ui-measure cases ran past their 90 s timeout next to the suites, so the job runs -j 6. ## Rebased onto master 3cdf4f99d - haus2 rule descriptions are now DescribeRule content, not a description option; every rule this branch adds is converted. - Master's test.tags (usb's tagged hooks) is merged with launcher, timeoutMs and the renamed input lists. ## Verification Locally, npx kh2 -j 10 test smoke check on the rebased branch: 795/795 rules pass, exit 0. haus2 widgets tests 144/144. CI, the first cold run (-j 10): the kh2 part took about 9 minutes, every rule but ui-measure passed (see above). 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 6 天前 | |
scene: reactive persona DSL, declarative scene tree, model animation Scene work on top of #248 (liquid-metal persona, choreography DSL, HDR studio IBL). ## Declarative scene tree - sceneComponents.ets — the 3D counterpart of the UI widget call graph: Environment, Camera, SceneNode, SceneLight, Dance are @memo builders; SceneBuild reconciles the declaration against the live scene graph by id (create on first sight, update in place, dispose when no longer declared). Native lifetime is owned by the SceneBuild holder, so a re-render writes props and never rebuilds the rig. - robotScene.ets / robotStage.ets — the persona's scene and stage, with the stage authored as a koala.scene.v1 JSON document (ROBOT_SCENE_JSON) carrying the studio wall, light rig, environment and choreography. - sceneDsl.ets — the engine-neutral koala.scene.v1 schema (SceneSpec, NodeSpec, LightSpec, CameraSpec, EnvironmentSpec, ModelAnimationSpec). ## Reactive persona DSL - rig.ets — VRM 1.0 humanoid bone vocabulary, rest rigs, Euler pose springs, FK math and analytic two-bone IK. - personaDsl.ets — Skeleton { Bone { Part } }, LookAt, TwoBoneIK; structural changes go through the memo tree, continuous animation runs in a frame driver that writes native transforms directly. - liquidMetalScene.ets + demo entry — the liquid persona rewritten in the DSL. ## Native model API (Filament / gltfio) - Scene.idl / Scene.cc / filament-backend.*: animation clips (modelAnimationCount/Name/Duration, applyModelAnimation, updateModelBoneMatrices) and model-node access (modelEntityCount/At/Name, findModelEntity, modelEntityParent, modelEntityTransform, setModelEntityPosition/Rotation/Scale) with the gltfio::Animator owned by the loaded model. ## Fixes - Layout stability: the liquid-metal demo's title/hint are now an overlay inside the scene ZStack instead of Column siblings above it. Showing/hiding them used to shrink the scene view by 67 px (canvas 860x728 → 860x661), visibly rescaling the persona. Verified with grasp across reveal/hide cycles: canvas 860x728@16 in both states. ## Tests - test/dsl.test.ets, test/persona-dsl.test.ets — scene DSL, rig chain, IK and pose-spring coverage. 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 2 天前 | |
kh2: make npm run setup build on Windows This PR makes npm run setup work on Windows. ## Problem Four problems were stacked on each other. Windows starts npm, arkts and arkui3 through small batch files, and kh2 ran them like normal programs, so nothing started; two paths were wrong as well. Next, GCC wrote dependency files with Windows line endings, and kh2 cut the line short, so a compile that worked was marked as failed. After that the build looped forever: a rule that was declared again looked "not built yet" for a moment, and the native build threw away and rebuilt itself on that flicker every time. ## Solution - Start batch files through cmd.exe, kill the whole process tree on cancel, use <name>.cmd on Windows, and read apm's paths correctly. - Accept a backslash followed by a Windows line ending in dependency files, with a test for it. - Wait for the last successful build record instead of the short-lived "not built yet" state. - Do not fail a good compile over a dependency file that no longer exists, and store alias names like compile:sdk:cli under a name Windows accepts. ## Verification - Full build on Windows: built [836/836], exit code 0, no failures. - video-codec-gav1: 304/304; graphics: exit 0. - haus2 tests: 371 pass / 12 fail on the engine, 94 pass / 59 fail on the widgets; the failures are the same Windows-only tests that fail on origin/master. | 2 天前 | |
haus2: tree log paths and cycle notification; keep a pool while any declarer holds it This PR carries two haus2 engine changes the miniapps generation pipeline runs on: the build tree says where each rule's log is and when a cycle ends, and a pool stays registered while any of its declarers is attached. ## Summary **Tree logging and notification** ( improve tree logging and notification system) - BuildTreeRule.log gives each rule's log path relative to the root, so an embedder opens a step's log without re-deriving ruleLogPath. A barrier or console-pool job has none. - BuildDaemonOptions.onCycle is called after every cycle, so an embedder can take the tree while a build runs instead of polling. - When a rule's build throws, the error's message is appended to the rule's log, so a failed step's log says why without every widget logging its own failure. FailedBuild no longer writes the reason itself. - EasyBuildStep may return void (widgets). **Pools counted by their registrations** (haus2: keep a pool while any of its declarers is attached) Several Pool widgets may declare one name, and every app script of a daemon declares the same model pool. The runner kept one entry per name, and unregisterPool dropped it when any declarer detached. The remaining PoolNodes are memoized and never register again, so their jobs were rejected as an unknown pool. Nothing reported it: a rejected control writes nothing to the rule's log. - PooledBuildRunner.registerPool returns a Cancelable, and unregisterPool is removed. - The runner keeps every live registration of a name. The latest one is active and sets the depth. - Canceling a spare registration forgets it. Canceling the active one also applies the latest spare's depth. Canceling the last one drops the pool and releases its queue; the console pool returns to depth 1 instead. - The Pool widget only registers and cancels. On a depth change it registers the new depth before canceling the old one, so the pool always has a declarer. ## Verification - Engine suite: 383/383 (npm run compile && npm run compile:test && npx harness, Node 20). - New tests in pools.test.ts: - the pool stays until the last cancel; - canceling the active registration hands over the spare's depth; - canceling a spare keeps the active depth; - a second cancel is a no-op; - the widget registers and cancels once per node. - Both runner rules were mutation-checked: removing the count, or the depth hand-over, turns those tests red. A plain if (false) is not a valid mutation here, because the compiler rejects unreachable code and keeps the previous lib-test. - Downstream, in the miniapps pipeline (packed as 1.1.0-local.1), two tests fail without this change: - a version restored into a daemon that already holds the app now reaches the model; before, it asked 0 times against 2 on a fresh daemon and still reported ready; - removing one app leaves the model pool to the apps still installed. Its gate passes, and its OHOS HAP builds with the bundled engine. 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 1 天前 | |
Build with TypeScript 6.0.3 + ts-patch 4.0.1 (tspc) instead of @koalaui/ets-tsc ## Что это Замена патченного @koalaui/ets-tsc 4.9.5 на **typescript 6.0.3 + ts-patch 4.0.1**: всё, что компилировалось через ets-tsc, теперь собирается tspc — live-компилятором ts-patch, который патчит TypeScript в памяти и применяет plugins-трансформы из tsconfig (koala memo-rewrite). Та же схема, что в koala_projects_2 (коммиты 20e2ea51c, 63212f6e3). ## Декларации компилятора - typescript@6.0.3 + ts-patch@4.0.1 — devDependencies **в корне** arkui3 и в корне koala-haus (отдельный npm-проект), с overrides на оба — все пакеты получают один и тот же компилятор, peer auto-install не может протянуть другой. - Пер-пакетные декларации typescript убраны, **кроме runtime-потребителей**: - haus2/loader: optional peers ts-patch >=4.0.0, typescript >=6.0.0 (compile worker) - haus2/widgets: peer typescript >=4.9.5 (TSC widget) - haus: dependencies ts-patch + typescript (демон спавнит компилятор) - generator, resource-plugin (standalone-установки): запинен 6.0.3 — иначе npm ставит произвольный peer typescript (наблюдали 7.0.2 и сломанную сборку) ## Замены ets-tsc → tspc / ts-patch/compiler | Потребитель | Было | Стало | |---|---|---| | haus, haus2/* compile-скрипты | ets-tsc -p … | tspc -p … | | kh2 compile worker (compile-worker.ts) | require("@koalaui/ets-tsc") | require("ts-patch/compiler") | | haus daemon (compile-build-scripts.mjs) | require("@koalaui/ets-tsc") | require("ts-patch/compiler") + абсолютный резолв трансформа | | demo (rollup) | typescript({ typescript: etsTsc }) | typescript({ typescript: require("ts-patch/compiler") }) | | smarty build-ops (19 tsconfig) | node …/ets-tsc/bin/ets-tsc -p | tspc -p | Тулчейн @koalaui/*@1.5.0-dev.78036-10137 уже готов к TS6: compiler-plugin биндится к инстансу компилятора через ts-patch extras, harness гоняет ts-node на ts-patch/compiler. ## Налог TypeScript 6 - ignoreDeprecations: "6.0" везде, где явный moduleResolution: "node" (~45 tsconfig, включая 24 smarty build-ops, и обе in-memory конфигурации) - явный types: ["node"] — TS6 больше не подхватывает @types/* автоматически - явный rootDir — неявный общий каталог источников теперь ошибка TS5011 (исправлены generator и одна фикстура widgets-теста) ## Попутно - **Удалён мёртвый @idlizer/dtsgen** из graphics: вход dts/ удалён ещё в !725, закоммиченный idl/ — источник правды для генератора, dts2idl ничего не вызывает, а published-пакет не грузится (в тарболле нет модулей). Скрипт начинался с rimraf ./idl — случайный запуск снёс бы закоммиченные 129 .idl. Заодно из дерева ушёл последний жёсткий typescript@4.9.5. - Доки обновлены (CLAUDE.md, loader.md, README haus2, second-brain). ## Локальная верификация - haus2 ×4, haus, demo — компиляция + harness: engine **378 passed**, loader **82 passed**, generation/widgets — те же наборы падений, что до миграции (сверено через baseline на stash) - все 12 daemon-интеграционных скриптов koala-haus — pass - smarty: tsc, plugins, 19 build-ops, koala-интеграции (2×10 passed), корневой kh2 (70 скриптов) - grasp/cli, grasp/server, sdk/cli, ohos-plugin, generator, resource-plugin, host-previewer, arkts build — собираются - ets-tsc в репозитории не осталось нигде | 2 天前 | |
apm: workspace dependencies + workspaceOverrides, toolchain 10126 Moves arkui3 to the apm workspace dependency form and bumps the koala toolchain to 1.5.0-dev.78036-10126, the first one whose apm supports it. ## What changes - **Every member arkts.yml**: arktsx.*: "*" and "@koalaui/*": <version> → workspace. A member name links to the member; any other name resolves from the registry with the version from the root's workspaceOverrides. arktsx.ui.test's path: ../headless (a member of the same workspace) → workspace. - **Root arkts.yml**: workspaceOverrides pins @koalaui/{common,compat,harness,runtime}. This is now the one place these are pinned in arkts.yml files. - **scripts/bump-koala-toolchain.mjs** bumps workspaceOverrides and leaves workspace values alone (it would otherwise have overwritten them with a version). - **arktsx/sdk/sdk.mjs** publish form: workspace devDependencies get their override version (outside the workspace nothing resolves them); it fails if an override is missing. - **arkui3 deps** recognises workspace. - **Docs**: Build_System.md gets a "Workspace dependencies" section; examples updated. - **Toolchain bump** to 10126 (bump-koala-toolchain.mjs). ## Testing - With the unpublished apm/arkts from koala_projects_2 overlaid: apm install gives the same package_config.json / package_graph.json as before (70 packages); the old 10121 apm rejects the new manifests; npx kh2 -j 6 test green (907/907). - With published 10126: apm install resolves @koalaui/* to 10126 via the overrides; arkui3 test in http-client builds and passes (51 tests). The full local kh2 test on 10126 is still pending, because the local npm cache does not list 10126 yet. 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 6 天前 | |
abc-opt: Density and dead lambdas removal benchmarks | 4 小时前 | |
!1488 a2ui-server: renderer frame heartbeat, SFX sample staging, blank-frame flicker fix * fix(a2ui-server): CI headless green — warmup for cold-start wedge, sma… * test(a2ui-server): rebase to master d4b25f61 — contact renders first * test(a2ui-server): apply phase skips scenes with no mappable fix * fix(a2ui-server): finish determinism pass — repo fonts, capture/suite … * fix(a2ui-server): deterministic raster image load + version-controlled CJK fonts * fix(a2ui-server): deterministic headless suite — per-scene renderer re… * fix(a2ui-server): guard capture/assessment side-channels against torn-down trees * test(a2ui-server): surface renderer crash stack in CI * test(a2ui-server): leak-phase retry ladder with renderer restart * fix(a2ui/render): size the background wrapper of extended Text — divid… * test(a2ui-server): two-lifetime CI suite; bleed/stale-frame mitigations * test(a2ui-server): widen golden band to ±35%, retry null-guard, targetId suffix * test(a2ui-server): per-scene stale-frame retry in render and leak phases * test(a2ui-server): suite loads scenes via server route (asset rewrite applies) * fix(a2ui-server): vendor external sample assets; restore original samples * ci(a2ui-server): proper retry block for ui_regression flake * test(a2ui-server): hard reset before apply phase — suite stable across runs * fix(samples): world_cup vertical dividers — same 1px Text overpaint, width axis * ci(a2ui-server): retry ui_regression once on renderer wedge * fix(a2ui-server): per-session blank-floor baseline + watchdog debug leftovers * fix(a2ui-server): review hardening — pump release placement, watchdog … * feat(a2ui-server): renderer hang watchdog + robust capture pump release * Revert "fix(framework): markScrollDirty walks ancestor chain — scroll … * fix(samples): world_cup 1px divider Texts overpainted content below team 1 * fix(a2ui-server): serialize frame captures; heartbeat survives client storms * fix(a2ui-server): drop transient blank frames racing component updates * feat(sfx): stage sample scenes, honor host env overrides, ship game samples * feat(a2ui-server): renderer frame heartbeat for silent animation windows | 1 个月前 | |
Add arkui3-toolchain to prebuilts Signed-off-by: Korobeinikov Evgeny <korobeinikov.evgeny@huawei.com> | 2 小时前 | |
theme coverage: measure and fix how far the theme reaches the screen ## 1. Why the branch exists The board (and the other screens) are painted from a **theme** — a JSON document describing colours, type, spacing and corner shapes. The branch answers one question: > **Does a theme change actually reach what a person sees on screen?** It does not always, and not everywhere: a text freezes on the theme it appeared with, a value is written as a constant, a parsed key is never applied. The branch first learned to **measure** this, then to fix what it found. The practical goal: work out whether a theme author (a human or an LLM generator) can steer the UI's aesthetics by changing the theme — or whether the implementation of the components is the limit. ## 2. Done and left **Done:** - a static checker ( check:theme) — literals and frozen text; - contract tests: the table "what each component reads" and its checks (billboard, preso), and "every requested style is registered" (a2ui, framework); - the defects it found are fixed: spacing reaches the board, 10+ components stopped freezing, SlideFigure reads a family, the vision judge gets every theme accessor again; - **the matrix: 123 leaves x 80 components** — the main result; - documentation: README, the recipe guide, this file. **Left:** - 36 components **read** the theme and show none of it (freezes and code paths the samples do not take) — the next work list; - 10 "dead channels" — roles that are read but visible nowhere (a wire or projection question, not a component one); - the atlas works for the board only; the phone catalogue (a2ui/framework) needs its own mode. ## 3. Glossary **Theme** — a JSON document with properties like primaryColor, palette, typography. It arrives at a surface and decides how everything looks. **Key** — a top-level property of the document. Ten are applied: primaryColor, colorModel, brightness, palette, paletteTokens, typography, spacing, borders, shadows, transitions (plus three metadata keys: name, description, version). Example: typography. **Leaf** — the smallest thing a key can set. There are 123: palette.base.primary, typography.fontSize.h1, typography.fontWeight.h2, spacing.gap, borders.radius.lg, paletteTokens.cornerRadius, and so on. Example: typography.fontSize.caption is the caption rung. **Role** — a leaf inside palette (60 of them): base.primary, foreground.level1, container.tertiary. Beware the name collision: themeRoleTable.ets is called the "role table" but it lists **accessors**, not palette roles — a historical name. **Accessor** — a SlideTheme getter a component reads in code: theme.accent, theme.captionSize, theme.gap, theme.radius. Each accessor stands for a leaf: accent → palette.base.primary, captionSize → typography.fontSize.caption, gap → spacing.gap, radius → borders.radius.lg. The mapping is derived from preso/lib/theme.ets. **Cell** — the intersection of one leaf and one component: "what this leaf does to this component". 123 x 80 = 9 840 cells. **Freeze** — a text drawn inside a container's { … } block while the theme is read *above* the block. The block is its own memo scope, it never re-runs, and the text keeps the colours and sizes it was first mounted with. **Projection** — turning the general theme into SlideTheme (SlideTheme.fromTheme). What the projection does not expose (font weights, for instance) reaches no component, however many are fixed. **Wire** — the document's path from parsing to application (patchFromThemeJSON, mergeTheme). A value the wire drops reaches nothing. **Applier** — the code that applies a document (parser + merge + installing the theme on a surface). ### The five cell states | Symbol | Meaning | |---|---| | **●** | the component reads the leaf and the change **is visible** | | **○** | the component reads the leaf and **nothing changes** in this build (a freeze, a literal override, a projection that does not carry it, or a code path the sample does not take) | | **—** | the component **does not read** this leaf | | **∅** | the component **drew nothing** with the sample — not measured | | **?** | the component reads an accessor the map does not know | ## 4. What is new, what changed **New files (the branch):** | File | What it is | |---|---| | scripts/theme-coverage.mjs | the static checker (literals, freezes, blind files, key coverage) | | scripts/theme-scan.mjs | the shared source scanner: functions, calls, the call graph | | scripts/theme-role-table.mjs + lib/themeRoleTable.ets | the generator and the result of "component → what it reads" | | scripts/theme-probes.mjs, scripts/theme-statements.mjs | the loud documents: per key and per leaf | | scripts/theme-accessor-map.mjs | the "accessor → leaf" map, derived from SlideTheme | | scripts/theme-atlas.mjs | the measuring instrument: component x leaves, A/B pairs | | scripts/theme-matrix-table.mjs | builds THEME_MATRIX.md from an atlas run | | scripts/theme-backlog.mjs | builds THEME_BACKLOG.md (the work list) | | scripts/theme-roles.mjs, theme-matrix.mjs, theme-loop.mjs | page-level and stand measurements | | arktsx/scripts/theme-audit.mjs, preso-theme-table.mjs, theme-style-keys.mjs, theme-check-all.mjs | shared checks for framework, a2ui and preso | | README.md, FIXES.md, THEME_BACKLOG.md, THEME_MATRIX.md, the guide in docs/second-brain | documentation and results | **Changed in existing code:** - arktsx/preso/lib/slides.ets, media.ets, animatedNumber.ets — the theme is read inside the content blocks of Kicker, SlideHeader, CoverSlide, SectionDivider, QuoteSlide, CountUp and SlideFigure; - arktsx/a2ui-billboard/lib/components/* — the same fix in Kicker, StatRow, Quote, LowerThird; themeTree.ets — the accessor resolver gained the 25 getters it was missing; - arktsx/a2ui/lib/themeVocabulary.ets — every key declares moves (the accessors it can move); spacing gained the gutter/gap names; - arktsx/a2ui/lib/a2uiThemeMaker.ets — spacing and padding are applied (they used to be dropped); - arktsx/a2ui/lib/themeSchema.ets — moves is emitted into the vocabulary; - arktsx/framework/lib/theme/partial.ets — PartialThemeSpacing/mergeSpacing carry gutter/gap; - tests: a2ui-billboard/test/theme-role-table.test.ets, preso/test/theme-contract.test.ets, a2ui/test/theme-style-keys.test.ets, and the coverage test in framework. ## 5. Commands All run from the repository root unless stated otherwise. ### npm run check:theme — the static check (seconds, starts nothing) What it does: reads sources and looks for three things — **literals** (a colour or size written as a number/hex), **blind** files (the file draws text and never mentions the theme), and **freezes** (text in a block with the theme read outside). It also checks that every vocabulary key has a probe. Stages: walk the package files → decide which are components (framework: all; a2ui: the names its catalogue declares; preso: the files the board catalogue reaches) → find top-level functions and block nesting → apply the rules → print file:line. How to read it: FAIL is a defect; framework and a2ui report, preso and billboard fail. ### npm run theme:atlas — the component measurement (needs the renderer) What it does: mounts one component on the board, applies an **A/B pair** per leaf the component reads, and counts how many of the component's pixels changed. Stages: take the leaf list → compute the component's leaves from the "accessor → leaf" map → in a fresh session mount the tree, apply the start theme, capture the baseline frame → for each leaf apply document A, capture, apply B, capture → diff A against B inside the component's pixels → print a row. Why A/B: a colour document is a whole scheme; a single document repaints the wall and makes every colour cell look the same. Two documents differing only in one leaf isolate that leaf's contribution. What it produces: out/theme-atlas/<stamp>/atlas.json — per component: the leaves it reads, the delta for each, which are not visible, and file:line. ### npm run theme:matrix-table -- out/theme-atlas/<stamp> — build the matrix Turns atlas.json into THEME_MATRIX.md and theme-matrix.json: rows are leaves, columns are components, cells are the five states, plus summaries per component and per leaf and the list of dead channels. ### node scripts/theme-backlog.mjs <atlas-dir> — the work list Builds THEME_BACKLOG.md: components that read the theme and do not show it; literals; unmeasurable components; dead channels. ### node arktsx/scripts/theme-audit.mjs <framework|a2ui|preso> — the same rules per package Also available as npm run check:theme inside each package. ### Contract tests npm test in a package: - billboard: the role table is current; every accessor it attributes resolves on the theme; every text component reads a family; - preso: the same over its own generated table, with a staleness check; - a2ui/framework: every requested style is registered; the key lists are generated and checked for staleness. ### Stand measurements (for pages) npm run theme:matrix -- --pages g2 is the key × page smoke test; node scripts/theme-roles.mjs --pages g0,g2,s11 is leaf × page. ## 6. The three questions, answered with numbers **How applicable is the theme to a component?** Its row in THEME_MATRIX.md: leaves read is how many leaves it reads, visible how many of those show. Examples: Callout 9 of 9; CoverSlide 5 of 11. **How many components can the theme change?** Of 80 components, **41** show at least one visible change; **36** read the theme and show none; **5** show every leaf they read; 3 drew nothing with the sample data. 133 visible cells of 596 read ones. **Can an LLM steer the aesthetics through the theme?** Yes, but exactly in the ● cells: specific palette roles, the typeface, sizes, spacing, radii. The limits are implementation, not the author: weights, tracking and line height are not exposed by the projection; some roles (fixed.*, inverse.*, scrim.*, state.*) have no reader on the board; 10 channels are read and visible nowhere. Until those are lifted, any model hits the same ceiling. ## 7. Where to continue 1. THEME_BACKLOG.md — the 36 "reads but invisible" components: open file:line, find the text in a content block, move the theme read inside, rebuild, run the atlas on that component (--only '^Name$') — the cell must turn ●. 2. THEME_MATRIX.md, the dead-channel section — a wire or projection question, not components. 3. For a2ui/framework — an atlas mode over the phone catalogue (not built yet). | 1 天前 | |
sodium: use published prebuilts when the toolchain is missing This PR lets the sodium native build install a published prebuilt instead of skipping a target whose toolchain this host lacks. ## Summary All 12 sodium targets are now published under the Nexus sodium-prebuilt tree with .sha256 siblings. build-native.mjs runs the package's scripts/prebuilt.mjs before giving up on a target, so the module lands in the same prebuilts/<target> prefix the meson build fills. The branch also carries the Apple arc4random meson fix used to build the mac and iOS archives. It is merged with current master, including the koala toolchain bump 4b5603da1. ## Why not meson Meson never runs for a missing toolchain: the generated cross file points at compilers that do not exist, so setup fails before any meson code executes. The fallback belongs to the step that decides the target is unavailable, not to meson.build. ## Changes - scripts/prebuilt.mjs installs one target from Nexus, reuses an already installed module, and checks the published checksum. - get_prebuilt.mjs verifies the .sha256 sibling before extracting and now parses --target=value (it stored the key together with the value). - build-native.mjs runs a project's optional scripts/prebuilt.mjs when the target is unavailable and labels the result PASS (published prebuilt). - meson.build gives darwin its own defines: HAVE_SAFE_ARC4RANDOM, no Linux-shaped getrandom or <sys/random.h>. - The sodium README and the third-party README describe the manual and automatic paths. ## Verification - All 12 archives downloaded from Nexus with the .sha256 verified: android arm64/x64, darwin ios/ios-simulator/macos arm64/macos x64, linux arm64/x64, ohos arm32/arm64/x64, windows x64. Each carries the module, notices and LICENSE, and file reports the expected ELF, Mach-O or PE architecture. - A tampered checksum fails before extraction. - Fake project with an unavailable target and a hook: PASS (published prebuilt). Hook missing or failing: SKIP (toolchain unavailable), exit 0. - arktsx/sodium 67 tests on the merged head. - That run used the parent checkout's linux prebuilts for unrelated packages (graphics, scene, sqlite, ...), which this fresh worktree does not build. CI builds them itself. ## Not covered - With a toolchain present, meson.build still compiles the vendored tree. Preferring a prebuilt there would need an explicit option. - CI builds natives through kh2, whose ArktsxNative has its own unavailable-target path. A prebuilt rule there is deferred: kh2 compile:native:android-arm64 without an NDK re-renders the skip report endlessly (96k lines in 90 s, reproduced on unmodified master), so that path needs its own fix first. | 2 天前 | |
docs: blank lines around markdown h1-h3 headings This PR normalizes markdown formatting: blank lines before and after h1-h3 ATX headings, across READMEs, agent instruction files (CLAUDE.md, .claude skills, CLI templates) and docs/second-brain. Mechanical change only — no wording edits; blank-line insertions plus missing trailing newlines (MD047) in 34 files. Code fences are respected: shell comments like # --- SETUP --- inside `` blocks are left alone, and vendored third-party/ docs are excluded. Verification: applied with a fence-aware script; a second pass is a no-op on every file (idempotence); git diff --numstat` shows only additions and 1-line trailing-newline fixes. | 1 个月前 | |
Improvements in preso Improvements in preso | 12 天前 | |
Home automation Home automation | 9 天前 | |
more tests through kh2 on CI Moves the host tests of CI onto kh2: one test:kh2 job (npx kh2 -j 6 test smoke check) replaces the per-package test jobs, and the OHOS/Android natives build through kh2 too. The plan and its four stages are in docs/second-brain/40_Development_Workflow/CI_kh2_Migration.md. ## Stages 1. **Package suites through kh2 only.** ArktsxPackage gains test.launcher (http-client's WebSocket server through with-server.mjs) and test.checks (abc-opt test:node, deal-ui protocol tables, assembler check:tables). The 43 duplicate test:<pkg> jobs are gone. 2. **Smokes, checks and bundles.** smoke-<name> (headless app runs), check-<name> (node tools, lints, the vault, the SDK CLI tests), bundle-<name> (linux bundles), all requested on demand, so a plain kh2 <pkg> builds none of them. 3. **Only the downloads are cached between pipelines.** test:kh2 builds the checkout from scratch and caches the npm cache and the apm package cache (.arkts_cache/). The stage first cached the kh2 state (.kh/ and the trees its records describe); that was dropped, see below. 4. **OHOS and Android natives.** compile:native:ohos-arm64 / compile:native:android-arm64 (the slices each hook/build.yml promises) and compile:ohos (arkts build --platform ohos) replace the npm --workspaces scripts and the four canary jobs. Each stage has a review-fix commit after it. ## On top of the stages - **Input lists named by role.** *Inputs are keyed inputs, *Barrier order-only ones. ArktsxPackage's arktsDeps becomes buildInputs; the test options split into inputs (this package's tests) and globalBarrier (what every launch waits for). PackageTest(…, buildInputs, globalTestBarrier, selfTestInputs, …); TestBuilds becomes GlobalTestBarrier. - **A timeout on every package test launch.** 10 minutes by default, test.timeoutMs per package. haus2 Exec/runProcess gain timeoutMs: past it the process group is terminated and the rule fails with CommandTimedOut. The hang it guards against is a race in the runtime's MarkableQueue.clear(), fixed in koala_projects!26. - **The web platform suites as checks.** Master added node --test platforms/web/ to the npm test:all of seven packages. WebPlatformCheck() runs them under kh2: in test-<name> for curl, device, http-client, interop and webview; as check-camera / check-haptics for the packages without arkts suites, replacing their CI jobs. - **CI: no kh2 state cache, -j 6.** The first CI runs of this PR showed why a cached kh2 state is fragile: the meson setups' get_prebuilt.mjs writes arktsx/*/subprojects/*/prebuilt/, which the cached tree list missed, so the restored setups stayed up to date without their prebuilts and curl, cv and graphics compiled without their headers. Such a state fails every later run until the key changes, for every branch. Only the downloads are cached now. The pod has a 4-CPU quota: at -j 10, the first ui-measure cases ran past their 90 s timeout next to the suites, so the job runs -j 6. ## Rebased onto master 3cdf4f99d - haus2 rule descriptions are now DescribeRule content, not a description option; every rule this branch adds is converted. - Master's test.tags (usb's tagged hooks) is merged with launcher, timeoutMs and the renamed input lists. ## Verification Locally, npx kh2 -j 10 test smoke check on the rebased branch: 795/795 rules pass, exit 0. haus2 widgets tests 144/144. CI, the first cold run (-j 10): the kh2 part took about 9 minutes, every rule but ui-measure passed (see above). 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 6 天前 | |
!146 Updated all packages to smart-arkts + removed external | 8 个月前 | |
Migrate tooling from Gitee to GitCode The repository moved to gitcode.com/rri_opensource/arkui3; the tooling had not. This ports it. **Verified live against api.gitcode.com, not read from docs.** GitCode's API v5 is deliberately Gitee-v5-compatible, so the subcommand set survives — but four things do not, and a find-and-replace would have broken them *silently*: 1. **merged_at is "", not null, on an unmerged PR.** jq reads an empty string as truthy, so the old if .merged_at reported closed-but-unmerged pull requests as **merged**. 2. **The .diff web URL now serves an HTML page.** The diff moves to GET /pulls/<n>/diff, which unlike the old public URL requires the token — and is rate-limited to roughly one download per 10s per PR. 3. **raw.gitcode.com 403s on shell scripts anonymously** (暂不支持预览) while serving Markdown fine, breaking the curl | bash installers. They use the API raw route instead. 4. **CI is keyed by pull request, not branch.** The runner builds pulls/$GITCODE_PR, so the CI scripts take a PR number or resolve a branch to one, and match GITCODE_PR by parsing the variables JSON rather than grepping a non-unique value. ## What changes - scripts/gitee.sh → scripts/gitcode.sh (git mv), reading $GITCODE_ACCESS_TOKEN with ~/gitcode-review.sh as the fallback. An existing ~/gitee-review.sh is deliberately not read. - code-review skill: references/gitee.md → gitcode.md; modes.md, SKILL.md, comment-format.md follow. - nexus-ci, publish-sdk skills and .claude/commands/* updated; the preso-deck skill is untouched (separate workstream). - CI scripts re-keyed; publish-sdk.sh's bridge job name corrected to the real run gitcode pipeline. - Repo-wide docs and metadata (README, CLAUDE.md, second-brain, Cargo/gradle publication URLs), and origin retargeted. ## Notes for the reviewer - **Approving stays outside the review surface.** scripts/gitcode.sh still has no approve subcommand — that separation is unchanged and deliberate. - **A pre-existing failure is now surfaced rather than masked:** the OpenLab /pipelines/<id>/variables endpoint returns **403** for accounts without the required role. The CI scripts had been reporting that as "no pipeline found"; they now say so and point at --pid. - **Two findings from the local self-review are not fixed here** (kept out to keep this diff the reviewed one): the token is expanded unguarded under bash -x in the three CI scripts' gitcode_call, and those three carry a duplicated GitCode client that drops the ~/gitcode-review.sh fallback. Both want a follow-up. | 1 个月前 | |
Doomscroll app tweaks for more stable generation Doomscroll app tweaks for more stable generation | 27 天前 | |
Add arkui3-toolchain to prebuilts Signed-off-by: Korobeinikov Evgeny <korobeinikov.evgeny@huawei.com> | 2 小时前 | |
toolchain: consume standalone @koalaui packages instead of the ui2abc bundle This PR modifies arkui3 to consume the compiler toolchain directly from the internal npm registry instead of the @idlizer/ui2abc bundle. ## Summary The toolchain packages (@koalaui/arkts, libarkts, smart-arkts, memo-plugin-ng, ui-plugins-ng, apm, interop) are already published to koala-npm on the same build line the bundle freezes. We pin them directly at that build and drop the bundle — so what we build with is exactly what the registry serves. ## The problem Today the toolchain arrives hidden inside a nested prebuilt tree: node_modules/@idlizer/ui2abc/dest/node_modules/@koalaui/arkts/dist/arkts.cjs The bundle freezes whatever it was packed with, while the registry serves fresh daily builds — the two drift apart. On top of that, shims hardcode ui2abc/dest/... paths, and the unpacked tree is dead weight in every checkout. ## The solution - Root, arktsx/diagram and arktsx/video-codec-gav1 package.json: replace @idlizer/ui2abc with direct pins of the seven standalone packages — now at 1.5.0-dev.78036-10071. - Two smart-arkts.config.mjs files (graphics, generator demo): the defineConfig import moves from @idlizer/ui2abc/smart-arkts to @koalaui/smart-arkts/frontend (the bundle subpath was a one-line re-export of the same module). - arktsx/sdk/bin/arkts.js: standalone package candidates appended to the resolver, bundle candidates kept for transition. - All arkts.yml / package.json version pins swept to the same build (Bump koala_projects to 10071). Why -10071 and not the bundle's original -10034: standalone @koalaui/arkts tarballs published before build 10071 lack debug/debug-plugin/lib/entry.js, which every debug-mode arkts build requires. Fixed on the toolchain side (koala_projects packaging now ships the build arkts artifacts); -10071 is the first published build containing the plugin — verified by unpacking the registry tarball. ## Verification - npm i resolves every package from koala-npm; apm install; compile:all (47 packages, natives included) — green. - 35 test suites against the standalone toolchain: 33 fully green; graphics 352/354 (two known host-font FontMgr failures, tracked separately); smarty 72/78 (better-sqlite3 native crash under Node 24 in KoalaHaus scenarios — node-side, that chain never invokes the arkts toolchain). - The earlier CI failure on this branch (Cannot find module .../arkts/debug/debug-plugin/lib/entry.js in every debug-mode build job) is resolved by the -10071 pins. ## Follow-up: memo plugin diagnostics The 10071 toolchain ships memo plugin reactivity diagnostics (EP0001) that reject several long-standing patterns in framework packages (ui, qa, aesthetics, video, webview, a2ui — none of which this PR modifies). The checks are considered too strict and are being removed toolchain-side. Until then, hack/memo-plugin-skip-diagnostics.cjs (wired into postinstall) flips the plugin's skipDiagnostics default to true, so the whole diagnostics pass is skipped — verified locally: all six packages compile clean with the patched plugin. | 1 个月前 | |
Point the cross-compile doc at the Apple-SDKs family layout This PR points the cross-compile doc to the Apple-SDKs family layout on Nexus, where the paths it handed out no longer resolve. ## Summary CROSS_COMPILE.md is how a Linux host gets a macOS SDK for osxcross, and after the Nexus reorg none of its three SDK paths works. ## Problem The folder now follows <family>/<version>/<SDK name>.tar.xz: Apple-SDKs/14.0/MacOSX14.0.sdk.tar.xz is gone, Apple-SDKs/15.0/… and Apple-SDKs/26.0/… moved under macosx/, and all three answer 404. ## Solution - the setup command and the SDK table point at Apple-SDKs/macosx/<version>/…; 14.0 is served there again as MacOSX14.0.sdk.tar.xz, with the MacOSX14.0.sdk/ root osxcross derives its target triple from - the layout rule is stated once, so an SDK bump is a new path instead of a hunt - the iOS note matches the folder again: device SDKs sit under iphoneos/<version>/ as .tar.xz, and the simulator family has no real SDK there yet ## Verification Every path the page names answers 206 on a range request: the three macOS SDKs, iphoneos/17.0/iPhoneOS17.0.sdk.tar.xz, and both ios-stub/ archives. The osxcross build.sh recipe itself was not run — it needs an ~/.osxcross on the machine. | 27 天前 | |
!999 !SAFETY: add AI assistant guardrails for arkui3 * !SAFETY: deny Read on .git-credentials * !SAFETY: add AI assistant guardrails for arkui3 | 4 个月前 | |
Improve arkui3-sdk build configuration Improve arkui3-sdk build configuration | 15 天前 | |
Initial commit | 10 个月前 | |
docs: blank lines around markdown h1-h3 headings This PR normalizes markdown formatting: blank lines before and after h1-h3 ATX headings, across READMEs, agent instruction files (CLAUDE.md, .claude skills, CLI templates) and docs/second-brain. Mechanical change only — no wording edits; blank-line insertions plus missing trailing newlines (MD047) in 34 files. Code fences are respected: shell comments like # --- SETUP --- inside `` blocks are left alone, and vendored third-party/ docs are excluded. Verification: applied with a fence-aware script; a second pass is a no-op on every file (idempotence); git diff --numstat` shows only additions and 1-line trailing-newline fixes. | 1 个月前 | |
setup: one registry source, a host preflight, and the libc++ gap ## Problem Standing up arkui3 on a fresh Ubuntu host cost three failed build cycles, each for a reason the repository did not tell you: | Symptom | Cause | |---|---| | ETARGET: No matching version found for @idlizer/core@2.2.2 | npm was never told where the internal scopes live. The list existed only in gitlab/setup.yml, which no developer reads, and it was stale. | | No clang on PATH, then fatal error: 'cassert' file not found | The compiler and its libc++ headers are separate packages, documented nowhere; the failure names no package. | | package config … not found. Run "apm install" first | host:prepare ran arkts tool hooks before anything wrote the package graph. | The internal registry is a public internet service — no office network is required. The Chinese mirror appears only as an optional speed-up. ## What changed - **One registry list** in scripts/registries.mjs, as data only: scope → registry, the package each scope's pinned version comes from, and the optional mirror. CI applies it (gitlab/setup.yml's .npm block is one --apply --ci-default call), developers print the block (npm run registries), and --ci shows the exact lines for diffing. There is no separate manifest guard: a manifest that starts using a new scope fails install:root on the same PR with an ETARGET naming the package. - **npm run preflight:host** — checks the machine, not build state: Node, clang, whether that clang can compile against libc++, fontconfig, and whether the **pinned version** of one package from each internal scope resolves through npm (npm view <pkg>@<version> version, from the repo root, so user/project .npmrc, proxies and auth apply). E404, E401/E403 and the network codes get distinct hints. It needs the network for the scope check. - **libc++ probe in the native build** — a syntax-only compile in arktsx/scripts/cross/executables.mjs, used by platforms/linux.mjs, so the failure names libc++-dev libc++abi-dev instead of 'cassert' file not found. - **host:prepare sequencing** — apm:install runs before compile:native and host:hooks. - **Docs** — Setup Guide (prerequisites, registry, clone settings, kh2-era setup), TOOLCHAIN (the two preflights), CI/CD, Build System, macOS Support, A2UI Server, README, CLAUDE.md. ## Verification - preflight:host passes on macOS: all three pinned versions resolve. With npm_config_userconfig=/dev/null (an unconfigured machine) all three fail with E404 and the registry hint. - The pinned-version probe is deliberate: @idlizer/core has public dist-tags, but 2.2.2 is 404 on npmjs, so a dist-tags probe would pass on exactly the machine where the install fails. - node scripts/registries.mjs --ci reproduces the old eight lines exactly; --print emits the same five scopes. - docs/second-brain/check_vault.py: 0 broken, 0 ghosts, 0 spaced, 0 root. - Branch is rebased onto master (kh2 setup, run bundles, no .packages) and has merged the master commits that landed since (Panda 1.20.0, Windows app bundles); git merge-tree against origin/master is clean. - Not run here: npm install, test:panda, builds — no node_modules in the worktree; CI covers them. ## Review notes This revision applies the review's simplification: registries.mjs drops the manifest analysis and is configuration only; the preflight drops the apm/package-config checks and the separate --network step, and merges the registry checks into one resolution probe. CI keeps delegating gitlab/setup.yml's .npm block to --apply. | 7 天前 | |
docs: blank lines around markdown h1-h3 headings This PR normalizes markdown formatting: blank lines before and after h1-h3 ATX headings, across READMEs, agent instruction files (CLAUDE.md, .claude skills, CLI templates) and docs/second-brain. Mechanical change only — no wording edits; blank-line insertions plus missing trailing newlines (MD047) in 34 files. Code fences are respected: shell comments like # --- SETUP --- inside `` blocks are left alone, and vendored third-party/ docs are excluded. Verification: applied with a fence-aware script; a second pass is a no-op on every file (idempotence); git diff --numstat` shows only additions and 1-line trailing-newline fixes. | 1 个月前 | |
Move arkui3 to panda SDK 1.15.0 This PR moves arkui3 to the published panda SDK **1.15.0** metapackage from the koala registry and retires the dev panda bundle inside @idlizer/ui2abc. ## What changes **Toolchain pin and install** - package.json pins @panda/sdk 1.15.0 — the metapackage: one install pulls the host bag, its postinstall links the layout and the legacy host-tools names. The ohos and android carriers pin at 1.15.0 separately; the koala toolchain stays 1.5.0-dev.78036-10071. - Three overrides keep one release line: @panda/sdk to the release, @panda/sdk-darwin routed to npm:@panda/sdk-mac-arm64@1.15.0 (the name the fossil koala packages request), and @koalaui/libarkts aliased to npm:@panda/sdk@1.15.0 — the compiler driver name now serves from the metapackage, no fossil driver package installs. - allowScripts approves @panda/sdk — without the approval its postinstall silently skips and no links land. - scripts/bump-panda-sdk.mjs moves the pins and all three overrides in lockstep, and skips carriers the target release does not carry yet. **Consumer shims (until the koala CLI migrates)** - scripts/panda-driver-alias.cjs stands down on a metapackage install (the alias override already carries the driver name); on a plain bag install it replaces the physical driver directory with a symlink to @panda/sdk, and self-links the host-tools name smart-arkts computes per host (linux_host_tools, macos_arm64_host_tools, …) — junctions carry absolute targets on windows. - scripts/macos-postinstall.cjs maps the plain @panda/sdk name onto the mac bag on a pre-metapackage install; under the metapackage it stands down. - npm run test:panda (scripts/check-panda-sdk.cjs) and scripts/preflight-panda.mjs verify the install: pin vs installed, the flat bag staged, the addon dlopens, es2panda compiles, ark_aot cross-compiles arm64. **macOS host** - arktsx native modules build as .dylib: audio, camera, compress, curl, cv, device, graphics, haptics, libc, sqlite, video, video-codec-gav1, webview. - arktsx/demo builds and runs on an arm64 Mac. **OHOS and Android from their own carriers** - @panda/sdk-ohos-arm64 and @panda/sdk-android-arm64 carry the target bits in flat bags (lib/ at the package root); arktsx/sdk/sdk.mjs, copyExternal.mjs and bundle_libs.mjs read the flat layout with the nested one as a fallback. **Compiler fixes** required by the new checker - exact override signatures in a2ui (CaptureResolver) - StrokeSpec instead of Stroke in framework styles - as Object casts in hash calls - direct imports instead of re-exports in video, llm, io, preso, a2ui-browser - export the re-exported name in deal-ui (registerBuiltinComponents) — the checker rejects re-exporting a non-exported name **Runtime fixes** - generator and graphics mask both i32 halves when reassembling i64 pointer fields — the old code relied on undefined sign-extension **Packaging** - a2ui-server staging copies the SDK lib set, takes libdwarf.so.1 / libelf.so.1 from the SDK, and ldd-checks every staged binary - honest OSS notices: @panda/sdk is Apache-2.0; libdwarf and libelf are LGPL-2.1 - FontMgr tests tolerate bitmap-only font families ## Verification - npm run test:panda — 6/6 ok against the published bags: version pins match, stdlib staged, the addon loads, es2panda compiles ArkTS to abc, the ohos carrier pins and stages its runtime library. - node scripts/preflight-panda.mjs — PASS: layout complete, the driver alias resolves into the host bag through the metapackage, es2panda compiles from the bag, ark_aot cross-compiles arm64 (EM_AARCH64). - node scripts/bump-panda-sdk.mjs <next> -n plans the pin and every override moving together. ## Notes - Installing the aliased tarball needs allow-remote=true in npm and the @panda scope pointed at the koala registry; CI runners need both (a project .npmrc is gitignored here). | 28 天前 | |
setup: one registry source, a host preflight, and the libc++ gap ## Problem Standing up arkui3 on a fresh Ubuntu host cost three failed build cycles, each for a reason the repository did not tell you: | Symptom | Cause | |---|---| | ETARGET: No matching version found for @idlizer/core@2.2.2 | npm was never told where the internal scopes live. The list existed only in gitlab/setup.yml, which no developer reads, and it was stale. | | No clang on PATH, then fatal error: 'cassert' file not found | The compiler and its libc++ headers are separate packages, documented nowhere; the failure names no package. | | package config … not found. Run "apm install" first | host:prepare ran arkts tool hooks before anything wrote the package graph. | The internal registry is a public internet service — no office network is required. The Chinese mirror appears only as an optional speed-up. ## What changed - **One registry list** in scripts/registries.mjs, as data only: scope → registry, the package each scope's pinned version comes from, and the optional mirror. CI applies it (gitlab/setup.yml's .npm block is one --apply --ci-default call), developers print the block (npm run registries), and --ci shows the exact lines for diffing. There is no separate manifest guard: a manifest that starts using a new scope fails install:root on the same PR with an ETARGET naming the package. - **npm run preflight:host** — checks the machine, not build state: Node, clang, whether that clang can compile against libc++, fontconfig, and whether the **pinned version** of one package from each internal scope resolves through npm (npm view <pkg>@<version> version, from the repo root, so user/project .npmrc, proxies and auth apply). E404, E401/E403 and the network codes get distinct hints. It needs the network for the scope check. - **libc++ probe in the native build** — a syntax-only compile in arktsx/scripts/cross/executables.mjs, used by platforms/linux.mjs, so the failure names libc++-dev libc++abi-dev instead of 'cassert' file not found. - **host:prepare sequencing** — apm:install runs before compile:native and host:hooks. - **Docs** — Setup Guide (prerequisites, registry, clone settings, kh2-era setup), TOOLCHAIN (the two preflights), CI/CD, Build System, macOS Support, A2UI Server, README, CLAUDE.md. ## Verification - preflight:host passes on macOS: all three pinned versions resolve. With npm_config_userconfig=/dev/null (an unconfigured machine) all three fail with E404 and the registry hint. - The pinned-version probe is deliberate: @idlizer/core has public dist-tags, but 2.2.2 is 404 on npmjs, so a dist-tags probe would pass on exactly the machine where the install fails. - node scripts/registries.mjs --ci reproduces the old eight lines exactly; --print emits the same five scopes. - docs/second-brain/check_vault.py: 0 broken, 0 ghosts, 0 spaced, 0 root. - Branch is rebased onto master (kh2 setup, run bundles, no .packages) and has merged the master commits that landed since (Panda 1.20.0, Windows app bundles); git merge-tree against origin/master is clean. - Not run here: npm install, test:panda, builds — no node_modules in the worktree; CI covers them. ## Review notes This revision applies the review's simplification: registries.mjs drops the manifest analysis and is configuration only; the preflight drops the apm/package-config checks and the separate --network step, and merges the registry checks into one resolution probe. CI keeps delegating gitlab/setup.yml's .npm block to --apply. | 7 天前 | |
!1192 AI navigation | 2 个月前 | |
bump: koala toolchain to 1.5.0-dev.78036-10137 | 5 天前 | |
more tests through kh2 on CI Moves the host tests of CI onto kh2: one test:kh2 job (npx kh2 -j 6 test smoke check) replaces the per-package test jobs, and the OHOS/Android natives build through kh2 too. The plan and its four stages are in docs/second-brain/40_Development_Workflow/CI_kh2_Migration.md. ## Stages 1. **Package suites through kh2 only.** ArktsxPackage gains test.launcher (http-client's WebSocket server through with-server.mjs) and test.checks (abc-opt test:node, deal-ui protocol tables, assembler check:tables). The 43 duplicate test:<pkg> jobs are gone. 2. **Smokes, checks and bundles.** smoke-<name> (headless app runs), check-<name> (node tools, lints, the vault, the SDK CLI tests), bundle-<name> (linux bundles), all requested on demand, so a plain kh2 <pkg> builds none of them. 3. **Only the downloads are cached between pipelines.** test:kh2 builds the checkout from scratch and caches the npm cache and the apm package cache (.arkts_cache/). The stage first cached the kh2 state (.kh/ and the trees its records describe); that was dropped, see below. 4. **OHOS and Android natives.** compile:native:ohos-arm64 / compile:native:android-arm64 (the slices each hook/build.yml promises) and compile:ohos (arkts build --platform ohos) replace the npm --workspaces scripts and the four canary jobs. Each stage has a review-fix commit after it. ## On top of the stages - **Input lists named by role.** *Inputs are keyed inputs, *Barrier order-only ones. ArktsxPackage's arktsDeps becomes buildInputs; the test options split into inputs (this package's tests) and globalBarrier (what every launch waits for). PackageTest(…, buildInputs, globalTestBarrier, selfTestInputs, …); TestBuilds becomes GlobalTestBarrier. - **A timeout on every package test launch.** 10 minutes by default, test.timeoutMs per package. haus2 Exec/runProcess gain timeoutMs: past it the process group is terminated and the rule fails with CommandTimedOut. The hang it guards against is a race in the runtime's MarkableQueue.clear(), fixed in koala_projects!26. - **The web platform suites as checks.** Master added node --test platforms/web/ to the npm test:all of seven packages. WebPlatformCheck() runs them under kh2: in test-<name> for curl, device, http-client, interop and webview; as check-camera / check-haptics for the packages without arkts suites, replacing their CI jobs. - **CI: no kh2 state cache, -j 6.** The first CI runs of this PR showed why a cached kh2 state is fragile: the meson setups' get_prebuilt.mjs writes arktsx/*/subprojects/*/prebuilt/, which the cached tree list missed, so the restored setups stayed up to date without their prebuilts and curl, cv and graphics compiled without their headers. Such a state fails every later run until the key changes, for every branch. Only the downloads are cached now. The pod has a 4-CPU quota: at -j 10, the first ui-measure cases ran past their 90 s timeout next to the suites, so the job runs -j 6. ## Rebased onto master 3cdf4f99d - haus2 rule descriptions are now DescribeRule content, not a description option; every rule this branch adds is converted. - Master's test.tags (usb's tagged hooks) is merged with launcher, timeoutMs and the renamed input lists. ## Verification Locally, npx kh2 -j 10 test smoke check on the rebased branch: 795/795 rules pass, exit 0. haus2 widgets tests 144/144. CI, the first cold run (-j 10): the kh2 part took about 9 minutes, every rule but ui-measure passed (see above). 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 6 天前 | |
more tests through kh2 on CI Moves the host tests of CI onto kh2: one test:kh2 job (npx kh2 -j 6 test smoke check) replaces the per-package test jobs, and the OHOS/Android natives build through kh2 too. The plan and its four stages are in docs/second-brain/40_Development_Workflow/CI_kh2_Migration.md. ## Stages 1. **Package suites through kh2 only.** ArktsxPackage gains test.launcher (http-client's WebSocket server through with-server.mjs) and test.checks (abc-opt test:node, deal-ui protocol tables, assembler check:tables). The 43 duplicate test:<pkg> jobs are gone. 2. **Smokes, checks and bundles.** smoke-<name> (headless app runs), check-<name> (node tools, lints, the vault, the SDK CLI tests), bundle-<name> (linux bundles), all requested on demand, so a plain kh2 <pkg> builds none of them. 3. **Only the downloads are cached between pipelines.** test:kh2 builds the checkout from scratch and caches the npm cache and the apm package cache (.arkts_cache/). The stage first cached the kh2 state (.kh/ and the trees its records describe); that was dropped, see below. 4. **OHOS and Android natives.** compile:native:ohos-arm64 / compile:native:android-arm64 (the slices each hook/build.yml promises) and compile:ohos (arkts build --platform ohos) replace the npm --workspaces scripts and the four canary jobs. Each stage has a review-fix commit after it. ## On top of the stages - **Input lists named by role.** *Inputs are keyed inputs, *Barrier order-only ones. ArktsxPackage's arktsDeps becomes buildInputs; the test options split into inputs (this package's tests) and globalBarrier (what every launch waits for). PackageTest(…, buildInputs, globalTestBarrier, selfTestInputs, …); TestBuilds becomes GlobalTestBarrier. - **A timeout on every package test launch.** 10 minutes by default, test.timeoutMs per package. haus2 Exec/runProcess gain timeoutMs: past it the process group is terminated and the rule fails with CommandTimedOut. The hang it guards against is a race in the runtime's MarkableQueue.clear(), fixed in koala_projects!26. - **The web platform suites as checks.** Master added node --test platforms/web/ to the npm test:all of seven packages. WebPlatformCheck() runs them under kh2: in test-<name> for curl, device, http-client, interop and webview; as check-camera / check-haptics for the packages without arkts suites, replacing their CI jobs. - **CI: no kh2 state cache, -j 6.** The first CI runs of this PR showed why a cached kh2 state is fragile: the meson setups' get_prebuilt.mjs writes arktsx/*/subprojects/*/prebuilt/, which the cached tree list missed, so the restored setups stayed up to date without their prebuilts and curl, cv and graphics compiled without their headers. Such a state fails every later run until the key changes, for every branch. Only the downloads are cached now. The pod has a 4-CPU quota: at -j 10, the first ui-measure cases ran past their 90 s timeout next to the suites, so the job runs -j 6. ## Rebased onto master 3cdf4f99d - haus2 rule descriptions are now DescribeRule content, not a description option; every rule this branch adds is converted. - Master's test.tags (usb's tagged hooks) is merged with launcher, timeoutMs and the renamed input lists. ## Verification Locally, npx kh2 -j 10 test smoke check on the rebased branch: 795/795 rules pass, exit 0. haus2 widgets tests 144/144. CI, the first cold run (-j 10): the kh2 part took about 9 minutes, every rule but ui-measure passed (see above). 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 6 天前 | |
datamine: columnar data analysis, CSV/JSON/XLSX I/O, and a spreadsheet engine ## What this adds ** @arktsx/datamine** — a columnar data-analysis package in pure ArkTS: - **Tables and I/O.** Table/Column with numeric, text, boolean and time columns. CSV (RFC 4180), TSV, JSON array-of-objects / JSON Lines, and XLSX read/write, including row-level streaming (streamXlsxRows, streamCsvToXlsx, streamXlsxToCsv) so memory stays proportional to the row, not the file. - **Statistics.** Descriptive moments, quantiles, correlations, cross-tabs, t-test, chi-square, linear regression, histograms, z-score/IQR outliers. - **Learning and preprocessing.** k-NN, k-means, logistic regression, naive Bayes, PCA, decision trees, evaluation metrics; scaling, imputation, label and one-hot encoding, binning; association rules; TF-IDF. - **Sketches and series.** Bloom, count-min, HyperLogLog, reservoir sampling, quantile sketch; rolling windows, resampling, EMA, gap filling. - **Spreadsheet engine (lib/sheet).** Parser, Worksheet/Workbook, FormulaEvaluator with cycle detection, and value formatting. Split into formula / worksheet / evaluator / workbook, held acyclic by two interfaces (SheetOwner, SheetLookup). - **Demos.** An R-style workspace (demo/demo.ets + studio / inspector / theme) with CSV/XLSX import-export through the framework FilePicker, and a spreadsheet app (demo/sheet.ets + grid/dialogs/samples/session helpers). **Supporting changes** - @arktsx/compress: ZIP64 (EOCD + extra fields + streamed entries with data descriptors), ZipEntryStream, and a chunked crc32Update binding. - @arktsx/io: 64-bit DirectBuffer lengths (chunked at the 2 GiB boundary) and a LocalVfs. - @arktsx/libc: memorySet. - @arktsx/ui: a reusable FilePicker component, extracted from the preso player (the player's private browser is deleted). - @arktsx/xml: exports escapeText / escapeAttributeValue, so the XLSX writer reuses them instead of carrying a copy. - SDK allowlist, root package wiring, and second-brain notes. ## Correctness notes - XLSX cell references are validated and capped at Excel's 16384 columns before they reach an index or an allocation; the ZIP *stream* reader bounds the declared compressed size before allocating natively. - writeXlsxFile / streamCsvToXlsx close their writer in finally, and the native CRC binding rejects a negative length. - Demos publish fresh state identities and key lists on content, not on mutable array identity. ## Testing - arktsx/datamine — 77 tests (tables, CSV/JSON/XLSX round-trips, streaming pipelines, statistics, ML, sketches, series, formula evaluation). - arktsx/io — 148 tests; arktsx/compress — 24; arktsx/xml — 35. - arkts build --target demo succeeds for the datamine demos; a headless run of the workspace demo starts and renders without errors. 🤖 Generated with [Claude Code](https://claude.com/claude-code) | 2 分钟前 |
Koala ArkTS
Agent-first UI framework in ArkTS — native on OpenHarmony, Android, iOS and Linux.
Getting Started
Requirements: Linux x64/arm64 · macOS arm64 · Node.js ≥ 18 · unzip
Those are the requirements for using the SDK. Developing the framework itself —
building this repository — additionally needs a C++ compiler, the libc++ headers,
and npm pointed at the internal registry. See
docs/second-brain/40_Development_Workflow/Setup_Guide.md,
or run npm run preflight:host in a checkout to see what a machine is missing.
1. Install the SDK — one line:
curl -fsSL https://nexus.cn.bz-openlab.ru:10443/repository/arkui3-sdk/install.sh -o /tmp/arkui3.sh && bash /tmp/arkui3.sh
export PATH="$HOME/.local/bin:$PATH"
Installs to ~/.arkui3-<version>/ and toggles the ~/.arkui3 symlink — the previous install is never touched until the new one has downloaded, verified and staged. Rollback is one link: ln -sfn ~/.arkui3-<old-version> ~/.arkui3. Uninstall: bash /tmp/arkui3.sh --uninstall.
2. Create and run your first app:
arkui3 create my-app && cd my-app
arkui3 run -p linux # also: -p android, -p ohos
3. No terminal? One sentence to your AI agent:
Install the arkui3 SDK from https://nexus.cn.bz-openlab.ru:10443/repository/arkui3-sdk/install.sh and create + run a demo app.
The agent runs the install, scaffolds, builds and verifies — you watch.
Two steps stay yours, because the agent rules in CLAUDE.md forbid the agent
from running them: installing system packages (sudo) and configuring the npm
registry (.npmrc). The agent prints the exact commands and you run them. This
only comes up when building the repository rather than using the SDK.
Docs: the arkui3 repository · Example app built this way: session-visualizer PR
项目介绍
可用于快速搭建基于 ArkTS 1.2 的静态 ArkUI 界面应用。项目提供 Koala ArkTS 框架,面向 ArkTS UI 应用开发,支持静态 ArkTS 1.2,适合作为 ArkUI 应用、组件或演示页面的基础模板。【此简介由AI生成】
定制我的领域