@openspecui/server 3.11.0 → 3.11.2
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/dist/api-djiWTpO6.mjs +6051 -0
- package/dist/index.mjs +4777 -1893
- package/dist/lexer-DQCqS3nf-DjvpjrU3.mjs +81 -0
- package/dist/{src-DBFY1eQK.mjs → src--4tprY9A.mjs} +19 -12
- package/dist/src-8bHfOTUF.mjs +3 -0
- package/dist/src-BJ-K9Dp2.mjs +208 -0
- package/package.json +14 -9
- /package/dist/{src-DuQ_-3Kn.mjs → src-BHeS1bxo.mjs} +0 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/tsx@4.20.6/node_modules/tsx/dist/lexer-DQCqS3nf.mjs
|
|
2
|
+
var Y = Object.defineProperty;
|
|
3
|
+
var k = (A, E) => Y(A, "name", {
|
|
4
|
+
value: E,
|
|
5
|
+
configurable: !0
|
|
6
|
+
});
|
|
7
|
+
var L;
|
|
8
|
+
(function(A) {
|
|
9
|
+
A[A.Static = 1] = "Static", A[A.Dynamic = 2] = "Dynamic", A[A.ImportMeta = 3] = "ImportMeta", A[A.StaticSourcePhase = 4] = "StaticSourcePhase", A[A.DynamicSourcePhase = 5] = "DynamicSourcePhase";
|
|
10
|
+
})(L || (L = {}));
|
|
11
|
+
const R = new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
|
|
12
|
+
function F(A, E = "@") {
|
|
13
|
+
if (!Q) return G.then(() => F(A));
|
|
14
|
+
const g = A.length + 1, B = (Q.__heap_base.value || Q.__heap_base) + 4 * g - Q.memory.buffer.byteLength;
|
|
15
|
+
B > 0 && Q.memory.grow(Math.ceil(B / 65536));
|
|
16
|
+
const s = Q.sa(g - 1);
|
|
17
|
+
if ((R ? c : r)(A, new Uint16Array(Q.memory.buffer, s, g)), !Q.parse()) throw Object.assign(/* @__PURE__ */ new Error(`Parse error ${E}:${A.slice(0, Q.e()).split(`
|
|
18
|
+
`).length}:${Q.e() - A.lastIndexOf(`
|
|
19
|
+
`, Q.e() - 1)}`), { idx: Q.e() });
|
|
20
|
+
const U = [], t = [];
|
|
21
|
+
for (; Q.ri();) {
|
|
22
|
+
const C = Q.is(), I = Q.ie(), D = Q.it(), i = Q.ai(), w = Q.id(), J = Q.ss(), K = Q.se();
|
|
23
|
+
let o;
|
|
24
|
+
Q.ip() && (o = N(A.slice(w === -1 ? C - 1 : C, w === -1 ? I + 1 : I))), U.push({
|
|
25
|
+
n: o,
|
|
26
|
+
t: D,
|
|
27
|
+
s: C,
|
|
28
|
+
e: I,
|
|
29
|
+
ss: J,
|
|
30
|
+
se: K,
|
|
31
|
+
d: w,
|
|
32
|
+
a: i
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
for (; Q.re();) {
|
|
36
|
+
const C = Q.es(), I = Q.ee(), D = Q.els(), i = Q.ele(), w = A.slice(C, I), J = w[0], K = D < 0 ? void 0 : A.slice(D, i), o = K ? K[0] : "";
|
|
37
|
+
t.push({
|
|
38
|
+
s: C,
|
|
39
|
+
e: I,
|
|
40
|
+
ls: D,
|
|
41
|
+
le: i,
|
|
42
|
+
n: J === "\"" || J === "'" ? N(w) : w,
|
|
43
|
+
ln: o === "\"" || o === "'" ? N(K) : K
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
function N(C) {
|
|
47
|
+
try {
|
|
48
|
+
return (0, eval)(C);
|
|
49
|
+
} catch {}
|
|
50
|
+
}
|
|
51
|
+
return k(N, "k"), [
|
|
52
|
+
U,
|
|
53
|
+
t,
|
|
54
|
+
!!Q.f(),
|
|
55
|
+
!!Q.ms()
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
k(F, "parse");
|
|
59
|
+
function r(A, E) {
|
|
60
|
+
const g = A.length;
|
|
61
|
+
let B = 0;
|
|
62
|
+
for (; B < g;) {
|
|
63
|
+
const s = A.charCodeAt(B);
|
|
64
|
+
E[B++] = (255 & s) << 8 | s >>> 8;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
k(r, "Q");
|
|
68
|
+
function c(A, E) {
|
|
69
|
+
const g = A.length;
|
|
70
|
+
let B = 0;
|
|
71
|
+
for (; B < g;) E[B] = A.charCodeAt(B++);
|
|
72
|
+
}
|
|
73
|
+
k(c, "B");
|
|
74
|
+
let Q;
|
|
75
|
+
const G = WebAssembly.compile((a = "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", typeof Buffer < "u" ? Buffer.from(a, "base64") : Uint8Array.from(atob(a), (A) => A.charCodeAt(0)))).then(WebAssembly.instantiate).then(({ exports: A }) => {
|
|
76
|
+
Q = A;
|
|
77
|
+
});
|
|
78
|
+
var a;
|
|
79
|
+
|
|
80
|
+
//#endregion
|
|
81
|
+
export { G as init, F as parse };
|
|
@@ -27,18 +27,18 @@ var LocalTranslator = class {
|
|
|
27
27
|
this.languages = languages;
|
|
28
28
|
}
|
|
29
29
|
async *batchTranslate(inputs, options) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
30
|
+
throwIfAborted(options?.signal);
|
|
31
|
+
const result = await this.pipeline(inputs, {
|
|
32
|
+
src_lang: this.languages.sourceLanguage,
|
|
33
|
+
tgt_lang: this.languages.targetLanguage,
|
|
34
|
+
signal: options?.signal
|
|
35
|
+
});
|
|
36
|
+
throwIfAborted(options?.signal);
|
|
37
|
+
const outputs = readTranslatedOutputs(result, inputs.length);
|
|
38
|
+
for (const [index, output] of outputs.entries()) yield {
|
|
39
|
+
index,
|
|
40
|
+
output
|
|
41
|
+
};
|
|
42
42
|
}
|
|
43
43
|
destroy() {
|
|
44
44
|
this.pipeline.dispose?.();
|
|
@@ -107,6 +107,13 @@ function readTranslatedText(value) {
|
|
|
107
107
|
}
|
|
108
108
|
return String(value);
|
|
109
109
|
}
|
|
110
|
+
function readTranslatedOutputs(value, expectedCount) {
|
|
111
|
+
const outputs = (Array.isArray(value) ? value : [value]).map((entry) => readTranslatedText(entry));
|
|
112
|
+
if (outputs.length === expectedCount) return outputs;
|
|
113
|
+
if (expectedCount === 1 && outputs.length > 0) return [outputs[0]];
|
|
114
|
+
if (outputs.length === 1 && expectedCount > 1) return Array.from({ length: expectedCount }, () => outputs[0]);
|
|
115
|
+
throw new Error(`Translator returned ${outputs.length} outputs for ${expectedCount} inputs.`);
|
|
116
|
+
}
|
|
110
117
|
function readProgress(event) {
|
|
111
118
|
if (!event || typeof event !== "object") return void 0;
|
|
112
119
|
const record = event;
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { join, posix } from "node:path";
|
|
2
|
+
|
|
3
|
+
//#region ../local-ct2-translator/src/ct2-download-plan.ts
|
|
4
|
+
const CT2_REQUIRED_FILE_NAMES = [
|
|
5
|
+
"config.json",
|
|
6
|
+
"model.bin",
|
|
7
|
+
"shared_vocabulary.json",
|
|
8
|
+
"source.spm",
|
|
9
|
+
"target.spm"
|
|
10
|
+
];
|
|
11
|
+
const CT2_OPTIONAL_FILE_NAMES = ["tokenizer_config.json", "vocab.json"];
|
|
12
|
+
const CT2_OPTIONAL_FILE_NAME_SET = new Set(CT2_OPTIONAL_FILE_NAMES);
|
|
13
|
+
function resolveCt2ModelDownloadPlanFromRepositoryFiles(input) {
|
|
14
|
+
const normalizedFiles = dedupeFiles(input.files.filter((file) => file.path.trim().length > 0).map((file) => ({
|
|
15
|
+
...file,
|
|
16
|
+
path: normalizePath(file.path)
|
|
17
|
+
})));
|
|
18
|
+
const fileByPath = new Map(normalizedFiles.map((file) => [file.path, file]));
|
|
19
|
+
const groups = collectCandidateRoots(normalizedFiles).map((rootDir) => createGroup(rootDir, fileByPath)).filter((group) => group !== null);
|
|
20
|
+
if (groups.length === 0) return null;
|
|
21
|
+
return buildPlan(input.modelId, groups, input.selectedGroupId);
|
|
22
|
+
}
|
|
23
|
+
function collectCandidateRoots(files) {
|
|
24
|
+
const roots = /* @__PURE__ */ new Set();
|
|
25
|
+
for (const file of files) {
|
|
26
|
+
if (posix.basename(file.path) !== "model.bin") continue;
|
|
27
|
+
roots.add(normalizeDir(posix.dirname(file.path)));
|
|
28
|
+
}
|
|
29
|
+
return [...roots];
|
|
30
|
+
}
|
|
31
|
+
function createGroup(rootDir, fileByPath) {
|
|
32
|
+
const requiredFiles = CT2_REQUIRED_FILE_NAMES.map((fileName) => fileByPath.get(joinRootFile(rootDir, fileName)));
|
|
33
|
+
if (requiredFiles.some((file) => file === void 0)) return null;
|
|
34
|
+
const concreteRequiredFiles = requiredFiles.filter((file) => file !== void 0);
|
|
35
|
+
const optionalFiles = CT2_OPTIONAL_FILE_NAMES.flatMap((fileName) => {
|
|
36
|
+
const file = fileByPath.get(joinRootFile(rootDir, fileName));
|
|
37
|
+
return file ? [file] : [];
|
|
38
|
+
});
|
|
39
|
+
const files = [...concreteRequiredFiles, ...optionalFiles].map((file) => toPlanFile(file));
|
|
40
|
+
const estimatedTotalBytes = files.reduce((total, file) => total + (file.sizeBytes ?? 0), 0);
|
|
41
|
+
const hasRequiredSizes = files.filter((file) => file.required).every((file) => file.sizeBytes !== void 0 && file.sizeBytes > 0);
|
|
42
|
+
return {
|
|
43
|
+
id: rootDir || "default",
|
|
44
|
+
label: rootDir ? posix.basename(rootDir) : "default",
|
|
45
|
+
description: rootDir ? `CTranslate2 artifacts from ${rootDir}.` : "CTranslate2 artifacts from the repository root.",
|
|
46
|
+
estimatedTotalBytes: estimatedTotalBytes > 0 ? estimatedTotalBytes : void 0,
|
|
47
|
+
selectable: hasRequiredSizes,
|
|
48
|
+
selected: false,
|
|
49
|
+
files
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function toPlanFile(file) {
|
|
53
|
+
const required = !CT2_OPTIONAL_FILE_NAME_SET.has(posix.basename(file.path));
|
|
54
|
+
return {
|
|
55
|
+
path: file.path,
|
|
56
|
+
sizeBytes: file.sizeBytes,
|
|
57
|
+
required,
|
|
58
|
+
etag: file.etag,
|
|
59
|
+
revision: file.revision,
|
|
60
|
+
sourceUrl: file.sourceUrl,
|
|
61
|
+
raw: file.raw
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function buildPlan(modelId, groups, selectedGroupId) {
|
|
65
|
+
const selectedGroup = selectRequestedGroup(groups, selectedGroupId) ?? selectDefaultGroup(groups) ?? groups[0];
|
|
66
|
+
const selectedId = selectedGroup.id;
|
|
67
|
+
const normalizedGroups = groups.map((group) => ({
|
|
68
|
+
...group,
|
|
69
|
+
selected: group.id === selectedId,
|
|
70
|
+
files: [...group.files]
|
|
71
|
+
}));
|
|
72
|
+
return {
|
|
73
|
+
modelId,
|
|
74
|
+
estimatedTotalBytes: selectedGroup.estimatedTotalBytes,
|
|
75
|
+
files: [...selectedGroup.files],
|
|
76
|
+
selectedGroupId: selectedId,
|
|
77
|
+
groups: normalizedGroups
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function selectRequestedGroup(groups, selectedGroupId) {
|
|
81
|
+
if (!selectedGroupId) return null;
|
|
82
|
+
return groups.find((group) => group.id === selectedGroupId) ?? null;
|
|
83
|
+
}
|
|
84
|
+
function selectDefaultGroup(groups) {
|
|
85
|
+
const selectableGroups = groups.filter((group) => group.selectable);
|
|
86
|
+
if (selectableGroups.length === 0) return null;
|
|
87
|
+
return [...selectableGroups].sort((left, right) => {
|
|
88
|
+
return (left.estimatedTotalBytes ?? Number.POSITIVE_INFINITY) - (right.estimatedTotalBytes ?? Number.POSITIVE_INFINITY) || left.id.localeCompare(right.id);
|
|
89
|
+
})[0] ?? null;
|
|
90
|
+
}
|
|
91
|
+
function joinRootFile(rootDir, fileName) {
|
|
92
|
+
return rootDir ? `${rootDir}/${fileName}` : fileName;
|
|
93
|
+
}
|
|
94
|
+
function normalizeDir(input) {
|
|
95
|
+
if (input === "." || input === "") return "";
|
|
96
|
+
return normalizePath(input);
|
|
97
|
+
}
|
|
98
|
+
function normalizePath(input) {
|
|
99
|
+
return input.replace(/^\.\/+/u, "").replace(/\/+/gu, "/");
|
|
100
|
+
}
|
|
101
|
+
function dedupeFiles(files) {
|
|
102
|
+
const deduped = /* @__PURE__ */ new Map();
|
|
103
|
+
for (const file of files) deduped.set(file.path, file);
|
|
104
|
+
return [...deduped.values()];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
//#endregion
|
|
108
|
+
//#region ../local-ct2-translator/src/factory.ts
|
|
109
|
+
var LocalCt2TranslatorFactory = class {
|
|
110
|
+
constructor(options = {}) {
|
|
111
|
+
this.options = options;
|
|
112
|
+
}
|
|
113
|
+
async prepare(options) {
|
|
114
|
+
const model = options.model || this.options.defaultModel;
|
|
115
|
+
if (!model) throw new Error("A CT2 model id or runtime model path is required.");
|
|
116
|
+
const resolvedConfig = readRuntimeConfig(options.runtimeConfig);
|
|
117
|
+
const modelPath = resolveModelPath({
|
|
118
|
+
model,
|
|
119
|
+
cacheDir: this.options.cacheDir,
|
|
120
|
+
runtimeConfig: resolvedConfig
|
|
121
|
+
});
|
|
122
|
+
options.monitor?.setStatus({ message: `Loading CT2 model ${model}.` });
|
|
123
|
+
await createRuntimeTranslator(this.options, modelPath, resolvedConfig);
|
|
124
|
+
options.monitor?.setStatus({
|
|
125
|
+
message: `CT2 model ${model} is ready.`,
|
|
126
|
+
progress: 1
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
async create(options) {
|
|
130
|
+
const model = options.model || this.options.defaultModel;
|
|
131
|
+
if (!model) throw new Error("A CT2 model id or runtime model path is required.");
|
|
132
|
+
const resolvedConfig = readRuntimeConfig(options.runtimeConfig);
|
|
133
|
+
const modelPath = resolveModelPath({
|
|
134
|
+
model,
|
|
135
|
+
cacheDir: this.options.cacheDir,
|
|
136
|
+
runtimeConfig: resolvedConfig
|
|
137
|
+
});
|
|
138
|
+
options.monitor?.setStatus({ message: `Loading CT2 model ${model}.` });
|
|
139
|
+
const translator = await createRuntimeTranslator(this.options, modelPath, resolvedConfig);
|
|
140
|
+
options.monitor?.setStatus({
|
|
141
|
+
message: `CT2 model ${model} is ready.`,
|
|
142
|
+
progress: 1
|
|
143
|
+
});
|
|
144
|
+
return new LocalCt2Translator(translator, resolvedConfig, this.options);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
function createLocalCt2TranslatorFactory(options = {}) {
|
|
148
|
+
return new LocalCt2TranslatorFactory(options);
|
|
149
|
+
}
|
|
150
|
+
var LocalCt2Translator = class {
|
|
151
|
+
constructor(translator, runtimeConfig, factoryOptions) {
|
|
152
|
+
this.translator = translator;
|
|
153
|
+
this.runtimeConfig = runtimeConfig;
|
|
154
|
+
this.factoryOptions = factoryOptions;
|
|
155
|
+
}
|
|
156
|
+
async *batchTranslate(inputs, options) {
|
|
157
|
+
throwIfAborted(options?.signal);
|
|
158
|
+
const result = await this.translator.translateBatch(inputs, {
|
|
159
|
+
beamSize: this.runtimeConfig.beamSize ?? this.factoryOptions.beamSize,
|
|
160
|
+
maxBatchSize: this.runtimeConfig.maxBatchSize ?? this.factoryOptions.maxBatchSize,
|
|
161
|
+
returnScores: false
|
|
162
|
+
});
|
|
163
|
+
throwIfAborted(options?.signal);
|
|
164
|
+
if (result.length !== inputs.length) throw new Error(`CT2 translator returned ${result.length} outputs for ${inputs.length} inputs.`);
|
|
165
|
+
for (const [index, entry] of result.entries()) yield {
|
|
166
|
+
index,
|
|
167
|
+
output: entry.text
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
async function createRuntimeTranslator(options, modelPath, runtimeConfig) {
|
|
172
|
+
return new (await ((options.loadModule ?? loadCt2RuntimeModule)())).Ct2Translator({
|
|
173
|
+
modelPath,
|
|
174
|
+
device: runtimeConfig.device ?? options.device,
|
|
175
|
+
threads: runtimeConfig.threads ?? options.threads
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
async function loadCt2RuntimeModule() {
|
|
179
|
+
return await import("ctranslate2");
|
|
180
|
+
}
|
|
181
|
+
function resolveModelPath(input) {
|
|
182
|
+
if (input.runtimeConfig.modelPath) return input.runtimeConfig.modelPath;
|
|
183
|
+
if (input.cacheDir) return join(input.cacheDir, "models", input.model);
|
|
184
|
+
return input.model;
|
|
185
|
+
}
|
|
186
|
+
function readRuntimeConfig(runtimeConfig) {
|
|
187
|
+
return {
|
|
188
|
+
modelPath: readString(runtimeConfig, "modelPath"),
|
|
189
|
+
device: readString(runtimeConfig, "device"),
|
|
190
|
+
threads: readNumber(runtimeConfig, "threads"),
|
|
191
|
+
beamSize: readNumber(runtimeConfig, "beamSize"),
|
|
192
|
+
maxBatchSize: readNumber(runtimeConfig, "maxBatchSize")
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
function readString(record, key) {
|
|
196
|
+
const value = record?.[key];
|
|
197
|
+
return typeof value === "string" && value.trim().length > 0 ? value : void 0;
|
|
198
|
+
}
|
|
199
|
+
function readNumber(record, key) {
|
|
200
|
+
const value = record?.[key];
|
|
201
|
+
return typeof value === "number" && Number.isFinite(value) ? value : void 0;
|
|
202
|
+
}
|
|
203
|
+
function throwIfAborted(signal) {
|
|
204
|
+
if (signal?.aborted) throw new DOMException("The operation was aborted.", "AbortError");
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
//#endregion
|
|
208
|
+
export { resolveCt2ModelDownloadPlanFromRepositoryFiles as a, CT2_REQUIRED_FILE_NAMES as i, createLocalCt2TranslatorFactory as n, CT2_OPTIONAL_FILE_NAMES as r, LocalCt2TranslatorFactory as t };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openspecui/server",
|
|
3
|
-
"version": "3.11.
|
|
3
|
+
"version": "3.11.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.mjs",
|
|
6
6
|
"exports": {
|
|
@@ -23,29 +23,34 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@hono/node-server": "^1.14.1",
|
|
25
25
|
"@huggingface/hub": "^2.12.0",
|
|
26
|
-
"@huggingface/transformers": "^4.2.0",
|
|
27
26
|
"@lydell/node-pty": "^1.1.0",
|
|
28
|
-
"@openspecui/core": "3.11.
|
|
29
|
-
"@openspecui/search": "3.11.
|
|
27
|
+
"@openspecui/core": "3.11.2",
|
|
28
|
+
"@openspecui/search": "3.11.2",
|
|
30
29
|
"@trpc/server": "^11.0.0",
|
|
31
|
-
"@types/better-sqlite3": "^7.6.13",
|
|
32
30
|
"better-sqlite3": "^12.5.0",
|
|
33
31
|
"hono": "^4.7.3",
|
|
34
|
-
"tsx": "^4.19.2",
|
|
35
32
|
"undici": "^7.18.2",
|
|
36
33
|
"ws": "^8.18.0",
|
|
37
|
-
"yaml": "^2.8.0",
|
|
38
|
-
"yargs": "^18.0.0",
|
|
39
34
|
"zod": "^3.24.1"
|
|
40
35
|
},
|
|
36
|
+
"// runtime-note": "These heavy runtimes are owned by the host package because translation engine installation is lifecycle-managed at the host boundary.",
|
|
37
|
+
"// bundle-note": "The translator engine packages keep runtime imports external in tsdown output, so this host package remains the install/detect truth during development runs.",
|
|
38
|
+
"optionalDependencies": {
|
|
39
|
+
"@huggingface/transformers": "~4.2.0",
|
|
40
|
+
"ctranslate2": "0.1.0"
|
|
41
|
+
},
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@trpc/client": "^11.7.2",
|
|
44
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
43
45
|
"@types/node": "^22.10.2",
|
|
44
46
|
"@types/ws": "^8.5.13",
|
|
45
47
|
"@types/yargs": "^17.0.35",
|
|
48
|
+
"tsx": "^4.19.2",
|
|
46
49
|
"tsdown": "^0.16.6",
|
|
47
50
|
"typescript": "^5.7.2",
|
|
48
|
-
"vitest": "^4.1.0"
|
|
51
|
+
"vitest": "^4.1.0",
|
|
52
|
+
"yaml": "^2.8.0",
|
|
53
|
+
"yargs": "^18.0.0"
|
|
49
54
|
},
|
|
50
55
|
"repository": {
|
|
51
56
|
"type": "git",
|
|
File without changes
|