scriverse 0.2.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/LICENSE +21 -0
- package/README.en.md +214 -0
- package/README.md +220 -0
- package/dist/cli-contract.js +280 -0
- package/dist/cli-contract.js.map +1 -0
- package/dist/cli-core.js +611 -0
- package/dist/cli-core.js.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -0
- package/package.json +74 -0
package/dist/cli-core.js
ADDED
|
@@ -0,0 +1,611 @@
|
|
|
1
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
4
|
+
import { cliResourceDefinitions, cliResourceTypes, cliWorkDefinition } from "./cli-contract.js";
|
|
5
|
+
const booleanOptions = new Set(["compact", "help"]);
|
|
6
|
+
const maximumInputBytes = 2_500_000;
|
|
7
|
+
export class CliError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
details;
|
|
10
|
+
constructor(code, message, details) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.details = details;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function parseCliArguments(args) {
|
|
17
|
+
const positionals = [];
|
|
18
|
+
const options = new Map();
|
|
19
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
20
|
+
const argument = args[index] ?? "";
|
|
21
|
+
if (!argument.startsWith("--")) {
|
|
22
|
+
positionals.push(argument);
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const equalsIndex = argument.indexOf("=");
|
|
26
|
+
const name = argument.slice(2, equalsIndex >= 0 ? equalsIndex : undefined);
|
|
27
|
+
if (!name)
|
|
28
|
+
throw new CliError("CLI_ARGUMENT_INVALID", "选项名称不能为空");
|
|
29
|
+
let value = "true";
|
|
30
|
+
if (equalsIndex >= 0) {
|
|
31
|
+
value = argument.slice(equalsIndex + 1);
|
|
32
|
+
}
|
|
33
|
+
else if (!booleanOptions.has(name)) {
|
|
34
|
+
const candidate = args[index + 1];
|
|
35
|
+
if (candidate === undefined || candidate.startsWith("--")) {
|
|
36
|
+
throw new CliError("CLI_OPTION_VALUE_REQUIRED", `选项 --${name} 缺少值`);
|
|
37
|
+
}
|
|
38
|
+
value = candidate;
|
|
39
|
+
index += 1;
|
|
40
|
+
}
|
|
41
|
+
const values = options.get(name) ?? [];
|
|
42
|
+
values.push(value);
|
|
43
|
+
options.set(name, values);
|
|
44
|
+
}
|
|
45
|
+
return { positionals, options };
|
|
46
|
+
}
|
|
47
|
+
function option(parsed, name) {
|
|
48
|
+
return parsed.options.get(name)?.at(-1);
|
|
49
|
+
}
|
|
50
|
+
function optionValues(parsed, name) {
|
|
51
|
+
return parsed.options.get(name) ?? [];
|
|
52
|
+
}
|
|
53
|
+
function assertAllowedOptions(parsed, allowed) {
|
|
54
|
+
const allowedSet = new Set(["config", "compact", "help", ...allowed]);
|
|
55
|
+
for (const name of parsed.options.keys()) {
|
|
56
|
+
if (!allowedSet.has(name))
|
|
57
|
+
throw new CliError("CLI_OPTION_UNKNOWN", `当前命令不支持 --${name}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
function requiredPosition(positionals, index, label) {
|
|
61
|
+
const value = positionals[index];
|
|
62
|
+
if (!value)
|
|
63
|
+
throw new CliError("CLI_ARGUMENT_REQUIRED", `缺少 ${label}`);
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
function assertPositionCount(positionals, expected) {
|
|
67
|
+
if (positionals.length > expected) {
|
|
68
|
+
throw new CliError("CLI_ARGUMENT_UNEXPECTED", `存在多余参数:${positionals.slice(expected).join(" ")}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function emitJson(stream, value, compact) {
|
|
72
|
+
stream.write(`${JSON.stringify(value, null, compact ? 0 : 2)}\n`);
|
|
73
|
+
}
|
|
74
|
+
function emitText(stream, value) {
|
|
75
|
+
stream.write(value.endsWith("\n") ? value : `${value}\n`);
|
|
76
|
+
}
|
|
77
|
+
function configPath(parsed, dependencies) {
|
|
78
|
+
const configured = option(parsed, "config") ?? dependencies.env.SCRIVERSE_CONFIG;
|
|
79
|
+
if (configured)
|
|
80
|
+
return isAbsolute(configured) ? configured : resolve(dependencies.cwd, configured);
|
|
81
|
+
const base = dependencies.env.XDG_CONFIG_HOME?.trim() || join(dependencies.homeDirectory, ".config");
|
|
82
|
+
return join(base, "scriverse", "cli.json");
|
|
83
|
+
}
|
|
84
|
+
function normalizeServer(value) {
|
|
85
|
+
let url;
|
|
86
|
+
try {
|
|
87
|
+
url = new URL(value);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
throw new CliError("CLI_SERVER_INVALID", "服务端地址不是有效 URL");
|
|
91
|
+
}
|
|
92
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash) {
|
|
93
|
+
throw new CliError("CLI_SERVER_INVALID", "服务端地址必须是无内嵌凭据的 HTTP 或 HTTPS 地址");
|
|
94
|
+
}
|
|
95
|
+
if (url.pathname !== "/" && url.pathname !== "") {
|
|
96
|
+
throw new CliError("CLI_SERVER_INVALID", "服务端地址不能包含路径,请只填写协议、主机和端口");
|
|
97
|
+
}
|
|
98
|
+
return url.origin;
|
|
99
|
+
}
|
|
100
|
+
function readConfig(path) {
|
|
101
|
+
if (!existsSync(path))
|
|
102
|
+
throw new CliError("CLI_LOGIN_REQUIRED", "请先执行 auth login");
|
|
103
|
+
let parsed;
|
|
104
|
+
try {
|
|
105
|
+
parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
throw new CliError("CLI_CONFIG_INVALID", `CLI 配置文件无法读取:${path}`);
|
|
109
|
+
}
|
|
110
|
+
if (!parsed || typeof parsed !== "object")
|
|
111
|
+
throw new CliError("CLI_CONFIG_INVALID", "CLI 配置内容无效");
|
|
112
|
+
const value = parsed;
|
|
113
|
+
if (value.version !== 1 || typeof value.server !== "string" || typeof value.apiKey !== "string" || !value.user || typeof value.user.userId !== "string") {
|
|
114
|
+
throw new CliError("CLI_CONFIG_INVALID", "CLI 配置字段不完整,请重新登录");
|
|
115
|
+
}
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
function writeConfig(path, config) {
|
|
119
|
+
const directory = dirname(path);
|
|
120
|
+
mkdirSync(directory, { recursive: true, mode: 0o700 });
|
|
121
|
+
const temporary = `${path}.${process.pid}.tmp`;
|
|
122
|
+
writeFileSync(temporary, `${JSON.stringify(config, null, 2)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
123
|
+
chmodSync(temporary, 0o600);
|
|
124
|
+
renameSync(temporary, path);
|
|
125
|
+
chmodSync(path, 0o600);
|
|
126
|
+
}
|
|
127
|
+
function readBoundedFile(path, cwd) {
|
|
128
|
+
const resolved = isAbsolute(path) ? path : resolve(cwd, path);
|
|
129
|
+
const content = readFileSync(resolved);
|
|
130
|
+
if (content.byteLength > maximumInputBytes)
|
|
131
|
+
throw new CliError("CLI_INPUT_TOO_LARGE", `输入文件超过 ${maximumInputBytes} 字节限制`);
|
|
132
|
+
return content.toString("utf8");
|
|
133
|
+
}
|
|
134
|
+
async function readBoundedStdin(stdin) {
|
|
135
|
+
const chunks = [];
|
|
136
|
+
let length = 0;
|
|
137
|
+
for await (const chunk of stdin) {
|
|
138
|
+
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
139
|
+
length += buffer.byteLength;
|
|
140
|
+
if (length > maximumInputBytes)
|
|
141
|
+
throw new CliError("CLI_INPUT_TOO_LARGE", `标准输入超过 ${maximumInputBytes} 字节限制`);
|
|
142
|
+
chunks.push(buffer);
|
|
143
|
+
}
|
|
144
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
145
|
+
}
|
|
146
|
+
function parseJsonObject(text) {
|
|
147
|
+
let parsed;
|
|
148
|
+
try {
|
|
149
|
+
parsed = JSON.parse(text);
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
throw new CliError("CLI_INPUT_INVALID", "编辑输入不是有效的 JSON");
|
|
153
|
+
}
|
|
154
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
155
|
+
throw new CliError("CLI_INPUT_INVALID", "编辑输入必须是 JSON 对象");
|
|
156
|
+
}
|
|
157
|
+
return parsed;
|
|
158
|
+
}
|
|
159
|
+
async function editInput(parsed, dependencies, allowChangeNote) {
|
|
160
|
+
const inputPath = option(parsed, "input");
|
|
161
|
+
const fieldFiles = optionValues(parsed, "field-file");
|
|
162
|
+
if (!inputPath && !fieldFiles.length) {
|
|
163
|
+
throw new CliError("CLI_INPUT_REQUIRED", "请使用 --input <json-file|->,或至少提供一个 --field-file field=path");
|
|
164
|
+
}
|
|
165
|
+
const input = inputPath
|
|
166
|
+
? parseJsonObject(inputPath === "-" ? await readBoundedStdin(dependencies.stdin) : readBoundedFile(inputPath, dependencies.cwd))
|
|
167
|
+
: {};
|
|
168
|
+
for (const binding of fieldFiles) {
|
|
169
|
+
const separator = binding.indexOf("=");
|
|
170
|
+
const field = separator > 0 ? binding.slice(0, separator) : "";
|
|
171
|
+
const path = separator > 0 ? binding.slice(separator + 1) : "";
|
|
172
|
+
if (!/^[A-Za-z][A-Za-z0-9]*$/u.test(field) || !path) {
|
|
173
|
+
throw new CliError("CLI_FIELD_FILE_INVALID", "--field-file 必须使用 field=path 格式");
|
|
174
|
+
}
|
|
175
|
+
input[field] = readBoundedFile(path, dependencies.cwd);
|
|
176
|
+
}
|
|
177
|
+
const note = option(parsed, "change-note");
|
|
178
|
+
if (note !== undefined) {
|
|
179
|
+
if (!allowChangeNote)
|
|
180
|
+
throw new CliError("CLI_CHANGE_NOTE_UNSUPPORTED", "当前资源不支持版本说明");
|
|
181
|
+
input.changeNote = note;
|
|
182
|
+
}
|
|
183
|
+
return input;
|
|
184
|
+
}
|
|
185
|
+
async function apiRequest(fetchImpl, config, path, options = {}) {
|
|
186
|
+
const response = await fetchImpl(`${config.server}${path}`, {
|
|
187
|
+
method: options.method ?? "GET",
|
|
188
|
+
headers: {
|
|
189
|
+
Accept: options.text ? "text/plain" : "application/json",
|
|
190
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
191
|
+
...(options.body ? { "Content-Type": "application/json" } : {})
|
|
192
|
+
},
|
|
193
|
+
...(options.body ? { body: JSON.stringify(options.body) } : {})
|
|
194
|
+
}).catch((error) => {
|
|
195
|
+
throw new CliError("CLI_NETWORK_ERROR", error instanceof Error ? error.message : "无法连接服务端");
|
|
196
|
+
});
|
|
197
|
+
const text = await response.text();
|
|
198
|
+
if (!response.ok) {
|
|
199
|
+
let payload;
|
|
200
|
+
try {
|
|
201
|
+
payload = JSON.parse(text);
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
payload = null;
|
|
205
|
+
}
|
|
206
|
+
const remote = payload && typeof payload === "object" && "error" in payload
|
|
207
|
+
? payload.error
|
|
208
|
+
: undefined;
|
|
209
|
+
throw new CliError(typeof remote?.code === "string" ? remote.code : `HTTP_${response.status}`, typeof remote?.message === "string" ? remote.message : `服务端请求失败,状态码 ${response.status}`, remote?.details);
|
|
210
|
+
}
|
|
211
|
+
if (options.text)
|
|
212
|
+
return text;
|
|
213
|
+
if (!text)
|
|
214
|
+
return null;
|
|
215
|
+
let payload;
|
|
216
|
+
try {
|
|
217
|
+
payload = JSON.parse(text);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
throw new CliError("CLI_RESPONSE_INVALID", "服务端返回了无效 JSON");
|
|
221
|
+
}
|
|
222
|
+
if (payload && typeof payload === "object" && "data" in payload)
|
|
223
|
+
return payload.data;
|
|
224
|
+
return payload;
|
|
225
|
+
}
|
|
226
|
+
function resourceType(value) {
|
|
227
|
+
if (cliResourceTypes.includes(value))
|
|
228
|
+
return value;
|
|
229
|
+
throw new CliError("CLI_RESOURCE_UNKNOWN", `未知资源类型:${value}`);
|
|
230
|
+
}
|
|
231
|
+
function encoded(value) {
|
|
232
|
+
return encodeURIComponent(value);
|
|
233
|
+
}
|
|
234
|
+
function resourceListPath(type, workId) {
|
|
235
|
+
const suffix = {
|
|
236
|
+
setting: "settings",
|
|
237
|
+
character: "characters",
|
|
238
|
+
race: "races",
|
|
239
|
+
organization: "organizations",
|
|
240
|
+
"timeline-track": "timeline-tracks",
|
|
241
|
+
"timeline-event": "timeline",
|
|
242
|
+
relationship: "relationships",
|
|
243
|
+
foreshadow: "foreshadows"
|
|
244
|
+
};
|
|
245
|
+
if (type === "volume" || type === "chapter")
|
|
246
|
+
return `/api/works/${encoded(workId)}`;
|
|
247
|
+
if (type === "chapter-outline")
|
|
248
|
+
return `/api/works/${encoded(workId)}/outlines`;
|
|
249
|
+
return `/api/works/${encoded(workId)}/${suffix[type]}${type === "foreshadow" ? "?status=all" : ""}`;
|
|
250
|
+
}
|
|
251
|
+
function resourceGetPath(type, id) {
|
|
252
|
+
const prefix = {
|
|
253
|
+
volume: "volumes",
|
|
254
|
+
chapter: "chapters",
|
|
255
|
+
setting: "settings",
|
|
256
|
+
character: "characters",
|
|
257
|
+
race: "races",
|
|
258
|
+
organization: "organizations",
|
|
259
|
+
"timeline-track": "timeline-tracks",
|
|
260
|
+
"timeline-event": "timeline",
|
|
261
|
+
relationship: "relationships",
|
|
262
|
+
foreshadow: "foreshadows"
|
|
263
|
+
};
|
|
264
|
+
if (type === "chapter-outline")
|
|
265
|
+
return `/api/chapters/${encoded(id)}/outline`;
|
|
266
|
+
return `/api/${prefix[type]}/${encoded(id)}`;
|
|
267
|
+
}
|
|
268
|
+
function resourceCreatePath(type, scopeId) {
|
|
269
|
+
if (type === "chapter-outline")
|
|
270
|
+
return { path: `/api/chapters/${encoded(scopeId)}/outline`, method: "PUT" };
|
|
271
|
+
const suffix = {
|
|
272
|
+
volume: "volumes",
|
|
273
|
+
chapter: "chapters",
|
|
274
|
+
setting: "settings",
|
|
275
|
+
character: "characters",
|
|
276
|
+
race: "races",
|
|
277
|
+
organization: "organizations",
|
|
278
|
+
"timeline-track": "timeline-tracks",
|
|
279
|
+
"timeline-event": "timeline",
|
|
280
|
+
relationship: "relationships",
|
|
281
|
+
foreshadow: "foreshadows"
|
|
282
|
+
};
|
|
283
|
+
return { path: `/api/works/${encoded(scopeId)}/${suffix[type]}`, method: "POST" };
|
|
284
|
+
}
|
|
285
|
+
function resourceUpdatePath(type, id) {
|
|
286
|
+
if (type === "chapter-outline")
|
|
287
|
+
return { path: `/api/chapters/${encoded(id)}/outline`, method: "PUT" };
|
|
288
|
+
return { path: resourceGetPath(type, id), method: "PATCH" };
|
|
289
|
+
}
|
|
290
|
+
function resourceHistoryPath(type, id) {
|
|
291
|
+
if (type === "chapter")
|
|
292
|
+
return `/api/chapters/${encoded(id)}/versions`;
|
|
293
|
+
if (type === "character")
|
|
294
|
+
return `/api/characters/${encoded(id)}/versions`;
|
|
295
|
+
if (type === "volume")
|
|
296
|
+
throw new CliError("CLI_ACTION_UNSUPPORTED", "volume 不支持 history");
|
|
297
|
+
return `/api/entity-versions/${encoded(type)}/${encoded(id)}`;
|
|
298
|
+
}
|
|
299
|
+
function resourceRestorePath(type, id) {
|
|
300
|
+
if (type === "chapter")
|
|
301
|
+
return `/api/chapters/${encoded(id)}/restore`;
|
|
302
|
+
if (type === "character")
|
|
303
|
+
return `/api/characters/${encoded(id)}/restore`;
|
|
304
|
+
if (type === "volume")
|
|
305
|
+
throw new CliError("CLI_ACTION_UNSUPPORTED", "volume 不支持 restore");
|
|
306
|
+
return `/api/entity-versions/${encoded(type)}/${encoded(id)}/restore`;
|
|
307
|
+
}
|
|
308
|
+
function summarizeTreeList(type, tree) {
|
|
309
|
+
if (!tree || typeof tree !== "object" || !Array.isArray(tree.volumes))
|
|
310
|
+
return [];
|
|
311
|
+
const volumes = tree.volumes;
|
|
312
|
+
if (type === "volume") {
|
|
313
|
+
return volumes.map(({ chapters, ...volume }) => ({ ...volume, chapterCount: Array.isArray(chapters) ? chapters.length : 0 }));
|
|
314
|
+
}
|
|
315
|
+
return volumes.flatMap((volume) => {
|
|
316
|
+
const chapters = Array.isArray(volume.chapters) ? volume.chapters : [];
|
|
317
|
+
return chapters.map((chapter) => ({
|
|
318
|
+
id: chapter.id,
|
|
319
|
+
workId: chapter.workId,
|
|
320
|
+
volumeId: volume.id,
|
|
321
|
+
volumeTitle: volume.title,
|
|
322
|
+
title: chapter.title,
|
|
323
|
+
chapterType: chapter.chapterType,
|
|
324
|
+
sortOrder: chapter.sortOrder,
|
|
325
|
+
wordCount: chapter.wordCount,
|
|
326
|
+
versionNo: chapter.versionNo,
|
|
327
|
+
analysisStatus: chapter.analysisStatus,
|
|
328
|
+
updatedAt: chapter.updatedAt
|
|
329
|
+
}));
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
function helpText() {
|
|
333
|
+
return `Scriverse CLI
|
|
334
|
+
|
|
335
|
+
认证:
|
|
336
|
+
scriverse auth login --server <url> [--api-key <key> | --api-key-file <path>]
|
|
337
|
+
scriverse auth status
|
|
338
|
+
scriverse auth logout
|
|
339
|
+
|
|
340
|
+
查询:
|
|
341
|
+
scriverse work list
|
|
342
|
+
scriverse work get <workId>
|
|
343
|
+
scriverse manuscript get <workId> [--format json|markdown|txt]
|
|
344
|
+
scriverse search <workId> --query <text>
|
|
345
|
+
scriverse audit <workId>
|
|
346
|
+
|
|
347
|
+
编辑:
|
|
348
|
+
scriverse work create --input <json-file|->
|
|
349
|
+
scriverse work update <workId> --input <json-file|->
|
|
350
|
+
scriverse resource list <type> <workId>
|
|
351
|
+
scriverse resource get <type> <id>
|
|
352
|
+
scriverse resource create <type> <workId|chapterId> --input <json-file|->
|
|
353
|
+
scriverse resource update <type> <id> --input <json-file|-> [--change-note <text>]
|
|
354
|
+
scriverse resource history <type> <id>
|
|
355
|
+
scriverse resource restore <type> <id> --version <number>
|
|
356
|
+
|
|
357
|
+
AI 编辑辅助:
|
|
358
|
+
scriverse schema list
|
|
359
|
+
scriverse schema show <type>
|
|
360
|
+
--field-file content=chapter.txt 可把长文本写入 JSON 字段
|
|
361
|
+
|
|
362
|
+
全局选项:
|
|
363
|
+
--config <path> 指定登录配置文件
|
|
364
|
+
--compact 输出单行 JSON
|
|
365
|
+
`;
|
|
366
|
+
}
|
|
367
|
+
function schemaList() {
|
|
368
|
+
return {
|
|
369
|
+
output: "除 manuscript 的 markdown/txt 外,所有成功结果都输出 JSON;错误输出到 stderr 并返回非零状态码。",
|
|
370
|
+
input: {
|
|
371
|
+
json: "create/update 使用 --input file.json 或 --input - 从标准输入读取 JSON 对象",
|
|
372
|
+
longText: "使用可重复的 --field-file field=path 注入长文本字段",
|
|
373
|
+
history: "版本化资源更新时使用 --change-note 说明修改原因"
|
|
374
|
+
},
|
|
375
|
+
prohibited: ["用户管理", "作品成员管理", "系统管理", "AI 供应商与模型管理", "删除操作", "任意 HTTP 请求"],
|
|
376
|
+
resources: cliResourceTypes.map((type) => ({
|
|
377
|
+
type,
|
|
378
|
+
description: cliResourceDefinitions[type].description,
|
|
379
|
+
scopeArgument: cliResourceDefinitions[type].scopeArgument,
|
|
380
|
+
actions: cliResourceDefinitions[type].actions
|
|
381
|
+
})),
|
|
382
|
+
work: cliWorkDefinition
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
async function execute(parsed, dependencies) {
|
|
386
|
+
const compact = option(parsed, "compact") === "true";
|
|
387
|
+
const [group, action] = parsed.positionals;
|
|
388
|
+
if (!group || group === "help" || option(parsed, "help") === "true") {
|
|
389
|
+
assertAllowedOptions(parsed, []);
|
|
390
|
+
emitText(dependencies.stdout, helpText());
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
const path = configPath(parsed, dependencies);
|
|
394
|
+
if (group === "auth") {
|
|
395
|
+
if (action === "login") {
|
|
396
|
+
assertAllowedOptions(parsed, ["server", "api-key", "api-key-file"]);
|
|
397
|
+
assertPositionCount(parsed.positionals, 2);
|
|
398
|
+
const server = normalizeServer(option(parsed, "server") ?? "");
|
|
399
|
+
const directKey = option(parsed, "api-key");
|
|
400
|
+
const keyFile = option(parsed, "api-key-file");
|
|
401
|
+
const environmentKey = dependencies.env.SCRIVERSE_API_KEY?.trim();
|
|
402
|
+
const supplied = [directKey, keyFile ? readBoundedFile(keyFile, dependencies.cwd).trim() : undefined, environmentKey].filter((value) => Boolean(value));
|
|
403
|
+
if (supplied.length !== 1) {
|
|
404
|
+
throw new CliError("CLI_API_KEY_REQUIRED", "请通过 --api-key、--api-key-file 或 SCRIVERSE_API_KEY 三者之一提供 API Key");
|
|
405
|
+
}
|
|
406
|
+
const apiKey = supplied[0];
|
|
407
|
+
const temporary = {
|
|
408
|
+
version: 1,
|
|
409
|
+
server,
|
|
410
|
+
apiKey,
|
|
411
|
+
apiKeyPrefix: null,
|
|
412
|
+
user: { userId: "", username: "", displayName: "", role: "user" }
|
|
413
|
+
};
|
|
414
|
+
const session = await apiRequest(dependencies.fetchImpl, temporary, "/api/cli/session");
|
|
415
|
+
if (!session.user?.userId)
|
|
416
|
+
throw new CliError("CLI_RESPONSE_INVALID", "服务端没有返回有效用户信息");
|
|
417
|
+
const config = {
|
|
418
|
+
version: 1,
|
|
419
|
+
server,
|
|
420
|
+
apiKey,
|
|
421
|
+
apiKeyPrefix: session.apiKeyPrefix ?? null,
|
|
422
|
+
user: session.user
|
|
423
|
+
};
|
|
424
|
+
writeConfig(path, config);
|
|
425
|
+
emitJson(dependencies.stdout, { authenticated: true, server, user: config.user, apiKeyPrefix: config.apiKeyPrefix, configPath: path }, compact);
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
if (action === "status") {
|
|
429
|
+
assertAllowedOptions(parsed, []);
|
|
430
|
+
assertPositionCount(parsed.positionals, 2);
|
|
431
|
+
if (!existsSync(path)) {
|
|
432
|
+
emitJson(dependencies.stdout, { authenticated: false, configPath: path }, compact);
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
const config = readConfig(path);
|
|
436
|
+
const session = await apiRequest(dependencies.fetchImpl, config, "/api/cli/session");
|
|
437
|
+
emitJson(dependencies.stdout, { ...session, server: config.server, configPath: path }, compact);
|
|
438
|
+
return;
|
|
439
|
+
}
|
|
440
|
+
if (action === "logout") {
|
|
441
|
+
assertAllowedOptions(parsed, []);
|
|
442
|
+
assertPositionCount(parsed.positionals, 2);
|
|
443
|
+
rmSync(path, { force: true });
|
|
444
|
+
emitJson(dependencies.stdout, { authenticated: false, configPath: path }, compact);
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
throw new CliError("CLI_COMMAND_UNKNOWN", "未知 auth 命令");
|
|
448
|
+
}
|
|
449
|
+
if (group === "schema") {
|
|
450
|
+
if (action === "list") {
|
|
451
|
+
assertAllowedOptions(parsed, []);
|
|
452
|
+
assertPositionCount(parsed.positionals, 2);
|
|
453
|
+
emitJson(dependencies.stdout, schemaList(), compact);
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
if (action === "show") {
|
|
457
|
+
assertAllowedOptions(parsed, []);
|
|
458
|
+
const requestedType = requiredPosition(parsed.positionals, 2, "resource type");
|
|
459
|
+
assertPositionCount(parsed.positionals, 3);
|
|
460
|
+
if (requestedType === "work") {
|
|
461
|
+
emitJson(dependencies.stdout, { type: "work", ...cliWorkDefinition }, compact);
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
const type = resourceType(requestedType);
|
|
465
|
+
emitJson(dependencies.stdout, { type, ...cliResourceDefinitions[type] }, compact);
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
throw new CliError("CLI_COMMAND_UNKNOWN", "未知 schema 命令");
|
|
469
|
+
}
|
|
470
|
+
if (!["work", "manuscript", "search", "audit", "resource"].includes(group)) {
|
|
471
|
+
throw new CliError("CLI_COMMAND_UNKNOWN", "未知命令;使用 --help 查看可用命令");
|
|
472
|
+
}
|
|
473
|
+
const config = readConfig(path);
|
|
474
|
+
if (group === "work") {
|
|
475
|
+
if (action === "list") {
|
|
476
|
+
assertAllowedOptions(parsed, []);
|
|
477
|
+
assertPositionCount(parsed.positionals, 2);
|
|
478
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, "/api/works"), compact);
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
if (action === "get") {
|
|
482
|
+
assertAllowedOptions(parsed, []);
|
|
483
|
+
const workId = requiredPosition(parsed.positionals, 2, "workId");
|
|
484
|
+
assertPositionCount(parsed.positionals, 3);
|
|
485
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}`), compact);
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
if (action === "create") {
|
|
489
|
+
assertAllowedOptions(parsed, ["input", "field-file"]);
|
|
490
|
+
assertPositionCount(parsed.positionals, 2);
|
|
491
|
+
const body = await editInput(parsed, dependencies, false);
|
|
492
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, "/api/works", { method: "POST", body }), compact);
|
|
493
|
+
return;
|
|
494
|
+
}
|
|
495
|
+
if (action === "update") {
|
|
496
|
+
assertAllowedOptions(parsed, ["input", "field-file"]);
|
|
497
|
+
const workId = requiredPosition(parsed.positionals, 2, "workId");
|
|
498
|
+
assertPositionCount(parsed.positionals, 3);
|
|
499
|
+
const body = await editInput(parsed, dependencies, false);
|
|
500
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}`, { method: "PATCH", body }), compact);
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
throw new CliError("CLI_COMMAND_UNKNOWN", "未知 work 命令");
|
|
504
|
+
}
|
|
505
|
+
if (group === "manuscript" && action === "get") {
|
|
506
|
+
assertAllowedOptions(parsed, ["format"]);
|
|
507
|
+
const workId = requiredPosition(parsed.positionals, 2, "workId");
|
|
508
|
+
assertPositionCount(parsed.positionals, 3);
|
|
509
|
+
const format = option(parsed, "format") ?? "json";
|
|
510
|
+
if (!["json", "markdown", "txt"].includes(format))
|
|
511
|
+
throw new CliError("CLI_FORMAT_INVALID", "format 必须是 json、markdown 或 txt");
|
|
512
|
+
if (format === "json") {
|
|
513
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}`), compact);
|
|
514
|
+
}
|
|
515
|
+
else {
|
|
516
|
+
emitText(dependencies.stdout, String(await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}/export?format=${format}`, { text: true })));
|
|
517
|
+
}
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
if (group === "search") {
|
|
521
|
+
assertAllowedOptions(parsed, ["query"]);
|
|
522
|
+
const workId = requiredPosition(parsed.positionals, 1, "workId");
|
|
523
|
+
assertPositionCount(parsed.positionals, 2);
|
|
524
|
+
const query = option(parsed, "query")?.trim();
|
|
525
|
+
if (!query)
|
|
526
|
+
throw new CliError("CLI_QUERY_REQUIRED", "请使用 --query 提供搜索词");
|
|
527
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}/search?q=${encodeURIComponent(query)}`), compact);
|
|
528
|
+
return;
|
|
529
|
+
}
|
|
530
|
+
if (group === "audit") {
|
|
531
|
+
assertAllowedOptions(parsed, []);
|
|
532
|
+
const workId = requiredPosition(parsed.positionals, 1, "workId");
|
|
533
|
+
assertPositionCount(parsed.positionals, 2);
|
|
534
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, `/api/works/${encoded(workId)}/audit-logs`), compact);
|
|
535
|
+
return;
|
|
536
|
+
}
|
|
537
|
+
if (group === "resource") {
|
|
538
|
+
const type = resourceType(requiredPosition(parsed.positionals, 2, "resource type"));
|
|
539
|
+
const id = requiredPosition(parsed.positionals, 3, action === "list" ? "workId" : (action === "create" ? cliResourceDefinitions[type].scopeArgument : "resource id"));
|
|
540
|
+
assertPositionCount(parsed.positionals, 4);
|
|
541
|
+
if (!cliResourceDefinitions[type].actions.includes(action)) {
|
|
542
|
+
throw new CliError("CLI_ACTION_UNSUPPORTED", `${type} 不支持 ${action}`);
|
|
543
|
+
}
|
|
544
|
+
if (action === "list") {
|
|
545
|
+
assertAllowedOptions(parsed, []);
|
|
546
|
+
const result = await apiRequest(dependencies.fetchImpl, config, resourceListPath(type, id));
|
|
547
|
+
emitJson(dependencies.stdout, type === "volume" || type === "chapter" ? summarizeTreeList(type, result) : result, compact);
|
|
548
|
+
return;
|
|
549
|
+
}
|
|
550
|
+
if (action === "get") {
|
|
551
|
+
assertAllowedOptions(parsed, []);
|
|
552
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, resourceGetPath(type, id)), compact);
|
|
553
|
+
return;
|
|
554
|
+
}
|
|
555
|
+
if (action === "create") {
|
|
556
|
+
assertAllowedOptions(parsed, ["input", "field-file"]);
|
|
557
|
+
const body = await editInput(parsed, dependencies, false);
|
|
558
|
+
const endpoint = resourceCreatePath(type, id);
|
|
559
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, endpoint.path, { method: endpoint.method, body }), compact);
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
if (action === "update") {
|
|
563
|
+
assertAllowedOptions(parsed, ["input", "field-file", "change-note"]);
|
|
564
|
+
const body = await editInput(parsed, dependencies, type !== "volume");
|
|
565
|
+
const endpoint = resourceUpdatePath(type, id);
|
|
566
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, endpoint.path, { method: endpoint.method, body }), compact);
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
569
|
+
if (action === "history") {
|
|
570
|
+
assertAllowedOptions(parsed, []);
|
|
571
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, resourceHistoryPath(type, id)), compact);
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
574
|
+
if (action === "restore") {
|
|
575
|
+
assertAllowedOptions(parsed, ["version"]);
|
|
576
|
+
const version = Number(option(parsed, "version"));
|
|
577
|
+
if (!Number.isInteger(version) || version <= 0)
|
|
578
|
+
throw new CliError("CLI_VERSION_INVALID", "请使用 --version 提供正整数版本号");
|
|
579
|
+
emitJson(dependencies.stdout, await apiRequest(dependencies.fetchImpl, config, resourceRestorePath(type, id), { method: "POST", body: { versionNo: version } }), compact);
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
throw new CliError("CLI_COMMAND_UNKNOWN", "未知 resource 命令");
|
|
583
|
+
}
|
|
584
|
+
throw new CliError("CLI_COMMAND_UNKNOWN", "未知命令;使用 --help 查看可用命令");
|
|
585
|
+
}
|
|
586
|
+
export async function runCli(args, inputDependencies = {}) {
|
|
587
|
+
const dependencies = {
|
|
588
|
+
fetchImpl: inputDependencies.fetchImpl ?? fetch,
|
|
589
|
+
stdin: inputDependencies.stdin ?? process.stdin,
|
|
590
|
+
stdout: inputDependencies.stdout ?? process.stdout,
|
|
591
|
+
stderr: inputDependencies.stderr ?? process.stderr,
|
|
592
|
+
env: inputDependencies.env ?? process.env,
|
|
593
|
+
cwd: inputDependencies.cwd ?? process.cwd(),
|
|
594
|
+
homeDirectory: inputDependencies.homeDirectory ?? homedir()
|
|
595
|
+
};
|
|
596
|
+
try {
|
|
597
|
+
await execute(parseCliArguments(args), dependencies);
|
|
598
|
+
return 0;
|
|
599
|
+
}
|
|
600
|
+
catch (error) {
|
|
601
|
+
const compact = args.includes("--compact");
|
|
602
|
+
if (error instanceof CliError) {
|
|
603
|
+
emitJson(dependencies.stderr, { error: { code: error.code, message: error.message, ...(error.details === undefined ? {} : { details: error.details }) } }, compact);
|
|
604
|
+
}
|
|
605
|
+
else {
|
|
606
|
+
emitJson(dependencies.stderr, { error: { code: "CLI_INTERNAL_ERROR", message: error instanceof Error ? error.message : "CLI 内部错误" } }, compact);
|
|
607
|
+
}
|
|
608
|
+
return 1;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
//# sourceMappingURL=cli-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-core.js","sourceRoot":"","sources":["../src/cli-core.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
ADDED