mdk-skills 2.3.18 → 2.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +77 -2
- package/.claude/skills/android-cli/.meta.json +6 -0
- package/.claude/skills/android-cli/SKILL.md +207 -0
- package/.claude/skills/android-cli/references/interact.md +83 -0
- package/.claude/skills/android-cli/references/journeys.md +97 -0
- package/package.json +1 -2
- package/scripts/cli.js +27 -30
- package/scripts/core.js +4 -4
- package/scripts/web-ui/dist/assets/index-CbSAZjIQ.css +1 -0
- package/scripts/web-ui/dist/assets/{index-BkNRMzrZ.js → index-newKnVkp.js} +1552 -1552
- package/scripts/web-ui/dist/index.html +2 -2
- package/scripts/web-ui/server.js +114 -31
- package/scripts/web-ui/src/App.vue +2 -2
- package/scripts/web-ui/src/api/skills.js +27 -2
- package/scripts/web-ui/src/views/Dashboard.vue +458 -34
- package/scripts/web-ui/src/views/SceneSwitch.vue +1 -6
- package/scripts/web-ui/src/views/Settings.vue +14 -14
- package/.claude/.install.log +0 -41
- package/.claude/backups/20260510.153400/.install.log +0 -19
- package/.claude/backups/20260510.153400/profiles.json +0 -67
- package/.claude/backups/20260510.153400/settings.json +0 -29
- package/.claude/backups/20260510.153400/skills/frontend-code-review/.meta.json +0 -6
- package/.claude/backups/20260510.153400/skills/frontend-code-review/SKILL.md +0 -167
- package/.claude/backups/20260510.153400/skills/frontend-code-review/references/checklist.md +0 -298
- package/.claude/backups/20260510.153400/skills/frontend-design/.meta.json +0 -6
- package/.claude/backups/20260510.153400/skills/frontend-design/LICENSE.txt +0 -177
- package/.claude/backups/20260510.153400/skills/frontend-design/SKILL.md +0 -42
- package/.claude/backups/20260510.153400/skills/skill-creator/.meta.json +0 -6
- package/.claude/backups/20260510.153400/skills/skill-creator/SKILL.md +0 -356
- package/.claude/backups/20260510.153400/skills/skill-creator/references/output-patterns.md +0 -82
- package/.claude/backups/20260510.153400/skills/skill-creator/references/workflows.md +0 -28
- package/.claude/backups/20260510.153400/skills/skill-creator/scripts/init_skill.py +0 -303
- package/.claude/backups/20260510.153400/skills/skill-creator/scripts/package_skill.py +0 -110
- package/.claude/backups/20260510.153400/skills/skill-creator/scripts/quick_validate.py +0 -95
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/.meta.json +0 -6
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/SKILL.md +0 -228
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/charts.csv +0 -26
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/colors.csv +0 -97
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/landing.csv +0 -31
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/products.csv +0 -97
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/prompts.csv +0 -24
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/stacks/react.csv +0 -54
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/stacks/vue.csv +0 -50
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/styles.csv +0 -59
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/typography.csv +0 -58
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/scripts/core.py +0 -238
- package/.claude/backups/20260510.153400/skills/ui-ux-pro-max/scripts/search.py +0 -61
- package/.claude/backups/20260510.153400/skills/v3-fe-biz-patterns/.meta.json +0 -6
- package/.claude/backups/20260510.153400/skills/v3-fe-biz-patterns/SKILL.md +0 -26
- package/.claude/backups/20260510.153400/skills/v3-fe-biz-patterns/references/infinite-scroll.md +0 -292
- package/.claude/backups/20260510.153400/skills/v3-fe-biz-patterns/references/pinia-store.md +0 -174
- package/.claude/backups/20260510.153400/skills/v3-fe-biz-patterns/references/service-layer.md +0 -198
- package/.claude/backups/20260510.153400/skills/v3-fe-biz-patterns/references/tab-anchor.md +0 -1125
- package/.claude/backups/20260510.153400/skills/v3-fe-biz-patterns/references/use-loading.md +0 -114
- package/.claude/backups/20260510.153400/skills/vue/.meta.json +0 -6
- package/.claude/backups/20260510.153400/skills/vue/SKILL.md +0 -103
- package/.claude/backups/20260510.153400/skills/vue/references/components.md +0 -323
- package/.claude/backups/20260510.153400/skills/vue/references/composables.md +0 -358
- package/.claude/backups/20260510.153400/skills/vue/references/directives.md +0 -225
- package/.claude/backups/20260510.153400/skills/vue/references/gotchas.md +0 -438
- package/.claude/backups/20260510.153400/skills/vue/references/provide-inject.md +0 -174
- package/.claude/backups/20260510.153400/skills/vue/references/reactivity.md +0 -289
- package/.claude/backups/20260510.153400/skills/vue/references/router.md +0 -181
- package/.claude/backups/20260510.153400/skills/vue/references/testing.md +0 -294
- package/.claude/backups/20260510.153400/skills/vue/references/typescript.md +0 -172
- package/.claude/backups/20260510.153400/skills/vue/references/utils-client.md +0 -156
- package/.claude/backups/20260510.154252/.install.log +0 -28
- package/.claude/backups/20260510.154252/profiles.json +0 -67
- package/.claude/backups/20260510.154252/settings.json +0 -29
- package/.claude/backups/20260510.154252/skills/frontend-code-review/.meta.json +0 -6
- package/.claude/backups/20260510.154252/skills/frontend-code-review/SKILL.md +0 -167
- package/.claude/backups/20260510.154252/skills/frontend-code-review/references/checklist.md +0 -298
- package/.claude/backups/20260510.154252/skills/frontend-design/.meta.json +0 -6
- package/.claude/backups/20260510.154252/skills/frontend-design/LICENSE.txt +0 -177
- package/.claude/backups/20260510.154252/skills/frontend-design/SKILL.md +0 -42
- package/.claude/backups/20260510.154252/skills/skill-creator/.meta.json +0 -6
- package/.claude/backups/20260510.154252/skills/skill-creator/SKILL.md +0 -356
- package/.claude/backups/20260510.154252/skills/skill-creator/references/output-patterns.md +0 -82
- package/.claude/backups/20260510.154252/skills/skill-creator/references/workflows.md +0 -28
- package/.claude/backups/20260510.154252/skills/skill-creator/scripts/init_skill.py +0 -303
- package/.claude/backups/20260510.154252/skills/skill-creator/scripts/package_skill.py +0 -110
- package/.claude/backups/20260510.154252/skills/skill-creator/scripts/quick_validate.py +0 -95
- package/.claude/backups/20260510.154252/skills/test1/.meta.json +0 -6
- package/.claude/backups/20260510.154252/skills/test2/.meta.json +0 -6
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/.meta.json +0 -6
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/SKILL.md +0 -228
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/charts.csv +0 -26
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/colors.csv +0 -97
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/landing.csv +0 -31
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/products.csv +0 -97
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/prompts.csv +0 -24
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/stacks/flutter.csv +0 -53
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +0 -56
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/stacks/nextjs.csv +0 -53
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +0 -51
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +0 -59
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/stacks/react-native.csv +0 -52
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/stacks/react.csv +0 -54
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/stacks/svelte.csv +0 -54
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/stacks/swiftui.csv +0 -51
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/stacks/vue.csv +0 -50
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/styles.csv +0 -59
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/typography.csv +0 -58
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/data/ux-guidelines.csv +0 -100
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/scripts/core.py +0 -238
- package/.claude/backups/20260510.154252/skills/ui-ux-pro-max/scripts/search.py +0 -61
- package/.claude/backups/20260510.154252/skills/v3-fe-biz-patterns/.meta.json +0 -6
- package/.claude/backups/20260510.154252/skills/v3-fe-biz-patterns/SKILL.md +0 -26
- package/.claude/backups/20260510.154252/skills/v3-fe-biz-patterns/references/infinite-scroll.md +0 -292
- package/.claude/backups/20260510.154252/skills/v3-fe-biz-patterns/references/pinia-store.md +0 -174
- package/.claude/backups/20260510.154252/skills/v3-fe-biz-patterns/references/service-layer.md +0 -198
- package/.claude/backups/20260510.154252/skills/v3-fe-biz-patterns/references/tab-anchor.md +0 -1125
- package/.claude/backups/20260510.154252/skills/v3-fe-biz-patterns/references/use-loading.md +0 -114
- package/.claude/backups/20260510.154252/skills/vue/.meta.json +0 -6
- package/.claude/backups/20260510.154252/skills/vue/SKILL.md +0 -103
- package/.claude/backups/20260510.154252/skills/vue/references/components.md +0 -323
- package/.claude/backups/20260510.154252/skills/vue/references/composables.md +0 -358
- package/.claude/backups/20260510.154252/skills/vue/references/directives.md +0 -225
- package/.claude/backups/20260510.154252/skills/vue/references/gotchas.md +0 -438
- package/.claude/backups/20260510.154252/skills/vue/references/provide-inject.md +0 -174
- package/.claude/backups/20260510.154252/skills/vue/references/reactivity.md +0 -289
- package/.claude/backups/20260510.154252/skills/vue/references/router.md +0 -181
- package/.claude/backups/20260510.154252/skills/vue/references/testing.md +0 -294
- package/.claude/backups/20260510.154252/skills/vue/references/typescript.md +0 -172
- package/.claude/backups/20260510.154252/skills/vue/references/utils-client.md +0 -156
- package/.claude/backups/20260511.145306/.install.log +0 -39
- package/.claude/backups/20260511.145306/profiles.json +0 -22
- package/.claude/backups/20260511.145306/settings.json +0 -11
- package/.claude/backups/CLAUDE.md.20260510.151953 +0 -131
- package/.claude/backups/CLAUDE.md.20260510.153300 +0 -131
- package/.claude/backups/CLAUDE.md.20260510.153400 +0 -131
- package/.claude/backups/CLAUDE.md.20260510.154253 +0 -131
- package/.claude/backups/CLAUDE.md.20260511.145306 +0 -131
- package/.claude/skills/frontend-design/LICENSE.txt +0 -177
- package/.claude/skills/frontend-design/SKILL.md +0 -42
- package/scripts/copy-skills.js +0 -86
- package/scripts/web-ui/dist/assets/index-CFkIP_xv.css +0 -1
package/.claude/settings.json
CHANGED
|
@@ -2,6 +2,81 @@
|
|
|
2
2
|
"skills": {
|
|
3
3
|
"template": {
|
|
4
4
|
"enabled": false
|
|
5
|
+
},
|
|
6
|
+
"algorithmic-art": {
|
|
7
|
+
"enabled": false
|
|
8
|
+
},
|
|
9
|
+
"android-cli": {
|
|
10
|
+
"enabled": true
|
|
11
|
+
},
|
|
12
|
+
"brand-guidelines": {
|
|
13
|
+
"enabled": false
|
|
14
|
+
},
|
|
15
|
+
"canvas-design": {
|
|
16
|
+
"enabled": false
|
|
17
|
+
},
|
|
18
|
+
"claude-api": {
|
|
19
|
+
"enabled": false
|
|
20
|
+
},
|
|
21
|
+
"doc-coauthoring": {
|
|
22
|
+
"enabled": false
|
|
23
|
+
},
|
|
24
|
+
"docx": {
|
|
25
|
+
"enabled": false
|
|
26
|
+
},
|
|
27
|
+
"frontend-design": {
|
|
28
|
+
"enabled": false
|
|
29
|
+
},
|
|
30
|
+
"internal-comms": {
|
|
31
|
+
"enabled": false
|
|
32
|
+
},
|
|
33
|
+
"mcp-builder": {
|
|
34
|
+
"enabled": false
|
|
35
|
+
},
|
|
36
|
+
"moark-doc-extraction": {
|
|
37
|
+
"enabled": false
|
|
38
|
+
},
|
|
39
|
+
"moark-image-gen": {
|
|
40
|
+
"enabled": false
|
|
41
|
+
},
|
|
42
|
+
"moark-ocr": {
|
|
43
|
+
"enabled": false
|
|
44
|
+
},
|
|
45
|
+
"moark-text-moderations": {
|
|
46
|
+
"enabled": false
|
|
47
|
+
},
|
|
48
|
+
"moark-tts": {
|
|
49
|
+
"enabled": false
|
|
50
|
+
},
|
|
51
|
+
"moark-web-search": {
|
|
52
|
+
"enabled": false
|
|
53
|
+
},
|
|
54
|
+
"pdf": {
|
|
55
|
+
"enabled": false
|
|
56
|
+
},
|
|
57
|
+
"pptx": {
|
|
58
|
+
"enabled": false
|
|
59
|
+
},
|
|
60
|
+
"skill-creator": {
|
|
61
|
+
"enabled": false
|
|
62
|
+
},
|
|
63
|
+
"slack-gif-creator": {
|
|
64
|
+
"enabled": false
|
|
65
|
+
},
|
|
66
|
+
"template-skill": {
|
|
67
|
+
"enabled": false
|
|
68
|
+
},
|
|
69
|
+
"theme-factory": {
|
|
70
|
+
"enabled": false
|
|
71
|
+
},
|
|
72
|
+
"web-artifacts-builder": {
|
|
73
|
+
"enabled": false
|
|
74
|
+
},
|
|
75
|
+
"webapp-testing": {
|
|
76
|
+
"enabled": false
|
|
77
|
+
},
|
|
78
|
+
"xlsx": {
|
|
79
|
+
"enabled": false
|
|
5
80
|
}
|
|
6
81
|
},
|
|
7
82
|
"always_apply_skills": [
|
|
@@ -11,5 +86,5 @@
|
|
|
11
86
|
"ui-ux-pro-max"
|
|
12
87
|
],
|
|
13
88
|
"_active_profile": "vue3-frontend",
|
|
14
|
-
"_skill_source": "D
|
|
15
|
-
}
|
|
89
|
+
"_skill_source": "D:\\study_work\\study\\my-skills"
|
|
90
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: android-cli
|
|
3
|
+
description: Orchestrates Android development tasks including project creation, deployment, SDK management, and environment diagnostics using the `android` command-line tool.
|
|
4
|
+
license: Complete terms in LICENSE.txt
|
|
5
|
+
metadata:
|
|
6
|
+
author: Google LLC
|
|
7
|
+
keywords:
|
|
8
|
+
- sdk
|
|
9
|
+
- emulator
|
|
10
|
+
- skills
|
|
11
|
+
- docs
|
|
12
|
+
- knowledge base
|
|
13
|
+
- project creation
|
|
14
|
+
- screenshots
|
|
15
|
+
---
|
|
16
|
+
# Android CLI Specialist
|
|
17
|
+
|
|
18
|
+
This skill provides instructions for using the `android` CLI tool. The tool includes various commands for creating projects, running applications, interacting with devices, and managing the CLI environment.
|
|
19
|
+
|
|
20
|
+
## SDK management
|
|
21
|
+
To manage the installation of Android SDKs and tools, use the `sdk` command. For example:
|
|
22
|
+
|
|
23
|
+
- `android sdk install <package>[@<version>]...`: Install specific packages. Multiple packages can be specified, separated by spaces. `<version>` defaults to latest. For example: `android sdk install platforms/android-30@2 platforms/android-34`
|
|
24
|
+
- `android sdk update [<pkg-name>]`: Update a specific package or all packages to the latest version.
|
|
25
|
+
- `android sdk remove <pkg-name>`: Remove a package from the local SDK.
|
|
26
|
+
- `android sdk list --all`: List installed and available SDK packages.
|
|
27
|
+
|
|
28
|
+
## Project creation
|
|
29
|
+
Create projects from templates using the `create` command.
|
|
30
|
+
|
|
31
|
+
For example: `android create empty-activity --name="My App" --output=./my-app`
|
|
32
|
+
|
|
33
|
+
## Interacting with devices
|
|
34
|
+
For more information on interacting with running devices, see [here](references/interact.md)
|
|
35
|
+
|
|
36
|
+
## Running journey tests
|
|
37
|
+
For more information on running journeys, see [here](references/journeys.md)
|
|
38
|
+
|
|
39
|
+
## Doc searching
|
|
40
|
+
The `docs` command searches authoritative, high-quality Android developer documentation in the Android Knowledge Base.
|
|
41
|
+
By providing a few keywords, this tool will return high quality articles that contain examples or guidance on how to use Android APIs or libraries.
|
|
42
|
+
Use this tool to obtain additional information on how to achieve Android-specific tasks or to know more about Android APIs, surfaces, libraries, or devices.
|
|
43
|
+
|
|
44
|
+
Always use this tool to get the most up-to-date information about Android concepts. Typical good use cases are:
|
|
45
|
+
- Finding migration guides for APIs.
|
|
46
|
+
- Finding examples for APIs.
|
|
47
|
+
- Finding up-to-date information about Android APIs.
|
|
48
|
+
- Finding best practices for Android concepts.
|
|
49
|
+
|
|
50
|
+
## Running APKs
|
|
51
|
+
Use the `run` command to run Android apps.
|
|
52
|
+
|
|
53
|
+
## Managing emulators
|
|
54
|
+
|
|
55
|
+
Manage Android Virtual Devices (AVDs) using the `android emulator` command
|
|
56
|
+
|
|
57
|
+
## Capturing screenshots
|
|
58
|
+
|
|
59
|
+
Capture an image of the current screen of a connected Android device and output it to a file using the `android screenshot` command.
|
|
60
|
+
|
|
61
|
+
## Managing skills
|
|
62
|
+
|
|
63
|
+
Manage antigravity agent skills for Android using the `android skills` command.
|
|
64
|
+
|
|
65
|
+
## Inspecting UI Layouts
|
|
66
|
+
|
|
67
|
+
Use the `android layout` command to inspect the UI layout of an Android application. It returns the layout tree of an Android application in JSON format. When debugging UI errors, this is often a much faster approach than taking a screenshot.
|
|
68
|
+
|
|
69
|
+
## Updating the CLI
|
|
70
|
+
|
|
71
|
+
Update the Android CLI using the `android update` command.
|
|
72
|
+
|
|
73
|
+
# `android help` output
|
|
74
|
+
|
|
75
|
+
Usage: android [-hV] [--sdk=PARAM] [COMMAND]
|
|
76
|
+
-h, --help Show this help message and exit.
|
|
77
|
+
--sdk=PARAM Path to the Android SDK
|
|
78
|
+
-V, --version Print version information and exit.
|
|
79
|
+
Commands:
|
|
80
|
+
create Create a new Android project
|
|
81
|
+
describe Analyzes an Android project to generate descriptive metadata.
|
|
82
|
+
docs Android documentation commands
|
|
83
|
+
emulator Emulator commands
|
|
84
|
+
help Shows the help of all commands
|
|
85
|
+
info Print environment information (SDK Location, etc.)
|
|
86
|
+
init Initializes the environment (eg. skills) for Android CLI.
|
|
87
|
+
layout Returns the layout tree of an application
|
|
88
|
+
run Deploy an Android Application
|
|
89
|
+
screen Commands to view the device
|
|
90
|
+
sdk Download and list SDK packages
|
|
91
|
+
skills Manage skills
|
|
92
|
+
update Update the Android CLI
|
|
93
|
+
|
|
94
|
+
create
|
|
95
|
+
Usage: android create [-h] [--verbose] [--list] [--minSdk=api]
|
|
96
|
+
--name=applicationName [-o=dest-path] [template-name]
|
|
97
|
+
Create a new Android project
|
|
98
|
+
[template-name] The template name
|
|
99
|
+
-h, --help Show this help message and exit.
|
|
100
|
+
--minSdk=api The 'minSdk' supported by the application (default
|
|
101
|
+
is defined in the template)
|
|
102
|
+
--name=applicationName
|
|
103
|
+
The name of the application (e.g. 'My Application')
|
|
104
|
+
-o, --output=dest-path The destination project directory path (default is
|
|
105
|
+
'.')
|
|
106
|
+
--verbose Enables verbose output
|
|
107
|
+
--list List all available templates
|
|
108
|
+
|
|
109
|
+
describe
|
|
110
|
+
Usage: android describe [-hV] [--project_dir=PARAM]
|
|
111
|
+
Analyzes an Android project to generate descriptive metadata.
|
|
112
|
+
This command identifies and outputs the paths to JSON files that detail the
|
|
113
|
+
project's structure, including build targets and their corresponding output
|
|
114
|
+
artifact locations (e.g., APKs). This information enables other tools and
|
|
115
|
+
commands to locate build artifacts efficiently.
|
|
116
|
+
-h, --help Show this help message and exit.
|
|
117
|
+
--project_dir=PARAM The project directory to describe
|
|
118
|
+
-V, --version Print version information and exit.
|
|
119
|
+
|
|
120
|
+
docs
|
|
121
|
+
Usage: android docs [-h] [COMMAND]
|
|
122
|
+
Android documentation commands
|
|
123
|
+
-h, --help Show this help message and exit.
|
|
124
|
+
Commands:
|
|
125
|
+
search Search Android documentation
|
|
126
|
+
fetch Fetch Android documentation
|
|
127
|
+
|
|
128
|
+
emulator
|
|
129
|
+
Usage: android emulator [-h] [COMMAND]
|
|
130
|
+
Emulator commands
|
|
131
|
+
-h, --help Show this help message and exit.
|
|
132
|
+
Commands:
|
|
133
|
+
create Creates a virtual device
|
|
134
|
+
start Launches the specified virtual device. This command will return when
|
|
135
|
+
the emulator is fully started and ready to use.
|
|
136
|
+
stop Stops the specified virtual device
|
|
137
|
+
list Lists available virtual devices
|
|
138
|
+
remove Delete a virtual device
|
|
139
|
+
|
|
140
|
+
help
|
|
141
|
+
Usage: android help [COMMAND]
|
|
142
|
+
Shows the help of all commands
|
|
143
|
+
[COMMAND] The command to show help for
|
|
144
|
+
|
|
145
|
+
info
|
|
146
|
+
Usage: android info <field>
|
|
147
|
+
Print environment information (SDK Location, etc.)
|
|
148
|
+
<field> The specific field to print the value of. If omitted print all.
|
|
149
|
+
|
|
150
|
+
init
|
|
151
|
+
Usage: android init
|
|
152
|
+
Initializes the environment (eg. skills) for Android CLI.
|
|
153
|
+
|
|
154
|
+
layout
|
|
155
|
+
Usage: android layout [-dhp] [--device=PARAM] [-o=PARAM]
|
|
156
|
+
Returns the layout tree of an application
|
|
157
|
+
-d, --diff Returns a flat list of the layout elements that have
|
|
158
|
+
changed since the last invocation of ui-dump
|
|
159
|
+
--device=PARAM The device serial number
|
|
160
|
+
-h, --help Show this help message and exit.
|
|
161
|
+
-o, --output=PARAM Writes the layout tree to the specified file or
|
|
162
|
+
directory. If omitted, prints the tree to standard
|
|
163
|
+
output
|
|
164
|
+
-p, --pretty Pretty-prints the returned JSON
|
|
165
|
+
|
|
166
|
+
run
|
|
167
|
+
Usage: android run [-h] [--debug] [--activity=PARAM] [--device=PARAM]
|
|
168
|
+
[--type=PARAM] [--apks=PARAM[,PARAM...]]...
|
|
169
|
+
Deploy an Android Application
|
|
170
|
+
--activity=PARAM The activity name
|
|
171
|
+
--apks=PARAM[,PARAM...]
|
|
172
|
+
The paths to the APKs
|
|
173
|
+
--debug Run in debug mode
|
|
174
|
+
--device=PARAM The device serial number
|
|
175
|
+
-h, --help Show this help message and exit.
|
|
176
|
+
--type=PARAM The component type (ACTIVITY, SERVICE, etc.)
|
|
177
|
+
|
|
178
|
+
screen
|
|
179
|
+
Usage: android screen [-h] [COMMAND]
|
|
180
|
+
Commands to view the device
|
|
181
|
+
-h, --help Show this help message and exit.
|
|
182
|
+
Commands:
|
|
183
|
+
capture Outputs the device screen to a PNG
|
|
184
|
+
resolve Target UI elements visually
|
|
185
|
+
|
|
186
|
+
sdk
|
|
187
|
+
Usage: android sdk [COMMAND]
|
|
188
|
+
Download and list SDK packages
|
|
189
|
+
Commands:
|
|
190
|
+
install Install SDK packages
|
|
191
|
+
update Update one or all packages to the latest version
|
|
192
|
+
remove Remove a package from the SDK
|
|
193
|
+
list List installed and available SDK packages
|
|
194
|
+
|
|
195
|
+
skills
|
|
196
|
+
Usage: android skills [COMMAND]
|
|
197
|
+
Manage skills
|
|
198
|
+
Commands:
|
|
199
|
+
add Install a skill
|
|
200
|
+
remove Remove a skill
|
|
201
|
+
list List available skills
|
|
202
|
+
find Find skills by keyword
|
|
203
|
+
|
|
204
|
+
update
|
|
205
|
+
Usage: android update [--url=PARAM]
|
|
206
|
+
Update the Android CLI
|
|
207
|
+
--url=PARAM The URL to download the update from
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Tools
|
|
2
|
+
Run `android layout --help` and `android screen --help`.
|
|
3
|
+
|
|
4
|
+
## UI Dump
|
|
5
|
+
`android layout` returns a flat JSON list of the UI elements on screen.
|
|
6
|
+
`android layout --diff` returns a flat JSON list of the UI elements that have changed since the last call to `layout` or `layout --diff`
|
|
7
|
+
|
|
8
|
+
Each JSON object represents a UI element in the Android app. The following properties may be present:
|
|
9
|
+
- `text` - any literal text the element contains
|
|
10
|
+
- `resourceId` - the Android resource id used to refer to the element
|
|
11
|
+
- `contentDesc` - a description of a UI element for use by accessibility tools
|
|
12
|
+
- `interactions` - the set of user interactions the element supports. May contain one or more of: `checkable`, `clickable`, `focusable`, `scrollable`, `long-clickable`, `password`
|
|
13
|
+
- `state` - the set of states the element is in. May contain one or more of `checked`, `focused`, `selected`
|
|
14
|
+
- `bounds` - the screen coordinates of the bounding rectangle of the element, in the format `[min X,min Y][max X, max Y]`
|
|
15
|
+
- `center` - the screen coordinates of the center of the element, in the format `[x,y]`
|
|
16
|
+
- `off-screen` - if true, the element is in the UI hierarchy but not visible; it may require scrolling to view.
|
|
17
|
+
|
|
18
|
+
Use `layout` as a primary means of examining an Android app. Use `layout --diff` to focus on changes and to keep your context small.
|
|
19
|
+
Example: When entering digits into a calculator, use `layout --diff` to output only the digit readout element.
|
|
20
|
+
|
|
21
|
+
`layout` may fail due to the app displaying a WebView or animation; in these cases, use `android screen --annotate` to inspect the app.
|
|
22
|
+
This failure will likely resolve after navigating away from the current screen.
|
|
23
|
+
|
|
24
|
+
## Screenshot
|
|
25
|
+
`android screen capture -o <file path>` saves a PNG of the current device screen to `<file path>`
|
|
26
|
+
|
|
27
|
+
Use `screen capture` as a secondary means of examining an Android app
|
|
28
|
+
Examples:
|
|
29
|
+
- Understanding the content of an on-screen image
|
|
30
|
+
- Looking at a `WebView` (web content does not always appear in the ui dump)
|
|
31
|
+
- Trying to find a UI element by its visual appearance
|
|
32
|
+
|
|
33
|
+
**IMPORTANT**: Always *VISUALLY* examine the PNG image returned from `android screen` BEFORE doing anything else.
|
|
34
|
+
|
|
35
|
+
## Annotated Screenshot
|
|
36
|
+
`android screen capture --annotate -o <file path>`
|
|
37
|
+
`android screen resolve --screen <path> --string <string>`
|
|
38
|
+
|
|
39
|
+
The `--annotate` command adds numerical labels and bounding boxes around UI elements. Use this command to locate UI elements that cannot
|
|
40
|
+
be located in the `layout` output.
|
|
41
|
+
|
|
42
|
+
**IMPORTANT**: When using `android screen --annotate`, always *VISUALLY* examine the resulting PNG file.
|
|
43
|
+
|
|
44
|
+
To refer to these labels in input commands, use `screen resolve` to convert labels into coordinates:
|
|
45
|
+
|
|
46
|
+
`android screen resolve --screen <file path> --string "#3"` returns `<x coord of region 3> <y coord of region 3>`
|
|
47
|
+
|
|
48
|
+
To save turns, you can combine shell commands:
|
|
49
|
+
|
|
50
|
+
`adb shell input $(android screen resolve --screen screen.png --string "tap #34")`
|
|
51
|
+
|
|
52
|
+
This command taps on region #34 from `screen.png`
|
|
53
|
+
|
|
54
|
+
## Input
|
|
55
|
+
Use `adb shell input` for interacting with Android devices.
|
|
56
|
+
Refer to the `"interactions"` property of an element for what interactions can be performed on a particular element.
|
|
57
|
+
|
|
58
|
+
Interact with UI elements with their `center` coordinate or their `bounds` coordinates:
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"key": -248568265,
|
|
62
|
+
"class": "android.widget.Button",
|
|
63
|
+
"bounds": "[138,9][167,38]",
|
|
64
|
+
"center": "[152,23]"
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
To tap on this button, you would execute `adb shell input tap 152 23`. This taps the center.
|
|
68
|
+
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"key": 12487234,
|
|
72
|
+
"class": "com.example.ui.ScrollableList",
|
|
73
|
+
"bounds": "[100,200][400,600]",
|
|
74
|
+
"center": "[250,400]"
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
To scroll down on this list, you would execute `adb shell input swipe 250 400 600 500`. This swipes from the center to the bottom over 500ms.
|
|
78
|
+
|
|
79
|
+
# Android Interaction Rules
|
|
80
|
+
1. Always ensure text input fields have `"focused"` in their `"state"` list before entering text
|
|
81
|
+
2. If an element has `"scrollable"` in its `"interactions"` list, try scrolling it when looking for missing UI elements
|
|
82
|
+
2. Always scroll slowly when executing scroll inputs. The 5th argument to `adb shell input swipe` controls scroll duration.
|
|
83
|
+
3. Content may take time to load; if a `layout` is missing information after you take an action, wait a few seconds, then perform `layout --diff` to see if anything changes.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
A journey is an XML-specified test of an Android app's behavior. It consists of a list of `<action>` elements. For example:
|
|
2
|
+
```xml
|
|
3
|
+
<journey name="My Journey">
|
|
4
|
+
<description>
|
|
5
|
+
A sample journey to illustrate the format
|
|
6
|
+
</description>
|
|
7
|
+
<actions>
|
|
8
|
+
<action>
|
|
9
|
+
Tap the "Home" icon
|
|
10
|
+
</action>
|
|
11
|
+
<action>
|
|
12
|
+
Verify that the app is on its Home screen
|
|
13
|
+
</action>
|
|
14
|
+
</actions>
|
|
15
|
+
</journey>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Evaluate a journey by proceeding through the `<actions>` list in sequential order. Evaluate each `<action>` block individually.
|
|
19
|
+
A journey succeeds if all elements in the `<actions>` list succeed.
|
|
20
|
+
|
|
21
|
+
A journey is a test case for an app. The journey XML is the source of truth; if the app disagrees with the journey, the app has failed.
|
|
22
|
+
Additionally, if the app exits, crashes, or freezes, journey evaluation stops and the journey fails.
|
|
23
|
+
|
|
24
|
+
**IMPORTANT** - Execute each step EXACTLY as written, and independently of other steps! If an action says to `"tap the first search result"`,
|
|
25
|
+
you MUST find the search results and tap the first one. Do this even if you believe you know the intent behind the action.
|
|
26
|
+
|
|
27
|
+
## Taking Actions
|
|
28
|
+
Some `<action>` elements specify UI interactions to perform on the running Android app. Perform the interaction and verify that the app does
|
|
29
|
+
not crash or behave in an unexpected manner. This is the *only* verification you should perform for an `<action>`.
|
|
30
|
+
|
|
31
|
+
If the interaction cannot be performed as specified, the journey fails.
|
|
32
|
+
Example:
|
|
33
|
+
```<action>Click the red button</action>```
|
|
34
|
+
If you determine a red button is not present in the UI, the journey fails.
|
|
35
|
+
|
|
36
|
+
If the text of an `<action>` specifies a list of actions, break it into sub-actions and evaluate them individually:
|
|
37
|
+
Example:
|
|
38
|
+
```<action>Search for soda and add the first result to the cart</action>```
|
|
39
|
+
This should be evaluated as:
|
|
40
|
+
```
|
|
41
|
+
<action>Search for soda</action>
|
|
42
|
+
<action>Add the first result to the cart</action>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If an `<action>` contains something that is not a specification for a UI interaction, alert the user that the journey is malformed and exit
|
|
46
|
+
early, specifying the error in question.
|
|
47
|
+
|
|
48
|
+
## Verifying Expectations
|
|
49
|
+
`<action>` elements that begin with "check" or "verify" specify expectations for the current state of the Android app. Determine the current
|
|
50
|
+
state of the app and check if the expectations are met.
|
|
51
|
+
|
|
52
|
+
Determine the current state of the app by inspecting the current screen of the device without interacting with it.
|
|
53
|
+
Example:
|
|
54
|
+
```<action>Check if "Switch 2" is visible on the screen</action>```
|
|
55
|
+
This requires only inspecting the current screen, not scrolling or interacting. If "Switch 2" is not currently visible, the action fails.
|
|
56
|
+
|
|
57
|
+
If the expectations are not met, mark the `<action>` as a failure and the journey evaluation ends. A single `<action>` may contain
|
|
58
|
+
multiple expectations.
|
|
59
|
+
Example:
|
|
60
|
+
```<action>Verify that the app is on the Home screen, the Home icon is blue, and the temperature is displayed</action>```
|
|
61
|
+
This `<action>` fails if ANY of the following are false:
|
|
62
|
+
- The app is on the Home screen
|
|
63
|
+
- There is a Home icon, and it is blue
|
|
64
|
+
- A temperature is displayed
|
|
65
|
+
|
|
66
|
+
## Handling failure
|
|
67
|
+
When running a journey, evaluate it as a test. Failure is acceptable, and often expected. Proper reporting of failures is the priority.
|
|
68
|
+
|
|
69
|
+
Keep debugging and troubleshooting to a minimum; assume that tools are showing you the correct output every time. The goal is to determine
|
|
70
|
+
if the *current* Android app can correctly handle the *current* steps outlined in the journey. Suggestions for bug fixes, clarification, or
|
|
71
|
+
other improvements should be kept to journey evaluation summary at the end.
|
|
72
|
+
|
|
73
|
+
## Summarizing
|
|
74
|
+
For each `<action>` you evaluated, output JSON describing the results.
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
{
|
|
78
|
+
"journey:", The name of the journey
|
|
79
|
+
"results:" [
|
|
80
|
+
{
|
|
81
|
+
// A string containing the full text of the <action>
|
|
82
|
+
"action": "Click the blue button,
|
|
83
|
+
// "PASSED" if the instruction was evaluated, "FAILED" if the instruction could not be evaluated, or "SKIPPED" if journey evaluation ended early because an instruction failed
|
|
84
|
+
"status": "PASSED",
|
|
85
|
+
// A list of the ADB commands executed while evaluating the instruction,
|
|
86
|
+
"commands": [ "adb input swipe 490 200 500 500 500", "adb input tap 45 920" ],
|
|
87
|
+
// Failure reasons, feedback, or other useful information
|
|
88
|
+
"comment": "The journey step doesn't specify that the button requires scrolling to see",
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"action": "The home screen is shown",
|
|
92
|
+
"status": "FAILED",
|
|
93
|
+
"comment": "The settings page was shown",
|
|
94
|
+
},
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mdk-skills",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.20",
|
|
4
4
|
"description": "mdk-engineer - 沉稳靠谱的前端开发助手 Claude Skills 配置包,一键注入 .claude/ 技能目录和 CLAUDE.md 人设配置",
|
|
5
5
|
"author": "XiaoMa",
|
|
6
6
|
"license": "MIT",
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
"mdk-skills": "./scripts/cli.js"
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
|
-
"postinstall": "node scripts/copy-skills.js",
|
|
19
18
|
"build:ui": "cd scripts/web-ui && npx vite build",
|
|
20
19
|
"start": "node scripts/web-ui/server.js"
|
|
21
20
|
},
|
package/scripts/cli.js
CHANGED
|
@@ -14,12 +14,13 @@ const projectRoot = (() => {
|
|
|
14
14
|
return process.cwd();
|
|
15
15
|
}
|
|
16
16
|
})();
|
|
17
|
-
|
|
18
|
-
let skillsSource = getSkillsSource(projectRoot, packageDir);
|
|
17
|
+
let skillsSource = getSkillsSource(projectRoot);
|
|
19
18
|
const claudeDest = path.join(projectRoot, ".claude");
|
|
20
19
|
const skillsDest = path.join(claudeDest, "skills");
|
|
21
20
|
const settingsPath = path.join(claudeDest, "settings.json");
|
|
22
|
-
const pkgSkillsSource =
|
|
21
|
+
const pkgSkillsSource = skillsSource
|
|
22
|
+
? path.join(skillsSource, ".claude", "skills")
|
|
23
|
+
: null;
|
|
23
24
|
|
|
24
25
|
// ---------- 文件写入 ----------
|
|
25
26
|
|
|
@@ -406,8 +407,7 @@ function cmdConnect(repoPath) {
|
|
|
406
407
|
settings._skill_source = repoPath;
|
|
407
408
|
writeSettings(settings);
|
|
408
409
|
|
|
409
|
-
console.log(` ✅
|
|
410
|
-
console.log(` 💡 运行 npx mdk-skills 选择场景\n`);
|
|
410
|
+
console.log(` ✅ 技能目录已设置: ${repoPath}\n`);
|
|
411
411
|
}
|
|
412
412
|
|
|
413
413
|
function cmdSync() {
|
|
@@ -469,10 +469,10 @@ function cmdSync() {
|
|
|
469
469
|
console.log(" ✅ 已同步到仓库\n");
|
|
470
470
|
}
|
|
471
471
|
|
|
472
|
-
function
|
|
472
|
+
function cmdClearSource() {
|
|
473
473
|
const settings = readSettings();
|
|
474
474
|
if (!settings._skill_source) {
|
|
475
|
-
console.log(" ⚠️
|
|
475
|
+
console.log(" ⚠️ 当前未设置任何技能目录\n");
|
|
476
476
|
return;
|
|
477
477
|
}
|
|
478
478
|
|
|
@@ -480,13 +480,13 @@ function cmdDisconnect() {
|
|
|
480
480
|
delete settings._skill_source;
|
|
481
481
|
writeSettings(settings);
|
|
482
482
|
|
|
483
|
-
console.log(` ✅
|
|
484
|
-
console.log(` 💡
|
|
483
|
+
console.log(` ✅ 已清除技能目录设置: ${oldPath}\n`);
|
|
484
|
+
console.log(` 💡 运行 npx mdk-skills ui 重新设置\n`);
|
|
485
485
|
}
|
|
486
486
|
|
|
487
487
|
// ---------- 主入口 ----------
|
|
488
488
|
|
|
489
|
-
const COMMANDS = ["list", "connect", "sync", "
|
|
489
|
+
const COMMANDS = ["list", "connect", "sync", "clear-source", "ui"];
|
|
490
490
|
|
|
491
491
|
async function main() {
|
|
492
492
|
const command = process.argv[2];
|
|
@@ -505,43 +505,40 @@ async function main() {
|
|
|
505
505
|
mdk-skills CLI
|
|
506
506
|
|
|
507
507
|
用法:
|
|
508
|
-
npx mdk-skills
|
|
509
|
-
npx mdk-skills list 查看已安装的技能
|
|
510
|
-
npx mdk-skills connect 绑定本地技能源仓库路径
|
|
508
|
+
npx mdk-skills connect 设置本地技能目录路径
|
|
511
509
|
npx mdk-skills sync 将项目中的技能修改推送到仓库
|
|
512
|
-
npx mdk-skills
|
|
510
|
+
npx mdk-skills clear-source 清除技能目录设置
|
|
513
511
|
npx mdk-skills ui 启动 Web 管理面板
|
|
514
|
-
npx mdk-skills --connect
|
|
512
|
+
npx mdk-skills --connect 设置本地目录后直接进入场景选择
|
|
515
513
|
npx mdk-skills --help 显示帮助
|
|
516
514
|
|
|
517
|
-
|
|
518
|
-
|
|
515
|
+
需要先设置技能目录后才能使用完整功能。
|
|
516
|
+
首次使用请运行 npx mdk-skills ui 进行设置。
|
|
519
517
|
|
|
520
518
|
示例:
|
|
521
519
|
npx mdk-skills --connect D:/dev/mdk-skills
|
|
522
520
|
npx mdk-skills connect D:/dev/mdk-skills
|
|
523
521
|
npx mdk-skills sync
|
|
524
|
-
npx mdk-skills
|
|
525
|
-
npx mdk-skills
|
|
526
|
-
npx mdk-skills list
|
|
522
|
+
npx mdk-skills ui
|
|
527
523
|
`);
|
|
528
524
|
} else if (command === "--connect") {
|
|
529
525
|
cmdConnect(args[0]);
|
|
530
|
-
skillsSource = getSkillsSource(projectRoot
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
526
|
+
skillsSource = getSkillsSource(projectRoot);
|
|
527
|
+
if (skillsSource) {
|
|
528
|
+
const profiles = loadProfiles();
|
|
529
|
+
if (profiles) {
|
|
530
|
+
await startSceneSelection();
|
|
531
|
+
} else {
|
|
532
|
+
await startInteractiveMenu();
|
|
533
|
+
}
|
|
536
534
|
}
|
|
537
|
-
} else if (command === "list") {
|
|
538
|
-
await cmdList();
|
|
539
535
|
} else if (command === "connect") {
|
|
540
536
|
cmdConnect(args[0]);
|
|
541
537
|
} else if (command === "sync") {
|
|
538
|
+
if (!skillsSource) { console.log(" ⚠️ 未设置技能目录,请先运行 npx mdk-skills ui\n"); return; }
|
|
542
539
|
cmdSync();
|
|
543
|
-
} else if (command === "
|
|
544
|
-
|
|
540
|
+
} else if (command === "clear-source") {
|
|
541
|
+
cmdClearSource();
|
|
545
542
|
} else if (command === "ui") {
|
|
546
543
|
require("./web-ui/server");
|
|
547
544
|
} else {
|
package/scripts/core.js
CHANGED
|
@@ -271,10 +271,10 @@ function getPackageSkills(packageDir) {
|
|
|
271
271
|
|
|
272
272
|
/**
|
|
273
273
|
* 解析技能源路径:
|
|
274
|
-
*
|
|
275
|
-
*
|
|
274
|
+
* 从 settings.json 的 _skill_source 字段读取用户指定的本地技能目录
|
|
275
|
+
* 没有设置则返回 null
|
|
276
276
|
*/
|
|
277
|
-
function getSkillsSource(projectRoot
|
|
277
|
+
function getSkillsSource(projectRoot) {
|
|
278
278
|
const settingsPath = path.join(projectRoot, ".claude", "settings.json");
|
|
279
279
|
if (fs.existsSync(settingsPath)) {
|
|
280
280
|
try {
|
|
@@ -282,7 +282,7 @@ function getSkillsSource(projectRoot, fallbackDir) {
|
|
|
282
282
|
if (s._skill_source) return s._skill_source;
|
|
283
283
|
} catch {}
|
|
284
284
|
}
|
|
285
|
-
return
|
|
285
|
+
return null;
|
|
286
286
|
}
|
|
287
287
|
|
|
288
288
|
/**
|