subscription-gateway 0.1.2 → 0.1.4

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/gateway.mjs CHANGED
@@ -78,7 +78,35 @@ const MCP_SERVERS = (() => {
78
78
  /** Рабочий каталог инструментов по умолчанию — дом пользователя экземпляра. */
79
79
  const WORK_DIR = process.env.GATEWAY_WORK_DIR || process.env.HOME || '/tmp';
80
80
 
81
- const log = (m) => console.error(`[subscription-gateway] ${m}`);
81
+ // 🔴 ВЕРСИЯ ЧИТАЕТСЯ ИЗ СВОЕГО МАНИФЕСТА, А НЕ ПИШЕТСЯ ЛИТЕРАЛОМ (долг 106, 04.09.2026).
82
+ // ЗАЧЕМ. Шлюз писал в журнал только имя, без номера, и редакцию работающего экземпляра нельзя
83
+ // было установить НИЧЕМ: время файлов не годится (npm ставит всем файлам в тарболе одну метку
84
+ // 1985-10-26 08:15:00), сумма на диске отвечает про диск, а не про то, что процесс прочитал
85
+ // при старте. В тот же день строка `[dsh-pamyat-core <версия>]` у соседнего пакета трижды
86
+ // закрывала спор о том, что в бою, — здесь такой строки не было.
87
+ // ПОЧЕМУ НЕ ЛИТЕРАЛ: он разойдётся с манифестом молча. Манифест не прочитан — печатаем
88
+ // «неизвестна», а не выдуманное число: выдуманное хуже честного «не знаю».
89
+ // 🔴 ДВА ПРИЗНАКА, А НЕ ОДИН — и вторая половина куплена заменом (04.09.2026).
90
+ // Версия из манифеста работает В ПАКЕТЕ, но в ЖИВОМ каталоге манифест другой: это манифест
91
+ // установки зависимостей (private, без поля version), и правка дала бы «неизвестна». Проверено
92
+ // на копии живого каталога ДО того, как трогать боевой файл.
93
+ // Поэтому рядом печатается КОРОТКАЯ СУММА САМОГО ФАЙЛА: она не зависит ни от манифеста, ни от
94
+ // того, кто и как разложил установку, и опознаёт редакцию однозначно. Версия отвечает «какой
95
+ // выпуск», сумма — «этот ли ровно файл». Разойдутся — сразу видно, что установка не из пакета.
96
+ const VERSIYA = (() => {
97
+ try {
98
+ const put = new URL('./package.json', import.meta.url);
99
+ return JSON.parse(fs.readFileSync(put, 'utf8')).version ?? 'неизвестна';
100
+ } catch { return 'неизвестна'; }
101
+ })();
102
+ const SUMMA = (() => {
103
+ try {
104
+ const svoj = fs.readFileSync(new URL(import.meta.url));
105
+ return nodeCrypto.createHash('sha256').update(svoj).digest('hex').slice(0, 8);
106
+ } catch { return '????????'; }
107
+ })();
108
+
109
+ const log = (m) => console.error(`[subscription-gateway ${VERSIYA}/${SUMMA}] ${m}`);
82
110
 
83
111
  /**
84
112
  * «exited with code N» от SDK — это только код без причины; истина в транскрипте
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "subscription-gateway",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Subscription gateway for DeepSeek Harness — runs the model loop through the vendor's official agent SDK, so the platform works on a subscription seat instead of a metered API key, with the token kept in one place on the machine.",
5
5
  "type": "module",
6
6
  "main": "gateway.mjs",
7
+ "scripts": {
8
+ "test": "node test-schema-adapter.mjs"
9
+ },
7
10
  "files": [
8
11
  "gateway.mjs",
9
12
  "jsonschema-to-zod.mjs",
@@ -43,7 +43,24 @@ console.log('\n=== A. Real platform schedule schemas ===')
43
43
  // an argument, because what must be checked is your installation, not the one the
44
44
  // bench was written on.
45
45
  const SCHEDULE_FILE = process.argv[2] ?? `${dirname(fileURLToPath(import.meta.url))}/schedule.json`
46
- const SCHEDULE = JSON.parse(readFileSync(SCHEDULE_FILE, 'utf8'))
46
+ // 🔴 ТРЕТИЙ ИСХОД И ЗДЕСЬ. Выше этот класс уже лечён для ЗАВИСИМОСТИ, а для самого файла
47
+ // схем остался непройденным: без него стенд падал голым стектрейсом с кодом 1 — то есть
48
+ // говорил «предмет расходится» при исправном предмете. Путь берётся из аргумента и пакет
49
+ // прямо приглашает указать СВОЙ файл: опечатка в пути — обычное дело, и отвечать на неё
50
+ // обвинением коду нельзя. Нет файла или он не разбирается — проверять НЕЧЕМ, это код 2.
51
+ // The same third outcome for the schema file itself: a missing or unparsable file means
52
+ // there is nothing to check (exit 2), not that the subject disagrees (exit 1).
53
+ let SCHEDULE
54
+ try {
55
+ SCHEDULE = JSON.parse(readFileSync(SCHEDULE_FILE, 'utf8'))
56
+ if (!Array.isArray(SCHEDULE)) throw new Error('ожидался массив схем / an array of schemas was expected')
57
+ } catch (e) {
58
+ console.log(`СЛЕПОТА: файл схем не прочитан: ${String(e?.message ?? e).slice(0, 120)}`)
59
+ console.log(` Путь: ${SCHEDULE_FILE}`)
60
+ console.log(' Это не расхождение предмета: укажите файл схем аргументом'
61
+ + ' (`node test-schema-adapter.mjs /путь/к/schedule.json`) и повторите.')
62
+ process.exit(2)
63
+ }
47
64
  for (const tool of SCHEDULE) {
48
65
  blok(`${tool.name}: the schema assembled`, () => {
49
66
  const s = shape(tool.parameters)