@juya-ai/tokscale-cli 4.0.5

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/bin.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ await import("./dist/index.js");
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,180 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync, execSync } from "node:child_process";
3
+ import { existsSync, readdirSync, realpathSync } from "node:fs";
4
+ import { resolve, join, basename } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ const binaryName = process.platform === "win32" ? "tokscale.exe" : "tokscale";
7
+ const currentDir = fileURLToPath(new URL(".", import.meta.url));
8
+ const dirName = basename(currentDir);
9
+ // In npm install: currentDir = .../node_modules/@juya-ai/tokscale-cli/dist/
10
+ // cliDir = .../node_modules/@juya-ai/tokscale-cli/
11
+ // scopeDir = .../node_modules/@juya-ai/
12
+ // In monorepo dev (dist): currentDir = .../packages/cli/dist/
13
+ // cliDir = .../packages/cli/
14
+ // scopeDir = .../packages/
15
+ // In monorepo dev (src): currentDir = .../packages/cli/src/
16
+ // cliDir = .../packages/cli/
17
+ // scopeDir = .../packages/
18
+ const isSubDir = dirName === "dist" || dirName === "src";
19
+ const cliDir = isSubDir ? resolve(currentDir, "..") : currentDir;
20
+ const scopeDir = resolve(cliDir, "..");
21
+ const workspaceRoot = resolve(scopeDir, "..");
22
+ function detectLibcKind() {
23
+ const override = process.env.TOKSCALE_LIBC?.trim().toLowerCase();
24
+ if (override === "musl")
25
+ return "musl";
26
+ if (override === "gnu" || override === "glibc")
27
+ return "gnu";
28
+ const report = process.report?.getReport?.();
29
+ if (report?.header?.glibcVersionRuntime) {
30
+ return "gnu";
31
+ }
32
+ if (Array.isArray(report?.sharedObjects) &&
33
+ report.sharedObjects.some((obj) => obj.toLowerCase().includes("musl"))) {
34
+ return "musl";
35
+ }
36
+ // Bun reports neither glibcVersionRuntime nor sharedObjects, but its
37
+ // release.sourceUrl names the build flavor (e.g. bun-linux-x64-musl-baseline.zip).
38
+ if (report?.header?.release?.sourceUrl?.toLowerCase().includes("musl")) {
39
+ return "musl";
40
+ }
41
+ try {
42
+ const output = execSync("ldd --version", {
43
+ encoding: "utf-8",
44
+ stdio: ["ignore", "pipe", "pipe"],
45
+ }).toLowerCase();
46
+ if (output.includes("musl"))
47
+ return "musl";
48
+ if (output.includes("glibc") || output.includes("gnu"))
49
+ return "gnu";
50
+ }
51
+ catch (error) {
52
+ // musl's ldd rejects --version: it prints "musl libc" to stderr and
53
+ // exits non-zero, so the answer is in the error, not the output.
54
+ const { stdout, stderr } = (error ?? {});
55
+ const combined = `${stdout ?? ""}\n${stderr ?? ""}`.toLowerCase();
56
+ if (combined.includes("musl"))
57
+ return "musl";
58
+ if (combined.includes("glibc") || combined.includes("gnu"))
59
+ return "gnu";
60
+ }
61
+ // ldd missing or inconclusive: look for dynamic loaders. Either loader
62
+ // can coexist with the other's libc (Debian's musl package installs
63
+ // ld-musl-*; Alpine's gcompat installs ld-linux-*), so when both are
64
+ // present, let the distro break the tie.
65
+ const hasGnuLoader = loaderPresent("ld-linux-");
66
+ const hasMuslLoader = loaderPresent("ld-musl-");
67
+ if (hasGnuLoader !== hasMuslLoader)
68
+ return hasMuslLoader ? "musl" : "gnu";
69
+ if (hasGnuLoader && hasMuslLoader) {
70
+ return existsSync("/etc/alpine-release") ? "musl" : "gnu";
71
+ }
72
+ return null;
73
+ }
74
+ // Glibc ships ld-linux-*.so.* in /lib64 (or /lib on some arches); musl
75
+ // distros (Alpine, Void-musl, ...) ship /lib/ld-musl-<arch>.so.1.
76
+ function loaderPresent(prefix) {
77
+ for (const dir of ["/lib", "/lib64"]) {
78
+ try {
79
+ if (readdirSync(dir).some((entry) => entry.startsWith(prefix))) {
80
+ return true;
81
+ }
82
+ }
83
+ catch {
84
+ // Directory unreadable or missing; try the next one.
85
+ }
86
+ }
87
+ return false;
88
+ }
89
+ function resolveTargetPackageName() {
90
+ const arch = process.arch;
91
+ if (process.platform === "darwin") {
92
+ if (arch === "arm64")
93
+ return "cli-darwin-arm64";
94
+ return null;
95
+ }
96
+ if (process.platform === "linux") {
97
+ const libc = detectLibcKind();
98
+ if (arch === "x64" && libc === "gnu")
99
+ return "cli-linux-x64-gnu";
100
+ return null;
101
+ }
102
+ if (process.platform === "win32") {
103
+ if (arch === "x64")
104
+ return "cli-win32-x64-msvc";
105
+ return null;
106
+ }
107
+ return null;
108
+ }
109
+ function resolveRustTargetTriple() {
110
+ const arch = process.arch;
111
+ if (process.platform === "darwin") {
112
+ if (arch === "arm64")
113
+ return "aarch64-apple-darwin";
114
+ return null;
115
+ }
116
+ if (process.platform === "linux") {
117
+ const libc = detectLibcKind();
118
+ if (arch === "x64" && libc === "gnu")
119
+ return "x86_64-unknown-linux-gnu";
120
+ return null;
121
+ }
122
+ if (process.platform === "win32") {
123
+ if (arch === "x64")
124
+ return "x86_64-pc-windows-msvc";
125
+ return null;
126
+ }
127
+ return null;
128
+ }
129
+ const targetPackage = resolveTargetPackageName();
130
+ const searchPaths = [];
131
+ if (targetPackage) {
132
+ const scopedPlatformPackage = `tokscale-${targetPackage}`;
133
+ searchPaths.push(
134
+ // npm/bun install: sibling scoped package (node_modules/@juya-ai/tokscale-cli-<platform>/bin/...)
135
+ join(scopeDir, scopedPlatformPackage, "bin", binaryName),
136
+ // Nested node_modules: non-hoisted / pnpm (node_modules/@juya-ai/tokscale-cli/node_modules/@juya-ai/tokscale-cli-<platform>/bin/...)
137
+ join(cliDir, "node_modules", "@juya-ai", scopedPlatformPackage, "bin", binaryName),
138
+ // Hoisted edge case (node_modules/@juya-ai/node_modules/@juya-ai/tokscale-cli-<platform>/bin/...)
139
+ join(scopeDir, "node_modules", "@juya-ai", scopedPlatformPackage, "bin", binaryName), join(workspaceRoot, "node_modules", "@juya-ai", scopedPlatformPackage, "bin", binaryName),
140
+ // Monorepo development
141
+ join(workspaceRoot, "packages", targetPackage, "bin", binaryName));
142
+ }
143
+ const rustTargetTriple = resolveRustTargetTriple();
144
+ if (rustTargetTriple) {
145
+ searchPaths.push(join(workspaceRoot, "target", rustTargetTriple, "release", binaryName));
146
+ }
147
+ searchPaths.push(join(workspaceRoot, "target", "release", binaryName), join(cliDir, "bin", binaryName));
148
+ function tryRealpath(p) {
149
+ try {
150
+ return realpathSync(p);
151
+ }
152
+ catch {
153
+ return p;
154
+ }
155
+ }
156
+ // Paths that would re-enter this wrapper if executed - using any of these as
157
+ // the "real" binary causes infinite recursion (a fork bomb). We compare by
158
+ // realpath so symlinks (e.g. npm/bun bin shims) are dereferenced.
159
+ const selfPaths = new Set([
160
+ tryRealpath(fileURLToPath(import.meta.url)),
161
+ tryRealpath(join(cliDir, "bin.js")),
162
+ ]);
163
+ if (process.argv[1]) {
164
+ selfPaths.add(tryRealpath(process.argv[1]));
165
+ }
166
+ function isSelfReference(p) {
167
+ return selfPaths.has(tryRealpath(p));
168
+ }
169
+ let binary = searchPaths.find((p) => existsSync(p) && !isSelfReference(p));
170
+ if (!binary) {
171
+ console.error("Error: tokscale binary not found");
172
+ console.error("Build from source: cargo build --release -p tokscale-cli");
173
+ if (targetPackage) {
174
+ console.error(`Expected optional package: @juya-ai/tokscale-${targetPackage}`);
175
+ }
176
+ process.exit(1);
177
+ }
178
+ const result = spawnSync(binary, process.argv.slice(2), { stdio: "inherit" });
179
+ process.exit(result.status ?? 1);
180
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "@juya-ai/tokscale-cli",
3
+ "version": "4.0.5",
4
+ "description": "A high-performance CLI tool and visualization dashboard for tracking AI coding assistant token usage and costs across multiple platforms.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "bin": {
9
+ "tokscale": "./bin.js"
10
+ },
11
+ "files": [
12
+ "bin.js",
13
+ "dist/**/*"
14
+ ],
15
+ "publishConfig": {
16
+ "registry": "https://registry.npmjs.org/",
17
+ "access": "public"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/makoMakoGo/tokscale.git",
22
+ "directory": "packages/cli"
23
+ },
24
+ "scripts": {
25
+ "build": "tsc",
26
+ "dev": "bun src/index.ts",
27
+ "start": "node dist/index.js",
28
+ "prepublishOnly": "bun run build"
29
+ },
30
+ "dependencies": {},
31
+ "optionalDependencies": {
32
+ "@juya-ai/tokscale-cli-darwin-arm64": "4.0.5",
33
+ "@juya-ai/tokscale-cli-linux-x64-gnu": "4.0.5",
34
+ "@juya-ai/tokscale-cli-win32-x64-msvc": "4.0.5"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^20.0.0",
38
+ "typescript": "^5.0.0"
39
+ },
40
+ "keywords": [
41
+ "tokscale",
42
+ "opencode",
43
+ "claude-code",
44
+ "cursor",
45
+ "gemini",
46
+ "codex",
47
+ "cli"
48
+ ]
49
+ }