@lifeaitools/rdc-skills 0.24.38 → 0.24.41
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 +15 -15
- package/.claude-plugin/marketplace.json +21 -21
- package/.claude-plugin/plugin.json +1371 -1371
- package/.github/workflows/publish.yml +34 -34
- package/.github/workflows/self-test.yml +58 -58
- package/CHANGELOG.md +310 -310
- package/LICENSE +21 -21
- package/MANIFEST.md +221 -221
- package/README.md +376 -375
- package/README.sandbox.md +3 -3
- package/RELEASE.md +42 -0
- package/assets/watcher/viewer.html +164 -164
- package/bin/rdc-skills-mcp.mjs +316 -316
- package/commands/build.md +183 -183
- package/commands/collab.md +180 -180
- package/commands/deploy.md +152 -152
- package/commands/design.md +31 -31
- package/commands/edit.md +28 -28
- package/commands/fixit.md +124 -124
- package/commands/handoff.md +173 -173
- package/commands/help.md +95 -95
- package/commands/overnight.md +220 -220
- package/commands/plan.md +158 -158
- package/commands/preplan.md +131 -131
- package/commands/prototype.md +145 -145
- package/commands/release.md +49 -49
- package/commands/report.md +99 -99
- package/commands/review.md +120 -120
- package/commands/self-test.md +113 -113
- package/commands/status.md +86 -86
- package/commands/watch.md +98 -98
- package/commands/workitems.md +137 -137
- package/git-sha.json +1 -1
- package/guides/agent-bootstrap.md +295 -295
- package/guides/agents/backend.md +104 -104
- package/guides/agents/content.md +94 -94
- package/guides/agents/cs2.md +56 -56
- package/guides/agents/data.md +87 -87
- package/guides/agents/design.md +77 -77
- package/guides/agents/frontend.md +92 -92
- package/guides/agents/infrastructure.md +81 -81
- package/guides/agents/setup.md +281 -281
- package/guides/agents/verify.md +151 -151
- package/guides/agents/viz.md +106 -106
- package/guides/backend.md +146 -146
- package/guides/content.md +147 -147
- package/guides/cs2.md +190 -190
- package/guides/data.md +123 -123
- package/guides/design.md +116 -116
- package/guides/engineering-behavior.md +43 -43
- package/guides/escalation-protocol.md +125 -125
- package/guides/frontend.md +151 -151
- package/guides/history-md-spec.md +297 -297
- package/guides/infrastructure.md +179 -179
- package/guides/lessons-learned-spec.md +151 -145
- package/guides/output-contract.md +108 -108
- package/guides/publish-md-spec.md +289 -289
- package/guides/rdc-skills-startup.md +30 -30
- package/guides/verify.md +11 -11
- package/hooks/check-cwd.js +31 -31
- package/hooks/check-rdc-environment.js +164 -164
- package/hooks/check-services.js +6 -6
- package/hooks/check-stale-work-items.js +19 -19
- package/hooks/foreground-process-gate.js +128 -128
- package/hooks/gate-watchdog-selfcheck.js +257 -257
- package/hooks/hook-logger.js +25 -25
- package/hooks/lib/run-evidence-gate.mjs +241 -241
- package/hooks/no-stop-open-epics.js +127 -127
- package/hooks/post-tool-batch-gate.js +203 -203
- package/hooks/post-work-check.js +21 -21
- package/hooks/postcompact-log.js +13 -13
- package/hooks/precompact-log.js +13 -13
- package/hooks/rate-limit-retry.js +46 -46
- package/hooks/rdc-invocation-marker.js +157 -157
- package/hooks/rdc-output-contract-gate.js +94 -94
- package/hooks/require-work-item-on-commit.js +294 -294
- package/hooks/restart-brief.js +19 -19
- package/hooks/run-hidden-hook.ps1 +47 -47
- package/hooks/task-completed-gate.js +274 -274
- package/hooks/work-item-exit-gate.js +944 -944
- package/lib/catalog.mjs +236 -236
- package/lib/cloud-rewrite.mjs +155 -155
- package/package.json +57 -56
- package/rules/work-items-rpc.md +520 -520
- package/scaffold/templates/HISTORY.md.template +39 -39
- package/scaffold/templates/PUBLISH.md.template +21 -21
- package/scaffold/templates/brochure-studio-default.html +70 -70
- package/scripts/acceptance.mjs +502 -502
- package/scripts/fixtures/guides/bad-guide.md +15 -15
- package/scripts/fixtures/guides-clean/good-guide.md +16 -16
- package/scripts/install-rdc-skills.js +1289 -1289
- package/scripts/install.ps1 +202 -202
- package/scripts/install.sh +132 -132
- package/scripts/lib/assertions.mjs +287 -287
- package/scripts/lib/manifest-schema.mjs +754 -754
- package/scripts/lib/runner.mjs +465 -465
- package/scripts/lib/sandbox.mjs +435 -435
- package/scripts/prepack.mjs +32 -32
- package/scripts/rdc-brochure.mjs +482 -464
- package/scripts/rdc-design-cli.mjs +134 -134
- package/scripts/rebuild-mcp.mjs +107 -107
- package/scripts/self-test.mjs +1460 -1460
- package/scripts/stamp-git-sha.mjs +29 -29
- package/scripts/test-guide-validator.mjs +196 -196
- package/scripts/test-rdc-hooks.mjs +145 -145
- package/scripts/uninstall.ps1 +77 -77
- package/scripts/uninstall.sh +69 -69
- package/scripts/update.ps1 +43 -43
- package/scripts/update.sh +43 -43
- package/scripts/validate-place-histories.js +461 -461
- package/scripts/validate-publish-manifests.js +424 -424
- package/scripts/watch-init.mjs +100 -100
- package/skills/brochure/SKILL.md +107 -107
- package/skills/build/SKILL.md +563 -563
- package/skills/channel-formatter/SKILL.md +533 -533
- package/skills/co-develop/SKILL.md +196 -196
- package/skills/collab/SKILL.md +239 -239
- package/skills/convert/SKILL.md +140 -140
- package/skills/deploy/SKILL.md +541 -541
- package/skills/design/SKILL.md +211 -211
- package/skills/design/reference/ownership.md +16 -16
- package/skills/design/reference/rampa.md +92 -92
- package/skills/design/reference/studio-model.md +153 -153
- package/skills/edit/SKILL.md +98 -98
- package/skills/fixit/SKILL.md +165 -165
- package/skills/fs-mcp/SKILL.md +148 -148
- package/skills/handoff/SKILL.md +236 -200
- package/skills/help/SKILL.md +143 -143
- package/skills/housekeeping/SKILL.md +219 -160
- package/skills/lifeai-brochure-author/SKILL.md +340 -340
- package/skills/overnight/SKILL.md +251 -251
- package/skills/plan/SKILL.md +345 -345
- package/skills/preplan/SKILL.md +90 -90
- package/skills/prototype/SKILL.md +150 -150
- package/skills/rdc-brochurify/SKILL.md +245 -245
- package/skills/rdc-extract-verifier-rules/SKILL.md +191 -191
- package/skills/release/SKILL.md +140 -140
- package/skills/report/SKILL.md +100 -100
- package/skills/review/SKILL.md +152 -152
- package/skills/rpms-filemap/SKILL.cloud.md +111 -111
- package/skills/rpms-filemap/SKILL.md +111 -111
- package/skills/self-test/SKILL.md +132 -132
- package/skills/status/SKILL.md +99 -99
- package/skills/terminal-config/SKILL.md +62 -62
- package/skills/tests/MATRIX.md +54 -54
- package/skills/tests/README.md +47 -47
- package/skills/tests/rdc-brochure.test.json +34 -34
- package/skills/tests/rdc-build.test.json +36 -36
- package/skills/tests/rdc-channel-formatter.test.json +45 -45
- package/skills/tests/rdc-co-develop.test.json +29 -29
- package/skills/tests/rdc-collab.test.json +29 -29
- package/skills/tests/rdc-convert.test.json +35 -35
- package/skills/tests/rdc-deploy.test.json +30 -30
- package/skills/tests/rdc-design.test.json +27 -27
- package/skills/tests/rdc-edit.test.json +29 -29
- package/skills/tests/rdc-fixit.test.json +36 -36
- package/skills/tests/rdc-fs-mcp.test.json +36 -36
- package/skills/tests/rdc-handoff.test.json +28 -28
- package/skills/tests/rdc-help.test.json +29 -29
- package/skills/tests/rdc-housekeeping.test.json +32 -28
- package/skills/tests/rdc-lifeai-brochure-author.test.json +35 -35
- package/skills/tests/rdc-overnight.test.json +37 -37
- package/skills/tests/rdc-plan.test.json +27 -27
- package/skills/tests/rdc-preplan.test.json +31 -31
- package/skills/tests/rdc-prototype.test.json +28 -28
- package/skills/tests/rdc-rdc-brochurify.test.json +23 -23
- package/skills/tests/rdc-rdc-extract-verifier-rules.test.json +34 -34
- package/skills/tests/rdc-release.test.json +29 -29
- package/skills/tests/rdc-report.test.json +28 -28
- package/skills/tests/rdc-review.test.json +29 -29
- package/skills/tests/rdc-rpms-filemap.test.json +28 -28
- package/skills/tests/rdc-self-test.test.json +24 -24
- package/skills/tests/rdc-status.test.json +29 -29
- package/skills/tests/rdc-terminal-config.test.json +29 -29
- package/skills/tests/rdc-watch.test.json +24 -24
- package/skills/tests/rdc-workitems.test.json +27 -27
- package/skills/watch/SKILL.md +97 -97
- package/skills/workitems/SKILL.md +151 -151
- package/tests/acceptance.test.mjs +59 -59
- package/tests/channel-formatter.contract.test.mjs +251 -251
- package/tests/curl-surface.test.mjs +289 -289
- package/tests/harness-gates.test.mjs +325 -325
- package/tests/help-surface.test.mjs +61 -61
- package/tests/housekeeping-lessons-triage.test.mjs +49 -0
- package/tests/install-rdc-skills.test.mjs +49 -49
- package/tests/lessons-pipeline-contract.test.mjs +26 -0
- package/tests/manifest-contract-fields.test.mjs +78 -78
- package/tests/mcp.test.mjs +271 -271
- package/tests/rdc-brochure.test.mjs +125 -0
- package/tests/release-contract.test.mjs +16 -0
- package/tests/require-work-item-on-commit.test.mjs +162 -162
- package/tests/run-evidence-gate.test.mjs +82 -82
- package/tests/skill-test-matrix.test.mjs +66 -66
- package/tests/validate-skills.js +27 -27
- package/tests/work-item-exit-gate-l2.test.mjs +368 -368
- package/tests/work-item-exit-gate-l3.test.mjs +197 -197
package/scripts/install.ps1
CHANGED
|
@@ -1,202 +1,202 @@
|
|
|
1
|
-
# DEPRECATED as of v0.6.0 — use /plugin install rdc-skills.
|
|
2
|
-
# Will be removed in v0.7.0. See README.md "Install" section.
|
|
3
|
-
#
|
|
4
|
-
# Install rdc-skills plugin to Claude Code
|
|
5
|
-
# Windows PowerShell script
|
|
6
|
-
#
|
|
7
|
-
# Usage:
|
|
8
|
-
# ./install.ps1 # standard install
|
|
9
|
-
# ./install.ps1 -SkipHooks # skip hooks registration (e.g. if you manage hooks manually)
|
|
10
|
-
# ./install.ps1 -Profile core # portable hooks only
|
|
11
|
-
# ./install.ps1 -Profile lifeai # LIFEAI/regen-root hooks
|
|
12
|
-
# ./install.ps1 -ClaudeHome <path> # custom CLAUDE_HOME
|
|
13
|
-
|
|
14
|
-
param(
|
|
15
|
-
[string]$ClaudeHome = "",
|
|
16
|
-
[ValidateSet("auto", "core", "lifeai")]
|
|
17
|
-
[string]$Profile = "auto",
|
|
18
|
-
[switch]$SkipHooks = $false,
|
|
19
|
-
[switch]$Force = $false
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
# Detect CLAUDE_HOME
|
|
23
|
-
if (-not $ClaudeHome) {
|
|
24
|
-
$ClaudeHome = Join-Path $env:USERPROFILE ".claude"
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
28
|
-
$repoRoot = Split-Path -Parent $scriptDir
|
|
29
|
-
$lifeaiRoot = Join-Path (Split-Path -Parent $repoRoot) "regen-root"
|
|
30
|
-
$installProfile = if ($Profile -eq "auto") {
|
|
31
|
-
if ((Test-Path (Join-Path $lifeaiRoot "CLAUDE.md")) -and (Test-Path (Join-Path $lifeaiRoot ".rdc"))) { "lifeai" } else { "core" }
|
|
32
|
-
} else {
|
|
33
|
-
$Profile
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
Write-Host ""
|
|
37
|
-
Write-Host " rdc-skills Installer" -ForegroundColor Green
|
|
38
|
-
Write-Host " ====================" -ForegroundColor Green
|
|
39
|
-
Write-Host ""
|
|
40
|
-
Write-Host " CLAUDE_HOME : $ClaudeHome" -ForegroundColor Cyan
|
|
41
|
-
Write-Host " Plugin root : $repoRoot" -ForegroundColor Cyan
|
|
42
|
-
Write-Host " Profile : $installProfile$(if ($Profile -eq 'auto') { ' (auto)' } else { '' })" -ForegroundColor Cyan
|
|
43
|
-
Write-Host ""
|
|
44
|
-
|
|
45
|
-
if (-not (Test-Path $ClaudeHome)) {
|
|
46
|
-
Write-Host " ERROR: CLAUDE_HOME not found: $ClaudeHome" -ForegroundColor Red
|
|
47
|
-
exit 1
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
# ── 1. Skills ────────────────────────────────────────────────────────────────
|
|
51
|
-
|
|
52
|
-
$skillsDir = Join-Path $ClaudeHome "skills" "user"
|
|
53
|
-
if (-not (Test-Path $skillsDir)) {
|
|
54
|
-
New-Item -ItemType Directory -Path $skillsDir -Force | Out-Null
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
$srcSkills = Join-Path $repoRoot "skills"
|
|
58
|
-
$skillFiles = Get-ChildItem -Path $srcSkills -Filter "*.md" -ErrorAction SilentlyContinue
|
|
59
|
-
foreach ($f in $skillFiles) {
|
|
60
|
-
Copy-Item -Path $f.FullName -Destination (Join-Path $skillsDir $f.Name) -Force
|
|
61
|
-
}
|
|
62
|
-
Write-Host " [1/3] Skills ✓ $($skillFiles.Count) file(s) → $skillsDir" -ForegroundColor Green
|
|
63
|
-
|
|
64
|
-
# ── 2. Hooks (files) ─────────────────────────────────────────────────────────
|
|
65
|
-
|
|
66
|
-
$hooksDir = Join-Path $ClaudeHome "hooks"
|
|
67
|
-
if (-not (Test-Path $hooksDir)) {
|
|
68
|
-
New-Item -ItemType Directory -Path $hooksDir -Force | Out-Null
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
$srcHooks = Join-Path $repoRoot "hooks"
|
|
72
|
-
$hookFiles = Get-ChildItem -Path $srcHooks -File -ErrorAction SilentlyContinue | Where-Object { $_.Extension -in @(".js", ".ps1") }
|
|
73
|
-
foreach ($f in $hookFiles) {
|
|
74
|
-
Copy-Item -Path $f.FullName -Destination (Join-Path $hooksDir $f.Name) -Force
|
|
75
|
-
}
|
|
76
|
-
Write-Host " [2/3] Hook files ✓ $($hookFiles.Count) file(s) → $hooksDir" -ForegroundColor Green
|
|
77
|
-
|
|
78
|
-
# ── 3. Register hooks in settings.json ───────────────────────────────────────
|
|
79
|
-
|
|
80
|
-
if ($SkipHooks) {
|
|
81
|
-
Write-Host " [3/3] Hook wiring ⏭ skipped (--SkipHooks)" -ForegroundColor DarkGray
|
|
82
|
-
} else {
|
|
83
|
-
$settingsPath = Join-Path $ClaudeHome "settings.json"
|
|
84
|
-
|
|
85
|
-
# Load existing settings (or start fresh)
|
|
86
|
-
if (Test-Path $settingsPath) {
|
|
87
|
-
$settings = Get-Content $settingsPath -Raw | ConvertFrom-Json
|
|
88
|
-
} else {
|
|
89
|
-
$settings = [PSCustomObject]@{}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
# Build hooks block — all paths use forward slashes for cross-platform compat
|
|
93
|
-
$hooksBase = $hooksDir.Replace("\", "/")
|
|
94
|
-
|
|
95
|
-
$hooksConfig = [PSCustomObject]@{
|
|
96
|
-
UserPromptExpansion = @(
|
|
97
|
-
[PSCustomObject]@{
|
|
98
|
-
hooks = @(
|
|
99
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/rdc-invocation-marker.js`""; statusMessage = "Marking RDC slash command..." }
|
|
100
|
-
)
|
|
101
|
-
}
|
|
102
|
-
)
|
|
103
|
-
UserPromptSubmit = @(
|
|
104
|
-
[PSCustomObject]@{
|
|
105
|
-
hooks = @(
|
|
106
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/rdc-invocation-marker.js`""; statusMessage = "Marking RDC prompt..." }
|
|
107
|
-
)
|
|
108
|
-
}
|
|
109
|
-
)
|
|
110
|
-
PreToolUse = @(
|
|
111
|
-
[PSCustomObject]@{
|
|
112
|
-
hooks = @(
|
|
113
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/foreground-process-gate.js`""; statusMessage = "Checking foreground process policy..." }
|
|
114
|
-
)
|
|
115
|
-
},
|
|
116
|
-
[PSCustomObject]@{
|
|
117
|
-
matcher = "Bash"
|
|
118
|
-
hooks = @(
|
|
119
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/require-work-item-on-commit.js`"" }
|
|
120
|
-
)
|
|
121
|
-
}
|
|
122
|
-
)
|
|
123
|
-
PostToolUse = @(
|
|
124
|
-
[PSCustomObject]@{
|
|
125
|
-
hooks = @(
|
|
126
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/check-services.js`"" }
|
|
127
|
-
)
|
|
128
|
-
}
|
|
129
|
-
)
|
|
130
|
-
Stop = @(
|
|
131
|
-
[PSCustomObject]@{
|
|
132
|
-
hooks = @(
|
|
133
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/rdc-output-contract-gate.js`""; statusMessage = "Checking RDC output contract..." },
|
|
134
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/post-work-check.js`""; statusMessage = "Checking for undocumented work..." }
|
|
135
|
-
)
|
|
136
|
-
}
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if ($installProfile -eq "lifeai") {
|
|
141
|
-
$hooksConfig | Add-Member -NotePropertyName "SessionStart" -NotePropertyValue @(
|
|
142
|
-
[PSCustomObject]@{
|
|
143
|
-
hooks = @(
|
|
144
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/check-cwd.js`"" },
|
|
145
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/check-stale-work-items.js`""; statusMessage = "Checking for stale work items..." }
|
|
146
|
-
)
|
|
147
|
-
}
|
|
148
|
-
)
|
|
149
|
-
$hooksConfig.PreToolUse[0].hooks += [PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/work-item-exit-gate.js`""; statusMessage = "Checking work item exit gates..." }
|
|
150
|
-
$hooksConfig | Add-Member -NotePropertyName "PreCompact" -NotePropertyValue @(
|
|
151
|
-
[PSCustomObject]@{ hooks = @([PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/precompact-log.js`"" }) }
|
|
152
|
-
)
|
|
153
|
-
$hooksConfig | Add-Member -NotePropertyName "PostCompact" -NotePropertyValue @(
|
|
154
|
-
[PSCustomObject]@{
|
|
155
|
-
hooks = @(
|
|
156
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/postcompact-log.js`"" },
|
|
157
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/restart-brief.js`""; statusMessage = "Writing restart brief..." }
|
|
158
|
-
)
|
|
159
|
-
}
|
|
160
|
-
)
|
|
161
|
-
$hooksConfig.Stop[0].hooks = @(
|
|
162
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/rate-limit-retry.js`""; statusMessage = "Checking for rate limits..." }
|
|
163
|
-
) + $hooksConfig.Stop[0].hooks + @(
|
|
164
|
-
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/no-stop-open-epics.js`""; statusMessage = "Checking for open epics..." }
|
|
165
|
-
)
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
# Add/replace hooks key
|
|
169
|
-
if ($settings.PSObject.Properties["hooks"]) {
|
|
170
|
-
$settings.hooks = $hooksConfig
|
|
171
|
-
} else {
|
|
172
|
-
$settings | Add-Member -NotePropertyName "hooks" -NotePropertyValue $hooksConfig -Force
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
# Write back with 2-space indent
|
|
176
|
-
$settings | ConvertTo-Json -Depth 20 | Set-Content $settingsPath -Encoding UTF8
|
|
177
|
-
Write-Host " [3/3] Hook wiring ✓ registered in $settingsPath" -ForegroundColor Green
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
# ── Summary ───────────────────────────────────────────────────────────────────
|
|
183
|
-
|
|
184
|
-
Write-Host ""
|
|
185
|
-
Write-Host " Installation complete!" -ForegroundColor Green
|
|
186
|
-
Write-Host ""
|
|
187
|
-
Write-Host " Next steps:" -ForegroundColor Yellow
|
|
188
|
-
Write-Host " 1. Create project overlay guides (required for project-specific context):"
|
|
189
|
-
Write-Host " docs/guides/agent-bootstrap.md ← credentials, git rules, Supabase ref"
|
|
190
|
-
Write-Host " docs/guides/frontend.md ← your design system rules"
|
|
191
|
-
Write-Host " docs/guides/backend.md ← your API/DB patterns"
|
|
192
|
-
Write-Host " docs/guides/data.md ← your migration patterns"
|
|
193
|
-
Write-Host ""
|
|
194
|
-
Write-Host " 2. Use rdc-skills/guides/*.md as starting-point templates"
|
|
195
|
-
Write-Host ""
|
|
196
|
-
Write-Host " 3. Restart Claude Code so hook changes take effect"
|
|
197
|
-
Write-Host ""
|
|
198
|
-
Write-Host " 4. Run /rdc:status in Claude Code to verify"
|
|
199
|
-
Write-Host ""
|
|
200
|
-
Write-Host " Docs: https://github.com/LIFEAI/rdc-skills#readme" -ForegroundColor Cyan
|
|
201
|
-
Write-Host ""
|
|
202
|
-
}
|
|
1
|
+
# DEPRECATED as of v0.6.0 — use /plugin install rdc-skills.
|
|
2
|
+
# Will be removed in v0.7.0. See README.md "Install" section.
|
|
3
|
+
#
|
|
4
|
+
# Install rdc-skills plugin to Claude Code
|
|
5
|
+
# Windows PowerShell script
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# ./install.ps1 # standard install
|
|
9
|
+
# ./install.ps1 -SkipHooks # skip hooks registration (e.g. if you manage hooks manually)
|
|
10
|
+
# ./install.ps1 -Profile core # portable hooks only
|
|
11
|
+
# ./install.ps1 -Profile lifeai # LIFEAI/regen-root hooks
|
|
12
|
+
# ./install.ps1 -ClaudeHome <path> # custom CLAUDE_HOME
|
|
13
|
+
|
|
14
|
+
param(
|
|
15
|
+
[string]$ClaudeHome = "",
|
|
16
|
+
[ValidateSet("auto", "core", "lifeai")]
|
|
17
|
+
[string]$Profile = "auto",
|
|
18
|
+
[switch]$SkipHooks = $false,
|
|
19
|
+
[switch]$Force = $false
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Detect CLAUDE_HOME
|
|
23
|
+
if (-not $ClaudeHome) {
|
|
24
|
+
$ClaudeHome = Join-Path $env:USERPROFILE ".claude"
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
28
|
+
$repoRoot = Split-Path -Parent $scriptDir
|
|
29
|
+
$lifeaiRoot = Join-Path (Split-Path -Parent $repoRoot) "regen-root"
|
|
30
|
+
$installProfile = if ($Profile -eq "auto") {
|
|
31
|
+
if ((Test-Path (Join-Path $lifeaiRoot "CLAUDE.md")) -and (Test-Path (Join-Path $lifeaiRoot ".rdc"))) { "lifeai" } else { "core" }
|
|
32
|
+
} else {
|
|
33
|
+
$Profile
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
Write-Host ""
|
|
37
|
+
Write-Host " rdc-skills Installer" -ForegroundColor Green
|
|
38
|
+
Write-Host " ====================" -ForegroundColor Green
|
|
39
|
+
Write-Host ""
|
|
40
|
+
Write-Host " CLAUDE_HOME : $ClaudeHome" -ForegroundColor Cyan
|
|
41
|
+
Write-Host " Plugin root : $repoRoot" -ForegroundColor Cyan
|
|
42
|
+
Write-Host " Profile : $installProfile$(if ($Profile -eq 'auto') { ' (auto)' } else { '' })" -ForegroundColor Cyan
|
|
43
|
+
Write-Host ""
|
|
44
|
+
|
|
45
|
+
if (-not (Test-Path $ClaudeHome)) {
|
|
46
|
+
Write-Host " ERROR: CLAUDE_HOME not found: $ClaudeHome" -ForegroundColor Red
|
|
47
|
+
exit 1
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
# ── 1. Skills ────────────────────────────────────────────────────────────────
|
|
51
|
+
|
|
52
|
+
$skillsDir = Join-Path $ClaudeHome "skills" "user"
|
|
53
|
+
if (-not (Test-Path $skillsDir)) {
|
|
54
|
+
New-Item -ItemType Directory -Path $skillsDir -Force | Out-Null
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
$srcSkills = Join-Path $repoRoot "skills"
|
|
58
|
+
$skillFiles = Get-ChildItem -Path $srcSkills -Filter "*.md" -ErrorAction SilentlyContinue
|
|
59
|
+
foreach ($f in $skillFiles) {
|
|
60
|
+
Copy-Item -Path $f.FullName -Destination (Join-Path $skillsDir $f.Name) -Force
|
|
61
|
+
}
|
|
62
|
+
Write-Host " [1/3] Skills ✓ $($skillFiles.Count) file(s) → $skillsDir" -ForegroundColor Green
|
|
63
|
+
|
|
64
|
+
# ── 2. Hooks (files) ─────────────────────────────────────────────────────────
|
|
65
|
+
|
|
66
|
+
$hooksDir = Join-Path $ClaudeHome "hooks"
|
|
67
|
+
if (-not (Test-Path $hooksDir)) {
|
|
68
|
+
New-Item -ItemType Directory -Path $hooksDir -Force | Out-Null
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
$srcHooks = Join-Path $repoRoot "hooks"
|
|
72
|
+
$hookFiles = Get-ChildItem -Path $srcHooks -File -ErrorAction SilentlyContinue | Where-Object { $_.Extension -in @(".js", ".ps1") }
|
|
73
|
+
foreach ($f in $hookFiles) {
|
|
74
|
+
Copy-Item -Path $f.FullName -Destination (Join-Path $hooksDir $f.Name) -Force
|
|
75
|
+
}
|
|
76
|
+
Write-Host " [2/3] Hook files ✓ $($hookFiles.Count) file(s) → $hooksDir" -ForegroundColor Green
|
|
77
|
+
|
|
78
|
+
# ── 3. Register hooks in settings.json ───────────────────────────────────────
|
|
79
|
+
|
|
80
|
+
if ($SkipHooks) {
|
|
81
|
+
Write-Host " [3/3] Hook wiring ⏭ skipped (--SkipHooks)" -ForegroundColor DarkGray
|
|
82
|
+
} else {
|
|
83
|
+
$settingsPath = Join-Path $ClaudeHome "settings.json"
|
|
84
|
+
|
|
85
|
+
# Load existing settings (or start fresh)
|
|
86
|
+
if (Test-Path $settingsPath) {
|
|
87
|
+
$settings = Get-Content $settingsPath -Raw | ConvertFrom-Json
|
|
88
|
+
} else {
|
|
89
|
+
$settings = [PSCustomObject]@{}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
# Build hooks block — all paths use forward slashes for cross-platform compat
|
|
93
|
+
$hooksBase = $hooksDir.Replace("\", "/")
|
|
94
|
+
|
|
95
|
+
$hooksConfig = [PSCustomObject]@{
|
|
96
|
+
UserPromptExpansion = @(
|
|
97
|
+
[PSCustomObject]@{
|
|
98
|
+
hooks = @(
|
|
99
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/rdc-invocation-marker.js`""; statusMessage = "Marking RDC slash command..." }
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
UserPromptSubmit = @(
|
|
104
|
+
[PSCustomObject]@{
|
|
105
|
+
hooks = @(
|
|
106
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/rdc-invocation-marker.js`""; statusMessage = "Marking RDC prompt..." }
|
|
107
|
+
)
|
|
108
|
+
}
|
|
109
|
+
)
|
|
110
|
+
PreToolUse = @(
|
|
111
|
+
[PSCustomObject]@{
|
|
112
|
+
hooks = @(
|
|
113
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/foreground-process-gate.js`""; statusMessage = "Checking foreground process policy..." }
|
|
114
|
+
)
|
|
115
|
+
},
|
|
116
|
+
[PSCustomObject]@{
|
|
117
|
+
matcher = "Bash"
|
|
118
|
+
hooks = @(
|
|
119
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/require-work-item-on-commit.js`"" }
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
)
|
|
123
|
+
PostToolUse = @(
|
|
124
|
+
[PSCustomObject]@{
|
|
125
|
+
hooks = @(
|
|
126
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/check-services.js`"" }
|
|
127
|
+
)
|
|
128
|
+
}
|
|
129
|
+
)
|
|
130
|
+
Stop = @(
|
|
131
|
+
[PSCustomObject]@{
|
|
132
|
+
hooks = @(
|
|
133
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/rdc-output-contract-gate.js`""; statusMessage = "Checking RDC output contract..." },
|
|
134
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/post-work-check.js`""; statusMessage = "Checking for undocumented work..." }
|
|
135
|
+
)
|
|
136
|
+
}
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if ($installProfile -eq "lifeai") {
|
|
141
|
+
$hooksConfig | Add-Member -NotePropertyName "SessionStart" -NotePropertyValue @(
|
|
142
|
+
[PSCustomObject]@{
|
|
143
|
+
hooks = @(
|
|
144
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/check-cwd.js`"" },
|
|
145
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/check-stale-work-items.js`""; statusMessage = "Checking for stale work items..." }
|
|
146
|
+
)
|
|
147
|
+
}
|
|
148
|
+
)
|
|
149
|
+
$hooksConfig.PreToolUse[0].hooks += [PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/work-item-exit-gate.js`""; statusMessage = "Checking work item exit gates..." }
|
|
150
|
+
$hooksConfig | Add-Member -NotePropertyName "PreCompact" -NotePropertyValue @(
|
|
151
|
+
[PSCustomObject]@{ hooks = @([PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/precompact-log.js`"" }) }
|
|
152
|
+
)
|
|
153
|
+
$hooksConfig | Add-Member -NotePropertyName "PostCompact" -NotePropertyValue @(
|
|
154
|
+
[PSCustomObject]@{
|
|
155
|
+
hooks = @(
|
|
156
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/postcompact-log.js`"" },
|
|
157
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/restart-brief.js`""; statusMessage = "Writing restart brief..." }
|
|
158
|
+
)
|
|
159
|
+
}
|
|
160
|
+
)
|
|
161
|
+
$hooksConfig.Stop[0].hooks = @(
|
|
162
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/rate-limit-retry.js`""; statusMessage = "Checking for rate limits..." }
|
|
163
|
+
) + $hooksConfig.Stop[0].hooks + @(
|
|
164
|
+
[PSCustomObject]@{ type = "command"; command = "powershell.exe -NoProfile -NonInteractive -ExecutionPolicy Bypass -WindowStyle Hidden -File `"$hooksBase/run-hidden-hook.ps1`" `"$hooksBase/no-stop-open-epics.js`""; statusMessage = "Checking for open epics..." }
|
|
165
|
+
)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
# Add/replace hooks key
|
|
169
|
+
if ($settings.PSObject.Properties["hooks"]) {
|
|
170
|
+
$settings.hooks = $hooksConfig
|
|
171
|
+
} else {
|
|
172
|
+
$settings | Add-Member -NotePropertyName "hooks" -NotePropertyValue $hooksConfig -Force
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
# Write back with 2-space indent
|
|
176
|
+
$settings | ConvertTo-Json -Depth 20 | Set-Content $settingsPath -Encoding UTF8
|
|
177
|
+
Write-Host " [3/3] Hook wiring ✓ registered in $settingsPath" -ForegroundColor Green
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
# ── Summary ───────────────────────────────────────────────────────────────────
|
|
183
|
+
|
|
184
|
+
Write-Host ""
|
|
185
|
+
Write-Host " Installation complete!" -ForegroundColor Green
|
|
186
|
+
Write-Host ""
|
|
187
|
+
Write-Host " Next steps:" -ForegroundColor Yellow
|
|
188
|
+
Write-Host " 1. Create project overlay guides (required for project-specific context):"
|
|
189
|
+
Write-Host " docs/guides/agent-bootstrap.md ← credentials, git rules, Supabase ref"
|
|
190
|
+
Write-Host " docs/guides/frontend.md ← your design system rules"
|
|
191
|
+
Write-Host " docs/guides/backend.md ← your API/DB patterns"
|
|
192
|
+
Write-Host " docs/guides/data.md ← your migration patterns"
|
|
193
|
+
Write-Host ""
|
|
194
|
+
Write-Host " 2. Use rdc-skills/guides/*.md as starting-point templates"
|
|
195
|
+
Write-Host ""
|
|
196
|
+
Write-Host " 3. Restart Claude Code so hook changes take effect"
|
|
197
|
+
Write-Host ""
|
|
198
|
+
Write-Host " 4. Run /rdc:status in Claude Code to verify"
|
|
199
|
+
Write-Host ""
|
|
200
|
+
Write-Host " Docs: https://github.com/LIFEAI/rdc-skills#readme" -ForegroundColor Cyan
|
|
201
|
+
Write-Host ""
|
|
202
|
+
}
|