@geohar/un-bien 0.9.0 → 0.16.0

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 (140) hide show
  1. package/README.md +100 -131
  2. package/dist/actions/handlers.js.map +1 -1
  3. package/dist/actions/registry.js.map +1 -1
  4. package/dist/bin/launcher.js.map +1 -1
  5. package/dist/client.d.ts +15 -0
  6. package/dist/client.js +15 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/commands/deps.d.ts +156 -0
  9. package/dist/commands/deps.js +2 -0
  10. package/dist/commands/deps.js.map +1 -0
  11. package/dist/commands/fork_link.d.ts +4 -0
  12. package/dist/commands/fork_link.js +45 -0
  13. package/dist/commands/fork_link.js.map +1 -0
  14. package/dist/commands/housekeeping.d.ts +34 -0
  15. package/dist/commands/housekeeping.js +275 -0
  16. package/dist/commands/housekeeping.js.map +1 -0
  17. package/dist/commands/info.d.ts +43 -0
  18. package/dist/commands/info.js +127 -0
  19. package/dist/commands/info.js.map +1 -0
  20. package/dist/commands/lifecycle.d.ts +45 -0
  21. package/dist/commands/lifecycle.js +708 -0
  22. package/dist/commands/lifecycle.js.map +1 -0
  23. package/dist/commands/pairing.d.ts +26 -0
  24. package/dist/commands/pairing.js +167 -0
  25. package/dist/commands/pairing.js.map +1 -0
  26. package/dist/commands/register.d.ts +12 -0
  27. package/dist/commands/register.js +255 -0
  28. package/dist/commands/register.js.map +1 -0
  29. package/dist/commands/relay.d.ts +28 -0
  30. package/dist/commands/relay.js +81 -0
  31. package/dist/commands/relay.js.map +1 -0
  32. package/dist/commands/session_ops.d.ts +52 -0
  33. package/dist/commands/session_ops.js +75 -0
  34. package/dist/commands/session_ops.js.map +1 -0
  35. package/dist/config.d.ts +11 -1
  36. package/dist/config.js.map +1 -1
  37. package/dist/daemon/install.d.ts +6 -5
  38. package/dist/daemon/install.js +15 -5
  39. package/dist/daemon/install.js.map +1 -1
  40. package/dist/enrich_tool_args.js.map +1 -1
  41. package/dist/extension_ui_bridge.js.map +1 -1
  42. package/dist/image_codec.js.map +1 -1
  43. package/dist/index.d.ts +32 -101
  44. package/dist/index.js +852 -2872
  45. package/dist/index.js.map +1 -1
  46. package/dist/launch.d.ts +14 -1
  47. package/dist/launch.js +55 -5
  48. package/dist/launch.js.map +1 -1
  49. package/dist/launcher/launcher.js +48 -6
  50. package/dist/launcher/launcher.js.map +1 -1
  51. package/dist/mcp/mesh_result.js.map +1 -1
  52. package/dist/mcp/mesh_server.js.map +1 -1
  53. package/dist/mesh/canonical.js +1 -1
  54. package/dist/mesh/canonical.js.map +1 -1
  55. package/dist/mesh/client.js.map +1 -1
  56. package/dist/mesh/encoding.js.map +1 -1
  57. package/dist/mesh/self_revoke.js.map +1 -1
  58. package/dist/mesh/siblings.js.map +1 -1
  59. package/dist/mesh/verify.js +1 -1
  60. package/dist/mesh/verify.js.map +1 -1
  61. package/dist/pairing/crypto.js +0 -1
  62. package/dist/pairing/crypto.js.map +1 -1
  63. package/dist/pairing/peer_trust.js.map +1 -1
  64. package/dist/pairing/qr.js.map +1 -1
  65. package/dist/pairing/storage.d.ts +7 -0
  66. package/dist/pairing/storage.js +22 -3
  67. package/dist/pairing/storage.js.map +1 -1
  68. package/dist/panel_bridge.js +1 -0
  69. package/dist/panel_bridge.js.map +1 -1
  70. package/dist/paths.d.ts +22 -8
  71. package/dist/paths.js +37 -10
  72. package/dist/paths.js.map +1 -1
  73. package/dist/protocol/codec.js.map +1 -1
  74. package/dist/rooms.js +1 -4
  75. package/dist/rooms.js.map +1 -1
  76. package/dist/session/bridge.js.map +1 -1
  77. package/dist/session/broker.js.map +1 -1
  78. package/dist/session/broker_remote.js.map +1 -1
  79. package/dist/session/capabilities.d.ts +11 -0
  80. package/dist/session/capabilities.js +35 -0
  81. package/dist/session/capabilities.js.map +1 -0
  82. package/dist/session/cwd_lock.js +3 -3
  83. package/dist/session/cwd_lock.js.map +1 -1
  84. package/dist/session/debug_log.js +13 -3
  85. package/dist/session/debug_log.js.map +1 -1
  86. package/dist/session/envelope.js.map +1 -1
  87. package/dist/session/global_config.d.ts +1 -1
  88. package/dist/session/global_config.js +1 -1
  89. package/dist/session/global_config.js.map +1 -1
  90. package/dist/session/ipc.d.ts +2 -2
  91. package/dist/session/ipc.js.map +1 -1
  92. package/dist/session/leader_election.js.map +1 -1
  93. package/dist/session/local_config.d.ts +37 -0
  94. package/dist/session/local_config.js +45 -1
  95. package/dist/session/local_config.js.map +1 -1
  96. package/dist/session/mesh_node.d.ts +1 -1
  97. package/dist/session/mesh_node.js +1 -1
  98. package/dist/session/mesh_node.js.map +1 -1
  99. package/dist/session/peer.js.map +1 -1
  100. package/dist/session/peer_inventory.js.map +1 -1
  101. package/dist/session/peer_limits.js.map +1 -1
  102. package/dist/session/received_images.d.ts +63 -0
  103. package/dist/session/received_images.js +273 -0
  104. package/dist/session/received_images.js.map +1 -0
  105. package/dist/session/relay_lifecycle.d.ts +223 -0
  106. package/dist/session/relay_lifecycle.js +802 -0
  107. package/dist/session/relay_lifecycle.js.map +1 -0
  108. package/dist/session/rpc_envelope.d.ts +10 -0
  109. package/dist/session/rpc_envelope.js +9 -0
  110. package/dist/session/rpc_envelope.js.map +1 -1
  111. package/dist/session/rpc_handlers.d.ts +53 -0
  112. package/dist/session/rpc_handlers.js +268 -0
  113. package/dist/session/rpc_handlers.js.map +1 -0
  114. package/dist/session/rpc_inbound.d.ts +41 -6
  115. package/dist/session/rpc_inbound.js +55 -0
  116. package/dist/session/rpc_inbound.js.map +1 -1
  117. package/dist/session/setup_wizard.js.map +1 -1
  118. package/dist/session/tools.js.map +1 -1
  119. package/dist/session/wizard.js.map +1 -1
  120. package/dist/state_migration.d.ts +45 -0
  121. package/dist/state_migration.js +104 -0
  122. package/dist/state_migration.js.map +1 -0
  123. package/dist/subagent_rooms.d.ts +19 -0
  124. package/dist/subagent_rooms.js +146 -14
  125. package/dist/subagent_rooms.js.map +1 -1
  126. package/dist/test_hooks.d.ts +180 -0
  127. package/dist/test_hooks.js +98 -0
  128. package/dist/test_hooks.js.map +1 -0
  129. package/dist/transport/peer_channel.d.ts +11 -0
  130. package/dist/transport/peer_channel.js +34 -11
  131. package/dist/transport/peer_channel.js.map +1 -1
  132. package/dist/transport/pi_forward_client.js.map +1 -1
  133. package/dist/transport/relay_client.d.ts +14 -3
  134. package/dist/transport/relay_client.js +6 -3
  135. package/dist/transport/relay_client.js.map +1 -1
  136. package/dist/ui/footer.js.map +1 -1
  137. package/docs/daemon.md +166 -176
  138. package/package.json +6 -2
  139. package/service-templates/launchd.plist.template +5 -4
  140. package/service-templates/systemd.service.template +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/commands/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `/unbien` pairing commands: pair (fresh QR), revoke (by shortid), and
3
+ * the shortid completions backing `/unbien revoke <tab>`.
4
+ *
5
+ * Both pair and revoke auto-bootstrap the mesh + relay when down
6
+ * (mirroring each other). Everything they need from index.ts's module
7
+ * scope comes through `CommandDeps` (see deps.ts). Carved out of index.ts
8
+ * (phase 1 of the index.ts carve-up).
9
+ */
10
+ import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
11
+ import type { CommandDeps } from "./deps.js";
12
+ /**
13
+ * `/unbien pair` — always generates a fresh QR when the relay is up.
14
+ *
15
+ * Pre-W2D this rejected with "Already paired with X" once one owner was
16
+ * connected, forcing /unbien stop to pair a second device — the
17
+ * catch-22 the multi-channel refactor was designed to break. Now the new
18
+ * device is **added** to `deps.activePeers` after scanning, while existing
19
+ * owners keep their session.
20
+ */
21
+ export declare function _cmdPair(deps: CommandDeps, ctx: Pick<ExtensionContext, "ui" | "cwd">, args?: string): Promise<void>;
22
+ export declare function _cmdRevoke(deps: CommandDeps, arg: string, ctx: Pick<ExtensionContext, "ui" | "cwd">): Promise<void>;
23
+ export declare function _shortidCompletions(prefix: string, valuePrefix?: string): Promise<Array<{
24
+ value: string;
25
+ label: string;
26
+ }>>;
@@ -0,0 +1,167 @@
1
+ import { localConfigExists } from "../session/local_config.js";
2
+ import { listPeers, removePeer } from "../pairing/storage.js";
3
+ import { _inspectPeerRecord, } from "../pairing/peer_trust.js";
4
+ import { buildQRUri, clampPairTtlMs, qrSession, renderQRAscii, TOKEN_TTL_MS, } from "../pairing/qr.js";
5
+ import { _cmdJoin, _cmdStart } from "./lifecycle.js";
6
+ /**
7
+ * `/unbien pair` — always generates a fresh QR when the relay is up.
8
+ *
9
+ * Pre-W2D this rejected with "Already paired with X" once one owner was
10
+ * connected, forcing /unbien stop to pair a second device — the
11
+ * catch-22 the multi-channel refactor was designed to break. Now the new
12
+ * device is **added** to `deps.activePeers` after scanning, while existing
13
+ * owners keep their session.
14
+ */
15
+ export async function _cmdPair(deps, ctx, args = "") {
16
+ const cwd = "cwd" in ctx ? ctx.cwd : "";
17
+ // Auto-bootstrap when services are down. Before this, `/unbien pair`
18
+ // on a fresh terminal forced the user to call `/unbien` first — every
19
+ // session began with the same surprise warning + second command. Now we
20
+ // do the join + relay-start inline so the common "I just opened a
21
+ // terminal and want to pair my phone" flow is a single command.
22
+ //
23
+ // We don't run the first-time wizard here: pair is a focused operation
24
+ // and the wizard prompts are wrong UX in that flow. If there's no local
25
+ // config, the user truly needs to run `/unbien` first to configure.
26
+ if (deps.state === "idle") {
27
+ if (!localConfigExists(cwd)) {
28
+ ctx.ui.notify("[un-bien] First-time setup needed. Run /unbien to configure, then /unbien pair.", "warning");
29
+ return;
30
+ }
31
+ ctx.ui.notify("[un-bien] Starting mesh + relay before pairing…", "info");
32
+ if (!deps.meshNode)
33
+ await _cmdJoin(deps, ctx);
34
+ if (deps.state === "idle")
35
+ await _cmdStart(deps, ctx);
36
+ }
37
+ // Relay must be up — the QR carries a token the app exchanges through
38
+ // the relay. Without a live WS there's nothing for the scan to land on.
39
+ if (deps.state === "idle" || !deps.relay) {
40
+ ctx.ui.notify(deps.relayStartDeferred
41
+ ? "[un-bien] Relay start is deferred until this session has an id " +
42
+ "(design 01M1CAW0) — try pairing again once the session has started."
43
+ : "[un-bien] Pair requires the relay to be connected. " +
44
+ "Run /unbien to start it (or fix your relay URL via /unbien set-relay).", "warning");
45
+ return;
46
+ }
47
+ const edKp = deps.cachedEd25519;
48
+ // Embed the user-configured name in the QR so the app shows it on the
49
+ // pairing screen before pair_ok lands (better UX than "remote" or a
50
+ // raw path snippet).
51
+ const sessionName = deps.displayName(cwd);
52
+ // Optional `--ttl <seconds>` — RPC clients (e.g. Cockpit) pass a caller-
53
+ // defined expiry. Defaults to TOKEN_TTL_MS, clamped to the safe window.
54
+ const ttlMatch = /--ttl\s+(\d+)/.exec(args);
55
+ const ttlMs = ttlMatch
56
+ ? clampPairTtlMs(Number(ttlMatch[1]) * 1000)
57
+ : TOKEN_TTL_MS;
58
+ const { token, expiresAt } = qrSession.issueToken(ttlMs);
59
+ // The QR room is the ISSUING session's room (session-id-derived `deps.myRoomId`).
60
+ // Pairing is room-scoped to this session (it owns the QR token), so only this
61
+ // session answers the pair_request — no fan-out race. Trust still lands on the
62
+ // MACHINE: pair_ok persists a PairedMachine keyed by epk, and the app then
63
+ // discovers all the machine's sessions via room_announced.
64
+ // design 01M1CAW0: the QR room MUST equal the room the Pi actually announces
65
+ // (session-id-derived). With the relay up that is always `deps.myRoomId`; a
66
+ // null here means no session id exists — refuse rather than mint a QR for a
67
+ // cwd-derived room the Pi will never announce (the app would address a dead
68
+ // room and pairing would silently misroute).
69
+ const roomId = deps.myRoomId ?? deps.deriveRoomId(cwd, sessionName);
70
+ if (roomId === null) {
71
+ ctx.ui.notify("[un-bien] No session id yet — cannot mint a pairing QR (design " +
72
+ "01M1CAW0). Try again once this session has started.", "error");
73
+ return;
74
+ }
75
+ const qrUri = buildQRUri(token, edKp.publicKey, sessionName, roomId);
76
+ // Render both the QR ASCII and the copy-paste URI inside the Pi TUI's
77
+ // chat panel via `pi.sendMessage` — the same channel the SDK uses for
78
+ // agent responses + tool results. `process.stderr.write` (the old QR
79
+ // path via `displayQR`) broke the TUI layout because it bypassed the
80
+ // chat widget and bled into the prompt area. qrcode-terminal v0.12
81
+ // small mode is pure Unicode (█ ▀ ▄ space, no ANSI escapes — see
82
+ // `lib/main.js:48-53`), so embedding the ASCII inside a sendMessage
83
+ // content string renders correctly without raw escape bytes.
84
+ if (deps.pi) {
85
+ const qrAscii = renderQRAscii(qrUri);
86
+ deps.pi.sendMessage({
87
+ customType: "un-bien:pair-code",
88
+ content: `📱 Scan to pair:\n\n${qrAscii}\n` +
89
+ `📋 Or copy this pairing code (camera-less devices):\n\n${qrUri}`,
90
+ // Structured payload for RPC clients (e.g. Cockpit): render their own QR
91
+ // from `uri` + show the expiry, without scraping the display string.
92
+ details: { uri: qrUri, token, expiresAt, roomId, name: sessionName },
93
+ display: true,
94
+ });
95
+ }
96
+ ctx.ui.notify(`[un-bien] QR ready — valid until ${new Date(expiresAt).toLocaleTimeString()}. ` +
97
+ `Scan with the app, or copy the pairing code printed above.`, "info");
98
+ // Returns immediately; the auto-listener transitions to 'paired' on pair_request.
99
+ }
100
+ export async function _cmdRevoke(deps, arg, ctx) {
101
+ const shortid = arg.trim();
102
+ if (!shortid) {
103
+ ctx.ui.notify("[un-bien] Usage: /unbien revoke <shortid>. Run /unbien list to see shortids.", "warning");
104
+ return;
105
+ }
106
+ // Revoke needs the relay so the revoked device's live channel is torn down
107
+ // — not just a silent peers.json edit. Auto-bootstrap the mesh + relay when
108
+ // down, mirroring `_cmdPair`.
109
+ const cwd = "cwd" in ctx ? ctx.cwd : "";
110
+ if (deps.state === "idle") {
111
+ if (!localConfigExists(cwd)) {
112
+ ctx.ui.notify("[un-bien] First-time setup needed. Run /unbien to configure, then /unbien revoke.", "warning");
113
+ return;
114
+ }
115
+ ctx.ui.notify("[un-bien] Starting mesh + relay before revoking…", "info");
116
+ if (!deps.meshNode)
117
+ await _cmdJoin(deps, ctx);
118
+ if (deps.state === "idle")
119
+ await _cmdStart(deps, ctx);
120
+ }
121
+ if (deps.state === "idle" || !deps.relay) {
122
+ ctx.ui.notify("[un-bien] Revoke requires the relay to be connected. " +
123
+ "Run /unbien to start it (or fix your relay URL via /unbien set-relay).", "warning");
124
+ return;
125
+ }
126
+ const matches = (await listPeers())
127
+ .map(_inspectPeerRecord)
128
+ .filter((peer) => peer !== null)
129
+ .filter((peer) => peer.rawHandle.startsWith(shortid));
130
+ if (matches.length === 0) {
131
+ ctx.ui.notify("[un-bien] No peer matching that shortid. Run /unbien devices to see shortids.", "warning");
132
+ return;
133
+ }
134
+ if (matches.length > 1) {
135
+ const collisions = matches
136
+ .map((peer) => peer.rawHandle.slice(0, 8))
137
+ .join(", ");
138
+ ctx.ui.notify(`[un-bien] Ambiguous shortid — ${matches.length} matches: ${collisions}. Use mais chars.`, "warning");
139
+ return;
140
+ }
141
+ const peer = matches[0];
142
+ await removePeer(peer.rawHandle);
143
+ deps.refreshPairingsCache();
144
+ // Storage removal uses the exact saved representation; the active channel
145
+ // is indexed by its canonical identity.
146
+ if (peer.runtimeKey !== null && deps.activePeers.has(peer.runtimeKey)) {
147
+ deps.detachPeerChannel(peer.runtimeKey);
148
+ deps.refreshFooter();
149
+ }
150
+ ctx.ui.notify(`[un-bien] Revoked: ${peer.record.name} (${peer.rawHandle.slice(0, 8)}…)`, "info");
151
+ }
152
+ export async function _shortidCompletions(prefix, valuePrefix = "") {
153
+ const peers = (await listPeers())
154
+ .map(_inspectPeerRecord)
155
+ .filter((peer) => peer !== null);
156
+ return peers
157
+ .map((peer) => ({
158
+ shortid: peer.rawHandle.slice(0, 8),
159
+ name: peer.record.name,
160
+ }))
161
+ .filter((entry) => entry.shortid.startsWith(prefix))
162
+ .map((entry) => ({
163
+ value: `${valuePrefix}${entry.shortid}`,
164
+ label: `${entry.shortid} (${entry.name})`,
165
+ }));
166
+ }
167
+ //# sourceMappingURL=pairing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing.js","sourceRoot":"","sources":["../../src/commands/pairing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Registration of the whole `/unbien` slash-command surface: the flat
3
+ * `unbien` root command (sub-dispatch + argument completions) and the
4
+ * nested per-action registrations for the SDK's command palette.
5
+ *
6
+ * Moved verbatim from index.ts's extension factory (phase 1 of the
7
+ * index.ts carve-up); the only edits are the `deps.` threading of
8
+ * index.ts module state/helpers.
9
+ */
10
+ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
11
+ import type { CommandDeps } from "./deps.js";
12
+ export declare function registerUnbienCommands(pi: ExtensionAPI, deps: CommandDeps): void;
@@ -0,0 +1,255 @@
1
+ import { _cmdConfig, _cmdIdentity, _cmdList, _cmdPeers, _cmdStatus, } from "./info.js";
2
+ import { _cmdRoot, _cmdSetup, _cmdStop } from "./lifecycle.js";
3
+ import { _cmdBranch, _cmdFork, _cmdNewSession } from "./session_ops.js";
4
+ import { _cmdPair, _cmdRevoke, _shortidCompletions } from "./pairing.js";
5
+ import { _cmdRelay, _cmdSetRelay } from "./relay.js";
6
+ import { _cmdInstall, _cmdUninstall } from "./housekeeping.js";
7
+ export function registerUnbienCommands(pi, deps) {
8
+ // ── Commands ──────────────────────────────────────────────────────────────
9
+ //
10
+ // Final surface: 8 commands. Pre-2026-05-23 we had 20 commands covering
11
+ // multi-session UDS + granular relay control; in practice every install
12
+ // converged on one session and the relay was always either fully on or
13
+ // fully off. The simplified surface keeps the day-to-day path one-key
14
+ // (`/unbien`) and exposes only the actions that have distinct user
15
+ // intent: setup, status, stop, pair, devices, revoke, set-relay.
16
+ pi.registerCommand("unbien", {
17
+ description: "Connect (join local mesh + start relay), or run setup on first use",
18
+ getArgumentCompletions: async (prefix) => {
19
+ if (prefix.startsWith("revoke ") || prefix === "revoke") {
20
+ const shortPrefix = prefix === "revoke" ? "" : prefix.slice("revoke ".length);
21
+ return _shortidCompletions(shortPrefix, "revoke ");
22
+ }
23
+ return [
24
+ "setup",
25
+ "status",
26
+ "stop",
27
+ "pair",
28
+ "devices",
29
+ "revoke",
30
+ "rename",
31
+ "set-relay",
32
+ "relay",
33
+ "relay start",
34
+ "relay stop",
35
+ "relay status",
36
+ "relay url",
37
+ "config",
38
+ "identity",
39
+ "identity show",
40
+ "test", // hidden e2e UI harness (dev-only)
41
+ "peers", // plan/25 Wave D — local + cross-PC inventory
42
+ "create",
43
+ "remove",
44
+ "daemons", // daemon registry (plan/26 W1)
45
+ // Fleet ops use the `daemon` prefix so `/unbien stop` keeps
46
+ // meaning "stop this local Pi" — the local UX shipped in plan/25.
47
+ "daemon start",
48
+ "daemon stop",
49
+ "daemon restart",
50
+ "daemon send",
51
+ "daemon status",
52
+ "cron",
53
+ "cron add",
54
+ "cron list",
55
+ "cron remove",
56
+ "cron enable",
57
+ "cron disable",
58
+ "cron run",
59
+ "cron log",
60
+ "install",
61
+ "uninstall", // service install (plan/26 W3)
62
+ // Internal session ops (self-dispatched from the app's structured
63
+ // session_fork / session_navigate / new_session frames).
64
+ "fork",
65
+ "branch",
66
+ "new",
67
+ ]
68
+ .filter((o) => o.startsWith(prefix))
69
+ .map((o) => ({ value: o, label: o }));
70
+ },
71
+ handler: async (args, ctx) => {
72
+ const sub = args.trim();
73
+ if (sub === "") {
74
+ await _cmdRoot(deps, ctx);
75
+ }
76
+ else if (sub === "setup") {
77
+ await _cmdSetup(ctx);
78
+ }
79
+ else if (sub === "status") {
80
+ _cmdStatus(deps, ctx);
81
+ }
82
+ else if (sub === "stop") {
83
+ await _cmdStop(deps, ctx);
84
+ }
85
+ else if (sub === "pair" || sub.startsWith("pair ")) {
86
+ await _cmdPair(deps, ctx, sub.slice("pair".length).trim());
87
+ }
88
+ else if (sub === "devices") {
89
+ await _cmdList(deps, ctx);
90
+ }
91
+ else if (sub.startsWith("revoke")) {
92
+ await _cmdRevoke(deps, sub.slice("revoke".length).trim(), ctx);
93
+ }
94
+ else if (sub.startsWith("set-relay")) {
95
+ _cmdSetRelay(sub.slice("set-relay".length).trim(), ctx);
96
+ }
97
+ else if (sub === "relay" || sub.startsWith("relay ")) {
98
+ await _cmdRelay(deps, sub.slice("relay".length).trim(), ctx);
99
+ }
100
+ else if (sub === "config") {
101
+ _cmdConfig(deps, ctx);
102
+ }
103
+ else if (sub === "identity" || sub.startsWith("identity ")) {
104
+ await _cmdIdentity(ctx);
105
+ }
106
+ else if (sub === "test" || sub.startsWith("test ")) {
107
+ // Hidden dev-only e2e UI harness: broadcast canned frames to paired apps.
108
+ deps.safeNotify(`[un-bien test] ${deps.runTestScenario(sub.slice("test".length).trim())}`, "info", ctx);
109
+ }
110
+ else if (sub === "rename" || sub.startsWith("rename ")) {
111
+ await deps.renameAgent(sub.slice("rename".length).trim());
112
+ }
113
+ else if (sub === "peers") {
114
+ await _cmdPeers(deps, ctx);
115
+ }
116
+ else if (sub === "install") {
117
+ _cmdInstall(ctx, { linkCli: true });
118
+ }
119
+ else if (sub === "uninstall") {
120
+ _cmdUninstall(ctx, { linkCli: true });
121
+ }
122
+ else if (sub === "fork" || sub.startsWith("fork ")) {
123
+ await _cmdFork(deps, sub.slice("fork".length).trim(), ctx);
124
+ }
125
+ else if (sub === "branch" || sub.startsWith("branch ")) {
126
+ await _cmdBranch(deps, sub.slice("branch".length).trim(), ctx);
127
+ }
128
+ else if (sub === "new") {
129
+ await _cmdNewSession(deps, ctx);
130
+ }
131
+ else {
132
+ await _cmdRoot(deps, ctx);
133
+ }
134
+ },
135
+ });
136
+ // Nested registrations (one entry per public action). The flat handler
137
+ // above already routes `/unbien <sub>` — these exist for the SDK's
138
+ // command palette and slash-autocomplete in some UI modes.
139
+ pi.registerCommand("unbien setup", {
140
+ description: "Run the setup wizard and update local config",
141
+ handler: async (_, ctx) => {
142
+ await _cmdSetup(ctx);
143
+ },
144
+ });
145
+ pi.registerCommand("unbien status", {
146
+ description: "Show local mesh + relay status",
147
+ handler: async (_, ctx) => {
148
+ _cmdStatus(deps, ctx);
149
+ },
150
+ });
151
+ pi.registerCommand("unbien stop", {
152
+ description: "Stop everything (leave local mesh + disconnect relay)",
153
+ handler: async (_, ctx) => {
154
+ await _cmdStop(deps, ctx);
155
+ },
156
+ });
157
+ pi.registerCommand("unbien pair", {
158
+ description: "Show a QR code to pair a new mobile device (optional: --ttl <seconds>)",
159
+ handler: async (args, ctx) => {
160
+ await _cmdPair(deps, ctx, args.trim());
161
+ },
162
+ });
163
+ pi.registerCommand("unbien devices", {
164
+ description: "List paired mobile devices",
165
+ handler: async (_, ctx) => {
166
+ await _cmdList(deps, ctx);
167
+ },
168
+ });
169
+ pi.registerCommand("unbien rename", {
170
+ description: "Rename this agent in the current session (updates mesh + relay room)",
171
+ handler: async (args) => {
172
+ await deps.renameAgent(args.trim());
173
+ },
174
+ });
175
+ pi.registerCommand("unbien revoke", {
176
+ description: "Revoke a paired device by its shortid",
177
+ getArgumentCompletions: async (prefix) => _shortidCompletions(prefix),
178
+ handler: async (args, ctx) => {
179
+ await _cmdRevoke(deps, args.trim(), ctx);
180
+ },
181
+ });
182
+ pi.registerCommand("unbien set-relay", {
183
+ description: "Persist a new relay URL to user config",
184
+ handler: async (args, ctx) => {
185
+ _cmdSetRelay(args.trim(), ctx);
186
+ },
187
+ });
188
+ pi.registerCommand("unbien config", {
189
+ description: "Show the effective relay URL and where it came from",
190
+ handler: async (_, ctx) => {
191
+ _cmdConfig(deps, ctx);
192
+ },
193
+ });
194
+ pi.registerCommand("unbien identity", {
195
+ description: "Show this machine's identity: active EPK (public), backend, and source",
196
+ handler: async (_, ctx) => {
197
+ await _cmdIdentity(ctx);
198
+ },
199
+ });
200
+ pi.registerCommand("unbien identity show", {
201
+ description: "Show this machine's identity (EPK/backend/source) — alias of `identity`",
202
+ handler: async (_, ctx) => {
203
+ await _cmdIdentity(ctx);
204
+ },
205
+ });
206
+ pi.registerCommand("unbien relay", {
207
+ description: "Relay control: start | stop | status | url <http(s) url> (no arg toggles)",
208
+ handler: async (args, ctx) => {
209
+ await _cmdRelay(deps, args.trim(), ctx);
210
+ },
211
+ });
212
+ // Plan/25 Wave D
213
+ pi.registerCommand("unbien peers", {
214
+ description: "List local + cross-PC mesh peers, grouped by PC label",
215
+ handler: async (_, ctx) => {
216
+ await _cmdPeers(deps, ctx);
217
+ },
218
+ });
219
+ // Internal session ops. The app never surfaces these as slash commands — it
220
+ // sends the structured session_fork / session_navigate / new_session frame
221
+ // and the extension self-dispatches these to reach a command ctx (the only
222
+ // ctx carrying ctx.fork / ctx.navigateTree / ctx.newSession).
223
+ pi.registerCommand("unbien fork", {
224
+ description: "Fork a NEW session from a conversation entry (internal: session_fork)",
225
+ handler: async (args, ctx) => {
226
+ await _cmdFork(deps, args.trim(), ctx);
227
+ },
228
+ });
229
+ pi.registerCommand("unbien branch", {
230
+ description: "Branch in place from a conversation entry (internal: session_navigate)",
231
+ handler: async (args, ctx) => {
232
+ await _cmdBranch(deps, args.trim(), ctx);
233
+ },
234
+ });
235
+ pi.registerCommand("unbien new", {
236
+ description: "Start a fresh session (internal: new_session)",
237
+ handler: async (_, ctx) => {
238
+ await _cmdNewSession(deps, ctx);
239
+ },
240
+ });
241
+ // Service install / uninstall — the launcher daemon as a system service.
242
+ pi.registerCommand("unbien install", {
243
+ description: "Install the un-bien launcher daemon as a system service + link the un-bien CLI (systemd/launchd/Task Scheduler; Windows prompts for admin)",
244
+ handler: async (_, ctx) => {
245
+ _cmdInstall(ctx, { linkCli: true });
246
+ },
247
+ });
248
+ pi.registerCommand("unbien uninstall", {
249
+ description: "Remove the un-bien launcher daemon system service + the CLI shims (Windows prompts for admin)",
250
+ handler: async (_, ctx) => {
251
+ _cmdUninstall(ctx, { linkCli: true });
252
+ },
253
+ });
254
+ }
255
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `/unbien` relay control commands: set-relay (persist the URL) and the
3
+ * `relay [start|stop|status|url]` verb family (issue #119).
4
+ *
5
+ * The verbs map onto the same primitives the RPC control channel uses, so
6
+ * the slash command and the Cockpit button can't drift. Everything they
7
+ * need from index.ts's module scope comes through `CommandDeps` (see
8
+ * deps.ts). Carved out of index.ts (phase 1 of the index.ts carve-up).
9
+ */
10
+ import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
11
+ import type { CommandDeps } from "./deps.js";
12
+ export declare function _cmdSetRelay(arg: string, ctx: Pick<ExtensionContext, "ui">): void;
13
+ /**
14
+ * `/unbien relay [start|stop|status|url <url>]` — issue #119.
15
+ *
16
+ * The README has always documented this family (`relay url` to point at a
17
+ * self-hosted relay, `relay stop` + `relay start` to apply the change), but no
18
+ * handler existed: every `relay …` invocation fell through the `else` in the
19
+ * flat dispatcher and silently reprinted the status panel. Users following the
20
+ * README believed they had switched relays and stayed on the community relay —
21
+ * exactly the case where our own docs warn the operator sees routed plaintext.
22
+ *
23
+ * Verbs map onto the same primitives the RPC control channel already uses
24
+ * (`deps.handleControl`), so the slash command and the Cockpit button can't drift:
25
+ * relay-only up (`_cmdStart`) / relay-only down (`deps.goIdle`), never touching
26
+ * local-mesh membership — that stays `/unbien stop`'s job.
27
+ */
28
+ export declare function _cmdRelay(deps: CommandDeps, arg: string, ctx: ExtensionContext): Promise<void>;
@@ -0,0 +1,81 @@
1
+ import { isWebSocketScheme, isValidRelayUrl, saveConfig } from "../config.js";
2
+ import { _cmdStatus } from "./info.js";
3
+ import { _cmdStart } from "./lifecycle.js";
4
+ export function _cmdSetRelay(arg, ctx) {
5
+ const raw = arg.trim();
6
+ if (!raw) {
7
+ ctx.ui.notify("[un-bien] Usage: /unbien set-relay <http:// or https:// url>", "warning");
8
+ return;
9
+ }
10
+ if (isWebSocketScheme(raw)) {
11
+ ctx.ui.notify(`[un-bien] Use http:// or https://. The extension converts to WebSocket automatically.`, "error");
12
+ return;
13
+ }
14
+ if (!isValidRelayUrl(raw)) {
15
+ ctx.ui.notify(`[un-bien] Invalid URL: ${raw}. Must start with http:// or https://`, "error");
16
+ return;
17
+ }
18
+ saveConfig({ relay: raw });
19
+ ctx.ui.notify(`[un-bien] Relay set to ${raw}. Run /unbien relay stop then /unbien relay start to apply.`, "info");
20
+ }
21
+ /**
22
+ * `/unbien relay [start|stop|status|url <url>]` — issue #119.
23
+ *
24
+ * The README has always documented this family (`relay url` to point at a
25
+ * self-hosted relay, `relay stop` + `relay start` to apply the change), but no
26
+ * handler existed: every `relay …` invocation fell through the `else` in the
27
+ * flat dispatcher and silently reprinted the status panel. Users following the
28
+ * README believed they had switched relays and stayed on the community relay —
29
+ * exactly the case where our own docs warn the operator sees routed plaintext.
30
+ *
31
+ * Verbs map onto the same primitives the RPC control channel already uses
32
+ * (`deps.handleControl`), so the slash command and the Cockpit button can't drift:
33
+ * relay-only up (`_cmdStart`) / relay-only down (`deps.goIdle`), never touching
34
+ * local-mesh membership — that stays `/unbien stop`'s job.
35
+ */
36
+ export async function _cmdRelay(deps, arg, ctx) {
37
+ const raw = arg.trim();
38
+ const [verb, ...rest] = raw.split(/\s+/);
39
+ const value = rest.join(" ").trim();
40
+ switch (verb) {
41
+ case "":
42
+ case "toggle":
43
+ await deps.handleControl("relay:toggle");
44
+ ctx.ui.notify(`[un-bien] Relay ${deps.relayStatus()}.`, "info");
45
+ deps.refreshFooter(ctx);
46
+ return;
47
+ case "start":
48
+ case "on":
49
+ if (deps.getState() === "idle")
50
+ await _cmdStart(deps, ctx);
51
+ else
52
+ ctx.ui.notify(`[un-bien] Relay already ${deps.relayStatus()}.`, "info");
53
+ deps.emitRelayState(true);
54
+ return;
55
+ case "stop":
56
+ case "off":
57
+ if (deps.getState() === "idle") {
58
+ ctx.ui.notify("[un-bien] Relay already disconnected.", "info");
59
+ }
60
+ else {
61
+ deps.goIdle();
62
+ ctx.ui.notify("[un-bien] Relay disconnected (local mesh untouched).", "info");
63
+ }
64
+ deps.emitRelayState(true);
65
+ deps.refreshFooter(ctx);
66
+ return;
67
+ case "status":
68
+ _cmdStatus(deps, ctx);
69
+ deps.emitRelayState(true);
70
+ return;
71
+ case "url":
72
+ // Same writer as `set-relay` — one code path, so validation and the
73
+ // "restart to apply" hint can never diverge between the two spellings.
74
+ _cmdSetRelay(value, ctx);
75
+ return;
76
+ default:
77
+ ctx.ui.notify("[un-bien] Usage: /unbien relay [start|stop|status|url <http(s) url>]", "warning");
78
+ return;
79
+ }
80
+ }
81
+ //# sourceMappingURL=relay.js.map