@geohar/un-bien 0.8.0 → 0.14.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 (175) hide show
  1. package/README.md +258 -320
  2. package/dist/actions/handlers.js.map +1 -1
  3. package/dist/actions/registry.js.map +1 -1
  4. package/dist/bin/launcher.js +38 -0
  5. package/dist/bin/launcher.js.map +1 -0
  6. package/dist/commands/deps.d.ts +156 -0
  7. package/dist/commands/deps.js +2 -0
  8. package/dist/commands/deps.js.map +1 -0
  9. package/dist/commands/fork_link.d.ts +4 -0
  10. package/dist/commands/fork_link.js +45 -0
  11. package/dist/commands/fork_link.js.map +1 -0
  12. package/dist/commands/housekeeping.d.ts +34 -0
  13. package/dist/commands/housekeeping.js +275 -0
  14. package/dist/commands/housekeeping.js.map +1 -0
  15. package/dist/commands/info.d.ts +43 -0
  16. package/dist/commands/info.js +127 -0
  17. package/dist/commands/info.js.map +1 -0
  18. package/dist/commands/lifecycle.d.ts +45 -0
  19. package/dist/commands/lifecycle.js +708 -0
  20. package/dist/commands/lifecycle.js.map +1 -0
  21. package/dist/commands/pairing.d.ts +26 -0
  22. package/dist/commands/pairing.js +167 -0
  23. package/dist/commands/pairing.js.map +1 -0
  24. package/dist/commands/register.d.ts +12 -0
  25. package/dist/commands/register.js +255 -0
  26. package/dist/commands/register.js.map +1 -0
  27. package/dist/commands/relay.d.ts +28 -0
  28. package/dist/commands/relay.js +81 -0
  29. package/dist/commands/relay.js.map +1 -0
  30. package/dist/commands/session_ops.d.ts +52 -0
  31. package/dist/commands/session_ops.js +75 -0
  32. package/dist/commands/session_ops.js.map +1 -0
  33. package/dist/config.d.ts +30 -2
  34. package/dist/config.js.map +1 -1
  35. package/dist/daemon/install.d.ts +36 -37
  36. package/dist/daemon/install.js +49 -73
  37. package/dist/daemon/install.js.map +1 -1
  38. package/dist/enrich_tool_args.d.ts +9 -0
  39. package/dist/enrich_tool_args.js +171 -0
  40. package/dist/enrich_tool_args.js.map +1 -0
  41. package/dist/extension_ui_bridge.js.map +1 -1
  42. package/dist/image_codec.d.ts +22 -0
  43. package/dist/image_codec.js +149 -0
  44. package/dist/image_codec.js.map +1 -0
  45. package/dist/index.d.ts +32 -127
  46. package/dist/index.js +957 -4042
  47. package/dist/index.js.map +1 -1
  48. package/dist/launch.d.ts +42 -0
  49. package/dist/launch.js +206 -0
  50. package/dist/launch.js.map +1 -0
  51. package/dist/launcher/launcher.d.ts +6 -0
  52. package/dist/launcher/launcher.js +207 -0
  53. package/dist/launcher/launcher.js.map +1 -0
  54. package/dist/mcp/mesh_result.js.map +1 -1
  55. package/dist/mcp/mesh_server.js.map +1 -1
  56. package/dist/mesh/canonical.js +1 -1
  57. package/dist/mesh/canonical.js.map +1 -1
  58. package/dist/mesh/client.js.map +1 -1
  59. package/dist/mesh/encoding.js.map +1 -1
  60. package/dist/mesh/self_revoke.js.map +1 -1
  61. package/dist/mesh/siblings.js.map +1 -1
  62. package/dist/mesh/verify.js +1 -1
  63. package/dist/mesh/verify.js.map +1 -1
  64. package/dist/pairing/crypto.js +0 -1
  65. package/dist/pairing/crypto.js.map +1 -1
  66. package/dist/pairing/peer_trust.d.ts +20 -0
  67. package/dist/pairing/peer_trust.js +82 -0
  68. package/dist/pairing/peer_trust.js.map +1 -0
  69. package/dist/pairing/qr.js.map +1 -1
  70. package/dist/pairing/storage.js +4 -3
  71. package/dist/pairing/storage.js.map +1 -1
  72. package/dist/panel_bridge.d.ts +3 -1
  73. package/dist/panel_bridge.js +11 -10
  74. package/dist/panel_bridge.js.map +1 -1
  75. package/dist/paths.d.ts +22 -8
  76. package/dist/paths.js +37 -10
  77. package/dist/paths.js.map +1 -1
  78. package/dist/protocol/codec.js.map +1 -1
  79. package/dist/rooms.d.ts +16 -0
  80. package/dist/rooms.js +23 -4
  81. package/dist/rooms.js.map +1 -1
  82. package/dist/session/bridge.js.map +1 -1
  83. package/dist/session/broker.js.map +1 -1
  84. package/dist/session/broker_remote.js.map +1 -1
  85. package/dist/session/capabilities.d.ts +11 -0
  86. package/dist/session/capabilities.js +35 -0
  87. package/dist/session/capabilities.js.map +1 -0
  88. package/dist/session/cwd_lock.js +3 -3
  89. package/dist/session/cwd_lock.js.map +1 -1
  90. package/dist/session/debug_log.js +15 -5
  91. package/dist/session/debug_log.js.map +1 -1
  92. package/dist/session/envelope.js.map +1 -1
  93. package/dist/session/global_config.d.ts +1 -1
  94. package/dist/session/global_config.js +1 -1
  95. package/dist/session/global_config.js.map +1 -1
  96. package/dist/session/ipc.d.ts +2 -2
  97. package/dist/session/ipc.js.map +1 -1
  98. package/dist/session/leader_election.js.map +1 -1
  99. package/dist/session/local_config.d.ts +37 -0
  100. package/dist/session/local_config.js +47 -1
  101. package/dist/session/local_config.js.map +1 -1
  102. package/dist/session/mesh_node.d.ts +1 -1
  103. package/dist/session/mesh_node.js +1 -1
  104. package/dist/session/mesh_node.js.map +1 -1
  105. package/dist/session/peer.js.map +1 -1
  106. package/dist/session/peer_inventory.js.map +1 -1
  107. package/dist/session/peer_limits.js.map +1 -1
  108. package/dist/session/received_images.d.ts +63 -0
  109. package/dist/session/received_images.js +273 -0
  110. package/dist/session/received_images.js.map +1 -0
  111. package/dist/session/relay_lifecycle.d.ts +219 -0
  112. package/dist/session/relay_lifecycle.js +764 -0
  113. package/dist/session/relay_lifecycle.js.map +1 -0
  114. package/dist/session/rpc_envelope.d.ts +28 -0
  115. package/dist/session/rpc_envelope.js +10 -1
  116. package/dist/session/rpc_envelope.js.map +1 -1
  117. package/dist/session/rpc_handlers.d.ts +53 -0
  118. package/dist/session/rpc_handlers.js +268 -0
  119. package/dist/session/rpc_handlers.js.map +1 -0
  120. package/dist/session/rpc_inbound.d.ts +42 -7
  121. package/dist/session/rpc_inbound.js +56 -1
  122. package/dist/session/rpc_inbound.js.map +1 -1
  123. package/dist/session/setup_wizard.js.map +1 -1
  124. package/dist/session/tools.js.map +1 -1
  125. package/dist/session/wizard.js.map +1 -1
  126. package/dist/state_migration.d.ts +45 -0
  127. package/dist/state_migration.js +104 -0
  128. package/dist/state_migration.js.map +1 -0
  129. package/dist/subagent_rooms.d.ts +68 -0
  130. package/dist/subagent_rooms.js +919 -0
  131. package/dist/subagent_rooms.js.map +1 -0
  132. package/dist/test_hooks.d.ts +180 -0
  133. package/dist/test_hooks.js +98 -0
  134. package/dist/test_hooks.js.map +1 -0
  135. package/dist/transport/peer_channel.d.ts +18 -1
  136. package/dist/transport/peer_channel.js +42 -12
  137. package/dist/transport/peer_channel.js.map +1 -1
  138. package/dist/transport/pi_forward_client.js.map +1 -1
  139. package/dist/transport/relay_client.d.ts +24 -2
  140. package/dist/transport/relay_client.js +6 -3
  141. package/dist/transport/relay_client.js.map +1 -1
  142. package/dist/ui/footer.js.map +1 -1
  143. package/docs/daemon.md +170 -179
  144. package/package.json +13 -11
  145. package/service-templates/launchd.plist.template +8 -7
  146. package/service-templates/systemd.service.template +5 -4
  147. package/service-templates/task-launcher.vbs.template +5 -5
  148. package/service-templates/task-scheduler.xml.template +1 -1
  149. package/dist/bin/supervisord.js +0 -86
  150. package/dist/bin/supervisord.js.map +0 -1
  151. package/dist/daemon/client.d.ts +0 -20
  152. package/dist/daemon/client.js +0 -131
  153. package/dist/daemon/client.js.map +0 -1
  154. package/dist/daemon/control_protocol.d.ts +0 -176
  155. package/dist/daemon/control_protocol.js +0 -63
  156. package/dist/daemon/control_protocol.js.map +0 -1
  157. package/dist/daemon/cron_log.d.ts +0 -45
  158. package/dist/daemon/cron_log.js +0 -71
  159. package/dist/daemon/cron_log.js.map +0 -1
  160. package/dist/daemon/cron_registry.d.ts +0 -80
  161. package/dist/daemon/cron_registry.js +0 -198
  162. package/dist/daemon/cron_registry.js.map +0 -1
  163. package/dist/daemon/id.d.ts +0 -24
  164. package/dist/daemon/id.js +0 -36
  165. package/dist/daemon/id.js.map +0 -1
  166. package/dist/daemon/registry.d.ts +0 -63
  167. package/dist/daemon/registry.js +0 -153
  168. package/dist/daemon/registry.js.map +0 -1
  169. package/dist/daemon/rpc_child.d.ts +0 -194
  170. package/dist/daemon/rpc_child.js +0 -419
  171. package/dist/daemon/rpc_child.js.map +0 -1
  172. package/dist/daemon/supervisor.d.ts +0 -93
  173. package/dist/daemon/supervisor.js +0 -666
  174. package/dist/daemon/supervisor.js.map +0 -1
  175. /package/dist/bin/{supervisord.d.ts → launcher.d.ts} +0 -0
@@ -0,0 +1,127 @@
1
+ import { resolveRelayUrl } from "../config.js";
2
+ import { describeIdentity, listPeers } from "../pairing/storage.js";
3
+ import { _inspectPeerRecord } from "../pairing/peer_trust.js";
4
+ import { formatPeerInventory } from "../session/peer_inventory.js";
5
+ /**
6
+ * `/unbien status` — full state snapshot. Two lines: local mesh + relay.
7
+ *
8
+ * Always callable; safe when nothing is up (renders the off variants).
9
+ * Reuses the same icons as the footer so terminal + status output stay
10
+ * visually consistent.
11
+ */
12
+ export function _cmdStatus(deps, ctx) {
13
+ const relayUrl = deps.relayUrl ?? resolveRelayUrl().url ?? "not configured";
14
+ // Mesh line
15
+ let meshLine;
16
+ if (deps.meshNode) {
17
+ const name = deps.meshNode.name();
18
+ meshLine = `🟢 Local mesh: connected as "${name}" (${deps.sessionPeerCount} peer${deps.sessionPeerCount === 1 ? "" : "s"})`;
19
+ }
20
+ else {
21
+ meshLine = "⚪ Local mesh: not connected";
22
+ }
23
+ // Relay line — paired state is derived from deps.activePeers.size now.
24
+ let relayLine;
25
+ if (deps.state === "idle") {
26
+ relayLine = `⚪ Relay: off (${relayUrl}) — run /unbien to start`;
27
+ }
28
+ else if (deps.activePeers.size > 0) {
29
+ const count = deps.activePeers.size;
30
+ const shortids = [...deps.activePeers.keys()]
31
+ .map((peerId) => peerId.slice(0, 8))
32
+ .join(", ");
33
+ relayLine = `🟢 Relay: ${count} owner${count === 1 ? "" : "s"} online (${shortids}) (${relayUrl})`;
34
+ }
35
+ else {
36
+ relayLine = deps.hasGlobalPairings
37
+ ? `🟢 Relay: on, waiting for an app to connect (${relayUrl})`
38
+ : `🟡 Relay: on, waiting for first pairing (${relayUrl})`;
39
+ }
40
+ ctx.ui.notify(`[un-bien]\n ${meshLine}\n ${relayLine}`, "info");
41
+ }
42
+ /**
43
+ * Plan/25 Wave D: `/unbien peers`.
44
+ *
45
+ * Queries the local broker for the aggregated peer inventory (`list_peers`
46
+ * returns locals + cross-PC entries prefixed with `<pc_label>:`). Formats
47
+ * the result grouped by source so users can see at a glance who's on
48
+ * their machine vs. on a paired sibling Pi.
49
+ */
50
+ export async function _cmdPeers(deps, ctx) {
51
+ if (!deps.meshNode) {
52
+ ctx.ui.notify("[un-bien] Not on the local mesh. Run /unbien to join.", "warning");
53
+ return;
54
+ }
55
+ let peers;
56
+ try {
57
+ const reply = await deps.meshNode.request("broker", { type: "list_peers" }, 2000);
58
+ peers = reply.body?.peers ?? [];
59
+ }
60
+ catch (err) {
61
+ ctx.ui.notify(`[un-bien] peers list failed: ${String(err)}`, "error");
62
+ return;
63
+ }
64
+ // Exclude self from the printed list — `list_peers` returns every peer
65
+ // registered with the broker including the caller, which is noise here.
66
+ const selfName = deps.meshNode.name();
67
+ ctx.ui.notify(`[un-bien] peers:\n${formatPeerInventory(peers, selfName)}`, "info");
68
+ }
69
+ export async function _cmdList(deps, ctx) {
70
+ const peers = await listPeers();
71
+ if (peers.length === 0) {
72
+ ctx.ui.notify("[un-bien] No paired devices.", "info");
73
+ return;
74
+ }
75
+ // Multi-channel (W2D): each peer is either `online` (channel attached
76
+ // right now) or `offline` (in peers.json but not connected). Replaces
77
+ // the singleton " (active)" marker that only ever marked one peer.
78
+ const lines = peers
79
+ .flatMap((record) => {
80
+ const inspected = _inspectPeerRecord(record);
81
+ if (!inspected)
82
+ return [];
83
+ const tag = inspected.runtimeKey !== null &&
84
+ deps.activePeers.has(inspected.runtimeKey)
85
+ ? " 🟢 online"
86
+ : " ⚪ offline";
87
+ return `• ${inspected.rawHandle.slice(0, 8)} — ${inspected.record.name}${tag}`;
88
+ })
89
+ .join("\n");
90
+ ctx.ui.notify(`[un-bien] Paired devices:\n${lines}`, "info");
91
+ }
92
+ /**
93
+ * `/unbien config` — print the effective relay URL and where it came from.
94
+ *
95
+ * Documented in the README ("Verify the active URL and its source") and in
96
+ * CLAUDE.md, but like the `relay` family (issue #119) it had no handler and
97
+ * fell through to the status panel, which shows the URL but not the source —
98
+ * so `env` vs `config` vs `default` was unverifiable without a restart.
99
+ */
100
+ export function _cmdConfig(deps, ctx) {
101
+ const { url, source } = resolveRelayUrl();
102
+ const origin = source === "env"
103
+ ? "UNBIEN_RELAY environment variable"
104
+ : source === "config"
105
+ ? "extensions/un-bien.json (set via /unbien set-relay)"
106
+ : "not set — run /unbien set-relay <url> or set UNBIEN_RELAY";
107
+ const live = deps.relayUrl && deps.relayUrl !== url
108
+ ? `\n ⚠ Live connection still on ${deps.relayUrl} — run /unbien relay stop then /unbien relay start to apply.`
109
+ : "";
110
+ ctx.ui.notify(`[un-bien]\n Relay URL: ${url ?? "(none)"}\n Source: ${source} — ${origin}${live}`, "info");
111
+ }
112
+ /**
113
+ * `/unbien identity` — report NON-SECRET identity state (active EPK, backend,
114
+ * resolved source). The private seed is NEVER shown: command output is
115
+ * LLM-visible, so extraction stays a manual `cat`/keychain op. Read-only
116
+ * (never mints).
117
+ */
118
+ export async function _cmdIdentity(ctx) {
119
+ const info = await describeIdentity();
120
+ const backendLine = info.backend === "file" ? `file (${info.filePath})` : "keychain";
121
+ const epkLine = info.epk ?? "(none yet — minted on first use)";
122
+ const sourceLine = info.detail
123
+ ? `${info.source} — ${info.detail}`
124
+ : info.source;
125
+ ctx.ui.notify(`[un-bien] identity\n Backend: ${backendLine}\n EPK (public): ${epkLine}\n Source: ${sourceLine}`, info.source === "error" ? "error" : "info");
126
+ }
127
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * `/unbien` lifecycle commands: root (connect-or-setup), rootInner, setup
3
+ * wizard, start (relay), stop (teardown), join (local UDS mesh).
4
+ *
5
+ * The heaviest handler lives here: `_cmdStart` touches relay startup, the
6
+ * auto-listener, SelfRevoke topology production, and the first-run model/
7
+ * thinking seeding. Everything it needs from index.ts's module scope comes
8
+ * through `CommandDeps` (see deps.ts). Carved out of index.ts (phase 1 of
9
+ * the index.ts carve-up).
10
+ */
11
+ import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
12
+ import type { CommandDeps } from "./deps.js";
13
+ export type RootRestartAuthority = Readonly<{
14
+ rootLifecycleGeneration: number;
15
+ }>;
16
+ /**
17
+ * Root handler for `/unbien`. On first run (no local config) drops into
18
+ * the wizard; on subsequent runs auto-joins the local mesh + starts the
19
+ * relay (if opted in during setup), then prints the status.
20
+ *
21
+ * `/unbien` is intentionally the only command users need day-to-day:
22
+ * idempotent connect + status display.
23
+ */
24
+ export declare function _cmdRoot(deps: CommandDeps, ctx: Pick<ExtensionContext, "ui" | "cwd">, restartAuthority?: RootRestartAuthority): Promise<void>;
25
+ export declare function _cmdRootInner(deps: CommandDeps, ctx: Pick<ExtensionContext, "ui" | "cwd">, rootLifecycleGeneration: number): Promise<void>;
26
+ /**
27
+ * `/unbien setup` — re-run the wizard. Defaults pre-fill from the
28
+ * existing config so it doubles as an "edit" flow.
29
+ */
30
+ export declare function _cmdSetup(ctx: Pick<ExtensionContext, "ui" | "cwd">): Promise<void>;
31
+ export declare function _cmdStart(deps: CommandDeps, ctx: Pick<ExtensionContext, "ui" | "cwd">): Promise<void>;
32
+ /**
33
+ * `/unbien stop` — full teardown. Leaves the local UDS mesh AND closes
34
+ * the relay. Safe when one or both are already off. To resume, run
35
+ * `/unbien` again.
36
+ */
37
+ export declare function _cmdStop(deps: CommandDeps, ctx: Pick<ExtensionContext, "ui">): Promise<void>;
38
+ /**
39
+ * Joins the fixed local UDS mesh ("local" session — see LOCAL_SESSION_NAME).
40
+ * Called by `_cmdRoot` on first run and on subsequent runs when the relay
41
+ * is up and the user hasn't explicitly stopped. The session name is no
42
+ * longer user-configurable: every Pi on the same machine joins the same
43
+ * broker.
44
+ */
45
+ export declare function _cmdJoin(deps: CommandDeps, ctx: Pick<ExtensionContext, "ui" | "cwd">): Promise<void>;