From 0df8ea93901eef5c847db871dd9480a56eec2982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 1 Aug 2026 20:56:41 +0300 Subject: [PATCH] =?UTF-8?q?feat(=D0=B7=D0=B0=D1=82=D0=B5=D1=8F):=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=87=D0=B2=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=B9?= =?UTF-8?q?=20=D1=87=D0=B0=D1=81=D1=82=D0=B8=20=E2=80=94=20=D1=87=D0=B8?= =?UTF-8?q?=D0=BD=D0=B8=D0=BC=20=D0=BD=D0=B5=D0=B2=D0=B8=D0=B4=D0=B8=D0=BC?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B2=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=B0=D1=82=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B0=D1=85,=20=D0=B7=D0=B0=D0=BA=D1=80=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D0=BC=20.night=20=D0=BE=D1=82=20=D1=85=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=BB=D0=B8=D1=89=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++++ app/vitest.config.tools.mjs | 2 +- docs/superpowers/priyomka/.gitkeep | 0 docs/superpowers/priyomka/1/.gitkeep | 0 night.config.example.json | 18 ++++++++++++++++++ package-lock.json | 10 ++++++++++ package.json | 6 +++++- 7 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 docs/superpowers/priyomka/.gitkeep create mode 100644 docs/superpowers/priyomka/1/.gitkeep create mode 100644 night.config.example.json diff --git a/.gitignore b/.gitignore index da56abf2..17acefe7 100644 --- a/.gitignore +++ b/.gitignore @@ -235,3 +235,7 @@ Ctemp* .claire/ **/.phpstorm.meta.php live-demo/steps/_sample-local/ + +# Затея «дело идёт без владельца» — состояние прогонов и настройки с паролями +.night/ +night.config.json diff --git a/app/vitest.config.tools.mjs b/app/vitest.config.tools.mjs index 6d9701fd..04702a5c 100644 --- a/app/vitest.config.tools.mjs +++ b/app/vitest.config.tools.mjs @@ -7,7 +7,7 @@ export default defineConfig({ test: { globals: true, environment: 'node', - include: ['../tools/*.test.mjs'], + include: ['../tools/*.test.mjs', '../tools/**/*.test.mjs'], exclude: ['../tools/ruflo-*.test.mjs', '../tools/subagent-prompt-prefix.test.mjs'], }, }); diff --git a/docs/superpowers/priyomka/.gitkeep b/docs/superpowers/priyomka/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/docs/superpowers/priyomka/1/.gitkeep b/docs/superpowers/priyomka/1/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/night.config.example.json b/night.config.example.json new file mode 100644 index 00000000..fac70035 --- /dev/null +++ b/night.config.example.json @@ -0,0 +1,18 @@ +{ + "worker_hours_limit": 8, + "service_wait_hours": 2, + "supervisor_tick_seconds": 30, + "stall_minutes": 30, + "pause_wait_minutes": 20, + "workspace_max_age_days": 7, + "base_branch": "feat/night-dispatcher-part1", + "worker_model": "sonnet", + "mail": { + "host": "SMTP-хост", + "port": 587, + "user": "логин", + "pass": "пароль — сюда, файл вне хранилища кода", + "from": "robot@liderra.ru", + "to": "почта владельца" + } +} diff --git a/package-lock.json b/package-lock.json index 3ebb5f32..ad97bdd6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "@xenova/transformers": "^2.17.2", + "nodemailer": "^9.0.3", "shell-quote": "^1.8.1" }, "devDependencies": { @@ -12234,6 +12235,15 @@ "node": ">=0.4.0" } }, + "node_modules/nodemailer": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-9.0.3.tgz", + "integrity": "sha512-n+YP+NKwR5zRWa60k3GiQ6Q3B4KXCoAw40dAKeCtYn020iNN74aWK2liXIC3ZEATeGql7we3tE3t8QwhY0eskw==", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", diff --git a/package.json b/package.json index 495aca8f..c71bb907 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,10 @@ "sast": "semgrep --config=p/php --config=p/javascript --config=p/typescript --config=p/secrets --config=.semgrep.yml --error --time", "eval:llm": "promptfoo eval -c docs/ml/promptfoo-example/promptfooconfig.yaml", "brain:dashboard": "node tools/brain-dashboard-server.mjs", - "test:tools": "cd app && npx vitest run --config vitest.config.tools.mjs" + "test:tools": "cd app && npx vitest run --config vitest.config.tools.mjs", + "night:run": "node tools/night/cli.mjs run", + "night:mail": "node tools/night/cli.mjs mail", + "night:summary": "node tools/night/cli.mjs summary" }, "devDependencies": { "@cspell/dict-en_us": "^4.4.33", @@ -44,6 +47,7 @@ }, "dependencies": { "@xenova/transformers": "^2.17.2", + "nodemailer": "^9.0.3", "shell-quote": "^1.8.1" } }