feat: 1.7.0 落地 TODO 全部待办(地面修正 / 手动执行器 / 自救 / 回城 / 租约 / 通知)
按 TODO.md 的优先级把待办全部落地为代码,详见 CHANGELOG 的 [1.7.0]。 - 「走不动」攻关:地面状态修正(syncGroundToPhysics / trustSetbackOnGround)、 出站包类型分布、备选执行器 manualMover(只借 A* 规划、自己按键执行) - 原点自救分两轮并统计成败;回城前评估「原地是否更差」并记录前后坐标 - 新增目标区块租约表(targetLease)避免多机器人撞同一块 - 定时消息支持 cron 与「期望回复」确认;新增人工介入 Webhook 通知(notifier) - 大地图后台预热与视野裁剪;控制台日志按帧批量写入、配置面板支持搜索 顺带修掉两个影响部署的细节: - 部署脚本(deploy.js / ssh-helper.js)改为也能从 .env 读 SSH 凭据 —— 在命令行传密码会留在 shell 历史与进程列表里,写进已被忽略的 .env 更安全; 显式环境变量仍然优先。.env.example 补上占位符并说明这些只在本机用。 - package.json / package-lock.json 版本对齐到 1.7.0(此前停留在 1.1.0, 与 CHANGELOG 的语义化版本声明脱节)。 测试:368 → 436 个用例,`npm test` 与 `npm run check` 全绿。
这个提交包含在:
+13
-4
@@ -3,11 +3,15 @@
|
||||
/**
|
||||
* 一键部署:打包 → 上传 → 远程执行 update.sh → 校验服务已起来。
|
||||
*
|
||||
* 用法(凭据全部走环境变量,脚本里不写死任何密钥):
|
||||
* 用法(凭据全部走环境变量或 .env,脚本里不写死任何密钥):
|
||||
*
|
||||
* # 推荐:把 SSH_HOST / SSH_PORT / SSH_USER / SSH_PASS 写进 .env(已被 .gitignore 忽略)
|
||||
* npm run deploy
|
||||
*
|
||||
* # 或者临时用环境变量覆盖(.env 里的值仍然作为兜底)
|
||||
* # Windows PowerShell
|
||||
* $env:SSH_HOST='103.236.99.177'; $env:SSH_PORT='33851'
|
||||
* $env:SSH_USER='root'; $env:SSH_PASS='<密码>'
|
||||
* $env:SSH_HOST='<服务器 IP>'; $env:SSH_PORT='<端口>'
|
||||
* $env:SSH_USER='root'; $env:SSH_PASS='<密码>'
|
||||
* node scripts/deploy.js
|
||||
*
|
||||
* # Linux / macOS
|
||||
@@ -27,13 +31,18 @@ const fs = require('fs');
|
||||
const os = require('os');
|
||||
const path = require('path');
|
||||
|
||||
// 凭据优先从 .env 读:在命令行里传密码会留在 shell 历史与进程列表里,
|
||||
// 写进已被忽略的 .env 更安全。dotenv 不覆盖已存在的环境变量,所以显式传参仍然优先。
|
||||
require('dotenv').config({ path: path.join(__dirname, '..', '.env') });
|
||||
|
||||
const HOST = process.env.SSH_HOST;
|
||||
const PASS = process.env.SSH_PASS;
|
||||
const APP = process.env.DEPLOY_APP || '/opt/autostore-bot';
|
||||
const PORT = process.env.DEPLOY_PORT || '78';
|
||||
|
||||
if (!HOST || !PASS) {
|
||||
console.error('缺少 SSH_HOST / SSH_PASS 环境变量');
|
||||
console.error('缺少 SSH_HOST / SSH_PASS。请写进项目根目录的 .env(参考 .env.example),'
|
||||
+ '或用环境变量临时传入。');
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
|
||||
+6
-2
@@ -13,7 +13,7 @@
|
||||
* node scripts/ssh-helper.js exec "<命令>"
|
||||
* node scripts/ssh-helper.js put <本地文件> <远程路径>
|
||||
*
|
||||
* 环境变量:
|
||||
* 环境变量(也可以写进项目根目录的 .env,那里已被 .gitignore 忽略):
|
||||
* SSH_HOST 必填
|
||||
* SSH_PASS 必填
|
||||
* SSH_PORT 可选,默认 22
|
||||
@@ -25,6 +25,9 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// 与 deploy.js 一致:凭据可以从 .env 读;dotenv 不覆盖已存在的环境变量,显式传参仍然优先
|
||||
require('dotenv').config({ path: path.join(__dirname, '..', '.env') });
|
||||
|
||||
let Client;
|
||||
try {
|
||||
({ Client } = require('ssh2'));
|
||||
@@ -39,7 +42,8 @@ const USER = process.env.SSH_USER || 'root';
|
||||
const PASS = process.env.SSH_PASS;
|
||||
|
||||
if (!HOST || !PASS) {
|
||||
console.error('缺少 SSH_HOST / SSH_PASS 环境变量');
|
||||
console.error('缺少 SSH_HOST / SSH_PASS。请写进项目根目录的 .env(参考 .env.example),'
|
||||
+ '或用环境变量临时传入。');
|
||||
process.exit(2);
|
||||
}
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户