Compare commits

..
4 Commits
Author SHA1 Message Date
Dmitriy Dementiev b36ce50e12 fix(kimi): скрытый запускатель и запасной путь установки
- Зачем: при повторном запуске через ярлык Kimi цеплялся к консоли pwsh и удерживал окно терминала открытым ради своих логов.
- Что: ярлык переведён на скрытый VBS-запускатель (как у Claude Proxy); добавлен запасной путь %ProgramFiles%\Kimi для установки на всех пользователей.
- Проверка: синтаксис скриптов проверен парсером PowerShell, tests/test_proxy_env_sync.py зелёный.
2026-10-23 14:15:46 +03:00
Dmitriy Dementiev 5b2eef4881 feat(kimi): добавлен запуск Kimi Desktop через прокси
- Зачем: Kimi Desktop по умолчанию ходит в сеть напрямую, а прокси нужен как для Codex и Claude.
- Что: start-kimi-proxy.ps1 запускает Kimi.exe с параметрами Electron --proxy-server и --proxy-bypass-list, run-скрипт chezmoi создаёт ярлык Kimi Proxy в меню "Пуск"; тест синхронизации списков обхода обобщён на все копии.
- Проверка: синтаксис скриптов проверен парсером PowerShell, tests/test_proxy_env_sync.py зелёный, запуск через ярлык проверен вручную.
2026-10-23 14:10:59 +03:00
ddadminandClaude Opus 5.5 4f034ea840 docs(cross-review): проверка оснований находок и пересланных отзывов
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 18:00:40 +02:00
ddadminandClaude Opus 5.5 6d302deb76 docs(cross-review): границы в поручении и наследование режима в T3
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 17:58:42 +02:00
7 changed files with 163 additions and 4 deletions

No files matched your search

+11
View File
@@ -67,6 +67,7 @@ Chezmoi использует отдельный source dir `chezmoi/` внутр
- **UTF-8** - `chcp 65001` + `Console.InputEncoding/OutputEncoding` только для pwsh 7, не для PS 5.1 - **UTF-8** - `chcp 65001` + `Console.InputEncoding/OutputEncoding` только для pwsh 7, не для PS 5.1
- **Codex Proxy shortcut** - Start Menu ярлык для запуска Codex GUI с proxy-переменными - **Codex Proxy shortcut** - Start Menu ярлык для запуска Codex GUI с proxy-переменными
- **Claude Proxy** - ярлык меню "Пуск" для запуска Claude Desktop с переменными прокси - **Claude Proxy** - ярлык меню "Пуск" для запуска Claude Desktop с переменными прокси
- **Kimi Proxy** - ярлык меню "Пуск" для запуска Kimi Desktop с параметрами прокси Electron
- **Extension points** - `~/.config/powershell/profile.extra.ps1` и `profile.d/*.ps1` для локальных добавок - **Extension points** - `~/.config/powershell/profile.extra.ps1` и `profile.d/*.ps1` для локальных добавок
### AI-инструменты (кросс-платформа) ### AI-инструменты (кросс-платформа)
@@ -128,6 +129,14 @@ Codex и Claude Code могут брать прокси из своих наст
Если Claude уже запущен обычным способом, его нужно полностью закрыть перед Если Claude уже запущен обычным способом, его нужно полностью закрыть перед
запуском через `Claude Proxy`. запуском через `Claude Proxy`.
Ярлык `Kimi Proxy` запускает Kimi Desktop с теми же параметрами Electron
`--proxy-server` и `--proxy-bypass-list`, что и `Codex Proxy`. Исполняемый файл
ищется в `%LOCALAPPDATA%\Programs\Kimi` и в `%ProgramFiles%\Kimi` (установка на
всех пользователей). Ярлык использует скрытый промежуточный запускатель, иначе
Kimi цепляется к консоли ярлыка и удерживает окно терминала открытым ради своих
логов. Если Kimi уже запущен, его нужно полностью закрыть перед запуском
через `Kimi Proxy`.
Список хостов, которые идут мимо прокси, продублирован в профилях Codex, Список хостов, которые идут мимо прокси, продублирован в профилях Codex,
PowerShell и VS Code: одного общего файла у Windows и WSL нет. Эталон - PowerShell и VS Code: одного общего файла у Windows и WSL нет. Эталон -
`DEFAULT_NO_PROXY_EXTRA` в `proxy-client/.local/bin/proxy-client`; меняя его, `DEFAULT_NO_PROXY_EXTRA` в `proxy-client/.local/bin/proxy-client`; меняя его,
@@ -212,6 +221,8 @@ PowerShell и VS Code: одного общего файла у Windows и WSL н
| `~/.local/bin/start-claude-proxy.ps1` | Скрипт запуска Claude Desktop для Windows с переменными прокси и параметрами Electron | | `~/.local/bin/start-claude-proxy.ps1` | Скрипт запуска Claude Desktop для Windows с переменными прокси и параметрами Electron |
| `~/.local/bin/start-claude-proxy.vbs` | Скрытый запуск PowerShell-скрипта без привязки Claude к видимому окну терминала | | `~/.local/bin/start-claude-proxy.vbs` | Скрытый запуск PowerShell-скрипта без привязки Claude к видимому окну терминала |
| `~/.local/bin/start-codex-proxy.ps1` | Запуск Codex для Windows через системный идентификатор; прокси Electron задается параметрами, а `codex.exe` читает `~/.codex/.env` | | `~/.local/bin/start-codex-proxy.ps1` | Запуск Codex для Windows через системный идентификатор; прокси Electron задается параметрами, а `codex.exe` читает `~/.codex/.env` |
| `~/.local/bin/start-kimi-proxy.ps1` | Запуск Kimi Desktop для Windows с параметрами прокси Electron |
| `~/.local/bin/start-kimi-proxy.vbs` | Скрытый запуск PowerShell-скрипта без привязки Kimi к видимому окну терминала |
| `~/.local/bin/start-chatgpt-proxy` | Запуск Linux-приложения ChatGPT через активную настройку `proxy-client` | | `~/.local/bin/start-chatgpt-proxy` | Запуск Linux-приложения ChatGPT через активную настройку `proxy-client` |
| `~/.local/share/applications/chatgpt-proxy.desktop` | Отдельный Linux-ярлык `ChatGPT Proxy`, не подменяющий штатный `ChatGPT` | | `~/.local/share/applications/chatgpt-proxy.desktop` | Отдельный Linux-ярлык `ChatGPT Proxy`, не подменяющий штатный `ChatGPT` |
| `~/.config/powershell/profile.extra.ps1` | Локальные дополнения к pwsh-профилю | | `~/.config/powershell/profile.extra.ps1` | Локальные дополнения к pwsh-профилю |
+11 -2
View File
@@ -31,6 +31,9 @@ description: >-
- **постановка**: путь к задаче, спеке или критериям приёмки. Без неё линза - **постановка**: путь к задаче, спеке или критериям приёмки. Без неё линза
«по задаче» работает вслепую — так и напиши; «по задаче» работает вслепую — так и напиши;
- **команды проверки** и ожидаемый результат (например, число тестов); - **команды проверки** и ожидаемый результат (например, число тестов);
- **границы**, если они есть: куда не ходить (приватные данные, рабочие
серверы, боевые скрипты), какие проверки слишком дороги, что в этой среде
заведомо не находка;
- **места, где ты сам не уверен** — вопросами, без своих обоснований: - **места, где ты сам не уверен** — вопросами, без своих обоснований:
пересказ твоей логики лишает ревьюера независимости. То же с выводами пересказ твоей логики лишает ревьюера независимости. То же с выводами
другого ревьюера, пока оба не закончили первый заход; другого ревьюера, пока оба не закончили первый заход;
@@ -97,14 +100,20 @@ prompts/lens-….md > prompt.md`. Файлы `prompts/` лежат в катал
## Разбор находок ## Разбор находок
Разбирает находки автор: у тебя контекст кода и задачи. Пользователю нужен Разбирает находки автор: у тебя контекст кода и задачи. Пользователю нужен
итог в отчёте, а не участие в каждом споре. итог в отчёте, а не участие в каждом споре. Так же разбирай и отзывы других
моделей, которые переслал пользователь.
По каждой находке проверь три вещи: По каждой находке проверь три вещи:
1. **Верна ли она фактически.** Воспроизведи сценарий, прочти код, запусти 1. **Верна ли она фактически.** Воспроизведи сценарий, прочти код, запусти
тест. Ревьюеры ошибаются уверенно: выдумывают API, путают версии, тест. Ревьюеры ошибаются уверенно: выдумывают API, путают версии,
приписывают коду то, чего в нём нет, требуют защиты от невозможных приписывают коду то, чего в нём нет, требуют защиты от невозможных
состояний. Уверенный тон — не доказательство. состояний. Автору легко поверить хорошо изложенной находке, но уверенный
тон — не доказательство. Проверяй и то, на чём находка держится:
утверждения о прогонах, истории и прошлых решениях сверяй с источником
так же, как утверждения о коде. Дешёвая починка от проверки не
освобождает: ложная находка, закрытая одной строкой, всё равно добавляет
лишнее.
2. **Применима ли к этому проекту** — его контрактам, масштабу, угрозам. 2. **Применима ли к этому проекту** — его контрактам, масштабу, угрозам.
3. **Соразмерна ли починка риску.** Предложенный способ — один из вариантов. 3. **Соразмерна ли починка риску.** Предложенный способ — один из вариантов.
Подтверждённый дефект закрывай лучшим путём, какой видишь; отказ от Подтверждённый дефект закрывай лучшим путём, какой видишь; отказ от
@@ -40,7 +40,9 @@
ревьюер не увидит. ревьюер не увидит.
- **`runtimeMode` не задавай.** Режимы с подтверждением остановят ревьюера - **`runtimeMode` не задавай.** Режимы с подтверждением остановят ревьюера
на первом же действии и будут ждать человека в его разговоре. Ограничения на первом же действии и будут ждать человека в его разговоре. Ограничения
задаёт мандат в поручении. задаёт мандат в поручении. Режим наследуется от твоего разговора, а шире
своего задать нельзя: если ты сам работаешь с подтверждением, скажи
пользователю до запуска.
- После запуска заверши ход: уведомление о завершении придёт само. - После запуска заверши ход: уведомление о завершении придёт само.
`task_status` нужен, только если результат требуется посреди хода. `task_status` нужен, только если результат требуется посреди хода.
- Итоговое сообщение ревьюера приходит в `summary`; полный отчёт — в файле - Итоговое сообщение ревьюера приходит в `summary`; полный отчёт — в файле
@@ -0,0 +1,62 @@
$ErrorActionPreference = 'Stop'
if (-not ($IsWindows -or $PSVersionTable.PSEdition -eq 'Desktop')) {
return
}
$LauncherPath = Join-Path $HOME '.local\bin\start-kimi-proxy.ps1'
$LauncherHostPath = Join-Path $HOME '.local\bin\start-kimi-proxy.vbs'
$ProgramsPath = [Environment]::GetFolderPath('Programs')
if ([string]::IsNullOrWhiteSpace($ProgramsPath)) {
Write-Warning 'Start Menu Programs folder was not found.'
return
}
$ShortcutPath = Join-Path $ProgramsPath 'Kimi Proxy.lnk'
$TargetPath = Join-Path $env:WINDIR 'System32\wscript.exe'
$Arguments = "//NoLogo `"$LauncherHostPath`""
$WorkingDirectory = $env:USERPROFILE
$KimiExecutable = @(
(Join-Path $env:LOCALAPPDATA 'Programs\Kimi\Kimi.exe'),
(Join-Path $env:ProgramFiles 'Kimi\Kimi.exe')
) | Where-Object { Test-Path -LiteralPath $_ } | Select-Object -First 1
if ($null -ne $KimiExecutable) {
$IconLocation = "$KimiExecutable,0"
} else {
$IconLocation = "$LauncherPath,0"
}
New-Item -ItemType Directory -Path (Split-Path -Parent $ShortcutPath) -Force | Out-Null
$Shell = New-Object -ComObject WScript.Shell
$Shortcut = $Shell.CreateShortcut($ShortcutPath)
$Changed = $false
if ($Shortcut.TargetPath -ne $TargetPath) {
$Shortcut.TargetPath = $TargetPath
$Changed = $true
}
if ($Shortcut.Arguments -ne $Arguments) {
$Shortcut.Arguments = $Arguments
$Changed = $true
}
if ($Shortcut.WorkingDirectory -ne $WorkingDirectory) {
$Shortcut.WorkingDirectory = $WorkingDirectory
$Changed = $true
}
if ($Shortcut.IconLocation -ne $IconLocation) {
$Shortcut.IconLocation = $IconLocation
$Changed = $true
}
if ($Shortcut.Description -ne 'Launch Kimi with hproxy.local proxy environment') {
$Shortcut.Description = 'Launch Kimi with hproxy.local proxy environment'
$Changed = $true
}
if ($Changed -or -not (Test-Path -LiteralPath $ShortcutPath)) {
$Shortcut.Save()
Write-Host "Kimi Proxy shortcut: updated $ShortcutPath"
} else {
Write-Host 'Kimi Proxy shortcut: already up to date.'
}
@@ -0,0 +1,44 @@
$ErrorActionPreference = 'Stop'
$ProxyHostName = 'hproxy.local'
$ProxyPort = 12334
$HttpProxy = "http://${ProxyHostName}:${ProxyPort}"
$ProxyBypassList = "${ProxyHostName};localhost;127.0.0.1;[::1];*.concept-software.ru;dementev.space;*.dementev.space"
function Get-KimiApplication {
$Candidates = @(
(Join-Path $env:LOCALAPPDATA 'Programs\Kimi\Kimi.exe'),
(Join-Path $env:ProgramFiles 'Kimi\Kimi.exe')
)
foreach ($Executable in $Candidates) {
if (Test-Path -LiteralPath $Executable) {
return $Executable
}
}
throw "Kimi Desktop не найден: проверены пути '$($Candidates -join "', '")'."
}
function Assert-KimiNotRunning {
param(
[Parameter(Mandatory)]
[string]$Executable
)
$RunningProcess = Get-CimInstance Win32_Process -ErrorAction SilentlyContinue |
Where-Object { $_.ExecutablePath -eq $Executable } |
Select-Object -First 1
if ($null -ne $RunningProcess) {
throw 'Kimi уже запущен. Полностью закройте приложение и повторно откройте ярлык Kimi Proxy.'
}
}
$KimiExecutable = Get-KimiApplication
Assert-KimiNotRunning -Executable $KimiExecutable
Start-Process -FilePath $KimiExecutable -ArgumentList @(
"--proxy-server=${HttpProxy}",
"--proxy-bypass-list=${ProxyBypassList}"
)
@@ -0,0 +1,28 @@
Option Explicit
Dim fileSystem
Dim launcherPath
Dim powerShellPath
Dim command
Dim exitCode
Dim shell
Set fileSystem = CreateObject("Scripting.FileSystemObject")
Set shell = CreateObject("WScript.Shell")
launcherPath = shell.ExpandEnvironmentStrings("%USERPROFILE%\.local\bin\start-kimi-proxy.ps1")
powerShellPath = shell.ExpandEnvironmentStrings("%LOCALAPPDATA%\Microsoft\WindowsApps\pwsh.exe")
If Not fileSystem.FileExists(powerShellPath) Then
powerShellPath = "pwsh.exe"
End If
command = """" & powerShellPath & _
""" -NoLogo -NoProfile -ExecutionPolicy Bypass -File """ & _
launcherPath & """"
exitCode = shell.Run(command, 0, True)
If exitCode <> 0 Then
MsgBox "Не удалось запустить Kimi Proxy. Код ошибки: " & exitCode, _
vbCritical, "Kimi Proxy"
End If
+4 -1
View File
@@ -38,6 +38,7 @@ COPIES = (
BYPASS_FILES = ( BYPASS_FILES = (
"chezmoi/dot_local/bin/start-claude-proxy.ps1", "chezmoi/dot_local/bin/start-claude-proxy.ps1",
"chezmoi/dot_local/bin/start-codex-proxy.ps1", "chezmoi/dot_local/bin/start-codex-proxy.ps1",
"chezmoi/dot_local/bin/start-kimi-proxy.ps1",
) )
BYPASS_RE = re.compile(r'^\$ProxyBypassList = "\$\{ProxyHostName\};(.+)"\s*$', re.M) BYPASS_RE = re.compile(r'^\$ProxyBypassList = "\$\{ProxyHostName\};(.+)"\s*$', re.M)
@@ -74,7 +75,9 @@ class NoProxySyncTest(unittest.TestCase):
match, "{}: не найден ProxyBypassList".format(relative_path) match, "{}: не найден ProxyBypassList".format(relative_path)
) )
values.append(match.group(1)) values.append(match.group(1))
self.assertEqual(values[0], values[1], "ProxyBypassList разошёлся") self.assertEqual(
len(set(values)), 1, "ProxyBypassList разошёлся между файлами"
)
if __name__ == "__main__": if __name__ == "__main__":