@naparnik/mcp 0.10.48 → 0.10.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/{chunk-Q7HJ7ROV.js → chunk-CXFF4BPP.js} +2299 -2411
- package/dist/cli.js +1 -1
- package/dist/index.d.ts +58 -86
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { Engine, chooseBody, handOverToBody, VERSION, rollback, rollbackShell, remove, fromNpxCache, install, keyFromBlock, readConfig, ForeignBlockError, currentMachineFingerprint, CrashReporter, watchProcessCrashes, McpServer, buildAll, realPace, buildResources, StdioServerTransport, reportInstallFaults, fromHost, WHERE_TO_GET_KEY, Wakefulness, systemBlocker, updateEngine, installStep, NaparnikApiClient, timeToCheck2, manifestUrlFor, fetchManifest, markChecked2, decide, shellDir, timeToCheck, bundleUrlFor, fetchShellManifest, markChecked, decideShell, installedShell, NaparnikConfigError } from './chunk-
|
|
2
|
+
import { Engine, chooseBody, handOverToBody, VERSION, rollback, rollbackShell, remove, fromNpxCache, install, keyFromBlock, readConfig, ForeignBlockError, currentMachineFingerprint, CrashReporter, watchProcessCrashes, McpServer, buildAll, realPace, buildResources, StdioServerTransport, reportInstallFaults, fromHost, WHERE_TO_GET_KEY, Wakefulness, systemBlocker, updateEngine, installStep, NaparnikApiClient, timeToCheck2, manifestUrlFor, fetchManifest, markChecked2, decide, shellDir, timeToCheck, bundleUrlFor, fetchShellManifest, markChecked, decideShell, installedShell, NaparnikConfigError } from './chunk-CXFF4BPP.js';
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
4
|
import { realpathSync, readFileSync } from 'fs';
|
|
5
5
|
|
package/dist/index.d.ts
CHANGED
|
@@ -576,18 +576,6 @@ declare class Wakefulness {
|
|
|
576
576
|
private light;
|
|
577
577
|
}
|
|
578
578
|
|
|
579
|
-
/**
|
|
580
|
-
* Где внутри распакованной портативной сборки лежит сам интерпретатор.
|
|
581
|
-
*
|
|
582
|
-
* ⚠ ТРИ ВАРИАНТА, А НЕ ДВА, И РОВНО ТЕ ЖЕ, ЧТО У ДВИЖКА. Источник правды —
|
|
583
|
-
* `engine/shell-contract.json` → `portable_python.inside`: оттуда их берёт и
|
|
584
|
-
* питон (`engine/setup/python_finder.py`). Копия здесь неизбежна — питон мы
|
|
585
|
-
* ищем ДО того, как есть чем запустить питон, — но прошлая копия знала два
|
|
586
|
-
* варианта из трёх: на сборке, где внутри лежит только `bin/python`, движок
|
|
587
|
-
* питон видел, а сервер MCP нет. Правится сначала JSON, потом сюда; расхождение
|
|
588
|
-
* ловит тест границы (`engine.test.ts`) сверкой с этим JSON.
|
|
589
|
-
*/
|
|
590
|
-
declare const INSIDE_PYTHON: string[];
|
|
591
579
|
/** Дом по умолчанию — ровно тот же литерал, что в `engine/kit/home.py`. */
|
|
592
580
|
declare const DEFAULT_HOME = "~/.naparnik";
|
|
593
581
|
/**
|
|
@@ -792,54 +780,30 @@ declare class Engine {
|
|
|
792
780
|
/** Python окружения пака — им считается монтаж. Может ещё не существовать. */
|
|
793
781
|
packPython(): string | null;
|
|
794
782
|
/**
|
|
795
|
-
*
|
|
783
|
+
* Питон по замку начинки (`engine/deps.lock.json`), если он уже в хранилище.
|
|
796
784
|
*
|
|
797
|
-
* ⚠
|
|
798
|
-
*
|
|
799
|
-
*
|
|
800
|
-
*
|
|
801
|
-
*
|
|
785
|
+
* ⚠ ТОЛЬКО СВОЙ. До 2026-09-24 здесь был «python3» из PATH на случай, когда
|
|
786
|
+
* своего нет, а окружение новой версии собиралось перебором «свой → базовый
|
|
787
|
+
* питон рабочей версии → системный». Claude Desktop подсунул питон Xcode 3.9,
|
|
788
|
+
* тот не собрал окружение, и обновление у владельца не вставало целый день.
|
|
789
|
+
* Решение владельца — «как node_modules»: свой питон по замку, чужого нет.
|
|
802
790
|
*/
|
|
803
|
-
ourPython(): string | null;
|
|
791
|
+
ourPython(place?: EnginePlace | null): string | null;
|
|
804
792
|
/**
|
|
805
|
-
* Python для команд
|
|
793
|
+
* Python для команд движка: окружение пака, а пока его нет — свой питон по
|
|
794
|
+
* замку. Нет ни того, ни другого — путь, которого нет: `pythonTrouble`
|
|
795
|
+
* ответит словами «позови setup», а не «spawn python3 ENOENT».
|
|
806
796
|
*
|
|
807
|
-
*
|
|
808
|
-
*
|
|
809
|
-
*
|
|
810
|
-
* системным python'ом, когда своего ещё нет.
|
|
797
|
+
* ⚠ «python3» ИЗ PATH — ТОЛЬКО ПРИ `NAPARNIK_SYSTEM_TOOLS=1`: так тесты и
|
|
798
|
+
* разработка гоняют движок из исходников без хранилища (та же переменная у
|
|
799
|
+
* движка, `engine/media/ffmpeg.py`). У покупателя её нет.
|
|
811
800
|
*/
|
|
812
801
|
enginePython(): string;
|
|
813
|
-
/** Python подготовки кандидата — намеренно без fallback на venv старого пака. */
|
|
814
|
-
bootstrapPython(): string;
|
|
815
802
|
/**
|
|
816
|
-
*
|
|
817
|
-
*
|
|
818
|
-
* ⚠ БАЗОВЫЙ ПИТОН РАБОЧЕЙ ВЕРСИИ СТОИТ ВПЕРЕДИ «python3» ИЗ PATH, И ЭТО
|
|
819
|
-
* ПОЧИНКА, А НЕ ВКУС. Claude Desktop на маке запускает нас без
|
|
820
|
-
* `/opt/homebrew/bin` в PATH, и «python3» там — `/usr/bin/python3`, питон
|
|
821
|
-
* Xcode 3.9. Он собирает venv только ссылками («This build of python cannot
|
|
822
|
-
* create venvs without using symlinks»), а ссылка на интерпретатор вне версии
|
|
823
|
-
* не проходит сверку `candidateVenvTrouble`. Обновление 2026.09.24-467 у
|
|
824
|
-
* владельца встало ровно на этом, хотя рабочая версия собрана Homebrew 3.14
|
|
825
|
-
* копиями и работает. Движок при первой установке ищет питон сам
|
|
826
|
-
* (`setup/python_finder.py`) и пишет, какой взял, в `pyvenv.cfg` окружения —
|
|
827
|
-
* этот и берём: он уже однажды собрал здесь рабочее окружение копиями.
|
|
828
|
-
*
|
|
829
|
-
* ⚠ НЕ ПИТОН САМОГО VENV. Окружение старой версии удаляется уборкой после
|
|
830
|
-
* обновления, и кандидат, собранный его питоном, остался бы без интерпретатора
|
|
831
|
-
* (`engine-candidate.test.ts`). База из `pyvenv.cfg` лежит вне версий.
|
|
832
|
-
*/
|
|
833
|
-
bootstrapPythons(): string[];
|
|
834
|
-
/**
|
|
835
|
-
* Базовый интерпретатор окружения рабочей версии — из её `pyvenv.cfg`.
|
|
836
|
-
*
|
|
837
|
-
* `home` раньше `executable`: у Homebrew `executable` указывает в папку
|
|
838
|
-
* конкретного выпуска (`Cellar/python@3.14/3.14.7/…`), и после `brew upgrade`
|
|
839
|
-
* её уже нет, а `home` (`/opt/homebrew/opt/python@3.14/bin`) переживает
|
|
840
|
-
* обновление. Нет файла или записанного питона на диске — `null`.
|
|
803
|
+
* Принести питон замка ЭТОГО кандидата (или взять уже лежащий) — им движок
|
|
804
|
+
* кандидата доводит до замка всё остальное (`env-install --step env`).
|
|
841
805
|
*/
|
|
842
|
-
|
|
806
|
+
bringPython(place: EnginePlace, report?: (text: string) => void): Promise<string>;
|
|
843
807
|
/** Python ровно названного кандидата, а не текущей версии. */
|
|
844
808
|
candidatePython(place: EnginePlace): string | null;
|
|
845
809
|
/**
|
|
@@ -860,12 +824,7 @@ declare class Engine {
|
|
|
860
824
|
* Весь движок (включая проверку и установку) идёт через запуск python'а.
|
|
861
825
|
* Когда его нет, `execFile` бросает ENOENT, и клиентской нейросети
|
|
862
826
|
* доставалось «spawn python3 ENOENT» — текст, из которого человеку не понять
|
|
863
|
-
* ничего.
|
|
864
|
-
* недостижим по устройству: он сам запускается python'ом.
|
|
865
|
-
*
|
|
866
|
-
* На Windows есть отдельная беда: в PATH лежит заглушка Microsoft Store —
|
|
867
|
-
* `python` там есть, он печатает рекламу магазина и выходит с кодом 9009.
|
|
868
|
-
* Поэтому проверяем не наличие файла, а ответ на вопрос о версии.
|
|
827
|
+
* ничего. Проверяем не наличие файла, а ответ на вопрос о версии.
|
|
869
828
|
*/
|
|
870
829
|
pythonTrouble(): Promise<string | null>;
|
|
871
830
|
/**
|
|
@@ -894,10 +853,11 @@ declare class Engine {
|
|
|
894
853
|
stderr: string;
|
|
895
854
|
}>;
|
|
896
855
|
/** Запуск через явно выбранный Python нужен проверке кандидата до current. */
|
|
897
|
-
runWith(executable: string, place: EnginePlace, args: string[], { maxBuffer, timeout, key, }?: {
|
|
856
|
+
runWith(executable: string, place: EnginePlace, args: string[], { maxBuffer, timeout, key, onLine, }?: {
|
|
898
857
|
maxBuffer?: number;
|
|
899
858
|
timeout?: number;
|
|
900
859
|
key?: string;
|
|
860
|
+
onLine?: (line: string) => void;
|
|
901
861
|
}): Promise<{
|
|
902
862
|
stdout: string;
|
|
903
863
|
stderr: string;
|
|
@@ -1452,21 +1412,6 @@ interface StepOutcome {
|
|
|
1452
1412
|
interface FirstInstallTestHooks {
|
|
1453
1413
|
afterPublishRename?(): void;
|
|
1454
1414
|
}
|
|
1455
|
-
/** Где внутри начинки лежит общая таблица источников питона. */
|
|
1456
|
-
declare const SOURCES_FILE = "python-sources.json";
|
|
1457
|
-
interface PythonSource {
|
|
1458
|
-
url: string;
|
|
1459
|
-
sha256: string;
|
|
1460
|
-
mb: number;
|
|
1461
|
-
}
|
|
1462
|
-
/**
|
|
1463
|
-
* Ключ платформы ровно в том виде, в каком его пишет питон:
|
|
1464
|
-
* `platform.system()`-`platform.machine()`. Совпадение обязано быть точным —
|
|
1465
|
-
* таблица одна на две стороны.
|
|
1466
|
-
*/
|
|
1467
|
-
declare function platformKey(os?: NodeJS.Platform, arch?: string): string | null;
|
|
1468
|
-
/** Прочитать таблицу питона из установленной начинки. */
|
|
1469
|
-
declare function pythonSource(engineDir: string, key?: string | null): PythonSource | null;
|
|
1470
1415
|
/**
|
|
1471
1416
|
* Доставить начинку, когда движка нет вовсе.
|
|
1472
1417
|
*
|
|
@@ -1478,17 +1423,44 @@ declare function installPayload(engine: Engine, opts: {
|
|
|
1478
1423
|
manifestUrl: string;
|
|
1479
1424
|
key?: string | undefined;
|
|
1480
1425
|
}, hooks?: FirstInstallTestHooks): Promise<StepOutcome>;
|
|
1426
|
+
|
|
1427
|
+
declare const LOCK_FILE = "deps.lock.json";
|
|
1428
|
+
interface LockArchive {
|
|
1429
|
+
url: string;
|
|
1430
|
+
sha256: string;
|
|
1431
|
+
bytes: number;
|
|
1432
|
+
}
|
|
1433
|
+
/** Питон замка для этой машины: откуда качать и куда положить. */
|
|
1434
|
+
interface LockedPython {
|
|
1435
|
+
version: string;
|
|
1436
|
+
archive: LockArchive;
|
|
1437
|
+
/** Папка в хранилище: `<дом>/deps/python/<версия>-<сумма>`. */
|
|
1438
|
+
folder: string;
|
|
1439
|
+
/** Интерпретатор внутри папки. */
|
|
1440
|
+
executable: string;
|
|
1441
|
+
}
|
|
1481
1442
|
/**
|
|
1482
|
-
*
|
|
1443
|
+
* Ключ строки замка ровно в том виде, в каком его пишет питон:
|
|
1444
|
+
* `platform.system()-platform.machine()`.
|
|
1445
|
+
*/
|
|
1446
|
+
declare function platformKey(os?: NodeJS.Platform, arch?: string): string | null;
|
|
1447
|
+
/** `<версия>-<8 знаков суммы каждого архива>` — имя папки в хранилище, как у движка. */
|
|
1448
|
+
declare function depFolderName(entry: {
|
|
1449
|
+
version: string;
|
|
1450
|
+
archives: Array<{
|
|
1451
|
+
sha256: string;
|
|
1452
|
+
}>;
|
|
1453
|
+
}): string;
|
|
1454
|
+
/** Прочитать строку питона из замка начинки; нет замка или сборки под машину — null. */
|
|
1455
|
+
declare function lockedPython(engineDir: string, home: string, key?: string | null): LockedPython | null;
|
|
1456
|
+
/**
|
|
1457
|
+
* Принести питон замка в хранилище, если его там ещё нет; вернуть путь к нему.
|
|
1483
1458
|
*
|
|
1484
|
-
*
|
|
1485
|
-
*
|
|
1486
|
-
*
|
|
1459
|
+
* Папка появляется целиком: распаковка — в соседнюю `.partial-<pid>`, потом
|
|
1460
|
+
* переименование. Лежит уже — сеть не трогаем вовсе: «версию питона не подняли
|
|
1461
|
+
* — используем уже скачанную».
|
|
1487
1462
|
*/
|
|
1488
|
-
declare function
|
|
1489
|
-
consent: boolean;
|
|
1490
|
-
version?: string;
|
|
1491
|
-
}): Promise<StepOutcome>;
|
|
1463
|
+
declare function bringPython(python: LockedPython, report?: (text: string) => void): Promise<string>;
|
|
1492
1464
|
|
|
1493
1465
|
/**
|
|
1494
1466
|
* Иерархия ошибок клиента Напарника.
|
|
@@ -1590,9 +1562,9 @@ declare class NaparnikConfigError extends NaparnikError {
|
|
|
1590
1562
|
* годится ли она для новой начинки: разойдись она с пакетом, и в логах будет
|
|
1591
1563
|
* стоять чужое число, а обновление начнёт считать оболочку не той.
|
|
1592
1564
|
*/
|
|
1593
|
-
declare const VERSION = "0.10.
|
|
1565
|
+
declare const VERSION = "0.10.52";
|
|
1594
1566
|
/** Как мы представляемся серверу Напарника. По нему в логах видно оболочку. */
|
|
1595
|
-
declare const USER_AGENT = "naparnik-mcp/0.10.
|
|
1567
|
+
declare const USER_AGENT = "naparnik-mcp/0.10.52";
|
|
1596
1568
|
/**
|
|
1597
1569
|
* Самая старая начинка (движок монтажа), с которой эта оболочка работает.
|
|
1598
1570
|
* Обновление начинки ниже этой версии не ставится, а выше — требует оболочки
|
|
@@ -1629,7 +1601,7 @@ declare const USER_AGENT = "naparnik-mcp/0.10.48";
|
|
|
1629
1601
|
* словами «раздача ещё не обновилась». Номер берётся из УЖЕ СОБРАННОГО
|
|
1630
1602
|
* артефакта этой волны, а не сочиняется по календарю.
|
|
1631
1603
|
*/
|
|
1632
|
-
declare const MIN_ENGINE = "2026.09.24-
|
|
1604
|
+
declare const MIN_ENGINE = "2026.09.24-478";
|
|
1633
1605
|
|
|
1634
1606
|
/**
|
|
1635
1607
|
* Что вышло из установки или отката — одними словами у начинки и у тела.
|
|
@@ -1896,4 +1868,4 @@ declare function install(n: Settings): Outcome;
|
|
|
1896
1868
|
/** Убрать наш блок и ничего кроме него. */
|
|
1897
1869
|
declare function remove(env?: NodeJS.ProcessEnv): Outcome;
|
|
1898
1870
|
|
|
1899
|
-
export { type ArgsSchema, type CheckedTool, type CommandOutcome, DEFAULT_HOME, type Decision, DeliveryError, Engine, type EngineManifest, type EnginePlace, ForeignBlockError,
|
|
1871
|
+
export { type ArgsSchema, type CheckedTool, type CommandOutcome, DEFAULT_HOME, type Decision, DeliveryError, Engine, type EngineManifest, type EnginePlace, ForeignBlockError, INSTALL_STEPS, type InstallOutcome, KEEP_COPIES, KEEP_VERSIONS, LOCK_FILE, LONG_STEPS, MANIFEST_TIMEOUT_MS, MANIFEST_URL, MARKER, MIN_ENGINE, type ManifestOutcome, NaparnikApiClient, NaparnikAuthError, NaparnikClientError, NaparnikConfigError, NaparnikError, NaparnikInsufficientBalanceError, type NaparnikMcpConfig, NaparnikScopeError, NaparnikServerError, NaparnikTimeoutError, type Outcome, PAUSE_HOURS, type PackPassport, SERVER_NAME, START_SEC, type Settings, TOOL_SEC, type Trial, USER_AGENT, type UpdateDeps, VERSION, bringPython, buildAll, buildBlock, buildResources, compare, configPath, decide, defineTool, depFolderName, deploy, downloadFile, fetchManifest, fileOrRefusal, findBlock, fromNpxCache, inside, install, installPayload, jsonSchemaOf, keyInTable, lastLine, loadConfig, lockedPython, markChecked, markCurrent, parseEngineManifest, parseFailure, path, platformKey, previousVersion, probe, refusalFor, remove, rollback, tarEntries, tidyOld, timeToCheck, unpackArchive, withArgs };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { DEFAULT_HOME, DeliveryError, Engine, ForeignBlockError,
|
|
1
|
+
export { DEFAULT_HOME, DeliveryError, Engine, ForeignBlockError, INSTALL_STEPS, KEEP_COPIES, KEEP_VERSIONS, LOCK_FILE, LONG_STEPS, MANIFEST_TIMEOUT_MS, MANIFEST_URL, MARKER, MIN_ENGINE, NaparnikApiClient, NaparnikAuthError, NaparnikClientError, NaparnikConfigError, NaparnikError, NaparnikInsufficientBalanceError, NaparnikScopeError, NaparnikServerError, NaparnikTimeoutError, PAUSE_HOURS, SERVER_NAME, START_SEC, TOOL_SEC, USER_AGENT, VERSION, bringPython, buildAll, buildBlock, buildResources, compare, configPath, decide, defineTool, depFolderName, deploy, downloadFile, fetchManifest, fileOrRefusal, findBlock, fromNpxCache, inside, install, installPayload, jsonSchemaOf, keyInTable, lastLine, loadConfig, lockedPython, markChecked2 as markChecked, markCurrent, parseEngineManifest, parseFailure, path, platformKey, previousVersion, probe, refusalFor, remove, rollback, tarEntries, tidyOld, timeToCheck2 as timeToCheck, unpackArchive, withArgs } from './chunk-CXFF4BPP.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@naparnik/mcp",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.52",
|
|
4
4
|
"description": "MCP-сервер Напарника: монтаж вертикального видео на машине пользователя — паузы, субтитры, герой на новом фоне, звук. Видео никуда не уезжает.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
6
6
|
"private": false,
|