Compare commits
12
Commits
6ebb13d51a
...
e88d27ac43
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e88d27ac43 | ||
|
|
03d44e1d71 | ||
|
|
4e7056e821 | ||
|
|
0ae373c202 | ||
|
|
1c2d155fcc | ||
|
|
e143f9d087 | ||
|
|
a4ea912b60 | ||
|
|
c866fe44f0 | ||
|
|
c89aa4885c | ||
|
|
c9ef92e424 | ||
|
|
6314b408b3 | ||
|
|
1163f6d96e |
No files matched your search
@@ -9,7 +9,7 @@ jobs:
|
|||||||
linux:
|
linux:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ./scripts/build.sh
|
run: ./scripts/build.sh
|
||||||
- name: Doctor
|
- name: Doctor
|
||||||
@@ -29,7 +29,7 @@ jobs:
|
|||||||
windows:
|
windows:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v6
|
||||||
- name: Build
|
- name: Build
|
||||||
shell: powershell
|
shell: powershell
|
||||||
run: .\scripts\build.ps1
|
run: .\scripts\build.ps1
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ Codex receives a generated global `AGENTS.md`, agent TOML files, skills, rule fi
|
|||||||
|
|
||||||
Claude's rule loading differs from Codex's by design: `general.md` is the only rule shipped as a plain, always-applied file (its text is also embedded directly in `CLAUDE.md`). Every technology- or situation-specific rule in `shared/rules/` is instead generated as a skill under `skills/rules/`, driven by `adapters/claude/rule-skills.tsv` (rule file, skill name, trigger description). Only a skill's name and description are ever permanently in context; Claude loads the full rule text only when it invokes the skill. Codex is unaffected — it keeps receiving every rule as a plain file and is told to load the matching one by path, exactly as before.
|
Claude's rule loading differs from Codex's by design: `general.md` is the only rule shipped as a plain, always-applied file (its text is also embedded directly in `CLAUDE.md`). Every technology- or situation-specific rule in `shared/rules/` is instead generated as a skill under `skills/rules/`, driven by `adapters/claude/rule-skills.tsv` (rule file, skill name, trigger description). Only a skill's name and description are ever permanently in context; Claude loads the full rule text only when it invokes the skill. Codex is unaffected — it keeps receiving every rule as a plain file and is told to load the matching one by path, exactly as before.
|
||||||
|
|
||||||
Neither current client configuration model exposes a supported global `max_depth` setting. The repository does not emit an unsupported key that would be ignored or cause configuration validation errors.
|
Codex's current configuration schema has no `agents.max_depth` or other agent-recursion-depth key. The only `max_depth`-shaped setting in the schema is `network_proxy.glob_scan_max_depth`, which bounds glob-pattern expansion for the network proxy feature and is unrelated to agents; Claude Code's settings likewise expose no comparable key. The repository does not emit either as an invented key.
|
||||||
|
|
||||||
|
`[agents].enabled = true` (set explicitly, matching its own documented default) is the current, documented way to enable Codex's multi-agent tools. A separate `[features].multi_agent` toggle exists in the schema but is not set here, since `[agents].enabled` already covers it and setting both would be redundant. `multi_agent_v2` does not appear in the current documented schema at all — it surfaced only in upstream issue titles describing an internal/experimental flag — so it is deliberately not configured.
|
||||||
|
|
||||||
Client settings remain thin adapters. Shared semantics remain in `shared/`.
|
Client settings remain thin adapters. Shared semantics remain in `shared/`.
|
||||||
|
|
||||||
|
|||||||
@@ -173,3 +173,4 @@ $leftoverPlaceholders = @(Get-ChildItem $output -File -Recurse | ForEach-Object
|
|||||||
if ($leftoverPlaceholders.Count) { throw "Unresolved template placeholders in: $($leftoverPlaceholders -join ', ')" }
|
if ($leftoverPlaceholders.Count) { throw "Unresolved template placeholders in: $($leftoverPlaceholders -join ', ')" }
|
||||||
|
|
||||||
Write-Output 'PASS build: codex-windows, claude-windows, codex-linux, claude-linux'
|
Write-Output 'PASS build: codex-windows, claude-windows, codex-linux, claude-linux'
|
||||||
|
exit 0
|
||||||
Regular → Executable
File mode changed.
@@ -66,3 +66,4 @@ foreach ($path in @('shared/rules','shared/skills','shared/agents','shared/hooks
|
|||||||
|
|
||||||
if ($fail) { exit 1 }
|
if ($fail) { exit 1 }
|
||||||
Write-Output 'PASS doctor'
|
Write-Output 'PASS doctor'
|
||||||
|
exit 0
|
||||||
Regular → Executable
File mode changed.
@@ -50,3 +50,4 @@ foreach ($item in $targets) {
|
|||||||
|
|
||||||
Install-ConfiguredPlugins -RepositoryRoot $root -Client $Client -DryRun:$DryRun -Update:$UpdatePlugins
|
Install-ConfiguredPlugins -RepositoryRoot $root -Client $Client -DryRun:$DryRun -Update:$UpdatePlugins
|
||||||
Write-Output ($(if ($DryRun) { 'PASS install dry-run' } else { 'PASS install' }))
|
Write-Output ($(if ($DryRun) { 'PASS install dry-run' } else { 'PASS install' }))
|
||||||
|
exit 0
|
||||||
Regular → Executable
File mode changed.
@@ -5,13 +5,15 @@ function Get-ManagedManifestPath {
|
|||||||
|
|
||||||
function Get-Sha256Hash {
|
function Get-Sha256Hash {
|
||||||
param([Parameter(Mandatory=$true)][string]$Path)
|
param([Parameter(Mandatory=$true)][string]$Path)
|
||||||
return (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash
|
# Lowercase to match sha256sum's output, since the manifest must be readable by
|
||||||
|
# both this module and its Bash equivalent regardless of which one wrote it.
|
||||||
|
return (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant()
|
||||||
}
|
}
|
||||||
|
|
||||||
function Get-Sha256HashOfBytes {
|
function Get-Sha256HashOfBytes {
|
||||||
param([Parameter(Mandatory=$true)][byte[]]$Bytes)
|
param([Parameter(Mandatory=$true)][byte[]]$Bytes)
|
||||||
$sha256 = [System.Security.Cryptography.SHA256]::Create()
|
$sha256 = [System.Security.Cryptography.SHA256]::Create()
|
||||||
try { return ([System.BitConverter]::ToString($sha256.ComputeHash($Bytes))).Replace('-', '') }
|
try { return ([System.BitConverter]::ToString($sha256.ComputeHash($Bytes))).Replace('-', '').ToLowerInvariant() }
|
||||||
finally { $sha256.Dispose() }
|
finally { $sha256.Dispose() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,7 +21,8 @@ function Read-ManagedManifest {
|
|||||||
param([Parameter(Mandatory=$true)][string]$ManifestPath)
|
param([Parameter(Mandatory=$true)][string]$ManifestPath)
|
||||||
$entries = @{}
|
$entries = @{}
|
||||||
if (Test-Path -LiteralPath $ManifestPath) {
|
if (Test-Path -LiteralPath $ManifestPath) {
|
||||||
Import-Csv -LiteralPath $ManifestPath -Delimiter ([char]9) | ForEach-Object { $entries[$_.path] = $_.sha256 }
|
# Lowercase to tolerate an older manifest written before hashes were normalized.
|
||||||
|
Import-Csv -LiteralPath $ManifestPath -Delimiter ([char]9) | ForEach-Object { $entries[$_.path] = $_.sha256.ToLowerInvariant() }
|
||||||
}
|
}
|
||||||
return $entries
|
return $entries
|
||||||
}
|
}
|
||||||
@@ -29,7 +32,12 @@ function Write-ManagedManifest {
|
|||||||
$lines = @("path`tsha256")
|
$lines = @("path`tsha256")
|
||||||
foreach ($path in ($Entries.Keys | Sort-Object)) { $lines += "$path`t$($Entries[$path])" }
|
foreach ($path in ($Entries.Keys | Sort-Object)) { $lines += "$path`t$($Entries[$path])" }
|
||||||
New-Item (Split-Path $ManifestPath -Parent) -ItemType Directory -Force | Out-Null
|
New-Item (Split-Path $ManifestPath -Parent) -ItemType Directory -Force | Out-Null
|
||||||
Set-Content -LiteralPath $ManifestPath -Value $lines -Encoding UTF8
|
# Windows PowerShell 5.1's -Encoding UTF8 always prepends a BOM, which Bash's plain
|
||||||
|
# `read` would otherwise fold into the first field of the header line. Write UTF-8
|
||||||
|
# without BOM and with LF line endings so either implementation can read the file
|
||||||
|
# regardless of which one wrote it.
|
||||||
|
$content = ($lines -join "`n") + "`n"
|
||||||
|
[System.IO.File]::WriteAllText($ManifestPath, $content, (New-Object System.Text.UTF8Encoding($false)))
|
||||||
}
|
}
|
||||||
|
|
||||||
function Sync-ManagedDestination {
|
function Sync-ManagedDestination {
|
||||||
|
|||||||
Regular → Executable
+7
-1
@@ -24,8 +24,14 @@ read_managed_manifest() {
|
|||||||
[ -f "$path" ] || return 0
|
[ -f "$path" ] || return 0
|
||||||
local rel hash first=1
|
local rel hash first=1
|
||||||
while IFS=$'\t' read -r rel hash; do
|
while IFS=$'\t' read -r rel hash; do
|
||||||
if [ "$first" = 1 ]; then first=0; [ "$rel" = path ] && continue; fi
|
hash=${hash%$'\r'} # tolerate a CRLF-terminated manifest (read only strips the trailing \n)
|
||||||
|
if [ "$first" = 1 ]; then
|
||||||
|
first=0
|
||||||
|
rel=${rel#$'\xef\xbb\xbf'} # tolerate a UTF-8 BOM on the header line
|
||||||
|
[ "$rel" = path ] && continue
|
||||||
|
fi
|
||||||
[ -n "$rel" ] || continue
|
[ -n "$rel" ] || continue
|
||||||
|
hash=$(printf '%s' "$hash" | tr '[:upper:]' '[:lower:]') # tolerate uppercase hashes from older manifests
|
||||||
out_ref[$rel]=$hash
|
out_ref[$rel]=$hash
|
||||||
done < "$path"
|
done < "$path"
|
||||||
}
|
}
|
||||||
|
|||||||
Regular → Executable
File mode changed.
@@ -49,3 +49,4 @@ Test-BuildFails 'leftover template placeholder' {
|
|||||||
|
|
||||||
Remove-Item $work -Recurse -Force -ErrorAction SilentlyContinue
|
Remove-Item $work -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
Write-Output 'PASS build validation: invalid JSON, duplicate agent, duplicate plugin, and leftover placeholders are all rejected'
|
Write-Output 'PASS build validation: invalid JSON, duplicate agent, duplicate plugin, and leftover placeholders are all rejected'
|
||||||
|
exit 0
|
||||||
Regular → Executable
File mode changed.
@@ -48,3 +48,4 @@ try {
|
|||||||
} finally {
|
} finally {
|
||||||
Remove-Item $work -Recurse -Force -ErrorAction SilentlyContinue
|
Remove-Item $work -Recurse -Force -ErrorAction SilentlyContinue
|
||||||
}
|
}
|
||||||
|
exit 0
|
||||||
Regular → Executable
File mode changed.
@@ -49,4 +49,5 @@ foreach ($platformSelection in @('1','2')) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Write-Output 'PASS four platform packages and six PowerShell selections'
|
Write-Output 'PASS four platform packages and six PowerShell selections'
|
||||||
|
exit 0
|
||||||
|
|
||||||
Regular → Executable
File mode changed.
Regular → Executable
File mode changed.
Regular → Executable
File mode changed.
Regular → Executable
File mode changed.
Regular → Executable
File mode changed.
Regular → Executable
File mode changed.
Reference in new issue
Block a user