@algochad/archcoder 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -0
- package/bin/cli-entry.js +55 -0
- package/bin/cli-output.js +145 -0
- package/bin/cli.js +5108 -0
- package/bin/cli.test.js +56 -0
- package/dist/apple-touch-icon-120x120.png +0 -0
- package/dist/apple-touch-icon-152x152.png +0 -0
- package/dist/apple-touch-icon-167x167.png +0 -0
- package/dist/apple-touch-icon-180x180.png +0 -0
- package/dist/apple-touch-icon.png +0 -0
- package/dist/apple-touch-icon.svg +67 -0
- package/dist/assets/MultiRunWindow-BZp3MjJP.js +1 -0
- package/dist/assets/SettingsWindow-DoGYXpX7.js +1 -0
- package/dist/assets/TerminalView-BN7BR5Ff.js +3 -0
- package/dist/assets/TimelineDialog-ZQ33oVQR.js +1 -0
- package/dist/assets/ToolOutputDialog-Blv3pnug.js +16 -0
- package/dist/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- package/dist/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/dist/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
- package/dist/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/dist/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
- package/dist/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
- package/dist/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
- package/dist/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
- package/dist/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
- package/dist/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
- package/dist/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
- package/dist/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
- package/dist/assets/index-CtCEGYrr.css +1 -0
- package/dist/assets/index-o_d2wtWC.js +48 -0
- package/dist/assets/main-5QGBtzdq.css +1 -0
- package/dist/assets/main-B6oiMU86.js +8033 -0
- package/dist/assets/vendor--DbVqbJpV.css +1 -0
- package/dist/assets/vendor-.bun-HTKwyaEM.js +10086 -0
- package/dist/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/assets/worker-bqd4RMrj.js +155 -0
- package/dist/favicon-16.png +0 -0
- package/dist/favicon-32.png +0 -0
- package/dist/favicon.png +0 -0
- package/dist/favicon.svg +67 -0
- package/dist/index.html +533 -0
- package/dist/logo-dark-192x192.png +0 -0
- package/dist/logo-dark-512x512.svg +16 -0
- package/dist/logo-light-192x192.png +0 -0
- package/dist/logo-light-512x512.svg +16 -0
- package/dist/pwa-192.png +0 -0
- package/dist/pwa-512.png +0 -0
- package/dist/pwa-maskable-192.png +0 -0
- package/dist/pwa-maskable-512.png +0 -0
- package/dist/site.webmanifest +22 -0
- package/dist/sw.js +1 -0
- package/package.json +107 -0
- package/public/apple-touch-icon-120x120.png +0 -0
- package/public/apple-touch-icon-152x152.png +0 -0
- package/public/apple-touch-icon-167x167.png +0 -0
- package/public/apple-touch-icon-180x180.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/apple-touch-icon.svg +67 -0
- package/public/favicon-16.png +0 -0
- package/public/favicon-32.png +0 -0
- package/public/favicon.png +0 -0
- package/public/favicon.svg +67 -0
- package/public/logo-dark-192x192.png +0 -0
- package/public/logo-dark-512x512.svg +16 -0
- package/public/logo-light-192x192.png +0 -0
- package/public/logo-light-512x512.svg +16 -0
- package/public/pwa-192.png +0 -0
- package/public/pwa-512.png +0 -0
- package/public/pwa-maskable-192.png +0 -0
- package/public/pwa-maskable-512.png +0 -0
- package/public/site.webmanifest +22 -0
- package/server/TERMINAL_INPUT_WS_PROTOCOL.md +44 -0
- package/server/index.d.ts +37 -0
- package/server/index.js +14694 -0
- package/server/lib/cloudflare-tunnel.js +650 -0
- package/server/lib/git/DOCUMENTATION.md +146 -0
- package/server/lib/git/credentials.js +74 -0
- package/server/lib/git/identity-storage.js +110 -0
- package/server/lib/git/index.js +6 -0
- package/server/lib/git/service.js +3117 -0
- package/server/lib/github/DOCUMENTATION.md +170 -0
- package/server/lib/github/auth.js +307 -0
- package/server/lib/github/device-flow.js +50 -0
- package/server/lib/github/index.js +24 -0
- package/server/lib/github/octokit.js +10 -0
- package/server/lib/github/pr-status.js +478 -0
- package/server/lib/github/repo/index.js +55 -0
- package/server/lib/installer/desktop.js +289 -0
- package/server/lib/installer/download.js +208 -0
- package/server/lib/installer/index.js +45 -0
- package/server/lib/installer/platform.js +100 -0
- package/server/lib/notifications/DOCUMENTATION.md +61 -0
- package/server/lib/notifications/index.js +1 -0
- package/server/lib/notifications/message.js +49 -0
- package/server/lib/notifications/message.test.js +59 -0
- package/server/lib/opencode/DOCUMENTATION.md +59 -0
- package/server/lib/opencode/agents.js +634 -0
- package/server/lib/opencode/auth.js +81 -0
- package/server/lib/opencode/commands.js +339 -0
- package/server/lib/opencode/index.js +66 -0
- package/server/lib/opencode/mcp.js +206 -0
- package/server/lib/opencode/providers.js +96 -0
- package/server/lib/opencode/shared.js +527 -0
- package/server/lib/opencode/skills.js +480 -0
- package/server/lib/opencode/tunnel-auth.js +591 -0
- package/server/lib/opencode/ui-auth.js +510 -0
- package/server/lib/package-manager.js +505 -0
- package/server/lib/quota/DOCUMENTATION.md +55 -0
- package/server/lib/quota/index.js +24 -0
- package/server/lib/quota/providers/claude.js +107 -0
- package/server/lib/quota/providers/codex.js +113 -0
- package/server/lib/quota/providers/copilot.js +165 -0
- package/server/lib/quota/providers/google/api.js +92 -0
- package/server/lib/quota/providers/google/auth.js +108 -0
- package/server/lib/quota/providers/google/index.js +124 -0
- package/server/lib/quota/providers/google/transforms.js +109 -0
- package/server/lib/quota/providers/index.js +152 -0
- package/server/lib/quota/providers/interface.js +55 -0
- package/server/lib/quota/providers/kimi.js +108 -0
- package/server/lib/quota/providers/minimax-cn-coding-plan.js +15 -0
- package/server/lib/quota/providers/minimax-coding-plan.js +15 -0
- package/server/lib/quota/providers/minimax-shared.js +136 -0
- package/server/lib/quota/providers/nanogpt.js +124 -0
- package/server/lib/quota/providers/ollama-cloud.js +112 -0
- package/server/lib/quota/providers/openai.js +91 -0
- package/server/lib/quota/providers/openrouter.js +92 -0
- package/server/lib/quota/providers/zai.js +91 -0
- package/server/lib/quota/utils/auth.js +46 -0
- package/server/lib/quota/utils/formatters.js +76 -0
- package/server/lib/quota/utils/index.js +10 -0
- package/server/lib/quota/utils/transformers.js +55 -0
- package/server/lib/skills-catalog/DOCUMENTATION.md +178 -0
- package/server/lib/skills-catalog/cache.js +32 -0
- package/server/lib/skills-catalog/clawdhub/api.js +158 -0
- package/server/lib/skills-catalog/clawdhub/index.js +30 -0
- package/server/lib/skills-catalog/clawdhub/install.js +238 -0
- package/server/lib/skills-catalog/clawdhub/scan.js +113 -0
- package/server/lib/skills-catalog/curated-sources.js +21 -0
- package/server/lib/skills-catalog/git.js +77 -0
- package/server/lib/skills-catalog/index.js +42 -0
- package/server/lib/skills-catalog/install.js +294 -0
- package/server/lib/skills-catalog/scan.js +221 -0
- package/server/lib/skills-catalog/source.js +85 -0
- package/server/lib/terminal/DOCUMENTATION.md +114 -0
- package/server/lib/terminal/index.js +12 -0
- package/server/lib/terminal/input-ws-protocol.js +66 -0
- package/server/lib/terminal/input-ws-protocol.test.js +138 -0
- package/server/lib/tts/DOCUMENTATION.md +134 -0
- package/server/lib/tts/index.js +16 -0
- package/server/lib/tts/service.js +162 -0
- package/server/lib/tts/summarization.js +171 -0
- package/server/lib/tunnels/index.js +166 -0
- package/server/lib/tunnels/providers/cloudflare.js +260 -0
- package/server/lib/tunnels/registry.js +51 -0
- package/server/lib/tunnels/types.js +219 -0
- package/server/lib/utils/lru.js +107 -0
- package/server/lib/utils/sse.js +121 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
export function createSseHandler(options) {
|
|
2
|
+
const {
|
|
3
|
+
idleTimeoutMs = 5 * 60 * 1000,
|
|
4
|
+
heartbeatMs = 30 * 1000,
|
|
5
|
+
onConnect,
|
|
6
|
+
onDisconnect,
|
|
7
|
+
onEvent,
|
|
8
|
+
onError,
|
|
9
|
+
onEnd,
|
|
10
|
+
} = options || {};
|
|
11
|
+
|
|
12
|
+
const clients = new Set();
|
|
13
|
+
const clientStates = new WeakMap();
|
|
14
|
+
|
|
15
|
+
const getOrCreateClientState = (client) => {
|
|
16
|
+
let state = clientStates.get(client);
|
|
17
|
+
if (!state) {
|
|
18
|
+
state = {
|
|
19
|
+
lastActivityAt: Date.now(),
|
|
20
|
+
connectedAt: Date.now(),
|
|
21
|
+
};
|
|
22
|
+
clientStates.set(client, state);
|
|
23
|
+
}
|
|
24
|
+
return state;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const resetIdleTimeout = (client, idleTimer, abortController) => {
|
|
28
|
+
clearTimeout(idleTimer);
|
|
29
|
+
const newTimer = setTimeout(() => {
|
|
30
|
+
const reason = 'idle-timeout';
|
|
31
|
+
if (onEnd) onEnd(reason, client);
|
|
32
|
+
abortController.abort();
|
|
33
|
+
}, idleTimeoutMs);
|
|
34
|
+
return newTimer;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const recordActivity = (client) => {
|
|
38
|
+
const state = clientStates.get(client);
|
|
39
|
+
if (state) {
|
|
40
|
+
state.lastActivityAt = Date.now();
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const registerClient = (client) => {
|
|
45
|
+
clients.add(client);
|
|
46
|
+
getOrCreateClientState(client);
|
|
47
|
+
if (onConnect) onConnect(client);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const unregisterClient = (client) => {
|
|
51
|
+
clients.delete(client);
|
|
52
|
+
clientStates.delete(client);
|
|
53
|
+
if (onDisconnect) onDisconnect(client);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const broadcastEvent = (event) => {
|
|
57
|
+
for (const client of clients) {
|
|
58
|
+
if (onEvent) onEvent(event, client);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const forEachClient = (callback) => {
|
|
63
|
+
for (const client of clients) {
|
|
64
|
+
callback(client);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const getClientState = (client) => {
|
|
69
|
+
return clientStates.get(client);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const setClientSessionId = (client, sessionId) => {
|
|
73
|
+
const state = clientStates.get(client);
|
|
74
|
+
if (state) {
|
|
75
|
+
state.boundSessionId = sessionId;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
const getClientCount = () => {
|
|
80
|
+
return clients.size;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
let globalHeartbeatInterval = null;
|
|
84
|
+
|
|
85
|
+
const startGlobalHeartbeat = () => {
|
|
86
|
+
if (globalHeartbeatInterval) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
globalHeartbeatInterval = setInterval(() => {
|
|
90
|
+
for (const client of clients) {
|
|
91
|
+
if (onEvent) onEvent({ type: 'archcoder:heartbeat', timestamp: Date.now() }, client);
|
|
92
|
+
}
|
|
93
|
+
}, heartbeatMs);
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const stopGlobalHeartbeat = () => {
|
|
97
|
+
if (globalHeartbeatInterval) {
|
|
98
|
+
clearInterval(globalHeartbeatInterval);
|
|
99
|
+
globalHeartbeatInterval = null;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
registerClient,
|
|
105
|
+
unregisterClient,
|
|
106
|
+
recordActivity,
|
|
107
|
+
broadcastEvent,
|
|
108
|
+
forEachClient,
|
|
109
|
+
getClientState,
|
|
110
|
+
setClientSessionId,
|
|
111
|
+
getClientCount,
|
|
112
|
+
startGlobalHeartbeat,
|
|
113
|
+
stopGlobalHeartbeat,
|
|
114
|
+
clients,
|
|
115
|
+
clientStates,
|
|
116
|
+
options: {
|
|
117
|
+
idleTimeoutMs,
|
|
118
|
+
heartbeatMs,
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|