{"_id":"@adxie/nemoclaw-deploy","_rev":"2-ce768e1c907c85467c3a0444c9cc833d","name":"@adxie/nemoclaw-deploy","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@adxie/nemoclaw-deploy","version":"0.1.0","_id":"@adxie/nemoclaw-deploy@0.1.0","maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"}],"bin":{"nemoclaw-deploy":"bin/nemoclaw-deploy.js"},"dist":{"shasum":"ce30a559cd8050b1a12359281774839a6dae0dc1","tarball":"https://registry.npmjs.org/@adxie/nemoclaw-deploy/-/nemoclaw-deploy-0.1.0.tgz","fileCount":74,"integrity":"sha512-T6UqAN4Js9P5TPWje5eLJSJu8AtO1K7m3JCX8g+Z32W3UwCCyAmTgKHeMQw7TEa+INeHXDNlgvUhheaZlu5u1A==","signatures":[{"sig":"MEUCIE0Lek63zJogV/ZAtoaXXSIDhcIltmP8jzAcsAlCx2boAiEAnKP4HnnbdkFjlpzKyxU9+qWVthcdY/s3bM7Mb2GNsm8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140989},"type":"module","engines":{"node":">=20"},"gitHead":"c4c73c0a24f24b798e40be9c9ce6f8c03ba51f37","scripts":{"dev":"tsx src/index.ts","build":"tsc","prepack":"npm run build"},"_npmUser":{"name":"adxie-owner","email":"pgxie0223@gmail.com"},"_npmVersion":"11.5.1","description":"Safe OpenClaw agent deployment helper for existing NemoClaw sandboxes.","directories":{},"_nodeVersion":"24.5.0","dependencies":{"zod":"^4.1.13","yaml":"^2.8.1","execa":"^9.6.0","fs-extra":"^11.3.2","commander":"^14.0.2","picocolors":"^1.1.1","@inquirer/prompts":"^7.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","@types/node":"^24.10.1","@types/fs-extra":"^11.0.4"},"_npmOperationalInternal":{"tmp":"tmp/nemoclaw-deploy_0.1.0_1782457510589_0.0478171080196661","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@adxie/nemoclaw-deploy","version":"0.2.0","description":"Safe OpenClaw agent deployment helper for existing NemoClaw sandboxes.","type":"module","bin":{"nemoclaw-deploy":"bin/nemoclaw-deploy.js"},"scripts":{"build":"tsc","dev":"tsx src/index.ts","prepack":"npm run build"},"engines":{"node":">=20"},"dependencies":{"@inquirer/prompts":"^7.8.0","commander":"^14.0.2","execa":"^9.6.0","fs-extra":"^11.3.2","picocolors":"^1.1.1","yaml":"^2.8.1","zod":"^4.1.13"},"devDependencies":{"@types/fs-extra":"^11.0.4","@types/node":"^24.10.1","tsx":"^4.21.0","typescript":"^5.9.3"},"_id":"@adxie/nemoclaw-deploy@0.2.0","gitHead":"14076011924ebdbb0c45227c3dc452f983c4c8f4","_nodeVersion":"24.5.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-N5iAd6+VhYq8webHRVnC1lg7dVYG8lAwXzHxxcQdtw3GP/OlMhS35IG1ZjG+fj4HTKonycgfUWM8UvBo91SHnQ==","shasum":"69235a7829e5bf05e4713cebc702edc6acd3b8c8","tarball":"https://registry.npmjs.org/@adxie/nemoclaw-deploy/-/nemoclaw-deploy-0.2.0.tgz","fileCount":80,"unpackedSize":180177,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEKziW0vC+eB91nFBpfZoci72vD8pFfTmBWvSRUYXhNpAiBwjCpLip3sI3cYeUfshukQ4gYw9vZIbXKrNaB5H4NpGg=="}]},"_npmUser":{"name":"adxie-owner","email":"pgxie0223@gmail.com"},"directories":{},"maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nemoclaw-deploy_0.2.0_1782711361479_0.694493446186347"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-26T07:05:10.463Z","modified":"2026-06-29T05:36:01.777Z","0.1.0":"2026-06-26T07:05:10.825Z","0.2.0":"2026-06-29T05:36:01.625Z"},"description":"Safe OpenClaw agent deployment helper for existing NemoClaw sandboxes.","maintainers":[{"name":"adxie-owner","email":"pgxie0223@gmail.com"}],"readme":"# nemoclaw-deploy\n\n`nemoclaw-deploy` 是一个 Node.js / TypeScript CLI，用于在已经部署好的 NemoClaw sandbox 中安全部署 OpenClaw agent。\n\n它负责：\n\n- 创建或确认 OpenClaw agent\n- 安全上传 agent 初始化内容\n- 安装 skills 目录下的所有 skill\n- 配置 `channels.advbot`\n- 应用 network policy 目录下的所有策略文件\n- 合并写入 workspace `.env`\n- 在 workspace 中安装依赖\n- 按需触发 channel recover 和基础验证\n\n它不负责安装 NemoClaw，也不负责创建 sandbox。\n\n## 安装\n\n```bash\nnpm install -g @adxie/nemoclaw-deploy\n```\n\n## 使用\n\n交互式部署：\n\n```bash\nnemoclaw-deploy\n```\n\n配置文件部署：\n\n```bash\nnemoclaw-deploy deploy --config deploy.yaml\n```\n\n非交互部署：\n\n```bash\nnemoclaw-deploy deploy --config deploy.yaml --non-interactive\n```\n\n只查看计划：\n\n```bash\nnemoclaw-deploy deploy --config deploy.yaml --dry-run\n```\n\n生成配置模板：\n\n```bash\nnemoclaw-deploy init-config --output deploy.yaml\n```\n\n检查环境：\n\n```bash\nnemoclaw-deploy doctor\nnemoclaw-deploy doctor --sandbox demo\n```\n\n## 配置格式\n\n```yaml\nsandboxName: demo\nagentName: my-agent\n\nworkspace: \"\"\n\nagentContent:\n  enabled: true\n  hostDir: ./agent-content\n  conflictStrategy: ask\n\nskill:\n  enabled: true\n  hostDir: ./skills\n\nchannel:\n  enabled: true\n  type: advbot\n  accountId: default\n  channelServerUrl: http://127.0.0.1:8086\n  gatewayToken: \"\"\n  gatewayUrl: \"\"\n\nnetworkPolicy:\n  enabled: true\n  dir: ./policies\n\nenv:\n  enabled: false\n  targetFile: .env\n  variables:\n    NODE_ENV: production\n  secrets:\n    - name: API_TOKEN\n      fromEnv: API_TOKEN\n\ndependencies:\n  enabled: false\n  workingDir: \"\"\n  commands:\n    - npm install\n  continueOnError: false\n\noptions:\n  restart: true\n```\n\n`workspace` 为空时默认使用 `/sandbox/.openclaw/workspace-${agentName}`。\n\n`skill.hostDir` 指向 skills 根目录。CLI 会安装该目录下所有包含 `SKILL.md` 的 skill 子目录；如果该目录本身包含 `SKILL.md`，也兼容作为单个 skill 安装。\n\n`networkPolicy.dir` 指向 network policy 目录。CLI 会应用该目录下所有 `.yaml` / `.yml` 文件；旧配置中的 `networkPolicy.file` 仍兼容单文件路径。\n\n`env.enabled=true` 时，CLI 会把 `variables` 和 `secrets` 合并写入 `${workspace}/${targetFile}`。`secrets[].fromEnv` 从本机环境变量读取，日志中不会打印 secret 值。不要把真实 secret 直接写进 `deploy.yaml`。\n\n`dependencies.enabled=true` 时，CLI 会在 `dependencies.workingDir` 下执行 `commands`。`workingDir` 为空时默认是当前 agent workspace；相对路径会解析到 workspace 内。\n\nNetwork policy 通过 NemoClaw live policy 写入，应用后不需要 recover。`options.restart=true` 只会在 channel 配置需要重新加载时触发后台 recover。\n\n## 安全策略\n\n- 所有外部命令通过统一 `runCommand` 执行。\n- dry-run 模式不执行真实命令。\n- gateway token 不会完整打印到日志。\n- env secret 不会完整打印到日志，也不会写入本地配置文件。\n- dashboard URL 中的 `#token=...` 不会拼入 gateway URL。\n- agent-content 不会直接上传覆盖 workspace，而是先上传到 sandbox 临时目录，再由合并脚本按冲突策略处理。\n- 非交互模式下 agent-content 冲突默认失败。\n\n## 文档\n\n- [ROADMAP](docs/ROADMAP.md)\n- [v0.1.0](docs/releases/v0.1.0.md)\n- [v0.2.0](docs/releases/v0.2.0.md)\n- [v0.3.0](docs/releases/v0.3.0.md)\n- [v1.0.0](docs/releases/v1.0.0.md)\n","readmeFilename":"README.md"}