@7n/rules 1.48.2 → 1.49.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 +19 -0
- package/bin/n-rules-cli.mjs +5 -8
- package/package.json +1 -1
- package/rules/changelog/.changes/260724-1500.md +5 -0
- package/rules/doc-files/docgen-files-batch/docs/index.md +9 -0
- package/rules/doc-files/docgen-files-batch/docs/main.md +59 -18
- package/rules/doc-files/docgen-files-batch/main.mjs +280 -29
- package/rules/doc-files/docgen-gen/docs/index.md +9 -0
- package/rules/doc-files/docgen-gen/docs/main.md +40 -29
- package/rules/doc-files/docgen-gen/main.mjs +79 -25
- package/rules/test/coverage/fix-worker.mjs +9 -1
- package/rules/test/coverage/lib/classify/verdict-schema.mjs +3 -1
- package/scripts/docs/skills-cli.md +18 -24
- package/scripts/lib/acp-runner.mjs +1 -1
- package/scripts/lib/lint-surface/collateral-veto.mjs +78 -2
- package/scripts/lib/lint-surface/docs/collateral-veto.md +30 -16
- package/scripts/lib/lint-surface/docs/index.md +1 -0
- package/scripts/lib/lint-surface/docs/run-fix.md +8 -23
- package/scripts/lib/lint-surface/docs/snapshot.md +6 -17
- package/scripts/lib/lint-surface/docs/test-gate.md +29 -0
- package/scripts/lib/lint-surface/run-fix.mjs +209 -38
- package/scripts/lib/lint-surface/snapshot.mjs +6 -0
- package/scripts/lib/lint-surface/test-gate.mjs +87 -0
- package/scripts/skills-cli.mjs +60 -10
- package/scripts/utils/docs/glob-compat.md +20 -14
- package/scripts/utils/glob-compat.mjs +18 -3
- package/skills/git-reconcile/SKILL.md +58 -0
- package/skills/git-reconcile/js/docs/index.md +9 -0
- package/skills/git-reconcile/js/docs/orchestrate.md +33 -0
- package/skills/git-reconcile/js/orchestrate.mjs +776 -0
- package/skills/git-reconcile/main.json +1 -0
- package/skills/taze/js/docs/orchestrate.md +40 -18
- package/skills/taze/js/orchestrate.mjs +6 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "requireRoot": true, "tier": "max" }
|
|
@@ -3,36 +3,58 @@ type: JS Module
|
|
|
3
3
|
title: orchestrate.mjs
|
|
4
4
|
resource: npm/skills/taze/js/orchestrate.mjs
|
|
5
5
|
docgen:
|
|
6
|
-
crc:
|
|
6
|
+
crc: 6b0cfb17
|
|
7
7
|
model: openai-codex/gpt-5.4-mini
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
tier: cloud-min
|
|
9
|
+
score: 80
|
|
10
|
+
issues: internal-name:assertEcosystemProvider,internal-name:resolvePlugins,judge-refine:kept-original,judge:inaccurate:0.97
|
|
10
11
|
judgeModel: openai-codex/gpt-5.4-mini
|
|
11
12
|
---
|
|
12
13
|
|
|
13
14
|
## Огляд
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
Модуль запускає taze-орchestrator, підключає доступних provider-ів, формує звіт і координує один прогін у межах поточного запуску. Його роль — дати єдину точку входу для запуску, де `callRunner`, `loadPluginTazeProviders`, `formatReport` і `runTazeOrchestrator` працюють узгоджено, а результати можна повторно використовувати в межах прогону. Обробка помилок fail-safe: винятки не виходять назовні, а стан прогону кешується на час виконання.
|
|
16
17
|
|
|
17
18
|
## Поведінка
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
runTazeOrchestrator запускає спільний цикл для всіх доступних екосистем, збирає провайдерів через loadPluginTazeProviders або бере їх із інжектів, далі для кожної екосистеми зберігає проміжний стан, виконує оновлення пакетів, ізолює виклики для кожного major-стрибка через callRunner і не дає збою одного пакета зупинити решту прогону. Дані для роботи беруться з конфігурації проєкту та сигналів репозиторію, зокрема .n-rules.json і package.json, а результатом стає структурований звіт разом зі зведенням по екосистемах. У межах одного запуску зберігається кеш, щоб повторно використовувати вже підняті дані та не дублювати одні й ті самі перевірки.
|
|
21
|
+
|
|
22
|
+
loadPluginTazeProviders підтягує плагінні провайдери екосистем, відсіює биті або невалідні модулі й повертає лише ті, що придатні до роботи, не валячи весь прогін через проблему в одному плагіні. Цей список стає джерелом для runTazeOrchestrator, тож плагіни визначають, які екосистеми взагалі потрапляють у цикл обробки.
|
|
23
|
+
|
|
24
|
+
callRunner виконує один ізольований прогін обраного runner-а для окремого пакета або пакета-міграції, повертаючи не лише успіх, а й текстовий результат або помилку для включення в підсумок. Його вихід напряму живить проміжні кроки runTazeOrchestrator і визначає, чи запис піде в успішні зміни, чи в fail-safe-обробку без падіння всього процесу.
|
|
25
|
+
|
|
26
|
+
formatReport збирає фінальний markdown-звіт із накопичених результатів усіх екосистем, зберігаючи детермінований порядок і однакове представлення для успішних, пропущених і проблемних записів. Цей звіт стає фінальним артефактом runTazeOrchestrator і не залежить від окремого LLM-виклику для формування самої форми підсумку.
|
|
24
27
|
|
|
25
28
|
## Публічний API
|
|
26
29
|
|
|
27
|
-
- callRunner —
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
-
|
|
30
|
+
- callRunner — Диспетчер одного ітеративного виклику на обраний раннер. `pi` — вбудований
|
|
31
|
+
pi-агент (`@7n/llm-lib/agent-skill`; текст перехоплюється через `deps.out`,
|
|
32
|
+
бо `runAgentSkill` не повертає його напряму — лише стрімить у stdout).
|
|
33
|
+
`cursor`/`codex` — napi-міст ACP (`@7n/llm-lib/acp`; текст — прямий return,
|
|
34
|
+
idle-timeout і видимість прогресу вже вбудовані в сам міст). Тір `avg`
|
|
35
|
+
(рішення И/Ф3, задача T7) — паритет з pi-гілкою: `runAcpAgent` резолвить
|
|
36
|
+
tier→env/args/post-session-config у Rust, а не бере модель з персонального
|
|
37
|
+
CLI-конфіга на машині.
|
|
38
|
+
- loadPluginTazeProviders — Завантажує EcosystemProvider-и з активних плагінів проєкту: `.n-rules.json`
|
|
39
|
+
(або автодетект за файловими сигналами — `pyproject.toml` → lang-python) →
|
|
40
|
+
`resolvePlugins` (плагін доставляється автоматично при першому запуску) → handler-модулі
|
|
41
|
+
extension-point `taze` → default-експорт кожного валідується
|
|
42
|
+
`assertEcosystemProvider`. Битий плагін (нема модуля/невалідна форма) —
|
|
43
|
+
warning і пропуск, не провал прогону.
|
|
44
|
+
- formatReport — Компонує підсумковий звіт (крок 8 SKILL.md) детерміновано з результатів
|
|
45
|
+
ітерацій — без окремого LLM-виклику для самого звіту. Усі екосистеми
|
|
46
|
+
(включно з npm/bun — плагін `@7n/rules-lang-js`, фаза 5a) — рівноправні
|
|
47
|
+
секції; екосистема без manifests — тиша.
|
|
48
|
+
- runTazeOrchestrator — Оркеструє taze: чистий цикл по EcosystemProvider-ах (кроки 1-3/7/8 —
|
|
49
|
+
детерміновано в провайдері, кроки 4-6 — по одному ізольованому виклику
|
|
50
|
+
`callRunner` на кожен major-запис) замість одного величезного непрозорого
|
|
51
|
+
ходу на весь монорепо. Ядро — двигун без мовної специфіки (фаза 5a spec):
|
|
52
|
+
ВСІ екосистеми, включно з npm/bun (`@7n/rules-lang-js`), приходять з
|
|
53
|
+
плагінів (extension-point `taze`). Падіння одного пакета/однієї екосистеми
|
|
54
|
+
не втрачає прогрес по інших.
|
|
32
55
|
|
|
33
56
|
## Гарантії поведінки
|
|
34
57
|
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
- Падіння одного пакета в ізольованому виклику раннера не втрачає прогрес по інших записах.
|
|
58
|
+
- Власних операцій запису (ФС/БД) у файлі немає; виклики імпортованих модулів можуть писати.
|
|
59
|
+
- Перехоплює помилки і не пропускає винятків назовні (fail-safe).
|
|
60
|
+
- Кешує результати в межах одного прогону.
|
|
@@ -20,11 +20,14 @@ export { bringChangesBackToOriginal, removeAutoCreatedWorktree } from '../../../
|
|
|
20
20
|
* pi-агент (`@7n/llm-lib/agent-skill`; текст перехоплюється через `deps.out`,
|
|
21
21
|
* бо `runAgentSkill` не повертає його напряму — лише стрімить у stdout).
|
|
22
22
|
* `cursor`/`codex` — napi-міст ACP (`@7n/llm-lib/acp`; текст — прямий return,
|
|
23
|
-
* idle-timeout і видимість прогресу вже вбудовані в сам міст).
|
|
23
|
+
* idle-timeout і видимість прогресу вже вбудовані в сам міст). Тір `avg`
|
|
24
|
+
* (рішення И/Ф3, задача T7) — паритет з pi-гілкою: `runAcpAgent` резолвить
|
|
25
|
+
* tier→env/args/post-session-config у Rust, а не бере модель з персонального
|
|
26
|
+
* CLI-конфіга на машині.
|
|
24
27
|
* @param {'pi' | 'cursor' | 'codex'} runner раннер
|
|
25
28
|
* @param {string} prompt промпт для одного пакета
|
|
26
29
|
* @param {string} cwd робочий каталог
|
|
27
|
-
* @param {{ runAgentSkill?: (prompt: string, opts?: object) => Promise<{ok: boolean, error: string|null}>, runAcpAgent?: (kind: string, prompt: string, cwd: string) => Promise<string> }} [deps] інжекти для тестів
|
|
30
|
+
* @param {{ runAgentSkill?: (prompt: string, opts?: object) => Promise<{ok: boolean, error: string|null}>, runAcpAgent?: (kind: string, prompt: string, cwd: string, opts?: {tier?: string}) => Promise<string> }} [deps] інжекти для тестів
|
|
28
31
|
* @returns {Promise<{ ok: boolean, text: string, error: string|null }>} результат виклику
|
|
29
32
|
*/
|
|
30
33
|
export async function callRunner(runner, prompt, cwd, deps = {}) {
|
|
@@ -50,7 +53,7 @@ export async function callRunner(runner, prompt, cwd, deps = {}) {
|
|
|
50
53
|
runAcpAgent = acpModule.runAcpAgent
|
|
51
54
|
}
|
|
52
55
|
try {
|
|
53
|
-
const text = await runAcpAgent(runner, prompt, cwd)
|
|
56
|
+
const text = await runAcpAgent(runner, prompt, cwd, { tier: 'avg' })
|
|
54
57
|
return { ok: true, text, error: null }
|
|
55
58
|
} catch (error) {
|
|
56
59
|
return { ok: false, text: '', error: error instanceof Error ? error.message : String(error) }
|