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.
- package/LICENSE +21 -0
- package/README.md +172 -0
- package/bin/oncall.js +303 -0
- package/dist/api.d.ts +1 -0
- package/dist/api.js +23 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +91 -0
- package/dist/cli.js.map +1 -0
- package/dist/code_hierarchy.d.ts +4 -0
- package/dist/code_hierarchy.js +92 -0
- package/dist/code_hierarchy.js.map +1 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -0
- package/dist/helpers/cli-helpers.d.ts +22 -0
- package/dist/helpers/cli-helpers.js +261 -0
- package/dist/helpers/cli-helpers.js.map +1 -0
- package/dist/helpers/config-helpers.js +161 -0
- package/dist/helpers/ripgrep-tool.d.ts +15 -0
- package/dist/helpers/ripgrep-tool.js +110 -0
- package/dist/helpers/ripgrep-tool.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +545 -0
- package/dist/index.js.map +1 -0
- package/dist/logsManager.d.ts +31 -0
- package/dist/logsManager.js +90 -0
- package/dist/logsManager.js.map +1 -0
- package/dist/tools/ripgrep.d.ts +15 -0
- package/dist/tools/ripgrep.js +110 -0
- package/dist/tools/ripgrep.js.map +1 -0
- package/dist/ui-graph.d.ts +1 -0
- package/dist/ui-graph.js +125 -0
- package/dist/ui-graph.js.map +1 -0
- package/dist/useWebSocket.d.ts +21 -0
- package/dist/useWebSocket.js +411 -0
- package/dist/useWebSocket.js.map +1 -0
- package/dist/utils/version-check.d.ts +2 -0
- package/dist/utils/version-check.js +124 -0
- package/dist/utils/version-check.js.map +1 -0
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +22 -0
- package/dist/utils.js.map +1 -0
- package/dist/websocket-server.d.ts +24 -0
- package/dist/websocket-server.js +221 -0
- package/dist/websocket-server.js.map +1 -0
- 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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,SAAS,EAAW,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAoChD,MAAM,YAAY,GAChB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC;AAChE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,WAAW,CAAC;AAE/D,MAAM,OAAO,qBAAqB;IAOhC,YAAY,UAAwC,EAAE;QAN9C,QAAG,GAA2B,IAAI,CAAC;QAC1B,gBAAW,GAAoB,EAAE,CAAC;QAMjD,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,YAAY;YAClC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,YAAY;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO;SAClC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,6EAA6E;YAC7E,OAAO;QACT,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,IAAI,eAAe,CAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAC5C,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAC/C,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAErD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE;oBACvC,MAAM,KAAK,CAAC;gBACd,CAAC,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,6BAA6B;YAC7B,0FAA0F;YAC1F,UAAU;YACV,KAAK;YACL,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;QACxB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;QAEhB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACnB,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9C,CAAC;IAEO,iBAAiB;QACvB,eAAe;IACjB,CAAC;IAEO,gBAAgB,CACtB,MAAiB,EACjB,OAAsD;QAEtD,4BAA4B;QAC5B,qEAAqE;QACrE,KAAK;QACL,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAClC,4BAA4B;YAC5B,0BAA0B;YAC1B,KAAK;QACP,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,oDAAoD;YACpD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,MAAiB,EAAE,GAAY;QACnD,IAAI,OAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,UAAU,GACd,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9D,IAAI,CAAC,UAAU;gBAAE,OAAO;YACxB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,sBAAsB;aAChC,CAAC,CAAC;YACH,gEAAgE;YAChE,OAAO;QACT,CAAC;QAED,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,cAAc,GAClB,SAAS,IAAI,OAAO;oBAClB,CAAC,CAAE,OAAoD,CAAC,OAAO;oBAC/D,CAAC,CAAC,SAAS,CAAC;gBAChB,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;gBAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;wBAChB,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,8CAA8C;qBACxD,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBACD,MAAM,aAAa,GAAG,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBAChB,IAAI,EAAE,cAAc;oBACpB,SAAS,EAAE,OAAO,CAAC,EAAE;oBACrB,uBAAuB,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM;iBACvD,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,iCAAiC,CAAC,CAAA;gBACvC,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CACnC,CAAC;gBACF,IAAI,CAAC,uBAAuB,GAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAA;gBACpE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBAChB,IAAI,EAAE,oBAAoB;oBAC1B,QAAQ,EAAE,aAAa,CAAC,QAAQ;iBACjC,CAAC,CAAC;gBACH,IAAI,CAAC,sCAAsC,CAAC,CAAA;gBAC5C,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBAChB,IAAI,EAAE,KAAK;oBACX,OAAO,EAAE,2BAA2B,OAAO,CAAC,IAAI,GAAG;iBACpD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,MAAiB,EAAE,OAAgC;QAC9D,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wEAAwE;QAC1E,CAAC;IACH,CAAC;IAEO,uBAAuB,CAC7B,OAA+C;QAE/C,IACE,CAAC,OAAO;YACR,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;YAC9B,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ;YACvC,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAChC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,GACR,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;YACrD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE;YACrB,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,SAAS,GACb,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACzE,MAAM,cAAc,GAClB,OAAO,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,MAAM,cAAc,GAClB,OAAO,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO;YACL,EAAE;YACF,WAAW;YACX,IAAI,EAAE,WAAW;YACjB,IAAI;YACJ,SAAS;YACT,cAAc;YACd,cAAc;SACf,CAAC;IACJ,CAAC;IAEO,yBAAyB,CAC/B,OAAmC;QAEnC,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CACnC,CAAC;QACF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,eAAe,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CACjD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CACrC,CAAC;QACF,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;YAClD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,eAAe,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YACtC,CAAC;YACD,eAAe,CAAC,SAAS,GAAG,OAAO,CAAC,SAAU,CAAC;YAC/C,eAAe,CAAC,cAAc,GAAG,OAAO,CAAC,cAAe,CAAC;YACzD,eAAe,CAAC,cAAc,GAAG,OAAO,CAAC,cAAe,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,SAAS,EAAE,OAAO,CAAC,SAAU;gBAC7B,cAAc,EAAE,OAAO,CAAC,cAAe;gBACvC,cAAc,EAAE,OAAO,CAAC,cAAe;aACxC,CAAC,CAAC;QACL,CAAC;QAED,4BAA4B;QAC5B,kHAAkH;QAClH,KAAK;QACL,8DAA8D;QAC9D,6DAA6D;QAE7D,OAAO,aAAa,CAAC;IACvB,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAsC;IAEtC,MAAM,MAAM,GAAG,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACrB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
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
|
+
}
|