release: v1.0.3 统一个人 DWS 通知与简化初始化配置

This commit is contained in:
chenmingxuan committed 2026-09-10 17:14:23 +08:00
1 parent a08cfd6a3b
commit 20c0de9b38
17 files changed
+670 -693

No files matched your search

+50
View File
@@ -0,0 +1,50 @@
# Shared Windows launcher. Also supports: ./scripts/dingtalk-python.ps1 check --at '姓名'
$ErrorActionPreference = 'Stop'
if ($PSVersionTable.PSVersion -lt [version]'7.3') { throw '请使用 PowerShell 7.3+ 或独立 Python 入口。' }
$PSNativeCommandArgumentPassing = 'Standard'
function Resolve-NoticePython {
$candidates = @()
if ($env:DINGTALK_PYTHON) {
# An explicit choice must work; never silently substitute another runtime.
$candidates = @($env:DINGTALK_PYTHON)
} else {
if ($env:USERPROFILE) {
$bundled = Join-Path $env:USERPROFILE '.cache/codex-runtimes/codex-primary-runtime/dependencies/python/python.exe'
if (Test-Path -LiteralPath $bundled -PathType Leaf) { $candidates += $bundled }
}
$candidates += @(Get-Command python, python3 -All -CommandType Application -ErrorAction SilentlyContinue |
Select-Object -ExpandProperty Source)
# py is probed, not trusted: it can also resolve to Store Python.
$candidates += @(Get-Command py -All -CommandType Application -ErrorAction SilentlyContinue |
Select-Object -ExpandProperty Source)
}
foreach ($candidate in ($candidates | Select-Object -Unique)) {
if ($candidate -match '(?i)[\\/]WindowsApps[\\/]|PythonSoftwareFoundation\.Python\.') { continue }
$prefix = if ([IO.Path]::GetFileName($candidate) -eq 'py.exe') { @('-3') } else { @() }
try {
$probe = & $candidate @prefix -I -c 'import json,sys; print(json.dumps({"exe":sys.executable,"supported":sys.version_info >= (3,9)}))' 2>$null
if ($LASTEXITCODE -ne 0) { continue }
$info = ($probe -join "`n") | ConvertFrom-Json
if ($info.supported -and $info.exe -and
$info.exe -notmatch '(?i)[\\/]WindowsApps[\\/]|PythonSoftwareFoundation\.Python\.' -and
(Test-Path -LiteralPath $info.exe -PathType Leaf)) { return $info.exe }
} catch { continue }
}
throw '未找到独立 Python 3.9+。请安装 python.org 版本或将 DINGTALK_PYTHON 设为独立 python.exe 的路径;不使用商店版,也不自动安装。'
}
$pythonExe = Resolve-NoticePython
$previousArgs = [Environment]::GetEnvironmentVariable('DINGTALK_PROGRESS_ARGV_B64', 'Process')
$previousEncoding = [Environment]::GetEnvironmentVariable('PYTHONIOENCODING', 'Process')
try {
$encodedArgs = ConvertTo-Json -InputObject @($args) -Compress
$env:DINGTALK_PROGRESS_ARGV_B64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($encodedArgs))
$env:PYTHONIOENCODING = 'utf-8'
& $pythonExe "$PSScriptRoot/dingtalk_notify.py"
$exitCode = $LASTEXITCODE
} finally {
[Environment]::SetEnvironmentVariable('DINGTALK_PROGRESS_ARGV_B64', $previousArgs, 'Process')
[Environment]::SetEnvironmentVariable('PYTHONIOENCODING', $previousEncoding, 'Process')
}
exit $exitCode