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 +29 -1
- package/package.json +4 -1
- package/test-schema-adapter.mjs +18 -1
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
|
-
|
|
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.
|
|
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",
|
package/test-schema-adapter.mjs
CHANGED
|
@@ -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
|
-
|
|
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)
|