pi-codex-tools 0.1.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/CHANGELOG.md +21 -0
- package/CODE_OF_CONDUCT.md +45 -0
- package/CONTRIBUTING.md +35 -0
- package/LICENSE +201 -0
- package/NOTICE +6 -0
- package/README.md +63 -0
- package/SECURITY.md +26 -0
- package/extensions/index.ts +94 -0
- package/index.ts +1 -0
- package/package.json +74 -0
- package/src/apply-patch.ts +652 -0
- package/src/grammar.ts +25 -0
- package/src/index.ts +5 -0
- package/src/install-telemetry.ts +74 -0
- package/src/model-support.ts +12 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { reportInstallTelemetry as report } from "@mocito/install-telemetry";
|
|
5
|
+
import { getAgentDir } from "@earendil-works/pi-coding-agent";
|
|
6
|
+
|
|
7
|
+
const PACKAGE_NAME = "pi-codex-tools";
|
|
8
|
+
const INSTALL_TELEMETRY_ENDPOINT = "https://mocito.dev/api/report-install";
|
|
9
|
+
const CI_ENVIRONMENT_VARIABLES = [
|
|
10
|
+
"APPVEYOR",
|
|
11
|
+
"BITBUCKET_BUILD_NUMBER",
|
|
12
|
+
"BUILDKITE",
|
|
13
|
+
"CIRCLECI",
|
|
14
|
+
"CODESPACES",
|
|
15
|
+
"DRONE",
|
|
16
|
+
"GITHUB_ACTIONS",
|
|
17
|
+
"GITLAB_CI",
|
|
18
|
+
"JENKINS_URL",
|
|
19
|
+
"NETLIFY",
|
|
20
|
+
"TEAMCITY_VERSION",
|
|
21
|
+
"TF_BUILD",
|
|
22
|
+
"TRAVIS",
|
|
23
|
+
"VERCEL",
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
type SettingsDocument = { enableInstallTelemetry?: unknown };
|
|
27
|
+
|
|
28
|
+
function readJsonFile(path: string): unknown {
|
|
29
|
+
try {
|
|
30
|
+
return JSON.parse(readFileSync(path, "utf8")) as unknown;
|
|
31
|
+
} catch {
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function isTruthyEnvFlag(value: string | undefined): boolean {
|
|
37
|
+
if (!value) return false;
|
|
38
|
+
return value === "1" || value.toLowerCase() === "true" || value.toLowerCase() === "yes";
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function isPresentEnvFlag(value: string | undefined): boolean {
|
|
42
|
+
if (!value) return false;
|
|
43
|
+
const normalized = value.toLowerCase();
|
|
44
|
+
return normalized !== "0" && normalized !== "false" && normalized !== "no";
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function isInstallTelemetryEnabled(): boolean {
|
|
48
|
+
if (isTruthyEnvFlag(process.env.CI)) return false;
|
|
49
|
+
if (CI_ENVIRONMENT_VARIABLES.some((name) => isPresentEnvFlag(process.env[name]))) return false;
|
|
50
|
+
if (isTruthyEnvFlag(process.env.PI_OFFLINE)) return false;
|
|
51
|
+
if (process.env.PI_TELEMETRY !== undefined) return isTruthyEnvFlag(process.env.PI_TELEMETRY);
|
|
52
|
+
|
|
53
|
+
const settings = readJsonFile(join(getAgentDir(), "settings.json")) as SettingsDocument;
|
|
54
|
+
return settings.enableInstallTelemetry !== false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function getPackageVersion(): string {
|
|
58
|
+
const packageJson = readJsonFile(fileURLToPath(new URL("../package.json", import.meta.url))) as { version?: unknown };
|
|
59
|
+
return typeof packageJson.version === "string" && packageJson.version.length > 0 ? packageJson.version : "0.0.0";
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function reportInstallTelemetry(): void {
|
|
63
|
+
try {
|
|
64
|
+
void report({
|
|
65
|
+
endpoint: INSTALL_TELEMETRY_ENDPOINT,
|
|
66
|
+
tool: PACKAGE_NAME,
|
|
67
|
+
version: getPackageVersion(),
|
|
68
|
+
statePath: join(getAgentDir(), "extensions", "pi-codex-tools-install.json"),
|
|
69
|
+
enabled: isInstallTelemetryEnabled(),
|
|
70
|
+
}).catch(() => undefined);
|
|
71
|
+
} catch {
|
|
72
|
+
// Best-effort telemetry: ignore local policy and filesystem failures.
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Model } from "@earendil-works/pi-ai";
|
|
2
|
+
|
|
3
|
+
const OPENAI_RESPONSES_APIS = new Set(["openai-codex-responses", "openai-responses"]);
|
|
4
|
+
|
|
5
|
+
export function supportsOpenAIGrammarTools(model: Model<any> | undefined): boolean {
|
|
6
|
+
const compat = model?.compat as { supportsOpenAIGrammarTools?: boolean } | undefined;
|
|
7
|
+
return model !== undefined && OPENAI_RESPONSES_APIS.has(model.api) && compat?.supportsOpenAIGrammarTools === true;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function isOpenAIResponsesApi(api: string | undefined): boolean {
|
|
11
|
+
return api !== undefined && OPENAI_RESPONSES_APIS.has(api);
|
|
12
|
+
}
|