vessels 0.2.2 → 0.2.3

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.
Files changed (2) hide show
  1. package/dist/index.js +58 -0
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -184,6 +184,59 @@ async function cmdWebhooksToggle(id, active) {
184
184
  });
185
185
  console.log(`Webhook ${data.endpoint.id} ${data.endpoint.active ? "enabled" : "disabled"}.`);
186
186
  }
187
+ var UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
188
+ async function resolveVesselId(input) {
189
+ if (UUID_RE.test(input)) return input;
190
+ const data = await api("/api/v1/vessels?limit=200&archived=true");
191
+ const vessel = (data.vessels ?? []).find((v) => v.external_id === input);
192
+ if (!vessel) {
193
+ console.error(`Vessel not found: ${input}`);
194
+ process.exit(1);
195
+ }
196
+ return vessel.id;
197
+ }
198
+ async function cmdMessage(args) {
199
+ const flags = parseFlags(args);
200
+ if (!flags.vessel || !flags.message) {
201
+ console.error("Usage: vessels message --vessel <id> --message <text>");
202
+ process.exit(1);
203
+ }
204
+ const vesselId = await resolveVesselId(flags.vessel);
205
+ const since = new Date(Date.now() - 5e3).toISOString();
206
+ const data = await api(`/api/v1/vessels/${vesselId}/messages`, {
207
+ method: "POST",
208
+ body: JSON.stringify({ message: flags.message })
209
+ });
210
+ console.log(`
211
+ Sent.`);
212
+ console.log(` vessel_id ${vesselId}`);
213
+ console.log(` message_id ${data.message_id}`);
214
+ const logsData = await api(`/api/v1/webhooks/deliveries?since=${encodeURIComponent(since)}&limit=10`);
215
+ const deliveries = logsData.deliveries ?? [];
216
+ if (!deliveries.length) {
217
+ console.log("\nNo webhook deliveries \u2014 add an endpoint at vessels-two.vercel.app/settings/webhooks");
218
+ return;
219
+ }
220
+ console.log(`
221
+ Webhook deliveries (${deliveries.length}):
222
+ `);
223
+ for (const d of deliveries) {
224
+ const ok = d.response_status !== null && d.response_status >= 200 && d.response_status < 300;
225
+ const icon = ok ? "\u2713" : "\u2717";
226
+ const status = d.response_status ?? "no response";
227
+ const url = d.endpoint_url ?? "(deleted endpoint)";
228
+ const retry = d.attempt > 1 ? ` \xB7 attempt ${d.attempt}` : "";
229
+ const time = new Date(d.delivered_at).toLocaleTimeString([], { timeStyle: "medium" });
230
+ console.log(` ${icon} ${status} ${url}`);
231
+ console.log(` ${d.event_type}${retry} \xB7 ${time}`);
232
+ if (d.response_body) {
233
+ const body = d.response_body.length > 300 ? d.response_body.slice(0, 300) + "\u2026" : d.response_body;
234
+ console.log(`
235
+ ${body.split("\n").join("\n ")}`);
236
+ }
237
+ console.log();
238
+ }
239
+ }
187
240
  async function cmdPush(args) {
188
241
  const flags = parseFlags(args);
189
242
  const apiKey = flags.key ?? process.env.VESSELS_API_KEY;
@@ -233,6 +286,10 @@ Commands:
233
286
  vessels push --vessel <id> --message <text> --key <api_key>
234
287
  (--key can be omitted if VESSELS_API_KEY is set)
235
288
 
289
+ vessels message --vessel <id> --message <text>
290
+ Send a message as the logged-in user and print webhook delivery logs.
291
+ Accepts vessel UUID or external_id (e.g. booking-123).
292
+
236
293
  Agent/Claude Code setup (fully non-interactive):
237
294
  vessels login --email me@example.com
238
295
  # tell your agent the OTP from the email
@@ -291,6 +348,7 @@ Run: vessels help`);
291
348
  process.exit(1);
292
349
  }
293
350
  if (cmd === "push") return cmdPush([sub, ...rest].filter(Boolean));
351
+ if (cmd === "message") return cmdMessage([sub, ...rest].filter(Boolean));
294
352
  console.error(`Unknown command: ${cmd}
295
353
  Run: vessels help`);
296
354
  process.exit(1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vessels",
3
- "version": "0.2.2",
3
+ "version": "0.2.3",
4
4
  "description": "Vessels CLI — manage your agent communication layer from the terminal",
5
5
  "type": "module",
6
6
  "bin": {