uxnan-bridge 0.0.1-alpha.20260621
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.
Potentially problematic release.
This version of uxnan-bridge might be problematic. Click here for more details.
- package/README.md +150 -0
- package/dist/src/account-status.d.ts +13 -0
- package/dist/src/account-status.js +78 -0
- package/dist/src/account-status.js.map +1 -0
- package/dist/src/adapters/base-adapter.d.ts +18 -0
- package/dist/src/adapters/base-adapter.js +15 -0
- package/dist/src/adapters/base-adapter.js.map +1 -0
- package/dist/src/adapters/claude-adapter.d.ts +102 -0
- package/dist/src/adapters/claude-adapter.js +486 -0
- package/dist/src/adapters/claude-adapter.js.map +1 -0
- package/dist/src/adapters/claude-tools.d.ts +25 -0
- package/dist/src/adapters/claude-tools.js +146 -0
- package/dist/src/adapters/claude-tools.js.map +1 -0
- package/dist/src/adapters/codex-adapter.d.ts +116 -0
- package/dist/src/adapters/codex-adapter.js +912 -0
- package/dist/src/adapters/codex-adapter.js.map +1 -0
- package/dist/src/adapters/codex-app-server.d.ts +74 -0
- package/dist/src/adapters/codex-app-server.js +225 -0
- package/dist/src/adapters/codex-app-server.js.map +1 -0
- package/dist/src/adapters/codex-approval.d.ts +88 -0
- package/dist/src/adapters/codex-approval.js +160 -0
- package/dist/src/adapters/codex-approval.js.map +1 -0
- package/dist/src/adapters/codex-tools.d.ts +18 -0
- package/dist/src/adapters/codex-tools.js +106 -0
- package/dist/src/adapters/codex-tools.js.map +1 -0
- package/dist/src/adapters/content-blocks.d.ts +68 -0
- package/dist/src/adapters/content-blocks.js +205 -0
- package/dist/src/adapters/content-blocks.js.map +1 -0
- package/dist/src/adapters/echo-agent-adapter.d.ts +23 -0
- package/dist/src/adapters/echo-agent-adapter.js +72 -0
- package/dist/src/adapters/echo-agent-adapter.js.map +1 -0
- package/dist/src/adapters/gemini-adapter.d.ts +87 -0
- package/dist/src/adapters/gemini-adapter.js +594 -0
- package/dist/src/adapters/gemini-adapter.js.map +1 -0
- package/dist/src/adapters/gemini-tools.d.ts +4 -0
- package/dist/src/adapters/gemini-tools.js +48 -0
- package/dist/src/adapters/gemini-tools.js.map +1 -0
- package/dist/src/adapters/opencode-adapter.d.ts +74 -0
- package/dist/src/adapters/opencode-adapter.js +418 -0
- package/dist/src/adapters/opencode-adapter.js.map +1 -0
- package/dist/src/adapters/opencode-tools.d.ts +2 -0
- package/dist/src/adapters/opencode-tools.js +41 -0
- package/dist/src/adapters/opencode-tools.js.map +1 -0
- package/dist/src/adapters/pi-adapter.d.ts +92 -0
- package/dist/src/adapters/pi-adapter.js +467 -0
- package/dist/src/adapters/pi-adapter.js.map +1 -0
- package/dist/src/adapters/pi-tools.d.ts +10 -0
- package/dist/src/adapters/pi-tools.js +72 -0
- package/dist/src/adapters/pi-tools.js.map +1 -0
- package/dist/src/adapters/process-agent-adapter.d.ts +24 -0
- package/dist/src/adapters/process-agent-adapter.js +111 -0
- package/dist/src/adapters/process-agent-adapter.js.map +1 -0
- package/dist/src/adapters/resolve-claude.d.ts +13 -0
- package/dist/src/adapters/resolve-claude.js +57 -0
- package/dist/src/adapters/resolve-claude.js.map +1 -0
- package/dist/src/adapters/resolve-codex.d.ts +13 -0
- package/dist/src/adapters/resolve-codex.js +48 -0
- package/dist/src/adapters/resolve-codex.js.map +1 -0
- package/dist/src/adapters/resolve-gemini.d.ts +13 -0
- package/dist/src/adapters/resolve-gemini.js +47 -0
- package/dist/src/adapters/resolve-gemini.js.map +1 -0
- package/dist/src/adapters/resolve-opencode.d.ts +11 -0
- package/dist/src/adapters/resolve-opencode.js +49 -0
- package/dist/src/adapters/resolve-opencode.js.map +1 -0
- package/dist/src/adapters/resolve-pi.d.ts +13 -0
- package/dist/src/adapters/resolve-pi.js +46 -0
- package/dist/src/adapters/resolve-pi.js.map +1 -0
- package/dist/src/adapters/run-options.d.ts +22 -0
- package/dist/src/adapters/run-options.js +48 -0
- package/dist/src/adapters/run-options.js.map +1 -0
- package/dist/src/adapters/spawn.d.ts +20 -0
- package/dist/src/adapters/spawn.js +16 -0
- package/dist/src/adapters/spawn.js.map +1 -0
- package/dist/src/agents/agent-manager.d.ts +98 -0
- package/dist/src/agents/agent-manager.js +433 -0
- package/dist/src/agents/agent-manager.js.map +1 -0
- package/dist/src/agents/attachments.d.ts +28 -0
- package/dist/src/agents/attachments.js +121 -0
- package/dist/src/agents/attachments.js.map +1 -0
- package/dist/src/bridge-context.d.ts +45 -0
- package/dist/src/bridge-context.js +2 -0
- package/dist/src/bridge-context.js.map +1 -0
- package/dist/src/bridge-status.d.ts +12 -0
- package/dist/src/bridge-status.js +17 -0
- package/dist/src/bridge-status.js.map +1 -0
- package/dist/src/bridge.d.ts +37 -0
- package/dist/src/bridge.js +446 -0
- package/dist/src/bridge.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +194 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/conversation/session-history.d.ts +27 -0
- package/dist/src/conversation/session-history.js +1082 -0
- package/dist/src/conversation/session-history.js.map +1 -0
- package/dist/src/conversation/thread-store.d.ts +74 -0
- package/dist/src/conversation/thread-store.js +366 -0
- package/dist/src/conversation/thread-store.js.map +1 -0
- package/dist/src/daemon-config.d.ts +123 -0
- package/dist/src/daemon-config.js +64 -0
- package/dist/src/daemon-config.js.map +1 -0
- package/dist/src/daemon-state.d.ts +27 -0
- package/dist/src/daemon-state.js +76 -0
- package/dist/src/daemon-state.js.map +1 -0
- package/dist/src/git/git-runner.d.ts +24 -0
- package/dist/src/git/git-runner.js +63 -0
- package/dist/src/git/git-runner.js.map +1 -0
- package/dist/src/git/git-service.d.ts +76 -0
- package/dist/src/git/git-service.js +435 -0
- package/dist/src/git/git-service.js.map +1 -0
- package/dist/src/handler-router.d.ts +34 -0
- package/dist/src/handler-router.js +67 -0
- package/dist/src/handler-router.js.map +1 -0
- package/dist/src/handlers/account-handler.d.ts +4 -0
- package/dist/src/handlers/account-handler.js +27 -0
- package/dist/src/handlers/account-handler.js.map +1 -0
- package/dist/src/handlers/agent-handler.d.ts +2 -0
- package/dist/src/handlers/agent-handler.js +8 -0
- package/dist/src/handlers/agent-handler.js.map +1 -0
- package/dist/src/handlers/bridge-control-handler.d.ts +2 -0
- package/dist/src/handlers/bridge-control-handler.js +64 -0
- package/dist/src/handlers/bridge-control-handler.js.map +1 -0
- package/dist/src/handlers/desktop-handler.d.ts +12 -0
- package/dist/src/handlers/desktop-handler.js +5 -0
- package/dist/src/handlers/desktop-handler.js.map +1 -0
- package/dist/src/handlers/git-handler.d.ts +2 -0
- package/dist/src/handlers/git-handler.js +82 -0
- package/dist/src/handlers/git-handler.js.map +1 -0
- package/dist/src/handlers/index.d.ts +8 -0
- package/dist/src/handlers/index.js +22 -0
- package/dist/src/handlers/index.js.map +1 -0
- package/dist/src/handlers/not-implemented.d.ts +10 -0
- package/dist/src/handlers/not-implemented.js +21 -0
- package/dist/src/handlers/not-implemented.js.map +1 -0
- package/dist/src/handlers/notifications-handler.d.ts +2 -0
- package/dist/src/handlers/notifications-handler.js +62 -0
- package/dist/src/handlers/notifications-handler.js.map +1 -0
- package/dist/src/handlers/params.d.ts +11 -0
- package/dist/src/handlers/params.js +72 -0
- package/dist/src/handlers/params.js.map +1 -0
- package/dist/src/handlers/project-handler.d.ts +2 -0
- package/dist/src/handlers/project-handler.js +6 -0
- package/dist/src/handlers/project-handler.js.map +1 -0
- package/dist/src/handlers/thread-context-handler.d.ts +2 -0
- package/dist/src/handlers/thread-context-handler.js +211 -0
- package/dist/src/handlers/thread-context-handler.js.map +1 -0
- package/dist/src/handlers/workspace-handler.d.ts +2 -0
- package/dist/src/handlers/workspace-handler.js +101 -0
- package/dist/src/handlers/workspace-handler.js.map +1 -0
- package/dist/src/hooks/claude-approval-hook.d.ts +7 -0
- package/dist/src/hooks/claude-approval-hook.js +95 -0
- package/dist/src/hooks/claude-approval-hook.js.map +1 -0
- package/dist/src/hooks/gemini-approval-hook.d.ts +7 -0
- package/dist/src/hooks/gemini-approval-hook.js +113 -0
- package/dist/src/hooks/gemini-approval-hook.js.map +1 -0
- package/dist/src/index.d.ts +62 -0
- package/dist/src/index.js +65 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/keyring-secret-store.d.ts +36 -0
- package/dist/src/keyring-secret-store.js +70 -0
- package/dist/src/keyring-secret-store.js.map +1 -0
- package/dist/src/lock-file.d.ts +18 -0
- package/dist/src/lock-file.js +60 -0
- package/dist/src/lock-file.js.map +1 -0
- package/dist/src/logger.d.ts +28 -0
- package/dist/src/logger.js +99 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/pairing/pairing-code-service.d.ts +45 -0
- package/dist/src/pairing/pairing-code-service.js +183 -0
- package/dist/src/pairing/pairing-code-service.js.map +1 -0
- package/dist/src/projects/project-registry.d.ts +14 -0
- package/dist/src/projects/project-registry.js +60 -0
- package/dist/src/projects/project-registry.js.map +1 -0
- package/dist/src/push/push-sender.d.ts +21 -0
- package/dist/src/push/push-sender.js +96 -0
- package/dist/src/push/push-sender.js.map +1 -0
- package/dist/src/push/push-service.d.ts +122 -0
- package/dist/src/push/push-service.js +260 -0
- package/dist/src/push/push-service.js.map +1 -0
- package/dist/src/qr.d.ts +17 -0
- package/dist/src/qr.js +31 -0
- package/dist/src/qr.js.map +1 -0
- package/dist/src/secret-store.d.ts +23 -0
- package/dist/src/secret-store.js +27 -0
- package/dist/src/secret-store.js.map +1 -0
- package/dist/src/secure-device-state.d.ts +16 -0
- package/dist/src/secure-device-state.js +63 -0
- package/dist/src/secure-device-state.js.map +1 -0
- package/dist/src/service-installer.d.ts +57 -0
- package/dist/src/service-installer.js +254 -0
- package/dist/src/service-installer.js.map +1 -0
- package/dist/src/session-state.d.ts +14 -0
- package/dist/src/session-state.js +19 -0
- package/dist/src/session-state.js.map +1 -0
- package/dist/src/transport/crypto.d.ts +43 -0
- package/dist/src/transport/crypto.js +78 -0
- package/dist/src/transport/crypto.js.map +1 -0
- package/dist/src/transport/lan-server.d.ts +33 -0
- package/dist/src/transport/lan-server.js +105 -0
- package/dist/src/transport/lan-server.js.map +1 -0
- package/dist/src/transport/local-hosts.d.ts +17 -0
- package/dist/src/transport/local-hosts.js +30 -0
- package/dist/src/transport/local-hosts.js.map +1 -0
- package/dist/src/transport/mdns-advertiser.d.ts +83 -0
- package/dist/src/transport/mdns-advertiser.js +282 -0
- package/dist/src/transport/mdns-advertiser.js.map +1 -0
- package/dist/src/transport/message-io.d.ts +33 -0
- package/dist/src/transport/message-io.js +87 -0
- package/dist/src/transport/message-io.js.map +1 -0
- package/dist/src/transport/outbound-log.d.ts +24 -0
- package/dist/src/transport/outbound-log.js +78 -0
- package/dist/src/transport/outbound-log.js.map +1 -0
- package/dist/src/transport/relay-client.d.ts +19 -0
- package/dist/src/transport/relay-client.js +27 -0
- package/dist/src/transport/relay-client.js.map +1 -0
- package/dist/src/transport/secure-channel.d.ts +33 -0
- package/dist/src/transport/secure-channel.js +81 -0
- package/dist/src/transport/secure-channel.js.map +1 -0
- package/dist/src/transport/server-handshake.d.ts +49 -0
- package/dist/src/transport/server-handshake.js +137 -0
- package/dist/src/transport/server-handshake.js.map +1 -0
- package/dist/src/transport/session-handler.d.ts +19 -0
- package/dist/src/transport/session-handler.js +134 -0
- package/dist/src/transport/session-handler.js.map +1 -0
- package/dist/src/transport/session-registry.d.ts +58 -0
- package/dist/src/transport/session-registry.js +91 -0
- package/dist/src/transport/session-registry.js.map +1 -0
- package/dist/src/transport/trust-store.d.ts +23 -0
- package/dist/src/transport/trust-store.js +33 -0
- package/dist/src/transport/trust-store.js.map +1 -0
- package/dist/src/transport/ws-adapter.d.ts +7 -0
- package/dist/src/transport/ws-adapter.js +16 -0
- package/dist/src/transport/ws-adapter.js.map +1 -0
- package/dist/src/version.d.ts +1 -0
- package/dist/src/version.js +13 -0
- package/dist/src/version.js.map +1 -0
- package/dist/src/workspace/browse-service.d.ts +10 -0
- package/dist/src/workspace/browse-service.js +97 -0
- package/dist/src/workspace/browse-service.js.map +1 -0
- package/dist/src/workspace/checkpoint-service.d.ts +21 -0
- package/dist/src/workspace/checkpoint-service.js +219 -0
- package/dist/src/workspace/checkpoint-service.js.map +1 -0
- package/dist/src/workspace/path-guard.d.ts +7 -0
- package/dist/src/workspace/path-guard.js +51 -0
- package/dist/src/workspace/path-guard.js.map +1 -0
- package/dist/src/workspace/workspace-service.d.ts +8 -0
- package/dist/src/workspace/workspace-service.js +111 -0
- package/dist/src/workspace/workspace-service.js.map +1 -0
- package/package.json +46 -0
- package/scripts/extract-gemini-hook.mjs +16 -0
- package/scripts/fake-approval-bridge.mjs +23 -0
- package/scripts/install-service-linux.sh +38 -0
- package/scripts/install-service-macos.sh +38 -0
- package/scripts/install-service-windows.ps1 +26 -0
- package/scripts/test-gemini-hook-e2e.mjs +168 -0
- package/scripts/write-gemini-settings.mjs +31 -0
package/dist/src/cli.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* uxnan-bridge CLI.
|
|
4
|
+
*
|
|
5
|
+
* Commands (architecture/02a-system-architecture.md §5.8.5):
|
|
6
|
+
* start start the daemon
|
|
7
|
+
* stop stop the daemon
|
|
8
|
+
* status print current status
|
|
9
|
+
* qr print the pairing QR in the terminal
|
|
10
|
+
* install-service configure autostart on this platform
|
|
11
|
+
*
|
|
12
|
+
* In this skeleton increment `start` boots the daemon core without the live
|
|
13
|
+
* relay/LAN transport; `stop`/`install-service` are deferred (FOR-DEV).
|
|
14
|
+
*/
|
|
15
|
+
import { fileURLToPath } from 'node:url';
|
|
16
|
+
import { encodePairingQr } from '@uxnan/shared';
|
|
17
|
+
import { startBridge } from './bridge.js';
|
|
18
|
+
import { renderPairingQr } from './qr.js';
|
|
19
|
+
import { BRIDGE_VERSION } from './version.js';
|
|
20
|
+
import { DaemonState, DAEMON_FILES } from './daemon-state.js';
|
|
21
|
+
import { LockFile, isProcessAlive } from './lock-file.js';
|
|
22
|
+
import { currentServiceEnv, installService, isServicePlatformSupported, uninstallService, } from './service-installer.js';
|
|
23
|
+
const USAGE = `uxnan-bridge v${BRIDGE_VERSION}
|
|
24
|
+
|
|
25
|
+
Usage: uxnan-bridge <command>
|
|
26
|
+
|
|
27
|
+
Commands:
|
|
28
|
+
start Start the bridge daemon (skeleton: no live transport yet)
|
|
29
|
+
status Print the current bridge status
|
|
30
|
+
qr Print the pairing QR code in the terminal
|
|
31
|
+
code Print the current manual-pairing code (matches the daemon)
|
|
32
|
+
stop Stop the running daemon
|
|
33
|
+
install-service Start the bridge automatically at logon (as the current user)
|
|
34
|
+
uninstall-service Remove the autostart entry
|
|
35
|
+
help Show this help
|
|
36
|
+
`;
|
|
37
|
+
async function cmdQr() {
|
|
38
|
+
const bridge = await startBridge();
|
|
39
|
+
const payload = bridge.generatePairingQr();
|
|
40
|
+
const qr = await renderPairingQr(payload);
|
|
41
|
+
process.stdout.write(`${qr}\n`);
|
|
42
|
+
process.stdout.write('Scan with the Uxnan mobile app.\n');
|
|
43
|
+
process.stdout.write(`Or enter this pairing code on the phone: ${bridge.currentPairingCode()}\n`);
|
|
44
|
+
process.stdout.write(`Expires at: ${new Date(payload.expiresAt).toISOString()}\n`);
|
|
45
|
+
process.stdout.write(`Payload: ${encodePairingQr(payload)}\n`);
|
|
46
|
+
await bridge.stop();
|
|
47
|
+
}
|
|
48
|
+
async function cmdCode() {
|
|
49
|
+
// Prints the current manual-pairing code. Shares the code with a running
|
|
50
|
+
// daemon via `~/.uxnan/pairing-code.json`, so this matches what the daemon
|
|
51
|
+
// serving `/pair/resolve` accepts — handy when the daemon runs hidden (autostart).
|
|
52
|
+
const bridge = await startBridge();
|
|
53
|
+
process.stdout.write(`${bridge.currentPairingCode()}\n`);
|
|
54
|
+
await bridge.stop();
|
|
55
|
+
}
|
|
56
|
+
async function cmdStatus() {
|
|
57
|
+
const bridge = await startBridge();
|
|
58
|
+
process.stdout.write(`${JSON.stringify(bridge.status(), null, 2)}\n`);
|
|
59
|
+
await bridge.stop();
|
|
60
|
+
}
|
|
61
|
+
async function cmdStart() {
|
|
62
|
+
const state = new DaemonState();
|
|
63
|
+
await state.ensureDir();
|
|
64
|
+
const lock = new LockFile(state.pathFor(DAEMON_FILES.lock));
|
|
65
|
+
if (!(await lock.acquire())) {
|
|
66
|
+
const held = await lock.read();
|
|
67
|
+
process.stderr.write(`uxnan-bridge is already running${held ? ` (pid ${held.pid})` : ''}. Run 'uxnan-bridge stop' first.\n`);
|
|
68
|
+
process.exitCode = 1;
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const bridge = await startBridge();
|
|
72
|
+
if (bridge.context.config.lanEnabled) {
|
|
73
|
+
try {
|
|
74
|
+
const { port } = await bridge.startLan();
|
|
75
|
+
process.stdout.write(`LAN server listening on port ${port}.\n`);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
process.stderr.write(`Failed to start LAN server: ${errText(err)}\n`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
const payload = bridge.generatePairingQr();
|
|
82
|
+
const qr = await renderPairingQr(payload);
|
|
83
|
+
process.stdout.write(`${qr}\nScan with the Uxnan mobile app.\n`);
|
|
84
|
+
// Manual-code pairing: this RUNNING daemon serves `GET /pair/resolve`, so its
|
|
85
|
+
// own in-memory code is the one the phone must enter (the `qr` command runs a
|
|
86
|
+
// separate, short-lived process with a different code).
|
|
87
|
+
process.stdout.write(`Or enter this pairing code on the phone: ${bridge.currentPairingCode()}\n`);
|
|
88
|
+
if (payload.hosts && payload.hosts.length > 0) {
|
|
89
|
+
process.stdout.write(`Direct addresses (LAN/Tailscale): ${payload.hosts.join(', ')}\n`);
|
|
90
|
+
}
|
|
91
|
+
if (bridge.context.config.relayEnabled && payload.relay) {
|
|
92
|
+
try {
|
|
93
|
+
await bridge.connectRelay(payload.sessionId);
|
|
94
|
+
process.stdout.write(`Connected to relay ${payload.relay}; waiting for a phone.\n`);
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
process.stderr.write(`Relay connection failed (${errText(err)}); the direct LAN/Tailscale path remains available.\n`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
process.stdout.write('Relay disabled; using the direct LAN/Tailscale path only.\n');
|
|
102
|
+
}
|
|
103
|
+
process.stdout.write('Press Ctrl+C to stop.\n');
|
|
104
|
+
await new Promise((resolve) => {
|
|
105
|
+
const shutdown = () => {
|
|
106
|
+
void Promise.allSettled([bridge.stop(), lock.release()]).then(() => resolve());
|
|
107
|
+
};
|
|
108
|
+
process.once('SIGINT', shutdown);
|
|
109
|
+
process.once('SIGTERM', shutdown);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
async function cmdStop() {
|
|
113
|
+
const state = new DaemonState();
|
|
114
|
+
const lock = new LockFile(state.pathFor(DAEMON_FILES.lock));
|
|
115
|
+
const held = await lock.read();
|
|
116
|
+
if (!held || !isProcessAlive(held.pid)) {
|
|
117
|
+
process.stdout.write('uxnan-bridge is not running.\n');
|
|
118
|
+
await lock.release(held?.pid);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
process.kill(held.pid, 'SIGTERM');
|
|
123
|
+
process.stdout.write(`Sent stop signal to uxnan-bridge (pid ${held.pid}).\n`);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
process.stderr.write(`Failed to stop pid ${held.pid}: ${errText(err)}\n`);
|
|
127
|
+
process.exitCode = 1;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
function errText(err) {
|
|
131
|
+
return err instanceof Error ? err.message : String(err);
|
|
132
|
+
}
|
|
133
|
+
function bridgeCliPath() {
|
|
134
|
+
return fileURLToPath(import.meta.url);
|
|
135
|
+
}
|
|
136
|
+
async function cmdInstallService() {
|
|
137
|
+
if (!isServicePlatformSupported(process.platform)) {
|
|
138
|
+
process.stderr.write(`Autostart is not supported on '${process.platform}'.\n`);
|
|
139
|
+
process.exitCode = 1;
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const plan = await installService(currentServiceEnv(bridgeCliPath()));
|
|
143
|
+
process.stdout.write(`${plan.note}\n`);
|
|
144
|
+
}
|
|
145
|
+
async function cmdUninstallService() {
|
|
146
|
+
if (!isServicePlatformSupported(process.platform)) {
|
|
147
|
+
process.stderr.write(`Autostart is not supported on '${process.platform}'.\n`);
|
|
148
|
+
process.exitCode = 1;
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
const plan = await uninstallService(currentServiceEnv(bridgeCliPath()));
|
|
152
|
+
process.stdout.write(`${plan.uninstallNote}\n`);
|
|
153
|
+
}
|
|
154
|
+
async function main() {
|
|
155
|
+
const command = process.argv[2] ?? 'help';
|
|
156
|
+
switch (command) {
|
|
157
|
+
case 'qr':
|
|
158
|
+
await cmdQr();
|
|
159
|
+
return 0;
|
|
160
|
+
case 'code':
|
|
161
|
+
await cmdCode();
|
|
162
|
+
return 0;
|
|
163
|
+
case 'status':
|
|
164
|
+
await cmdStatus();
|
|
165
|
+
return 0;
|
|
166
|
+
case 'start':
|
|
167
|
+
await cmdStart();
|
|
168
|
+
return 0;
|
|
169
|
+
case 'stop':
|
|
170
|
+
await cmdStop();
|
|
171
|
+
return 0;
|
|
172
|
+
case 'install-service':
|
|
173
|
+
await cmdInstallService();
|
|
174
|
+
return 0;
|
|
175
|
+
case 'uninstall-service':
|
|
176
|
+
await cmdUninstallService();
|
|
177
|
+
return 0;
|
|
178
|
+
case 'help':
|
|
179
|
+
case '--help':
|
|
180
|
+
case '-h':
|
|
181
|
+
process.stdout.write(USAGE);
|
|
182
|
+
return 0;
|
|
183
|
+
default:
|
|
184
|
+
process.stderr.write(`Unknown command: ${command}\n\n${USAGE}`);
|
|
185
|
+
return 1;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
main().then((code) => {
|
|
189
|
+
process.exitCode = code;
|
|
190
|
+
}, (err) => {
|
|
191
|
+
process.stderr.write(`uxnan-bridge error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
192
|
+
process.exitCode = 1;
|
|
193
|
+
});
|
|
194
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Turn } from '@uxnan/shared';
|
|
2
|
+
/** Where a thread's on-disk history lives, as known by the bridge. */
|
|
3
|
+
export interface HistorySource {
|
|
4
|
+
agentId?: string;
|
|
5
|
+
/** The agent's native session id (file locator). */
|
|
6
|
+
agentSessionId?: string;
|
|
7
|
+
/** The thread's working directory (helps disambiguate for some agents). */
|
|
8
|
+
cwd?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SessionHistoryOptions {
|
|
11
|
+
/** Home directory root; overridable in tests to point at a fixtures tree. */
|
|
12
|
+
homeDir?: string;
|
|
13
|
+
/** Injected clock for the path cache TTL (epoch ms). */
|
|
14
|
+
now?: () => number;
|
|
15
|
+
/** Path-cache TTL in ms (default 60s, per §5.8.8). */
|
|
16
|
+
cacheTtlMs?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class SessionHistoryReader {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(options?: SessionHistoryOptions);
|
|
21
|
+
/**
|
|
22
|
+
* Read a thread's turns from the agent's on-disk session log. Returns the full
|
|
23
|
+
* ordered turn list (the caller paginates), or `null` when nothing usable was
|
|
24
|
+
* found (unknown/unsupported agent, missing session id, no file, empty log).
|
|
25
|
+
*/
|
|
26
|
+
readTurns(source: HistorySource, threadId: string): Promise<Turn[] | null>;
|
|
27
|
+
}
|