@cabane/cli 0.1.5 → 0.1.7

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/cli.js +25 -10
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1029,14 +1029,23 @@ async function setupAgent(opts) {
1029
1029
  const client = makeClient(base, token);
1030
1030
  const me = await client.get("/api/auth/me");
1031
1031
  ok(`owner resolved (${me.user.id})`);
1032
- const agentName = await defaultAgentName(client);
1033
- ok("setup complete");
1032
+ const assignment = await defaultAgentAssignment(client);
1034
1033
  info("");
1035
- info(`Your agent (@${agentName}) has no executor yet \u2014 agents run on a companion you pair,`);
1036
- info("the same way they do on hosted Cabane. To bring it to life:");
1034
+ if (assignment.kind === "unavailable") {
1035
+ info("Agent assignment could not be checked. Open Cabane to verify it.");
1036
+ return;
1037
+ }
1038
+ const { username, executor } = assignment.agent;
1039
+ if (executor.deviceId) {
1040
+ info(`Agent @${username} is assigned to ${executor.deviceLabel}.`);
1041
+ return;
1042
+ }
1043
+ info(`Agent @${username} has no device assigned.`);
1037
1044
  info(" 1. Install the Companion \u2014 the desktop app, or the headless `@cabane/companion`.");
1038
1045
  info(` 2. Sign in against this instance (${instanceUrl}) and pair the device.`);
1039
- info(` 3. Assign @${agentName} to one of its connectors, then message it in the app.`);
1046
+ info(
1047
+ ` 3. Assign @${username} to the device, then choose a connector on it and message the agent in the app.`
1048
+ );
1040
1049
  }
1041
1050
  async function healthy(port) {
1042
1051
  try {
@@ -1054,18 +1063,24 @@ async function resolvePat(opts, base) {
1054
1063
  }
1055
1064
  throw new Error("no access token. Pass --token <cab_\u2026> (mint it in Settings \u2192 Developer).");
1056
1065
  }
1057
- async function defaultAgentName(client) {
1066
+ var BUILTIN_AGENT_USERNAME = "woody";
1067
+ function selectSetupAgent(workspace, agents) {
1068
+ return workspace.defaultAgentId && agents.find((a) => a.id === workspace.defaultAgentId) || agents.find((a) => a.username === BUILTIN_AGENT_USERNAME) || agents[0];
1069
+ }
1070
+ async function defaultAgentAssignment(client) {
1058
1071
  try {
1059
1072
  const { workspaces } = await client.get("/api/workspaces");
1060
1073
  const workspace = workspaces.find((w) => w.role === "owner") ?? workspaces[0];
1061
- if (!workspace) return "cabane";
1074
+ if (!workspace) return { kind: "unavailable" };
1062
1075
  const { agents } = await client.get(
1063
1076
  `/api/workspaces/${workspace.id}/agents`
1064
1077
  );
1065
- const agent = workspace.defaultAgentId && agents.find((a) => a.id === workspace.defaultAgentId) || agents.find((a) => a.username === "cabane") || agents[0];
1066
- return agent?.username ?? "cabane";
1078
+ const agent = selectSetupAgent(workspace, agents);
1079
+ if (!agent?.username || !agent.executor) return { kind: "unavailable" };
1080
+ if (agent.executor.deviceId && !agent.executor.deviceLabel) return { kind: "unavailable" };
1081
+ return { kind: "resolved", agent };
1067
1082
  } catch {
1068
- return "cabane";
1083
+ return { kind: "unavailable" };
1069
1084
  }
1070
1085
  }
1071
1086
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cabane/cli",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "type": "module",
5
5
  "description": "The cabane CLI — install, run, and update a self-hosted Cabane on your own machine (server + embedded Postgres; agents run on a companion you pair).",
6
6
  "license": "UNLICENSED",