@naparnik/mcp 0.10.22 → 0.10.38

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/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, McpServer, buildAll, buildResources, StdioServerTransport, fromHost, WHERE_TO_GET_KEY, updateEngine, installStep, NaparnikApiClient, timeToCheck2, manifestUrlFor, fetchManifest, markChecked2, decide, shellDir, timeToCheck, bundleUrlFor, fetchShellManifest, markChecked, decideShell, installedShell, NaparnikConfigError } from './chunk-KWTLR6D2.js';
2
+ import { Engine, chooseBody, handOverToBody, VERSION, rollback, rollbackShell, remove, fromNpxCache, install, keyFromBlock, readConfig, ForeignBlockError, currentMachineFingerprint, CrashReporter, watchProcessCrashes, McpServer, buildAll, realPace, buildResources, StdioServerTransport, 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-MCZJVJFA.js';
3
3
  import { fileURLToPath } from 'url';
4
4
  import { realpathSync, readFileSync } from 'fs';
5
5
 
@@ -21,40 +21,33 @@ function notConfiguredClient(reason) {
21
21
  // src/instructions.ts
22
22
  var WHAT_IS_IT = `
23
23
  \u041D\u0430\u043F\u0430\u0440\u043D\u0438\u043A \u043C\u043E\u043D\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0438\u0434\u0435\u043E \u043D\u0430 \u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0435 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0430. \u041D\u0438 \u0432\u0438\u0434\u0435\u043E, \u043D\u0438 \u0437\u0432\u0443\u043A, \u043D\u0438 \u0440\u0435\u0447\u044C
24
- \u043D\u0438\u043A\u0443\u0434\u0430 \u043D\u0435 \u0443\u0435\u0437\u0436\u0430\u044E\u0442 \u2014 \u043D\u0430\u0432\u0435\u0440\u0445 \u0443\u0445\u043E\u0434\u0438\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043A\u043B\u044E\u0447 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0438.
24
+ \u043D\u0438\u043A\u0443\u0434\u0430 \u043D\u0435 \u0443\u0435\u0437\u0436\u0430\u044E\u0442 \u2014 \u043F\u0440\u0438 \u0441\u0431\u043E\u0435 \u0443\u0445\u043E\u0434\u0438\u0442 \u043E\u0442\u0447\u0451\u0442 \u043E \u043F\u043E\u043B\u043E\u043C\u043A\u0435.
25
25
  `.trim();
26
26
  var HOW_MONTAGE_WORKS = `
27
27
  \u041A\u0410\u041A \u041C\u041E\u041D\u0422\u0418\u0420\u041E\u0412\u0410\u0422\u042C
28
28
 
29
- 1. setup \u043F\u0435\u0440\u0432\u044B\u043C, \u0434\u043E \u0432\u0438\u0434\u0435\u043E: \u0447\u0442\u043E \u0441\u0442\u043E\u0438\u0442, \u0447\u0442\u043E \u0443\u043C\u0435\u0435\u0442, \u0447\u0435\u0439 \u0441\u0442\u0438\u043B\u044C \u0438
30
- \u043F\u043E\u0440\u044F\u0434\u043E\u043A. \u0418\u0437 \u043F\u0430\u043C\u044F\u0442\u0438 \u043D\u0435 \u0440\u0430\u0441\u0441\u043A\u0430\u0437\u044B\u0432\u0430\u0439.
31
- 2. plan \u0431\u0435\u0437 \u0430\u0440\u0433\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u2014 \u0447\u0442\u043E \u0443 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0430 \u0441\u043D\u044F\u0442\u043E; plan \u0441 video \u2014 \u0427\u0415\u0420\u041D\u041E\u0412\u0418\u041A
32
- \u0421\u041B\u041E\u0412\u0410\u041C\u0418, \u0434\u043E \u0441\u0431\u043E\u0440\u043A\u0438. \u041D\u0430\u0437\u043E\u0432\u0451\u0442 \u0444\u0430\u0439\u043B\u044B \u0441\u043A\u0438\u043B\u043B\u043E\u0432 \u2014 \u043F\u0440\u043E\u0447\u0442\u0438 \u0438\u0445 plan \u0441 read.
33
- 3. \u041F\u0435\u0440\u0435\u0441\u043A\u0430\u0436\u0438 \u0447\u0435\u0440\u043D\u043E\u0432\u0438\u043A \u041F\u041E\u0421\u0422\u0420\u041E\u0427\u041D\u041E \u0438 \u043E\u0431\u0441\u0443\u0434\u0438. \u041F\u0440\u0430\u0432\u043A\u0438 \u2014 plan_edit. \u041F\u043E\u043A\u0430 \u043D\u0435 \u0441\u043A\u0430\u0437\u0430\u043B
34
- \xAB\u0434\u0430\xBB, \u043D\u0435 \u0441\u043E\u0431\u0438\u0440\u0430\u0439; \u0441\u043A\u0430\u0437\u0430\u043B \u2014 plan_edit \u0441 confirm.
35
- \u0423\u0437\u043A\u0430\u044F \u043F\u0440\u043E\u0441\u044C\u0431\u0430 (\xAB\u043F\u0440\u043E\u0441\u0442\u043E \u0443\u0441\u043A\u043E\u0440\u044C\xBB) \u2014 \u043F\u043B\u0430\u043D \u043F\u0443\u0441\u0442\u043E\u0439, \u043B\u0438\u0448\u043D\u0435\u0433\u043E \u043D\u0435 \u0431\u0443\u0434\u0435\u0442.
36
- 4. \u0421\u0442\u0438\u043B\u044C \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0439 \u2014 \u0441\u043F\u0440\u043E\u0441\u0438 \u041E\u0414\u0418\u041D \u0440\u0430\u0437, \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0430\u043C\u0438 \u043F\u043E \u0440\u0430\u0437\u0434\u0435\u043B\u0430\u043C \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430
29
+ 1. setup \u043F\u0435\u0440\u0432\u044B\u043C, \u0434\u043E \u0432\u0438\u0434\u0435\u043E: \u0447\u0442\u043E \u0441\u0442\u043E\u0438\u0442, \u0447\u0435\u0439 \u0441\u0442\u0438\u043B\u044C \u0438 \u043E\u0433\u043B\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0421\u041F\u0420\u0410\u0412\u041E\u0427\u041D\u0418\u041A\u0410
30
+ \u041C\u041E\u041D\u0422\u0410\u0416\u0401\u0420\u0410. \u0427\u0442\u043E \u0443\u043C\u0435\u0435\u0442 \u043C\u043E\u043D\u0442\u0430\u0436 \u2014 \u0438\u0437 \u0441\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A\u0430, \u043D\u0435 \u0438\u0437 \u043F\u0430\u043C\u044F\u0442\u0438.
31
+ 2. \u0421\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u043E\u0433\u043B\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0438 \u043D\u0430\u0437\u0432\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0432\u0435\u0442\u0430\u043C\u0438 \u043F\u0440\u043E\u0447\u0442\u0438 plan \u0441 read
32
+ \u0414\u041E \u043E\u0442\u0432\u0435\u0442\u0430.
33
+ 3. plan \u0441 video \u2014 \u0427\u0415\u0420\u041D\u041E\u0412\u0418\u041A: \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \u0438 \u043F\u0435\u0440\u0435\u0441\u043A\u0430\u0437. \u041F\u0435\u0440\u0435\u0441\u043A\u0430\u0436\u0438 \u041F\u041E\u0421\u0422\u0420\u041E\u0427\u041D\u041E \u0438
34
+ \u043E\u0431\u0441\u0443\u0434\u0438, \u043F\u0440\u0430\u0432\u043A\u0438 \u2014 plan_edit. \u041F\u0440\u043E\u0441\u044C\u0431\u0430 \u043F\u0440\u043E \u043E\u0434\u043D\u043E \u2014 ask \u0435\u0451 \u0440\u0430\u0437\u0434\u0435\u043B\u0430\u043C\u0438 \u0438\u043B\u0438 {}
35
+ (\u0441\u043B\u043E\u0432\u043E, \u043E\u0433\u043E\u0432\u043E\u0440\u043A\u0430 \u2014 {"speech":{}}): \u0432 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0435 \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u043D\u0430.
36
+ 4. \u0421\u0442\u0438\u043B\u044C \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0439 \u2014 \u0414\u041E \xAB\u0434\u0430\xBB \u0441\u043F\u0440\u043E\u0441\u0438 \u041E\u0414\u0418\u041D \u0440\u0430\u0437, \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0430\u043C\u0438 \u043F\u043E \u0440\u0430\u0437\u0434\u0435\u043B\u0430\u043C
37
37
  (\u0441\u0443\u0431\u0442\u0438\u0442\u0440\u044B, \u0446\u0432\u0435\u0442, \u043F\u0430\u0443\u0437\u044B, \u0441\u0432\u043E\u0439 \u0441\u0442\u0438\u043B\u044C): AskUserQuestion, \u0431\u0435\u0437 \u043D\u0435\u0433\u043E \u2014 \u0441\u043B\u043E\u0432\u0430\u043C\u0438 \u0441
38
- \u043D\u043E\u043C\u0435\u0440\u0430\u043C\u0438. \u0412\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0435 \u2014 choose_variant(questions=[\u0440\u0430\u0437\u0434\u0435\u043B\u044B]), \xAB\u0413\u043E\u0442\u043E\u0432\u043E\xBB
39
- \u0437\u0430\u043F\u0438\u0448\u0435\u0442. \u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u0432\u044B\u0431\u0440\u0430\u043B \u2014 variant_chosen \u0441 keep=true.
40
- \u0421\u0442\u0438\u043B\u044C \u0443\u0436\u0435 \u0441\u0432\u043E\u0439 \u2014 \u043D\u0435 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0439.
41
- 5. \u0414\u0430\u043B\u044C\u0448\u0435 render: \u0432\u0435\u0440\u043D\u0451\u0442 \u041D\u041E\u041C\u0415\u0420 \u0417\u0410\u0414\u0410\u0427\u0418, \u0436\u0434\u0451\u0442 \u0435\u0433\u043E wait. \u041F\u0435\u0440\u0435\u0441\u043A\u0430\u0437\u044B\u0432\u0430\u0439 \u0448\u0430\u0433\u0438,
42
- \u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F \xAB\u0437\u0430\u0432\u0438\u0441\u043B\u043E\xBB; \u0447\u0435\u043A-\u043B\u0438\u0441\u0442 (TaskUpdate) \u2014 \u0432\u0435\u0434\u0438 \u0432 \u043D\u0451\u043C. \u0413\u043E\u0442\u043E\u0432\u043E \u2014
43
- preview.
44
- 6. \xAB\u0425\u043E\u0447\u0443 \u0438\u043D\u0430\u0447\u0435\xBB: \u0441\u0442\u0438\u043B\u044C \u0438 \u0432\u0430\u0440\u0438\u0430\u043D\u0442 \u2014 choose_variant; \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0438\u0441\u0445\u043E\u0434\u043D\u0438\u043A\u043E\u0432,
45
- split-screen, PiP, \u0442\u043E\u0447\u043D\u044B\u0435 in/out \u2014 \u0441\u043A\u0438\u043B\u043B composer (plan \u0441 read), project \u2014
46
- plan_edit, \u0441\u0431\u043E\u0440\u043A\u0430 \u2014 render \u0441 reel; \u0441\u0432\u043E\u0451 \u2014 \u0441\u0432\u043E\u0439 \u0448\u0430\u0433 \u0432 mine/steps (\u043F\u0430\u043F\u043A\u0443
47
- \u0432\u0435\u0440\u0441\u0438\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0437\u0430\u043C\u0435\u043D\u044F\u0435\u0442), \u0434\u0430\u043B\u044C\u0448\u0435 plan_edit \u0441\u043E step; \u043A\u0430\u043A \u2014 \u0432 \u0441\u043A\u0438\u043B\u043B\u0435 builder.
48
- \u0422\u043E\u043B\u044C\u043A\u043E \u043F\u0430\u0443\u0437\u044B \u2014 render \u0441 only_pauses.
49
- 7. \u0422\u044F\u0436\u0451\u043B\u043E\u0435 (\u0432\u044B\u0440\u0435\u0437 \u0433\u0435\u0440\u043E\u044F, \u0447\u0438\u0441\u0442\u043A\u0430 \u0433\u043E\u043B\u043E\u0441\u0430, \u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u0432\u0430\u043D\u0438\u0435 \u0440\u0435\u0447\u0438 \u2014 1,5 \u0413\u0411) \u2014 \u041F\u041E
50
- \u041F\u0420\u041E\u0421\u042C\u0411\u0415: \u043D\u0430\u0437\u043E\u0432\u0438 \u0432\u0435\u0441, \u043F\u043E\u0441\u043B\u0435 \xAB\u0434\u0430\xBB setup \u0441 consent=true. \u0422\u0430\u043A \u0436\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F,
51
- \u0432 \u0441\u0438\u043B\u0435 \u043F\u043E\u0441\u043B\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430.
38
+ \u043D\u043E\u043C\u0435\u0440\u0430\u043C\u0438. \u0412\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0435 \u2014 choose_variant(questions=[\u0440\u0430\u0437\u0434\u0435\u043B\u044B]);
39
+ \u043D\u0438\u0447\u0435\u0433\u043E \u2014 variant_chosen \u0441 keep=true. \u0421\u0442\u0438\u043B\u044C \u0443\u0436\u0435 \u0441\u0432\u043E\u0439 \u2014 \u043D\u0435 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0439.
40
+ 5. \u0411\u0435\u0437 \xAB\u0434\u0430\xBB \u043D\u0435 \u0441\u043E\u0431\u0438\u0440\u0430\u0439; \u0441\u043A\u0430\u0437\u0430\u043B \u2014 plan_edit \u0441 agree, \u043F\u043E\u0442\u043E\u043C render:
41
+ \u0432\u0435\u0440\u043D\u0451\u0442 \u041D\u041E\u041C\u0415\u0420 \u0417\u0410\u0414\u0410\u0427\u0418, \u0436\u0434\u0438 wait, \u043F\u0435\u0440\u0435\u0441\u043A\u0430\u0437\u044B\u0432\u0430\u0439 \u0448\u0430\u0433\u0438 \u0432 \u0447\u0435\u043A-\u043B\u0438\u0441\u0442\u0435 (TaskUpdate),
42
+ \u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044F \xAB\u0437\u0430\u0432\u0438\u0441\u043B\u043E\xBB. \u0413\u043E\u0442\u043E\u0432\u043E \u2014 preview.
43
+ 6. \u041F\u0440\u0430\u0432\u043A\u0430 \u0436\u0434\u0451\u0442 \u043F\u0435\u0447\u0430\u0442\u044C \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B (stamps, document/edits.md):
44
+ \u0431\u0435\u0437 \u043D\u0435\u0451 plan_edit \u043E\u0442\u043A\u0430\u0436\u0435\u0442 \u0438 \u043F\u0440\u0438\u0448\u043B\u0451\u0442 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443.
45
+ 7. \u0422\u044F\u0436\u0451\u043B\u043E\u0435 (\u0432\u044B\u0440\u0435\u0437 \u0433\u0435\u0440\u043E\u044F, \u0440\u0430\u0441\u043F\u043E\u0437\u043D\u0430\u0432\u0430\u043D\u0438\u0435 \u0440\u0435\u0447\u0438) \u2014 \u041F\u041E \u041F\u0420\u041E\u0421\u042C\u0411\u0415: \u043D\u0430\u0437\u043E\u0432\u0438 \u0432\u0435\u0441
46
+ \u0438\u0437 setup, \u043F\u043E\u0441\u043B\u0435 \xAB\u0434\u0430\xBB setup \u0441 consent=true.
52
47
 
53
- \u0421\u043A\u0438\u043B\u043B\u044B (\u0432\u0438\u0437\u0443\u0430\u043B, \u0434\u0432\u0438\u0436\u0435\u043D\u0438\u0435, \u0432\u043A\u0443\u0441) \u0447\u0438\u0442\u0430\u0435\u0442 plan \u0441 read \u0438 \u0411\u0415\u0417 \u0440\u043E\u043B\u0438\u043A\u0430: \u0433\u043E\u0434\u044F\u0442\u0441\u044F \u0438
54
- \u0434\u043B\u044F \u043F\u0440\u0435\u0437\u0435\u043D\u0442\u0430\u0446\u0438\u0438. \u041F\u0435\u0440\u0435\u0447\u0435\u043D\u044C \u0432 setup.
55
-
56
- \u041D\u0435 \u0432\u044B\u0434\u0443\u043C\u044B\u0432\u0430\u0439, \u0447\u0442\u043E \u0443\u043C\u0435\u0435\u0442 \u043C\u043E\u043D\u0442\u0430\u0436, \u0432\u0440\u0435\u043C\u044F \u043D\u0430\u0437\u044B\u0432\u0430\u0439 \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0442 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0430.
57
- \u041A\u0430\u043A \u0443\u0441\u0442\u0440\u043E\u0435\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0438, \u043D\u0435 \u0440\u0430\u0441\u0441\u043A\u0430\u0437\u044B\u0432\u0430\u0439. \u041B\u0435\u043D\u0442\u0430 \u0438 \u043F\u043E\u043C\u043E\u0449\u043D\u0438\u043A\u0438 \u0443\u0431\u0440\u0430\u043D\u044B.
48
+ \u0421\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A \u0433\u043E\u0434\u0438\u0442\u0441\u044F \u0438 \u0431\u0435\u0437 \u0440\u043E\u043B\u0438\u043A\u0430: \u043F\u0440\u0435\u0437\u0435\u043D\u0442\u0430\u0446\u0438\u044F.
49
+ \u041D\u0435 \u0432\u044B\u0434\u0443\u043C\u044B\u0432\u0430\u0439; \u0432\u0440\u0435\u043C\u044F \u2014 \u0442\u043E\u043B\u044C\u043A\u043E \u043E\u0442 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0430.
50
+ \u041A\u0430\u043A \u0443\u0441\u0442\u0440\u043E\u0435\u043D\u043E \u0432\u043D\u0443\u0442\u0440\u0438, \u043D\u0435 \u0440\u0430\u0441\u0441\u043A\u0430\u0437\u044B\u0432\u0430\u0439.
58
51
  `.trim();
59
52
  function notConfiguredInstructions(problem, detail) {
60
53
  const diagnosis = problem === "missing_key" ? "\u041A\u043B\u044E\u0447 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043D\u0435 \u0437\u0430\u0434\u0430\u043D." : `\u041A\u043B\u044E\u0447 \u0437\u0430\u0434\u0430\u043D, \u043D\u043E \u0432\u044B\u0433\u043B\u044F\u0434\u0438\u0442 \u043D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u043E. ${detail}`;
@@ -97,33 +90,22 @@ ${HOW_MONTAGE_WORKS}
97
90
  \u041C\u043E\u043D\u0442\u0430\u0436 \u041D\u0415 \u0442\u0440\u0430\u0442\u0438\u0442 \u043D\u0438 \u0431\u0430\u043B\u0430\u043D\u0441, \u043D\u0438 \u0442\u043E\u043A\u0435\u043D\u044B.
98
91
  `.trim();
99
92
  }
93
+ var HOST_CUT = 2048;
94
+ var BASE_CHARS = 1500;
95
+ var NEWS_SEPARATOR = "\n\n";
96
+ var NEWS_LIMIT = Math.floor((HOST_CUT - BASE_CHARS - 2 * NEWS_SEPARATOR.length) / 2);
100
97
  function aboutNewPayload(ownDir, fresh, megabytes) {
101
- return `
102
- \u0412\u042B\u0428\u041B\u0410 \u041D\u041E\u0412\u0410\u042F \u0412\u0415\u0420\u0421\u0418\u042F \u0414\u0412\u0418\u0416\u041A\u0410 \u041C\u041E\u041D\u0422\u0410\u0416\u0410
103
-
104
- ${ownDir === null ? "\u0414\u0432\u0438\u0436\u043E\u043A \u0435\u0449\u0451 \u043D\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D" : `\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430 ${ownDir}`}, \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 ${fresh} (${megabytes.toFixed(1)} \u041C\u0411).
105
- \u0421\u0430\u043C\u0430 \u043E\u043D\u0430 \u043D\u0435 \u0441\u043A\u0430\u0447\u0430\u0435\u0442\u0441\u044F. \u041A\u043E\u0433\u0434\u0430 \u0447\u0435\u043B\u043E\u0432\u0435\u043A \u0432 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u0440\u0430\u0437 \u0437\u0430\u0433\u043E\u0432\u043E\u0440\u0438\u0442 \u043E \u043C\u043E\u043D\u0442\u0430\u0436\u0435,
106
- \u0441\u043A\u0430\u0436\u0438 \u043E\u0431 \u044D\u0442\u043E\u043C \u043E\u0434\u043D\u043E\u0439 \u0444\u0440\u0430\u0437\u043E\u0439 \u0438 \u0441\u043F\u0440\u043E\u0441\u0438, \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0442\u044C \u043B\u0438; \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0442\u0441\u044F \u2014 \u0437\u043E\u0432\u0438
107
- setup \u0441 what=engine \u0438 consent=true. \u041D\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0439 \u043C\u043E\u043B\u0447\u0430 \u0438 \u043D\u0435 \u0431\u0440\u043E\u0441\u0430\u0439 \u0440\u0430\u0434\u0438 \u044D\u0442\u043E\u0433\u043E \u0435\u0433\u043E
108
- \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u0437\u0430\u0434\u0430\u0447\u0443: \u0441\u0442\u0430\u0440\u0430\u044F \u0432\u0435\u0440\u0441\u0438\u044F \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043A\u0430\u043A \u0440\u0430\u0431\u043E\u0442\u0430\u043B\u0430.
109
- `.trim();
98
+ const now = ownDir === null ? "\u0434\u0432\u0438\u0436\u043E\u043A \u043D\u0435 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D" : `\u0441\u0442\u043E\u0438\u0442 ${ownDir}`;
99
+ return `\u0412\u042B\u0428\u041B\u0410 \u041D\u041E\u0412\u0410\u042F \u0412\u0415\u0420\u0421\u0418\u042F \u0414\u0412\u0418\u0416\u041A\u0410: ${now}, \u0435\u0441\u0442\u044C ${fresh} (${megabytes.toFixed(1)} \u041C\u0411). \u0421\u0430\u043C\u0430 \u043D\u0435 \u0441\u043A\u0430\u0447\u0430\u0435\u0442\u0441\u044F. \u0417\u0430\u0433\u043E\u0432\u043E\u0440\u0438\u0442 \u043E \u043C\u043E\u043D\u0442\u0430\u0436\u0435 \u2014 \u0441\u043A\u0430\u0436\u0438 \u043E\u0434\u043D\u043E\u0439 \u0444\u0440\u0430\u0437\u043E\u0439 \u0438 \u0441\u043F\u0440\u043E\u0441\u0438; \xAB\u0434\u0430\xBB \u2014 setup \u0441 what=engine \u0438 consent=true. \u041C\u043E\u043B\u0447\u0430 \u043D\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0439 \u0438 \u0435\u0433\u043E \u0437\u0430\u0434\u0430\u0447\u0443 \u043D\u0435 \u0431\u0440\u043E\u0441\u0430\u0439.`;
110
100
  }
111
101
  function aboutNewShell(installed, fresh, notes) {
112
- return `
113
- \u0412\u042B\u0428\u041B\u0410 \u041D\u041E\u0412\u0410\u042F \u0412\u0415\u0420\u0421\u0418\u042F \u0421\u0410\u041C\u041E\u0413\u041E \u0420\u0410\u0421\u0428\u0418\u0420\u0415\u041D\u0418\u042F
114
-
115
- \u0421\u0442\u043E\u0438\u0442 ${installed}, \u0432\u044B\u0448\u043B\u0430 ${fresh}. \u0425\u043E\u0434\u0438\u0442\u044C \u043A \u0431\u043E\u0442\u0443 \u0437\u0430 \u0444\u0430\u0439\u043B\u043E\u043C \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043D\u0443\u0436\u043D\u043E \u2014
116
- \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F \u043E\u0442\u0441\u044E\u0434\u0430.
117
- ${notes === null ? "" : `
118
- \u0427\u0422\u041E \u041D\u041E\u0412\u041E\u0413\u041E (\u043F\u0435\u0440\u0435\u0441\u043A\u0430\u0436\u0438 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u0443 \u0441\u0432\u043E\u0438\u043C\u0438 \u0441\u043B\u043E\u0432\u0430\u043C\u0438, \u043D\u0435 \u0437\u0430\u0447\u0438\u0442\u044B\u0432\u0430\u0439 \u0446\u0435\u043B\u0438\u043A\u043E\u043C):
119
- ${notes}
120
- `}
121
- \u0421\u0430\u043C\u0430 \u043E\u043D\u0430 \u043D\u0435 \u043F\u043E\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F. \u041A\u043E\u0433\u0434\u0430 \u0447\u0435\u043B\u043E\u0432\u0435\u043A \u0432 \u0441\u043B\u0435\u0434\u0443\u044E\u0449\u0438\u0439 \u0440\u0430\u0437 \u0437\u0430\u0433\u043E\u0432\u043E\u0440\u0438\u0442 \u043E \u043C\u043E\u043D\u0442\u0430\u0436\u0435, \u0441\u043A\u0430\u0436\u0438
122
- \u043E\u0431 \u044D\u0442\u043E\u043C \u043E\u0434\u043D\u043E\u0439 \u0444\u0440\u0430\u0437\u043E\u0439 \u0438 \u0441\u043F\u0440\u043E\u0441\u0438, \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0442\u044C \u043B\u0438; \u0441\u043E\u0433\u043B\u0430\u0441\u0438\u0442\u0441\u044F \u2014 \u0437\u043E\u0432\u0438 setup \u0441
123
- what=shell \u0438 consent=true. \u041D\u0435 \u043E\u0431\u043D\u043E\u0432\u043B\u044F\u0439 \u043C\u043E\u043B\u0447\u0430 \u0438 \u043D\u0435 \u0431\u0440\u043E\u0441\u0430\u0439 \u0440\u0430\u0434\u0438 \u044D\u0442\u043E\u0433\u043E \u0435\u0433\u043E \u0442\u0435\u043A\u0443\u0449\u0443\u044E \u0437\u0430\u0434\u0430\u0447\u0443.
124
- \u041E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0441\u0442\u0443\u043F\u0438\u0442 \u0432 \u0441\u0438\u043B\u0443 \u043F\u043E\u0441\u043B\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u041A\u043B\u043E\u0434\u0430 \u0438\u043B\u0438 Codex \u2014 \u0441\u043A\u0430\u0436\u0438 \u0438 \u044D\u0442\u043E, \u0438\u043D\u0430\u0447\u0435
125
- \u0447\u0435\u043B\u043E\u0432\u0435\u043A \u0440\u0435\u0448\u0438\u0442, \u0447\u0442\u043E \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u043E.
126
- `.trim();
102
+ const head = `\u0412\u042B\u0428\u041B\u0410 \u041D\u041E\u0412\u0410\u042F \u0412\u0415\u0420\u0421\u0418\u042F \u0420\u0410\u0421\u0428\u0418\u0420\u0415\u041D\u0418\u042F: \u0441\u0442\u043E\u0438\u0442 ${installed}, \u0432\u044B\u0448\u043B\u0430 ${fresh}, \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F \u043E\u0442\u0441\u044E\u0434\u0430.`;
103
+ const tail = "\u0417\u0430\u0433\u043E\u0432\u043E\u0440\u0438\u0442 \u043E \u043C\u043E\u043D\u0442\u0430\u0436\u0435 \u2014 \u0441\u043A\u0430\u0436\u0438 \u043E\u0434\u043D\u043E\u0439 \u0444\u0440\u0430\u0437\u043E\u0439 \u0438 \u0441\u043F\u0440\u043E\u0441\u0438; \xAB\u0434\u0430\xBB \u2014 setup \u0441 what=shell \u0438 consent=true. \u0412 \u0441\u0438\u043B\u0435 \u043F\u043E\u0441\u043B\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u041A\u043B\u043E\u0434\u0430 \u0438\u043B\u0438 Codex \u2014 \u0441\u043A\u0430\u0436\u0438 \u0438 \u044D\u0442\u043E.";
104
+ if (notes === null || notes.trim() === "") return `${head} ${tail}`;
105
+ const room = NEWS_LIMIT - head.length - tail.length - " \u0427\u0442\u043E \u043D\u043E\u0432\u043E\u0433\u043E: . ".length;
106
+ const said = notes.replace(/\s+/g, " ").trim();
107
+ const cut = said.length <= room ? said : `${said.slice(0, Math.max(0, room - 1)).trimEnd()}\u2026`;
108
+ return `${head} \u0427\u0442\u043E \u043D\u043E\u0432\u043E\u0433\u043E: ${cut}. ${tail}`;
127
109
  }
128
110
 
129
111
  // src/auto-install.ts
@@ -329,8 +311,8 @@ Claude Desktop \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F \u043F\u0435\u04
329
311
  process.stdout.write(`${result.words}
330
312
  `);
331
313
  const forEngine = key ?? keyFromBlock(readFileSync(result.file, "utf8"));
332
- const engine = new Engine();
333
- const outcome = await prepareEngine(engine, {
314
+ const { awake, engine } = wakefulEngine();
315
+ const outcome = await awake.during(() => prepareEngine(engine, {
334
316
  key: forEngine,
335
317
  baseUrl: serverAddress(readConfig()),
336
318
  tell: (line) => process.stdout.write(`${line}
@@ -339,7 +321,7 @@ Claude Desktop \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F \u043F\u0435\u04
339
321
  // но вышла свежая начинка, тянем и её. Молчаливое «у тебя всё есть» —
340
322
  // это то, из-за чего покупатель остаётся на прошлой версии.
341
323
  refresh: true
342
- });
324
+ }));
343
325
  if (outcome.worked && !outcome.ok) {
344
326
  process.stdout.write(
345
327
  "\u0414\u0432\u0438\u0436\u043E\u043A \u0441\u043A\u0430\u0447\u0430\u0442\u044C \u0441\u0435\u0439\u0447\u0430\u0441 \u043D\u0435 \u0432\u044B\u0448\u043B\u043E. \u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 Codex \u0438 \u0441\u043A\u0430\u0436\u0438\u0442\u0435\n\xAB\u043F\u0440\u043E\u0432\u0435\u0440\u044C, \u0432\u0441\u0451 \u043B\u0438 \u0433\u043E\u0442\u043E\u0432\u043E \u0434\u043B\u044F \u043C\u043E\u043D\u0442\u0430\u0436\u0430\xBB \u2014 \u0434\u043E\u043A\u0430\u0447\u0430\u044E \u043E\u0442\u0442\u0443\u0434\u0430.\n"
@@ -352,6 +334,10 @@ Claude Desktop \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F \u043F\u0435\u04
352
334
  }
353
335
  return true;
354
336
  }
337
+ function wakefulEngine() {
338
+ const awake = new Wakefulness(systemBlocker());
339
+ return { awake, engine: new Engine(process.env, awake) };
340
+ }
355
341
  function serverAddress(state) {
356
342
  return state.ok ? state.config.baseUrl : state.baseUrl;
357
343
  }
@@ -400,7 +386,14 @@ async function start() {
400
386
  const engineForVersion = new Engine();
401
387
  const client = apiClientFor(state, void 0, () => engineForVersion.currentVersion());
402
388
  const basics = state.ok ? configuredInstructions(state.config.baseUrl) : notConfiguredInstructions(state.problem, state.message);
403
- const engine = new Engine();
389
+ const { awake, engine } = wakefulEngine();
390
+ const crashes = new CrashReporter({
391
+ client,
392
+ home: engine.home(),
393
+ engineVersion: () => engine.currentVersion(),
394
+ canSend: state.ok
395
+ });
396
+ watchProcessCrashes(crashes);
404
397
  const [passport, aboutUpdate, aboutShell] = await Promise.all([
405
398
  engine.passport(),
406
399
  newPayload(engine, serverAddress(state), state.ok ? state.config.apiKey : void 0),
@@ -408,9 +401,7 @@ async function start() {
408
401
  ]);
409
402
  const news = [aboutUpdate, aboutShell].filter((one) => one !== null);
410
403
  const server = new McpServer(void 0, {
411
- instructions: news.length === 0 ? basics : `${basics}
412
-
413
- ${news.join("\n\n")}`,
404
+ instructions: news.length === 0 ? basics : `${basics}${NEWS_SEPARATOR}${news.join(NEWS_SEPARATOR)}`,
414
405
  // ⚠ ПРЕДСТАВЛЯЕМСЯ СВОИМ ИМЕНЕМ, А НЕ ИМЕНЕМ ЯДРА. В Claude Desktop имя
415
406
  // берётся из манифеста расширения и подмена незаметна, а в Codex человек
416
407
  // видит ровно это — и читал «@naparnik/super-agent-core 0.1.0» вместо
@@ -422,7 +413,10 @@ ${news.join("\n\n")}`,
422
413
  engine,
423
414
  passport,
424
415
  state.ok ? state.config.apiKey : void 0,
425
- serverAddress(state)
416
+ serverAddress(state),
417
+ realPace,
418
+ awake,
419
+ crashes
426
420
  );
427
421
  for (const tool of tools) server.addTool(tool);
428
422
  for (const r of buildResources()) server.addResource(r.resource, r.contents);
@@ -442,11 +436,11 @@ ${news.join("\n\n")}`,
442
436
  );
443
437
  }
444
438
  if (state.ok) {
445
- void prepareEngine(engine, {
439
+ void awake.during(() => prepareEngine(engine, {
446
440
  key: state.config.apiKey,
447
441
  baseUrl: state.config.baseUrl,
448
442
  tell: log
449
- }).catch((trouble) => {
443
+ })).catch((trouble) => {
450
444
  log(`\u0434\u0432\u0438\u0436\u043E\u043A \u0434\u043E\u043A\u0430\u0447\u0430\u0442\u044C \u043D\u0435 \u0432\u044B\u0448\u043B\u043E: ${trouble instanceof Error ? trouble.message : String(trouble)}`);
451
445
  });
452
446
  }