🚀. Socket Launch Week Day 2:Introducing Manifest Alerts.Learn more
Sign In

@nitra/cursor

Package Overview
Dependencies
Maintainers
1
Versions
410
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nitra/cursor - npm Package Compare versions

Comparing version
5.0.2
to
5.0.3
+95
skills/docgen/js/docgen-compare-pi-vs-direct.mjs
/**
* A/B: docgen Tier 1 через pi cli (з omlx-провайдером у ~/.pi/agent/models.json)
* vs прямий callOmlxMessages (`N_CURSOR_DOCGEN_BACKEND=omlx`).
*
* Однаковий 8-сет файлів, однаковий оркестратор (E1+E2+E3+E4), різний backend.
* Пише в /tmp/docgen-compare/{pi,direct}/<idx>-<stem>.md і збирає метрики.
*
* Запуск: node npm/skills/docgen/js/docgen-compare-pi-vs-direct.mjs [--from N] [--limit N]
*/
import { readFileSync, mkdirSync, writeFileSync, existsSync } from 'node:fs'
import { join, resolve, basename } from 'node:path'
import { fileURLToPath } from 'node:url'
import { execSync } from 'node:child_process'
import { env } from 'node:process'
import { generateDoc } from './docgen-gen.mjs'
import { extractFacts } from './docgen-extract.mjs'
const ROOT = resolve(fileURLToPath(import.meta.url), '../../../../..')
const TMP = '/tmp/docgen-compare'
const args = process.argv.slice(2)
const limitIdx = args.indexOf('--limit')
const limit = limitIdx !== -1 ? Number(args[limitIdx + 1]) : 8
const fromIdx = args.indexOf('--from')
const from = fromIdx !== -1 ? Number(args[fromIdx + 1]) : 1
const scanOut = execSync('node npm/bin/n-cursor.js docgen scan', { cwd: ROOT, encoding: 'utf8' })
const all = JSON.parse(scanOut)
const local = []
for (const f of all) {
try {
const src = readFileSync(join(ROOT, f.sourcePath), 'utf8')
const facts = extractFacts(src, join(ROOT, f.sourcePath))
const sym = (facts.internalSymbols ?? []).length
if (sym < 4) local.push({ ...f, sym })
} catch {}
}
const slice = local.slice(from, from + limit)
mkdirSync(join(TMP, 'pi'), { recursive: true })
mkdirSync(join(TMP, 'direct'), { recursive: true })
async function runBackendAsync(kind) {
if (kind === 'direct') env.N_CURSOR_DOCGEN_BACKEND = 'omlx'
else delete env.N_CURSOR_DOCGEN_BACKEND
const out = { ok: 0, err: 0, totalMs: 0, scores: [], lengths: [], errors: [], times: [] }
console.log(`\n══════ Backend: ${kind} ══════`)
for (let i = 0; i < slice.length; i++) {
const f = slice[i]
const t0 = Date.now()
const stem = basename(f.sourcePath).replace(/\.[^.]+$/, '')
const destFile = join(TMP, kind, `${String(i + 1).padStart(2, '0')}-${stem}.md`)
process.stdout.write(` [${i + 1}/${slice.length}] sym=${f.sym} ${f.sourcePath} ... `)
try {
const r = await generateDoc(join(ROOT, f.sourcePath), { symThreshold: 999, cloudModel: null })
writeFileSync(destFile, r.md)
const ms = Date.now() - t0
out.ok++
out.totalMs += ms
out.times.push(ms)
out.scores.push(r.score ?? 0)
out.lengths.push(r.md.length)
process.stdout.write(`✓ ${Math.round(ms / 1000)}s score=${r.score ?? '?'} chars=${r.md.length}\n`)
} catch (error) {
out.err++
out.errors.push({ path: f.sourcePath, msg: error.message })
process.stdout.write(`✗ ${error.message}\n`)
}
}
return out
}
const direct = await runBackendAsync('direct')
const pi = await runBackendAsync('pi')
function avg(a) { return a.length ? Math.round(a.reduce((x, y) => x + y, 0) / a.length) : 0 }
function median(a) {
if (!a.length) return 0
const s = [...a].sort((x, y) => x - y)
return s[Math.floor(s.length / 2)]
}
const report = {
files: slice.map(f => f.sourcePath),
direct: { ok: direct.ok, err: direct.err, avgMs: avg(direct.times), medianMs: median(direct.times), avgScore: avg(direct.scores), avgChars: avg(direct.lengths), totalSec: Math.round(direct.totalMs / 1000) },
pi: { ok: pi.ok, err: pi.err, avgMs: avg(pi.times), medianMs: median(pi.times), avgScore: avg(pi.scores), avgChars: avg(pi.lengths), totalSec: Math.round(pi.totalMs / 1000) }
}
writeFileSync(join(TMP, 'report.json'), JSON.stringify(report, null, 2))
console.log(`\n${'─'.repeat(60)}\nA/B SUMMARY (${slice.length} файлів, той самий оркестратор)\n${'─'.repeat(60)}`)
console.log(`Backend | ok | err | avg s | median s | avg score | avg chars | total s`)
console.log(`direct (curl) | ${direct.ok} | ${direct.err} | ${Math.round(report.direct.avgMs / 1000)} | ${Math.round(report.direct.medianMs / 1000)} | ${report.direct.avgScore} | ${report.direct.avgChars} | ${report.direct.totalSec}`)
console.log(`pi cli | ${pi.ok} | ${pi.err} | ${Math.round(report.pi.avgMs / 1000)} | ${Math.round(report.pi.medianMs / 1000)} | ${report.pi.avgScore} | ${report.pi.avgChars} | ${report.pi.totalSec}`)
console.log(`\nФайли: ${TMP}/{direct,pi}/<idx>-<stem>.md\nReport: ${TMP}/report.json`)
+1
-1
{
"name": "@nitra/cursor",
"version": "5.0.2",
"version": "5.0.3",
"description": "CLI для завантаження cursor-правил (префікс n-) у локальний репозиторій",

@@ -5,0 +5,0 @@ "keywords": [

@@ -5,13 +5,13 @@ # hc-yaml.mjs

Файл виконує структурну валідацію конфігураційного файлу `hc.yaml` для перевірки відповідності даних визначенню політики перевірки стану. Валідація здійснюється порівнянням даних з контрактом `HealthCheckPolicy`, який визначений у рего-файлі. Ця функція забезпечує перевірку відповідно до схеми, визначеної за посиланням https://datreeio.github.io/CRDs-catalog/networking.gke.io/healthcheckpolicy_v1.json. Використовується константа ABIE_HC_SCHEMA_URL, яка позначає цей URL. Результат валідації повертається у форматі булевого значення або null.
Файл виконує структурну валідацію конфігурації `modeline` у файлах `hc.yaml`. Функція `validateAbieHcModeline` перевіряє відповідність конфігурації визначеному контракту. Валідація проводиться порівнянням конфігурації з визначеною схемою, доступною за посиланням https://datreeio.github.io/CRDs-catalog/networking.gke.io/healthcheckpolicy_v1.json. Цей процес забезпечує коректність конфігурації для ідентифікації (abie.mdc). Експортована константа ABIE_HC_SCHEMA_URL використовується для посилання на цю схему.
## Поведінка
validateAbieHcModeline перевіряє modeline у вхідному контенті.
validateAbieHcModeline перевіряє modeline у файлі `hc.yaml`.
Перевіряє, чи перший рядок не порожній. Якщо рядок порожній, повертає повідомлення про необхідність формату modeline (abie.mdc).
Перевіряє, чи перший рядок не порожній. Повертає повідомлення про необхідність наявності modeline `# yaml-language-server: $schema=… (abie.mdc)`.
Перевіряє наявність modeline у першому рядку. Якщо modeline відсутній, повертає повідомлення про необхідність формату modeline (abie.mdc).
Перевіряє, чи перший рядок містить необхідний modeline. Повертає повідомлення про відсутність modeline $schema (abie.mdc).
Перевіряє, чи значення $schema відповідає очікуваному URL. Якщо значення не відповідає, повертає повідомлення про необхідність використання URL https://datreeio.github.io/CRDs-catalog/networking.gke.io/healthcheckpolicy_v1.json (abie.mdc).
Перевіряє, чи значення $schema відповідає очікуваному URL. Повертає повідомлення про неправильне значення $schema, включаючи необхідний URL: https://datreeio.github.io/CRDs-catalog/networking.gke.io/healthcheckpolicy_v1.json (abie.mdc).

@@ -22,5 +22,5 @@ Повертає null у разі успішної валідації.

ABIE_HC_SCHEMA_URL — Вказує на необхідний URL `$schema` для файлу `hc.yaml` (abie.mdc).
ABIE_HC_SCHEMA_URL — Зберігає референтний URL `$schema` для файлу `hc.yaml` (abie.mdc).
validateAbieHcModeline — Перевіряє синтаксис modeline (`# yaml-language-server: $schema=...`) у файлі `hc.yaml`.
validateAbieHcModeline — Перевіряє формат modeline (`# yaml-language-server: $schema=...`) у файлі `hc.yaml`.

@@ -27,0 +27,0 @@ ## Гарантії поведінки

@@ -5,29 +5,21 @@ # http-route.mjs

Файл надає інструмент для порівняльного аналізу конфігурації. Він використовується для підрахунку кількості посилань на спільні бекенди в базових маніфестах пакета. Ця інформація слугує для синхронізації кількості патчів у потоковому (overlay) прошарку з кількістю базових посилань.
Файл надає інструмент для порівняльного аналізу конфігурації HTTP-маршрутів. Він виконує порівняння кількості `backendRefs` для сервісів `auth-run-hl` та `file-link-hl` у базових маніфестах пакета з кількістю патчів, визначеною в оверлеях. Цей механізм використовується для синхронізації кількості патчів у верхньому рівні з фактичною кількістю посилань у базі. (abie.mdc)
## Поведінка
ABIE_SHARED_CROSS_NS_BACKEND_NAMES визначає список спільних сервісів, які підлягають аналітиці.
ABIE_SHARED_CROSS_NS_BACKEND_NAMES
Визначає список спільних сервісів, які підлягають аналітиці.
ABIE_SHARED_CROSS_NS_BACKEND_SET створює множину спільних сервісів для швидкої перевірки.
analyzeAbieSharedBackendRefsInPackageK8s
Збирає кількість посилань на спільні бекенди та порушення вимог до namespace у базових документах HTTPRoute пакета.
checkSharedBackendRef перевіряє, чи посилається елемент на спільний сервіс, і перевіряє, чи відповідає його імена та namespace вимогам.
## Публічний API
httpRouteDocSharedCrossNsBackendStats збирає кількість посилань на спільні бекенди та фіксує помилки, якщо виявлено порушення вимог до namespace.
ABIE_SHARED_CROSS_NS_BACKEND_NAMES — Формує імена для крос-нішових зв'язків між бекендами. (abie.mdc)
analyzeAbieSharedBackendRefsInPackageK8s збирає статистику щодо посилань на спільні бекенди та помилки щодо namespace з базових YAML-документів пакета, виключаючи оверлей `ua`.
analyzeAbieSharedBackendRefsInPackageK8s — Збирає кількість спільних посилань `backendRefs` та базові помилки з YAML-файлів пакета, ігноруючи неймспейс `dev`. (abie.mdc)
## Публічний API
- ABIE_SHARED_CROSS_NS_BACKEND_NAMES — Ідентифікація назв бекендів, спільних між різними просторами імен.
- analyzeAbieSharedBackendRefsInPackageK8s — Аналізує YAML-файли пакета, збираючи кількість спільних посилань на бекенди та виявляючи базові помилки.
## Гарантії поведінки
* Функція повертає підрахунок `backendRefs` для спільних сервісів.
* Підрахунок здійснюється у base-маніфестах пакета поза overlay `ua`.
* Використовується `ua_http_route_concern` для синхронізації кількості patch-ів namespace у overlay із кількістю base-reference.
* Функція є read-only.
* Функція не виконує операцій з мережею.
* Функція не використовує кешування.
* Функція не змінює стан системи.
- Read-only: файл не виконує операцій запису у файлову систему.
- Не звертається до мережі.

Sorry, the diff of this file is too big to display