agentic-skill-mill 1.0.6 → 1.0.8
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 +27 -1
- package/install-local.ps1 +385 -0
- package/install-local.sh +0 -0
- package/install.ps1 +48 -0
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -12,12 +12,24 @@ bash install-local.sh # local repo setup (auto-detect tools)
|
|
|
12
12
|
bash install-local.sh --all # local repo setup for all tools
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
+
```powershell
|
|
16
|
+
npm install
|
|
17
|
+
npm run build
|
|
18
|
+
npm run compile
|
|
19
|
+
powershell -ExecutionPolicy Bypass -File .\install-local.ps1
|
|
20
|
+
powershell -ExecutionPolicy Bypass -File .\install-local.ps1 --all
|
|
21
|
+
```
|
|
22
|
+
|
|
15
23
|
## One-Line Remote Install (No Clone)
|
|
16
24
|
|
|
17
25
|
```bash
|
|
18
26
|
bash <(curl -fsSL https://agenticskillmill.com/install.sh) --all
|
|
19
27
|
```
|
|
20
28
|
|
|
29
|
+
```powershell
|
|
30
|
+
powershell -ExecutionPolicy Bypass -Command "& ([ScriptBlock]::Create((Invoke-RestMethod 'https://agenticskillmill.com/install.ps1'))) --all"
|
|
31
|
+
```
|
|
32
|
+
|
|
21
33
|
This bootstrap script installs the npm utility library globally, then installs skills for the targets you specify.
|
|
22
34
|
|
|
23
35
|
## Architecture
|
|
@@ -81,14 +93,16 @@ compiled/ # Machine-generated, one subdir per IDE target
|
|
|
81
93
|
contributions/ # Field observations from real runs
|
|
82
94
|
site/ # GitHub Pages site (agenticskillmill.com)
|
|
83
95
|
install-local.sh # One-command local setup: build CLI + install skills
|
|
96
|
+
install-local.ps1 # One-command local setup for Windows PowerShell
|
|
84
97
|
install.sh # One-command remote bootstrap: install package + skills
|
|
98
|
+
install.ps1 # One-command remote bootstrap for Windows PowerShell
|
|
85
99
|
```
|
|
86
100
|
|
|
87
101
|
## How to Add a Skill
|
|
88
102
|
|
|
89
103
|
1. Create the source file at `skill/skills/<name>/<name>.md` with YAML frontmatter
|
|
90
104
|
2. Register it in `skill/build/manifest.json`
|
|
91
|
-
3. Add the skill name to the `SKILLS` array in `install-local.sh`
|
|
105
|
+
3. Add the skill name to the `SKILLS` array in `install-local.sh` and `install-local.ps1`
|
|
92
106
|
4. Compile and validate: `npm run compile && npm run compile:validate`
|
|
93
107
|
|
|
94
108
|
## How to Add a Fragment
|
|
@@ -148,3 +162,15 @@ Workflow behavior:
|
|
|
148
162
|
5. `npm run compile:validate`
|
|
149
163
|
6. `git push --follow-tags`
|
|
150
164
|
7. `npm publish --access public`
|
|
165
|
+
|
|
166
|
+
## Ecosystem
|
|
167
|
+
|
|
168
|
+
Agentic Skill Mill is the parent project that defines the skill-system-template architecture. The following projects are built on the same fragment-composition, 7-target compilation, and companion-CLI pattern:
|
|
169
|
+
|
|
170
|
+
| Project | What it does | Site | Repo |
|
|
171
|
+
|---------|-------------|------|------|
|
|
172
|
+
| **[AgentThreader](https://github.com/barretts/AgentThreader)** | Manifest-driven agentic CLI orchestration with structured contracts, resumable state, and bounded self-healing | [agentthreader.com](https://agentthreader.com) | [GitHub](https://github.com/barretts/AgentThreader) |
|
|
173
|
+
| **[TechDemoDirector](https://github.com/barretts/TechDemoDirector)** | Code walk-through presentation scripting with file:line references and speaker notes | [Site](https://barretts.github.io/TechDemoDirector) | [GitHub](https://github.com/barretts/TechDemoDirector) |
|
|
174
|
+
| **[AgentHistoric](https://github.com/barretts/AgentHistoric)** | Mixture-of-Experts persona prompt system with philosophical grounding and adversarial verification | [agenthistoric.com](https://agenthistoric.com) | [GitHub](https://github.com/barretts/AgentHistoric) |
|
|
175
|
+
|
|
176
|
+
AgentHistoric shares the compilation tooling but has its own MoE routing layer and regression suite. The other two are direct descendants of the skill-system-template.
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
$ErrorActionPreference = 'Stop'
|
|
2
|
+
|
|
3
|
+
$ProjectName = 'agentic-skill-mill'
|
|
4
|
+
$CliBinName = 'skillmill'
|
|
5
|
+
$ManagedMarker = 'managed_by: agentic-skill-mill'
|
|
6
|
+
$Skills = @('agentic-skill-mill')
|
|
7
|
+
$SkillDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
8
|
+
$UserHome = [Environment]::GetFolderPath('UserProfile')
|
|
9
|
+
$AppData = [Environment]::GetFolderPath('ApplicationData')
|
|
10
|
+
$CodeXHomeDir = if ($env:CODEX_HOME) { $env:CODEX_HOME } else { Join-Path $UserHome '.codex' }
|
|
11
|
+
|
|
12
|
+
$ClaudeSkillsDir = Join-Path $UserHome '.claude\skills'
|
|
13
|
+
$CursorRulesDir = Join-Path $UserHome '.cursor\rules'
|
|
14
|
+
$CursorSkillsDir = Join-Path $UserHome '.cursor\skills'
|
|
15
|
+
$WindsurfRulesDir = Join-Path $UserHome '.windsurf\rules'
|
|
16
|
+
$WindsurfSkillsDir = Join-Path $UserHome '.codeium\windsurf\skills'
|
|
17
|
+
$OpenCodeAgentsDirs = @(
|
|
18
|
+
Join-Path $AppData 'opencode\agents',
|
|
19
|
+
Join-Path $UserHome '.opencode\agents'
|
|
20
|
+
)
|
|
21
|
+
$CodeXSkillsDir = Join-Path $CodeXHomeDir 'skills'
|
|
22
|
+
$CompiledDir = Join-Path $SkillDir 'compiled'
|
|
23
|
+
|
|
24
|
+
function Show-Help {
|
|
25
|
+
Write-Host 'Usage: powershell -ExecutionPolicy Bypass -File .\install-local.ps1 [options]'
|
|
26
|
+
Write-Host ''
|
|
27
|
+
Write-Host 'Options:'
|
|
28
|
+
Write-Host ' --claude Install skills for Claude Code'
|
|
29
|
+
Write-Host ' --cursor Install skills for Cursor'
|
|
30
|
+
Write-Host ' --windsurf Install skills for Windsurf'
|
|
31
|
+
Write-Host ' --opencode Install skills for OpenCode'
|
|
32
|
+
Write-Host ' --codex Install skills for Codex'
|
|
33
|
+
Write-Host ' --all Install for all five tools'
|
|
34
|
+
Write-Host ' --skills-only Skip npm install/build/link (just copy skills)'
|
|
35
|
+
Write-Host ' --uninstall Remove installed skills from target tools'
|
|
36
|
+
Write-Host ' --compile-only Generate compiled/ output directory (no install)'
|
|
37
|
+
Write-Host ' -h, --help Show this help'
|
|
38
|
+
Write-Host ''
|
|
39
|
+
Write-Host 'No flags = auto-detect installed tools.'
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function Invoke-Step {
|
|
43
|
+
param(
|
|
44
|
+
[Parameter(Mandatory = $true)][string]$FilePath,
|
|
45
|
+
[string[]]$Arguments = @(),
|
|
46
|
+
[string]$WorkingDirectory = $SkillDir,
|
|
47
|
+
[switch]$AllowFailure
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
$argText = if ($Arguments.Count -gt 0) { ' ' + ($Arguments -join ' ') } else { '' }
|
|
51
|
+
Write-Host ("> {0}{1}" -f $FilePath, $argText)
|
|
52
|
+
Push-Location $WorkingDirectory
|
|
53
|
+
try {
|
|
54
|
+
& $FilePath @Arguments
|
|
55
|
+
if (-not $AllowFailure -and $LASTEXITCODE -ne 0) {
|
|
56
|
+
throw "Command failed with exit code $LASTEXITCODE: $FilePath$argText"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
Pop-Location
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function Ensure-Directory {
|
|
65
|
+
param([Parameter(Mandatory = $true)][string]$Path)
|
|
66
|
+
New-Item -ItemType Directory -Force -Path $Path | Out-Null
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function Remove-ManagedFiles {
|
|
70
|
+
param([Parameter(Mandatory = $true)][string]$Path)
|
|
71
|
+
|
|
72
|
+
if (-not (Test-Path -LiteralPath $Path -PathType Container)) {
|
|
73
|
+
return
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
Get-ChildItem -LiteralPath $Path -Recurse -File | ForEach-Object {
|
|
77
|
+
$file = $_
|
|
78
|
+
$matches = Select-String -Path $file.FullName -SimpleMatch -Pattern $ManagedMarker -Quiet -ErrorAction SilentlyContinue
|
|
79
|
+
if ($matches) {
|
|
80
|
+
Remove-Item -LiteralPath $file.FullName -Force
|
|
81
|
+
Write-Host " Removed: $($file.FullName)"
|
|
82
|
+
$parent = Split-Path -Parent $file.FullName
|
|
83
|
+
if ($parent -and ([IO.Path]::GetFullPath($parent) -ne [IO.Path]::GetFullPath($Path))) {
|
|
84
|
+
try {
|
|
85
|
+
Remove-Item -LiteralPath $parent -Force -ErrorAction Stop
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function Install-Claude {
|
|
95
|
+
param([Parameter(Mandatory = $true)][string]$SkillName)
|
|
96
|
+
$src = Join-Path $CompiledDir "claude\$SkillName\SKILL.md"
|
|
97
|
+
$destDir = Join-Path $ClaudeSkillsDir $SkillName
|
|
98
|
+
Ensure-Directory -Path $destDir
|
|
99
|
+
Copy-Item -LiteralPath $src -Destination (Join-Path $destDir 'SKILL.md') -Force
|
|
100
|
+
Write-Host " Claude: $(Join-Path $destDir 'SKILL.md')"
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function Install-Cursor {
|
|
104
|
+
param([Parameter(Mandatory = $true)][string]$SkillName)
|
|
105
|
+
$srcRule = Join-Path $CompiledDir "cursor\rules\$SkillName.mdc"
|
|
106
|
+
Ensure-Directory -Path $CursorRulesDir
|
|
107
|
+
Copy-Item -LiteralPath $srcRule -Destination (Join-Path $CursorRulesDir "$SkillName.mdc") -Force
|
|
108
|
+
Write-Host " Cursor (rule): $(Join-Path $CursorRulesDir "$SkillName.mdc")"
|
|
109
|
+
$srcSkill = Join-Path $CompiledDir "cursor\skills\$SkillName\SKILL.md"
|
|
110
|
+
$destDir = Join-Path $CursorSkillsDir $SkillName
|
|
111
|
+
Ensure-Directory -Path $destDir
|
|
112
|
+
Copy-Item -LiteralPath $srcSkill -Destination (Join-Path $destDir 'SKILL.md') -Force
|
|
113
|
+
Write-Host " Cursor (skill): $(Join-Path $destDir 'SKILL.md')"
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function Install-Windsurf {
|
|
117
|
+
param([Parameter(Mandatory = $true)][string]$SkillName)
|
|
118
|
+
$srcRule = Join-Path $CompiledDir "windsurf\rules\$SkillName.md"
|
|
119
|
+
Ensure-Directory -Path $WindsurfRulesDir
|
|
120
|
+
Copy-Item -LiteralPath $srcRule -Destination (Join-Path $WindsurfRulesDir "$SkillName.md") -Force
|
|
121
|
+
Write-Host " Windsurf (rule): $(Join-Path $WindsurfRulesDir "$SkillName.md")"
|
|
122
|
+
$srcSkill = Join-Path $CompiledDir "windsurf\skills\$SkillName\SKILL.md"
|
|
123
|
+
$destDir = Join-Path $WindsurfSkillsDir $SkillName
|
|
124
|
+
Ensure-Directory -Path $destDir
|
|
125
|
+
Copy-Item -LiteralPath $srcSkill -Destination (Join-Path $destDir 'SKILL.md') -Force
|
|
126
|
+
Write-Host " Windsurf (skill): $(Join-Path $destDir 'SKILL.md')"
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function Install-OpenCode {
|
|
130
|
+
param([Parameter(Mandatory = $true)][string]$SkillName)
|
|
131
|
+
$src = Join-Path $CompiledDir "opencode\$SkillName.md"
|
|
132
|
+
$destRoot = $OpenCodeAgentsDirs[0]
|
|
133
|
+
Ensure-Directory -Path $destRoot
|
|
134
|
+
Copy-Item -LiteralPath $src -Destination (Join-Path $destRoot "$SkillName.md") -Force
|
|
135
|
+
Write-Host " OpenCode: $(Join-Path $destRoot "$SkillName.md")"
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function Install-Codex {
|
|
139
|
+
param([Parameter(Mandatory = $true)][string]$SkillName)
|
|
140
|
+
$src = Join-Path $CompiledDir "codex\$SkillName\SKILL.md"
|
|
141
|
+
$destDir = Join-Path $CodeXSkillsDir $SkillName
|
|
142
|
+
Ensure-Directory -Path $destDir
|
|
143
|
+
Copy-Item -LiteralPath $src -Destination (Join-Path $destDir 'SKILL.md') -Force
|
|
144
|
+
Write-Host " Codex: $(Join-Path $destDir 'SKILL.md')"
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function Uninstall-Claude {
|
|
148
|
+
foreach ($skill in $Skills) {
|
|
149
|
+
$path = Join-Path $ClaudeSkillsDir $skill
|
|
150
|
+
if (Test-Path -LiteralPath $path) {
|
|
151
|
+
Remove-Item -LiteralPath $path -Recurse -Force
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
Write-Host ' Claude: removed'
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function Uninstall-Cursor {
|
|
158
|
+
foreach ($skill in $Skills) {
|
|
159
|
+
$rulePath = Join-Path $CursorRulesDir "$skill.mdc"
|
|
160
|
+
$skillPath = Join-Path $CursorSkillsDir $skill
|
|
161
|
+
if (Test-Path -LiteralPath $rulePath) {
|
|
162
|
+
Remove-Item -LiteralPath $rulePath -Force
|
|
163
|
+
}
|
|
164
|
+
if (Test-Path -LiteralPath $skillPath) {
|
|
165
|
+
Remove-Item -LiteralPath $skillPath -Recurse -Force
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
Write-Host ' Cursor: removed'
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function Uninstall-Windsurf {
|
|
172
|
+
foreach ($skill in $Skills) {
|
|
173
|
+
$rulePath = Join-Path $WindsurfRulesDir "$skill.md"
|
|
174
|
+
$skillPath = Join-Path $WindsurfSkillsDir $skill
|
|
175
|
+
if (Test-Path -LiteralPath $rulePath) {
|
|
176
|
+
Remove-Item -LiteralPath $rulePath -Force
|
|
177
|
+
}
|
|
178
|
+
if (Test-Path -LiteralPath $skillPath) {
|
|
179
|
+
Remove-Item -LiteralPath $skillPath -Recurse -Force
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
Write-Host ' Windsurf: removed'
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function Uninstall-OpenCode {
|
|
186
|
+
foreach ($root in $OpenCodeAgentsDirs) {
|
|
187
|
+
foreach ($skill in $Skills) {
|
|
188
|
+
$path = Join-Path $root "$skill.md"
|
|
189
|
+
if (Test-Path -LiteralPath $path) {
|
|
190
|
+
Remove-Item -LiteralPath $path -Force
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
Write-Host ' OpenCode: removed'
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function Uninstall-Codex {
|
|
198
|
+
foreach ($skill in $Skills) {
|
|
199
|
+
$path = Join-Path $CodeXSkillsDir $skill
|
|
200
|
+
if (Test-Path -LiteralPath $path) {
|
|
201
|
+
Remove-Item -LiteralPath $path -Recurse -Force
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
Write-Host ' Codex: removed'
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function Get-DetectedEditors {
|
|
208
|
+
$detected = New-Object System.Collections.Generic.List[string]
|
|
209
|
+
if (Test-Path -LiteralPath (Join-Path $UserHome '.claude')) { $detected.Add('claude') }
|
|
210
|
+
if (Test-Path -LiteralPath (Join-Path $UserHome '.cursor')) { $detected.Add('cursor') }
|
|
211
|
+
if ((Test-Path -LiteralPath (Join-Path $UserHome '.windsurf')) -or (Test-Path -LiteralPath (Join-Path $UserHome '.codeium\windsurf'))) { $detected.Add('windsurf') }
|
|
212
|
+
foreach ($root in $OpenCodeAgentsDirs) {
|
|
213
|
+
$parent = Split-Path -Parent $root
|
|
214
|
+
if (Test-Path -LiteralPath $parent) {
|
|
215
|
+
$detected.Add('opencode')
|
|
216
|
+
break
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if ($env:CODEX_HOME -or (Test-Path -LiteralPath $CodeXHomeDir)) { $detected.Add('codex') }
|
|
220
|
+
return $detected.ToArray()
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
$targets = New-Object System.Collections.Generic.List[string]
|
|
224
|
+
$doBuild = $true
|
|
225
|
+
$doUninstall = $false
|
|
226
|
+
$doCompileOnly = $false
|
|
227
|
+
|
|
228
|
+
for ($i = 0; $i -lt $args.Count; $i++) {
|
|
229
|
+
switch ($args[$i]) {
|
|
230
|
+
'--claude' { $targets.Add('claude'); continue }
|
|
231
|
+
'--cursor' { $targets.Add('cursor'); continue }
|
|
232
|
+
'--windsurf' { $targets.Add('windsurf'); continue }
|
|
233
|
+
'--opencode' { $targets.Add('opencode'); continue }
|
|
234
|
+
'--codex' { $targets.Add('codex'); continue }
|
|
235
|
+
'--all' {
|
|
236
|
+
$targets.Clear()
|
|
237
|
+
@('claude', 'cursor', 'windsurf', 'opencode', 'codex') | ForEach-Object { $targets.Add($_) }
|
|
238
|
+
continue
|
|
239
|
+
}
|
|
240
|
+
'--skills-only' { $doBuild = $false; continue }
|
|
241
|
+
'--uninstall' { $doUninstall = $true; continue }
|
|
242
|
+
'--compile-only' { $doCompileOnly = $true; continue }
|
|
243
|
+
'--help' { Show-Help; exit 0 }
|
|
244
|
+
'-h' { Show-Help; exit 0 }
|
|
245
|
+
default {
|
|
246
|
+
Write-Error "Unknown option: $($args[$i])`nRun: powershell -ExecutionPolicy Bypass -File .\install-local.ps1 --help"
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
if ($doCompileOnly) {
|
|
252
|
+
Write-Host '==> Delegating to compile.mjs...'
|
|
253
|
+
Invoke-Step -FilePath 'node' -Arguments @((Join-Path $SkillDir 'skill\build\compile.mjs'))
|
|
254
|
+
exit 0
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
if ($targets.Count -eq 0) {
|
|
258
|
+
(Get-DetectedEditors) | ForEach-Object { $targets.Add($_) }
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if ($targets.Count -eq 0) {
|
|
262
|
+
throw 'ERROR: No supported tools detected. Use --claude, --cursor, --windsurf, --opencode, or --codex.'
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
Write-Host "==> $ProjectName setup"
|
|
266
|
+
Write-Host " Project: $SkillDir"
|
|
267
|
+
Write-Host " Targets: $($targets -join ' ')"
|
|
268
|
+
Write-Host ''
|
|
269
|
+
|
|
270
|
+
if ($doUninstall) {
|
|
271
|
+
Write-Host "==> Uninstalling $ProjectName"
|
|
272
|
+
Write-Host " Targets: $($targets -join ' ')"
|
|
273
|
+
Write-Host ''
|
|
274
|
+
|
|
275
|
+
foreach ($target in $targets) {
|
|
276
|
+
switch ($target) {
|
|
277
|
+
'claude' { Uninstall-Claude }
|
|
278
|
+
'cursor' { Uninstall-Cursor }
|
|
279
|
+
'windsurf' { Uninstall-Windsurf }
|
|
280
|
+
'opencode' { Uninstall-OpenCode }
|
|
281
|
+
'codex' { Uninstall-Codex }
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
Write-Host "--> Removing $CliBinName CLI..."
|
|
286
|
+
Invoke-Step -FilePath 'npm' -Arguments @('unlink', $ProjectName) -AllowFailure
|
|
287
|
+
$skillmillCmd = Get-Command $CliBinName -ErrorAction SilentlyContinue
|
|
288
|
+
if ($skillmillCmd) {
|
|
289
|
+
Write-Host " WARNING: $CliBinName still in PATH at $($skillmillCmd.Source)"
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
Write-Host " $CliBinName removed"
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
Write-Host ''
|
|
296
|
+
Write-Host '==> Done. Skills and CLI removed.'
|
|
297
|
+
exit 0
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if ($doBuild) {
|
|
301
|
+
Write-Host '--> Installing dependencies...'
|
|
302
|
+
Invoke-Step -FilePath 'npm' -Arguments @('install')
|
|
303
|
+
|
|
304
|
+
Write-Host '--> Cleaning previous build...'
|
|
305
|
+
$distDir = Join-Path $SkillDir 'dist'
|
|
306
|
+
if (Test-Path -LiteralPath $distDir) {
|
|
307
|
+
Remove-Item -LiteralPath $distDir -Recurse -Force
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
Write-Host '--> Building TypeScript...'
|
|
311
|
+
Invoke-Step -FilePath 'npm' -Arguments @('run', 'build')
|
|
312
|
+
|
|
313
|
+
Write-Host '--> Compiling skills...'
|
|
314
|
+
Invoke-Step -FilePath 'npm' -Arguments @('run', 'compile')
|
|
315
|
+
|
|
316
|
+
Write-Host "--> Installing $CliBinName CLI globally..."
|
|
317
|
+
Invoke-Step -FilePath 'npm' -Arguments @('link')
|
|
318
|
+
|
|
319
|
+
$npmPrefix = (& npm prefix -g).Trim()
|
|
320
|
+
if ($LASTEXITCODE -ne 0) {
|
|
321
|
+
throw 'Failed to determine npm global prefix.'
|
|
322
|
+
}
|
|
323
|
+
$candidateBins = @(
|
|
324
|
+
Join-Path $npmPrefix "$CliBinName.cmd",
|
|
325
|
+
Join-Path $npmPrefix $CliBinName,
|
|
326
|
+
Join-Path (Join-Path $npmPrefix 'bin') "$CliBinName.cmd",
|
|
327
|
+
Join-Path (Join-Path $npmPrefix 'bin') $CliBinName
|
|
328
|
+
)
|
|
329
|
+
$cliPath = $candidateBins | Where-Object { Test-Path -LiteralPath $_ } | Select-Object -First 1
|
|
330
|
+
if ($cliPath) {
|
|
331
|
+
Write-Host " $CliBinName: $cliPath"
|
|
332
|
+
$cliVersion = (& $cliPath --version 2>$null)
|
|
333
|
+
if ($LASTEXITCODE -eq 0 -and $cliVersion) {
|
|
334
|
+
Write-Host " version: $cliVersion"
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
Write-Host ' version: unknown'
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
Write-Host " WARNING: $CliBinName not found under npm global prefix after npm link."
|
|
342
|
+
Write-Host ' Try running: npm link'
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
Write-Host "--> Cleaning stale $ProjectName files..."
|
|
347
|
+
foreach ($target in $targets) {
|
|
348
|
+
switch ($target) {
|
|
349
|
+
'claude' { Remove-ManagedFiles -Path $ClaudeSkillsDir }
|
|
350
|
+
'cursor' {
|
|
351
|
+
Remove-ManagedFiles -Path $CursorRulesDir
|
|
352
|
+
Remove-ManagedFiles -Path $CursorSkillsDir
|
|
353
|
+
}
|
|
354
|
+
'windsurf' {
|
|
355
|
+
Remove-ManagedFiles -Path $WindsurfRulesDir
|
|
356
|
+
Remove-ManagedFiles -Path $WindsurfSkillsDir
|
|
357
|
+
}
|
|
358
|
+
'opencode' {
|
|
359
|
+
foreach ($root in $OpenCodeAgentsDirs) {
|
|
360
|
+
Remove-ManagedFiles -Path $root
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
'codex' { Remove-ManagedFiles -Path $CodeXSkillsDir }
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
Write-Host '--> Installing skills...'
|
|
368
|
+
foreach ($skill in $Skills) {
|
|
369
|
+
Write-Host " ${skill}:"
|
|
370
|
+
foreach ($target in $targets) {
|
|
371
|
+
switch ($target) {
|
|
372
|
+
'claude' { Install-Claude -SkillName $skill }
|
|
373
|
+
'cursor' { Install-Cursor -SkillName $skill }
|
|
374
|
+
'windsurf' { Install-Windsurf -SkillName $skill }
|
|
375
|
+
'opencode' { Install-OpenCode -SkillName $skill }
|
|
376
|
+
'codex' { Install-Codex -SkillName $skill }
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
Write-Host ''
|
|
382
|
+
Write-Host '==> Done.'
|
|
383
|
+
Write-Host ''
|
|
384
|
+
Write-Host "Skills installed for: $($targets -join ' ')"
|
|
385
|
+
Write-Host "CLI available as: $CliBinName"
|
package/install-local.sh
CHANGED
|
File without changes
|
package/install.ps1
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
$ErrorActionPreference = 'Stop'
|
|
2
|
+
|
|
3
|
+
$PackageName = if ($env:SKILLMILL_PACKAGE_NAME) { $env:SKILLMILL_PACKAGE_NAME } else { 'agentic-skill-mill' }
|
|
4
|
+
$PackageVersion = if ($env:SKILLMILL_PACKAGE_VERSION) { $env:SKILLMILL_PACKAGE_VERSION } else { 'latest' }
|
|
5
|
+
|
|
6
|
+
if ($args.Count -gt 0 -and ($args[0] -eq '--help' -or $args[0] -eq '-h')) {
|
|
7
|
+
Write-Host 'Usage: powershell -ExecutionPolicy Bypass -File .\install.ps1 [tool flags]'
|
|
8
|
+
Write-Host ''
|
|
9
|
+
Write-Host "This script installs ${PackageName}@${PackageVersion} globally and then"
|
|
10
|
+
Write-Host 'runs install-local.ps1 --skills-only with the flags you provide.'
|
|
11
|
+
Write-Host ''
|
|
12
|
+
Write-Host 'Examples:'
|
|
13
|
+
Write-Host ' powershell -ExecutionPolicy Bypass -File .\install.ps1 --all'
|
|
14
|
+
Write-Host ' powershell -ExecutionPolicy Bypass -File .\install.ps1 --cursor'
|
|
15
|
+
Write-Host ''
|
|
16
|
+
Write-Host 'Environment overrides:'
|
|
17
|
+
Write-Host ' SKILLMILL_PACKAGE_NAME Package to install (default: agentic-skill-mill)'
|
|
18
|
+
Write-Host ' SKILLMILL_PACKAGE_VERSION Version tag (default: latest)'
|
|
19
|
+
exit 0
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
Write-Host "==> Installing utility library: ${PackageName}@${PackageVersion}"
|
|
23
|
+
& npm install -g "${PackageName}@${PackageVersion}"
|
|
24
|
+
if ($LASTEXITCODE -ne 0) {
|
|
25
|
+
throw 'npm install -g failed.'
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
$globalNodeModules = (& npm root -g).Trim()
|
|
29
|
+
if ($LASTEXITCODE -ne 0 -or -not $globalNodeModules) {
|
|
30
|
+
throw 'Failed to resolve npm global node_modules directory.'
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
$packageDir = Join-Path $globalNodeModules $PackageName
|
|
34
|
+
$localInstaller = Join-Path $packageDir 'install-local.ps1'
|
|
35
|
+
|
|
36
|
+
if (-not (Test-Path -LiteralPath $localInstaller -PathType Leaf)) {
|
|
37
|
+
throw "ERROR: Could not find install-local.ps1 at: $localInstaller`nCheck the package 'files' list to ensure install-local.ps1 is published."
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Write-Host '==> Installing skills via local installer (skills-only mode)'
|
|
41
|
+
& powershell -ExecutionPolicy Bypass -File $localInstaller --skills-only @args
|
|
42
|
+
if ($LASTEXITCODE -ne 0) {
|
|
43
|
+
throw 'The local PowerShell installer failed.'
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
Write-Host ''
|
|
47
|
+
Write-Host '==> Done.'
|
|
48
|
+
Write-Host 'Utility and skills installed.'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-skill-mill",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "Forge and refine agent skill projects -- fragment-composed skills compiled to 7 IDE targets with a companion CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -20,7 +20,9 @@
|
|
|
20
20
|
"skill",
|
|
21
21
|
"README.md",
|
|
22
22
|
"install.sh",
|
|
23
|
-
"install-local.sh"
|
|
23
|
+
"install-local.sh",
|
|
24
|
+
"install.ps1",
|
|
25
|
+
"install-local.ps1"
|
|
24
26
|
],
|
|
25
27
|
"scripts": {
|
|
26
28
|
"build": "tsc -p tsconfig.build.json",
|
|
@@ -31,8 +33,12 @@
|
|
|
31
33
|
"typecheck": "tsc --noEmit",
|
|
32
34
|
"setup": "bash install-local.sh",
|
|
33
35
|
"setup:all": "bash install-local.sh --all",
|
|
36
|
+
"setup:windows": "powershell -ExecutionPolicy Bypass -File ./install-local.ps1",
|
|
37
|
+
"setup:windows:all": "powershell -ExecutionPolicy Bypass -File ./install-local.ps1 --all",
|
|
34
38
|
"install-skills": "bash install-local.sh --skills-only",
|
|
39
|
+
"install-skills:windows": "powershell -ExecutionPolicy Bypass -File ./install-local.ps1 --skills-only",
|
|
35
40
|
"uninstall-skills": "bash install-local.sh --uninstall",
|
|
41
|
+
"uninstall-skills:windows": "powershell -ExecutionPolicy Bypass -File ./install-local.ps1 --uninstall",
|
|
36
42
|
"compile": "node skill/build/compile.mjs",
|
|
37
43
|
"compile:validate": "node skill/build/compile.mjs --validate",
|
|
38
44
|
"compile:watch": "node skill/build/compile.mjs --watch"
|