oncall-cli 2.0.1

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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +172 -0
  3. package/bin/oncall.js +303 -0
  4. package/dist/api.d.ts +1 -0
  5. package/dist/api.js +23 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.js +91 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/code_hierarchy.d.ts +4 -0
  11. package/dist/code_hierarchy.js +92 -0
  12. package/dist/code_hierarchy.js.map +1 -0
  13. package/dist/config.d.ts +9 -0
  14. package/dist/config.js +12 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/helpers/cli-helpers.d.ts +22 -0
  17. package/dist/helpers/cli-helpers.js +261 -0
  18. package/dist/helpers/cli-helpers.js.map +1 -0
  19. package/dist/helpers/config-helpers.js +161 -0
  20. package/dist/helpers/ripgrep-tool.d.ts +15 -0
  21. package/dist/helpers/ripgrep-tool.js +110 -0
  22. package/dist/helpers/ripgrep-tool.js.map +1 -0
  23. package/dist/index.d.ts +3 -0
  24. package/dist/index.js +545 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/logsManager.d.ts +31 -0
  27. package/dist/logsManager.js +90 -0
  28. package/dist/logsManager.js.map +1 -0
  29. package/dist/tools/ripgrep.d.ts +15 -0
  30. package/dist/tools/ripgrep.js +110 -0
  31. package/dist/tools/ripgrep.js.map +1 -0
  32. package/dist/ui-graph.d.ts +1 -0
  33. package/dist/ui-graph.js +125 -0
  34. package/dist/ui-graph.js.map +1 -0
  35. package/dist/useWebSocket.d.ts +21 -0
  36. package/dist/useWebSocket.js +411 -0
  37. package/dist/useWebSocket.js.map +1 -0
  38. package/dist/utils/version-check.d.ts +2 -0
  39. package/dist/utils/version-check.js +124 -0
  40. package/dist/utils/version-check.js.map +1 -0
  41. package/dist/utils.d.ts +1 -0
  42. package/dist/utils.js +22 -0
  43. package/dist/utils.js.map +1 -0
  44. package/dist/websocket-server.d.ts +24 -0
  45. package/dist/websocket-server.js +221 -0
  46. package/dist/websocket-server.js.map +1 -0
  47. package/package.json +46 -0
@@ -0,0 +1,221 @@
1
+ import { once } from "events";
2
+ import { WebSocketServer, WebSocket } from "ws";
3
+ import { logd } from "./helpers/cli-helpers.js";
4
+ const DEFAULT_PORT = Number.parseInt(process.env.ONCALL_WS_PORT ?? "", 10) || 6111;
5
+ const DEFAULT_HOST = process.env.ONCALL_WS_HOST || "127.0.0.1";
6
+ export class OnCallWebSocketServer {
7
+ constructor(options = {}) {
8
+ this.wss = null;
9
+ this.allProjects = [];
10
+ this.options = {
11
+ port: options.port ?? DEFAULT_PORT,
12
+ host: options.host ?? DEFAULT_HOST,
13
+ logger: options.logger ?? console,
14
+ };
15
+ }
16
+ get address() {
17
+ if (!this.wss)
18
+ return null;
19
+ const addr = this.wss.address();
20
+ return typeof addr === "string" || addr === null ? null : addr;
21
+ }
22
+ async start() {
23
+ if (this.wss) {
24
+ // this.options.logger.warn("Attempted to start an already running server.");
25
+ return;
26
+ }
27
+ this.wss = new WebSocketServer({
28
+ host: this.options.host,
29
+ port: this.options.port,
30
+ });
31
+ this.wss.on("connection", (socket, request) => this.handleConnection(socket, request.headers));
32
+ this.wss.on("close", () => this.handleServerClose());
33
+ try {
34
+ await Promise.race([
35
+ once(this.wss, "listening"),
36
+ once(this.wss, "error").then(([error]) => {
37
+ throw error;
38
+ }),
39
+ ]);
40
+ }
41
+ catch (error) {
42
+ // this.options.logger.error(
43
+ // `Failed to start WebSocket server on ws://${this.options.host}:${this.options.port}`,
44
+ // error
45
+ // );
46
+ await this.stop();
47
+ throw error;
48
+ }
49
+ }
50
+ async stop() {
51
+ if (!this.wss) {
52
+ return;
53
+ }
54
+ const server = this.wss;
55
+ this.wss = null;
56
+ await new Promise((resolve, reject) => {
57
+ server.close((err) => {
58
+ if (err) {
59
+ reject(err);
60
+ }
61
+ else {
62
+ resolve();
63
+ }
64
+ });
65
+ });
66
+ this.options.logger.info("Server stopped.");
67
+ }
68
+ handleServerClose() {
69
+ // noop for now
70
+ }
71
+ handleConnection(socket, headers) {
72
+ // this.options.logger.info(
73
+ // `Client connected from ${headers["x-forwarded-for"] || "local"}`
74
+ // );
75
+ socket.on("message", (data) => this.handleMessage(socket, data));
76
+ socket.on("close", (code, reason) => {
77
+ // this.options.logger.info(
78
+ // `Client disconnected`
79
+ // );
80
+ });
81
+ socket.on("error", (error) => {
82
+ // this.options.logger.warn("Client error:", error);
83
+ socket.close(1011, "internal_error");
84
+ });
85
+ }
86
+ handleMessage(socket, raw) {
87
+ let payload;
88
+ try {
89
+ const serialized = typeof raw === "string" ? raw : raw.toString("utf8").trim();
90
+ if (!serialized)
91
+ return;
92
+ payload = JSON.parse(serialized);
93
+ }
94
+ catch (error) {
95
+ this.send(socket, {
96
+ type: "error",
97
+ message: "Invalid JSON payload",
98
+ });
99
+ // this.options.logger.warn("Invalid payload received:", error);
100
+ return;
101
+ }
102
+ switch (payload.type) {
103
+ case "register": {
104
+ const projectPayload = "project" in payload
105
+ ? payload.project
106
+ : undefined;
107
+ const project = this.normalizeProjectPayload(projectPayload);
108
+ if (!project) {
109
+ this.send(socket, {
110
+ type: "error",
111
+ message: "Invalid project payload for register channel",
112
+ });
113
+ return;
114
+ }
115
+ const projectRecord = this.upsertProjectRegistration(project);
116
+ this.send(socket, {
117
+ type: "register_ack",
118
+ projectId: project.id,
119
+ totalRegisteredProjects: projectRecord.projects.length,
120
+ });
121
+ break;
122
+ }
123
+ case "fetch_projects": {
124
+ logd("Received the fetch_projects_req");
125
+ let projectRecord = this.allProjects.find((entry) => entry.id === payload.id);
126
+ logd("Found the following: " + JSON.stringify(projectRecord.projects));
127
+ this.send(socket, {
128
+ type: "fetch_projects_ack",
129
+ projects: projectRecord.projects
130
+ });
131
+ logd("Sent the response for fetch_projects");
132
+ break;
133
+ }
134
+ default: {
135
+ this.send(socket, {
136
+ type: "ack",
137
+ message: `Unhandled message type "${payload.type}"`,
138
+ });
139
+ }
140
+ }
141
+ }
142
+ send(socket, message) {
143
+ if (socket.readyState !== WebSocket.OPEN) {
144
+ return;
145
+ }
146
+ try {
147
+ socket.send(JSON.stringify(message));
148
+ }
149
+ catch (error) {
150
+ // this.options.logger.warn("Failed to send message to client:", error);
151
+ }
152
+ }
153
+ normalizeProjectPayload(payload) {
154
+ if (!payload ||
155
+ typeof payload.id !== "string" ||
156
+ typeof payload.description !== "string" ||
157
+ typeof payload.path !== "string") {
158
+ return null;
159
+ }
160
+ const id = payload.id.trim();
161
+ const description = payload.description.trim();
162
+ const projectPath = payload.path.trim();
163
+ const name = typeof payload.name === "string" && payload.name.trim()
164
+ ? payload.name.trim()
165
+ : undefined;
166
+ const window_id = typeof payload.window_id === "number" ? payload.window_id : Date.now();
167
+ const logs_available = typeof payload.logs_available === "boolean" ? payload.logs_available : true;
168
+ const code_available = typeof payload.code_available === "boolean" ? payload.code_available : true;
169
+ if (!id || !description || !projectPath) {
170
+ return null;
171
+ }
172
+ return {
173
+ id,
174
+ description,
175
+ path: projectPath,
176
+ name,
177
+ window_id,
178
+ logs_available,
179
+ code_available,
180
+ };
181
+ }
182
+ upsertProjectRegistration(project) {
183
+ let projectRecord = this.allProjects.find((entry) => entry.id === project.id);
184
+ if (!projectRecord) {
185
+ projectRecord = { id: project.id, projects: [] };
186
+ this.allProjects.push(projectRecord);
187
+ }
188
+ const existingProject = projectRecord.projects.find((item) => item.path === project.path);
189
+ if (existingProject) {
190
+ existingProject.description = project.description;
191
+ if (project.name) {
192
+ existingProject.name = project.name;
193
+ }
194
+ existingProject.window_id = project.window_id;
195
+ existingProject.logs_available = project.logs_available;
196
+ existingProject.code_available = project.code_available;
197
+ }
198
+ else {
199
+ projectRecord.projects.push({
200
+ path: project.path,
201
+ description: project.description,
202
+ name: project.name,
203
+ window_id: project.window_id,
204
+ logs_available: project.logs_available,
205
+ code_available: project.code_available,
206
+ });
207
+ }
208
+ // this.options.logger.info(
209
+ // `Registered project "${project.id}" -> ${project.path} (total directories: ${projectRecord.projects.length})`
210
+ // );
211
+ // const snapshot = JSON.stringify(this.allProjects, null, 2);
212
+ // this.options.logger.info(`Current projects: ${snapshot}`);
213
+ return projectRecord;
214
+ }
215
+ }
216
+ export async function startOnCallWebSocketServer(options) {
217
+ const server = new OnCallWebSocketServer(options);
218
+ await server.start();
219
+ return server;
220
+ }
221
+ //# sourceMappingURL=websocket-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-server.js","sourceRoot":"","sources":["../websocket-server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "oncall-cli",
3
+ "version": "2.0.1",
4
+ "type": "module",
5
+ "bin": {
6
+ "oncall": "bin/oncall.js"
7
+ },
8
+ "files": [
9
+ "bin/",
10
+ "dist/",
11
+ "README.md",
12
+ "LICENSE"
13
+ ],
14
+ "scripts": {
15
+ "start": "tsx index.tsx",
16
+ "dev": "tsx index.tsx",
17
+ "code-hierarchy": "tsx code_hierarchy.ts",
18
+ "build": "tsc && npm run copy-js",
19
+ "copy-js": "mkdir -p dist/helpers && cp helpers/config-helpers.js dist/helpers/config-helpers.js",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "dependencies": {
23
+ "@langchain/core": "^1.1.0",
24
+ "@types/ws": "^8.18.1",
25
+ "axios": "^1.12.2",
26
+ "dotenv": "^17.2.3",
27
+ "ignore": "^5.3.2",
28
+ "ink": "^6.3.1",
29
+ "ink-spinner": "^5.0.0",
30
+ "ink-text-input": "^6.0.0",
31
+ "langchain": "^1.1.1",
32
+ "marked": "^15.0.0",
33
+ "marked-terminal": "^7.3.0",
34
+ "node-pty": "^1.0.0",
35
+ "react": "^19.2.0",
36
+ "ripgrep-node": "^1.0.0",
37
+ "ws": "^8.18.3",
38
+ "yaml": "^2.8.2"
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^24.9.1",
42
+ "@types/react": "^19.1.13",
43
+ "tsx": "^4.19.2",
44
+ "typescript": "^5.9.3"
45
+ }
46
+ }