workspace-architect 1.5.45 → 1.6.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/README.md +43 -7
- package/assets-manifest.json +32 -2
- package/bin/cli.js +138 -9
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -22,6 +22,8 @@ No installation required! Use directly with `npx`:
|
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
24
|
npx workspace-architect list
|
|
25
|
+
# or use the shorter alias
|
|
26
|
+
npx wsa list
|
|
25
27
|
```
|
|
26
28
|
|
|
27
29
|
Or install globally if you prefer:
|
|
@@ -36,18 +38,24 @@ List all available assets:
|
|
|
36
38
|
|
|
37
39
|
```bash
|
|
38
40
|
npx workspace-architect list
|
|
41
|
+
# or use the shorter alias
|
|
42
|
+
npx wsa list
|
|
39
43
|
```
|
|
40
44
|
|
|
41
45
|
Download a collection for web development:
|
|
42
46
|
|
|
43
47
|
```bash
|
|
44
48
|
npx workspace-architect download collections:web-frontend-development
|
|
49
|
+
# or
|
|
50
|
+
npx wsa download collections:web-frontend-development
|
|
45
51
|
```
|
|
46
52
|
|
|
47
53
|
Download a specific agent:
|
|
48
54
|
|
|
49
55
|
```bash
|
|
50
56
|
npx workspace-architect download agents:azure-architect
|
|
57
|
+
# or
|
|
58
|
+
npx wsa download agents:azure-architect
|
|
51
59
|
```
|
|
52
60
|
|
|
53
61
|
## Usage
|
|
@@ -59,12 +67,14 @@ View all available assets or filter by type:
|
|
|
59
67
|
```bash
|
|
60
68
|
# List all assets
|
|
61
69
|
npx workspace-architect list
|
|
70
|
+
# or
|
|
71
|
+
npx wsa list
|
|
62
72
|
|
|
63
73
|
# List specific types
|
|
64
74
|
npx workspace-architect list instructions
|
|
65
|
-
npx
|
|
66
|
-
npx
|
|
67
|
-
npx
|
|
75
|
+
npx wsa list agents
|
|
76
|
+
npx wsa list prompts
|
|
77
|
+
npx wsa list collections
|
|
68
78
|
```
|
|
69
79
|
|
|
70
80
|
### Downloading Assets
|
|
@@ -73,19 +83,21 @@ Download assets to your project (default location: `.github/<type>/`):
|
|
|
73
83
|
|
|
74
84
|
```bash
|
|
75
85
|
npx workspace-architect download <type>:<name>
|
|
86
|
+
# or
|
|
87
|
+
npx wsa download <type>:<name>
|
|
76
88
|
```
|
|
77
89
|
|
|
78
90
|
**Examples:**
|
|
79
91
|
|
|
80
92
|
```bash
|
|
81
93
|
# Download an instruction
|
|
82
|
-
npx
|
|
94
|
+
npx wsa download instructions:reactjs
|
|
83
95
|
|
|
84
96
|
# Download an agent
|
|
85
|
-
npx
|
|
97
|
+
npx wsa download agents:planner
|
|
86
98
|
|
|
87
99
|
# Download a complete collection
|
|
88
|
-
npx
|
|
100
|
+
npx wsa download collections:devops-essentials
|
|
89
101
|
```
|
|
90
102
|
|
|
91
103
|
### CLI Options
|
|
@@ -96,15 +108,38 @@ npx workspace-architect download collections:devops-essentials
|
|
|
96
108
|
|
|
97
109
|
## Asset Types
|
|
98
110
|
|
|
99
|
-
Workspace Architect provides
|
|
111
|
+
Workspace Architect provides five types of assets:
|
|
100
112
|
|
|
101
113
|
| Type | Description | Location |
|
|
102
114
|
|------|-------------|----------|
|
|
103
115
|
| **Instructions** | System-level guidelines for Copilot context | `.github/copilot-instructions.md` |
|
|
104
116
|
| **Prompts** | Reusable templates for specific tasks | `.github/prompts/` |
|
|
105
117
|
| **Agents** | Specialized personas defining Copilot behavior | `.github/agents/` |
|
|
118
|
+
| **Skills** | Claude Skills with templates, scripts, and resources | `.github/skills/` |
|
|
106
119
|
| **Collections** | Bundled assets for specific domains or workflows | Multiple locations |
|
|
107
120
|
|
|
121
|
+
### What are Skills?
|
|
122
|
+
|
|
123
|
+
**Skills** are an emerging standard for packaging AI agent capabilities. Compatible with Claude, GitHub Copilot, and other AI platforms, Skills are folder-based assets containing:
|
|
124
|
+
|
|
125
|
+
- **SKILL.md**: Main instructions with metadata
|
|
126
|
+
- **Templates**: Document or code templates
|
|
127
|
+
- **Scripts**: Automation scripts (downloaded but not executed)
|
|
128
|
+
- **Resources**: Reference materials and examples
|
|
129
|
+
|
|
130
|
+
Skills follow the [open Agent Skills specification](https://agentskills.io/) and work across multiple AI platforms.
|
|
131
|
+
|
|
132
|
+
**Example:**
|
|
133
|
+
```bash
|
|
134
|
+
# Download a Skill
|
|
135
|
+
npx workspace-architect download skills:example-planner
|
|
136
|
+
|
|
137
|
+
# List all Skills
|
|
138
|
+
npx workspace-architect list skills
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
For more information, see [Skills User Guide](docs/skills-guide.md) and [Skills vs Agents](docs/skills-vs-agents.md).
|
|
142
|
+
|
|
108
143
|
## Roadmap
|
|
109
144
|
|
|
110
145
|
See [ROADMAP.md](ROADMAP.md) for our development timeline, upcoming features, and current capabilities.
|
|
@@ -182,6 +217,7 @@ npm run start:registry
|
|
|
182
217
|
# Terminal 2: Publish and test
|
|
183
218
|
npm run publish:local
|
|
184
219
|
npx --registry http://localhost:4873 workspace-architect list
|
|
220
|
+
npx --registry http://localhost:4873 wsa list
|
|
185
221
|
```
|
|
186
222
|
|
|
187
223
|
## Project Structure
|
package/assets-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.
|
|
3
|
-
"generatedAt": "
|
|
2
|
+
"version": "1.1.0",
|
|
3
|
+
"generatedAt": "2026-01-08T01:36:03.988Z",
|
|
4
4
|
"assets": {
|
|
5
5
|
"agents:4.1-Beast": {
|
|
6
6
|
"path": "assets/agents/4.1-Beast.agent.md",
|
|
@@ -770,6 +770,12 @@
|
|
|
770
770
|
"title": "a11y",
|
|
771
771
|
"type": "instructions"
|
|
772
772
|
},
|
|
773
|
+
"instructions:agents": {
|
|
774
|
+
"path": "assets/instructions/agents.instructions.md",
|
|
775
|
+
"description": "Guidelines for creating custom agent files for GitHub Copilot",
|
|
776
|
+
"title": "agents",
|
|
777
|
+
"type": "instructions"
|
|
778
|
+
},
|
|
773
779
|
"instructions:ai-prompt-engineering-safety-best-practices": {
|
|
774
780
|
"path": "assets/instructions/ai-prompt-engineering-safety-best-practices.instructions.md",
|
|
775
781
|
"description": "Comprehensive best practices for AI prompt engineering, safety frameworks, bias mitigation, and responsible AI usage for Copilot and LLMs.",
|
|
@@ -2687,6 +2693,15 @@
|
|
|
2687
2693
|
"prompts:suggest-awesome-github-copilot-prompts"
|
|
2688
2694
|
]
|
|
2689
2695
|
},
|
|
2696
|
+
"collections:claude-skills-starter": {
|
|
2697
|
+
"path": "assets/collections/claude-skills-starter.json",
|
|
2698
|
+
"description": "Essential Claude Skills for software development, planning, and automation workflows.",
|
|
2699
|
+
"title": "Claude Skills Starter Pack",
|
|
2700
|
+
"type": "collections",
|
|
2701
|
+
"items": [
|
|
2702
|
+
"skills:example-planner"
|
|
2703
|
+
]
|
|
2704
|
+
},
|
|
2690
2705
|
"collections:cpp-development": {
|
|
2691
2706
|
"path": "assets/collections/cpp-development.json",
|
|
2692
2707
|
"description": "C++ programming language resources.",
|
|
@@ -3891,6 +3906,21 @@
|
|
|
3891
3906
|
"instructions:java-mcp-server",
|
|
3892
3907
|
"instructions:typescript-5-es2022"
|
|
3893
3908
|
]
|
|
3909
|
+
},
|
|
3910
|
+
"skills:example-planner": {
|
|
3911
|
+
"path": "assets/skills/example-planner",
|
|
3912
|
+
"description": "Create detailed implementation plans for software features and refactoring tasks. Use this skill when planning new features, architectural changes, or major refactoring efforts.",
|
|
3913
|
+
"title": "example-planner",
|
|
3914
|
+
"type": "skills",
|
|
3915
|
+
"files": [
|
|
3916
|
+
"SKILL.md"
|
|
3917
|
+
],
|
|
3918
|
+
"metadata": {
|
|
3919
|
+
"version": "1.0.0",
|
|
3920
|
+
"maintainer": "workspace-architect",
|
|
3921
|
+
"category": "planning",
|
|
3922
|
+
"license": "MIT"
|
|
3923
|
+
}
|
|
3894
3924
|
}
|
|
3895
3925
|
}
|
|
3896
3926
|
}
|
package/bin/cli.js
CHANGED
|
@@ -17,19 +17,19 @@ const MANIFEST_PATH = path.join(ROOT_DIR, 'assets-manifest.json');
|
|
|
17
17
|
const IS_LOCAL = await fs.pathExists(ASSETS_DIR);
|
|
18
18
|
|
|
19
19
|
program
|
|
20
|
-
.name('
|
|
21
|
-
.description('CLI to download GitHub Copilot instructions, prompts, and
|
|
20
|
+
.name('workspace-architect')
|
|
21
|
+
.description('CLI to download GitHub Copilot instructions, prompts, and agents (alias: wsa)')
|
|
22
22
|
.version('1.0.0');
|
|
23
23
|
|
|
24
24
|
program
|
|
25
25
|
.command('list [type]')
|
|
26
|
-
.description('List available assets (instructions, prompts, agents, collections)')
|
|
26
|
+
.description('List available assets (instructions, prompts, agents, skills, collections)')
|
|
27
27
|
.action(async (type) => {
|
|
28
28
|
try {
|
|
29
29
|
if (type) {
|
|
30
30
|
await listAssets(type);
|
|
31
31
|
} else {
|
|
32
|
-
const types = ['instructions', 'prompts', 'agents', 'collections'];
|
|
32
|
+
const types = ['instructions', 'prompts', 'agents', 'skills', 'collections'];
|
|
33
33
|
for (const t of types) {
|
|
34
34
|
await listAssets(t);
|
|
35
35
|
}
|
|
@@ -83,13 +83,22 @@ async function listAssets(type) {
|
|
|
83
83
|
console.log(chalk.blue.bold(`\nAvailable ${type}:`));
|
|
84
84
|
for (const file of files) {
|
|
85
85
|
const filePath = path.join(dirPath, file);
|
|
86
|
+
const stat = await fs.stat(filePath);
|
|
86
87
|
let description = '';
|
|
87
88
|
|
|
88
89
|
try {
|
|
89
|
-
if (type === '
|
|
90
|
+
if (type === 'skills' && stat.isDirectory()) {
|
|
91
|
+
// For Skills, read SKILL.md from directory
|
|
92
|
+
const skillMdPath = path.join(filePath, 'SKILL.md');
|
|
93
|
+
if (await fs.pathExists(skillMdPath)) {
|
|
94
|
+
const content = await fs.readFile(skillMdPath, 'utf8');
|
|
95
|
+
const parsed = matter(content);
|
|
96
|
+
description = parsed.data.description || '';
|
|
97
|
+
}
|
|
98
|
+
} else if (type === 'collections') {
|
|
90
99
|
const content = await fs.readJson(filePath);
|
|
91
100
|
description = content.description || '';
|
|
92
|
-
} else {
|
|
101
|
+
} else if (!stat.isDirectory()) {
|
|
93
102
|
const content = await fs.readFile(filePath, 'utf8');
|
|
94
103
|
const parsed = matter(content);
|
|
95
104
|
description = parsed.data.description || '';
|
|
@@ -98,7 +107,7 @@ async function listAssets(type) {
|
|
|
98
107
|
// Ignore errors reading metadata
|
|
99
108
|
}
|
|
100
109
|
|
|
101
|
-
const name = path.parse(file).name;
|
|
110
|
+
const name = type === 'skills' && stat.isDirectory() ? file : path.parse(file).name;
|
|
102
111
|
console.log(` - ${name}${description ? ` - ${description}` : ''}`);
|
|
103
112
|
}
|
|
104
113
|
} else {
|
|
@@ -118,7 +127,8 @@ async function listAssets(type) {
|
|
|
118
127
|
|
|
119
128
|
console.log(chalk.blue.bold(`\nAvailable ${type}:`));
|
|
120
129
|
for (const asset of assets) {
|
|
121
|
-
|
|
130
|
+
const versionInfo = asset.metadata?.version ? ` (v${asset.metadata.version})` : '';
|
|
131
|
+
console.log(` - ${asset.id}${versionInfo}${asset.description ? ` - ${asset.description}` : ''}`);
|
|
122
132
|
}
|
|
123
133
|
}
|
|
124
134
|
}
|
|
@@ -130,7 +140,7 @@ async function downloadAsset(id, options) {
|
|
|
130
140
|
throw new Error('Invalid ID format. Use type:name (e.g., instructions:basic-setup)');
|
|
131
141
|
}
|
|
132
142
|
|
|
133
|
-
const validTypes = ['instructions', 'prompts', 'agents', 'collections'];
|
|
143
|
+
const validTypes = ['instructions', 'prompts', 'agents', 'skills', 'collections'];
|
|
134
144
|
if (!validTypes.includes(type)) {
|
|
135
145
|
throw new Error(`Invalid type: ${type}. Valid types are: ${validTypes.join(', ')}`);
|
|
136
146
|
}
|
|
@@ -173,6 +183,12 @@ async function downloadAsset(id, options) {
|
|
|
173
183
|
return;
|
|
174
184
|
}
|
|
175
185
|
|
|
186
|
+
// Handle Skills (multi-file folder-based assets)
|
|
187
|
+
if (type === 'skills') {
|
|
188
|
+
await downloadSkill(name, options);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
|
|
176
192
|
// Handle Single Asset
|
|
177
193
|
let content = '';
|
|
178
194
|
let fileName = '';
|
|
@@ -263,4 +279,117 @@ async function downloadAsset(id, options) {
|
|
|
263
279
|
console.log(chalk.green(`Successfully downloaded ${fileName} to ${destDir}`));
|
|
264
280
|
}
|
|
265
281
|
|
|
282
|
+
async function downloadSkill(name, options) {
|
|
283
|
+
const skillName = name;
|
|
284
|
+
let skillFiles = [];
|
|
285
|
+
let skillPath = '';
|
|
286
|
+
|
|
287
|
+
if (IS_LOCAL) {
|
|
288
|
+
// Local mode: copy from assets/skills
|
|
289
|
+
skillPath = path.join(ASSETS_DIR, 'skills', skillName);
|
|
290
|
+
|
|
291
|
+
if (!await fs.pathExists(skillPath)) {
|
|
292
|
+
throw new Error(`Skill not found: skills/${skillName}`);
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// Get all files in the skill directory
|
|
296
|
+
const getAllFiles = async (dir, baseDir = dir) => {
|
|
297
|
+
const files = [];
|
|
298
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
299
|
+
|
|
300
|
+
for (const entry of entries) {
|
|
301
|
+
const fullPath = path.join(dir, entry.name);
|
|
302
|
+
if (entry.isDirectory()) {
|
|
303
|
+
const subFiles = await getAllFiles(fullPath, baseDir);
|
|
304
|
+
files.push(...subFiles);
|
|
305
|
+
} else {
|
|
306
|
+
const relativePath = path.relative(baseDir, fullPath);
|
|
307
|
+
files.push({ relative: relativePath, full: fullPath });
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return files;
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
skillFiles = await getAllFiles(skillPath);
|
|
314
|
+
} else {
|
|
315
|
+
// Production mode: fetch from manifest and download from GitHub
|
|
316
|
+
const manifest = await getManifest();
|
|
317
|
+
const key = `skills:${skillName}`;
|
|
318
|
+
const asset = manifest.assets[key];
|
|
319
|
+
|
|
320
|
+
if (!asset) {
|
|
321
|
+
throw new Error(`Skill not found: ${key}`);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
skillPath = asset.path;
|
|
325
|
+
skillFiles = asset.files.map(file => ({
|
|
326
|
+
relative: file,
|
|
327
|
+
url: `https://raw.githubusercontent.com/archubbuck/workspace-architect/main/${asset.path}/${file}`
|
|
328
|
+
}));
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
// Determine destination
|
|
332
|
+
let destDir;
|
|
333
|
+
if (options.output) {
|
|
334
|
+
destDir = path.resolve(process.cwd(), options.output);
|
|
335
|
+
} else {
|
|
336
|
+
destDir = path.join(process.cwd(), '.github', 'skills', skillName);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (options.dryRun) {
|
|
340
|
+
console.log(chalk.cyan(`[Dry Run] Would create skill directory at ${destDir}`));
|
|
341
|
+
for (const file of skillFiles) {
|
|
342
|
+
console.log(chalk.cyan(` Would copy: ${file.relative}`));
|
|
343
|
+
}
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Check if skill already exists
|
|
348
|
+
if (await fs.pathExists(destDir) && !options.force) {
|
|
349
|
+
const { overwrite } = await inquirer.prompt([
|
|
350
|
+
{
|
|
351
|
+
type: 'confirm',
|
|
352
|
+
name: 'overwrite',
|
|
353
|
+
message: `Skill ${skillName} already exists in ${destDir}. Overwrite?`,
|
|
354
|
+
default: false
|
|
355
|
+
}
|
|
356
|
+
]);
|
|
357
|
+
|
|
358
|
+
if (!overwrite) {
|
|
359
|
+
console.log(chalk.yellow('Operation cancelled.'));
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
console.log(chalk.blue(`Downloading skill: ${skillName}`));
|
|
365
|
+
|
|
366
|
+
// Create skill directory
|
|
367
|
+
await fs.ensureDir(destDir);
|
|
368
|
+
|
|
369
|
+
// Download/copy all files
|
|
370
|
+
for (const file of skillFiles) {
|
|
371
|
+
const destPath = path.join(destDir, file.relative);
|
|
372
|
+
const destFileDir = path.dirname(destPath);
|
|
373
|
+
await fs.ensureDir(destFileDir);
|
|
374
|
+
|
|
375
|
+
if (IS_LOCAL) {
|
|
376
|
+
// Copy from local assets
|
|
377
|
+
await fs.copyFile(file.full, destPath);
|
|
378
|
+
} else {
|
|
379
|
+
// Download from GitHub
|
|
380
|
+
const response = await fetch(file.url);
|
|
381
|
+
if (!response.ok) {
|
|
382
|
+
console.warn(chalk.yellow(`Warning: Failed to download ${file.relative}`));
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
385
|
+
const content = await response.text();
|
|
386
|
+
await fs.writeFile(destPath, content);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
console.log(chalk.dim(` Downloaded: ${file.relative}`));
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
console.log(chalk.green(`Successfully downloaded skill ${skillName} to ${destDir} (${skillFiles.length} files)`));
|
|
393
|
+
}
|
|
394
|
+
|
|
266
395
|
program.parse();
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "workspace-architect",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "A comprehensive library of specialized AI agents and personas for GitHub Copilot, ranging from architectural planning and specific tech stacks to advanced cognitive reasoning models.",
|
|
5
5
|
"bin": {
|
|
6
|
-
"workspace-architect": "./bin/cli.js"
|
|
6
|
+
"workspace-architect": "./bin/cli.js",
|
|
7
|
+
"wsa": "./bin/cli.js"
|
|
7
8
|
},
|
|
8
9
|
"scripts": {
|
|
9
10
|
"start:registry": "verdaccio --config verdaccio/config.yaml",
|
|
@@ -12,6 +13,8 @@
|
|
|
12
13
|
"generate-manifest": "node scripts/generate-manifest.js",
|
|
13
14
|
"prepublishOnly": "npm run generate-manifest",
|
|
14
15
|
"fetch-upstream": "node scripts/fetch-upstream-assets.js",
|
|
16
|
+
"sync-skills": "node scripts/sync-anthropic-skills.js",
|
|
17
|
+
"validate-skills": "node scripts/validate-skills.js",
|
|
15
18
|
"release": "release-it",
|
|
16
19
|
"publish:local": "npm run release && npm publish --registry http://localhost:4873"
|
|
17
20
|
},
|