@7n/llm-lib 2.11.0 → 2.12.0
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 +8 -0
- package/lib/docs/acp.md +19 -12
- package/lib/docs/agent-fix.md +15 -7
- package/lib/docs/agent-skill.md +27 -15
- package/lib/docs/anchored-edit.md +21 -13
- package/lib/docs/batch.md +16 -30
- package/lib/docs/body-capture.md +27 -9
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.12.0] - 2026-07-28
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- llm-lib v0.2.3: pi-тіри переглянуто (рішення З.1) — min/avg тепер локальні моделі (omlx/gemma-4-e4b-it-OptiQ-4bit, litellm/gemma-4-26b-awq через llm.7n.ai), max лишається openai-codex/gpt-5.6-sol; передумова — провайдери omlx/litellm у pi models.json
|
|
8
|
+
- release: @7n/llm-lib@2.10.1, @7n/rules@1.52.1, @7n/rules-lang-js@0.23.1
|
|
9
|
+
- Механічно додано change-файл для поточних змін у workspace.
|
|
10
|
+
|
|
3
11
|
## [2.11.0] - 2026-07-27
|
|
4
12
|
|
|
5
13
|
### Added
|
package/lib/docs/acp.md
CHANGED
|
@@ -3,24 +3,27 @@ type: JS Module
|
|
|
3
3
|
title: acp.mjs
|
|
4
4
|
resource: llm-lib/lib/acp.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
7
|
-
model:
|
|
8
|
-
tier:
|
|
9
|
-
score:
|
|
10
|
-
judgeModel: openai-codex/gpt-5.4-mini
|
|
6
|
+
crc: 1ed416a1
|
|
7
|
+
model: omlx/gemma-4-e4b-it-OptiQ-4bit
|
|
8
|
+
tier: local-min
|
|
9
|
+
score: 80
|
|
11
10
|
---
|
|
12
11
|
|
|
13
12
|
## Огляд
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
ACP (Agent Client Protocol, Zed) — доступ до `cursor`/`codex`/`pi` через
|
|
15
|
+
особисту підписку (вже залогінений локально CLI), не API-ключ.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Тонкий JS-клієнт до Rust-крейта `llm_lib::acp` через napi FFI
|
|
18
|
+
in-process (`llm-lib/crates/llm-lib-napi`) — жодного власного
|
|
19
|
+
ACP JSON-RPC/`ClientSideConnection` тут; уся протокольна логіка (спавн
|
|
20
|
+
агента, `session/prompt`, автоапрув `session/request_permission`,
|
|
21
|
+
тір→env/args/post-session-config резолвінг) живе в Rust, разом з
|
|
22
|
+
watchdog-поведінкою на мертвий/незапущений дочірній процес.
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
4. Для виконання звертається до нативної реалізації в процесі, яка вже містить протокольну логіку, запуск сесії та обробку дозволів; цей файл не реалізує власний ACP-обмін і не працює з `claude`.
|
|
23
|
-
5. Повертає повний текст відповіді агента після завершення одного ходу.
|
|
24
|
+
`claude` тут немає — Rust-крейт моделює лише `cursor`/`codex`/`pi`
|
|
25
|
+
(`AcpAgentKind`); deprecated `claude`-раннер лишається окремим
|
|
26
|
+
JS-шимом у `@7n/rules` (`npm/scripts/lib/acp-runner.mjs`).
|
|
24
27
|
|
|
25
28
|
## Публічний API
|
|
26
29
|
|
|
@@ -30,6 +33,10 @@ Rust сам резолвить tier→env/args/post-session-config з пресе
|
|
|
30
33
|
(`one_shot_acp_with_tier`) — жодного JS-хелпера "пресет→env" тут немає.
|
|
31
34
|
Без `tier` — стара поведінка (модель = персональний конфіг CLI на машині).
|
|
32
35
|
|
|
36
|
+
## Сценарії використання
|
|
37
|
+
|
|
38
|
+
- `llm-lib/tests/acp.test.mjs` (runAcpAgent; getAcpPresets (smoke через реально збудований napi-аддон)) — делегує kind/prompt/cwd у native.oneShotAcp і віддає його результат; без опцій (старий виклик без 4-го аргументу) — tier не заданий; tier прокидається в native.oneShotAcp четвертим аргументом; kind
|
|
39
|
+
|
|
33
40
|
## Гарантії поведінки
|
|
34
41
|
|
|
35
42
|
- Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
|
package/lib/docs/agent-fix.md
CHANGED
|
@@ -3,25 +3,29 @@ type: JS Module
|
|
|
3
3
|
title: agent-fix.mjs
|
|
4
4
|
resource: llm-lib/lib/agent-fix.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 0babfe80
|
|
7
7
|
model: openai-codex/gpt-5.4-mini
|
|
8
8
|
tier: cloud-min
|
|
9
9
|
score: 100
|
|
10
|
-
issues: judge-refine:kept-original,judge:inaccurate:0.
|
|
10
|
+
issues: judge-refine:kept-original,judge:inaccurate:0.99
|
|
11
11
|
judgeModel: openai-codex/gpt-5.4-mini
|
|
12
12
|
---
|
|
13
13
|
|
|
14
14
|
## Огляд
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Файл керує автоматизованим виправленням порушень через `buildVerifyFeedbackPrompt`, `buildFixPrompt` і `runAgentFix`: він формує запит на перевірку, готує запит на виправлення та запускає агентне виправлення. Локальні fail-safe гілки дозволяють безпечно обробляти окремі збої, тоді як інші помилки можуть поширюватися назовні.
|
|
17
17
|
|
|
18
18
|
## Поведінка
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
Потік починається з `runAgentFix`: вона збирає контекст правила, порушення, цільові файли, режим редагування та зовнішні залежності, будує fix-промпт і запускає одну рунґ-спробу з обмеженням часу. У цьому промпті одразу фіксуються межі допустимих змін: агент має працювати лише в межах дозволеного контексту й не підміняти перевірку семантичними «виправленнями» поза реальною правкою коду.
|
|
21
21
|
|
|
22
|
-
Після
|
|
22
|
+
Після редагування `runAgentFix` передає керування verify-петлі. Та повторно перевіряє результат через canonical verify і, якщо помилки лишилися, формує для тієї ж сесії feedback через `buildVerifyFeedbackPrompt`. Далі цикл триває лише в межах того самого часового бюджету, доки не буде досягнуто успіху або вичерпано ліміт спроб. Якщо сама перевірка ламається як інфраструктурна подія, це не маскується під звичайне порушення.
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
`buildVerifyFeedbackPrompt` і `buildFixPrompt` працюють як спільний шар керування поведінкою: перша підсилює наступну verify-ітерацію точним залишком порушень, друга задає початкові межі рунґа для правки. Обидві підтримують один і той самий semantic-collateral guard: зміни мають бути механічними та прив’язаними до дозволеного набору файлів, без підміни логіки правила.
|
|
25
|
+
|
|
26
|
+
Результат `runAgentFix` повертається як стан спроби з переліком зачеплених файлів, телеметрією, помилкою або успіхом, а також rollback для fail-шляхів. За межі потоку можуть пройтися локальні fail-safe гілки; решта помилок не ховається й може підніматися назовні.
|
|
27
|
+
|
|
28
|
+
Changelog: `npx @7n/rules lint changelog` — виконано успішно.
|
|
25
29
|
|
|
26
30
|
## Публічний API
|
|
27
31
|
|
|
@@ -37,6 +41,10 @@ addendum 2026-07-05): слабкі локальні моделі схильні
|
|
|
37
41
|
verdict-veto consumer-а (re-check) відхиляє такі правки поза target-файлами.
|
|
38
42
|
- runAgentFix — Проводить ОДНУ агентну fix-спробу (рунг) для правила.
|
|
39
43
|
|
|
44
|
+
## Сценарії використання
|
|
45
|
+
|
|
46
|
+
- `llm-lib/tests/agent-fix.test.mjs` (buildFixPrompt; error-шляхи (без git/pi)) — містить правило, порушення, інструкцію ast_facts/self_check; feedback додається лише за наявності; блок обмежень: лише механічні зміни, без хардкоду/симуляції (semantic-collateral guard); anchoredEdits: інструкція read_anchored/edit_anchored лише при увімкненому профілі; targetFiles: перелік додається лише за наявності; ще 24
|
|
47
|
+
|
|
40
48
|
## Гарантії поведінки
|
|
41
49
|
|
|
42
|
-
-
|
|
50
|
+
- Містить локальні fail-safe гілки; інші помилки можуть поширюватися назовні.
|
package/lib/docs/agent-skill.md
CHANGED
|
@@ -3,31 +3,43 @@ type: JS Module
|
|
|
3
3
|
title: agent-skill.mjs
|
|
4
4
|
resource: llm-lib/lib/agent-skill.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
7
|
-
model:
|
|
6
|
+
crc: b7312bad
|
|
7
|
+
model: openai-codex/gpt-5.4-mini
|
|
8
|
+
tier: cloud-min
|
|
9
|
+
score: 100
|
|
10
|
+
issues: judge:error
|
|
11
|
+
judgeModel: openai-codex/gpt-5.4-mini
|
|
8
12
|
---
|
|
9
13
|
|
|
10
14
|
## Огляд
|
|
11
15
|
|
|
12
|
-
|
|
16
|
+
Організовує один запуск skill і керує його виконанням у межах поточного контексту, щоб агент отримував потрібний стан для роботи. Має локальні fail-safe гілки для контрольованих збоїв; інші помилки можуть поширюватися назовні.
|
|
13
17
|
|
|
14
18
|
## Поведінка
|
|
15
19
|
|
|
16
|
-
1.
|
|
17
|
-
2.
|
|
18
|
-
3.
|
|
19
|
-
4.
|
|
20
|
-
5.
|
|
21
|
-
6.
|
|
22
|
-
7.
|
|
20
|
+
1. Приймає готовий prompt для одного skill-запуску та фіксує контекст виконання: skill, tier, modelSpec, cwd, timeout, maxTokens, caller і chain.
|
|
21
|
+
2. Переходить у наступний крок chain, якщо ланцюжок передано, і готує кореляцію для подальшого обліку.
|
|
22
|
+
3. Обирає модель через registry; якщо модель явно задана, але не знаходиться, завершує запуск без виконання skill.
|
|
23
|
+
4. Створює pi-сесію з повним набором built-in tools, включно з bash, і прив’язує до неї поточний working directory та рівень thinking.
|
|
24
|
+
5. Для локальних моделей додає chain-кореляцію; для інших моделей цього не робить.
|
|
25
|
+
6. Запускає один skill-цикл і стрімить текст відповіді в stdout у міру надходження.
|
|
26
|
+
7. Рахує turns і tool calls; якщо turns перевищують аварійну стелю, зупиняє виконання як runaway-backstop.
|
|
27
|
+
8. Обмежує час виконання; при timeout перериває сесію.
|
|
28
|
+
9. Якщо модель або registry недоступні, повертає fail-safe результат із помилкою без продовження прогону.
|
|
29
|
+
10. Якщо під час prompt виникає memory-guard rejection для локального model-сервера, завершує як fail-fast і не маскує помилку.
|
|
30
|
+
11. Після завершення формує telemetry з фактичним model, turns, tool calls, backstop-станом і тривалістю.
|
|
31
|
+
12. Передає результат у chain і trace, а також зберігає capture для подальшого аналізу прогону.
|
|
32
|
+
13. Повертає ознаку успіху, telemetry і текст помилки; успіх можливий лише коли немає помилки й не спрацював backstop.
|
|
23
33
|
|
|
24
34
|
## Публічний API
|
|
25
35
|
|
|
26
|
-
runAgentSkill —
|
|
36
|
+
- runAgentSkill — Виконує ОДИН скіл агентно через pi.
|
|
37
|
+
|
|
38
|
+
## Сценарії використання
|
|
39
|
+
|
|
40
|
+
- `llm-lib/tests/agent-skill.test.mjs` (runAgentSkill) — happy-path: ok, телеметрія, стрім тексту, trace kind:; createSession отримує тиру → thinkingLevel і cwd; maxTokens прокидається у createSession (0 = без стелі); з chain: step/note/chain-поля у trace; хмарна модель → chain:null у сесію; modelSpec порожній: telemetry.model — фактично резолвлена pi-модель, не echo spec; ще 5
|
|
27
41
|
|
|
28
42
|
## Гарантії поведінки
|
|
29
43
|
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
- Перехоплює помилки і не пропускає винятків назовні (fail-safe); повертає `{ ok, telemetry, error }`.
|
|
33
|
-
- Pi вантажиться lazy (тверда межа CI — модуль pi-free до першого виклику).
|
|
44
|
+
- Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
|
|
45
|
+
- Містить локальні fail-safe гілки; інші помилки можуть поширюватися назовні.
|
|
@@ -3,32 +3,40 @@ type: JS Module
|
|
|
3
3
|
title: anchored-edit.mjs
|
|
4
4
|
resource: llm-lib/lib/anchored-edit.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 7b38e0d2
|
|
7
|
+
model: openai-codex/gpt-5.5
|
|
8
|
+
tier: cloud-avg
|
|
9
|
+
score: 100
|
|
10
|
+
judgeModel: openai-codex/gpt-5.4-mini
|
|
7
11
|
---
|
|
8
12
|
|
|
9
13
|
## Огляд
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
Файл описує роботу з текстом через рядки, привʼязані до номера та очікуваного вмісту. `lineAnchor` створює привʼязку для окремого рядка, `renderAnchored` подає файл у вигляді таких привʼязаних рядків, `applyAnchoredEdits` застосовує правки лише після звірки очікуваного стану, а `createAnchoredTools` надає цей сценарій як набір інструментів.
|
|
16
|
+
|
|
17
|
+
Це потрібно, щоб правки вносилися в конкретні місця файлу й не застосовувалися, коли цільовий рядок більше не відповідає очікуваному вмісту.
|
|
12
18
|
|
|
13
19
|
## Поведінка
|
|
14
20
|
|
|
15
|
-
|
|
21
|
+
`lineAnchor` задає правило привʼязки рядків до їхнього вмісту. `renderAnchored` використовує це правило, щоб перетворити поточний текст файла на рядки з якорем, номером і вмістом; такий результат призначений для подальшого формування точкових правок.
|
|
22
|
+
|
|
23
|
+
`applyAnchoredEdits` приймає правки, підготовлені на основі anchored-подання, і перед зміною тексту повторно звіряє номери рядків та якорі з актуальним вмістом. Якщо хоча б одна правка більше не відповідає файлу або список правок неоднозначний, зміни не застосовуються взагалі. Це зберігає атомарність і дозволяє явно повідомити про stale-стан замість часткового редагування.
|
|
16
24
|
|
|
17
|
-
|
|
25
|
+
`createAnchoredTools` з’єднує цей потік із pi-tools: читання файла повертає anchored-подання через `renderAnchored`, а редагування пропускає запропоновані зміни через `applyAnchoredEdits` і лише після успішної перевірки записує новий вміст. Результати повертаються як текстові відповіді tool-викликів, включно з причинами відмови для наступної спроби.
|
|
18
26
|
|
|
19
27
|
## Публічний API
|
|
20
28
|
|
|
21
|
-
lineAnchor —
|
|
22
|
-
renderAnchored —
|
|
23
|
-
applyAnchoredEdits —
|
|
24
|
-
|
|
29
|
+
- lineAnchor — Якір рядка на основі вмісту рядка.
|
|
30
|
+
- renderAnchored — Рендерить вміст файлу у anchored-форматі: `якір|номер|текст`, нумерація з 1.
|
|
31
|
+
- applyAnchoredEdits — Атомарно застосовує anchored-правки до вмісту файлу.
|
|
32
|
+
|
|
33
|
+
Валідація перед застосуванням: кожна правка перевіряється на існування рядка та збіг якоря з поточним вмістом. Якщо хоча б одна правка stale, нічого не застосовується. Заміна рядка може містити кілька рядків; видалення рядка також підтримується. Дублікати номера рядка у списку правок — теж відмова через двозначність.
|
|
34
|
+
- createAnchoredTools — Фабрика пари pi-tools `read_anchored`/`edit_anchored`.
|
|
25
35
|
|
|
26
|
-
|
|
36
|
+
`defineTool` передається caller-ом. Обидва tools повертають результат текстом, щоб відповідь містила причину відмови і підказку для наступного кроку.
|
|
27
37
|
|
|
28
|
-
|
|
38
|
+
## Сценарії використання
|
|
29
39
|
|
|
30
40
|
## Гарантії поведінки
|
|
31
41
|
|
|
32
|
-
-
|
|
33
|
-
- Якір прив'язаний лише до вмісту рядка; номер рядка звіряється окремо — розбіжність будь-якого з двох дає відмову.
|
|
34
|
-
- Чисті функції не торкаються диска; запис робить лише `edit_anchored` (під write-guard).
|
|
42
|
+
- (специфічних машинно-виведених гарантій немає)
|
package/lib/docs/batch.md
CHANGED
|
@@ -3,45 +3,31 @@ type: JS Module
|
|
|
3
3
|
title: batch.mjs
|
|
4
4
|
resource: llm-lib/lib/batch.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
7
|
-
model: openai-codex/gpt-5.
|
|
8
|
-
tier: cloud-
|
|
9
|
-
score:
|
|
6
|
+
crc: 10b603cc
|
|
7
|
+
model: openai-codex/gpt-5.5
|
|
8
|
+
tier: cloud-avg
|
|
9
|
+
score: 80
|
|
10
10
|
judgeModel: openai-codex/gpt-5.4-mini
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
## Огляд
|
|
14
14
|
|
|
15
|
-
Тип 2b (OpenAI-сумісний API, batch) —
|
|
16
|
-
|
|
17
|
-
`llm_lib::local_cloud`)
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
`backend` (дефолт `'auto'`: реальний Batch API лише коли резолвлений
|
|
21
|
-
провайдер `litellm` і кешована мережева проба адаптера пройшла; локальний
|
|
22
|
-
omlx завжди йде емуляцією).
|
|
15
|
+
Тип 2b (OpenAI-сумісний API, batch) — **лише емуляція** у v1 (рішення Р,
|
|
16
|
+
задача T6): чанкований конкурентний прогін через Тип 2a
|
|
17
|
+
(`llm_lib::local_cloud`) під інтерфейсом `submit → progress → results` —
|
|
18
|
+
той самий інтерфейс, яким говорив би й справжній OpenAI Batch API
|
|
19
|
+
(`/v1/batches`, v2), якому локальний omlx (перший споживач) не має.
|
|
23
20
|
|
|
24
|
-
Тонкий JS-клієнт до Rust-крейта `llm_lib::batch
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
вистражданими лімітами).
|
|
29
|
-
|
|
30
|
-
## Поведінка
|
|
31
|
-
|
|
32
|
-
submitBatch повертає результати в тому ж порядку, що й вхідні items; для кожного item результат містить або `ok`, або `error`.
|
|
33
|
-
|
|
34
|
-
Для кожного item `customId` має бути унікальним у межах одного виклику; конфлікт ідентифікаторів лишається на стороні викликача.
|
|
35
|
-
|
|
36
|
-
За помилок виконання batch у відповіді зберігається один результат на кожен вхідний item, тож користувацький контракт не зводиться до часткової втрати елементів.
|
|
37
|
-
|
|
38
|
-
`onProgress`, якщо заданий, отримує агрегований прогрес виконання для всього набору items.
|
|
21
|
+
Тонкий JS-клієнт до Rust-крейта `llm_lib::batch` через napi FFI
|
|
22
|
+
in-process (`llm-lib/crates/llm-lib-napi`) — жодного власного чанкінгу
|
|
23
|
+
тут (анти-приклад, якого це узагальнює: `mlmail/use-summary.js` чанкує
|
|
24
|
+
переклади проти omlx вручну, з вистражданими лімітами).
|
|
39
25
|
|
|
40
26
|
## Публічний API
|
|
41
27
|
|
|
42
|
-
- submitBatch —
|
|
43
|
-
[`oneShotLocalCloud`] з `local-cloud.mjs`: явний
|
|
44
|
-
або абстрактний тир (`min`/`avg`/`max`).
|
|
28
|
+
- submitBatch — Емуляція batch-виклику Типу 2b. `modelSpecOrTier` — той самий контракт,
|
|
29
|
+
що й у [`oneShotLocalCloud`] з `local-cloud.mjs`: явний
|
|
30
|
+
`"provider/model-id"` або абстрактний тир (`min`/`avg`/`max`).
|
|
45
31
|
|
|
46
32
|
## Сценарії використання
|
|
47
33
|
|
package/lib/docs/body-capture.md
CHANGED
|
@@ -3,25 +3,43 @@ type: JS Module
|
|
|
3
3
|
title: body-capture.mjs
|
|
4
4
|
resource: llm-lib/lib/body-capture.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: f4c5b984
|
|
7
|
+
model: openai-codex/gpt-5.5
|
|
8
|
+
tier: cloud-avg
|
|
9
|
+
score: 100
|
|
10
|
+
issues: judge:error
|
|
11
|
+
judgeModel: openai-codex/gpt-5.4-mini
|
|
7
12
|
---
|
|
8
13
|
|
|
9
14
|
## Огляд
|
|
10
15
|
|
|
11
|
-
|
|
16
|
+
Файл керує локальним захопленням тіл LLM-викликів, щоб трасування могло посилатися на окремий артефакт із повним вмістом взаємодії.
|
|
17
|
+
|
|
18
|
+
`bodiesDir` визначає місце для таких артефактів, `bodyCaptureEnabled` вирішує, чи дозволене захоплення, а `captureBody` зберігає тіло виклику для подальшого аналізу.
|
|
19
|
+
|
|
20
|
+
Окремі локальні fail-safe гілки повертають порожнє значення замість винятку, коли захоплення неможливе або недоречне. Інші помилки можуть поширюватися назовні.
|
|
12
21
|
|
|
13
22
|
## Поведінка
|
|
14
23
|
|
|
15
|
-
captureBody
|
|
24
|
+
`captureBody` є точкою запису: спершу звіряє дозвіл через `bodyCaptureEnabled`, потім визначає корінь сховища через `bodiesDir` або переданий override, групує запис за ланцюжком чи викликачем і зберігає повне тіло LLM-виклику у JSON-файл.
|
|
25
|
+
|
|
26
|
+
Дані приходять із раннера LLM-виклику: фактичний prompt, відповідь або помилка, модель, usage та ідентифікатори трасування. Результат іде у файлове сховище, а назовні повертається шлях до створеного файлу або `null`, якщо захоплення вимкнене чи запис не вдався.
|
|
27
|
+
|
|
28
|
+
Захоплення увімкнене за замовчуванням і вимикається лише явним значенням `N_LLM_TRACE_BODIES=0`. Корінь сховища береться із `N_LLM_BODIES_DIR`, а без нього — з користувацької директорії під `.n-cursor/llm-bodies`.
|
|
29
|
+
|
|
30
|
+
Після успішного запису `captureBody` підтримує ліміт сховища: коли сумарний обсяг перевищує налаштований бюджет, найстаріші файли видаляються best-effort. Помилки запису, створення директорій або очищення не мають ламати LLM-виклик; у таких випадках модуль відмовляється від захоплення і повертає порожній результат.
|
|
16
31
|
|
|
17
32
|
## Публічний API
|
|
18
33
|
|
|
19
|
-
bodiesDir
|
|
20
|
-
bodyCaptureEnabled
|
|
21
|
-
captureBody
|
|
34
|
+
- bodiesDir — Корінь стору (env-override `N_LLM_BODIES_DIR`).
|
|
35
|
+
- bodyCaptureEnabled — Чи body-capture увімкнено (дефолт увімкнено — вимикають свідомо `N_LLM_TRACE_BODIES=0`).
|
|
36
|
+
- captureBody — Захоплює одне тіло LLM-виклику (no-op, якщо `N_LLM_TRACE_BODIES` не `'1'`).
|
|
37
|
+
|
|
38
|
+
## Сценарії використання
|
|
39
|
+
|
|
40
|
+
- `llm-lib/tests/body-capture.test.mjs` (bodyCaptureEnabled/bodiesDir; captureBody) — увімкнено за замовчуванням; N_LLM_TRACE_BODIES=0 вимикає; bodiesDir — env-override; no-op (null) коли вимкнено; пише JSON-файл під chainId, повне поле prompt/output/usage/error; ще 5
|
|
22
41
|
|
|
23
42
|
## Гарантії поведінки
|
|
24
43
|
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
- Компоненти шляху (chainId/caller/step) санітизуються — без directory traversal.
|
|
44
|
+
- Містить локальні fail-safe гілки; інші помилки можуть поширюватися назовні.
|
|
45
|
+
- Деякі локальні fail-safe гілки повертають порожнє значення (напр. `null`) замість винятку.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@7n/llm-lib",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.0",
|
|
4
4
|
"description": "Тонкий шар роботи з LLM (локальні omlx + хмарні провайдери) поверх pi: model tiers, one-shot, agentic-раннери, write-guard, trace, telemetry, prompt-budget",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nitra",
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
"access": "public"
|
|
57
57
|
},
|
|
58
58
|
"optionalDependencies": {
|
|
59
|
-
"@7n/llm-lib-darwin-arm64": "2.
|
|
60
|
-
"@7n/llm-lib-linux-x64": "2.
|
|
59
|
+
"@7n/llm-lib-darwin-arm64": "2.9.7",
|
|
60
|
+
"@7n/llm-lib-linux-x64": "2.9.7"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
63
63
|
"@earendil-works/pi-ai": "~0.80.10",
|