@kenkaiiii/ggcoder 4.3.199 → 4.3.201
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/core/compaction/compactor.d.ts +11 -0
- package/dist/core/compaction/compactor.d.ts.map +1 -1
- package/dist/core/compaction/compactor.js +14 -0
- package/dist/core/compaction/compactor.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +12 -1
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +1 -0
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +1 -0
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.js +4 -0
- package/dist/tools/edit.test.js.map +1 -1
- package/dist/tools/enter-plan.d.ts.map +1 -1
- package/dist/tools/enter-plan.js +1 -0
- package/dist/tools/enter-plan.js.map +1 -1
- package/dist/tools/exit-plan.d.ts.map +1 -1
- package/dist/tools/exit-plan.js +1 -0
- package/dist/tools/exit-plan.js.map +1 -1
- package/dist/tools/subagent.d.ts.map +1 -1
- package/dist/tools/subagent.js +2 -1
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/tasks.d.ts.map +1 -1
- package/dist/tools/tasks.js +1 -0
- package/dist/tools/tasks.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +1 -0
- package/dist/tools/write.js.map +1 -1
- package/dist/tools/write.test.js +4 -0
- package/dist/tools/write.test.js.map +1 -1
- package/dist/ui/App.d.ts +4 -0
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +22 -38
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/ActivityIndicator.d.ts +9 -1
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +123 -35
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/components/AnimationContext.d.ts +8 -2
- package/dist/ui/components/AnimationContext.d.ts.map +1 -1
- package/dist/ui/components/AnimationContext.js +94 -16
- package/dist/ui/components/AnimationContext.js.map +1 -1
- package/dist/ui/components/CompactionNotice.d.ts +5 -1
- package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
- package/dist/ui/components/CompactionNotice.js +4 -6
- package/dist/ui/components/CompactionNotice.js.map +1 -1
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +5 -6
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +29 -12
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/ServerToolExecution.d.ts +1 -0
- package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ServerToolExecution.js +21 -2
- package/dist/ui/components/ServerToolExecution.js.map +1 -1
- package/dist/ui/components/Spinner.d.ts +3 -1
- package/dist/ui/components/Spinner.d.ts.map +1 -1
- package/dist/ui/components/Spinner.js +10 -4
- package/dist/ui/components/Spinner.js.map +1 -1
- package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
- package/dist/ui/components/SubAgentPanel.js +3 -4
- package/dist/ui/components/SubAgentPanel.js.map +1 -1
- package/dist/ui/components/ToolExecution.d.ts +2 -0
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.js +24 -5
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolGroupExecution.js +23 -2
- package/dist/ui/components/ToolGroupExecution.js.map +1 -1
- package/dist/ui/components/ToolUseLoader.d.ts +4 -2
- package/dist/ui/components/ToolUseLoader.d.ts.map +1 -1
- package/dist/ui/components/ToolUseLoader.js +3 -3
- package/dist/ui/components/ToolUseLoader.js.map +1 -1
- package/dist/ui/components/index.d.ts +1 -1
- package/dist/ui/components/index.d.ts.map +1 -1
- package/dist/ui/components/index.js +1 -1
- package/dist/ui/components/index.js.map +1 -1
- package/dist/ui/hooks/useBlink.d.ts.map +1 -1
- package/dist/ui/hooks/useBlink.js +3 -4
- package/dist/ui/hooks/useBlink.js.map +1 -1
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +3 -2
- package/dist/ui/render.js.map +1 -1
- package/package.json +5 -4
- package/dist/core/bridge-client.d.ts +0 -31
- package/dist/core/bridge-client.d.ts.map +0 -1
- package/dist/core/bridge-client.js +0 -124
- package/dist/core/bridge-client.js.map +0 -1
- package/dist/core/bridge-config.d.ts +0 -8
- package/dist/core/bridge-config.d.ts.map +0 -1
- package/dist/core/bridge-config.js +0 -52
- package/dist/core/bridge-config.js.map +0 -1
- package/dist/core/bridge-protocol.d.ts +0 -76
- package/dist/core/bridge-protocol.d.ts.map +0 -1
- package/dist/core/bridge-protocol.js +0 -30
- package/dist/core/bridge-protocol.js.map +0 -1
- package/dist/core/oauth/gemini.d.ts +0 -4
- package/dist/core/oauth/gemini.d.ts.map +0 -1
- package/dist/core/oauth/gemini.js +0 -293
- package/dist/core/oauth/gemini.js.map +0 -1
- package/dist/core/socket-server.d.ts +0 -15
- package/dist/core/socket-server.d.ts.map +0 -1
- package/dist/core/socket-server.js +0 -140
- package/dist/core/socket-server.js.map +0 -1
- package/dist/modes/bridge-mode.d.ts +0 -22
- package/dist/modes/bridge-mode.d.ts.map +0 -1
- package/dist/modes/bridge-mode.js +0 -281
- package/dist/modes/bridge-mode.js.map +0 -1
- package/dist/ui/buddy/Buddy.d.ts +0 -15
- package/dist/ui/buddy/Buddy.d.ts.map +0 -1
- package/dist/ui/buddy/Buddy.js +0 -118
- package/dist/ui/buddy/Buddy.js.map +0 -1
- package/dist/ui/buddy/gacha.d.ts +0 -8
- package/dist/ui/buddy/gacha.d.ts.map +0 -1
- package/dist/ui/buddy/gacha.js +0 -94
- package/dist/ui/buddy/gacha.js.map +0 -1
- package/dist/ui/buddy/species.d.ts +0 -52
- package/dist/ui/buddy/species.d.ts.map +0 -1
- package/dist/ui/buddy/species.js +0 -257
- package/dist/ui/buddy/species.js.map +0 -1
- package/dist/ui/components/ScrollableContent.d.ts +0 -22
- package/dist/ui/components/ScrollableContent.d.ts.map +0 -1
- package/dist/ui/components/ScrollableContent.js +0 -44
- package/dist/ui/components/ScrollableContent.js.map +0 -1
- package/dist/ui/components/ShimmerLine.d.ts +0 -6
- package/dist/ui/components/ShimmerLine.d.ts.map +0 -1
- package/dist/ui/components/ShimmerLine.js +0 -46
- package/dist/ui/components/ShimmerLine.js.map +0 -1
- package/dist/ui/components/SplashScreen.d.ts +0 -7
- package/dist/ui/components/SplashScreen.d.ts.map +0 -1
- package/dist/ui/components/SplashScreen.js +0 -113
- package/dist/ui/components/SplashScreen.js.map +0 -1
- package/dist/ui/components/ThinkingIndicator.d.ts +0 -6
- package/dist/ui/components/ThinkingIndicator.d.ts.map +0 -1
- package/dist/ui/components/ThinkingIndicator.js +0 -145
- package/dist/ui/components/ThinkingIndicator.js.map +0 -1
- package/dist/ui/hooks/useMouseScroll.d.ts.map +0 -1
- package/dist/ui/hooks/useMouseScroll.js.map +0 -1
- package/dist/ui/hooks/useScrollViewport.d.ts +0 -25
- package/dist/ui/hooks/useScrollViewport.d.ts.map +0 -1
- package/dist/ui/hooks/useScrollViewport.js +0 -32
- package/dist/ui/hooks/useScrollViewport.js.map +0 -1
- package/dist/ui/utils/item-heights.d.ts +0 -17
- package/dist/ui/utils/item-heights.d.ts.map +0 -1
- package/dist/ui/utils/item-heights.js +0 -73
- package/dist/ui/utils/item-heights.js.map +0 -1
- package/dist/ui/utils/scroll-pause.d.ts +0 -13
- package/dist/ui/utils/scroll-pause.d.ts.map +0 -1
- package/dist/ui/utils/sync-output.d.ts +0 -16
- package/dist/ui/utils/sync-output.d.ts.map +0 -1
- package/dist/ui/utils/sync-output.js +0 -70
- package/dist/ui/utils/sync-output.js.map +0 -1
- package/dist/utils/markdown.d.ts +0 -6
- package/dist/utils/markdown.d.ts.map +0 -1
- package/dist/utils/markdown.js +0 -25
- package/dist/utils/markdown.js.map +0 -1
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import crypto from "node:crypto";
|
|
2
|
-
import { MessageType } from "./bridge-protocol.js";
|
|
3
|
-
const HEARTBEAT_INTERVAL = 30000;
|
|
4
|
-
const RECONNECT_INTERVALS = [1000, 2000, 4000, 8000, 16000, 30000];
|
|
5
|
-
export class BridgeClient {
|
|
6
|
-
ws = null;
|
|
7
|
-
url;
|
|
8
|
-
token;
|
|
9
|
-
handlers = new Map();
|
|
10
|
-
reconnectAttempt = 0;
|
|
11
|
-
reconnectTimer = null;
|
|
12
|
-
heartbeatTimer = null;
|
|
13
|
-
agentIds = [];
|
|
14
|
-
onConnectCallback = null;
|
|
15
|
-
onDisconnectCallback = null;
|
|
16
|
-
intentionalClose = false;
|
|
17
|
-
constructor(url, token) {
|
|
18
|
-
this.url = url;
|
|
19
|
-
this.token = token;
|
|
20
|
-
}
|
|
21
|
-
onConnect(callback) {
|
|
22
|
-
this.onConnectCallback = callback;
|
|
23
|
-
}
|
|
24
|
-
onDisconnect(callback) {
|
|
25
|
-
this.onDisconnectCallback = callback;
|
|
26
|
-
}
|
|
27
|
-
connect() {
|
|
28
|
-
this.intentionalClose = false;
|
|
29
|
-
this.doConnect();
|
|
30
|
-
}
|
|
31
|
-
disconnect() {
|
|
32
|
-
this.intentionalClose = true;
|
|
33
|
-
this.clearTimers();
|
|
34
|
-
if (this.ws) {
|
|
35
|
-
this.ws.close();
|
|
36
|
-
this.ws = null;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
send(message) {
|
|
40
|
-
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
41
|
-
this.ws.send(JSON.stringify(message));
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
on(type, handler) {
|
|
45
|
-
if (!this.handlers.has(type)) {
|
|
46
|
-
this.handlers.set(type, new Set());
|
|
47
|
-
}
|
|
48
|
-
this.handlers.get(type).add(handler);
|
|
49
|
-
return () => {
|
|
50
|
-
this.handlers.get(type)?.delete(handler);
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
setAgentIds(ids) {
|
|
54
|
-
this.agentIds = ids;
|
|
55
|
-
}
|
|
56
|
-
/** Generate a unique message ID. */
|
|
57
|
-
static newId() {
|
|
58
|
-
return crypto.randomUUID();
|
|
59
|
-
}
|
|
60
|
-
doConnect() {
|
|
61
|
-
this.clearTimers();
|
|
62
|
-
const sep = this.url.includes("?") ? "&" : "?";
|
|
63
|
-
this.ws = new WebSocket(`${this.url}${sep}token=${this.token}`);
|
|
64
|
-
this.ws.addEventListener("open", () => {
|
|
65
|
-
this.reconnectAttempt = 0;
|
|
66
|
-
this.startHeartbeat();
|
|
67
|
-
this.onConnectCallback?.();
|
|
68
|
-
});
|
|
69
|
-
this.ws.addEventListener("message", (event) => {
|
|
70
|
-
try {
|
|
71
|
-
const message = JSON.parse(String(event.data));
|
|
72
|
-
const handlers = this.handlers.get(message.type);
|
|
73
|
-
if (handlers) {
|
|
74
|
-
for (const handler of handlers) {
|
|
75
|
-
handler(message);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
// Ignore unparseable messages
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
this.ws.addEventListener("close", () => {
|
|
84
|
-
this.clearTimers();
|
|
85
|
-
this.onDisconnectCallback?.();
|
|
86
|
-
if (!this.intentionalClose) {
|
|
87
|
-
this.scheduleReconnect();
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
this.ws.addEventListener("error", () => {
|
|
91
|
-
// Error events are followed by close events — reconnect handled there
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
startHeartbeat() {
|
|
95
|
-
this.heartbeatTimer = setInterval(() => {
|
|
96
|
-
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
97
|
-
this.send({
|
|
98
|
-
id: BridgeClient.newId(),
|
|
99
|
-
type: MessageType.AGENT_HEARTBEAT,
|
|
100
|
-
timestamp: Date.now(),
|
|
101
|
-
agentIds: this.agentIds,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
}, HEARTBEAT_INTERVAL);
|
|
105
|
-
}
|
|
106
|
-
scheduleReconnect() {
|
|
107
|
-
const delay = RECONNECT_INTERVALS[Math.min(this.reconnectAttempt, RECONNECT_INTERVALS.length - 1)];
|
|
108
|
-
this.reconnectTimer = setTimeout(() => {
|
|
109
|
-
this.reconnectAttempt++;
|
|
110
|
-
this.doConnect();
|
|
111
|
-
}, delay);
|
|
112
|
-
}
|
|
113
|
-
clearTimers() {
|
|
114
|
-
if (this.reconnectTimer) {
|
|
115
|
-
clearTimeout(this.reconnectTimer);
|
|
116
|
-
this.reconnectTimer = null;
|
|
117
|
-
}
|
|
118
|
-
if (this.heartbeatTimer) {
|
|
119
|
-
clearInterval(this.heartbeatTimer);
|
|
120
|
-
this.heartbeatTimer = null;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
//# sourceMappingURL=bridge-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-client.js","sourceRoot":"","sources":["../../src/core/bridge-client.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,WAAW,EAAsB,MAAM,sBAAsB,CAAC;AAEvE,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAInE,MAAM,OAAO,YAAY;IACf,EAAE,GAAqB,IAAI,CAAC;IAC5B,GAAG,CAAS;IACZ,KAAK,CAAS;IACd,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IAClD,gBAAgB,GAAG,CAAC,CAAC;IACrB,cAAc,GAAyC,IAAI,CAAC;IAC5D,cAAc,GAA0C,IAAI,CAAC;IAC7D,QAAQ,GAAa,EAAE,CAAC;IACxB,iBAAiB,GAAwB,IAAI,CAAC;IAC9C,oBAAoB,GAAwB,IAAI,CAAC;IACjD,gBAAgB,GAAG,KAAK,CAAC;IAEjC,YAAY,GAAW,EAAE,KAAa;QACpC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,QAAoB;QAC/B,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;IACvC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAsB;QACzB,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACrD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,EAAE,CAAC,IAAY,EAAE,OAAuB;QACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,GAAa;QACvB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;IACtB,CAAC;IAED,oCAAoC;IACpC,MAAM,CAAC,KAAK;QACV,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC/C,IAAI,CAAC,EAAE,GAAG,IAAI,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAEhE,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE;YACpC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YAC5C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAkB,CAAC;gBAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACjD,IAAI,QAAQ,EAAE,CAAC;oBACb,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;wBAC/B,OAAO,CAAC,OAAO,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACrC,sEAAsE;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;gBACrD,IAAI,CAAC,IAAI,CAAC;oBACR,EAAE,EAAE,YAAY,CAAC,KAAK,EAAE;oBACxB,IAAI,EAAE,WAAW,CAAC,eAAe;oBACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACxB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACzB,CAAC;IAEO,iBAAiB;QACvB,MAAM,KAAK,GACT,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;QACxF,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC,EAAE,KAAK,CAAC,CAAC;IACZ,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export interface BridgeConfig {
|
|
2
|
-
relayUrl: string;
|
|
3
|
-
token: string;
|
|
4
|
-
}
|
|
5
|
-
export declare function loadBridgeConfig(): Promise<BridgeConfig | null>;
|
|
6
|
-
export declare function saveBridgeConfig(config: BridgeConfig): Promise<void>;
|
|
7
|
-
export declare function runBridgeSetup(): Promise<BridgeConfig>;
|
|
8
|
-
//# sourceMappingURL=bridge-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-config.d.ts","sourceRoot":"","sources":["../../src/core/bridge-config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CASrE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1E;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC,CA4B5D"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import fs from "node:fs/promises";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import readline from "node:readline/promises";
|
|
4
|
-
import { getAppPaths } from "../config.js";
|
|
5
|
-
function getConfigPath() {
|
|
6
|
-
return path.join(getAppPaths().agentDir, "bridge.json");
|
|
7
|
-
}
|
|
8
|
-
export async function loadBridgeConfig() {
|
|
9
|
-
try {
|
|
10
|
-
const raw = await fs.readFile(getConfigPath(), "utf-8");
|
|
11
|
-
const data = JSON.parse(raw);
|
|
12
|
-
if (data.relayUrl && data.token)
|
|
13
|
-
return data;
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
catch {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
export async function saveBridgeConfig(config) {
|
|
21
|
-
const configPath = getConfigPath();
|
|
22
|
-
await fs.mkdir(path.dirname(configPath), { recursive: true });
|
|
23
|
-
await fs.writeFile(configPath, JSON.stringify(config, null, 2), {
|
|
24
|
-
encoding: "utf-8",
|
|
25
|
-
mode: 0o600,
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
export async function runBridgeSetup() {
|
|
29
|
-
const existing = await loadBridgeConfig();
|
|
30
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
31
|
-
try {
|
|
32
|
-
const defaultUrl = "wss://agent-home-relay.buzzbeamaustralia.workers.dev/ws";
|
|
33
|
-
const urlPrompt = existing
|
|
34
|
-
? ` Relay URL (enter to keep current): `
|
|
35
|
-
: ` Relay URL (enter for default): `;
|
|
36
|
-
const urlInput = await rl.question(urlPrompt);
|
|
37
|
-
const relayUrl = urlInput.trim() || existing?.relayUrl || defaultUrl;
|
|
38
|
-
const tokenPrompt = existing ? ` Bridge token (enter to keep current): ` : ` Bridge token: `;
|
|
39
|
-
const tokenInput = await rl.question(tokenPrompt);
|
|
40
|
-
const token = tokenInput.trim() || existing?.token;
|
|
41
|
-
if (!token) {
|
|
42
|
-
throw new Error("No bridge token provided. Setup cancelled.");
|
|
43
|
-
}
|
|
44
|
-
const config = { relayUrl, token };
|
|
45
|
-
await saveBridgeConfig(config);
|
|
46
|
-
return config;
|
|
47
|
-
}
|
|
48
|
-
finally {
|
|
49
|
-
rl.close();
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=bridge-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-config.js","sourceRoot":"","sources":["../../src/core/bridge-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAO3C,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;QAC7C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAoB;IACzD,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC9D,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAE1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtF,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,yDAAyD,CAAC;QAE7E,MAAM,SAAS,GAAG,QAAQ;YACxB,CAAC,CAAC,uCAAuC;YACzC,CAAC,CAAC,mCAAmC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,QAAQ,EAAE,QAAQ,IAAI,UAAU,CAAC;QAErE,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAC/F,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,QAAQ,EAAE,KAAK,CAAC;QAEnD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,MAAM,GAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACjD,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
export declare enum MessageType {
|
|
2
|
-
CHAT_SEND = "chat.send",
|
|
3
|
-
AGENT_LIST = "agent.list",
|
|
4
|
-
HISTORY_REQUEST = "history.request",
|
|
5
|
-
CHAT_RECEIVE = "chat.receive",
|
|
6
|
-
CHAT_STREAM = "chat.stream",
|
|
7
|
-
CHAT_STREAM_END = "chat.stream.end",
|
|
8
|
-
AGENT_LIST_RESPONSE = "agent.list.response",
|
|
9
|
-
AGENT_STATUS = "agent.status",
|
|
10
|
-
HISTORY_RESPONSE = "history.response",
|
|
11
|
-
ERROR = "error",
|
|
12
|
-
AGENT_REGISTER = "agent.register",
|
|
13
|
-
AGENT_UNREGISTER = "agent.unregister",
|
|
14
|
-
AGENT_HEARTBEAT = "agent.heartbeat",
|
|
15
|
-
CHAT_FORWARD = "chat.forward"
|
|
16
|
-
}
|
|
17
|
-
export declare enum AgentStatus {
|
|
18
|
-
ONLINE = "online",
|
|
19
|
-
OFFLINE = "offline",
|
|
20
|
-
BUSY = "busy"
|
|
21
|
-
}
|
|
22
|
-
export interface BaseMessage {
|
|
23
|
-
id: string;
|
|
24
|
-
type: MessageType;
|
|
25
|
-
timestamp: number;
|
|
26
|
-
}
|
|
27
|
-
export interface AgentInfo {
|
|
28
|
-
id: string;
|
|
29
|
-
name: string;
|
|
30
|
-
description?: string;
|
|
31
|
-
icon?: string;
|
|
32
|
-
capabilities?: string[];
|
|
33
|
-
}
|
|
34
|
-
export interface AgentRegister extends BaseMessage {
|
|
35
|
-
type: MessageType.AGENT_REGISTER;
|
|
36
|
-
agent: AgentInfo;
|
|
37
|
-
}
|
|
38
|
-
export interface AgentUnregister extends BaseMessage {
|
|
39
|
-
type: MessageType.AGENT_UNREGISTER;
|
|
40
|
-
agentId: string;
|
|
41
|
-
}
|
|
42
|
-
export interface AgentHeartbeat extends BaseMessage {
|
|
43
|
-
type: MessageType.AGENT_HEARTBEAT;
|
|
44
|
-
agentIds: string[];
|
|
45
|
-
}
|
|
46
|
-
export interface ChatStream extends BaseMessage {
|
|
47
|
-
type: MessageType.CHAT_STREAM;
|
|
48
|
-
agentId: string;
|
|
49
|
-
token: string;
|
|
50
|
-
messageId: string;
|
|
51
|
-
}
|
|
52
|
-
export interface ChatStreamEnd extends BaseMessage {
|
|
53
|
-
type: MessageType.CHAT_STREAM_END;
|
|
54
|
-
agentId: string;
|
|
55
|
-
messageId: string;
|
|
56
|
-
content: string;
|
|
57
|
-
}
|
|
58
|
-
export interface ChatReceive extends BaseMessage {
|
|
59
|
-
type: MessageType.CHAT_RECEIVE;
|
|
60
|
-
agentId: string;
|
|
61
|
-
content: string;
|
|
62
|
-
messageId: string;
|
|
63
|
-
}
|
|
64
|
-
export interface ChatForward extends BaseMessage {
|
|
65
|
-
type: MessageType.CHAT_FORWARD;
|
|
66
|
-
agentId: string;
|
|
67
|
-
content: string;
|
|
68
|
-
userId: string;
|
|
69
|
-
}
|
|
70
|
-
export interface ErrorMessage extends BaseMessage {
|
|
71
|
-
type: MessageType.ERROR;
|
|
72
|
-
code: string;
|
|
73
|
-
message: string;
|
|
74
|
-
}
|
|
75
|
-
export type BridgeMessage = AgentRegister | AgentUnregister | AgentHeartbeat | ChatStream | ChatStreamEnd | ChatReceive | ChatForward | ErrorMessage;
|
|
76
|
-
//# sourceMappingURL=bridge-protocol.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-protocol.d.ts","sourceRoot":"","sources":["../../src/core/bridge-protocol.ts"],"names":[],"mappings":"AAGA,oBAAY,WAAW;IAErB,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,eAAe,oBAAoB;IAGnC,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,mBAAmB,wBAAwB;IAC3C,YAAY,iBAAiB;IAC7B,gBAAgB,qBAAqB;IACrC,KAAK,UAAU;IAGf,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,eAAe,oBAAoB;IAGnC,YAAY,iBAAiB;CAC9B;AAED,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,IAAI,SAAS;CACd;AAID,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAID,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC;IACjC,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,IAAI,EAAE,WAAW,CAAC,gBAAgB,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,IAAI,EAAE,WAAW,CAAC,eAAe,CAAC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAID,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC7C,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,IAAI,EAAE,WAAW,CAAC,eAAe,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,MAAM,MAAM,aAAa,GACrB,aAAa,GACb,eAAe,GACf,cAAc,GACd,UAAU,GACV,aAAa,GACb,WAAW,GACX,WAAW,GACX,YAAY,CAAC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
// Inlined protocol types for Agent Home bridge communication.
|
|
2
|
-
// Mirrors @agent-home/protocol — no Zod dependency needed on bridge side.
|
|
3
|
-
export var MessageType;
|
|
4
|
-
(function (MessageType) {
|
|
5
|
-
// Client → Relay
|
|
6
|
-
MessageType["CHAT_SEND"] = "chat.send";
|
|
7
|
-
MessageType["AGENT_LIST"] = "agent.list";
|
|
8
|
-
MessageType["HISTORY_REQUEST"] = "history.request";
|
|
9
|
-
// Relay → Client
|
|
10
|
-
MessageType["CHAT_RECEIVE"] = "chat.receive";
|
|
11
|
-
MessageType["CHAT_STREAM"] = "chat.stream";
|
|
12
|
-
MessageType["CHAT_STREAM_END"] = "chat.stream.end";
|
|
13
|
-
MessageType["AGENT_LIST_RESPONSE"] = "agent.list.response";
|
|
14
|
-
MessageType["AGENT_STATUS"] = "agent.status";
|
|
15
|
-
MessageType["HISTORY_RESPONSE"] = "history.response";
|
|
16
|
-
MessageType["ERROR"] = "error";
|
|
17
|
-
// Bridge → Relay
|
|
18
|
-
MessageType["AGENT_REGISTER"] = "agent.register";
|
|
19
|
-
MessageType["AGENT_UNREGISTER"] = "agent.unregister";
|
|
20
|
-
MessageType["AGENT_HEARTBEAT"] = "agent.heartbeat";
|
|
21
|
-
// Relay → Bridge
|
|
22
|
-
MessageType["CHAT_FORWARD"] = "chat.forward";
|
|
23
|
-
})(MessageType || (MessageType = {}));
|
|
24
|
-
export var AgentStatus;
|
|
25
|
-
(function (AgentStatus) {
|
|
26
|
-
AgentStatus["ONLINE"] = "online";
|
|
27
|
-
AgentStatus["OFFLINE"] = "offline";
|
|
28
|
-
AgentStatus["BUSY"] = "busy";
|
|
29
|
-
})(AgentStatus || (AgentStatus = {}));
|
|
30
|
-
//# sourceMappingURL=bridge-protocol.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-protocol.js","sourceRoot":"","sources":["../../src/core/bridge-protocol.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,0EAA0E;AAE1E,MAAM,CAAN,IAAY,WAsBX;AAtBD,WAAY,WAAW;IACrB,iBAAiB;IACjB,sCAAuB,CAAA;IACvB,wCAAyB,CAAA;IACzB,kDAAmC,CAAA;IAEnC,iBAAiB;IACjB,4CAA6B,CAAA;IAC7B,0CAA2B,CAAA;IAC3B,kDAAmC,CAAA;IACnC,0DAA2C,CAAA;IAC3C,4CAA6B,CAAA;IAC7B,oDAAqC,CAAA;IACrC,8BAAe,CAAA;IAEf,iBAAiB;IACjB,gDAAiC,CAAA;IACjC,oDAAqC,CAAA;IACrC,kDAAmC,CAAA;IAEnC,iBAAiB;IACjB,4CAA6B,CAAA;AAC/B,CAAC,EAtBW,WAAW,KAAX,WAAW,QAsBtB;AAED,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,kCAAmB,CAAA;IACnB,4BAAa,CAAA;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { OAuthCredentials, OAuthLoginCallbacks } from "./types.js";
|
|
2
|
-
export declare function loginGemini(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;
|
|
3
|
-
export declare function refreshGeminiToken(refreshToken: string): Promise<OAuthCredentials>;
|
|
4
|
-
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/core/oauth/gemini.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA2BxE,wBAAsB,WAAW,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsB3F;AAqID,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6BxF"}
|
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
import http from "node:http";
|
|
2
|
-
import net from "node:net";
|
|
3
|
-
import crypto from "node:crypto";
|
|
4
|
-
// Public "installed app" client — per RFC 8252 / Google OAuth docs, the
|
|
5
|
-
// embedded secret is not confidential. This is the same client the official
|
|
6
|
-
// Gemini CLI ships with.
|
|
7
|
-
const CLIENT_ID = "681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com";
|
|
8
|
-
const CLIENT_SECRET = "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";
|
|
9
|
-
const AUTHORIZE_URL = "https://accounts.google.com/o/oauth2/v2/auth";
|
|
10
|
-
const TOKEN_URL = "https://oauth2.googleapis.com/token";
|
|
11
|
-
const SCOPES = [
|
|
12
|
-
"https://www.googleapis.com/auth/cloud-platform",
|
|
13
|
-
"https://www.googleapis.com/auth/userinfo.email",
|
|
14
|
-
"https://www.googleapis.com/auth/userinfo.profile",
|
|
15
|
-
].join(" ");
|
|
16
|
-
const CODE_ASSIST_ENDPOINT = "https://cloudcode-pa.googleapis.com";
|
|
17
|
-
const CODE_ASSIST_API_VERSION = "v1internal";
|
|
18
|
-
const CLIENT_METADATA = {
|
|
19
|
-
ideType: "IDE_UNSPECIFIED",
|
|
20
|
-
platform: "PLATFORM_UNSPECIFIED",
|
|
21
|
-
pluginType: "GEMINI",
|
|
22
|
-
};
|
|
23
|
-
// ── Login ──────────────────────────────────────────────────
|
|
24
|
-
export async function loginGemini(callbacks) {
|
|
25
|
-
const port = await getAvailablePort();
|
|
26
|
-
const redirectUri = `http://127.0.0.1:${port}/oauth2callback`;
|
|
27
|
-
const state = crypto.randomBytes(32).toString("hex");
|
|
28
|
-
const url = new URL(AUTHORIZE_URL);
|
|
29
|
-
url.searchParams.set("client_id", CLIENT_ID);
|
|
30
|
-
url.searchParams.set("redirect_uri", redirectUri);
|
|
31
|
-
url.searchParams.set("response_type", "code");
|
|
32
|
-
url.searchParams.set("scope", SCOPES);
|
|
33
|
-
url.searchParams.set("access_type", "offline");
|
|
34
|
-
url.searchParams.set("prompt", "consent");
|
|
35
|
-
url.searchParams.set("state", state);
|
|
36
|
-
const code = await loginWithServer(url.toString(), state, redirectUri, port, callbacks);
|
|
37
|
-
const creds = await exchangeGeminiCode(code, redirectUri);
|
|
38
|
-
callbacks.onStatus("Completing Gemini onboarding...");
|
|
39
|
-
const projectId = await setupUser(creds.accessToken);
|
|
40
|
-
creds.projectId = projectId;
|
|
41
|
-
return creds;
|
|
42
|
-
}
|
|
43
|
-
async function loginWithServer(authUrl, expectedState, redirectUri, port, callbacks) {
|
|
44
|
-
return new Promise((resolve, reject) => {
|
|
45
|
-
let receivedCode = null;
|
|
46
|
-
let receivedError = null;
|
|
47
|
-
let timeoutHandle = null;
|
|
48
|
-
const server = http.createServer((req, res) => {
|
|
49
|
-
const reqUrl = new URL(req.url || "", `http://127.0.0.1:${port}`);
|
|
50
|
-
if (reqUrl.pathname !== "/oauth2callback") {
|
|
51
|
-
res.statusCode = 404;
|
|
52
|
-
res.end("Not found");
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
const err = reqUrl.searchParams.get("error");
|
|
56
|
-
if (err) {
|
|
57
|
-
receivedError = `${err}: ${reqUrl.searchParams.get("error_description") ?? "no description"}`;
|
|
58
|
-
res.writeHead(302, {
|
|
59
|
-
Location: "https://developers.google.com/gemini-code-assist/auth_failure_gemini",
|
|
60
|
-
});
|
|
61
|
-
res.end();
|
|
62
|
-
server.closeAllConnections?.();
|
|
63
|
-
server.close();
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (reqUrl.searchParams.get("state") !== expectedState) {
|
|
67
|
-
receivedError = "OAuth state mismatch — possible CSRF. Please try again.";
|
|
68
|
-
res.statusCode = 400;
|
|
69
|
-
res.end(receivedError);
|
|
70
|
-
server.closeAllConnections?.();
|
|
71
|
-
server.close();
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const code = reqUrl.searchParams.get("code");
|
|
75
|
-
if (!code) {
|
|
76
|
-
receivedError = "No authorization code received from Google.";
|
|
77
|
-
res.statusCode = 400;
|
|
78
|
-
res.end(receivedError);
|
|
79
|
-
server.closeAllConnections?.();
|
|
80
|
-
server.close();
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
receivedCode = code;
|
|
84
|
-
res.writeHead(302, {
|
|
85
|
-
Location: "https://developers.google.com/gemini-code-assist/auth_success_gemini",
|
|
86
|
-
});
|
|
87
|
-
res.end();
|
|
88
|
-
server.closeAllConnections?.();
|
|
89
|
-
server.close();
|
|
90
|
-
});
|
|
91
|
-
server.on("error", (err) => {
|
|
92
|
-
reject(err);
|
|
93
|
-
});
|
|
94
|
-
server.listen(port, "127.0.0.1", () => {
|
|
95
|
-
callbacks.onOpenUrl(authUrl);
|
|
96
|
-
callbacks.onStatus("Waiting for browser callback...");
|
|
97
|
-
});
|
|
98
|
-
server.on("close", () => {
|
|
99
|
-
if (timeoutHandle) {
|
|
100
|
-
clearTimeout(timeoutHandle);
|
|
101
|
-
timeoutHandle = null;
|
|
102
|
-
}
|
|
103
|
-
if (receivedCode) {
|
|
104
|
-
resolve(receivedCode);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
reject(new Error(receivedError ?? "Server closed without receiving code"));
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
timeoutHandle = setTimeout(() => {
|
|
111
|
-
if (!receivedCode && !receivedError) {
|
|
112
|
-
receivedError = "OAuth callback timed out after 2 minutes.";
|
|
113
|
-
server.closeAllConnections?.();
|
|
114
|
-
server.close();
|
|
115
|
-
}
|
|
116
|
-
}, 2 * 60 * 1000);
|
|
117
|
-
// Don't keep the Node event loop alive on the timer alone — once the
|
|
118
|
-
// callback arrives and the server closes, the process should exit.
|
|
119
|
-
timeoutHandle.unref();
|
|
120
|
-
void redirectUri; // referenced above for URL construction
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
async function exchangeGeminiCode(code, redirectUri) {
|
|
124
|
-
const response = await fetch(TOKEN_URL, {
|
|
125
|
-
method: "POST",
|
|
126
|
-
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
127
|
-
body: new URLSearchParams({
|
|
128
|
-
grant_type: "authorization_code",
|
|
129
|
-
client_id: CLIENT_ID,
|
|
130
|
-
client_secret: CLIENT_SECRET,
|
|
131
|
-
code,
|
|
132
|
-
redirect_uri: redirectUri,
|
|
133
|
-
}),
|
|
134
|
-
});
|
|
135
|
-
if (!response.ok) {
|
|
136
|
-
const text = await response.text();
|
|
137
|
-
throw new Error(`Gemini token exchange failed (${response.status}): ${text}`);
|
|
138
|
-
}
|
|
139
|
-
const data = (await response.json());
|
|
140
|
-
return {
|
|
141
|
-
accessToken: data.access_token,
|
|
142
|
-
refreshToken: data.refresh_token,
|
|
143
|
-
expiresAt: Date.now() + data.expires_in * 1000 - 60_000,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
export async function refreshGeminiToken(refreshToken) {
|
|
147
|
-
const response = await fetch(TOKEN_URL, {
|
|
148
|
-
method: "POST",
|
|
149
|
-
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
150
|
-
body: new URLSearchParams({
|
|
151
|
-
grant_type: "refresh_token",
|
|
152
|
-
client_id: CLIENT_ID,
|
|
153
|
-
client_secret: CLIENT_SECRET,
|
|
154
|
-
refresh_token: refreshToken,
|
|
155
|
-
}),
|
|
156
|
-
});
|
|
157
|
-
if (!response.ok) {
|
|
158
|
-
const text = await response.text();
|
|
159
|
-
throw new Error(`Gemini token refresh failed (${response.status}): ${text}`);
|
|
160
|
-
}
|
|
161
|
-
const data = (await response.json());
|
|
162
|
-
return {
|
|
163
|
-
accessToken: data.access_token,
|
|
164
|
-
// Google may omit refresh_token on refresh; keep the existing one.
|
|
165
|
-
refreshToken: data.refresh_token ?? refreshToken,
|
|
166
|
-
expiresAt: Date.now() + data.expires_in * 1000 - 60_000,
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Mirrors the Gemini CLI's `setupUser` flow: loadCodeAssist → onboardUser
|
|
171
|
-
* (poll LRO) → return the managed project ID.
|
|
172
|
-
*/
|
|
173
|
-
async function setupUser(accessToken) {
|
|
174
|
-
const envProject = process.env.GOOGLE_CLOUD_PROJECT || process.env.GOOGLE_CLOUD_PROJECT_ID;
|
|
175
|
-
const loadRes = await codeAssistPost(accessToken, "loadCodeAssist", {
|
|
176
|
-
cloudaicompanionProject: envProject,
|
|
177
|
-
metadata: {
|
|
178
|
-
...CLIENT_METADATA,
|
|
179
|
-
duetProject: envProject,
|
|
180
|
-
},
|
|
181
|
-
});
|
|
182
|
-
// Already onboarded — reuse the managed project.
|
|
183
|
-
if (loadRes.currentTier) {
|
|
184
|
-
if (loadRes.cloudaicompanionProject)
|
|
185
|
-
return loadRes.cloudaicompanionProject;
|
|
186
|
-
if (envProject)
|
|
187
|
-
return envProject;
|
|
188
|
-
throwIneligibleOrMissing(loadRes);
|
|
189
|
-
}
|
|
190
|
-
const tier = loadRes.allowedTiers?.find((t) => t.isDefault) ?? (envProject ? undefined : undefined);
|
|
191
|
-
const tierId = tier?.id ?? "free-tier";
|
|
192
|
-
const onboardReq = tierId === "free-tier"
|
|
193
|
-
? {
|
|
194
|
-
tierId,
|
|
195
|
-
metadata: CLIENT_METADATA,
|
|
196
|
-
}
|
|
197
|
-
: {
|
|
198
|
-
tierId,
|
|
199
|
-
cloudaicompanionProject: envProject,
|
|
200
|
-
metadata: { ...CLIENT_METADATA, duetProject: envProject },
|
|
201
|
-
};
|
|
202
|
-
let lro = await codeAssistPost(accessToken, "onboardUser", onboardReq);
|
|
203
|
-
if (lro.error) {
|
|
204
|
-
throw new Error(`Gemini onboarding failed: ${lro.error.message ?? "unknown error"}`);
|
|
205
|
-
}
|
|
206
|
-
const start = Date.now();
|
|
207
|
-
const MAX_WAIT_MS = 2 * 60 * 1000;
|
|
208
|
-
while (!lro.done && lro.name) {
|
|
209
|
-
if (Date.now() - start > MAX_WAIT_MS) {
|
|
210
|
-
throw new Error("Gemini onboarding timed out (exceeded 2 minutes).");
|
|
211
|
-
}
|
|
212
|
-
await new Promise((r) => setTimeout(r, 5000));
|
|
213
|
-
lro = await codeAssistGetOperation(accessToken, lro.name);
|
|
214
|
-
if (lro.error) {
|
|
215
|
-
throw new Error(`Gemini onboarding failed: ${lro.error.message ?? "unknown error"}`);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
const projectId = lro.response?.cloudaicompanionProject?.id ?? envProject;
|
|
219
|
-
if (!projectId) {
|
|
220
|
-
throwIneligibleOrMissing(loadRes);
|
|
221
|
-
}
|
|
222
|
-
return projectId;
|
|
223
|
-
}
|
|
224
|
-
function throwIneligibleOrMissing(loadRes) {
|
|
225
|
-
if (loadRes.ineligibleTiers && loadRes.ineligibleTiers.length > 0) {
|
|
226
|
-
const reasons = loadRes.ineligibleTiers
|
|
227
|
-
.map((t) => t.reasonMessage ?? t.reasonCode ?? "unknown")
|
|
228
|
-
.join("; ");
|
|
229
|
-
throw new Error(`Gemini account is not eligible: ${reasons}`);
|
|
230
|
-
}
|
|
231
|
-
throw new Error("Gemini onboarding did not return a project ID. Set GOOGLE_CLOUD_PROJECT to a project you own and retry.");
|
|
232
|
-
}
|
|
233
|
-
// For onboarding calls, match the UA that official Google SDKs use — puts the
|
|
234
|
-
// request into the same bucket as cloud-sdk traffic rather than a non-official
|
|
235
|
-
// client bucket with tighter per-user rate limits.
|
|
236
|
-
const CODE_ASSIST_ONBOARD_UA = "google-api-nodejs-client/9.15.1";
|
|
237
|
-
const CODE_ASSIST_API_CLIENT_HEADER = `gl-node/${process.version.replace(/^v/, "")}`;
|
|
238
|
-
async function codeAssistPost(accessToken, method, body) {
|
|
239
|
-
const url = `${CODE_ASSIST_ENDPOINT}/${CODE_ASSIST_API_VERSION}:${method}`;
|
|
240
|
-
const res = await fetch(url, {
|
|
241
|
-
method: "POST",
|
|
242
|
-
headers: {
|
|
243
|
-
"Content-Type": "application/json",
|
|
244
|
-
Authorization: `Bearer ${accessToken}`,
|
|
245
|
-
"User-Agent": CODE_ASSIST_ONBOARD_UA,
|
|
246
|
-
"X-Goog-Api-Client": CODE_ASSIST_API_CLIENT_HEADER,
|
|
247
|
-
},
|
|
248
|
-
body: JSON.stringify(body),
|
|
249
|
-
});
|
|
250
|
-
if (!res.ok) {
|
|
251
|
-
const text = await res.text().catch(() => "");
|
|
252
|
-
throw new Error(`Code Assist ${method} failed (${res.status}): ${text}`);
|
|
253
|
-
}
|
|
254
|
-
return (await res.json());
|
|
255
|
-
}
|
|
256
|
-
async function codeAssistGetOperation(accessToken, name) {
|
|
257
|
-
const url = `${CODE_ASSIST_ENDPOINT}/${CODE_ASSIST_API_VERSION}/${name}`;
|
|
258
|
-
const res = await fetch(url, {
|
|
259
|
-
method: "GET",
|
|
260
|
-
headers: {
|
|
261
|
-
"Content-Type": "application/json",
|
|
262
|
-
Authorization: `Bearer ${accessToken}`,
|
|
263
|
-
"User-Agent": CODE_ASSIST_ONBOARD_UA,
|
|
264
|
-
"X-Goog-Api-Client": CODE_ASSIST_API_CLIENT_HEADER,
|
|
265
|
-
},
|
|
266
|
-
});
|
|
267
|
-
if (!res.ok) {
|
|
268
|
-
const text = await res.text().catch(() => "");
|
|
269
|
-
throw new Error(`Code Assist getOperation failed (${res.status}): ${text}`);
|
|
270
|
-
}
|
|
271
|
-
return (await res.json());
|
|
272
|
-
}
|
|
273
|
-
// ── Helpers ────────────────────────────────────────────────
|
|
274
|
-
function getAvailablePort() {
|
|
275
|
-
return new Promise((resolve, reject) => {
|
|
276
|
-
const envPort = process.env.OAUTH_CALLBACK_PORT;
|
|
277
|
-
if (envPort) {
|
|
278
|
-
const port = parseInt(envPort, 10);
|
|
279
|
-
if (isNaN(port) || port <= 0 || port > 65535) {
|
|
280
|
-
return reject(new Error(`Invalid OAUTH_CALLBACK_PORT: "${envPort}"`));
|
|
281
|
-
}
|
|
282
|
-
return resolve(port);
|
|
283
|
-
}
|
|
284
|
-
const server = net.createServer();
|
|
285
|
-
server.on("error", (err) => reject(err));
|
|
286
|
-
server.listen(0, "127.0.0.1", () => {
|
|
287
|
-
const address = server.address();
|
|
288
|
-
const port = address && typeof address === "object" && "port" in address ? address.port : 0;
|
|
289
|
-
server.close(() => resolve(port));
|
|
290
|
-
});
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
//# sourceMappingURL=gemini.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/core/oauth/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export declare class TaskSocketServer {
|
|
2
|
-
private server;
|
|
3
|
-
private readonly cwd;
|
|
4
|
-
private readonly hash;
|
|
5
|
-
constructor(cwd: string);
|
|
6
|
-
static hashPath(cwd: string): string;
|
|
7
|
-
getSocketPath(): string;
|
|
8
|
-
private getMetaPath;
|
|
9
|
-
start(onPrompt: (text: string) => void): Promise<void>;
|
|
10
|
-
stop(): void;
|
|
11
|
-
private handleLine;
|
|
12
|
-
/** Remove stale sockets whose PID is no longer running. */
|
|
13
|
-
private cleanupStale;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=socket-server.d.ts.map
|