@geohar/unbien-cli 0.3.2 → 0.3.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.
@@ -0,0 +1 @@
1
+ export declare function run(argv: string[]): Promise<void>;
@@ -0,0 +1,126 @@
1
+ import { loadPeers } from "./store.js";
2
+ import { loadOrCreateIdentity } from "./identity.js";
3
+ import { SessionClient } from "./client.js";
4
+ import { Shell } from "./tui.js";
5
+ /**
6
+ * `unbien create-session <machine> [--dir <cwd>] [--name <session-name>]`
7
+ *
8
+ * Creates a NEW pi session on an idle machine: sends `ub.session_launch` to
9
+ * that machine's control room, where the launcher daemon (remote_launch cap)
10
+ * spawns a pi window via tmux/herdr — the same path the app's LaunchSessionSheet
11
+ * uses. No live pi needs to be running; the daemon is the whole story.
12
+ *
13
+ * The new session joins the mesh once pi starts (same announce path as any
14
+ * launch), so it shows up in `unbien connect --list` and the app — attach is
15
+ * a separate, normal connect.
16
+ */
17
+ /** Machine discovery: name (exact or prefix) or epk prefix, over paired peers. */
18
+ function resolveMachine(target) {
19
+ const peers = loadPeers();
20
+ if (peers.length === 0)
21
+ return null;
22
+ if (!target)
23
+ return peers[peers.length - 1]; // last-paired, matching connect's default
24
+ const t = target.toLowerCase();
25
+ return (peers.find((p) => p.name?.toLowerCase() === t) ??
26
+ peers.find((p) => p.name?.toLowerCase().startsWith(t)) ??
27
+ peers.find((p) => p.epk.startsWith(target)) ??
28
+ null);
29
+ }
30
+ /** Send session_launch and await the daemon's error frame (or its absence). */
31
+ async function launchAndWait(client, cwd, name, timeoutMs = 8_000) {
32
+ return new Promise((resolve) => {
33
+ let settled = false;
34
+ const onUb = (frame) => {
35
+ if (settled)
36
+ return;
37
+ const type = String(frame.type ?? "");
38
+ if (type === "error") {
39
+ settled = true;
40
+ resolve({
41
+ ok: false,
42
+ note: String(frame.message ?? frame.code ?? "launch rejected"),
43
+ });
44
+ }
45
+ // The daemon sends no success ack (the new session announces itself via
46
+ // its own room) — absence of an error frame within the window is success.
47
+ };
48
+ client.on("ub", onUb);
49
+ client.sendUb("session_launch", {
50
+ ...(cwd ? { cwd } : {}),
51
+ ...(name ? { name } : {}),
52
+ });
53
+ setTimeout(() => {
54
+ if (settled)
55
+ return;
56
+ settled = true;
57
+ client.off("ub", onUb);
58
+ resolve({ ok: true, note: "" });
59
+ }, timeoutMs);
60
+ });
61
+ }
62
+ export async function run(argv) {
63
+ const flags = new Map();
64
+ let target = "";
65
+ for (let i = 0; i < argv.length; i++) {
66
+ const a = argv[i];
67
+ if (a === "--dir")
68
+ flags.set("dir", argv[++i] ?? "");
69
+ else if (a === "--name")
70
+ flags.set("name", argv[++i] ?? "");
71
+ else if (a === "--relay")
72
+ flags.set("relay", argv[++i] ?? "");
73
+ else if (!a.startsWith("--"))
74
+ target = a;
75
+ }
76
+ if (loadPeers().length === 0) {
77
+ console.error("no paired machines yet — run `/unbien pair` in a session, then `unbien connect '<invite>'`");
78
+ Shell.exitAfterDrain(1);
79
+ }
80
+ const machine = resolveMachine(target);
81
+ if (!machine) {
82
+ console.error(`no machine matching '${target}'. Known:` +
83
+ loadPeers()
84
+ .map((p) => `\n ${p.name ?? p.epk.slice(0, 12)} (${p.epk.slice(0, 10)}…)`)
85
+ .join(""));
86
+ Shell.exitAfterDrain(1);
87
+ return; // Shell.exitAfterDrain is async-drained; narrowing needs this
88
+ }
89
+ const label = machine.name ?? machine.epk.slice(0, 12);
90
+ // One client per (relay, machine) — the invite's epk scopes the daemon.
91
+ const relayUrl = flags.get("relay") ?? machine.relayUrl;
92
+ const keypair = loadOrCreateIdentity();
93
+ const crypto = await import("node:crypto");
94
+ const controlRoom = crypto
95
+ .createHash("sha256")
96
+ .update(String.fromCharCode(0) + "control" + String.fromCharCode(0) + machine.epk)
97
+ .digest("base64url")
98
+ .slice(0, 12);
99
+ const client = new SessionClient(relayUrl, keypair, {
100
+ token: "",
101
+ epk: machine.epk,
102
+ roomId: controlRoom,
103
+ });
104
+ try {
105
+ await client.connect();
106
+ }
107
+ catch {
108
+ console.error(`[relay] unreachable: ${relayUrl} (${label})`);
109
+ Shell.exitAfterDrain(1);
110
+ }
111
+ const cwd = flags.get("dir") || undefined;
112
+ const name = flags.get("name") || undefined;
113
+ console.error(`launching pi on ${label}${cwd ? ` in ${cwd}` : ""}${name ? ` as '${name}'` : ""} …`);
114
+ const outcome = await launchAndWait(client, cwd, name);
115
+ if (!outcome.ok) {
116
+ console.error(`launch rejected: ${outcome.note}`);
117
+ Shell.exitAfterDrain(1);
118
+ }
119
+ // Machine name (stored) may differ from the daemon's hostname — query
120
+ // presence for the authoritative hostname in the confirmation line.
121
+ console.log(`launched on ${label}. The session joins the mesh when pi starts — ` +
122
+ `attach with \`unbien connect ${machine.epk.slice(0, 8)} --list\`.`);
123
+ Shell.exitAfterDrain(0);
124
+ }
125
+ await run(process.argv.slice(2));
126
+ //# sourceMappingURL=create_session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_session.js","sourceRoot":"","sources":["../src/create_session.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -2,6 +2,7 @@
2
2
  /** Single front door: `unbien <command>`. */
3
3
  const COMMANDS = new Map([
4
4
  ["connect", () => import("./connect.js")],
5
+ ["create-session", () => import("./create_session.js")],
5
6
  ["replay", () => import("./replay.js")],
6
7
  ["pair", () => import("./pair.js")],
7
8
  ["relay", () => import("./relay.js")],
@@ -31,6 +32,8 @@ const load = verb ? COMMANDS.get(verb) : undefined;
31
32
  if (!load) {
32
33
  console.error(`usage: unbien [command] [options]\n\n` +
33
34
  " connect attach to a live pi session over the relay (default)\n" +
35
+ " create-session <machine> [--dir <cwd>] [--name <name>]\n" +
36
+ " spawn a fresh pi session on an idle machine\n" +
34
37
  " replay render a captured envelope stream from a file\n" +
35
38
  " pair pair with a machine (paste its unbien:// invite)\n" +
36
39
  " relay manage remembered relays (add / remove / list)\n\n" +
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,6CAA6C;AAE7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;CACtC,CAAC,CAAA;AAEF,4EAA4E;AAC5E,wEAAwE;AACxE,6DAA6D;AAC7D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAClE,CAAA;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACvC,2EAA2E;AAC3E,6EAA6E;AAC7E,qDAAqD;AACrD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;AACzE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAElD,IAAI,CAAC,IAAI,EAAE,CAAC;IACV,OAAO,CAAC,KAAK,CACX,uCAAuC;QACrC,oEAAoE;QACpE,6DAA6D;QAC7D,gEAAgE;QAChE,gEAAgE;QAChE,2DAA2D,CAC9D,CAAA;IACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/B,CAAC;AAED,8EAA8E;AAC9E,IAAI,IAAI;IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACnC,MAAM,IAAI,EAAE,CAAA"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,6CAA6C;AAE7C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACvD,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;CACtC,CAAC,CAAA;AAEF,4EAA4E;AAC5E,wEAAwE;AACxE,6DAA6D;AAC7D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;IAChE,IAAI,CAAC;QACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAClE,CAAA;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACvC,2EAA2E;AAC3E,6EAA6E;AAC7E,qDAAqD;AACrD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;AACzE,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAElD,IAAI,CAAC,IAAI,EAAE,CAAC;IACV,OAAO,CAAC,KAAK,CACX,uCAAuC;QACrC,oEAAoE;QACpE,4DAA4D;QAC5D,2DAA2D;QAC3D,6DAA6D;QAC7D,gEAAgE;QAChE,gEAAgE;QAChE,2DAA2D,CAC9D,CAAA;IACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/B,CAAC;AAED,8EAA8E;AAC9E,IAAI,IAAI;IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACnC,MAAM,IAAI,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geohar/unbien-cli",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "unbien — a terminal client for remote Pi coding-agent sessions. Attach over an un-bien relay and render the transcript with pi's own TUI components: markdown, syntax highlighting, native tool cards, and your pi theme.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -41,7 +41,7 @@
41
41
  "dependencies": {
42
42
  "@earendil-works/pi-coding-agent": ">=0.84.3",
43
43
  "@earendil-works/pi-tui": "^0.84.4",
44
- "@geohar/un-bien": "0.20.2"
44
+ "@geohar/un-bien": "0.20.3"
45
45
  },
46
46
  "files": [
47
47
  "dist",