@deveco-test/hmos-deveco-cli 0.3.0-TD.2-alpha2 → 0.3.0-TD.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +785 -785
  3. package/SKILL.md +172 -172
  4. package/dist/cli.js +3 -3
  5. package/index.zip +0 -0
  6. package/package.json +102 -102
  7. package/scripts/install-better-sqlite3.mjs +51 -51
  8. package/scripts/install-jieba-wasm.mjs +47 -47
  9. package/scripts/lib/better-sqlite3-vendor.mjs +128 -128
  10. package/scripts/lib/cli-data-dir.mjs +44 -44
  11. package/scripts/lib/doc-init-log-path.mjs +15 -15
  12. package/scripts/lib/jieba-wasm-vendor.mjs +102 -102
  13. package/scripts/postinstall.mjs +54 -54
  14. package/src/resources/aclPermission/aclPermissionsInfo.json +310 -310
  15. package/templates/application/AppScope/app.json5 +10 -10
  16. package/templates/application/AppScope/resources/base/element/string.json +8 -8
  17. package/templates/application/AppScope/resources/base/media/layered_image.json +6 -6
  18. package/templates/application/build-profile.json5 +41 -41
  19. package/templates/application/code-linter.json5 +31 -31
  20. package/templates/application/entry/build-profile.json5 +32 -32
  21. package/templates/application/entry/gitignore.txt +5 -5
  22. package/templates/application/entry/hvigorfile.ts +7 -7
  23. package/templates/application/entry/obfuscation-rules.txt +19 -19
  24. package/templates/application/entry/oh-package.json5 +10 -10
  25. package/templates/application/entry/src/main/ets/entryability/EntryAbility.ets +62 -62
  26. package/templates/application/entry/src/main/ets/entrybackupability/EntryBackupAbility.ets +30 -30
  27. package/templates/application/entry/src/main/ets/pages/Index.ets +37 -37
  28. package/templates/application/entry/src/main/module.json5 +49 -49
  29. package/templates/application/entry/src/main/resources/base/element/color.json +7 -7
  30. package/templates/application/entry/src/main/resources/base/element/float.json +8 -8
  31. package/templates/application/entry/src/main/resources/base/element/string.json +15 -15
  32. package/templates/application/entry/src/main/resources/base/media/layered_image.json +6 -6
  33. package/templates/application/entry/src/main/resources/base/profile/backup_config.json +2 -2
  34. package/templates/application/entry/src/main/resources/base/profile/main_pages.json +5 -5
  35. package/templates/application/entry/src/main/resources/dark/element/color.json +7 -7
  36. package/templates/application/gitignore.txt +11 -11
  37. package/templates/application/hvigor/hvigor-config.json5 +23 -23
  38. package/templates/application/hvigorfile.ts +7 -7
  39. package/templates/application/oh-package.json5 +10 -10
package/SKILL.md CHANGED
@@ -1,172 +1,172 @@
1
- ---
2
- name: deveco-cli
3
- description: >-
4
- **MUST** use 'devecocli' for HarmonyOS apps (scaffold, build, run, debug, devices, logs, docs, 鸿蒙开发文档, skills, multi-preview). **REQUIRED** and **MANDATORY** if workspace has build-profile.json5 or oh-package.json5, or user mentions HarmonyOS, 鸿蒙, DevEco, ArkTS, ArkUI, docs, 鸿蒙文档, 知识, 搜索, skills, or preview/预览/预览器/多预览器/多设备预览器.
5
- ---
6
-
7
- # DevEco CLI
8
-
9
- `devecocli` wraps DevEco Studio's `hvigor`, `ohpm`, `hdc`, and HarmonyOS-skills installer. **Prefer `devecocli` over invoking underlying tools directly.**
10
-
11
- **Do NOT use these legacy commands** — use the `devecocli` equivalent instead:
12
- - ❌ `deveco preview` / `hvigorw preview` → ✅ `devecocli run --device <product-name>` (launches DevEco Studio previewer; product name in `--device` triggers previewer mode)
13
- - ❌ `hvigorw` directly → ✅ `devecocli build`
14
- - ❌ `hdc` directly (when a `devecocli` wrapper exists) → ✅ `devecocli device` / `devecocli log` / `devecocli run`
15
-
16
- Available commands: `build`, `check`, `run`, `update`, `device`, `skills`, `log`, `create`, `init`, `serve`, `docs`, `auth`.
17
-
18
- **Platform awareness**: On HarmonyOS native PC (2in1), **emulator commands are NOT available** and must never be suggested. The `emulator` command does not exist on this platform. When `device list` shows no devices, instead of suggesting emulator startup, tell the user to:
19
- 1. Enable wireless debugging in Settings → System → Developer options → Wireless debugging
20
- 2. Note the port number
21
- 3. Run `hdc tconn 127.0.0.1:<port>`
22
-
23
- **Sandbox Rule**: Commands tagged `[Outside sandbox]` must be run outside the sandbox.
24
-
25
- ## 1. Code → Build → Deploy → Run → Debug
26
-
27
- ### `devecocli create`
28
- Scaffold a new HarmonyOS project.
29
- - `--app-name <name>` (Req): 1–200 chars, `^[a-zA-Z][a-zA-Z0-9_]*$`
30
- - `--project-path <path>`: Auto-created if omitted (`./<app-name>`). Must be empty if exists.
31
- - `--bundle-name <bundle>`: Default `com.example.<appname-lowercase>`. 7–128 chars, ≥3 segments.
32
- - `--api-level <level>`: int ≥17 (default: auto or 23).
33
- *Ex*: `devecocli create --app-name MyApp --project-path ./CustomDir --api-level 23`
34
-
35
- ### `devecocli build` `[Outside sandbox]`
36
- Compile and package project/modules. (Defaults: `--product default`, `--build-mode debug`)
37
- | Goal | Command |
38
- |---|---|
39
- | Single-module / single-`entry` | `devecocli build` |
40
- | Specific modules | `devecocli build --modules <m1> <m2>@<target>` |
41
- | Whole product bundle (.app) | `devecocli build --product <name>` |
42
- | Clean build outputs | `devecocli build clean` |
43
-
44
- ### `devecocli check lint`
45
- Run DevEco Code Linter checks for TS/ArkTS code.
46
- - `[path]`: File or directory to lint. Defaults to the project root from `build-profile.json5`, otherwise the current directory.
47
- - Options: `--config-path <file>`, `--fix`, `--incremental`, `--product <name>`, `--format <default|json>`, `--output-path <path>`, `--limit <number>`.
48
-
49
- ### `devecocli docs`
50
- Search/read local HarmonyOS docs.
51
- - `search <keywords...>`: Match any keyword. Opts: `--catalog <name>`, `--format <default|json>`, `--limit <n>`.
52
- - `read <documentId>`: Read full content by ID (e.g. `devecocli docs read 开发指南/冷启动_Launch分析/Launch模板基本操作/ide-insight-session-launch`).
53
- - `catalog`: List available catalogs.
54
-
55
- ### `devecocli device`
56
- - `list`: Show active real devices.
57
- - `view`: Detailed info. Req `-t <name|serial>` on multi-device hosts.
58
-
59
- ### `devecocli run` `[Outside sandbox]`
60
- Build, install, and launch.
61
- - `--module <module>`: Target module (auto-selected if only one runnable).
62
- - `--device <name|serial>`: Target device (Req if multiple connected).
63
- - `--product <product>` / `--build-mode <mode>`: Defaults: `default` / `debug`.
64
- - `--ability <ability>`: Default from `module.json5`.
65
- - `--uninstall`: Uninstall existing app first (Fixes signing key issues).
66
- - `--skip-build`: Deploy existing artifacts.
67
- - `--apply <fileName>`: **Fast incremental deploy** — rebuilds only changed files into a signed hqf, installs via `bm quickfix -a -f -o`, then restarts the app. Much faster than a full `devecocli run` for iterating on code changes. Modules are auto-detected from the file paths in `<fileName>` (no `--module` needed).
68
- - `<fileName>`: a plain file name (no path separators) under the project's `.hvigor/` directory; the caller writes the changed-file list there. File name is sanitized to prevent path traversal. Content: list of **source file paths changed this round** (one per line, relative to project root or absolute; `#` comments and blank lines ignored; typically `.ets`/`.ts`/`.cpp`/resource files). The changeFileList is **incrementally merged** — only list files changed since the last apply; previously listed files are retained automatically.
69
- - **Prereq**: run `devecocli run` once first (full build + deploy + generates the `buildConfig.json` cache that `--apply` reuses).
70
- - **If changes don't take effect**: check `<module>/build/config/buildConfig.json` has content — empty/missing means `devecocli run` wasn't run; on any apply failure, fall back to a full `devecocli run`.
71
- *Ex*: `devecocli run` → edit code → write `.hvigor/changes.txt` → `devecocli run --apply changes.txt`
72
- - **Previewer mode** (auto-detected from `--device`): When `--device` value matches previewer product names (e.g. `"Pura 90 Pro"`, `"MatePad 11.5'S"`, `phone`, `pad`), the CLI launches the DevEco Studio **previewer** instead of installing/running the app. Comma-separated names → multi-previewer (count = list length). When `--device` is a serial/IP:port/unmatched value, normal run mode is used. Omitting `--device` → normal run. Ensures the DevEco Studio desktop process is running first (throws immediately if not — does NOT auto-start Studio on any platform), then `hdc shell aa start -a DevEcoViewerAbility -b com.huawei.devecostudio -m DevEcoViewer --pi instanceId <pid> --ps paramJson <JSON with double-quotes escaped>` with project info (`bundleName` / `abilityName` / `moduleName` / `productName` / `productType` / `subProductType` / `instanceId` / `launchDeviceIndex` / `launchFlag` / `isCustom` / `nativeDebuggable` / `appDebuggable`). `instanceId` = CLI process.pid; `launchDeviceIndex` = -1 for single previewer, 0-based for multi. Skips build/install (except multi-previewer needs build+install with multiAppMode). **Smart matching**: case/whitespace/punctuation insensitive; accepts aliases (`phone`, `tablet`/`pad`, `fold`/`foldable`, `widefold`/`wide`, `triplefold`/`triple`) and short forms; substring match and Levenshtein ≤ 2 fallback. Ambiguous matches report candidates. Supported products: `Pura 90 Pro`, `MatePad 11.5'S`, `Mate X7`, `Pura X`, `Mate XT`.
73
- - **Windows/macOS**: uses DevEco Studio's bundled hdc, auto-detects Studio install path via ToolProvider. hdc target device is auto-selected via `selectDevice` (previewer mode does not use `--device` as hdc target).
74
- - **HarmonyOS native (2in1 PC)**: hdc does NOT auto-discover the local device — self-connect required. In previewer mode, `--device` is the product name (not hdc target). The CLI checks `hdc list targets` for a `127.0.0.1:<port>` entry: if found, uses it directly; if not found, warns `hdc 未自联` and fallbacks to `connectLocalDevice` (resolution: `DEVECO_HDC_PORT` env var → existing `hdc list targets` → interactive prompt → error). DevEco Studio is a system app there; local `pgrep` cannot see Studio's process due to UID isolation, so the CLI detects Studio via `hdc shell ps -ef | grep com.huawei.devecostudio` (hdcd runs as root) — requires hdc self-connect first. The CLI does NOT auto-start Studio on any platform.
75
- - **Agent hint**: After a successful single-preview launch where the user specified only one device type, briefly inform the user in natural language that they can try launching multiple different device previewers at once by comma-separating product names in `--device`. Do NOT print command examples — keep it conversational. Do NOT print this hint if the user already launched multi-preview.
76
-
77
- ### `devecocli log`
78
- Fetch hilog or crash logs. Req `--device <name|serial>` on multi-device hosts.
79
- - `--crash`: Dump crash logs.
80
- - `--level D|I|W|E|F`: Filter by level.
81
- - `--bundle-name` / `--keyword`: Filter output.
82
- - `--from <start>` / `--to <end>`: Relative offsets (`30s`, `5m`).
83
- - `--tail <num>` / `--follow`: Keep last N lines / stream real-time (no `--to`).
84
- *Ex*: `devecocli log --crash --bundle-name com.example.app`, `devecocli log --level E --from 5m --tail 200`
85
-
86
- ### `devecocli ui`
87
- Inspect UI on a connected device. All subcommands accept `--device <name|serial>` (Req on multi-device hosts).
88
-
89
- | Subcommand | Description | Key Options |
90
- |---|---|---|
91
- | `layout` | Dump ArkUI accessibility layout tree — **visible area only** (on-screen nodes) | `--id <id>`, `--window <windowId>`, `--all-windows`, `--depth <n>` (0=unlimited, 1=root only, 2=root+children), `--format default\|json`, `--mode full\|simplified` |
92
- | `window list` | List active windows | `--format default\|json`, `--all` (include system windows) |
93
- | `screenshot` | Capture a screenshot of the device screen | `--display <displayId>`, required `--path <path>` (existing directory or PNG file path; relative paths supported; writable destination; no overwrite) |
94
- | `click [x] [y]` | Tap at the specified coordinates or node | `--id <id>` (auto-resolves to center), `--window <windowId>` (used with `--id`) |
95
- | `doubleclick [x] [y]` | Double-tap at the specified coordinates or node | `--id <id>`, `--window <windowId>` |
96
- | `longclick [x] [y]` | Long-press at the specified coordinates or node | `--id <id>`, `--window <windowId>` |
97
- | `swipe <x1> <y1> <x2> <y2>` | Swipe from one point to another (precise coordinates, custom speed) | `--speed <n>` (200–40000, px/s) |
98
- | `fling <x1> <y1> <x2> <y2>` | Fling from one point to another | `--speed <n>` (200–40000, px/s) |
99
- | `drag <x1> <y1> <x2> <y2>` | Drag from one point to another | `--speed <n>` (200–40000, px/s) |
100
- | `dircfling <direction>` | Quick directional fling (system default speed, ideal for scrolling) | `direction`: `up`, `down`, `left`, `right` |
101
- | `text <text> [x] [y]` | Input text at a target location or the currently focused field | `--id <id>` (auto-resolves to center), `--window <windowId>` (used with `--id`) |
102
-
103
- - **Coordinates vs `--id`**: Mutually exclusive. Provide either `x y` or `--id <id>`. For `text`, if neither is given, text goes to the currently focused field.
104
- - **`--window`**: May only be used together with `--id`. Default is focused window. Secondary display operations via `--id` + `--window` are not supported.
105
- - **`swipe` vs `dircfling`**: `swipe` requires exact start/end coordinates and supports `--speed`; `dircfling` only needs a direction (`up/down/left/right`) and uses system default speed (ideal for page/list scrolling).
106
- - **Text encoding**: Special characters in `text` are Base64-encoded internally to safely pass through device shell.
107
- - `--format json` pairs well with `jq`.
108
- - `--mode full`: full layout tree, no filtering.
109
- - `--mode simplified` (default): folds meaningless wrapper containers (non-root, no `id`, no text, not interactive) by lifting their surviving children up. `--depth` truncates after folding.
110
-
111
- ## 2. Setup
112
-
113
- ### `devecocli init`
114
- MUTUALLY EXCLUSIVE modes for setup:
115
- 1. `--skill` (Default): Install `deveco-cli` skill to AI agents.
116
- 2. `--mcp`: Configure `deveco-mcp` server (ArkTS/C++ syntax checking).
117
- *Options*:
118
- - `--agent <agents>`: Comma-separated (e.g. `opencode,cursor`). Omitting targets all.
119
- - `--project <path>`: Project-level config (Abs path for MCP).
120
- - `--path <path>`: Direct skill install path.
121
- - `-f, --force`: Overwrite existing config.
122
- *MCP Rules*: Global MCP (no `--project`) only supports `opencode` and `cursor`. Others require `--project`.
123
-
124
- ### `devecocli auth login`
125
- Sign in to your Huawei Developer account. Opens a browser for OAuth authentication. Required before `signature generate`.
126
- *Ex*: `devecocli auth login`
127
-
128
- ### `devecocli auth logout`
129
- Sign out and clear locally stored credentials.
130
-
131
- ### `devecocli auth status`
132
- Show the current logged-in user.
133
-
134
- ### `devecocli auth team list`
135
- List team accounts the current user has joined.
136
-
137
- ### `devecocli skills`
138
- Manage HarmonyOS skills in AI agents/projects.
139
- - `list [-l|--long]` / `find <keyword>`: List or search skills.
140
- - `add (--all | --skill <name>) [--agent <a,b…>] [--project <path>] [--path <path>] [-f]`: Install.
141
- - `remove --skill <name> [...]`: Uninstall.
142
-
143
- ## 3. Maintenance
144
-
145
- - **`devecocli update`** `[Outside sandbox]`: Update CLI to latest version.
146
- - **`devecocli serve mcp`**: Host stdio MCP server (`check` tool for `.ets`/C/C++). Used via `init --mcp`. (Env: `PROJECT_PATH`, `DEVECO_PATH`, `NODE_MAX_OLD_SPACE_SIZE`, `DEBUG=1`).
147
-
148
- ## Recipes
149
-
150
- - **Fresh checkout to real device**:
151
- `devecocli build` -> `devecocli device list` -> `devecocli run --device <serial>`
152
- - **Launch previewer for current project** (instead of `deveco preview`):
153
- - Single previewer (specific device type): `devecocli run --module entry --device "Pura 90 Pro"`
154
- - Multi-preview by device types: `devecocli run --module entry --device "Pura 90 Pro,Mate XT"`
155
- - On HarmonyOS native PC: set `DEVECO_HDC_PORT=<port>` env var before running (previewer mode uses `--device` for product name, not hdc target)
156
- - Previewer mode is auto-detected: `--device` value matching product names → previewer; serial/IP:port → normal run
157
- - **Diagnose crash**:
158
- `devecocli log --crash --bundle-name <bundle>`
159
- - **Release build**:
160
- `devecocli build --product oversea --build-mode release`
161
- - **First-time signing setup**:
162
- `devecocli login` -> `devecocli signature generate --product default` -> `devecocli build` -> `devecocli run`
163
-
164
- ## Troubleshooting
165
-
166
- - **"Product / Build mode `<x>` not found"**: Check `build-profile.json5`.
167
- - **"Multiple entry modules" / "No entry module"**: Pass `--modules` (build) or `--module` (run).
168
- - **"No active devices" / "Multiple devices connected"**: Connect a real device (or self-connect via wireless debugging on HarmonyOS native PC). Pass `-t <serial>` (device view) or `--device <name|serial>` (run/log).
169
- - **`error:install sign info inconsistent`**: Signing key changed. Run `devecocli run --uninstall`.
170
- - **`skills add` agent not found**: Valid: `codebuddy`, `cursor`, `opencode`, `qoder`, `trae-cn`.
171
- - **HarmonyOS native (2in1 PC) — `hdc list targets` shows `[Empty]`**: hdc on HarmonyOS does NOT auto-discover the local device. Open "Settings → System → Developer options → Wireless debugging", note the port, then `hdc tconn 127.0.0.1:<port>`. For normal run: pass `--device 127.0.0.1:<port>`. For previewer mode: set `DEVECO_HDC_PORT=<port>` env var (previewer mode uses `--device` for product name, not hdc target).
172
- - **Previewer mode — "DevEco Studio is not running"**: The previewer's rendering depends on the DevEco Studio desktop process. If the CLI returns this error, do NOT retry. Use natural language to tell the user: "预览器需要 DevEco Studio 处于运行状态,请先手动启动 DevEco Studio,启动后再重试此命令。" On HarmonyOS PC, also remind the user that process detection may be limited by UID isolation (currentUser cannot see Studio's process), but if the CLI reports this error it means detection genuinely failed.
1
+ ---
2
+ name: deveco-cli
3
+ description: >-
4
+ **MUST** use 'devecocli' for HarmonyOS apps (scaffold, build, run, debug, devices, logs, docs, 鸿蒙开发文档, skills, multi-preview). **REQUIRED** and **MANDATORY** if workspace has build-profile.json5 or oh-package.json5, or user mentions HarmonyOS, 鸿蒙, DevEco, ArkTS, ArkUI, docs, 鸿蒙文档, 知识, 搜索, skills, or preview/预览/预览器/多预览器/多设备预览器.
5
+ ---
6
+
7
+ # DevEco CLI
8
+
9
+ `devecocli` wraps DevEco Studio's `hvigor`, `ohpm`, `hdc`, and HarmonyOS-skills installer. **Prefer `devecocli` over invoking underlying tools directly.**
10
+
11
+ **Do NOT use these legacy commands** — use the `devecocli` equivalent instead:
12
+ - ❌ `deveco preview` / `hvigorw preview` → ✅ `devecocli run --device <product-name>` (launches DevEco Studio previewer; product name in `--device` triggers previewer mode)
13
+ - ❌ `hvigorw` directly → ✅ `devecocli build`
14
+ - ❌ `hdc` directly (when a `devecocli` wrapper exists) → ✅ `devecocli device` / `devecocli log` / `devecocli run`
15
+
16
+ Available commands: `build`, `check`, `run`, `update`, `device`, `skills`, `log`, `create`, `init`, `serve`, `docs`, `auth`.
17
+
18
+ **Platform awareness**: On HarmonyOS native PC (2in1), **emulator commands are NOT available** and must never be suggested. The `emulator` command does not exist on this platform. When `device list` shows no devices, instead of suggesting emulator startup, tell the user to:
19
+ 1. Enable wireless debugging in Settings → System → Developer options → Wireless debugging
20
+ 2. Note the port number
21
+ 3. Run `hdc tconn 127.0.0.1:<port>`
22
+
23
+ **Sandbox Rule**: Commands tagged `[Outside sandbox]` must be run outside the sandbox.
24
+
25
+ ## 1. Code → Build → Deploy → Run → Debug
26
+
27
+ ### `devecocli create`
28
+ Scaffold a new HarmonyOS project.
29
+ - `--app-name <name>` (Req): 1–200 chars, `^[a-zA-Z][a-zA-Z0-9_]*$`
30
+ - `--project-path <path>`: Auto-created if omitted (`./<app-name>`). Must be empty if exists.
31
+ - `--bundle-name <bundle>`: Default `com.example.<appname-lowercase>`. 7–128 chars, ≥3 segments.
32
+ - `--api-level <level>`: int ≥17 (default: auto or 23).
33
+ *Ex*: `devecocli create --app-name MyApp --project-path ./CustomDir --api-level 23`
34
+
35
+ ### `devecocli build` `[Outside sandbox]`
36
+ Compile and package project/modules. (Defaults: `--product default`, `--build-mode debug`)
37
+ | Goal | Command |
38
+ |---|---|
39
+ | Single-module / single-`entry` | `devecocli build` |
40
+ | Specific modules | `devecocli build --modules <m1> <m2>@<target>` |
41
+ | Whole product bundle (.app) | `devecocli build --product <name>` |
42
+ | Clean build outputs | `devecocli build clean` |
43
+
44
+ ### `devecocli check lint`
45
+ Run DevEco Code Linter checks for TS/ArkTS code.
46
+ - `[path]`: File or directory to lint. Defaults to the project root from `build-profile.json5`, otherwise the current directory.
47
+ - Options: `--config-path <file>`, `--fix`, `--incremental`, `--product <name>`, `--format <default|json>`, `--output-path <path>`, `--limit <number>`.
48
+
49
+ ### `devecocli docs`
50
+ Search/read local HarmonyOS docs.
51
+ - `search <keywords...>`: Match any keyword. Opts: `--catalog <name>`, `--format <default|json>`, `--limit <n>`.
52
+ - `read <documentId>`: Read full content by ID (e.g. `devecocli docs read 开发指南/冷启动_Launch分析/Launch模板基本操作/ide-insight-session-launch`).
53
+ - `catalog`: List available catalogs.
54
+
55
+ ### `devecocli device`
56
+ - `list`: Show active real devices.
57
+ - `view`: Detailed info. Req `-t <name|serial>` on multi-device hosts.
58
+
59
+ ### `devecocli run` `[Outside sandbox]`
60
+ Build, install, and launch.
61
+ - `--module <module>`: Target module (auto-selected if only one runnable).
62
+ - `--device <name|serial>`: Target device (Req if multiple connected).
63
+ - `--product <product>` / `--build-mode <mode>`: Defaults: `default` / `debug`.
64
+ - `--ability <ability>`: Default from `module.json5`.
65
+ - `--uninstall`: Uninstall existing app first (Fixes signing key issues).
66
+ - `--skip-build`: Deploy existing artifacts.
67
+ - `--apply <fileName>`: **Fast incremental deploy** — rebuilds only changed files into a signed hqf, installs via `bm quickfix -a -f -o`, then restarts the app. Much faster than a full `devecocli run` for iterating on code changes. Modules are auto-detected from the file paths in `<fileName>` (no `--module` needed).
68
+ - `<fileName>`: a plain file name (no path separators) under the project's `.hvigor/` directory; the caller writes the changed-file list there. File name is sanitized to prevent path traversal. Content: list of **source file paths changed this round** (one per line, relative to project root or absolute; `#` comments and blank lines ignored; typically `.ets`/`.ts`/`.cpp`/resource files). The changeFileList is **incrementally merged** — only list files changed since the last apply; previously listed files are retained automatically.
69
+ - **Prereq**: run `devecocli run` once first (full build + deploy + generates the `buildConfig.json` cache that `--apply` reuses).
70
+ - **If changes don't take effect**: check `<module>/build/config/buildConfig.json` has content — empty/missing means `devecocli run` wasn't run; on any apply failure, fall back to a full `devecocli run`.
71
+ *Ex*: `devecocli run` → edit code → write `.hvigor/changes.txt` → `devecocli run --apply changes.txt`
72
+ - **Previewer mode** (auto-detected from `--device`): When `--device` value matches previewer product names (e.g. `"Pura 90 Pro"`, `"MatePad 11.5'S"`, `phone`, `pad`), the CLI launches the DevEco Studio **previewer** instead of installing/running the app. Comma-separated names → multi-previewer (count = list length). When `--device` is a serial/IP:port/unmatched value, normal run mode is used. Omitting `--device` → normal run. Ensures the DevEco Studio desktop process is running first (throws immediately if not — does NOT auto-start Studio on any platform), then `hdc shell aa start -a DevEcoViewerAbility -b com.huawei.devecostudio -m DevEcoViewer --pi instanceId <pid> --ps paramJson <JSON with double-quotes escaped>` with project info (`bundleName` / `abilityName` / `moduleName` / `productName` / `productType` / `subProductType` / `instanceId` / `launchDeviceIndex` / `launchFlag` / `isCustom` / `nativeDebuggable` / `appDebuggable`). `instanceId` = CLI process.pid; `launchDeviceIndex` = -1 for single previewer, 0-based for multi. Skips build/install (except multi-previewer needs build+install with multiAppMode). **Smart matching**: case/whitespace/punctuation insensitive; accepts aliases (`phone`, `tablet`/`pad`, `fold`/`foldable`, `widefold`/`wide`, `triplefold`/`triple`) and short forms; substring match and Levenshtein ≤ 2 fallback. Ambiguous matches report candidates. Supported products: `Pura 90 Pro`, `MatePad 11.5'S`, `Mate X7`, `Pura X`, `Mate XT`.
73
+ - **Windows/macOS**: uses DevEco Studio's bundled hdc, auto-detects Studio install path via ToolProvider. hdc target device is auto-selected via `selectDevice` (previewer mode does not use `--device` as hdc target).
74
+ - **HarmonyOS native (2in1 PC)**: hdc does NOT auto-discover the local device — self-connect required. In previewer mode, `--device` is the product name (not hdc target). The CLI checks `hdc list targets` for a `127.0.0.1:<port>` entry: if found, uses it directly; if not found, warns `hdc 未自联` and fallbacks to `connectLocalDevice` (resolution: `DEVECO_HDC_PORT` env var → existing `hdc list targets` → interactive prompt → error). DevEco Studio is a system app there; local `pgrep` cannot see Studio's process due to UID isolation, so the CLI detects Studio via `hdc shell ps -ef | grep com.huawei.devecostudio` (hdcd runs as root) — requires hdc self-connect first. The CLI does NOT auto-start Studio on any platform.
75
+ - **Agent hint**: After a successful single-preview launch where the user specified only one device type, briefly inform the user in natural language that they can try launching multiple different device previewers at once by comma-separating product names in `--device`. Do NOT print command examples — keep it conversational. Do NOT print this hint if the user already launched multi-preview.
76
+
77
+ ### `devecocli log`
78
+ Fetch hilog or crash logs. Req `--device <name|serial>` on multi-device hosts.
79
+ - `--crash`: Dump crash logs.
80
+ - `--level D|I|W|E|F`: Filter by level.
81
+ - `--bundle-name` / `--keyword`: Filter output.
82
+ - `--from <start>` / `--to <end>`: Relative offsets (`30s`, `5m`).
83
+ - `--tail <num>` / `--follow`: Keep last N lines / stream real-time (no `--to`).
84
+ *Ex*: `devecocli log --crash --bundle-name com.example.app`, `devecocli log --level E --from 5m --tail 200`
85
+
86
+ ### `devecocli ui`
87
+ Inspect UI on a connected device. All subcommands accept `--device <name|serial>` (Req on multi-device hosts).
88
+
89
+ | Subcommand | Description | Key Options |
90
+ |---|---|---|
91
+ | `layout` | Dump ArkUI accessibility layout tree — **visible area only** (on-screen nodes) | `--id <id>`, `--window <windowId>`, `--all-windows`, `--depth <n>` (0=unlimited, 1=root only, 2=root+children), `--format default\|json`, `--mode full\|simplified` |
92
+ | `window list` | List active windows | `--format default\|json`, `--all` (include system windows) |
93
+ | `screenshot` | Capture a screenshot of the device screen | `--display <displayId>`, required `--path <path>` (existing directory or PNG file path; relative paths supported; writable destination; no overwrite) |
94
+ | `click [x] [y]` | Tap at the specified coordinates or node | `--id <id>` (auto-resolves to center), `--window <windowId>` (used with `--id`) |
95
+ | `doubleclick [x] [y]` | Double-tap at the specified coordinates or node | `--id <id>`, `--window <windowId>` |
96
+ | `longclick [x] [y]` | Long-press at the specified coordinates or node | `--id <id>`, `--window <windowId>` |
97
+ | `swipe <x1> <y1> <x2> <y2>` | Swipe from one point to another (precise coordinates, custom speed) | `--speed <n>` (200–40000, px/s) |
98
+ | `fling <x1> <y1> <x2> <y2>` | Fling from one point to another | `--speed <n>` (200–40000, px/s) |
99
+ | `drag <x1> <y1> <x2> <y2>` | Drag from one point to another | `--speed <n>` (200–40000, px/s) |
100
+ | `dircfling <direction>` | Quick directional fling (system default speed, ideal for scrolling) | `direction`: `up`, `down`, `left`, `right` |
101
+ | `text <text> [x] [y]` | Input text at a target location or the currently focused field | `--id <id>` (auto-resolves to center), `--window <windowId>` (used with `--id`) |
102
+
103
+ - **Coordinates vs `--id`**: Mutually exclusive. Provide either `x y` or `--id <id>`. For `text`, if neither is given, text goes to the currently focused field.
104
+ - **`--window`**: May only be used together with `--id`. Default is focused window. Secondary display operations via `--id` + `--window` are not supported.
105
+ - **`swipe` vs `dircfling`**: `swipe` requires exact start/end coordinates and supports `--speed`; `dircfling` only needs a direction (`up/down/left/right`) and uses system default speed (ideal for page/list scrolling).
106
+ - **Text encoding**: Special characters in `text` are Base64-encoded internally to safely pass through device shell.
107
+ - `--format json` pairs well with `jq`.
108
+ - `--mode full`: full layout tree, no filtering.
109
+ - `--mode simplified` (default): folds meaningless wrapper containers (non-root, no `id`, no text, not interactive) by lifting their surviving children up. `--depth` truncates after folding.
110
+
111
+ ## 2. Setup
112
+
113
+ ### `devecocli init`
114
+ MUTUALLY EXCLUSIVE modes for setup:
115
+ 1. `--skill` (Default): Install `deveco-cli` skill to AI agents.
116
+ 2. `--mcp`: Configure `deveco-mcp` server (ArkTS/C++ syntax checking).
117
+ *Options*:
118
+ - `--agent <agents>`: Comma-separated (e.g. `opencode,cursor`). Omitting targets all.
119
+ - `--project <path>`: Project-level config (Abs path for MCP).
120
+ - `--path <path>`: Direct skill install path.
121
+ - `-f, --force`: Overwrite existing config.
122
+ *MCP Rules*: Global MCP (no `--project`) only supports `opencode` and `cursor`. Others require `--project`.
123
+
124
+ ### `devecocli auth login`
125
+ Sign in to your Huawei Developer account. Opens a browser for OAuth authentication. Required before `signature generate`.
126
+ *Ex*: `devecocli auth login`
127
+
128
+ ### `devecocli auth logout`
129
+ Sign out and clear locally stored credentials.
130
+
131
+ ### `devecocli auth status`
132
+ Show the current logged-in user.
133
+
134
+ ### `devecocli auth team list`
135
+ List team accounts the current user has joined.
136
+
137
+ ### `devecocli skills`
138
+ Manage HarmonyOS skills in AI agents/projects.
139
+ - `list [-l|--long]` / `find <keyword>`: List or search skills.
140
+ - `add (--all | --skill <name>) [--agent <a,b…>] [--project <path>] [--path <path>] [-f]`: Install.
141
+ - `remove --skill <name> [...]`: Uninstall.
142
+
143
+ ## 3. Maintenance
144
+
145
+ - **`devecocli update`** `[Outside sandbox]`: Update CLI to latest version.
146
+ - **`devecocli serve mcp`**: Host stdio MCP server (`check` tool for `.ets`/C/C++). Used via `init --mcp`. (Env: `PROJECT_PATH`, `DEVECO_PATH`, `NODE_MAX_OLD_SPACE_SIZE`, `DEBUG=1`).
147
+
148
+ ## Recipes
149
+
150
+ - **Fresh checkout to real device**:
151
+ `devecocli build` -> `devecocli device list` -> `devecocli run --device <serial>`
152
+ - **Launch previewer for current project** (instead of `deveco preview`):
153
+ - Single previewer (specific device type): `devecocli run --module entry --device "Pura 90 Pro"`
154
+ - Multi-preview by device types: `devecocli run --module entry --device "Pura 90 Pro,Mate XT"`
155
+ - On HarmonyOS native PC: set `DEVECO_HDC_PORT=<port>` env var before running (previewer mode uses `--device` for product name, not hdc target)
156
+ - Previewer mode is auto-detected: `--device` value matching product names → previewer; serial/IP:port → normal run
157
+ - **Diagnose crash**:
158
+ `devecocli log --crash --bundle-name <bundle>`
159
+ - **Release build**:
160
+ `devecocli build --product oversea --build-mode release`
161
+ - **First-time signing setup**:
162
+ `devecocli login` -> `devecocli signature generate --product default` -> `devecocli build` -> `devecocli run`
163
+
164
+ ## Troubleshooting
165
+
166
+ - **"Product / Build mode `<x>` not found"**: Check `build-profile.json5`.
167
+ - **"Multiple entry modules" / "No entry module"**: Pass `--modules` (build) or `--module` (run).
168
+ - **"No active devices" / "Multiple devices connected"**: Connect a real device (or self-connect via wireless debugging on HarmonyOS native PC). Pass `-t <serial>` (device view) or `--device <name|serial>` (run/log).
169
+ - **`error:install sign info inconsistent`**: Signing key changed. Run `devecocli run --uninstall`.
170
+ - **`skills add` agent not found**: Valid: `codebuddy`, `cursor`, `opencode`, `qoder`, `trae-cn`.
171
+ - **HarmonyOS native (2in1 PC) — `hdc list targets` shows `[Empty]`**: hdc on HarmonyOS does NOT auto-discover the local device. Open "Settings → System → Developer options → Wireless debugging", note the port, then `hdc tconn 127.0.0.1:<port>`. For normal run: pass `--device 127.0.0.1:<port>`. For previewer mode: set `DEVECO_HDC_PORT=<port>` env var (previewer mode uses `--device` for product name, not hdc target).
172
+ - **Previewer mode — "DevEco Studio is not running"**: The previewer's rendering depends on the DevEco Studio desktop process. If the CLI returns this error, do NOT retry. Use natural language to tell the user: "预览器需要 DevEco Studio 处于运行状态,请先手动启动 DevEco Studio,启动后再重试此命令。" On HarmonyOS PC, also remind the user that process detection may be limited by UID isolation (currentUser cannot see Studio's process), but if the CLI reports this error it means detection genuinely failed.