Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## Unreleased

### PCB layout

- Honor explicit `PCB_LAYOUT_SUBTREE_WORKERS`, `PCB_BOARD_PACKER_THREADS` and `PCB_POST_PLACE_THREADS` values up to the number of logical cores instead of clamping them to the default. The default stays at half the logical cores, at most 8. Requires a backend that applies the same rule.

## 1.3.2 - 2026-10-16

### Schematic fixes
Expand Down
2 changes: 1 addition & 1 deletion docs/local-development.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ npm run test:package --workspace=mcp

Для локального запуска используйте `node /absolute/path/easyeda-copilot/mcp/dist/index.js`. `npx easyeda-copilot-mcp` запускает опубликованный пакет, а не рабочую копию.

При вызове `make_pcb_layout` MCP задаёт `PCB_LAYOUT_SUBTREE_WORKERS` по половине доступных логических ядер, с пределом 8 и минимумом 1. Локальный backend использует отдельные процессы для независимых блоков; `0` отключает этот пул. Общий поиск платы и независимые геометрические оценки используют потоки Rust: `PCB_BOARD_PACKER_THREADS` по умолчанию также использует половину доступных ядер, максимум 8. Фактическое число работников ограничено числом независимых задач. Оба значения можно переопределить в окружении. `PCB_BOARD_PACKER_PROFILE=1` включает раздельные таймеры поиска, локального улучшения и исправления пересечений. После обновления нужно пересобрать native backend, MCP/скилл и перезапустить демон; опубликованная версия backend может ещё не содержать эти изменения.
При вызове `make_pcb_layout` MCP задаёт `PCB_LAYOUT_SUBTREE_WORKERS` по половине доступных логических ядер, с пределом 8 и минимумом 1. Локальный backend использует отдельные процессы для независимых блоков; `0` отключает этот пул. Общий поиск платы и независимые геометрические оценки используют потоки Rust: `PCB_BOARD_PACKER_THREADS` по умолчанию также использует половину доступных ядер, максимум 8. Фактическое число работников ограничено числом независимых задач. Оба значения можно переопределить в окружении; явное значение может превышать 8, но не число логических ядер. `PCB_BOARD_PACKER_PROFILE=1` включает раздельные таймеры поиска, локального улучшения и исправления пересечений. После обновления нужно пересобрать native backend, MCP/скилл и перезапустить демон; опубликованная версия backend может ещё не содержать эти изменения.

## Переход к релизу без публикации

Expand Down
6 changes: 4 additions & 2 deletions mcp/src/tools/pcb/pcb-layout.ts
Original file line number Diff line number Diff line change
Expand Up @@ -243,10 +243,12 @@ async function runPcbLayout(

context.setStage('placing');
// The published backend reads this setting when it creates its subtree pool.
const workerLimit = Math.max(1, Math.min(8, Math.floor(availableParallelism() / 2)));
// Default to half the logical cores (at most 8); an explicit override may use every core.
const cores = availableParallelism();
const workerLimit = Math.max(1, Math.min(8, Math.floor(cores / 2)));
for (const name of ['PCB_LAYOUT_SUBTREE_WORKERS', 'PCB_BOARD_PACKER_THREADS', 'PCB_POST_PLACE_THREADS']) {
const configured = Number(process.env[name] ?? workerLimit);
process.env[name] = String(Number.isFinite(configured) ? Math.min(workerLimit, Math.max(0, Math.floor(configured))) : workerLimit);
process.env[name] = String(Number.isFinite(configured) ? Math.min(cores, Math.max(0, Math.floor(configured))) : workerLimit);
}
const result = await generatePcbLayout(input, {
...apiOptions,
Expand Down