@geohar/un-bien 0.7.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.
- package/LICENSE +21 -0
- package/README.md +726 -0
- package/dist/actions/handlers.d.ts +77 -0
- package/dist/actions/handlers.js +26 -0
- package/dist/actions/handlers.js.map +1 -0
- package/dist/actions/registry.d.ts +39 -0
- package/dist/actions/registry.js +62 -0
- package/dist/actions/registry.js.map +1 -0
- package/dist/bin/supervisord.d.ts +2 -0
- package/dist/bin/supervisord.js +86 -0
- package/dist/bin/supervisord.js.map +1 -0
- package/dist/config.d.ts +84 -0
- package/dist/config.js +115 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon/client.d.ts +20 -0
- package/dist/daemon/client.js +131 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/control_protocol.d.ts +176 -0
- package/dist/daemon/control_protocol.js +63 -0
- package/dist/daemon/control_protocol.js.map +1 -0
- package/dist/daemon/cron_log.d.ts +45 -0
- package/dist/daemon/cron_log.js +71 -0
- package/dist/daemon/cron_log.js.map +1 -0
- package/dist/daemon/cron_registry.d.ts +80 -0
- package/dist/daemon/cron_registry.js +198 -0
- package/dist/daemon/cron_registry.js.map +1 -0
- package/dist/daemon/id.d.ts +24 -0
- package/dist/daemon/id.js +36 -0
- package/dist/daemon/id.js.map +1 -0
- package/dist/daemon/install.d.ts +170 -0
- package/dist/daemon/install.js +603 -0
- package/dist/daemon/install.js.map +1 -0
- package/dist/daemon/registry.d.ts +63 -0
- package/dist/daemon/registry.js +153 -0
- package/dist/daemon/registry.js.map +1 -0
- package/dist/daemon/rpc_child.d.ts +194 -0
- package/dist/daemon/rpc_child.js +419 -0
- package/dist/daemon/rpc_child.js.map +1 -0
- package/dist/daemon/supervisor.d.ts +93 -0
- package/dist/daemon/supervisor.js +666 -0
- package/dist/daemon/supervisor.js.map +1 -0
- package/dist/extension_ui_bridge.d.ts +26 -0
- package/dist/extension_ui_bridge.js +341 -0
- package/dist/extension_ui_bridge.js.map +1 -0
- package/dist/index.d.ts +197 -0
- package/dist/index.js +5750 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/mesh_result.d.ts +10 -0
- package/dist/mcp/mesh_result.js +42 -0
- package/dist/mcp/mesh_result.js.map +1 -0
- package/dist/mcp/mesh_server.d.ts +16 -0
- package/dist/mcp/mesh_server.js +373 -0
- package/dist/mcp/mesh_server.js.map +1 -0
- package/dist/mesh/canonical.d.ts +30 -0
- package/dist/mesh/canonical.js +63 -0
- package/dist/mesh/canonical.js.map +1 -0
- package/dist/mesh/client.d.ts +18 -0
- package/dist/mesh/client.js +127 -0
- package/dist/mesh/client.js.map +1 -0
- package/dist/mesh/encoding.d.ts +38 -0
- package/dist/mesh/encoding.js +217 -0
- package/dist/mesh/encoding.js.map +1 -0
- package/dist/mesh/self_revoke.d.ts +73 -0
- package/dist/mesh/self_revoke.js +407 -0
- package/dist/mesh/self_revoke.js.map +1 -0
- package/dist/mesh/siblings.d.ts +49 -0
- package/dist/mesh/siblings.js +159 -0
- package/dist/mesh/siblings.js.map +1 -0
- package/dist/mesh/types.d.ts +34 -0
- package/dist/mesh/types.js +11 -0
- package/dist/mesh/types.js.map +1 -0
- package/dist/mesh/verify.d.ts +17 -0
- package/dist/mesh/verify.js +86 -0
- package/dist/mesh/verify.js.map +1 -0
- package/dist/pairing/crypto.d.ts +8 -0
- package/dist/pairing/crypto.js +22 -0
- package/dist/pairing/crypto.js.map +1 -0
- package/dist/pairing/qr.d.ts +59 -0
- package/dist/pairing/qr.js +127 -0
- package/dist/pairing/qr.js.map +1 -0
- package/dist/pairing/storage.d.ts +120 -0
- package/dist/pairing/storage.js +614 -0
- package/dist/pairing/storage.js.map +1 -0
- package/dist/panel_bridge.d.ts +15 -0
- package/dist/panel_bridge.js +409 -0
- package/dist/panel_bridge.js.map +1 -0
- package/dist/paths.d.ts +39 -0
- package/dist/paths.js +51 -0
- package/dist/paths.js.map +1 -0
- package/dist/protocol/codec.d.ts +7 -0
- package/dist/protocol/codec.js +48 -0
- package/dist/protocol/codec.js.map +1 -0
- package/dist/protocol/types.d.ts +404 -0
- package/dist/protocol/types.js +2 -0
- package/dist/protocol/types.js.map +1 -0
- package/dist/rooms.d.ts +42 -0
- package/dist/rooms.js +78 -0
- package/dist/rooms.js.map +1 -0
- package/dist/session/bridge.d.ts +37 -0
- package/dist/session/bridge.js +134 -0
- package/dist/session/bridge.js.map +1 -0
- package/dist/session/broker.d.ts +189 -0
- package/dist/session/broker.js +527 -0
- package/dist/session/broker.js.map +1 -0
- package/dist/session/broker_remote.d.ts +74 -0
- package/dist/session/broker_remote.js +581 -0
- package/dist/session/broker_remote.js.map +1 -0
- package/dist/session/cwd_lock.d.ts +33 -0
- package/dist/session/cwd_lock.js +127 -0
- package/dist/session/cwd_lock.js.map +1 -0
- package/dist/session/debug_log.d.ts +3 -0
- package/dist/session/debug_log.js +32 -0
- package/dist/session/debug_log.js.map +1 -0
- package/dist/session/envelope.d.ts +33 -0
- package/dist/session/envelope.js +117 -0
- package/dist/session/envelope.js.map +1 -0
- package/dist/session/global_config.d.ts +33 -0
- package/dist/session/global_config.js +73 -0
- package/dist/session/global_config.js.map +1 -0
- package/dist/session/ipc.d.ts +27 -0
- package/dist/session/ipc.js +22 -0
- package/dist/session/ipc.js.map +1 -0
- package/dist/session/leader_election.d.ts +32 -0
- package/dist/session/leader_election.js +108 -0
- package/dist/session/leader_election.js.map +1 -0
- package/dist/session/local_config.d.ts +67 -0
- package/dist/session/local_config.js +193 -0
- package/dist/session/local_config.js.map +1 -0
- package/dist/session/mesh_node.d.ts +116 -0
- package/dist/session/mesh_node.js +596 -0
- package/dist/session/mesh_node.js.map +1 -0
- package/dist/session/peer.d.ts +139 -0
- package/dist/session/peer.js +474 -0
- package/dist/session/peer.js.map +1 -0
- package/dist/session/peer_inventory.d.ts +13 -0
- package/dist/session/peer_inventory.js +48 -0
- package/dist/session/peer_inventory.js.map +1 -0
- package/dist/session/peer_limits.d.ts +9 -0
- package/dist/session/peer_limits.js +24 -0
- package/dist/session/peer_limits.js.map +1 -0
- package/dist/session/rpc_envelope.d.ts +108 -0
- package/dist/session/rpc_envelope.js +221 -0
- package/dist/session/rpc_envelope.js.map +1 -0
- package/dist/session/rpc_inbound.d.ts +55 -0
- package/dist/session/rpc_inbound.js +136 -0
- package/dist/session/rpc_inbound.js.map +1 -0
- package/dist/session/setup_wizard.d.ts +39 -0
- package/dist/session/setup_wizard.js +63 -0
- package/dist/session/setup_wizard.js.map +1 -0
- package/dist/session/tools.d.ts +24 -0
- package/dist/session/tools.js +272 -0
- package/dist/session/tools.js.map +1 -0
- package/dist/session/wizard.d.ts +13 -0
- package/dist/session/wizard.js +20 -0
- package/dist/session/wizard.js.map +1 -0
- package/dist/transport/peer_channel.d.ts +52 -0
- package/dist/transport/peer_channel.js +145 -0
- package/dist/transport/peer_channel.js.map +1 -0
- package/dist/transport/pi_forward_client.d.ts +29 -0
- package/dist/transport/pi_forward_client.js +68 -0
- package/dist/transport/pi_forward_client.js.map +1 -0
- package/dist/transport/relay_client.d.ts +96 -0
- package/dist/transport/relay_client.js +210 -0
- package/dist/transport/relay_client.js.map +1 -0
- package/dist/ui/footer.d.ts +32 -0
- package/dist/ui/footer.js +34 -0
- package/dist/ui/footer.js.map +1 -0
- package/docs/daemon.md +289 -0
- package/package.json +92 -0
- package/service-templates/launchd.plist.template +35 -0
- package/service-templates/systemd.service.template +19 -0
- package/service-templates/task-launcher.vbs.template +10 -0
- package/service-templates/task-scheduler.xml.template +38 -0
- package/skills/agent-network/SKILL.md +310 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../src/daemon/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { AskResponseEnrichmentWire, ExtensionUiResponseWire, ServerMessage } from "./protocol/types.js";
|
|
3
|
+
export interface ExtensionUiBridge {
|
|
4
|
+
/** Route an inbound `extension_ui_response` from a peer back to pi-ask. */
|
|
5
|
+
respond(msg: ExtensionUiResponseWire): void;
|
|
6
|
+
/**
|
|
7
|
+
* Requests for flows still awaiting an answer, for `session_sync` to replay.
|
|
8
|
+
*
|
|
9
|
+
* The `started` broadcast fires exactly once. A peer that connects *after*
|
|
10
|
+
* a flow opened never saw it: history replayed, but the interactive frame
|
|
11
|
+
* did not, so the phone showed the ask_user tool call as plain text while
|
|
12
|
+
* the desktop sat blocked on the TUI dialog. Replaying on sync closes that
|
|
13
|
+
* hole — the common real-world case is the agent asking while the app is
|
|
14
|
+
* closed.
|
|
15
|
+
*/
|
|
16
|
+
pendingRequests(): ServerMessage[];
|
|
17
|
+
/** Drop all subscriptions + state (best-effort teardown). */
|
|
18
|
+
dispose(): void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Wire pi-ask's event contract to the relay's extension_ui_request/response
|
|
22
|
+
* frames. Returns `null` only if the SDK exposes no usable `events` bus (defensive
|
|
23
|
+
* — modern Pi always has one); callers stay null-safe.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createExtensionUiBridge(pi: ExtensionAPI, broadcast: (msg: ServerMessage) => void): ExtensionUiBridge | null;
|
|
26
|
+
export type { AskResponseEnrichmentWire, ExtensionUiResponseWire };
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
// Plan/57 — Bridge @eko24ive/pi-ask clarification flows to the paired app over
|
|
2
|
+
// the extension_ui_request/response contract.
|
|
3
|
+
//
|
|
4
|
+
// pi-ask (when installed) runs ask_user in the Pi TUI on the desktop AND emits
|
|
5
|
+
// a same-process event contract on `pi.events` (docs/remote-events.md):
|
|
6
|
+
//
|
|
7
|
+
// @eko24ive/pi-ask:started { flowId, toolCallId?, source, title?, questions[] }
|
|
8
|
+
// @eko24ive/pi-ask:submit { requestId, flowId, response } // we emit this
|
|
9
|
+
// @eko24ive/pi-ask:submit-result{ requestId, flowId, ok, error? } // pi-ask emits
|
|
10
|
+
// @eko24ive/pi-ask:completed { flowId, result }
|
|
11
|
+
//
|
|
12
|
+
// This module subscribes to those events and translates them into the SDK's
|
|
13
|
+
// extension_ui_request/response wire shapes (mirrored from
|
|
14
|
+
// `pi --mode rpc`'s RpcExtensionUIRequest/Response) so the mobile app renders
|
|
15
|
+
// ask_user natively. pi-ask's richer schema rides in an optional `ask` envelope.
|
|
16
|
+
//
|
|
17
|
+
// Inert when pi-ask is absent: no events fire, nothing breaks. ask_user without
|
|
18
|
+
// pi-ask doesn't exist, so this bridge is strictly opt-in.
|
|
19
|
+
const PI_ASK_STARTED = "@eko24ive/pi-ask:started";
|
|
20
|
+
const PI_ASK_COMPLETED = "@eko24ive/pi-ask:completed";
|
|
21
|
+
const PI_ASK_SUBMIT = "@eko24ive/pi-ask:submit";
|
|
22
|
+
const PI_ASK_SUBMIT_RESULT = "@eko24ive/pi-ask:submit-result";
|
|
23
|
+
/** Drop a flow from `activeFlows` if pi-ask never resolves it (e.g. a flow
|
|
24
|
+
* disposed on session_shutdown — pi-ask does not emit `completed` for those).
|
|
25
|
+
* Bounds memory; generous vs. a human answer time. */
|
|
26
|
+
const FLOW_TTL_MS = 10 * 60 * 1000;
|
|
27
|
+
/**
|
|
28
|
+
* Wire pi-ask's event contract to the relay's extension_ui_request/response
|
|
29
|
+
* frames. Returns `null` only if the SDK exposes no usable `events` bus (defensive
|
|
30
|
+
* — modern Pi always has one); callers stay null-safe.
|
|
31
|
+
*/
|
|
32
|
+
export function createExtensionUiBridge(pi, broadcast) {
|
|
33
|
+
const eventsRaw = pi.events;
|
|
34
|
+
if (!eventsRaw ||
|
|
35
|
+
typeof eventsRaw.on !== "function" ||
|
|
36
|
+
typeof eventsRaw.emit !== "function") {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
// Assign to a freshly-typed const so the narrowed (non-undefined) type is
|
|
40
|
+
// preserved inside nested closures below (TS re-widens the raw capture).
|
|
41
|
+
const events = eventsRaw;
|
|
42
|
+
// flowId → flow. Kept so a label-only (degraded) response can map back to the
|
|
43
|
+
// option value, and so completed/submit-result can be tolerated if they arrive
|
|
44
|
+
// after the app already answered.
|
|
45
|
+
const activeFlows = new Map();
|
|
46
|
+
// Per-flow TTL timers (FLOW_TTL_MS). pi-ask disposes flows on session_shutdown
|
|
47
|
+
// WITHOUT emitting `completed`, so without this the `activeFlows` map would
|
|
48
|
+
// leak one entry per abandoned flow. Bounded, defensive.
|
|
49
|
+
const flowTimers = new Map();
|
|
50
|
+
function clearFlowTtl(flowId) {
|
|
51
|
+
const t = flowTimers.get(flowId);
|
|
52
|
+
if (t !== undefined) {
|
|
53
|
+
clearTimeout(t);
|
|
54
|
+
flowTimers.delete(flowId);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function armFlowTtl(flowId) {
|
|
58
|
+
clearFlowTtl(flowId);
|
|
59
|
+
flowTimers.set(flowId, setTimeout(() => {
|
|
60
|
+
if (!activeFlows.delete(flowId))
|
|
61
|
+
return; // already resolved
|
|
62
|
+
flowTimers.delete(flowId);
|
|
63
|
+
// Tell the app the bridge forgot this flow instead of stranding its
|
|
64
|
+
// modal silently: a matching WARNING notify keeps the modal open with
|
|
65
|
+
// a retry hint. Rich clients can still retry (the response carries
|
|
66
|
+
// flow_id and pi-ask's flow may still be pending on the desktop);
|
|
67
|
+
// degraded clients at least get closure.
|
|
68
|
+
broadcast({
|
|
69
|
+
type: "extension_ui_request",
|
|
70
|
+
id: flowId,
|
|
71
|
+
method: "notify",
|
|
72
|
+
message: "Clarification expired on the bridge — retry or answer on desktop.",
|
|
73
|
+
notify_type: "warning",
|
|
74
|
+
});
|
|
75
|
+
}, FLOW_TTL_MS));
|
|
76
|
+
}
|
|
77
|
+
const unsubStarted = events.on(PI_ASK_STARTED, (raw) => {
|
|
78
|
+
const event = parseStartedEvent(raw);
|
|
79
|
+
if (!event)
|
|
80
|
+
return;
|
|
81
|
+
const flow = {
|
|
82
|
+
flowId: event.flowId,
|
|
83
|
+
toolCallId: event.toolCallId ?? null,
|
|
84
|
+
source: event.source ?? "tool",
|
|
85
|
+
title: event.title ?? null,
|
|
86
|
+
questions: event.questions,
|
|
87
|
+
};
|
|
88
|
+
activeFlows.set(flow.flowId, flow);
|
|
89
|
+
armFlowTtl(flow.flowId);
|
|
90
|
+
broadcast(requestForFlow(flow));
|
|
91
|
+
});
|
|
92
|
+
const unsubCompleted = events.on(PI_ASK_COMPLETED, (raw) => {
|
|
93
|
+
const e = raw;
|
|
94
|
+
if (!e || e.version !== 1 || typeof e.flowId !== "string")
|
|
95
|
+
return;
|
|
96
|
+
const flowId = e.flowId;
|
|
97
|
+
clearFlowTtl(flowId);
|
|
98
|
+
activeFlows.delete(flowId);
|
|
99
|
+
// Same id as the originating request (the flowId). The app treats a `notify`
|
|
100
|
+
// whose id matches an open interactive request as "that flow resolved —
|
|
101
|
+
// dismiss it". Covers the non-submitting owner in a multi-owner setup.
|
|
102
|
+
broadcast({
|
|
103
|
+
type: "extension_ui_request",
|
|
104
|
+
id: flowId,
|
|
105
|
+
method: "notify",
|
|
106
|
+
message: "Clarification resolved.",
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
// submit-result is per-request feedback. On error (invalid answer / flow
|
|
110
|
+
// gone) surface a warning so the submitting owner can retry. The notify reuses
|
|
111
|
+
// the flowId as its id (same as the originating request) so the app correlates
|
|
112
|
+
// it to its open modal; notify_type "warning" distinguishes it from the
|
|
113
|
+
// `completed` dismiss (same id, absent/other notify_type). Success is covered
|
|
114
|
+
// by `completed`, so ok is a no-op here.
|
|
115
|
+
const unsubResult = events.on(PI_ASK_SUBMIT_RESULT, (raw) => {
|
|
116
|
+
const e = raw;
|
|
117
|
+
if (!e || e.version !== 1 || e.ok === true)
|
|
118
|
+
return;
|
|
119
|
+
const message = typeof e.message === "string"
|
|
120
|
+
? e.message
|
|
121
|
+
: typeof e.error === "string"
|
|
122
|
+
? e.error
|
|
123
|
+
: "Clarification answer was not accepted.";
|
|
124
|
+
const flowId = typeof e.flowId === "string"
|
|
125
|
+
? e.flowId
|
|
126
|
+
: activeFlows.size === 1
|
|
127
|
+
? // Defensive: pi-ask always carries flowId. If it's ever absent, an
|
|
128
|
+
// unambiguous single active flow is a safe attribution; with zero or
|
|
129
|
+
// several, the warning is uncorrelatable and the app ignores
|
|
130
|
+
// unmatched notifies — drop it instead of broadcasting a random id
|
|
131
|
+
// no client can act on.
|
|
132
|
+
activeFlows.keys().next().value
|
|
133
|
+
: undefined;
|
|
134
|
+
if (!flowId)
|
|
135
|
+
return;
|
|
136
|
+
broadcast({
|
|
137
|
+
type: "extension_ui_request",
|
|
138
|
+
id: flowId,
|
|
139
|
+
method: "notify",
|
|
140
|
+
message,
|
|
141
|
+
notify_type: "warning",
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
function respond(msg) {
|
|
145
|
+
const ask = msg.ask;
|
|
146
|
+
// Explicit cancel — with or without the ask envelope. A strict client
|
|
147
|
+
// (no envelope) only carries the request id, which IS the flowId by this
|
|
148
|
+
// bridge's contract; confirm via activeFlows before trusting it.
|
|
149
|
+
if (("cancelled" in msg && msg.cancelled === true) ||
|
|
150
|
+
(ask !== undefined && ask.kind === "cancel")) {
|
|
151
|
+
const flowId = ask?.flow_id ?? (activeFlows.has(msg.id) ? msg.id : null);
|
|
152
|
+
if (!flowId)
|
|
153
|
+
return;
|
|
154
|
+
emitSubmit(msg.id, flowId, { kind: "cancel" });
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
// Rich path: the ask envelope carries the structured answer (option values).
|
|
158
|
+
if (ask !== undefined && ask.kind === "answer") {
|
|
159
|
+
emitSubmit(msg.id, ask.flow_id, {
|
|
160
|
+
kind: "answer",
|
|
161
|
+
mode: ask.mode,
|
|
162
|
+
answers: ask.answers,
|
|
163
|
+
});
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
// Degraded path: a response without the ask envelope (e.g. a generic client
|
|
167
|
+
// that rendered only the SDK `select`). Map the chosen label back to the
|
|
168
|
+
// option value for the flow's first question.
|
|
169
|
+
const flow = activeFlows.get(msg.id);
|
|
170
|
+
if (!flow || flow.questions.length === 0)
|
|
171
|
+
return;
|
|
172
|
+
const question = flow.questions[0];
|
|
173
|
+
if (!question)
|
|
174
|
+
return;
|
|
175
|
+
const label = "value" in msg ? String(msg.value) : "";
|
|
176
|
+
// NB: pi-ask's schema doesn't forbid duplicate labels — on a collision the
|
|
177
|
+
// first match wins. Inherent ambiguity of a label-only (degraded) client.
|
|
178
|
+
const match = question.options.find((o) => o.label === label);
|
|
179
|
+
const answers = {
|
|
180
|
+
[question.id]: match
|
|
181
|
+
? { values: [match.value] }
|
|
182
|
+
: label
|
|
183
|
+
? { customText: label }
|
|
184
|
+
: {},
|
|
185
|
+
};
|
|
186
|
+
emitSubmit(msg.id, flow.flowId, {
|
|
187
|
+
kind: "answer",
|
|
188
|
+
mode: "submit",
|
|
189
|
+
answers,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
function emitSubmit(requestId, flowId, response) {
|
|
193
|
+
try {
|
|
194
|
+
events.emit(PI_ASK_SUBMIT, {
|
|
195
|
+
version: 1,
|
|
196
|
+
requestId,
|
|
197
|
+
flowId,
|
|
198
|
+
response,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
// pi-ask not installed or bus gone — nothing useful to do; the flow will
|
|
203
|
+
// either resolve locally (desktop TUI) or time out on its own.
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
respond,
|
|
208
|
+
// Insertion order = the order the flows opened, so a client replaying more
|
|
209
|
+
// than one renders them oldest-first. pi-ask resolves one flow at a time in
|
|
210
|
+
// practice, so this is a defensive detail rather than a live case.
|
|
211
|
+
pendingRequests: () => [...activeFlows.values()].map(requestForFlow),
|
|
212
|
+
dispose() {
|
|
213
|
+
unsubStarted();
|
|
214
|
+
unsubCompleted();
|
|
215
|
+
unsubResult();
|
|
216
|
+
for (const t of flowTimers.values())
|
|
217
|
+
clearTimeout(t);
|
|
218
|
+
flowTimers.clear();
|
|
219
|
+
activeFlows.clear();
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/** Build the single extension_ui_request that represents a whole ask flow. */
|
|
224
|
+
function requestForFlow(flow) {
|
|
225
|
+
const first = flow.questions[0];
|
|
226
|
+
const title = flow.title ?? first?.prompt ?? "Clarification";
|
|
227
|
+
const options = first ? first.options.map((o) => o.label) : [];
|
|
228
|
+
const ask = {
|
|
229
|
+
flow_id: flow.flowId,
|
|
230
|
+
tool_call_id: flow.toolCallId,
|
|
231
|
+
source: flow.source,
|
|
232
|
+
title: flow.title,
|
|
233
|
+
questions: flow.questions,
|
|
234
|
+
};
|
|
235
|
+
// A pure-text question (pi-ask allows an empty options array) degrades to
|
|
236
|
+
// `input` — a strict client renders a text field instead of an empty select.
|
|
237
|
+
if (options.length === 0) {
|
|
238
|
+
return {
|
|
239
|
+
type: "extension_ui_request",
|
|
240
|
+
// One request per flow → reuse the flowId as the correlation id. The
|
|
241
|
+
// app's response carries the same id (and ask.flow_id) for routing.
|
|
242
|
+
id: flow.flowId,
|
|
243
|
+
method: "input",
|
|
244
|
+
title,
|
|
245
|
+
placeholder: first?.prompt,
|
|
246
|
+
ask,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
type: "extension_ui_request",
|
|
251
|
+
// One request per flow → reuse the flowId as the correlation id. The app's
|
|
252
|
+
// response carries the same id (and ask.flow_id) so the bridge can route.
|
|
253
|
+
id: flow.flowId,
|
|
254
|
+
method: "select",
|
|
255
|
+
title,
|
|
256
|
+
options,
|
|
257
|
+
ask,
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
function parseStartedEvent(raw) {
|
|
261
|
+
if (!isRecord(raw))
|
|
262
|
+
return null;
|
|
263
|
+
if (raw.version !== 1)
|
|
264
|
+
return null;
|
|
265
|
+
if (typeof raw.flowId !== "string")
|
|
266
|
+
return null;
|
|
267
|
+
if (!Array.isArray(raw.questions))
|
|
268
|
+
return null;
|
|
269
|
+
const questions = [];
|
|
270
|
+
for (const q of raw.questions) {
|
|
271
|
+
const parsed = parseQuestion(q);
|
|
272
|
+
if (!parsed)
|
|
273
|
+
return null;
|
|
274
|
+
questions.push(parsed);
|
|
275
|
+
}
|
|
276
|
+
if (questions.length === 0)
|
|
277
|
+
return null;
|
|
278
|
+
return {
|
|
279
|
+
flowId: raw.flowId,
|
|
280
|
+
toolCallId: asString(raw.toolCallId),
|
|
281
|
+
source: asString(raw.source),
|
|
282
|
+
title: asString(raw.title),
|
|
283
|
+
questions,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function parseQuestion(value) {
|
|
287
|
+
if (!isRecord(value))
|
|
288
|
+
return null;
|
|
289
|
+
if (typeof value.id !== "string" || typeof value.prompt !== "string")
|
|
290
|
+
return null;
|
|
291
|
+
if (!Array.isArray(value.options))
|
|
292
|
+
return null;
|
|
293
|
+
const options = [];
|
|
294
|
+
for (const o of value.options) {
|
|
295
|
+
const opt = parseOption(o);
|
|
296
|
+
if (!opt)
|
|
297
|
+
return null;
|
|
298
|
+
options.push(opt);
|
|
299
|
+
}
|
|
300
|
+
// Empty options is valid: pi-ask's schema has no minItems — a question can be
|
|
301
|
+
// pure text (custom answer only). The request degrades to `input` upstream.
|
|
302
|
+
return {
|
|
303
|
+
id: value.id,
|
|
304
|
+
label: typeof value.label === "string" ? value.label : value.prompt,
|
|
305
|
+
prompt: value.prompt,
|
|
306
|
+
type: asQuestionType(value.type) ?? "single",
|
|
307
|
+
required: value.required === true,
|
|
308
|
+
presentedType: asQuestionType(value.presentedType),
|
|
309
|
+
requestedType: asQuestionType(value.requestedType),
|
|
310
|
+
options,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
function parseOption(value) {
|
|
314
|
+
if (!isRecord(value))
|
|
315
|
+
return null;
|
|
316
|
+
// pi-ask's schema marks value/label Optional on input, but a started event
|
|
317
|
+
// always carries resolved values. Be lenient: fall back label→value.
|
|
318
|
+
const val = typeof value.value === "string" ? value.value : asString(value.label);
|
|
319
|
+
const label = typeof value.label === "string" ? value.label : val;
|
|
320
|
+
if (!val || !label)
|
|
321
|
+
return null;
|
|
322
|
+
return {
|
|
323
|
+
value: val,
|
|
324
|
+
label,
|
|
325
|
+
description: asString(value.description),
|
|
326
|
+
preview: asString(value.preview),
|
|
327
|
+
freeform: value.freeform === true ? true : undefined,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
function asQuestionType(value) {
|
|
331
|
+
return value === "single" || value === "multi" || value === "preview"
|
|
332
|
+
? value
|
|
333
|
+
: undefined;
|
|
334
|
+
}
|
|
335
|
+
function asString(value) {
|
|
336
|
+
return typeof value === "string" && value.length > 0 ? value : undefined;
|
|
337
|
+
}
|
|
338
|
+
function isRecord(value) {
|
|
339
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=extension_ui_bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension_ui_bridge.js","sourceRoot":"","sources":["../src/extension_ui_bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* pi-extension — un-bien slash commands + AgentBridge wiring
|
|
4
|
+
*
|
|
5
|
+
* Exported as ExtensionFactory (default export) to be loaded by Pi SDK:
|
|
6
|
+
* pi -e $(pwd)/dist/index.js
|
|
7
|
+
*
|
|
8
|
+
* State machine: idle → started → paired
|
|
9
|
+
* /unbien start connects to relay (idle → started)
|
|
10
|
+
* /unbien pair shows QR for new peers (started, async → paired via auto-listener)
|
|
11
|
+
* /unbien stop closes everything (any → idle)
|
|
12
|
+
*
|
|
13
|
+
* Pairing (post plano 06 — sem Noise XX):
|
|
14
|
+
* App envia inner `pair_request` (id, token, device_name) sobre canal opaco.
|
|
15
|
+
* Pi valida o token via qrSession.consumeToken, salva peer em peers.json
|
|
16
|
+
* {name, remote_epk, paired_at} e responde com `pair_ok` (ou `pair_error`).
|
|
17
|
+
* `ct` é base64(JSON.stringify(inner)) — sem cifra, sem MAC.
|
|
18
|
+
*
|
|
19
|
+
* Reconexão de peer conhecido:
|
|
20
|
+
* Se uma mensagem chega em estado `started` vinda de um epk presente em
|
|
21
|
+
* peers.json, o auto-listener promove direto pra `paired` sem novo
|
|
22
|
+
* pair_request, criando o PlainPeerChannel e roteando a mensagem.
|
|
23
|
+
*
|
|
24
|
+
* Architecture note — why we don't use AgentBridge directly here:
|
|
25
|
+
* AgentBridge.beforeToolCallHook is designed to be passed to createAgentSession().
|
|
26
|
+
* Inside an extension Pi already owns the AgentSession, so we can't re-bind
|
|
27
|
+
* beforeToolCall after the fact. The equivalent is pi.on("tool_call", …) which
|
|
28
|
+
* fires BEFORE execution and supports { block: true }.
|
|
29
|
+
* AgentBridge (src/session/agent_bridge.ts) remains the tested, mockable unit
|
|
30
|
+
* for integration tests.
|
|
31
|
+
*/
|
|
32
|
+
import type { ExtensionContext, ExtensionFactory } from "@earendil-works/pi-coding-agent";
|
|
33
|
+
import type { ClientMessage } from "./protocol/types.js";
|
|
34
|
+
import { PlainPeerChannel } from "./transport/peer_channel.js";
|
|
35
|
+
export type RemoteState = "idle" | "started";
|
|
36
|
+
/** Relay connectivity as seen by an RPC client (Cockpit). Derived from
|
|
37
|
+
* `_state` + `_relay`: "disconnected" = relay off (idle); "connected" = live
|
|
38
|
+
* WS; "reconnecting" = was on, WS dropped, retrying. Surfaced via the
|
|
39
|
+
* `un-bien:relay-state` custom message (see `_emitRelayState`). */
|
|
40
|
+
export type RelayConnectivity = "connected" | "reconnecting" | "disconnected";
|
|
41
|
+
/** Sentinel prefix for a transparent control message an RPC client sends on the
|
|
42
|
+
* `prompt` channel (stdin). The `input` hook intercepts it, runs the action,
|
|
43
|
+
* and swallows it (`action:"handled"`) so it never becomes an LLM turn or a
|
|
44
|
+
* transcript entry. Starts with NUL so it can't collide with real user input
|
|
45
|
+
* and doesn't begin with "/" (which would route to the command parser). */
|
|
46
|
+
export declare const CTRL_PREFIX = "\0un-bien-ctrl:";
|
|
47
|
+
type MeshEnvelope = {
|
|
48
|
+
id: string;
|
|
49
|
+
from: string;
|
|
50
|
+
re: string | null;
|
|
51
|
+
body: unknown;
|
|
52
|
+
};
|
|
53
|
+
/** Test-only override of the message buffer. */
|
|
54
|
+
/**
|
|
55
|
+
* Test-only: emulate what `/unbien` does on the returning-user path
|
|
56
|
+
* (join the local mesh, then start the relay) without touching the FS for
|
|
57
|
+
* a `localConfigExists()` lookup. Lets tests bring the relay up without
|
|
58
|
+
* mocking the wizard or the local config storage.
|
|
59
|
+
*
|
|
60
|
+
* Typed loosely to accept any ctx shape with `ui.notify` + `cwd` — the
|
|
61
|
+
* unit tests use minimal mocks that don't satisfy the full
|
|
62
|
+
* `ExtensionContext` interface.
|
|
63
|
+
*/
|
|
64
|
+
export declare function _connectForTest(ctx: unknown): Promise<void>;
|
|
65
|
+
/** Test-only: tear everything down (mirrors `/unbien stop`). */
|
|
66
|
+
export declare function _stopForTest(ctx: unknown): Promise<void>;
|
|
67
|
+
/** Test-only: read/reset the `_disposed` flag. Production clears it only when
|
|
68
|
+
* a host reuses this module for a replacement session; tests share one module
|
|
69
|
+
* across cases, so they also reset it to avoid cross-test pollution. */
|
|
70
|
+
export declare function _getDisposedForTest(): boolean;
|
|
71
|
+
export declare function _setDisposedForTest(v: boolean): void;
|
|
72
|
+
/** Test-only: reset the once-per-session auto-init gate so session_start re-runs it. */
|
|
73
|
+
export declare function _resetAutoInitedForTest(): void;
|
|
74
|
+
/** Test-only: clear the globalThis panel/ui bridge ownership so each fresh
|
|
75
|
+
* `extension(pi)` in a shared test process can (re)claim and rebuild bridges. */
|
|
76
|
+
export declare function _resetBridgeOwnersForTest(): void;
|
|
77
|
+
/** Test-only: reset the keyed per-session state at a TEST BOUNDARY (beforeEach).
|
|
78
|
+
* Must NOT be folded into _resetBridgeOwnersForTest — that fires mid-test on
|
|
79
|
+
* every captureEventHandler call and would wipe state a test seeds across two
|
|
80
|
+
* captures (e.g. input seeds turnId, message_update reads it). */
|
|
81
|
+
export declare function _resetSessionsForTest(): void;
|
|
82
|
+
/** Test-only: set the auto-init gate for lifecycle replacement tests. */
|
|
83
|
+
export declare function _setAutoInitedForTest(value: boolean): void;
|
|
84
|
+
/** Test-only: true when this instance holds a live local-mesh node. */
|
|
85
|
+
export declare function _hasMeshNodeForTest(): boolean;
|
|
86
|
+
/** Test-only: drive the current real SelfRevoke producer through one sweep. */
|
|
87
|
+
export declare function _checkSelfRevokeForTest(): Promise<void>;
|
|
88
|
+
/** Test-only: the effective (possibly `#N`-suffixed) name the cwd-lock reserved. */
|
|
89
|
+
export declare function _getLockedNameForTest(): string | null;
|
|
90
|
+
/** Test-only: release + clear the cwd lock (the lock normally survives stop). */
|
|
91
|
+
export declare function _resetCwdLockForTest(): void;
|
|
92
|
+
/**
|
|
93
|
+
* Test-only: relay-only startup, no UDS mesh join. Replaces the old
|
|
94
|
+
* `unbien relay start` handler that some tests captured to bring up
|
|
95
|
+
* the relay in isolation (e.g. ping/pong tests that don't care about the
|
|
96
|
+
* agent-network broker).
|
|
97
|
+
*/
|
|
98
|
+
export declare function _startRelayForTest(ctx: unknown): Promise<void>;
|
|
99
|
+
/** Test-only: public marker for canceled-keypair cache regression checks. */
|
|
100
|
+
export declare function _getCachedPublicKeyForTest(): string | null;
|
|
101
|
+
/** Test-only override of session started timestamp. */
|
|
102
|
+
export declare function _setSessionStartedAtForTest(ts: number | null): void;
|
|
103
|
+
/** Test-only: reset the cached model name (between tests). */
|
|
104
|
+
export declare function _setCurrentModelForTest(name: string | undefined): void;
|
|
105
|
+
/** Test-only: read the active turn id used for plain `cancel` routing. */
|
|
106
|
+
export declare function _getCurrentTurnIdForTest(): string | null;
|
|
107
|
+
/** Test-only: override the bound AgentSession so a spy can capture the
|
|
108
|
+
* content handed to `sendUserMessage` (plan/30 multimodal ingest). */
|
|
109
|
+
export declare function _setPiForTest(pi: unknown): void;
|
|
110
|
+
/** Test-only: exposes pending reconnect timer state. */
|
|
111
|
+
export declare function _hasPendingReconnect(): boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Public state-snapshot helper. Returns the derived UX state, not the raw
|
|
114
|
+
* `_state` enum: the W2D refactor collapsed the internal machine to
|
|
115
|
+
* `idle | started` and made `paired` a derived metric
|
|
116
|
+
* (`_activePeers.size > 0`). Tests and the footer keep the three-state
|
|
117
|
+
* mental model via this getter.
|
|
118
|
+
*/
|
|
119
|
+
export declare function _getState(): "idle" | "started" | "paired";
|
|
120
|
+
/** Test-only: number of owners currently attached via PlainPeerChannel. */
|
|
121
|
+
export declare function _getActivePeerCountForTest(): number;
|
|
122
|
+
/** Test-only: true if a specific peer (base64 std) has an attached channel. */
|
|
123
|
+
export declare function _hasActivePeerForTest(appPeerIdStd: string): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Handle a transparent control command from an RPC client (Cockpit), received
|
|
126
|
+
* as a `CTRL_PREFIX`-tagged input the `input` hook swallowed. Toggles the relay
|
|
127
|
+
* WITHOUT leaving the local mesh (relay-only: `_cmdStart` up / `_goIdle` down),
|
|
128
|
+
* then emits the fresh state. `relay:status` just re-emits (no change) so the
|
|
129
|
+
* client can sync its button after (re)attaching to the RPC stream.
|
|
130
|
+
*/
|
|
131
|
+
export declare function _handleControl(cmd: string): Promise<void>;
|
|
132
|
+
/**
|
|
133
|
+
* Per-owner disconnect callback. Fires when one specific owner's channel
|
|
134
|
+
* detaches (e.g. relay told us the peer is gone). Other owners' channels
|
|
135
|
+
* keep running — relay stays "started".
|
|
136
|
+
*
|
|
137
|
+
* Exported so tests can trigger the disconnect path for a specific peer.
|
|
138
|
+
*
|
|
139
|
+
* Backward-compat: a no-arg call (legacy tests / pre-W2D callers) falls
|
|
140
|
+
* back to detaching the most recently attached peer, mirroring the old
|
|
141
|
+
* singleton semantics.
|
|
142
|
+
*/
|
|
143
|
+
export declare function _onPeerDisconnect(appPeerId?: string): void;
|
|
144
|
+
/** Build the argv for a detached tmux launch of `pi` in `cwd`. Args are an
|
|
145
|
+
* ARRAY (never a shell string) so cwd/name can't inject. Exported for tests. */
|
|
146
|
+
export declare function _buildTmuxLaunchArgs(name: string, cwd: string): string[];
|
|
147
|
+
declare const extension: ExtensionFactory;
|
|
148
|
+
export default extension;
|
|
149
|
+
/** Test-only entry point for verifying mesh-to-agent delivery semantics. */
|
|
150
|
+
export declare function _deliverMeshMessageToAgentForTest(env: MeshEnvelope): void;
|
|
151
|
+
export declare function _routeClientMessageFrom(sender: PlainPeerChannel, msg: ClientMessage, ctx: Pick<ExtensionContext, "abort">): void;
|
|
152
|
+
/**
|
|
153
|
+
* Backward-compatible shim for legacy callers + tests that didn't track
|
|
154
|
+
* a specific sender channel. Routes to the most recently attached owner,
|
|
155
|
+
* mirroring the pre-W2D singleton behavior.
|
|
156
|
+
*/
|
|
157
|
+
export declare function routeClientMessage(msg: ClientMessage, ctx: Pick<ExtensionContext, "abort">): void;
|
|
158
|
+
type ToolArgs = Record<string, unknown>;
|
|
159
|
+
export declare function _enrichToolArgs(tool: string, args: unknown): ToolArgs;
|
|
160
|
+
/**
|
|
161
|
+
* `unbien restart-supervisor` — restarts the `pi-supervisord` PROCESS
|
|
162
|
+
* (not the daemons). The supervisor is a long-running Node process with no
|
|
163
|
+
* hot-reload, so after a `dist` rebuild the old code keeps running until the
|
|
164
|
+
* process is restarted. The Cockpit "Restart supervisor" button shells out to
|
|
165
|
+
* this; the OS-specific restart lives here so the app stays cross-platform.
|
|
166
|
+
*
|
|
167
|
+
* Restarting the supervisor re-spawns every daemon as a side effect. Exits 0
|
|
168
|
+
* on success, non-zero on failure (the Cockpit detects failure by exit code).
|
|
169
|
+
*/
|
|
170
|
+
/** One step of a restart sequence. `ignoreFailure` steps (e.g. `schtasks /End`
|
|
171
|
+
* when the task isn't running) don't abort the sequence. */
|
|
172
|
+
export interface RestartStep {
|
|
173
|
+
cmd: string;
|
|
174
|
+
args: string[];
|
|
175
|
+
ignoreFailure?: boolean;
|
|
176
|
+
}
|
|
177
|
+
/** Pure: the OS command sequence that restarts the supervisor service, or null
|
|
178
|
+
* when the platform isn't supported. Most platforms are 1 step; Windows is 2
|
|
179
|
+
* (`schtasks /End` then `/Run`). Exported for tests. */
|
|
180
|
+
export declare function _restartSupervisorCommand(platform: NodeJS.Platform, uid: number): RestartStep[] | null;
|
|
181
|
+
/**
|
|
182
|
+
* Read-only probe of the local UDS broker for the mesh roster, backing
|
|
183
|
+
* `unbien peers`. Opens a raw connection to `sockPath`, sends a single
|
|
184
|
+
* unregistered `list_peers` request, and resolves with the peer names from the
|
|
185
|
+
* broker's reply (local UDS peers + cross-PC `<pc>:<peer>` entries).
|
|
186
|
+
*
|
|
187
|
+
* The probe deliberately does NOT register as a peer: the broker answers
|
|
188
|
+
* observer probes without assigning a name or broadcasting peer_joined/left
|
|
189
|
+
* (see Broker._tryObserverProbe), so a shell query never perturbs the mesh —
|
|
190
|
+
* no phantom peer flashes in anyone's roster, local or cross-PC.
|
|
191
|
+
*
|
|
192
|
+
* Resolves null when no broker is reachable (connection refused / no socket
|
|
193
|
+
* file — i.e. no Pi or daemon is leading the mesh on this machine), or on
|
|
194
|
+
* timeout, so the caller can print an "offline" message instead of an empty
|
|
195
|
+
* roster.
|
|
196
|
+
*/
|
|
197
|
+
export declare function probeListPeers(sockPath: string, timeoutMs?: number): Promise<string[] | null>;
|