@naparnik/mcp 0.10.71 → 0.10.72

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 CHANGED
@@ -21,6 +21,12 @@
21
21
  про сам монтаж. Отсюда берутся «что нового» при обновлении, недельная
22
22
  сводка в боте и пост в клубе.
23
23
 
24
+ ## 0.10.72 — 2026-09-26 — исправление. Обновления приходят в тот же час
25
+
26
+ Новая версия теперь ставится сама в течение пары минут после выхода, пока вы
27
+ работаете, — даже если вы только смотрите и спрашиваете. На «обнови» Claude и
28
+ ChatGPT ставят свежее, а не говорят «новых нет».
29
+
24
30
  ## 0.10.71 — 2026-09-26 — новое. Подскажет, что ещё сделать
25
31
 
26
32
  Попросите одно — Claude и ChatGPT сделают это и сразу подскажут, что ещё
@@ -770,7 +770,7 @@ function parsePositiveInt(raw, fallback) {
770
770
  }
771
771
 
772
772
  // src/version.ts
773
- var VERSION = "0.10.71";
773
+ var VERSION = "0.10.72";
774
774
  var USER_AGENT = `naparnik-mcp/${VERSION}`;
775
775
  var MIN_ENGINE = "2026.09.24-478";
776
776
  var LAUNCHER_PROTOCOL = 1;
@@ -2385,16 +2385,22 @@ var LapseMemory = class {
2385
2385
  /**
2386
2386
  * Спросить сервер фоном. Беду глотаем: наша авария не имеет права ни ронять
2387
2387
  * старт, ни объявлять человеку «подписка кончилась».
2388
+ *
2389
+ * Отдаёт попутные сведения о выложенных версиях (`info`): тем же вопросом
2390
+ * любой вызов узнаёт, не вышло ли новое (`update-nudge.ts`,
2391
+ * `createReleaseWatch`), — второго запроса к серверу это не заводит.
2388
2392
  */
2389
2393
  learn(client) {
2390
2394
  this.#askedAt = Date.now();
2391
- this.#asking = client.postMontage(SDK_SUBSCRIPTION_STATUS_PATH, {}, {
2395
+ const asking = client.postMontage(SDK_SUBSCRIPTION_STATUS_PATH, {}, {
2392
2396
  once: true,
2393
2397
  timeoutMs: ASK_TIMEOUT_MS
2394
2398
  }).then((answer) => {
2395
2399
  this.note(answer);
2400
+ return answer.info;
2396
2401
  }, () => void 0);
2397
- return this.#asking;
2402
+ this.#asking = asking.then(() => void 0);
2403
+ return asking;
2398
2404
  }
2399
2405
  /** Дождаться идущего вопроса, но не позже `ms` от того, как его задали. */
2400
2406
  async settled(ms) {
@@ -17849,7 +17855,7 @@ function setupTool(engine, passport, key, baseUrl) {
17849
17855
  return defineTool({
17850
17856
  name: "setup",
17851
17857
  title: "\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C, \u0432\u0441\u0451 \u043B\u0438 \u0433\u043E\u0442\u043E\u0432\u043E \u0434\u043B\u044F \u043C\u043E\u043D\u0442\u0430\u0436\u0430",
17852
- description: "\u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 \u0434\u0435\u043B\u043E\u043C, \u0447\u0442\u043E \u0441\u0442\u043E\u0438\u0442 \u0438 \u0447\u0435\u0433\u043E \u043D\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0447\u0442\u043E \u0434\u043E\u043A\u0430\u0447\u0430\u0435\u0442\u0441\u044F \u043F\u043E \u043F\u0440\u043E\u0441\u044C\u0431\u0435 \u0438 \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0432\u0435\u0441\u0438\u0442, \u0438 \u0447\u0442\u043E \u0443\u043C\u0435\u0435\u0442 \u043C\u043E\u043D\u0442\u0430\u0436 (\u0448\u0430\u0433\u0438, \u0432\u043E\u043F\u0440\u043E\u0441\u044B \u0434\u043B\u044F choose_variant, \u0447\u0435\u0439 \u0441\u0442\u0438\u043B\u044C). \u0417\u043E\u0432\u0438 \u041F\u0415\u0420\u0412\u042B\u041C \u043D\u0430 \u043B\u044E\u0431\u0443\u044E \u043F\u0440\u043E\u0441\u044C\u0431\u0443 \u0438 \xAB\u0443\u043C\u0435\u0435\u0448\u044C \u043B\u0438\xBB, \u0434\u043E \u043E\u0442\u0432\u0435\u0442\u0430. \u0421\u0442\u0430\u0432\u0438\u0442 install. \u0421\u043B\u043E\u043C\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0441\u043B\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u2014 rollback.",
17858
+ description: "\u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0435\u0442 \u0434\u0435\u043B\u043E\u043C, \u0447\u0442\u043E \u0441\u0442\u043E\u0438\u0442 \u0438 \u0447\u0435\u0433\u043E \u043D\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0447\u0442\u043E \u0434\u043E\u043A\u0430\u0447\u0430\u0435\u0442\u0441\u044F \u043F\u043E \u043F\u0440\u043E\u0441\u044C\u0431\u0435 \u0438 \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0432\u0435\u0441\u0438\u0442, \u0438 \u0447\u0442\u043E \u0443\u043C\u0435\u0435\u0442 \u043C\u043E\u043D\u0442\u0430\u0436 (\u0448\u0430\u0433\u0438, \u0432\u043E\u043F\u0440\u043E\u0441\u044B \u0434\u043B\u044F choose_variant, \u0447\u0435\u0439 \u0441\u0442\u0438\u043B\u044C). \u0417\u043E\u0432\u0438 \u041F\u0415\u0420\u0412\u042B\u041C \u043D\u0430 \u043B\u044E\u0431\u0443\u044E \u043F\u0440\u043E\u0441\u044C\u0431\u0443 \u0438 \xAB\u0443\u043C\u0435\u0435\u0448\u044C \u043B\u0438\xBB, \u0434\u043E \u043E\u0442\u0432\u0435\u0442\u0430. \u0421\u0442\u0430\u0432\u0438\u0442 install. \u0412\u044B\u0448\u043B\u0430 \u043B\u0438 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F, \u041D\u0415 \u0441\u043C\u043E\u0442\u0440\u0438\u0442: \xAB\u043E\u0431\u043D\u043E\u0432\u0438\xBB \u2014 install \u0441 what=all. \u0421\u043B\u043E\u043C\u0430\u043B\u043E\u0441\u044C \u043F\u043E\u0441\u043B\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F \u2014 rollback.",
17853
17859
  args: external_exports.object({
17854
17860
  model: fromList(
17855
17861
  passport?.["models"],
@@ -17885,12 +17891,12 @@ ${INSTALL_HINT}`);
17885
17891
 
17886
17892
  ${INSTALL_HINT}`);
17887
17893
  }
17888
- var INSTALL_HINT = "\u0421\u0442\u0430\u0432\u0438\u0442 install \u2014 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435 \xAB\u0434\u0430\xBB \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0430 \u043D\u0430 \u043D\u0430\u0437\u0432\u0430\u043D\u043D\u043E\u0435 \u0441 \u0432\u0435\u0441\u043E\u043C: what=all \u2014 \u0432\u0441\u0451 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u0438 \u043D\u043E\u0432\u044B\u0435 \u0432\u0435\u0440\u0441\u0438\u0438; speech, cutout, voice \u2014 \u0442\u044F\u0436\u0451\u043B\u043E\u0435 \u043F\u043E \u043F\u0440\u043E\u0441\u044C\u0431\u0435. \u0413\u0434\u0435 \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u043E \xABsetup \u0441 what=\u2026\xBB, \u0437\u043E\u0432\u0438 install \u0441 \u0442\u0435\u043C \u0436\u0435 what.";
17894
+ var INSTALL_HINT = "\u042D\u0442\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 \u043D\u0435 \u0441\u043C\u043E\u0442\u0440\u0438\u0442, \u0432\u044B\u0448\u043B\u0430 \u043B\u0438 \u043D\u043E\u0432\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F. \u041F\u043E\u043F\u0440\u043E\u0441\u0438\u043B\u0438 \xAB\u043E\u0431\u043D\u043E\u0432\u0438\xBB \u0438\u043B\u0438 \xAB\u0435\u0441\u0442\u044C \u043B\u0438 \u043D\u043E\u0432\u0435\u0435\xBB \u2014 \u043F\u043E\u0437\u043E\u0432\u0438 install \u0441 what=all: \u043E\u043D \u0441\u043F\u0440\u043E\u0441\u0438\u0442 \u0440\u0430\u0437\u0434\u0430\u0447\u0443 \u0438 \u043F\u043E\u0441\u0442\u0430\u0432\u0438\u0442 \u0441\u0432\u0435\u0436\u0435\u0435.\n\u0421\u0442\u0430\u0432\u0438\u0442 install \u2014 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435 \xAB\u0434\u0430\xBB \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0430 \u043D\u0430 \u043D\u0430\u0437\u0432\u0430\u043D\u043D\u043E\u0435 \u0441 \u0432\u0435\u0441\u043E\u043C: what=all \u2014 \u0432\u0441\u0451 \u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0435 \u0438 \u043D\u043E\u0432\u044B\u0435 \u0432\u0435\u0440\u0441\u0438\u0438; speech, cutout, voice \u2014 \u0442\u044F\u0436\u0451\u043B\u043E\u0435 \u043F\u043E \u043F\u0440\u043E\u0441\u044C\u0431\u0435. \u0413\u0434\u0435 \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u043E \xABsetup \u0441 what=\u2026\xBB, \u0437\u043E\u0432\u0438 install \u0441 \u0442\u0435\u043C \u0436\u0435 what.";
17889
17895
  function installTool(engine, passport, key, baseUrl) {
17890
17896
  return defineTool({
17891
17897
  name: "install",
17892
17898
  title: "\u041F\u043E\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0434\u043B\u044F \u043C\u043E\u043D\u0442\u0430\u0436\u0430",
17893
- description: "\u0421\u0442\u0430\u0432\u0438\u0442 \u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0435\u0442 \u2014 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435 \xAB\u0434\u0430\xBB \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0430 \u043D\u0430 \u0442\u043E, \u0447\u0442\u043E \u043D\u0430\u0437\u0432\u0430\u043B\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 setup \u0441 \u0432\u0435\u0441\u043E\u043C. \u041E\u0442\u0432\u0435\u0442 \u2014 \u043D\u043E\u043C\u0435\u0440 \u0437\u0430\u0434\u0430\u0447\u0438: \u0436\u0434\u0438 wait. \u041F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u0439 \u0432\u044B\u0437\u043E\u0432 \u0432\u0435\u0440\u043D\u0451\u0442 \u0442\u0443 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0443.",
17899
+ description: "\u0421\u0442\u0430\u0432\u0438\u0442 \u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0435\u0442 \u2014 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435 \xAB\u0434\u0430\xBB \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0430 \u043D\u0430 \u0442\u043E, \u0447\u0442\u043E \u043D\u0430\u0437\u0432\u0430\u043B\u0430 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430 setup \u0441 \u0432\u0435\u0441\u043E\u043C. \xAB\u041E\u0431\u043D\u043E\u0432\u0438\xBB, \xAB\u0435\u0441\u0442\u044C \u043B\u0438 \u043D\u043E\u0432\u0435\u0435\xBB \u2014 what=all: \u0441\u043F\u0440\u043E\u0441\u0438\u0442 \u0440\u0430\u0437\u0434\u0430\u0447\u0443 \u0438 \u043F\u043E\u0441\u0442\u0430\u0432\u0438\u0442 \u0441\u0432\u0435\u0436\u0435\u0435, setup \u043E \u0432\u0435\u0440\u0441\u0438\u044F\u0445 \u043D\u0435 \u0437\u043D\u0430\u0435\u0442. \u041E\u0442\u0432\u0435\u0442 \u2014 \u043D\u043E\u043C\u0435\u0440 \u0437\u0430\u0434\u0430\u0447\u0438: \u0436\u0434\u0438 wait. \u041F\u043E\u0432\u0442\u043E\u0440\u043D\u044B\u0439 \u0432\u044B\u0437\u043E\u0432 \u0432\u0435\u0440\u043D\u0451\u0442 \u0442\u0443 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0443.",
17894
17900
  ui: { resourceUri: RUNBAR_RESOURCE_URI },
17895
17901
  args: external_exports.object({
17896
17902
  what: external_exports.enum(["all", "speech", "cutout", "voice"]).describe(
@@ -18756,6 +18762,8 @@ function orNull(value, max) {
18756
18762
  }
18757
18763
 
18758
18764
  // src/update-nudge.ts
18765
+ var NEWS_EVERY_MS = 2 * 60 * 1e3;
18766
+ var RETRY_SAME_MS = 30 * 60 * 1e3;
18759
18767
  function usable2(value) {
18760
18768
  return typeof value === "string" && value !== "";
18761
18769
  }
@@ -18769,7 +18777,8 @@ function createUpdateNudge(parts = {}) {
18769
18777
  const update = parts.update ?? (() => {
18770
18778
  processHook?.();
18771
18779
  });
18772
- const asked = /* @__PURE__ */ new Set();
18780
+ const clock = parts.clock ?? Date.now;
18781
+ const asked = /* @__PURE__ */ new Map();
18773
18782
  return (info) => {
18774
18783
  if (info === null || typeof info !== "object") return null;
18775
18784
  const safely = (read, fallback) => {
@@ -18784,13 +18793,47 @@ function createUpdateNudge(parts = {}) {
18784
18793
  const newEngine = usable2(info.engine) && engineNow !== null && info.engine !== engineNow ? info.engine : "";
18785
18794
  if (newShell === "" && newEngine === "") return null;
18786
18795
  const seen = `${newShell}|${newEngine}`;
18787
- if (asked.has(seen)) return null;
18788
- asked.add(seen);
18796
+ const now = clock();
18797
+ const was = asked.get(seen);
18798
+ if (was !== void 0 && now - was < RETRY_SAME_MS) return null;
18799
+ asked.set(seen, now);
18789
18800
  update();
18790
18801
  return null;
18791
18802
  };
18792
18803
  }
18793
18804
  var processUpdateNudge = createUpdateNudge();
18805
+ function createReleaseWatch(parts) {
18806
+ const clock = parts.clock ?? Date.now;
18807
+ const nudge = parts.nudge ?? processUpdateNudge;
18808
+ let askedAt = null;
18809
+ let asking = null;
18810
+ return {
18811
+ poke() {
18812
+ if (asking !== null) return asking;
18813
+ const now = clock();
18814
+ if (askedAt !== null && now - askedAt < NEWS_EVERY_MS) return Promise.resolve();
18815
+ askedAt = now;
18816
+ asking = parts.ask().then((info) => {
18817
+ nudge(info);
18818
+ }, () => void 0).finally(() => {
18819
+ asking = null;
18820
+ });
18821
+ return asking;
18822
+ }
18823
+ };
18824
+ }
18825
+ function withReleaseWatch(watch) {
18826
+ return (tool) => {
18827
+ const original = tool.execute.bind(tool);
18828
+ return {
18829
+ ...tool,
18830
+ execute(input, ...rest) {
18831
+ void watch.poke();
18832
+ return original(input, ...rest);
18833
+ }
18834
+ };
18835
+ };
18836
+ }
18794
18837
  var TRIAL_AXES = ["motion", "timing", "place", "camera", "color"];
18795
18838
  var TRIALS_MAX = 10;
18796
18839
  async function startRender(engine, asked, key, tell) {
@@ -23116,7 +23159,15 @@ function buildAll(client, engine, passport, key, baseUrl, pace = realPace, awake
23116
23159
  // того как решит монтировать своим кодом. Описка отбивается раньше — ей блок ни к чему.
23117
23160
  // Привычки работы (`habits.ts`) — под блоком подписки: кончилась подписка —
23118
23161
  // первым она читает это, а не «заведи шаги».
23119
- ].map(withSubscription(client)).map(withHabits()).map(withLapse()).map(withArgs).map(withCrashReport(crashes)).map(withWakefulness(awake)).map(withCallLog(engine.home()));
23162
+ //
23163
+ // ⚠ СТОРОЖ НОВЫХ ВЕРСИЙ — НА ЛЮБОМ ВЫЗОВЕ И СНАРУЖИ СВЕРКИ (`update-nudge.ts`).
23164
+ // Беда владельца 2026-09-26: новость о версии ездила только ответом подписки
23165
+ // ПЛАТНОГО вызова, а он звал `setup` и `plan` без видео — и новое не вставало
23166
+ // часами. Снаружи сверки — потому что и отбитый вызов был ходом модели.
23167
+ // Без ключа спрашивать нечем: ответ был бы отказом.
23168
+ ].map(withSubscription(client)).map(withHabits()).map(withLapse()).map(withArgs).map(withReleaseWatch(createReleaseWatch({
23169
+ ask: key === void 0 || key === "" ? async () => void 0 : () => processLapse.learn(client)
23170
+ }))).map(withCrashReport(crashes)).map(withWakefulness(awake)).map(withCallLog(engine.home()));
23120
23171
  }
23121
23172
  function buildResources() {
23122
23173
  return [chooseResource(), runbarResource()];
package/dist/cli.js CHANGED
@@ -15,7 +15,7 @@
15
15
  // партитуры и свои рабочие файлы, монтируй, смотри любое видео, которое дал
16
16
  // владелец, в том числе чужое. На «что ты умеешь» отвечай спокойно: ЧТО файл
17
17
  // умеет — можно, КАК он это делает — нет.
18
- import { Engine, chooseBody, handOverToBody, VERSION, rollback, rollbackShell, remove, fromNpxCache, install, keyFromBlock, readConfig, ForeignBlockError, McpServer, watchProcessCrashes, reportInstallFaults, noteInstallFault, StdioServerTransport, startupInstructions, processLapse, fromHost, WHERE_TO_GET_KEY, Wakefulness, systemBlocker, updateEngine, installStep, currentMachineFingerprint, CrashReporter, whenNewerReleased, buildAll, realPace, buildResources, shellDir, describeFailure, compare, toolError, NaparnikApiClient, ownSetupJobRunning, forModel, installedShell, startSetupJob, TITLE_UPDATE, runUpdate, setupJobDone, reportJobFaults, setupJobEnding, NaparnikConfigError, installMissing } from './chunk-TSGQKQ6V.js';
18
+ import { Engine, chooseBody, handOverToBody, VERSION, rollback, rollbackShell, remove, fromNpxCache, install, keyFromBlock, readConfig, ForeignBlockError, McpServer, watchProcessCrashes, reportInstallFaults, noteInstallFault, StdioServerTransport, startupInstructions, processLapse, fromHost, WHERE_TO_GET_KEY, Wakefulness, systemBlocker, updateEngine, installStep, currentMachineFingerprint, CrashReporter, whenNewerReleased, buildAll, realPace, buildResources, shellDir, describeFailure, compare, toolError, NaparnikApiClient, ownSetupJobRunning, forModel, installedShell, startSetupJob, TITLE_UPDATE, runUpdate, setupJobDone, reportJobFaults, setupJobEnding, NaparnikConfigError, installMissing } from './chunk-FSL45XXQ.js';
19
19
  import { realpathSync, readFileSync } from 'fs';
20
20
  import { join } from 'path';
21
21
  import { fileURLToPath, pathToFileURL } from 'url';
package/dist/index.d.ts CHANGED
@@ -1229,9 +1229,9 @@ declare class NaparnikConfigError extends NaparnikError {
1229
1229
  * годится ли она для новой начинки: разойдись она с пакетом, и в логах будет
1230
1230
  * стоять чужое число, а обновление начнёт считать оболочку не той.
1231
1231
  */
1232
- declare const VERSION = "0.10.71";
1232
+ declare const VERSION = "0.10.72";
1233
1233
  /** Как мы представляемся серверу Напарника. По нему в логах видно оболочку. */
1234
- declare const USER_AGENT = "naparnik-mcp/0.10.71";
1234
+ declare const USER_AGENT = "naparnik-mcp/0.10.72";
1235
1235
  /**
1236
1236
  * Самая старая начинка (движок монтажа), с которой эта оболочка работает.
1237
1237
  * Обновление начинки ниже этой версии не ставится, а выше — требует оболочки
package/dist/index.js CHANGED
@@ -14,4 +14,4 @@
14
14
  // партитуры и свои рабочие файлы, монтируй, смотри любое видео, которое дал
15
15
  // владелец, в том числе чужое. На «что ты умеешь» отвечай спокойно: ЧТО файл
16
16
  // умеет — можно, КАК он это делает — нет.
17
- 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, markChecked, markCurrent, parseEngineManifest, parseFailure, path, platformKey, previousVersion, probe, refusalFor, remove, rollback, tarEntries, tidyOld, timeToCheck, unpackArchive, withArgs } from './chunk-TSGQKQ6V.js';
17
+ 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, markChecked, markCurrent, parseEngineManifest, parseFailure, path, platformKey, previousVersion, probe, refusalFor, remove, rollback, tarEntries, tidyOld, timeToCheck, unpackArchive, withArgs } from './chunk-FSL45XXQ.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naparnik/mcp",
3
- "version": "0.10.71",
3
+ "version": "0.10.72",
4
4
  "description": "MCP-сервер Напарника: монтаж вертикального видео на машине пользователя — паузы, субтитры, герой на новом фоне, звук. Видео никуда не уезжает.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "private": false,