@geohar/un-bien 0.16.0 → 0.18.2
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.
- package/dist/bin/launcher.js +22 -0
- package/dist/bin/launcher.js.map +1 -1
- package/dist/commands/deps.d.ts +6 -2
- package/dist/commands/lifecycle.js +5 -2
- package/dist/commands/lifecycle.js.map +1 -1
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/launcher/launcher.js +21 -1
- package/dist/launcher/launcher.js.map +1 -1
- package/dist/pairing/signed_allow_list.d.ts +20 -0
- package/dist/pairing/signed_allow_list.js +22 -0
- package/dist/pairing/signed_allow_list.js.map +1 -0
- package/dist/pairing/storage.d.ts +15 -0
- package/dist/pairing/storage.js +111 -0
- package/dist/pairing/storage.js.map +1 -1
- package/dist/session/relay_lifecycle.d.ts +13 -2
- package/dist/session/relay_lifecycle.js +41 -17
- package/dist/session/relay_lifecycle.js.map +1 -1
- package/dist/session/rpc_inbound.d.ts +27 -7
- package/dist/session/rpc_inbound.js +82 -10
- package/dist/session/rpc_inbound.js.map +1 -1
- package/dist/transport/relay_client.d.ts +2 -1
- package/dist/transport/relay_client.js +16 -3
- package/dist/transport/relay_client.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,14 +9,83 @@
|
|
|
9
9
|
// Command shapes: pi.dev/docs/latest/rpc. v1 surface = prompt / steer /
|
|
10
10
|
// follow_up / abort / set_model / set_thinking_level. get_state / get_entries /
|
|
11
11
|
// compact / bash follow (they need the fuller ctx.sessionManager).
|
|
12
|
-
/** Page budget for get_entries replies (design: get_entries backfill paging
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
|
|
12
|
+
/** Page budget for get_entries replies (design: get_entries backfill paging;
|
|
13
|
+
* raised 256 KiB → 1 MiB → 2 MiB after device testing, 2026-09-10).
|
|
14
|
+
* 2 MiB of entry JSON per page — 8× fewer round trips than the original,
|
|
15
|
+
* still wide margin under every cap: body ≈ 2 MiB + envelope overhead →
|
|
16
|
+
* ≈ 2.7 MiB base64 wire → decoded estimate ≈ 2 MiB, ~1.9 MiB UNDER the
|
|
17
|
+
* relay's 4 MiB ct cap (RELAY_MAX_CT_MIB) < the app's 8 MiB WS receive.
|
|
18
|
+
* A page carrying one MAX_ENTRY_JSON_BYTES (2 MiB) fitted entry alone also
|
|
19
|
+
* fits with the same margin. (The 500 KiB POST /mesh cap does NOT apply —
|
|
20
|
+
* pages ride the peer WS plane, not mesh.) Fold cost: the reader folds a
|
|
21
|
+
* page on its main actor; 2 MiB parses in ~5-10 ms — device-verified smooth.
|
|
22
|
+
* If refusals (payload_too_large) ever appear in logs, dial this back toward
|
|
23
|
+
* 1 MiB — the refusal frames make that visible now. This is chunking
|
|
24
|
+
* BEHAVIOR, not protocol — frames stay byte-faithful to pi's rpc
|
|
25
|
+
* (`success(id, "get_entries", { entries, leafId })`). */
|
|
26
|
+
export const GET_ENTRIES_PAGE_BUDGET_BYTES = 2 * 1024 * 1024;
|
|
27
|
+
/** Hard ceiling for a SINGLE entry's JSON (design: transport-fit paging). The
|
|
28
|
+
* at-least-one-entry progress rule means an entry beyond the relay's ct cap
|
|
29
|
+
* would ride alone, get refused payload_too_large, and stall the reader's
|
|
30
|
+
* walk on the same cursor FOREVER — one giant entry (a multi-MB tool result)
|
|
31
|
+
* poisoned the whole session's backfill. Fitted entries deep-truncate long
|
|
32
|
+
* strings (suffix marker) so shape + ids survive and the walk always crosses.
|
|
33
|
+
* 2 MiB JSON → ≈2.7 MiB base64 ≈ 2.7 MiB decoded estimate — half the relay
|
|
34
|
+
* cap, deliberately, so a page carrying one fitted entry still has margin. */
|
|
35
|
+
export const MAX_ENTRY_JSON_BYTES = 2 * 1024 * 1024;
|
|
36
|
+
const truncationMarker = (cut, total) => `…[transport-truncated ${total - cut}/${total} bytes]`;
|
|
37
|
+
function truncateStringsDeep(value, cap) {
|
|
38
|
+
if (typeof value === "string") {
|
|
39
|
+
return value.length > cap
|
|
40
|
+
? value.slice(0, cap) + truncationMarker(cap, value.length)
|
|
41
|
+
: value;
|
|
42
|
+
}
|
|
43
|
+
if (Array.isArray(value)) {
|
|
44
|
+
return value.map((v) => truncateStringsDeep(v, cap));
|
|
45
|
+
}
|
|
46
|
+
if (value && typeof value === "object") {
|
|
47
|
+
const out = {};
|
|
48
|
+
for (const [k, v] of Object.entries(value)) {
|
|
49
|
+
out[k] = truncateStringsDeep(v, cap);
|
|
50
|
+
}
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
/** Fit one entry for transport: unchanged when small enough; string-truncated
|
|
56
|
+
* (shrinking per-string caps across passes) when oversized; ultimate fallback
|
|
57
|
+
* is a minimal content-elided stub so the walk ALWAYS crosses this entry. */
|
|
58
|
+
export function fitEntryForTransport(entry) {
|
|
59
|
+
if (JSON.stringify(entry).length <= MAX_ENTRY_JSON_BYTES)
|
|
60
|
+
return entry;
|
|
61
|
+
for (const cap of [64 * 1024, 8 * 1024, 256]) {
|
|
62
|
+
// SAFETY: SessionEntry serializes to a JSON tree; the cast only moves it
|
|
63
|
+
// into the walker's domain type.
|
|
64
|
+
const fitted = truncateStringsDeep(entry, cap);
|
|
65
|
+
// SAFETY: the deep walk only replaces string LEAVES (same keys, same
|
|
66
|
+
// structure), so the result keeps SessionEntry's shape — TS can't prove
|
|
67
|
+
// that through the JsonTree round-trip.
|
|
68
|
+
const candidate = fitted;
|
|
69
|
+
if (JSON.stringify(candidate).length <= MAX_ENTRY_JSON_BYTES)
|
|
70
|
+
return candidate;
|
|
71
|
+
}
|
|
72
|
+
// SAFETY: hand-built to the message-entry shape; the cast papers over the
|
|
73
|
+
// pi union's narrower content typing.
|
|
74
|
+
return {
|
|
75
|
+
type: "message",
|
|
76
|
+
id: entry.id,
|
|
77
|
+
parentId: entry.parentId,
|
|
78
|
+
message: {
|
|
79
|
+
role: "assistant",
|
|
80
|
+
content: [
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
text: `[entry ${entry.id} exceeds the transport ceiling — content elided]`,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
20
89
|
/** Slice the entry log into one budget-bounded page starting AFTER `since`
|
|
21
90
|
* (undefined = from the start). Handlers pre-validate `since` pi-faithfully
|
|
22
91
|
* (unknown id → `Entry not found` error); this helper stays tolerant (an
|
|
@@ -38,8 +107,11 @@ export function pageEntries(all, since, leafId, budgetBytes = GET_ENTRIES_PAGE_B
|
|
|
38
107
|
const page = [];
|
|
39
108
|
let used = 0;
|
|
40
109
|
for (const e of remaining) {
|
|
41
|
-
|
|
42
|
-
|
|
110
|
+
// Transport-fit FIRST: an oversized entry must never ride raw (it would be
|
|
111
|
+
// refused and stall the walk); budget accounting uses the FITTED size.
|
|
112
|
+
const fitted = fitEntryForTransport(e);
|
|
113
|
+
page.push(fitted);
|
|
114
|
+
used += JSON.stringify(fitted).length;
|
|
43
115
|
if (used >= budgetBytes)
|
|
44
116
|
break;
|
|
45
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc_inbound.js","sourceRoot":"","sources":["../../src/session/rpc_inbound.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,8EAA8E;AAC9E,8CAA8C;AAC9C,EAAE;AACF,wEAAwE;AACxE,gFAAgF;AAChF,mEAAmE;AAgBnE
|
|
1
|
+
{"version":3,"file":"rpc_inbound.js","sourceRoot":"","sources":["../../src/session/rpc_inbound.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,8 @@ export interface RoomMetaUpdateFrame {
|
|
|
45
45
|
* to list this machine's rooms. Full-set replace on connect + every change. */
|
|
46
46
|
export interface PairingSetFrame {
|
|
47
47
|
type: "pairing_set";
|
|
48
|
-
|
|
48
|
+
blob: string;
|
|
49
|
+
sig: string;
|
|
49
50
|
}
|
|
50
51
|
export interface ConnectOptions {
|
|
51
52
|
roomId?: string;
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
2
|
import WebSocket from "ws";
|
|
3
3
|
import { ed25519Sign } from "../pairing/crypto.js";
|
|
4
|
+
import { envLog } from "../session/debug_log.js";
|
|
4
5
|
const AUTH_TIMEOUT_MS = 5_000;
|
|
6
|
+
/** Inbound frame cap for the `ws` socket — PINNED, not the lib's 100 MiB
|
|
7
|
+
* default: aligned with the relay's WS message limit (64 MiB). The largest
|
|
8
|
+
* LEGAL frame is a max-ct envelope ≈ 5.4 MiB, so this is pure headroom that
|
|
9
|
+
* can't drift with a `ws` upgrade. */
|
|
10
|
+
const MAX_WS_PAYLOAD_BYTES = 64 * 1024 * 1024;
|
|
5
11
|
/**
|
|
6
12
|
* Liveness watchdog. The relay sends a WS Ping every ~25s (relay `peer.rs`),
|
|
7
13
|
* so a healthy connection sees inbound frames at least that often. If NOTHING
|
|
@@ -67,7 +73,7 @@ export class RelayClient extends EventEmitter {
|
|
|
67
73
|
*/
|
|
68
74
|
async connect(options = {}) {
|
|
69
75
|
return new Promise((resolve, reject) => {
|
|
70
|
-
const ws = new WebSocket(this.url);
|
|
76
|
+
const ws = new WebSocket(this.url, { maxPayload: MAX_WS_PAYLOAD_BYTES });
|
|
71
77
|
this.ws = ws;
|
|
72
78
|
ws.on("error", (err) => reject(err));
|
|
73
79
|
ws.on("open", async () => {
|
|
@@ -82,8 +88,15 @@ export class RelayClient extends EventEmitter {
|
|
|
82
88
|
const text = Buffer.isBuffer(raw) ? raw.toString() : String(raw);
|
|
83
89
|
for (const line of text.split("\n")) {
|
|
84
90
|
const trimmed = line.trim();
|
|
85
|
-
if (trimmed)
|
|
86
|
-
|
|
91
|
+
if (!trimmed)
|
|
92
|
+
continue;
|
|
93
|
+
// Relay refusal (payload_too_large / invalid_envelope / unknown_peer):
|
|
94
|
+
// surface in the envelope debug log so an oversized send is VISIBLE
|
|
95
|
+
// instead of the message silently vanishing (silent-drop fix).
|
|
96
|
+
if (trimmed.startsWith('{"type":"error"')) {
|
|
97
|
+
envLog(`relay error frame: ${trimmed}`);
|
|
98
|
+
}
|
|
99
|
+
this.emit("message", trimmed);
|
|
87
100
|
}
|
|
88
101
|
});
|
|
89
102
|
// The relay pings every ~25s; `ws` auto-replies Pong (keeping the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay_client.js","sourceRoot":"","sources":["../../src/transport/relay_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"relay_client.js","sourceRoot":"","sources":["../../src/transport/relay_client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,SAAS,MAAM,IAAI,CAAA;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEhD,MAAM,eAAe,GAAG,KAAK,CAAA;AAE7B;;;uCAGuC;AACvC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAA;AAE7C;;;;;;;;GAQG;AACH,MAAM,mBAAmB,GAAG,MAAM,CAAA,CAAC,6CAA6C;AAChF,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAiFhC,iFAAiF;AACjF,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACjB;IAA5B,YAA4B,MAA0B;QACpD,KAAK,CACH,MAAM;YACJ,CAAC,CAAC,8BAA8B,MAAM,6BAA6B;YACnE,CAAC,CAAC,8CAA8C,CACnD,CAAA;QALyB,WAAM,GAAN,MAAM,CAAoB;QAMpD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;IACpC,CAAC;CACF;AASD;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,WAAY,SAAQ,YAAY;IAOxB;IACA;IAPX,EAAE,GAAqB,IAAI,CAAA;IACnC,wEAAwE;IAChE,cAAc,GAAG,CAAC,CAAA;IAClB,aAAa,GAA0C,IAAI,CAAA;IAEnE,YACmB,GAAW,EACX,OAAuB;QAExC,KAAK,EAAE,CAAA;QAHU,QAAG,GAAH,GAAG,CAAQ;QACX,YAAO,GAAP,OAAO,CAAgB;IAG1C,CAAC;IAED,+EAA+E;IAE/E;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,OAAO,CAAC,UAA0B,EAAE;QACxC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAA;YACxE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;YAEZ,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAEpC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;gBACvB,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;oBAErC,mEAAmE;oBACnE,mEAAmE;oBACnE,kBAAkB;oBAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;oBAChC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;wBACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;wBAChC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;wBAChE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;4BACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;4BAC3B,IAAI,CAAC,OAAO;gCAAE,SAAQ;4BACtB,uEAAuE;4BACvE,oEAAoE;4BACpE,+DAA+D;4BAC/D,IAAI,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;gCAC1C,MAAM,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAA;4BACzC,CAAC;4BACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;wBAC/B,CAAC;oBACH,CAAC,CAAC,CAAA;oBACF,kEAAkE;oBAClE,mEAAmE;oBACnE,qEAAqE;oBACrE,6BAA6B;oBAC7B,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;wBACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;oBAClC,CAAC,CAAC,CAAA;oBACF,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;wBACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;oBAClC,CAAC,CAAC,CAAA;oBAEF,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;wBAClB,IAAI,CAAC,aAAa,EAAE,CAAA;wBACpB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACpB,CAAC,CAAC,CAAA;oBACF,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;oBACvB,OAAO,EAAE,CAAA;gBACX,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,EAAE,CAAC,SAAS,EAAE,CAAA;oBACd,MAAM,CAAC,GAAG,CAAC,CAAA;gBACb,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,2EAA2E;IAC3E,MAAM;QACJ,OAAO,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,CAAA;IAC/C,CAAC;IAED;;;oEAGgE;IAChE,IAAI,CAAC,IAAY,EAAE,SAAiC;QAClD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QACzC,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;IAC/B,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,KAA4C;QACtD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI;YAAE,OAAM;QAC7D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IACrC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,aAAa,EAAE,CAAA;QACpB,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAA;QAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;IAChB,CAAC;IAED,6EAA6E;IAE7E;;iEAE6D;IACrD,cAAc,CAAC,EAAa;QAClC,IAAI,CAAC,aAAa,EAAE,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;YACpC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,GAAG,mBAAmB,EAAE,CAAC;gBAC3D,IAAI,CAAC,aAAa,EAAE,CAAA;gBACpB,EAAE,CAAC,SAAS,EAAE,CAAA;YAChB,CAAC;QACH,CAAC,EAAE,iBAAiB,CAAC,CAAA;IACvB,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAC3B,CAAC;IACH,CAAC;IAED,+EAA+E;IAEvE,KAAK,CAAC,aAAa,CACzB,EAAa,EACb,IAAoB;QAEpB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACxE,MAAM,KAAK,GAAa,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;QAC5D,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAA;QAC5C,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAA;QAClD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QAExC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QAC5C,IAAI,SAC+D,CAAA;QACnE,IAAI,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAqB,CAAA;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAA;QACjE,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAI,SAA+B,CAAC,IAAI,IAAI,EAAE,CAAA;YACxD,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACjC,MAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC7C,CAAC;YACD,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,IAAK,SAAkC,CAAC,OAAO,IAAI,SAAS,EAAE,CAC5F,CAAA;QACH,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,WAAW,IAAI,CAAE,SAA0B,CAAC,KAAK,EAAE,CAAC;YACzE,MAAM,IAAI,KAAK,CACb,8CAA8C,YAAY,EAAE,CAC7D,CAAA;QACH,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAE,SAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACtE,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACtD,MAAM,IAAI,GAAY;YACpB,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACzC,CAAA;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAA;QAEvC,mEAAmE;QACnE,0CAA0C;IAC5C,CAAC;IAED,2DAA2D;IACnD,QAAQ,CAAC,EAAa;QAC5B,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAC7C,eAAe,CAChB,CAAA;YACD,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;gBACzB,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAC9D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,QAAQ,CAAC,EAAa,EAAE,IAAY;QAC1C,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geohar/un-bien",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.2",
|
|
4
4
|
"description": "Mobile remote control and local agent mesh for the Pi coding agent. Pair your phone via QR over a relay, watch tool calls in real time, run multi-Pi sessions over a local Unix Domain Socket broker, and let agents talk to each other through structured request/reply. Derived from remote-pi by Jacob Moura (https://github.com/jacobaraujo7/remote_pi), MIT.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|