@vellumai/cli 0.4.55 → 0.4.57
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/AGENTS.md +5 -10
- package/bun.lock +3 -70
- package/package.json +2 -3
- package/src/__tests__/random-name.test.ts +24 -5
- package/src/adapters/install.sh +1 -1
- package/src/adapters/openclaw.ts +6 -3
- package/src/commands/client.ts +4 -4
- package/src/commands/hatch.ts +80 -157
- package/src/commands/pair.ts +19 -3
- package/src/commands/ps.ts +88 -2
- package/src/commands/retire.ts +31 -7
- package/src/commands/upgrade.ts +366 -0
- package/src/commands/wake.ts +25 -6
- package/src/components/DefaultMainScreen.tsx +1 -1
- package/src/index.ts +6 -1
- package/src/lib/assistant-config.ts +11 -2
- package/src/lib/aws.ts +10 -38
- package/src/lib/constants.ts +7 -0
- package/src/lib/docker.ts +665 -300
- package/src/lib/gcp.ts +13 -14
- package/src/lib/guardian-token.ts +191 -0
- package/src/lib/health-check.ts +6 -30
- package/src/lib/local.ts +150 -27
- package/src/lib/platform-client.ts +24 -0
- package/src/lib/process.ts +2 -2
- package/src/lib/random-name.ts +17 -1
- package/src/lib/jwt.ts +0 -62
- package/src/lib/policy.ts +0 -7
package/AGENTS.md
CHANGED
|
@@ -6,14 +6,11 @@ The `cli/` package (`@vellumai/cli`) manages the **lifecycle of Vellum assistant
|
|
|
6
6
|
|
|
7
7
|
This contrasts with `assistant/src/cli/`, where commands are scoped to a **single running assistant** and operate on its local state (config, memory, contacts, etc.).
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Scope
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
| Manages lifecycle (create, start, stop, delete) | Manages instance-local state (config, memory, etc.) |
|
|
15
|
-
| Requires specifying which assistant to target | Implicitly scoped to the running assistant |
|
|
16
|
-
| Works without an assistant process running | May require or start the daemon |
|
|
11
|
+
Commands here operate on or across **assistant instances** — creating, starting, stopping, connecting to, and deleting them. They require specifying which assistant to target and work without an assistant process running.
|
|
12
|
+
|
|
13
|
+
For commands scoped to a **single running assistant's** local state (config, memory, contacts), see `assistant/src/cli/AGENTS.md`.
|
|
17
14
|
|
|
18
15
|
Examples: `hatch`, `wake`, `sleep`, `retire`, `ps`, `ssh` belong here. `config`, `contacts`, `memory` belong in `assistant/src/cli/`.
|
|
19
16
|
|
|
@@ -30,9 +27,7 @@ Commands that act on a specific assistant should accept an assistant name or ID
|
|
|
30
27
|
|
|
31
28
|
## Help Text Standards
|
|
32
29
|
|
|
33
|
-
Every command must have high-quality `--help` output
|
|
34
|
-
consumption. Help text is a primary interface — both humans and AI agents read
|
|
35
|
-
it to understand what a command does and how to use it.
|
|
30
|
+
Every command must have high-quality `--help` output. Follow the same standards as `assistant/src/cli/AGENTS.md` § Help Text Standards, adapted for this package's manual argv parsing (no Commander.js).
|
|
36
31
|
|
|
37
32
|
### Requirements
|
|
38
33
|
|
package/bun.lock
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"chalk": "^5.6.0",
|
|
9
9
|
"ink": "^6.7.0",
|
|
10
10
|
"jsqr": "^1.4.0",
|
|
11
|
+
"nanoid": "^5.1.7",
|
|
11
12
|
"pngjs": "^7.0.0",
|
|
12
|
-
"qrcode": "^1.5.4",
|
|
13
13
|
"qrcode-terminal": "^0.12.0",
|
|
14
14
|
"react": "^19.2.4",
|
|
15
15
|
"react-devtools-core": "^6.1.2",
|
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@types/bun": "^1.2.4",
|
|
19
19
|
"@types/pngjs": "^6.0.5",
|
|
20
|
-
"@types/qrcode": "^1.5.6",
|
|
21
20
|
"@types/qrcode-terminal": "^0.12.2",
|
|
22
21
|
"@types/react": "^19.2.14",
|
|
23
22
|
"eslint": "^10.0.0",
|
|
@@ -121,8 +120,6 @@
|
|
|
121
120
|
|
|
122
121
|
"@types/pngjs": ["@types/pngjs@6.0.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-0k5eKfrA83JOZPppLtS2C7OUtyNAl2wKNxfyYl9Q5g9lPkgBl/9hNyAu6HuEH2J4XmIv2znEpkDd0SaZVxW6iQ=="],
|
|
123
122
|
|
|
124
|
-
"@types/qrcode": ["@types/qrcode@1.5.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw=="],
|
|
125
|
-
|
|
126
123
|
"@types/qrcode-terminal": ["@types/qrcode-terminal@0.12.2", "", {}, "sha512-v+RcIEJ+Uhd6ygSQ0u5YYY7ZM+la7GgPbs0V/7l/kFs2uO4S8BcIUEMoP7za4DNIqNnUD5npf0A/7kBhrCKG5Q=="],
|
|
127
124
|
|
|
128
125
|
"@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="],
|
|
@@ -169,8 +166,6 @@
|
|
|
169
166
|
|
|
170
167
|
"bun-types": ["bun-types@1.3.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg=="],
|
|
171
168
|
|
|
172
|
-
"camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="],
|
|
173
|
-
|
|
174
169
|
"chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="],
|
|
175
170
|
|
|
176
171
|
"cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="],
|
|
@@ -179,14 +174,8 @@
|
|
|
179
174
|
|
|
180
175
|
"cli-truncate": ["cli-truncate@5.1.1", "", { "dependencies": { "slice-ansi": "^7.1.0", "string-width": "^8.0.0" } }, "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A=="],
|
|
181
176
|
|
|
182
|
-
"cliui": ["cliui@6.0.0", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^6.2.0" } }, "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ=="],
|
|
183
|
-
|
|
184
177
|
"code-excerpt": ["code-excerpt@4.0.0", "", { "dependencies": { "convert-to-spaces": "^2.0.1" } }, "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA=="],
|
|
185
178
|
|
|
186
|
-
"color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
|
|
187
|
-
|
|
188
|
-
"color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
|
|
189
|
-
|
|
190
179
|
"convert-to-spaces": ["convert-to-spaces@2.0.1", "", {}, "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ=="],
|
|
191
180
|
|
|
192
181
|
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
|
|
@@ -195,12 +184,8 @@
|
|
|
195
184
|
|
|
196
185
|
"debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
|
|
197
186
|
|
|
198
|
-
"decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="],
|
|
199
|
-
|
|
200
187
|
"deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="],
|
|
201
188
|
|
|
202
|
-
"dijkstrajs": ["dijkstrajs@1.0.3", "", {}, "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA=="],
|
|
203
|
-
|
|
204
189
|
"emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
|
|
205
190
|
|
|
206
191
|
"environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="],
|
|
@@ -251,8 +236,6 @@
|
|
|
251
236
|
|
|
252
237
|
"formatly": ["formatly@0.3.0", "", { "dependencies": { "fd-package-json": "^2.0.0" }, "bin": { "formatly": "bin/index.mjs" } }, "sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w=="],
|
|
253
238
|
|
|
254
|
-
"get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="],
|
|
255
|
-
|
|
256
239
|
"get-east-asian-width": ["get-east-asian-width@1.5.0", "", {}, "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA=="],
|
|
257
240
|
|
|
258
241
|
"glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
|
|
@@ -307,6 +290,8 @@
|
|
|
307
290
|
|
|
308
291
|
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
|
|
309
292
|
|
|
293
|
+
"nanoid": ["nanoid@5.1.7", "", { "bin": { "nanoid": "bin/nanoid.js" } }, "sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ=="],
|
|
294
|
+
|
|
310
295
|
"natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],
|
|
311
296
|
|
|
312
297
|
"onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="],
|
|
@@ -319,8 +304,6 @@
|
|
|
319
304
|
|
|
320
305
|
"p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="],
|
|
321
306
|
|
|
322
|
-
"p-try": ["p-try@2.2.0", "", {}, "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="],
|
|
323
|
-
|
|
324
307
|
"patch-console": ["patch-console@2.0.0", "", {}, "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA=="],
|
|
325
308
|
|
|
326
309
|
"path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="],
|
|
@@ -339,8 +322,6 @@
|
|
|
339
322
|
|
|
340
323
|
"punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
|
|
341
324
|
|
|
342
|
-
"qrcode": ["qrcode@1.5.4", "", { "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", "yargs": "^15.3.1" }, "bin": { "qrcode": "bin/qrcode" } }, "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg=="],
|
|
343
|
-
|
|
344
325
|
"qrcode-terminal": ["qrcode-terminal@0.12.0", "", { "bin": { "qrcode-terminal": "./bin/qrcode-terminal.js" } }, "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ=="],
|
|
345
326
|
|
|
346
327
|
"queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
|
|
@@ -351,10 +332,6 @@
|
|
|
351
332
|
|
|
352
333
|
"react-reconciler": ["react-reconciler@0.33.0", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.0" } }, "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA=="],
|
|
353
334
|
|
|
354
|
-
"require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
|
|
355
|
-
|
|
356
|
-
"require-main-filename": ["require-main-filename@2.0.0", "", {}, "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="],
|
|
357
|
-
|
|
358
335
|
"restore-cursor": ["restore-cursor@4.0.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="],
|
|
359
336
|
|
|
360
337
|
"reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
|
|
@@ -365,8 +342,6 @@
|
|
|
365
342
|
|
|
366
343
|
"semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
|
|
367
344
|
|
|
368
|
-
"set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="],
|
|
369
|
-
|
|
370
345
|
"shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
|
|
371
346
|
|
|
372
347
|
"shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="],
|
|
@@ -417,8 +392,6 @@
|
|
|
417
392
|
|
|
418
393
|
"which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
|
|
419
394
|
|
|
420
|
-
"which-module": ["which-module@2.0.1", "", {}, "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ=="],
|
|
421
|
-
|
|
422
395
|
"widest-line": ["widest-line@6.0.0", "", { "dependencies": { "string-width": "^8.1.0" } }, "sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA=="],
|
|
423
396
|
|
|
424
397
|
"word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
|
|
@@ -427,14 +400,8 @@
|
|
|
427
400
|
|
|
428
401
|
"ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="],
|
|
429
402
|
|
|
430
|
-
"y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="],
|
|
431
|
-
|
|
432
403
|
"yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="],
|
|
433
404
|
|
|
434
|
-
"yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="],
|
|
435
|
-
|
|
436
|
-
"yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="],
|
|
437
|
-
|
|
438
405
|
"yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="],
|
|
439
406
|
|
|
440
407
|
"yoga-layout": ["yoga-layout@3.2.1", "", {}, "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ=="],
|
|
@@ -447,52 +414,18 @@
|
|
|
447
414
|
|
|
448
415
|
"@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
|
|
449
416
|
|
|
450
|
-
"cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
|
|
451
|
-
|
|
452
|
-
"cliui/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
|
|
453
|
-
|
|
454
|
-
"cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
|
|
455
|
-
|
|
456
417
|
"fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
|
|
457
418
|
|
|
458
419
|
"micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
|
459
420
|
|
|
460
|
-
"qrcode/pngjs": ["pngjs@5.0.0", "", {}, "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="],
|
|
461
|
-
|
|
462
421
|
"react-devtools-core/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="],
|
|
463
422
|
|
|
464
423
|
"stack-utils/escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="],
|
|
465
424
|
|
|
466
425
|
"wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
|
|
467
426
|
|
|
468
|
-
"yargs/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="],
|
|
469
|
-
|
|
470
|
-
"yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
|
|
471
|
-
|
|
472
427
|
"@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
|
|
473
428
|
|
|
474
|
-
"cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
|
|
475
|
-
|
|
476
|
-
"cliui/string-width/is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
|
|
477
|
-
|
|
478
|
-
"cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
|
|
479
|
-
|
|
480
|
-
"cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
|
|
481
|
-
|
|
482
|
-
"yargs/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="],
|
|
483
|
-
|
|
484
|
-
"yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
|
|
485
|
-
|
|
486
|
-
"yargs/string-width/is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
|
|
487
|
-
|
|
488
|
-
"yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
|
|
489
|
-
|
|
490
429
|
"@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
|
|
491
|
-
|
|
492
|
-
"yargs/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="],
|
|
493
|
-
|
|
494
|
-
"yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
|
|
495
|
-
|
|
496
|
-
"yargs/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="],
|
|
497
430
|
}
|
|
498
431
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vellumai/cli",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.57",
|
|
4
4
|
"description": "CLI tools for vellum-assistant",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"chalk": "^5.6.0",
|
|
28
28
|
"ink": "^6.7.0",
|
|
29
29
|
"jsqr": "^1.4.0",
|
|
30
|
+
"nanoid": "^5.1.7",
|
|
30
31
|
"pngjs": "^7.0.0",
|
|
31
|
-
"qrcode": "^1.5.4",
|
|
32
32
|
"qrcode-terminal": "^0.12.0",
|
|
33
33
|
"react": "^19.2.4",
|
|
34
34
|
"react-devtools-core": "^6.1.2"
|
|
@@ -36,7 +36,6 @@
|
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/bun": "^1.2.4",
|
|
38
38
|
"@types/pngjs": "^6.0.5",
|
|
39
|
-
"@types/qrcode": "^1.5.6",
|
|
40
39
|
"@types/qrcode-terminal": "^0.12.2",
|
|
41
40
|
"@types/react": "^19.2.14",
|
|
42
41
|
"eslint": "^10.0.0",
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { describe, test, expect } from "bun:test";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
generateRandomSuffix,
|
|
4
|
+
generateInstanceName,
|
|
5
|
+
} from "../lib/random-name.js";
|
|
3
6
|
|
|
4
7
|
describe("generateRandomSuffix", () => {
|
|
5
|
-
test("returns a string in adjective-noun format", () => {
|
|
8
|
+
test("returns a string in adjective-noun-nanoid format", () => {
|
|
6
9
|
const result = generateRandomSuffix();
|
|
7
|
-
expect(result).toMatch(/^[a-z]+-[a-z]
|
|
10
|
+
expect(result).toMatch(/^[a-z]+-[a-z]+-[a-z0-9]{6}$/);
|
|
8
11
|
});
|
|
9
12
|
|
|
10
13
|
test("produces varying results across multiple calls", () => {
|
|
@@ -12,8 +15,24 @@ describe("generateRandomSuffix", () => {
|
|
|
12
15
|
for (let i = 0; i < 20; i++) {
|
|
13
16
|
results.add(generateRandomSuffix());
|
|
14
17
|
}
|
|
15
|
-
// With 62 adjectives * 62 nouns
|
|
16
|
-
//
|
|
18
|
+
// With 62 adjectives * 62 nouns * nanoid(6) the combinatorial space is
|
|
19
|
+
// enormous (~56 billion+), so 20 calls should always produce unique values
|
|
17
20
|
expect(results.size).toBeGreaterThan(1);
|
|
18
21
|
});
|
|
19
22
|
});
|
|
23
|
+
|
|
24
|
+
describe("generateInstanceName", () => {
|
|
25
|
+
test("returns explicit name when provided", () => {
|
|
26
|
+
expect(generateInstanceName("vellum", "my-custom")).toBe("my-custom");
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("generates species-prefixed name when no explicit name", () => {
|
|
30
|
+
const result = generateInstanceName("vellum");
|
|
31
|
+
expect(result).toMatch(/^vellum-[a-z]+-[a-z]+-[a-z0-9]{6}$/);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
test("treats null as no explicit name", () => {
|
|
35
|
+
const result = generateInstanceName("openclaw", null);
|
|
36
|
+
expect(result).toMatch(/^openclaw-[a-z]+-[a-z]+-[a-z0-9]{6}$/);
|
|
37
|
+
});
|
|
38
|
+
});
|
package/src/adapters/install.sh
CHANGED
|
@@ -231,7 +231,7 @@ symlink_vellum() {
|
|
|
231
231
|
|
|
232
232
|
# Append PATH setup to ~/.config/vellum/env so callers can pick up PATH
|
|
233
233
|
# changes without restarting their shell:
|
|
234
|
-
# curl -fsSL https://
|
|
234
|
+
# curl -fsSL https://vellum.ai/install.sh | bash && . ~/.config/vellum/env
|
|
235
235
|
write_env_file() {
|
|
236
236
|
local env_dir="${XDG_CONFIG_HOME:-$HOME/.config}/vellum"
|
|
237
237
|
local env_file="$env_dir/env"
|
package/src/adapters/openclaw.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { GATEWAY_PORT } from "../lib/constants";
|
|
|
2
2
|
import { buildOpenclawRuntimeServer } from "../lib/openclaw-runtime-server";
|
|
3
3
|
|
|
4
4
|
export async function buildOpenclawStartupScript(
|
|
5
|
-
bearerToken: string,
|
|
6
5
|
sshUser: string,
|
|
7
6
|
anthropicApiKey: string,
|
|
8
7
|
timestampRedirect: string,
|
|
@@ -98,7 +97,7 @@ else
|
|
|
98
97
|
fi
|
|
99
98
|
|
|
100
99
|
set +e
|
|
101
|
-
openclaw gateway install
|
|
100
|
+
openclaw gateway install
|
|
102
101
|
GATEWAY_INSTALL_EXIT=\$?
|
|
103
102
|
set -e
|
|
104
103
|
|
|
@@ -106,10 +105,14 @@ if [ \$GATEWAY_INSTALL_EXIT -ne 0 ]; then
|
|
|
106
105
|
echo "WARN: openclaw gateway install exited with \$GATEWAY_INSTALL_EXIT (expected systemd mismatch), continuing with user-level systemd setup"
|
|
107
106
|
fi
|
|
108
107
|
|
|
108
|
+
OPENCLAW_GW_TOKEN=$(openssl rand -hex 32)
|
|
109
|
+
echo -n "\$OPENCLAW_GW_TOKEN" > /tmp/openclaw-gateway-token
|
|
110
|
+
chmod 600 /tmp/openclaw-gateway-token
|
|
111
|
+
|
|
109
112
|
mkdir -p /root/.openclaw
|
|
110
113
|
openclaw config set env.ANTHROPIC_API_KEY "${anthropicApiKey}"
|
|
111
114
|
openclaw config set agents.defaults.model.primary "anthropic/claude-opus-4-6"
|
|
112
|
-
openclaw config set gateway.auth.token "
|
|
115
|
+
openclaw config set gateway.auth.token "\$OPENCLAW_GW_TOKEN"
|
|
113
116
|
|
|
114
117
|
echo "=== Starting openclaw gateway at user level ==="
|
|
115
118
|
systemctl --user daemon-reload
|
package/src/commands/client.ts
CHANGED
|
@@ -5,7 +5,8 @@ import {
|
|
|
5
5
|
getActiveAssistant,
|
|
6
6
|
loadLatestAssistant,
|
|
7
7
|
} from "../lib/assistant-config";
|
|
8
|
-
import { GATEWAY_PORT, type Species } from "../lib/constants";
|
|
8
|
+
import { DAEMON_INTERNAL_ASSISTANT_ID, GATEWAY_PORT, type Species } from "../lib/constants";
|
|
9
|
+
import { loadGuardianToken } from "../lib/guardian-token";
|
|
9
10
|
import { getLocalLanIPv4, getMacLocalHostname } from "../lib/local";
|
|
10
11
|
|
|
11
12
|
const ANSI = {
|
|
@@ -15,7 +16,6 @@ const ANSI = {
|
|
|
15
16
|
};
|
|
16
17
|
|
|
17
18
|
const FALLBACK_RUNTIME_URL = `http://127.0.0.1:${GATEWAY_PORT}`;
|
|
18
|
-
const FALLBACK_ASSISTANT_ID = "default";
|
|
19
19
|
|
|
20
20
|
interface ParsedArgs {
|
|
21
21
|
runtimeUrl: string;
|
|
@@ -83,8 +83,8 @@ function parseArgs(): ParsedArgs {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
let runtimeUrl = entry?.localUrl || entry?.runtimeUrl || FALLBACK_RUNTIME_URL;
|
|
86
|
-
let assistantId = entry?.assistantId ||
|
|
87
|
-
const bearerToken = entry?.
|
|
86
|
+
let assistantId = entry?.assistantId || DAEMON_INTERNAL_ASSISTANT_ID;
|
|
87
|
+
const bearerToken = loadGuardianToken(entry?.assistantId ?? "")?.accessToken ?? undefined;
|
|
88
88
|
const species: Species = (entry?.species as Species) ?? "vellum";
|
|
89
89
|
|
|
90
90
|
for (let i = 0; i < flagArgs.length; i++) {
|