packwise-skills 1.0.0 → 1.2.0
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/.cursorrules +23 -23
- package/CLAUDE.md +25 -25
- package/LICENSE +21 -0
- package/README.md +404 -295
- package/audit.md +224 -224
- package/bin/packwise.js +322 -155
- package/install.sh +123 -0
- package/package.json +32 -31
- package/skill.md +944 -719
- package/sub-skills/ai/local-llm.md +183 -183
- package/sub-skills/ai/python-ml.md +164 -164
- package/sub-skills/backend/go-server.md +184 -184
- package/sub-skills/backend/java-spring.md +241 -241
- package/sub-skills/backend/node-server.md +164 -164
- package/sub-skills/backend/php-laravel.md +175 -175
- package/sub-skills/backend/python-server.md +164 -164
- package/sub-skills/backend/rust-backend.md +118 -118
- package/sub-skills/cli/python-cli.md +236 -236
- package/sub-skills/cli/sdk-library.md +497 -497
- package/sub-skills/cloud/ci-cd-pipelines.md +350 -350
- package/sub-skills/cloud/docker.md +191 -191
- package/sub-skills/cloud/kubernetes.md +277 -277
- package/sub-skills/cloud/payment-integration.md +307 -307
- package/sub-skills/cross-platform/multiplatform.md +252 -252
- package/sub-skills/desktop/electron.md +783 -783
- package/sub-skills/desktop/game-dev.md +443 -443
- package/sub-skills/desktop/native-app.md +123 -123
- package/sub-skills/desktop/scenarios.md +443 -443
- package/sub-skills/desktop/smart-platforms.md +324 -324
- package/sub-skills/desktop/tauri.md +428 -428
- package/sub-skills/desktop/vr-ar.md +252 -252
- package/sub-skills/desktop/web-to-desktop.md +153 -153
- package/sub-skills/embedded/car-infotainment.md +129 -129
- package/sub-skills/embedded/esp32.md +184 -184
- package/sub-skills/embedded/ros.md +150 -150
- package/sub-skills/embedded/stm32.md +160 -160
- package/sub-skills/mobile/android.md +322 -322
- package/sub-skills/mobile/capacitor.md +232 -232
- package/sub-skills/mobile/flutter-mobile.md +138 -138
- package/sub-skills/mobile/harmonyos.md +150 -150
- package/sub-skills/mobile/ios.md +245 -245
- package/sub-skills/mobile/react-native.md +443 -443
- package/sub-skills/mobile/wearables.md +230 -230
- package/sub-skills/plugins/browser-extension.md +308 -308
- package/sub-skills/plugins/jetbrains-plugin.md +226 -226
- package/sub-skills/plugins/vscode-extension.md +204 -204
- package/sub-skills/security/security-tools.md +174 -174
- package/sub-skills/web/monorepo.md +274 -274
- package/sub-skills/web/pwa.md +220 -220
- package/sub-skills/web/serverless-edge.md +295 -295
- package/sub-skills/web/spa.md +266 -266
- package/sub-skills/web/ssr.md +228 -228
- package/sub-skills/web/wasm.md +243 -243
|
@@ -1,204 +1,204 @@
|
|
|
1
|
-
# VS Code Extension Build Sub-Skill
|
|
2
|
-
|
|
3
|
-
Develop and publish Visual Studio Code extensions.
|
|
4
|
-
|
|
5
|
-
**Current version**: VS Code 1.96+ / @vscode/vsce 2.x (2025-2026)
|
|
6
|
-
|
|
7
|
-
## When to Use
|
|
8
|
-
|
|
9
|
-
- Editor enhancements (themes, snippets, keybindings)
|
|
10
|
-
- Language support (syntax highlighting, IntelliSense, debugging)
|
|
11
|
-
- Developer tools (linters, formatters, test runners)
|
|
12
|
-
- AI coding assistants
|
|
13
|
-
- Workflow automation
|
|
14
|
-
|
|
15
|
-
## Prerequisites
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# Node.js 20+
|
|
19
|
-
# Install VS Code Extension Manager
|
|
20
|
-
npm install -g @vscode/vsce
|
|
21
|
-
|
|
22
|
-
# Install Yeoman generator for scaffolding
|
|
23
|
-
npm install -g yo generator-code
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Project Setup
|
|
27
|
-
|
|
28
|
-
```bash
|
|
29
|
-
# Generate extension scaffold
|
|
30
|
-
yo code
|
|
31
|
-
# Select: New Extension (TypeScript)
|
|
32
|
-
# Name: my-extension
|
|
33
|
-
# Description: My awesome extension
|
|
34
|
-
# Package manager: npm
|
|
35
|
-
|
|
36
|
-
# Project structure:
|
|
37
|
-
my-extension/
|
|
38
|
-
├── src/
|
|
39
|
-
│ └── extension.ts ← Main entry point
|
|
40
|
-
├── package.json ← Extension manifest
|
|
41
|
-
├── tsconfig.json ← TypeScript config
|
|
42
|
-
├── .vscodeignore ← Files to exclude from .vsix
|
|
43
|
-
└── README.md
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## package.json (Extension Manifest)
|
|
47
|
-
|
|
48
|
-
```json
|
|
49
|
-
{
|
|
50
|
-
"name": "my-extension",
|
|
51
|
-
"displayName": "My Extension",
|
|
52
|
-
"description": "My awesome VS Code extension",
|
|
53
|
-
"version": "1.0.0",
|
|
54
|
-
"engines": { "vscode": "^1.96.0" },
|
|
55
|
-
"categories": ["Other"],
|
|
56
|
-
"activationEvents": [],
|
|
57
|
-
"main": "./out/extension.js",
|
|
58
|
-
"contributes": {
|
|
59
|
-
"commands": [
|
|
60
|
-
{
|
|
61
|
-
"command": "myExtension.helloWorld",
|
|
62
|
-
"title": "Hello World"
|
|
63
|
-
}
|
|
64
|
-
],
|
|
65
|
-
"keybindings": [
|
|
66
|
-
{
|
|
67
|
-
"command": "myExtension.helloWorld",
|
|
68
|
-
"key": "ctrl+shift+h",
|
|
69
|
-
"mac": "cmd+shift+h"
|
|
70
|
-
}
|
|
71
|
-
],
|
|
72
|
-
"configuration": {
|
|
73
|
-
"title": "My Extension",
|
|
74
|
-
"properties": {
|
|
75
|
-
"myExtension.enableFeature": {
|
|
76
|
-
"type": "boolean",
|
|
77
|
-
"default": true,
|
|
78
|
-
"description": "Enable the awesome feature"
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
"scripts": {
|
|
84
|
-
"compile": "tsc -p ./",
|
|
85
|
-
"watch": "tsc -watch -p ./",
|
|
86
|
-
"package": "vsce package",
|
|
87
|
-
"publish": "vsce publish"
|
|
88
|
-
},
|
|
89
|
-
"devDependencies": {
|
|
90
|
-
"@types/vscode": "^1.96.0",
|
|
91
|
-
"@types/node": "^22.0.0",
|
|
92
|
-
"typescript": "^5.7.0"
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
## Build & Test
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
# Compile TypeScript
|
|
101
|
-
npm run compile
|
|
102
|
-
|
|
103
|
-
# Run in Extension Development Host (VS Code launches with your extension)
|
|
104
|
-
# Press F5 in VS Code, or:
|
|
105
|
-
code --extensionDevelopmentPath=.
|
|
106
|
-
|
|
107
|
-
# Run tests
|
|
108
|
-
npm test
|
|
109
|
-
|
|
110
|
-
# Lint
|
|
111
|
-
npm run lint
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Package (.vsix)
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
# Package as .vsix file
|
|
118
|
-
vsce package
|
|
119
|
-
# Output: my-extension-1.0.0.vsix
|
|
120
|
-
|
|
121
|
-
# Install locally for testing
|
|
122
|
-
code --install-extension my-extension-1.0.0.vsix
|
|
123
|
-
|
|
124
|
-
# Package with specific version
|
|
125
|
-
vsce package --pre-release # Pre-release version
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
## Publish to Marketplace
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
# 1. Create Personal Access Token (PAT)
|
|
132
|
-
# dev.azure.com → User Settings → Personal Access Tokens
|
|
133
|
-
# Scope: Marketplace → Manage
|
|
134
|
-
|
|
135
|
-
# 2. Create publisher (one-time)
|
|
136
|
-
# marketplace.visualstudio.com → Create Publisher
|
|
137
|
-
|
|
138
|
-
# 3. Login
|
|
139
|
-
vsce login YOUR_PUBLISHER_NAME
|
|
140
|
-
# Enter PAT when prompted
|
|
141
|
-
|
|
142
|
-
# 4. Publish
|
|
143
|
-
vsce publish # Publish current version
|
|
144
|
-
vsce publish minor # Bump minor version + publish
|
|
145
|
-
vsce publish patch # Bump patch version + publish
|
|
146
|
-
vsce publish 2.0.0 # Set specific version + publish
|
|
147
|
-
|
|
148
|
-
# 5. Pre-release
|
|
149
|
-
vsce publish --pre-release
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
## Testing
|
|
153
|
-
|
|
154
|
-
```typescript
|
|
155
|
-
// src/test/suite/extension.test.ts
|
|
156
|
-
import * as assert from 'assert';
|
|
157
|
-
import * as vscode from 'vscode';
|
|
158
|
-
|
|
159
|
-
suite('Extension Test Suite', () => {
|
|
160
|
-
test('Command should be registered', async () => {
|
|
161
|
-
const commands = await vscode.commands.getCommands(true);
|
|
162
|
-
assert.ok(commands.includes('myExtension.helloWorld'));
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
test('Configuration should have default value', () => {
|
|
166
|
-
const config = vscode.workspace.getConfiguration('myExtension');
|
|
167
|
-
assert.strictEqual(config.get('enableFeature'), true);
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
# Run tests
|
|
174
|
-
npm test
|
|
175
|
-
# Or with coverage
|
|
176
|
-
npm run test:coverage
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
## Extension Types
|
|
180
|
-
|
|
181
|
-
| Type | Use Case | Key APIs |
|
|
182
|
-
|------|----------|---------|
|
|
183
|
-
| Commands | Custom actions | `vscode.commands.registerCommand` |
|
|
184
|
-
| Webview | Custom UI panels | `vscode.window.createWebviewPanel` |
|
|
185
|
-
| Language Server | Language support | `vscode-languageclient` / `vscode-languageserver` |
|
|
186
|
-
| Tree View | Custom sidebars | `TreeDataProvider` |
|
|
187
|
-
| Debug Adapter | Custom debuggers | `DebugAdapterDescriptorFactory` |
|
|
188
|
-
| Notebook | Jupyter-like notebooks | `NotebookSerializer` |
|
|
189
|
-
| Chat Participant | AI chat integration | `vscode.chat.createChatParticipant` |
|
|
190
|
-
|
|
191
|
-
## Common Pitfalls
|
|
192
|
-
|
|
193
|
-
| Issue | Fix |
|
|
194
|
-
|-------|-----|
|
|
195
|
-
| Build failure | Confirm `tsconfig.json` `outDir` matches `main` field in package.json |
|
|
196
|
-
| Publish rejected | Ensure all required fields: `name`, `displayName`, `description`, `version`, `engines` |
|
|
197
|
-
| Size limit | .vsix max 100MB; use `.vscodeignore` to exclude node_modules source |
|
|
198
|
-
| Icon requirement | At least 128x128 PNG; set in `package.json` → `icon` |
|
|
199
|
-
| Extension not activating | Check `activationEvents`; use `"*"` for testing (slow), be specific in production |
|
|
200
|
-
| Webview not showing | Check CSP headers; set `enableScripts: true` |
|
|
201
|
-
| Tests failing in CI | Use `@vscode/test-electron` for integration tests |
|
|
202
|
-
| API version mismatch | Check `engines.vscode` in package.json matches your target version |
|
|
203
|
-
| `@types/vscode` version | Should match `engines.vscode` version |
|
|
204
|
-
| Extension size too large | Use esbuild/webpack bundler; exclude devDependencies |
|
|
1
|
+
# VS Code Extension Build Sub-Skill
|
|
2
|
+
|
|
3
|
+
Develop and publish Visual Studio Code extensions.
|
|
4
|
+
|
|
5
|
+
**Current version**: VS Code 1.96+ / @vscode/vsce 2.x (2025-2026)
|
|
6
|
+
|
|
7
|
+
## When to Use
|
|
8
|
+
|
|
9
|
+
- Editor enhancements (themes, snippets, keybindings)
|
|
10
|
+
- Language support (syntax highlighting, IntelliSense, debugging)
|
|
11
|
+
- Developer tools (linters, formatters, test runners)
|
|
12
|
+
- AI coding assistants
|
|
13
|
+
- Workflow automation
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Node.js 20+
|
|
19
|
+
# Install VS Code Extension Manager
|
|
20
|
+
npm install -g @vscode/vsce
|
|
21
|
+
|
|
22
|
+
# Install Yeoman generator for scaffolding
|
|
23
|
+
npm install -g yo generator-code
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Project Setup
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# Generate extension scaffold
|
|
30
|
+
yo code
|
|
31
|
+
# Select: New Extension (TypeScript)
|
|
32
|
+
# Name: my-extension
|
|
33
|
+
# Description: My awesome extension
|
|
34
|
+
# Package manager: npm
|
|
35
|
+
|
|
36
|
+
# Project structure:
|
|
37
|
+
my-extension/
|
|
38
|
+
├── src/
|
|
39
|
+
│ └── extension.ts ← Main entry point
|
|
40
|
+
├── package.json ← Extension manifest
|
|
41
|
+
├── tsconfig.json ← TypeScript config
|
|
42
|
+
├── .vscodeignore ← Files to exclude from .vsix
|
|
43
|
+
└── README.md
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## package.json (Extension Manifest)
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"name": "my-extension",
|
|
51
|
+
"displayName": "My Extension",
|
|
52
|
+
"description": "My awesome VS Code extension",
|
|
53
|
+
"version": "1.0.0",
|
|
54
|
+
"engines": { "vscode": "^1.96.0" },
|
|
55
|
+
"categories": ["Other"],
|
|
56
|
+
"activationEvents": [],
|
|
57
|
+
"main": "./out/extension.js",
|
|
58
|
+
"contributes": {
|
|
59
|
+
"commands": [
|
|
60
|
+
{
|
|
61
|
+
"command": "myExtension.helloWorld",
|
|
62
|
+
"title": "Hello World"
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"keybindings": [
|
|
66
|
+
{
|
|
67
|
+
"command": "myExtension.helloWorld",
|
|
68
|
+
"key": "ctrl+shift+h",
|
|
69
|
+
"mac": "cmd+shift+h"
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"configuration": {
|
|
73
|
+
"title": "My Extension",
|
|
74
|
+
"properties": {
|
|
75
|
+
"myExtension.enableFeature": {
|
|
76
|
+
"type": "boolean",
|
|
77
|
+
"default": true,
|
|
78
|
+
"description": "Enable the awesome feature"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"scripts": {
|
|
84
|
+
"compile": "tsc -p ./",
|
|
85
|
+
"watch": "tsc -watch -p ./",
|
|
86
|
+
"package": "vsce package",
|
|
87
|
+
"publish": "vsce publish"
|
|
88
|
+
},
|
|
89
|
+
"devDependencies": {
|
|
90
|
+
"@types/vscode": "^1.96.0",
|
|
91
|
+
"@types/node": "^22.0.0",
|
|
92
|
+
"typescript": "^5.7.0"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Build & Test
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# Compile TypeScript
|
|
101
|
+
npm run compile
|
|
102
|
+
|
|
103
|
+
# Run in Extension Development Host (VS Code launches with your extension)
|
|
104
|
+
# Press F5 in VS Code, or:
|
|
105
|
+
code --extensionDevelopmentPath=.
|
|
106
|
+
|
|
107
|
+
# Run tests
|
|
108
|
+
npm test
|
|
109
|
+
|
|
110
|
+
# Lint
|
|
111
|
+
npm run lint
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Package (.vsix)
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Package as .vsix file
|
|
118
|
+
vsce package
|
|
119
|
+
# Output: my-extension-1.0.0.vsix
|
|
120
|
+
|
|
121
|
+
# Install locally for testing
|
|
122
|
+
code --install-extension my-extension-1.0.0.vsix
|
|
123
|
+
|
|
124
|
+
# Package with specific version
|
|
125
|
+
vsce package --pre-release # Pre-release version
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Publish to Marketplace
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# 1. Create Personal Access Token (PAT)
|
|
132
|
+
# dev.azure.com → User Settings → Personal Access Tokens
|
|
133
|
+
# Scope: Marketplace → Manage
|
|
134
|
+
|
|
135
|
+
# 2. Create publisher (one-time)
|
|
136
|
+
# marketplace.visualstudio.com → Create Publisher
|
|
137
|
+
|
|
138
|
+
# 3. Login
|
|
139
|
+
vsce login YOUR_PUBLISHER_NAME
|
|
140
|
+
# Enter PAT when prompted
|
|
141
|
+
|
|
142
|
+
# 4. Publish
|
|
143
|
+
vsce publish # Publish current version
|
|
144
|
+
vsce publish minor # Bump minor version + publish
|
|
145
|
+
vsce publish patch # Bump patch version + publish
|
|
146
|
+
vsce publish 2.0.0 # Set specific version + publish
|
|
147
|
+
|
|
148
|
+
# 5. Pre-release
|
|
149
|
+
vsce publish --pre-release
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Testing
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
// src/test/suite/extension.test.ts
|
|
156
|
+
import * as assert from 'assert';
|
|
157
|
+
import * as vscode from 'vscode';
|
|
158
|
+
|
|
159
|
+
suite('Extension Test Suite', () => {
|
|
160
|
+
test('Command should be registered', async () => {
|
|
161
|
+
const commands = await vscode.commands.getCommands(true);
|
|
162
|
+
assert.ok(commands.includes('myExtension.helloWorld'));
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
test('Configuration should have default value', () => {
|
|
166
|
+
const config = vscode.workspace.getConfiguration('myExtension');
|
|
167
|
+
assert.strictEqual(config.get('enableFeature'), true);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# Run tests
|
|
174
|
+
npm test
|
|
175
|
+
# Or with coverage
|
|
176
|
+
npm run test:coverage
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
## Extension Types
|
|
180
|
+
|
|
181
|
+
| Type | Use Case | Key APIs |
|
|
182
|
+
|------|----------|---------|
|
|
183
|
+
| Commands | Custom actions | `vscode.commands.registerCommand` |
|
|
184
|
+
| Webview | Custom UI panels | `vscode.window.createWebviewPanel` |
|
|
185
|
+
| Language Server | Language support | `vscode-languageclient` / `vscode-languageserver` |
|
|
186
|
+
| Tree View | Custom sidebars | `TreeDataProvider` |
|
|
187
|
+
| Debug Adapter | Custom debuggers | `DebugAdapterDescriptorFactory` |
|
|
188
|
+
| Notebook | Jupyter-like notebooks | `NotebookSerializer` |
|
|
189
|
+
| Chat Participant | AI chat integration | `vscode.chat.createChatParticipant` |
|
|
190
|
+
|
|
191
|
+
## Common Pitfalls
|
|
192
|
+
|
|
193
|
+
| Issue | Fix |
|
|
194
|
+
|-------|-----|
|
|
195
|
+
| Build failure | Confirm `tsconfig.json` `outDir` matches `main` field in package.json |
|
|
196
|
+
| Publish rejected | Ensure all required fields: `name`, `displayName`, `description`, `version`, `engines` |
|
|
197
|
+
| Size limit | .vsix max 100MB; use `.vscodeignore` to exclude node_modules source |
|
|
198
|
+
| Icon requirement | At least 128x128 PNG; set in `package.json` → `icon` |
|
|
199
|
+
| Extension not activating | Check `activationEvents`; use `"*"` for testing (slow), be specific in production |
|
|
200
|
+
| Webview not showing | Check CSP headers; set `enableScripts: true` |
|
|
201
|
+
| Tests failing in CI | Use `@vscode/test-electron` for integration tests |
|
|
202
|
+
| API version mismatch | Check `engines.vscode` in package.json matches your target version |
|
|
203
|
+
| `@types/vscode` version | Should match `engines.vscode` version |
|
|
204
|
+
| Extension size too large | Use esbuild/webpack bundler; exclude devDependencies |
|