@naparnik/mcp 0.10.68 → 0.10.69

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.69 — 2026-09-26 — исправление. Ход работы на виду
25
+
26
+ Claude теперь сам заводит шаги в панели Progress, как только берётся за
27
+ работу, и отмечает каждый. В ChatGPT (Codex) панели нет — там шаги приходят
28
+ списком в ответе.
29
+
24
30
  ## монтаж — 2026-09-26 — новое. «Сделай как у него»
25
31
 
26
32
  Пришлите чужой рилс и скажите «сделай так же». Напарник разберёт его: где
@@ -770,7 +770,7 @@ function parsePositiveInt(raw, fallback) {
770
770
  }
771
771
 
772
772
  // src/version.ts
773
- var VERSION = "0.10.68";
773
+ var VERSION = "0.10.69";
774
774
  var USER_AGENT = `naparnik-mcp/${VERSION}`;
775
775
  var MIN_ENGINE = "2026.09.24-478";
776
776
  var LAUNCHER_PROTOCOL = 1;
@@ -23035,6 +23035,31 @@ ${result.content}` : [{ type: "text", text: header }, ...result.content]
23035
23035
  };
23036
23036
  }
23037
23037
 
23038
+ // src/habits.ts
23039
+ var HABITS = "\u041F\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043E: \u0435\u0441\u0442\u044C \u0443 \u0442\u0435\u0431\u044F Progress (TaskCreate \u0438\u043B\u0438 TodoWrite) \u2014 \u0437\u0430\u0432\u0435\u0434\u0438 \u0432 \u043D\u0451\u043C \u0448\u0430\u0433\u0438 \u044D\u0442\u043E\u0439 \u0440\u0430\u0431\u043E\u0442\u044B \u0441\u0435\u0439\u0447\u0430\u0441, \u0434\u043E \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0435\u0433\u043E \u0432\u044B\u0437\u043E\u0432\u0430, \u0438 \u043E\u0442\u043C\u0435\u0447\u0430\u0439 \u043A\u0430\u0436\u0434\u044B\u0439 (TaskUpdate); \u043D\u0435\u0442 (Codex) \u2014 \u043D\u0430\u043F\u0438\u0448\u0438 \u0448\u0430\u0433\u0438 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0443 \u0441\u043F\u0438\u0441\u043A\u043E\u043C. \u041C\u0435\u0436\u0434\u0443 \u0432\u044B\u0437\u043E\u0432\u0430\u043C\u0438 \u2014 \u0441\u0442\u0440\u043E\u043A\u0430: \u0447\u0442\u043E \u0434\u0435\u043B\u0430\u0435\u0448\u044C \u0438 \u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0436\u0434\u0430\u0442\u044C. \u0421\u0432\u043E\u0451 \u0434\u043E\u043B\u0433\u043E\u0435 \u0431\u0435\u0437 \u043D\u0430\u0448\u0438\u0445 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u2014 \u0441\u043F\u0435\u0440\u0432\u0430 stay_awake.";
23040
+ var HABIT_TOOLS = /* @__PURE__ */ new Set(["setup", "render"]);
23041
+ function headed2(result, line) {
23042
+ if (result.type !== "success") return result;
23043
+ return {
23044
+ ...result,
23045
+ content: typeof result.content === "string" ? `${line}
23046
+
23047
+ ${result.content}` : [{ type: "text", text: line }, ...result.content]
23048
+ };
23049
+ }
23050
+ function withHabits() {
23051
+ return (tool) => {
23052
+ if (!HABIT_TOOLS.has(tool.name)) return tool;
23053
+ const original = tool.execute.bind(tool);
23054
+ return {
23055
+ ...tool,
23056
+ async execute(input, ...rest) {
23057
+ return headed2(await original(input, ...rest), HABITS);
23058
+ }
23059
+ };
23060
+ };
23061
+ }
23062
+
23038
23063
  // src/tool-registry.ts
23039
23064
  function buildAll(client, engine, passport, key, baseUrl, pace = realPace, awake = ASLEEP, crashes = null) {
23040
23065
  return [
@@ -23087,7 +23112,9 @@ function buildAll(client, engine, passport, key, baseUrl, pace = realPace, awake
23087
23112
  // ⚠ БЛОК КОНЧИВШЕЙСЯ ПОДПИСКИ — К ОТВЕТУ `setup`, ВНУТРИ СВЕРКИ (`lapse.ts`).
23088
23113
  // Модель зовёт его первым на любую просьбу и читает, что подписки нет, до
23089
23114
  // того как решит монтировать своим кодом. Описка отбивается раньше — ей блок ни к чему.
23090
- ].map(withSubscription(client)).map(withLapse()).map(withArgs).map(withCrashReport(crashes)).map(withWakefulness(awake)).map(withCallLog(engine.home()));
23115
+ // Привычки работы (`habits.ts`) — под блоком подписки: кончилась подписка —
23116
+ // первым она читает это, а не «заведи шаги».
23117
+ ].map(withSubscription(client)).map(withHabits()).map(withLapse()).map(withArgs).map(withCrashReport(crashes)).map(withWakefulness(awake)).map(withCallLog(engine.home()));
23091
23118
  }
23092
23119
  function buildResources() {
23093
23120
  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-4TNNVXHM.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-KXX2HN3I.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.68";
1232
+ declare const VERSION = "0.10.69";
1233
1233
  /** Как мы представляемся серверу Напарника. По нему в логах видно оболочку. */
1234
- declare const USER_AGENT = "naparnik-mcp/0.10.68";
1234
+ declare const USER_AGENT = "naparnik-mcp/0.10.69";
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-4TNNVXHM.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-KXX2HN3I.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@naparnik/mcp",
3
- "version": "0.10.68",
3
+ "version": "0.10.69",
4
4
  "description": "MCP-сервер Напарника: монтаж вертикального видео на машине пользователя — паузы, субтитры, герой на новом фоне, звук. Видео никуда не уезжает.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "private": false,