@dev-sergeev/datalab-kit 0.1.6 → 0.1.7
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 +6 -0
- package/README.md +8 -8
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/dist/extension.js +2 -2
- package/dist/install.d.ts +2 -2
- package/dist/install.js +14 -12
- package/docs/adr/0002-package-delivery.md +5 -5
- package/node_modules/node-addon-api/common 2.gypi +21 -0
- package/node_modules/node-addon-api/except 2.gypi +25 -0
- package/node_modules/node-addon-api/napi 2.h +3463 -0
- package/node_modules/node-addon-api/napi-inl 2.h +7250 -0
- package/node_modules/node-addon-api/napi-inl.deprecated 2.h +186 -0
- package/node_modules/node-addon-api/node_addon_api 2.gyp +42 -0
- package/node_modules/node-addon-api/node_api 2.gyp +9 -0
- package/node_modules/node-addon-api/noexcept 2.gypi +26 -0
- package/node_modules/node-addon-api/nothing 2.c +0 -0
- package/node_modules/pi-toggle-skills/toggle-skills 2.ts +316 -0
- package/node_modules/pi-toggle-skills/vitest.config 2.ts +15 -0
- package/node_modules/sprintf-js/.npmignore 2 +1 -0
- package/node_modules/sprintf-js/LICENSE 2 +24 -0
- package/node_modules/sprintf-js/README 2.md +88 -0
- package/node_modules/sprintf-js/bower 2.json +14 -0
- package/node_modules/sprintf-js/gruntfile 2.js +36 -0
- package/node_modules/sprintf-js/package 2.json +22 -0
- package/node_modules/tree-sitter-bash/tree-sitter-bash 2.wasm +0 -0
- package/node_modules/typebox/license 2 +23 -0
- package/node_modules/typebox/package 2.json +87 -0
- package/node_modules/typebox/readme 2.md +370 -0
- package/node_modules/zod/compile 2.cjs +96 -0
- package/node_modules/zod/compile 2.js +52 -0
- package/node_modules/zod/index 2.cjs +52 -0
- package/node_modules/zod/index 2.js +7 -0
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.7 — 2026-10-20
|
|
4
|
+
|
|
5
|
+
- Совместимость с Pi закреплена строго на `0.85.1`: peer-зависимости `pi-ai`, `pi-coding-agent` и `pi-tui` больше не допускают произвольные версии.
|
|
6
|
+
- `@dev-sergeev/pi-gigachat` закреплён на `0.6.4` в манифесте, lockfile и отдельном источнике Pi. Установщик больше не запрашивает `latest`; штатное обновление Pi сохраняет закреплённую версию.
|
|
7
|
+
- Прежняя незакреплённая запись GigaChat мигрирует на `npm:@dev-sergeev/pi-gigachat@0.6.4` с сохранением фильтров ресурсов. Явно выбранные пользователем версии и остальные настройки сохраняются.
|
|
8
|
+
|
|
3
9
|
## 0.1.6 — 2026-10-15
|
|
4
10
|
|
|
5
11
|
- В пакет включены навыки `init` и `skill-creator`, доступные во всех проектах после глобальной установки набора. Добавлены короткие команды `/init` и `/skill-creator`; явное отключение ресурсов Pi сохраняет приоритет.
|
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
## Установка
|
|
6
6
|
|
|
7
|
-
Нужны Node.js ≥ 22.19 и установленный Pi.
|
|
7
|
+
Нужны Node.js ≥ 22.19 и установленный Pi **строго 0.85.1**. Peer-зависимости `@earendil-works/pi-ai`, `@earendil-works/pi-coding-agent` и `@earendil-works/pi-tui` закреплены на `0.85.1`, без диапазонов версий, как в `pi-gigachat` 0.6.4. Это декларация совместимости npm, а не runtime-проверка: управляемый установщик Pi использует `--legacy-peer-deps`.
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
pi install npm:@dev-sergeev/datalab-kit
|
|
@@ -17,7 +17,7 @@ pi
|
|
|
17
17
|
npm ci --ignore-scripts --legacy-peer-deps
|
|
18
18
|
npm run build
|
|
19
19
|
npm pack
|
|
20
|
-
npm install --prefix /tmp/datalab-kit-local --legacy-peer-deps ./dev-sergeev-datalab-kit-0.1.
|
|
20
|
+
npm install --prefix /tmp/datalab-kit-local --legacy-peer-deps ./dev-sergeev-datalab-kit-0.1.7.tgz
|
|
21
21
|
pi install /tmp/datalab-kit-local/node_modules/@dev-sergeev/datalab-kit
|
|
22
22
|
```
|
|
23
23
|
|
|
@@ -29,7 +29,7 @@ pi install /tmp/datalab-kit-local/node_modules/@dev-sergeev/datalab-kit
|
|
|
29
29
|
|
|
30
30
|
| Пакет | Версия |
|
|
31
31
|
| --- | --- |
|
|
32
|
-
| `@dev-sergeev/pi-gigachat` |
|
|
32
|
+
| `@dev-sergeev/pi-gigachat` | 0.6.4 |
|
|
33
33
|
| `@juicesharp/rpiv-ask-user-question` | 2.11.0 |
|
|
34
34
|
| `pi-powerline-footer` | 0.17.2 |
|
|
35
35
|
| `@gotgenes/pi-permission-system` | 33.0.5 |
|
|
@@ -42,9 +42,9 @@ pi install /tmp/datalab-kit-local/node_modules/@dev-sergeev/datalab-kit
|
|
|
42
42
|
| `pi-toggle-skills` | 0.1.20 |
|
|
43
43
|
| `@zigai/pi-mention-skill` | 0.10.4 |
|
|
44
44
|
|
|
45
|
-
Одиннадцать фиксированных компонентов включены в архив npm вместе с их зависимостями. GigaChat устанавливается отдельно
|
|
45
|
+
Одиннадцать фиксированных компонентов включены в архив npm вместе с их зависимостями. GigaChat устанавливается отдельно с закреплением версии `0.6.4`.
|
|
46
46
|
|
|
47
|
-
Datalab Kit загружает штатное расширение GigaChat 0.6.
|
|
47
|
+
Datalab Kit загружает штатное расширение GigaChat 0.6.4 без изменения его кода. `/gigachat` открывает интерактивный мастер подключений, авторизации и выбора моделей из каталогов серверов; это не интерфейс настройки через аргументы. Сохранённые подключения и пользовательские настройки остаются под управлением upstream.
|
|
48
48
|
|
|
49
49
|
## DataLab из окружения
|
|
50
50
|
|
|
@@ -123,13 +123,13 @@ YOLO автоматически разрешает `ask`. Явные `deny` и
|
|
|
123
123
|
pi update --extensions
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
-
GigaChat
|
|
126
|
+
GigaChat закреплён на `0.6.4` в зависимостях набора и отдельном источнике Pi `npm:@dev-sergeev/pi-gigachat@0.6.4`. `pi update --extensions` не переводит его на более новую версию из `latest`; для смены версии нужен новый релиз набора либо явное пользовательское переопределение источника. Обычный запуск Pi не обращается к реестру npm и не устанавливает обновления.
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
**Особенность Pi 0.85.1:** установщик перезаписывает список пакетов из своего кеша после `npm postinstall`. Поэтому при первом запуске Pi набор восстанавливает отдельную закреплённую запись GigaChat. Прежний незакреплённый источник `npm:@dev-sergeev/pi-gigachat` заменяется на `npm:@dev-sergeev/pi-gigachat@0.6.4` с сохранением фильтров ресурсов. Подробнее: [ADR](docs/adr/0002-package-delivery.md).
|
|
129
129
|
|
|
130
130
|
Явно закреплённый пользователем источник GigaChat сохраняется. При удалении набора отдельная запись GigaChat остаётся; её можно удалить стандартным `pi remove npm:@dev-sergeev/pi-gigachat`. Установка с `-l` пока не проверена.
|
|
131
131
|
|
|
132
|
-
GigaChat загружается через штатную точку входа как внутри набора, так и через отдельную запись пакета. Для 0.6.
|
|
132
|
+
GigaChat загружается через штатную точку входа как внутри набора, так и через отдельную запись пакета. Для 0.6.4 настройка подключений и моделей выполняется интерактивным `/gigachat`; прежние утверждения о встроенных GLM/Qwen и автоматическом default `gigachat/Qwen3.5-397b` относились к 0.5.1 и к этой версии неприменимы. Datalab Kit не переписывает исходники GigaChat, не очищает авторизацию или сохранённые подключения. Дополнительный провайдер DataLab не меняет текущую модель или defaults. Модель recap настраивается независимо.
|
|
133
133
|
|
|
134
134
|
## Разработка
|
|
135
135
|
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Datalab Kit includes the following upstream components. Their licenses and copyright notices remain in their package directories and apply to those components and their transitive dependencies. Datalab Kit modifies permission-system, plan-mode, subagents and recap's default model during build; see scripts/prepare-upstream.mjs. GigaChat is downloaded separately.
|
|
4
4
|
|
|
5
|
-
- @dev-sergeev/pi-gigachat (
|
|
5
|
+
- @dev-sergeev/pi-gigachat@0.6.4 (independently installed, version pinned): MIT, git+https://github.com/dev-sergeev/pi-gigachat.git.
|
|
6
6
|
- @juicesharp/rpiv-ask-user-question@2.11.0: MIT, git+https://github.com/juicesharp/rpiv-mono.git.
|
|
7
7
|
- pi-powerline-footer@0.17.2: MIT, git+https://github.com/nicobailon/pi-powerline-footer.git.
|
|
8
8
|
- @gotgenes/pi-permission-system@33.0.5: MIT, git+https://github.com/gotgenes/pi-packages.git.
|
package/dist/extension.js
CHANGED
|
@@ -16,10 +16,10 @@ export default async function datalabKit(pi) {
|
|
|
16
16
|
const provider = await import(pathToFileURL(gigaChatExtensionPath(packageRoot)).href);
|
|
17
17
|
await provider.default(pi);
|
|
18
18
|
}
|
|
19
|
-
if (
|
|
19
|
+
if (managedAgentDir(packageRoot) === resolve(agentDir)) {
|
|
20
20
|
pi.on('session_start', async () => {
|
|
21
21
|
// Pi 0.85.1 persists a cached package list after npm postinstall; repair
|
|
22
|
-
// that list
|
|
22
|
+
// that list and migrate the kit's former floating source without networking.
|
|
23
23
|
await registerGigaChat(agentDir);
|
|
24
24
|
});
|
|
25
25
|
}
|
package/dist/install.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export declare const gigaChatSource
|
|
1
|
+
export declare const gigaChatSource: string;
|
|
2
2
|
export declare function managedAgentDir(packageRoot: string): string | undefined;
|
|
3
3
|
export declare function isGigaChatSource(entry: unknown): boolean;
|
|
4
4
|
export declare function hasConfiguredGigaChat(agentDir: string): Promise<boolean>;
|
|
5
|
-
/** Preserve
|
|
5
|
+
/** Preserve user fields and filters; migrate the kit's former floating source. */
|
|
6
6
|
export declare function registerGigaChat(agentDir: string): Promise<void>;
|
|
7
7
|
/** Only run inside an explicit npm installation; Pi startup never calls this. */
|
|
8
8
|
export declare function finishInstallation(packageRoot: string): Promise<void>;
|
package/dist/install.js
CHANGED
|
@@ -5,7 +5,9 @@ import { createRequire } from 'node:module';
|
|
|
5
5
|
import { promisify } from 'node:util';
|
|
6
6
|
import { execFile } from 'node:child_process';
|
|
7
7
|
import { randomUUID } from 'node:crypto';
|
|
8
|
-
|
|
8
|
+
const gigaChatPackageSource = 'npm:@dev-sergeev/pi-gigachat';
|
|
9
|
+
const gigaChatVersion = createRequire(import.meta.url)('../package.json').dependencies['@dev-sergeev/pi-gigachat'];
|
|
10
|
+
export const gigaChatSource = `${gigaChatPackageSource}@${gigaChatVersion}`;
|
|
9
11
|
const execFileAsync = promisify(execFile);
|
|
10
12
|
export function managedAgentDir(packageRoot) {
|
|
11
13
|
const npmRoot = resolve(packageRoot, '../../..');
|
|
@@ -14,7 +16,7 @@ export function managedAgentDir(packageRoot) {
|
|
|
14
16
|
}
|
|
15
17
|
export function isGigaChatSource(entry) {
|
|
16
18
|
const source = typeof entry === 'string' ? entry : entry && typeof entry === 'object' && 'source' in entry ? entry.source : undefined;
|
|
17
|
-
return typeof source === 'string' && (source ===
|
|
19
|
+
return typeof source === 'string' && (source === gigaChatPackageSource || source.startsWith(`${gigaChatPackageSource}@`));
|
|
18
20
|
}
|
|
19
21
|
async function readSettings(agentDir) {
|
|
20
22
|
let content;
|
|
@@ -35,7 +37,7 @@ export async function hasConfiguredGigaChat(agentDir) {
|
|
|
35
37
|
const settings = await readSettings(agentDir);
|
|
36
38
|
return Array.isArray(settings.packages) && settings.packages.some(isGigaChatSource);
|
|
37
39
|
}
|
|
38
|
-
/** Preserve
|
|
40
|
+
/** Preserve user fields and filters; migrate the kit's former floating source. */
|
|
39
41
|
export async function registerGigaChat(agentDir) {
|
|
40
42
|
await mkdir(agentDir, { recursive: true });
|
|
41
43
|
const lock = join(agentDir, 'settings.json.lock');
|
|
@@ -46,9 +48,13 @@ export async function registerGigaChat(agentDir) {
|
|
|
46
48
|
if (settings.packages !== undefined && !Array.isArray(settings.packages))
|
|
47
49
|
throw new Error('Pi packages must be an array');
|
|
48
50
|
const packages = (settings.packages ?? []);
|
|
49
|
-
|
|
51
|
+
const existing = packages.find(isGigaChatSource);
|
|
52
|
+
const source = typeof existing === 'string' ? existing : existing && typeof existing === 'object' && 'source' in existing ? existing.source : undefined;
|
|
53
|
+
if (existing && source !== gigaChatPackageSource)
|
|
50
54
|
return;
|
|
51
|
-
settings.packages =
|
|
55
|
+
settings.packages = existing
|
|
56
|
+
? packages.map(entry => entry !== existing ? entry : typeof entry === 'string' ? gigaChatSource : { ...entry, source: gigaChatSource })
|
|
57
|
+
: [...packages, gigaChatSource];
|
|
52
58
|
await writeFile(temp, `${JSON.stringify(settings, null, 2)}\n`, { mode: 0o600 });
|
|
53
59
|
await rename(temp, join(agentDir, 'settings.json'));
|
|
54
60
|
}
|
|
@@ -66,7 +72,7 @@ export async function finishInstallation(packageRoot) {
|
|
|
66
72
|
const existing = Array.isArray(settings.packages) ? settings.packages.find(isGigaChatSource) : undefined;
|
|
67
73
|
const source = typeof existing === 'string' ? existing : existing?.source;
|
|
68
74
|
// An explicitly selected user version remains authoritative.
|
|
69
|
-
if (typeof source === 'string' && source !== gigaChatSource)
|
|
75
|
+
if (typeof source === 'string' && source !== gigaChatPackageSource && source !== gigaChatSource)
|
|
70
76
|
return;
|
|
71
77
|
await refreshGigaChat(agentDir);
|
|
72
78
|
await registerGigaChat(agentDir);
|
|
@@ -89,14 +95,10 @@ async function npm(args) {
|
|
|
89
95
|
return result.stdout;
|
|
90
96
|
}
|
|
91
97
|
async function refreshGigaChat(agentDir) {
|
|
92
|
-
const metadata = JSON.parse(await npm(['view', '@dev-sergeev/pi-gigachat@latest', 'version', '--json']));
|
|
93
|
-
const latest = Array.isArray(metadata) ? metadata.at(-1) : metadata;
|
|
94
|
-
if (typeof latest !== 'string' || !/^\d+\.\d+\.\d+(?:-[\w.-]+)?$/.test(latest))
|
|
95
|
-
throw new Error('Invalid GigaChat registry version');
|
|
96
98
|
const destination = join(agentDir, 'npm/node_modules/@dev-sergeev/pi-gigachat');
|
|
97
99
|
try {
|
|
98
100
|
const installed = JSON.parse(await readFile(join(destination, 'package.json'), 'utf8'));
|
|
99
|
-
if (installed.version ===
|
|
101
|
+
if (installed.version === gigaChatVersion)
|
|
100
102
|
return;
|
|
101
103
|
}
|
|
102
104
|
catch (error) {
|
|
@@ -109,7 +111,7 @@ async function refreshGigaChat(agentDir) {
|
|
|
109
111
|
const replacement = join(stage, 'replacement');
|
|
110
112
|
let moved = false;
|
|
111
113
|
try {
|
|
112
|
-
await npm(['install', '--prefix', stage, `@dev-sergeev/pi-gigachat@${
|
|
114
|
+
await npm(['install', '--prefix', stage, `@dev-sergeev/pi-gigachat@${gigaChatVersion}`,
|
|
113
115
|
'--ignore-scripts', '--legacy-peer-deps', '--no-audit', '--no-fund']);
|
|
114
116
|
await cp(join(stage, 'node_modules/@dev-sergeev/pi-gigachat'), replacement, { recursive: true });
|
|
115
117
|
// Preserve the staged dependency tree so compiled ESM imports stay resolvable.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ADR 0002: Доставка компонентов и значений по умолчанию
|
|
2
2
|
|
|
3
|
-
Status: accepted
|
|
3
|
+
Status: accepted
|
|
4
4
|
|
|
5
5
|
## Контекст
|
|
6
6
|
|
|
@@ -20,12 +20,12 @@ Pi 0.85.1 загружает ресурсы из `pi.extensions`, но не пр
|
|
|
20
20
|
|
|
21
21
|
Дополнительное согласование от 2026-10-14: задержка автоматического recap после бездействия сокращена с 5 до 2 минут. Таймаут отдельного запроса остаётся 60 секунд.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Пересмотр от 2026-10-20: начиная с Datalab Kit 0.1.7 поддерживается строго Pi 0.85.1; три peer-зависимости Pi закреплены на этой версии без диапазонов, как в `pi-gigachat` 0.6.4. Это декларация совместимости, а не runtime-проверка: управляемый установщик Pi отключает разрешение peer-зависимостей. GigaChat закреплён на `0.6.4` в манифесте, lockfile, postinstall и отдельном источнике `npm:@dev-sergeev/pi-gigachat@0.6.4`. Версия для установщика берётся из манифеста набора; запрос `latest` удалён. Прежний незакреплённый источник мигрирует на закреплённый с сохранением фильтров ресурсов; явно выбранные пользователем версии остаются приоритетными. При первой активации расширение восстанавливает запись, которую установщик Pi мог затереть; загрузка не выполняет сетевых запросов. До появления отдельной записи провайдер подключается через расширение набора, после её появления его загружает Pi самостоятельно. Этот пересмотр заменяет прежнее требование независимо обновлять GigaChat до `latest`.
|
|
24
24
|
|
|
25
25
|
## Последствия и пределы
|
|
26
26
|
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
27
|
+
- Штатное `pi update --extensions` сохраняет GigaChat 0.6.4, даже если реестр публикует более новую версию.
|
|
28
|
+
- Pi 0.85.1 по-прежнему может затереть добавленный в postinstall источник; он восстанавливается при первом запуске. Это больше не нарушает требование независимо обновлять GigaChat: такое требование отменено.
|
|
29
|
+
- Пакет не патчит установленный Pi и не запускает фоновый процесс изменения настроек.
|
|
30
30
|
- Исходные конфиги и явно закреплённые источники пользователя сохраняются.
|
|
31
31
|
- Отдельный GigaChat остаётся после удаления набора. Очистка, `-l` и существующие независимые установки других компонентов не определены спецификацией.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
'variables': {
|
|
3
|
+
'NAPI_VERSION%': "<!(node -p \"process.env.NAPI_VERSION || process.versions.napi\")",
|
|
4
|
+
'disable_deprecated': "<!(node -p \"process.env['npm_config_disable_deprecated']\")"
|
|
5
|
+
},
|
|
6
|
+
'conditions': [
|
|
7
|
+
['NAPI_VERSION!=""', { 'defines': ['NAPI_VERSION=<@(NAPI_VERSION)'] } ],
|
|
8
|
+
['NAPI_VERSION==2147483647', { 'defines': ['NAPI_EXPERIMENTAL', 'NODE_API_EXPERIMENTAL_NO_WARNING'] } ],
|
|
9
|
+
['disable_deprecated=="true"', {
|
|
10
|
+
'defines': ['NODE_ADDON_API_DISABLE_DEPRECATED']
|
|
11
|
+
}],
|
|
12
|
+
['OS=="mac"', {
|
|
13
|
+
'cflags+': ['-fvisibility=hidden'],
|
|
14
|
+
'xcode_settings': {
|
|
15
|
+
'OTHER_CFLAGS': ['-fvisibility=hidden']
|
|
16
|
+
}
|
|
17
|
+
}]
|
|
18
|
+
],
|
|
19
|
+
'cflags': [ '-Werror', '-Wall', '-Wextra', '-Wpedantic', '-Wunused-parameter' ],
|
|
20
|
+
'cflags_cc': [ '-Werror', '-Wall', '-Wextra', '-Wpedantic', '-Wunused-parameter' ]
|
|
21
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
'defines': [ 'NAPI_CPP_EXCEPTIONS' ],
|
|
3
|
+
'cflags!': [ '-fno-exceptions' ],
|
|
4
|
+
'cflags_cc!': [ '-fno-exceptions' ],
|
|
5
|
+
'conditions': [
|
|
6
|
+
["OS=='win'", {
|
|
7
|
+
"defines": [
|
|
8
|
+
"_HAS_EXCEPTIONS=1"
|
|
9
|
+
],
|
|
10
|
+
"msvs_settings": {
|
|
11
|
+
"VCCLCompilerTool": {
|
|
12
|
+
"ExceptionHandling": 1,
|
|
13
|
+
'EnablePREfast': 'true',
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
}],
|
|
17
|
+
["OS=='mac'", {
|
|
18
|
+
'xcode_settings': {
|
|
19
|
+
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES',
|
|
20
|
+
'CLANG_CXX_LIBRARY': 'libc++',
|
|
21
|
+
'MACOSX_DEPLOYMENT_TARGET': '10.7',
|
|
22
|
+
},
|
|
23
|
+
}],
|
|
24
|
+
],
|
|
25
|
+
}
|