Publish third-party presentation skills
Add frontend-slides, guizang-ppt-skill, html-ppt, and ppt-master as public third-party marketplace sources with localized Chinese metadata, provenance locks, and generated Codex plugin directories. The sync script now handles root-directory skills without VCS/cache artifacts and supports sparse checkout for large upstream repositories. Constraint: Third-party plugin content is generated from config/external-sources.json and locked to the upstream commit recorded in external-sources.lock.json. Rejected: Keeping administrator-added local copies | Stable third-party sources give clearer provenance and let KeyInfo replace duplicates consistently. Confidence: high Scope-risk: moderate Directive: Re-run external source sync instead of manually editing generated plugin directories; keep ppt-master sparseCheckout scoped unless the upstream skill layout changes. Tested: python scripts/validate_marketplace.py; python /Users/eapil/.codex/skills/.system/plugin-creator/scripts/validate_plugin.py plugins/codex/plugins/frontend-slides; python /Users/eapil/.codex/skills/.system/plugin-creator/scripts/validate_plugin.py plugins/codex/plugins/guizang-ppt-skill; python /Users/eapil/.codex/skills/.system/plugin-creator/scripts/validate_plugin.py plugins/codex/plugins/html-ppt; python /Users/eapil/.codex/skills/.system/plugin-creator/scripts/validate_plugin.py plugins/codex/plugins/ppt-master; git diff --check. Not-tested: Codex marketplace install/remove smoke test and PowerShell sync execution were not run; pwsh/powershell is unavailable on this machine.
This commit is contained in:
@@ -67,6 +67,28 @@ function Copy-PathIfExists {
|
||||
}
|
||||
}
|
||||
|
||||
function Copy-DirectoryFiltered {
|
||||
param(
|
||||
[string]$Source,
|
||||
[string]$Destination,
|
||||
[string]$Within
|
||||
)
|
||||
$ignoredNames = @(".git", "__pycache__", ".DS_Store")
|
||||
Assert-ChildPath -Parent $Within -Child $Destination
|
||||
New-Item -ItemType Directory -Force -Path $Destination | Out-Null
|
||||
foreach ($item in Get-ChildItem -LiteralPath $Source -Force) {
|
||||
if ($ignoredNames -contains $item.Name) {
|
||||
continue
|
||||
}
|
||||
$target = Join-Path $Destination $item.Name
|
||||
if ($item.PSIsContainer) {
|
||||
Copy-DirectoryFiltered -Source $item.FullName -Destination $target -Within $Within
|
||||
} else {
|
||||
Copy-Item -LiteralPath $item.FullName -Destination $target -Force
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Read-JsonFile {
|
||||
param([string]$Path)
|
||||
$resolvedPath = (Resolve-Path -LiteralPath $Path).Path
|
||||
@@ -244,11 +266,22 @@ function Get-Clone {
|
||||
)
|
||||
$clonePath = Join-Path $CloneRoot $Source.id
|
||||
Remove-PathIfExists -Path $clonePath -Within $CloneRoot
|
||||
Invoke-CheckedGit @("clone", "--depth", "1", $Source.repo, $clonePath)
|
||||
$cloneArgs = @("clone", "--depth", "1")
|
||||
$sparseCheckout = @()
|
||||
if ($Source.PSObject.Properties.Name -contains "sparseCheckout" -and $Source.sparseCheckout) {
|
||||
$cloneArgs += @("--filter=blob:none", "--sparse")
|
||||
$sparseCheckout = @($Source.sparseCheckout)
|
||||
}
|
||||
$cloneArgs += @($Source.repo, $clonePath)
|
||||
Invoke-CheckedGit $cloneArgs
|
||||
if ($Source.ref) {
|
||||
Invoke-CheckedGit @("-C", $clonePath, "fetch", "--depth", "1", "origin", $Source.ref)
|
||||
Invoke-CheckedGit @("-C", $clonePath, "checkout", "FETCH_HEAD")
|
||||
}
|
||||
if ($sparseCheckout.Count -gt 0) {
|
||||
$sparseArgs = @("-C", $clonePath, "sparse-checkout", "set", "--no-cone") + $sparseCheckout
|
||||
Invoke-CheckedGit $sparseArgs
|
||||
}
|
||||
$commit = (git -C $clonePath rev-parse HEAD).Trim()
|
||||
return [ordered]@{
|
||||
path = $clonePath
|
||||
@@ -351,7 +384,7 @@ function Sync-ClaudeSkill {
|
||||
New-Item -ItemType Directory -Force -Path (Join-Path $pluginDir ".codex-plugin") | Out-Null
|
||||
New-Item -ItemType Directory -Force -Path (Join-Path $pluginDir "skills") | Out-Null
|
||||
$skillDest = Join-Path (Join-Path $pluginDir "skills") (Split-Path -Leaf $skillSource)
|
||||
Copy-Item -LiteralPath $skillSource -Destination (Join-Path $pluginDir "skills") -Recurse -Force
|
||||
Copy-DirectoryFiltered -Source $skillSource -Destination $skillDest -Within $RepoRoot
|
||||
|
||||
$materializePaths = @()
|
||||
if ($Source.PSObject.Properties.Name -contains "materializePaths" -and $Source.materializePaths) {
|
||||
|
||||
Reference in New Issue
Block a user