@openhoo/hoopilot 0.3.1 → 0.5.0
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 +132 -67
- package/dist/cli.js +727 -295
- package/dist/cli.js.map +1 -1
- package/dist/codexx.js +98 -0
- package/dist/codexx.js.map +1 -0
- package/dist/index.cjs +556 -265
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +65 -10
- package/dist/index.d.ts +65 -10
- package/dist/index.js +535 -263
- package/dist/index.js.map +1 -1
- package/package.json +7 -2
package/dist/codexx.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
// src/codexx.ts
|
|
4
|
+
import { spawn } from "child_process";
|
|
5
|
+
import { constants as osConstants } from "os";
|
|
6
|
+
var DEFAULT_BASE_URL = "http://127.0.0.1:4141/v1";
|
|
7
|
+
var DEFAULT_API_KEY = "local-key";
|
|
8
|
+
var DEFAULT_CODEX_BIN = "codex";
|
|
9
|
+
var PROXY_ENV_KEYS = [
|
|
10
|
+
"ALL_PROXY",
|
|
11
|
+
"HTTPS_PROXY",
|
|
12
|
+
"HTTP_PROXY",
|
|
13
|
+
"NO_PROXY",
|
|
14
|
+
"all_proxy",
|
|
15
|
+
"https_proxy",
|
|
16
|
+
"http_proxy",
|
|
17
|
+
"no_proxy"
|
|
18
|
+
];
|
|
19
|
+
function buildCodexxInvocation(argv, env = process.env) {
|
|
20
|
+
const baseUrl = env.CODEXX_BASE_URL ?? DEFAULT_BASE_URL;
|
|
21
|
+
const apiKey = env.CODEXX_API_KEY ?? env.HOOPILOT_API_KEY ?? env.OPENAI_API_KEY ?? DEFAULT_API_KEY;
|
|
22
|
+
const command = env.CODEXX_CODEX_BIN ?? DEFAULT_CODEX_BIN;
|
|
23
|
+
return {
|
|
24
|
+
args: [
|
|
25
|
+
"--disable",
|
|
26
|
+
"network_proxy",
|
|
27
|
+
"-c",
|
|
28
|
+
`openai_base_url=${JSON.stringify(baseUrl)}`,
|
|
29
|
+
...argv
|
|
30
|
+
],
|
|
31
|
+
command,
|
|
32
|
+
env: withoutProxyEnv({
|
|
33
|
+
...env,
|
|
34
|
+
OPENAI_API_KEY: apiKey
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function withoutProxyEnv(env) {
|
|
39
|
+
const next = { ...env };
|
|
40
|
+
for (const key of PROXY_ENV_KEYS) {
|
|
41
|
+
delete next[key];
|
|
42
|
+
}
|
|
43
|
+
return next;
|
|
44
|
+
}
|
|
45
|
+
async function main(argv = Bun.argv.slice(2), env = process.env) {
|
|
46
|
+
if (argv.length === 1 && (argv[0] === "--help" || argv[0] === "-h")) {
|
|
47
|
+
console.log(helpText());
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const invocation = buildCodexxInvocation(argv, env);
|
|
51
|
+
const child = spawn(invocation.command, invocation.args, {
|
|
52
|
+
env: invocation.env,
|
|
53
|
+
shell: process.platform === "win32",
|
|
54
|
+
stdio: "inherit"
|
|
55
|
+
});
|
|
56
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
57
|
+
child.once("error", reject);
|
|
58
|
+
child.once("exit", (code, signal) => {
|
|
59
|
+
if (typeof code === "number") {
|
|
60
|
+
resolve(code);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
resolve(signal ? 128 + signalNumber(signal) : 1);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
process.exitCode = exitCode;
|
|
67
|
+
}
|
|
68
|
+
function helpText() {
|
|
69
|
+
return `codexx
|
|
70
|
+
|
|
71
|
+
Run Codex against an already-running local Hoopilot server.
|
|
72
|
+
|
|
73
|
+
Usage:
|
|
74
|
+
codexx [codex options] [prompt]
|
|
75
|
+
|
|
76
|
+
Environment:
|
|
77
|
+
CODEXX_BASE_URL OpenAI-compatible base URL. Default: ${DEFAULT_BASE_URL}
|
|
78
|
+
CODEXX_API_KEY API key sent to the local Hoopilot server.
|
|
79
|
+
HOOPILOT_API_KEY Used as the API key when CODEXX_API_KEY is unset.
|
|
80
|
+
OPENAI_API_KEY Used as the API key when both CODEXX_API_KEY and HOOPILOT_API_KEY are unset.
|
|
81
|
+
CODEXX_CODEX_BIN Codex executable to run. Default: ${DEFAULT_CODEX_BIN}
|
|
82
|
+
|
|
83
|
+
codexx does not start Hoopilot and does not change your shell environment. It disables Codex's network_proxy feature and removes proxy variables only from the spawned Codex process.`;
|
|
84
|
+
}
|
|
85
|
+
function signalNumber(signal) {
|
|
86
|
+
return osConstants.signals[signal] ?? 1;
|
|
87
|
+
}
|
|
88
|
+
if (import.meta.main) {
|
|
89
|
+
main().catch((error) => {
|
|
90
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
91
|
+
process.exit(1);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
export {
|
|
95
|
+
buildCodexxInvocation,
|
|
96
|
+
main
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=codexx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/codexx.ts"],"sourcesContent":["#!/usr/bin/env bun\n\nimport { spawn } from \"node:child_process\";\nimport { constants as osConstants } from \"node:os\";\n\nconst DEFAULT_BASE_URL = \"http://127.0.0.1:4141/v1\";\nconst DEFAULT_API_KEY = \"local-key\";\nconst DEFAULT_CODEX_BIN = \"codex\";\nconst PROXY_ENV_KEYS = [\n \"ALL_PROXY\",\n \"HTTPS_PROXY\",\n \"HTTP_PROXY\",\n \"NO_PROXY\",\n \"all_proxy\",\n \"https_proxy\",\n \"http_proxy\",\n \"no_proxy\",\n];\n\nexport interface CodexxInvocation {\n args: string[];\n command: string;\n env: NodeJS.ProcessEnv;\n}\n\nexport function buildCodexxInvocation(\n argv: string[],\n env: NodeJS.ProcessEnv = process.env,\n): CodexxInvocation {\n const baseUrl = env.CODEXX_BASE_URL ?? DEFAULT_BASE_URL;\n const apiKey =\n env.CODEXX_API_KEY ?? env.HOOPILOT_API_KEY ?? env.OPENAI_API_KEY ?? DEFAULT_API_KEY;\n const command = env.CODEXX_CODEX_BIN ?? DEFAULT_CODEX_BIN;\n\n return {\n args: [\n \"--disable\",\n \"network_proxy\",\n \"-c\",\n `openai_base_url=${JSON.stringify(baseUrl)}`,\n ...argv,\n ],\n command,\n env: withoutProxyEnv({\n ...env,\n OPENAI_API_KEY: apiKey,\n }),\n };\n}\n\nfunction withoutProxyEnv(env: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n const next = { ...env };\n for (const key of PROXY_ENV_KEYS) {\n delete next[key];\n }\n return next;\n}\n\nexport async function main(argv = Bun.argv.slice(2), env = process.env): Promise<void> {\n if (argv.length === 1 && (argv[0] === \"--help\" || argv[0] === \"-h\")) {\n console.log(helpText());\n return;\n }\n\n const invocation = buildCodexxInvocation(argv, env);\n const child = spawn(invocation.command, invocation.args, {\n env: invocation.env,\n shell: process.platform === \"win32\",\n stdio: \"inherit\",\n });\n\n const exitCode = await new Promise<number>((resolve, reject) => {\n child.once(\"error\", reject);\n child.once(\"exit\", (code, signal) => {\n if (typeof code === \"number\") {\n resolve(code);\n return;\n }\n resolve(signal ? 128 + signalNumber(signal) : 1);\n });\n });\n\n process.exitCode = exitCode;\n}\n\nfunction helpText(): string {\n return `codexx\n\nRun Codex against an already-running local Hoopilot server.\n\nUsage:\n codexx [codex options] [prompt]\n\nEnvironment:\n CODEXX_BASE_URL OpenAI-compatible base URL. Default: ${DEFAULT_BASE_URL}\n CODEXX_API_KEY API key sent to the local Hoopilot server.\n HOOPILOT_API_KEY Used as the API key when CODEXX_API_KEY is unset.\n OPENAI_API_KEY Used as the API key when both CODEXX_API_KEY and HOOPILOT_API_KEY are unset.\n CODEXX_CODEX_BIN Codex executable to run. Default: ${DEFAULT_CODEX_BIN}\n\ncodexx does not start Hoopilot and does not change your shell environment. It disables Codex's network_proxy feature and removes proxy variables only from the spawned Codex process.`;\n}\n\nfunction signalNumber(signal: NodeJS.Signals): number {\n return osConstants.signals[signal] ?? 1;\n}\n\nif (import.meta.main) {\n main().catch((error: unknown) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n });\n}\n"],"mappings":";;;AAEA,SAAS,aAAa;AACtB,SAAS,aAAa,mBAAmB;AAEzC,IAAM,mBAAmB;AACzB,IAAM,kBAAkB;AACxB,IAAM,oBAAoB;AAC1B,IAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQO,SAAS,sBACd,MACA,MAAyB,QAAQ,KACf;AAClB,QAAM,UAAU,IAAI,mBAAmB;AACvC,QAAM,SACJ,IAAI,kBAAkB,IAAI,oBAAoB,IAAI,kBAAkB;AACtE,QAAM,UAAU,IAAI,oBAAoB;AAExC,SAAO;AAAA,IACL,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA,mBAAmB,KAAK,UAAU,OAAO,CAAC;AAAA,MAC1C,GAAG;AAAA,IACL;AAAA,IACA;AAAA,IACA,KAAK,gBAAgB;AAAA,MACnB,GAAG;AAAA,MACH,gBAAgB;AAAA,IAClB,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gBAAgB,KAA2C;AAClE,QAAM,OAAO,EAAE,GAAG,IAAI;AACtB,aAAW,OAAO,gBAAgB;AAChC,WAAO,KAAK,GAAG;AAAA,EACjB;AACA,SAAO;AACT;AAEA,eAAsB,KAAK,OAAO,IAAI,KAAK,MAAM,CAAC,GAAG,MAAM,QAAQ,KAAoB;AACrF,MAAI,KAAK,WAAW,MAAM,KAAK,CAAC,MAAM,YAAY,KAAK,CAAC,MAAM,OAAO;AACnE,YAAQ,IAAI,SAAS,CAAC;AACtB;AAAA,EACF;AAEA,QAAM,aAAa,sBAAsB,MAAM,GAAG;AAClD,QAAM,QAAQ,MAAM,WAAW,SAAS,WAAW,MAAM;AAAA,IACvD,KAAK,WAAW;AAAA,IAChB,OAAO,QAAQ,aAAa;AAAA,IAC5B,OAAO;AAAA,EACT,CAAC;AAED,QAAM,WAAW,MAAM,IAAI,QAAgB,CAAC,SAAS,WAAW;AAC9D,UAAM,KAAK,SAAS,MAAM;AAC1B,UAAM,KAAK,QAAQ,CAAC,MAAM,WAAW;AACnC,UAAI,OAAO,SAAS,UAAU;AAC5B,gBAAQ,IAAI;AACZ;AAAA,MACF;AACA,cAAQ,SAAS,MAAM,aAAa,MAAM,IAAI,CAAC;AAAA,IACjD,CAAC;AAAA,EACH,CAAC;AAED,UAAQ,WAAW;AACrB;AAEA,SAAS,WAAmB;AAC1B,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8DAQqD,gBAAgB;AAAA;AAAA;AAAA;AAAA,2DAInB,iBAAiB;AAAA;AAAA;AAG5E;AAEA,SAAS,aAAa,QAAgC;AACpD,SAAO,YAAY,QAAQ,MAAM,KAAK;AACxC;AAEA,IAAI,YAAY,MAAM;AACpB,OAAK,EAAE,MAAM,CAAC,UAAmB;AAC/B,YAAQ,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AACpE,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AACH;","names":[]}
|