pixivflow 2.13.0 → 2.15.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 +20 -2
- package/README_EN.md +11 -3
- package/config/fly-two-bots.example.json +3 -1
- package/dist/commands/OutboxCommand.d.ts +17 -0
- package/dist/commands/OutboxCommand.d.ts.map +1 -0
- package/dist/commands/OutboxCommand.js +149 -0
- package/dist/commands/OutboxCommand.js.map +1 -0
- package/dist/commands/RunsCommand.d.ts +21 -0
- package/dist/commands/RunsCommand.d.ts.map +1 -0
- package/dist/commands/RunsCommand.js +65 -0
- package/dist/commands/RunsCommand.js.map +1 -0
- package/dist/commands/VersionCommand.d.ts +2 -0
- package/dist/commands/VersionCommand.d.ts.map +1 -1
- package/dist/commands/VersionCommand.js +10 -46
- package/dist/commands/VersionCommand.js.map +1 -1
- package/dist/commands/index.d.ts +3 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +7 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/scheduler-runtime.d.ts.map +1 -1
- package/dist/commands/scheduler-runtime.js +2 -0
- package/dist/commands/scheduler-runtime.js.map +1 -1
- package/dist/config/types.d.ts +4 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +10 -0
- package/dist/config/validation.js.map +1 -1
- package/dist/delivery/DeliveryDispatcher.d.ts +4 -0
- package/dist/delivery/DeliveryDispatcher.d.ts.map +1 -1
- package/dist/delivery/DeliveryDispatcher.js +12 -0
- package/dist/delivery/DeliveryDispatcher.js.map +1 -1
- package/dist/delivery/DeliveryService.d.ts.map +1 -1
- package/dist/delivery/DeliveryService.js +2 -0
- package/dist/delivery/DeliveryService.js.map +1 -1
- package/dist/delivery/HttpMultipartDelivery.d.ts +14 -0
- package/dist/delivery/HttpMultipartDelivery.d.ts.map +1 -1
- package/dist/delivery/HttpMultipartDelivery.js +59 -16
- package/dist/delivery/HttpMultipartDelivery.js.map +1 -1
- package/dist/delivery/OutboxWorker.d.ts +15 -0
- package/dist/delivery/OutboxWorker.d.ts.map +1 -1
- package/dist/delivery/OutboxWorker.js +136 -4
- package/dist/delivery/OutboxWorker.js.map +1 -1
- package/dist/delivery/errorClass.d.ts +12 -0
- package/dist/delivery/errorClass.d.ts.map +1 -0
- package/dist/delivery/errorClass.js +34 -0
- package/dist/delivery/errorClass.js.map +1 -0
- package/dist/delivery/types.d.ts +4 -0
- package/dist/delivery/types.d.ts.map +1 -1
- package/dist/download/IllustrationDownloader.d.ts +1 -0
- package/dist/download/IllustrationDownloader.d.ts.map +1 -1
- package/dist/download/IllustrationDownloader.js +19 -1
- package/dist/download/IllustrationDownloader.js.map +1 -1
- package/dist/download/handlers/IllustrationTargetHandler.d.ts.map +1 -1
- package/dist/download/handlers/IllustrationTargetHandler.js +1 -0
- package/dist/download/handlers/IllustrationTargetHandler.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/scheduler/SlotCoordinator.d.ts +7 -0
- package/dist/scheduler/SlotCoordinator.d.ts.map +1 -1
- package/dist/scheduler/SlotCoordinator.js +26 -0
- package/dist/scheduler/SlotCoordinator.js.map +1 -1
- package/dist/storage/DatabaseMigration.d.ts.map +1 -1
- package/dist/storage/DatabaseMigration.js +22 -0
- package/dist/storage/DatabaseMigration.js.map +1 -1
- package/dist/storage/repositories/OutboxRepository.d.ts +59 -1
- package/dist/storage/repositories/OutboxRepository.d.ts.map +1 -1
- package/dist/storage/repositories/OutboxRepository.js +202 -0
- package/dist/storage/repositories/OutboxRepository.js.map +1 -1
- package/dist/utils/config-validator-unified.d.ts.map +1 -1
- package/dist/utils/config-validator-unified.js +14 -0
- package/dist/utils/config-validator-unified.js.map +1 -1
- package/dist/utils/redact.d.ts +14 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +47 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/dist/webui/package.json +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -122,6 +122,7 @@ pixivflow scheduler # 按 cron 配置长期挂机自动收集
|
|
|
122
122
|
"tg-example": {
|
|
123
123
|
"type": "httpMultipart",
|
|
124
124
|
"url": "https://your-domain.example/api/bot1/v1/submissions",
|
|
125
|
+
"readinessUrl": "https://your-domain.example/ready",
|
|
125
126
|
"notificationUrl": "https://your-domain.example/api/bot1/v1/notifications",
|
|
126
127
|
"headers": { "Authorization": "Bearer ${TG_SUBMIT_TOKEN}" },
|
|
127
128
|
"fileField": "files",
|
|
@@ -149,7 +150,9 @@ pixivflow scheduler # 按 cron 配置长期挂机自动收集
|
|
|
149
150
|
}
|
|
150
151
|
```
|
|
151
152
|
|
|
152
|
-
`headers` 和 `
|
|
153
|
+
`headers`、`url` 和 `readinessUrl` 里可用 `${环境变量名}` 引用环境变量(Token 别写死进配置)。
|
|
154
|
+
插画 cache 投递会在 multipart 的 `previews` 字段携带 Pixiv 的低分辨率预览(与 `files`
|
|
155
|
+
一一对应),原图仍是权威素材;通用接收端可以忽略该可选字段。
|
|
153
156
|
|
|
154
157
|
投递是**事务发件箱(SQLite outbox)**式的,at-least-once 执行、effectively-once
|
|
155
158
|
可见效果:每个外部副作用(一次内容投递、一条通知)在 `outbox` 表落一行,带幂等键和
|
|
@@ -161,6 +164,20 @@ pixivflow scheduler # 按 cron 配置长期挂机自动收集
|
|
|
161
164
|
迁移进 SQLite,迁移幂等。「今天没有可投稿内容」这类通知与内容投递走同一张表、独立泵送,
|
|
162
165
|
审核端暂时挂掉不会互相阻塞。
|
|
163
166
|
|
|
167
|
+
配置 `readinessUrl` 后,worker 每次认领都先检查依赖 `/ready`。非 2xx 只把 row 放回 pending,
|
|
168
|
+
不增加 attempt;这与 `/live` 的“进程还活着”语义严格分开。dead letter 通过正式 CLI 恢复:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
pixivflow outbox list --status dead
|
|
172
|
+
pixivflow outbox inspect <id>
|
|
173
|
+
pixivflow outbox retry <id> # 只接受 dead row,保留 idempotency key
|
|
174
|
+
pixivflow outbox retry --dead
|
|
175
|
+
pixivflow outbox cancel <id> # 只取消尚未执行的 row
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
`run-once` 会重新执行下载计划,不等价于 outbox replay;不要手改 SQLite 的
|
|
179
|
+
`next_attempt_at`。
|
|
180
|
+
|
|
164
181
|
运维通知可直接把 `notificationUrl` 指向 [Apprise API](docs/APPRISE.md),由 Apprise 统一发送
|
|
165
182
|
Email、Telegram、Discord、ntfy 等渠道;PixivFlow 不实现这些通知协议。
|
|
166
183
|
|
|
@@ -182,6 +199,7 @@ Email、Telegram、Discord、ntfy 等渠道;PixivFlow 不实现这些通知协
|
|
|
182
199
|
| `pixivflow health` | 健康检查:配置、目录可写性、连通性 |
|
|
183
200
|
| `pixivflow doctor` | 可靠性体检:卡住的 slot/outbox 租约、pending 投递、dead 行;`--repair` 收敛 |
|
|
184
201
|
| `pixivflow reconcile` | 把下游已确认的历史重复登记进投递账本(默认 dry-run,`--repair` 落库) |
|
|
202
|
+
| `pixivflow outbox` | 列出、检查、重放 dead letter 或取消尚未执行的 durable intent |
|
|
185
203
|
| `pixivflow tags discover <词>` | 发现相关 Tag(Pixiv 联想 + 作品标签共现),只列候选不改配置 |
|
|
186
204
|
| `pixivflow tags apply <清单> --target <id> --select <tag1,tag2>` | 人工确认后把所选 Tag 原子写入配置并触发热重载 |
|
|
187
205
|
| `pixivflow topic resolve <主题>` | 查看自动推导出的相关 Tag 空间(`--type illustration\|novel`、`--refresh`) |
|
|
@@ -229,4 +247,4 @@ Bug 与功能建议请提交到
|
|
|
229
247
|
|
|
230
248
|
## 许可证
|
|
231
249
|
|
|
232
|
-
[MIT](LICENSE)
|
|
250
|
+
[MIT](LICENSE)
|
package/README_EN.md
CHANGED
|
@@ -102,6 +102,7 @@ merely translates an HTTP multipart submission API into configuration:
|
|
|
102
102
|
"sharing-api": {
|
|
103
103
|
"type": "httpMultipart",
|
|
104
104
|
"url": "https://example.test/submissions",
|
|
105
|
+
"readinessUrl": "https://example.test/ready",
|
|
105
106
|
"notificationUrl": "https://example.test/notifications",
|
|
106
107
|
"headers": { "Authorization": "Bearer ${SHARING_TOKEN}" },
|
|
107
108
|
"fileField": "files",
|
|
@@ -125,12 +126,19 @@ merely translates an HTTP multipart submission API into configuration:
|
|
|
125
126
|
}
|
|
126
127
|
```
|
|
127
128
|
|
|
128
|
-
Headers and URLs accept arbitrary `${ENV_NAME}` interpolation.
|
|
129
|
-
|
|
130
|
-
|
|
129
|
+
Headers and URLs accept arbitrary `${ENV_NAME}` interpolation. Cache-mode
|
|
130
|
+
illustration delivery also sends an optional, one-to-one Pixiv preview in the
|
|
131
|
+
`previews` multipart field while retaining the original as the authoritative
|
|
132
|
+
artifact. Failed delivery keeps both files in the SQLite outbox; the worker
|
|
133
|
+
retries the same intent after restart. Final no-match
|
|
131
134
|
notifications use the same durable outbox, so a restart or a temporary review
|
|
132
135
|
endpoint outage does not silently lose the alert.
|
|
133
136
|
|
|
137
|
+
When `readinessUrl` is configured, a non-2xx readiness response defers the row
|
|
138
|
+
without incrementing its attempt count. Use `pixivflow outbox list`,
|
|
139
|
+
`inspect <id>`, `retry <id>` / `retry --dead`, and `cancel <id>` for recovery;
|
|
140
|
+
`run-once` is not an outbox replay command.
|
|
141
|
+
|
|
134
142
|
Interactive configuration wizard: `pixivflow setup`.
|
|
135
143
|
|
|
136
144
|
## Common commands
|
|
@@ -78,6 +78,7 @@
|
|
|
78
78
|
"telepost-bot1": {
|
|
79
79
|
"type": "httpMultipart",
|
|
80
80
|
"url": "http://127.0.0.1:8080/api/bot1/v1/submissions",
|
|
81
|
+
"readinessUrl": "http://127.0.0.1:8080/ready",
|
|
81
82
|
"notificationUrl": "http://127.0.0.1:8080/api/bot1/v1/notifications",
|
|
82
83
|
"headers": {
|
|
83
84
|
"Authorization": "Bearer ${TELEPOST_BOT1_SUBMIT_TOKEN}"
|
|
@@ -110,6 +111,7 @@
|
|
|
110
111
|
"telepost-bot2": {
|
|
111
112
|
"type": "httpMultipart",
|
|
112
113
|
"url": "http://127.0.0.1:8080/api/bot2/v1/submissions",
|
|
114
|
+
"readinessUrl": "http://127.0.0.1:8080/ready",
|
|
113
115
|
"notificationUrl": "http://127.0.0.1:8080/api/bot2/v1/notifications",
|
|
114
116
|
"headers": {
|
|
115
117
|
"Authorization": "Bearer ${TELEPOST_BOT2_SUBMIT_TOKEN}"
|
|
@@ -249,4 +251,4 @@
|
|
|
249
251
|
}
|
|
250
252
|
],
|
|
251
253
|
"initialDelay": 0
|
|
252
|
-
}
|
|
254
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BaseCommand } from './Command';
|
|
2
|
+
import { CommandCategory } from './metadata';
|
|
3
|
+
import { CommandArgs, CommandContext, CommandResult } from './types';
|
|
4
|
+
export declare class OutboxCommand extends BaseCommand {
|
|
5
|
+
readonly name = "outbox";
|
|
6
|
+
readonly description = "List, inspect, retry or cancel durable delivery intents";
|
|
7
|
+
readonly requiresToken = false;
|
|
8
|
+
readonly metadata: {
|
|
9
|
+
category: CommandCategory;
|
|
10
|
+
requiresAuth: boolean;
|
|
11
|
+
longRunning: boolean;
|
|
12
|
+
};
|
|
13
|
+
getUsage(): string;
|
|
14
|
+
execute(context: CommandContext, args: CommandArgs): Promise<CommandResult>;
|
|
15
|
+
private summary;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=OutboxCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutboxCommand.d.ts","sourceRoot":"","sources":["../../src/commands/OutboxCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AA+BrE,qBAAa,aAAc,SAAQ,WAAW;IAC5C,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,6DAA6D;IACjF,QAAQ,CAAC,aAAa,SAAS;IAC/B,QAAQ,CAAC,QAAQ;;;;MAIf;IAEF,QAAQ,IAAI,MAAM;IAUZ,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAiFjF,OAAO,CAAC,OAAO;CAWhB"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OutboxCommand = void 0;
|
|
4
|
+
const Command_1 = require("./Command");
|
|
5
|
+
const metadata_1 = require("./metadata");
|
|
6
|
+
const Database_1 = require("../storage/Database");
|
|
7
|
+
const STATUSES = new Set([
|
|
8
|
+
'pending', 'processing', 'retry_wait', 'done', 'dead', 'cancelled',
|
|
9
|
+
]);
|
|
10
|
+
/** Operator-initiated audit event (never counts as an attempt). */
|
|
11
|
+
function recordCliEvent(db, row, event) {
|
|
12
|
+
let executionId;
|
|
13
|
+
let slotId;
|
|
14
|
+
let pixivId;
|
|
15
|
+
try {
|
|
16
|
+
const c = JSON.parse(row.payloadJson).context ?? {};
|
|
17
|
+
const str = (v) => (typeof v === 'string' ? v : undefined);
|
|
18
|
+
executionId = str(c.executionId) ?? str(c.slotId);
|
|
19
|
+
slotId = str(c.slotId);
|
|
20
|
+
pixivId = str(c.pixivId);
|
|
21
|
+
}
|
|
22
|
+
catch { /* payload without context (e.g. notification) */ }
|
|
23
|
+
db.outbox.recordEvent({
|
|
24
|
+
event,
|
|
25
|
+
actor: 'cli',
|
|
26
|
+
countsAsAttempt: 0,
|
|
27
|
+
deliveryId: row.deliveryId,
|
|
28
|
+
outboxId: row.id,
|
|
29
|
+
deliveryTarget: row.deliveryTarget,
|
|
30
|
+
executionId, slotId, pixivId,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
class OutboxCommand extends Command_1.BaseCommand {
|
|
34
|
+
name = 'outbox';
|
|
35
|
+
description = 'List, inspect, retry or cancel durable delivery intents';
|
|
36
|
+
requiresToken = false;
|
|
37
|
+
metadata = {
|
|
38
|
+
category: metadata_1.CommandCategory.MAINTENANCE,
|
|
39
|
+
requiresAuth: true,
|
|
40
|
+
longRunning: false,
|
|
41
|
+
};
|
|
42
|
+
getUsage() {
|
|
43
|
+
return [
|
|
44
|
+
'pixivflow outbox list [--status dead] [--limit 100]',
|
|
45
|
+
'pixivflow outbox inspect <id>',
|
|
46
|
+
'pixivflow outbox retry <id>',
|
|
47
|
+
'pixivflow outbox retry --dead',
|
|
48
|
+
'pixivflow outbox cancel <id>',
|
|
49
|
+
].join('\n');
|
|
50
|
+
}
|
|
51
|
+
async execute(context, args) {
|
|
52
|
+
const action = args.positional[0] ?? 'list';
|
|
53
|
+
const id = args.positional[1];
|
|
54
|
+
const db = new Database_1.Database(context.config.storage?.databasePath ?? './data/pixiv-downloader.db');
|
|
55
|
+
try {
|
|
56
|
+
db.migrate();
|
|
57
|
+
if (action === 'list') {
|
|
58
|
+
const rawStatus = typeof args.options.status === 'string'
|
|
59
|
+
? args.options.status : undefined;
|
|
60
|
+
if (rawStatus && !STATUSES.has(rawStatus)) {
|
|
61
|
+
return this.failure(`unknown outbox status: ${rawStatus}`);
|
|
62
|
+
}
|
|
63
|
+
const limit = Number(args.options.limit ?? 100);
|
|
64
|
+
const rows = db.outbox.list(rawStatus, Number.isFinite(limit) ? limit : 100);
|
|
65
|
+
for (const row of rows)
|
|
66
|
+
context.logger.info('outbox', this.summary(row));
|
|
67
|
+
return this.success(`${rows.length} outbox row(s)`, rows.map((row) => this.summary(row)));
|
|
68
|
+
}
|
|
69
|
+
if (action === 'inspect') {
|
|
70
|
+
if (!id)
|
|
71
|
+
return this.failure('Usage: pixivflow outbox inspect <id>');
|
|
72
|
+
const row = db.outbox.get(id);
|
|
73
|
+
if (!row)
|
|
74
|
+
return this.failure(`outbox row not found: ${id}`);
|
|
75
|
+
const events = db.outbox.listEvents({ outboxId: id, limit: 20 });
|
|
76
|
+
const deferred = events.filter((e) => e.event === 'outbox.deferred');
|
|
77
|
+
const failures = events.filter((e) => e.countsAsAttempt === 1);
|
|
78
|
+
for (const e of deferred) {
|
|
79
|
+
context.logger.info('not ready (deferred, no attempt consumed)', {
|
|
80
|
+
ts: e.ts, errorClass: e.errorClass, detail: e.detail,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
for (const e of failures) {
|
|
84
|
+
context.logger.info('attempt-consuming event', {
|
|
85
|
+
event: e.event, ts: e.ts, errorClass: e.errorClass, retryable: e.retryable, detail: e.detail,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return this.success('outbox row', {
|
|
89
|
+
row,
|
|
90
|
+
events: events.map((e) => ({
|
|
91
|
+
ts: e.ts, event: e.event, errorClass: e.errorClass,
|
|
92
|
+
countsAsAttempt: e.countsAsAttempt, retryable: e.retryable, actor: e.actor, detail: e.detail,
|
|
93
|
+
})),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
if (action === 'retry') {
|
|
97
|
+
const rows = args.options.dead ? db.outbox.list('dead', 500) : [];
|
|
98
|
+
if (!args.options.dead) {
|
|
99
|
+
if (!id)
|
|
100
|
+
return this.failure('Usage: pixivflow outbox retry <id> | --dead');
|
|
101
|
+
const row = db.outbox.get(id);
|
|
102
|
+
if (!row)
|
|
103
|
+
return this.failure(`outbox row not found: ${id}`);
|
|
104
|
+
if (row.status !== 'dead') {
|
|
105
|
+
return this.failure(`outbox row is not dead: ${id}`);
|
|
106
|
+
}
|
|
107
|
+
rows.push(row);
|
|
108
|
+
}
|
|
109
|
+
for (const row of rows) {
|
|
110
|
+
db.outbox.requeue(row.id);
|
|
111
|
+
recordCliEvent(db, row, 'outbox.replay_requested');
|
|
112
|
+
}
|
|
113
|
+
return this.success(`requeued ${rows.length} outbox row(s)`, { ids: rows.map((row) => row.id) });
|
|
114
|
+
}
|
|
115
|
+
if (action === 'cancel') {
|
|
116
|
+
if (!id)
|
|
117
|
+
return this.failure('Usage: pixivflow outbox cancel <id>');
|
|
118
|
+
const row = db.outbox.get(id);
|
|
119
|
+
if (!row || !db.outbox.cancel(id)) {
|
|
120
|
+
return this.failure(`outbox row is missing, processing or already terminal: ${id}`);
|
|
121
|
+
}
|
|
122
|
+
if (row.deliveryId) {
|
|
123
|
+
db.deliveries.recordAck(row.deliveryId, {
|
|
124
|
+
status: 'failed', remoteStatus: 'cancelled', error: 'cancelled by operator',
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
recordCliEvent(db, row, 'outbox.cancelled');
|
|
128
|
+
return this.success('outbox row cancelled', { id });
|
|
129
|
+
}
|
|
130
|
+
return this.failure(this.getUsage());
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
db.close();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
summary(row) {
|
|
137
|
+
return {
|
|
138
|
+
id: row.id,
|
|
139
|
+
kind: row.kind,
|
|
140
|
+
status: row.status,
|
|
141
|
+
deliveryTarget: row.deliveryTarget,
|
|
142
|
+
attempts: row.attempts,
|
|
143
|
+
nextAttemptAt: row.nextAttemptAt,
|
|
144
|
+
lastError: row.lastError,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
exports.OutboxCommand = OutboxCommand;
|
|
149
|
+
//# sourceMappingURL=OutboxCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutboxCommand.js","sourceRoot":"","sources":["../../src/commands/OutboxCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BaseCommand } from './Command';
|
|
2
|
+
import { CommandCategory } from './metadata';
|
|
3
|
+
import { CommandArgs, CommandContext, CommandResult } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Read-only observability queries over scheduler occurrences:
|
|
6
|
+
* pixivflow runs list [--limit 20]
|
|
7
|
+
* pixivflow runs show <executionId> (executionId == slot id)
|
|
8
|
+
*/
|
|
9
|
+
export declare class RunsCommand extends BaseCommand {
|
|
10
|
+
readonly name = "runs";
|
|
11
|
+
readonly description = "List scheduler runs and show one execution summary";
|
|
12
|
+
readonly requiresToken = false;
|
|
13
|
+
readonly metadata: {
|
|
14
|
+
category: CommandCategory;
|
|
15
|
+
requiresAuth: boolean;
|
|
16
|
+
longRunning: boolean;
|
|
17
|
+
};
|
|
18
|
+
getUsage(): string;
|
|
19
|
+
execute(context: CommandContext, args: CommandArgs): Promise<CommandResult>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=RunsCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunsCommand.d.ts","sourceRoot":"","sources":["../../src/commands/RunsCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGrE;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,WAAW;IAC1C,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,wDAAwD;IAC5E,QAAQ,CAAC,aAAa,SAAS;IAC/B,QAAQ,CAAC,QAAQ;;;;MAIf;IAEF,QAAQ,IAAI,MAAM;IAOZ,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;CAmClF"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RunsCommand = void 0;
|
|
4
|
+
const Command_1 = require("./Command");
|
|
5
|
+
const metadata_1 = require("./metadata");
|
|
6
|
+
const Database_1 = require("../storage/Database");
|
|
7
|
+
/**
|
|
8
|
+
* Read-only observability queries over scheduler occurrences:
|
|
9
|
+
* pixivflow runs list [--limit 20]
|
|
10
|
+
* pixivflow runs show <executionId> (executionId == slot id)
|
|
11
|
+
*/
|
|
12
|
+
class RunsCommand extends Command_1.BaseCommand {
|
|
13
|
+
name = 'runs';
|
|
14
|
+
description = 'List scheduler runs and show one execution summary';
|
|
15
|
+
requiresToken = false;
|
|
16
|
+
metadata = {
|
|
17
|
+
category: metadata_1.CommandCategory.MAINTENANCE,
|
|
18
|
+
requiresAuth: true,
|
|
19
|
+
longRunning: false,
|
|
20
|
+
};
|
|
21
|
+
getUsage() {
|
|
22
|
+
return [
|
|
23
|
+
'pixivflow runs list [--limit 20]',
|
|
24
|
+
'pixivflow runs show <executionId>',
|
|
25
|
+
].join('\n');
|
|
26
|
+
}
|
|
27
|
+
async execute(context, args) {
|
|
28
|
+
const action = args.positional[0] ?? 'list';
|
|
29
|
+
const db = new Database_1.Database(context.config.storage?.databasePath ?? './data/pixiv-downloader.db');
|
|
30
|
+
try {
|
|
31
|
+
db.migrate();
|
|
32
|
+
if (action === 'list') {
|
|
33
|
+
const limit = Number(args.options.limit ?? 20);
|
|
34
|
+
const rows = db.getRecentSchedulerExecutions(Number.isFinite(limit) ? limit : 20);
|
|
35
|
+
const data = rows.map((r) => ({
|
|
36
|
+
id: r.id,
|
|
37
|
+
number: r.executionNumber,
|
|
38
|
+
scheduleId: r.scheduleId,
|
|
39
|
+
status: r.status,
|
|
40
|
+
start: r.startTime,
|
|
41
|
+
end: r.endTime,
|
|
42
|
+
durationMs: r.duration,
|
|
43
|
+
}));
|
|
44
|
+
for (const row of data)
|
|
45
|
+
context.logger.info('run', row);
|
|
46
|
+
return this.success(`${data.length} run(s)`, data);
|
|
47
|
+
}
|
|
48
|
+
if (action === 'show') {
|
|
49
|
+
const executionId = args.positional[1];
|
|
50
|
+
if (!executionId)
|
|
51
|
+
return this.failure('Usage: pixivflow runs show <executionId>');
|
|
52
|
+
const summary = db.outbox.executionSummary(executionId);
|
|
53
|
+
const text = JSON.stringify(summary, null, 2);
|
|
54
|
+
context.logger.info(text);
|
|
55
|
+
return this.success('execution summary', summary);
|
|
56
|
+
}
|
|
57
|
+
return this.failure(this.getUsage());
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
db.close();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.RunsCommand = RunsCommand;
|
|
65
|
+
//# sourceMappingURL=RunsCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunsCommand.js","sourceRoot":"","sources":["../../src/commands/RunsCommand.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AACxC,yCAA6C;AAE7C,kDAA+C;AAE/C;;;;GAIG;AACH,MAAa,WAAY,SAAQ,qBAAW;IACjC,IAAI,GAAG,MAAM,CAAC;IACd,WAAW,GAAG,oDAAoD,CAAC;IACnE,aAAa,GAAG,KAAK,CAAC;IACtB,QAAQ,GAAG;QAClB,QAAQ,EAAE,0BAAe,CAAC,WAAW;QACrC,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,KAAK;KACnB,CAAC;IAEF,QAAQ;QACN,OAAO;YACL,kCAAkC;YAClC,mCAAmC;SACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAuB,EAAE,IAAiB;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;QAC5C,MAAM,EAAE,GAAG,IAAI,mBAAQ,CACrB,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,IAAI,4BAA4B,CACrE,CAAC;QACF,IAAI,CAAC;YACH,EAAE,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,4BAA4B,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5B,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,MAAM,EAAE,CAAC,CAAC,eAAe;oBACzB,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,KAAK,EAAE,CAAC,CAAC,SAAS;oBAClB,GAAG,EAAE,CAAC,CAAC,OAAO;oBACd,UAAU,EAAE,CAAC,CAAC,QAAQ;iBACvB,CAAC,CAAC,CAAC;gBACJ,KAAK,MAAM,GAAG,IAAI,IAAI;oBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACxD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,SAAS,EAAE,IAAI,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,CAAC,WAAW;oBAAE,OAAO,IAAI,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;gBAClF,MAAM,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBACxD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC9C,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvC,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACb,CAAC;IACH,CAAC;CACF;AApDD,kCAoDC"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
import { BaseCommand } from './Command';
|
|
5
5
|
import { CommandCategory } from './metadata';
|
|
6
6
|
import { CommandArgs, CommandContext, CommandResult } from './types';
|
|
7
|
+
/** Human-readable version with the baked-in commit SHA. */
|
|
8
|
+
export declare function versionString(): string;
|
|
7
9
|
/**
|
|
8
10
|
* Version command implementation
|
|
9
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionCommand.d.ts","sourceRoot":"","sources":["../../src/commands/VersionCommand.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"VersionCommand.d.ts","sourceRoot":"","sources":["../../src/commands/VersionCommand.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGrE,2DAA2D;AAC3D,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,WAAW,4BAA4B;IAChD,QAAQ,CAAC,OAAO,WAAS;IACzB,QAAQ,CAAC,QAAQ;;;;MAIf;IAEI,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;CAelF"}
|
|
@@ -2,45 +2,16 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Version command - displays the application version
|
|
4
4
|
*/
|
|
5
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
-
}
|
|
11
|
-
Object.defineProperty(o, k2, desc);
|
|
12
|
-
}) : (function(o, m, k, k2) {
|
|
13
|
-
if (k2 === undefined) k2 = k;
|
|
14
|
-
o[k2] = m[k];
|
|
15
|
-
}));
|
|
16
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
-
}) : function(o, v) {
|
|
19
|
-
o["default"] = v;
|
|
20
|
-
});
|
|
21
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
-
var ownKeys = function(o) {
|
|
23
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
-
var ar = [];
|
|
25
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
-
return ar;
|
|
27
|
-
};
|
|
28
|
-
return ownKeys(o);
|
|
29
|
-
};
|
|
30
|
-
return function (mod) {
|
|
31
|
-
if (mod && mod.__esModule) return mod;
|
|
32
|
-
var result = {};
|
|
33
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
-
__setModuleDefault(result, mod);
|
|
35
|
-
return result;
|
|
36
|
-
};
|
|
37
|
-
})();
|
|
38
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
6
|
exports.VersionCommand = void 0;
|
|
7
|
+
exports.versionString = versionString;
|
|
40
8
|
const Command_1 = require("./Command");
|
|
41
9
|
const metadata_1 = require("./metadata");
|
|
42
|
-
const
|
|
43
|
-
|
|
10
|
+
const version_1 = require("../version");
|
|
11
|
+
/** Human-readable version with the baked-in commit SHA. */
|
|
12
|
+
function versionString() {
|
|
13
|
+
return `${version_1.BUILD.version} (commit ${version_1.BUILD.commit})`;
|
|
14
|
+
}
|
|
44
15
|
/**
|
|
45
16
|
* Version command implementation
|
|
46
17
|
*/
|
|
@@ -55,19 +26,12 @@ class VersionCommand extends Command_1.BaseCommand {
|
|
|
55
26
|
};
|
|
56
27
|
async execute(context, args) {
|
|
57
28
|
try {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const { version } = JSON.parse(packageJsonContent);
|
|
62
|
-
console.log(`PixivFlow v${version}`);
|
|
63
|
-
return {
|
|
64
|
-
success: true,
|
|
65
|
-
message: `Version: ${version}`,
|
|
66
|
-
data: { version }
|
|
67
|
-
};
|
|
29
|
+
const line = `PixivFlow v${versionString()}`;
|
|
30
|
+
console.log(line);
|
|
31
|
+
return { success: true, message: `Version: ${versionString()}`, data: version_1.BUILD };
|
|
68
32
|
}
|
|
69
33
|
catch (error) {
|
|
70
|
-
context.logger.error('Failed to read version
|
|
34
|
+
context.logger.error('Failed to read version information', { error });
|
|
71
35
|
console.error('Error: Could not read version information.');
|
|
72
36
|
return {
|
|
73
37
|
success: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VersionCommand.js","sourceRoot":"","sources":["../../src/commands/VersionCommand.ts"],"names":[],"mappings":";AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"VersionCommand.js","sourceRoot":"","sources":["../../src/commands/VersionCommand.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAQH,sCAEC;AARD,uCAAwC;AACxC,yCAA6C;AAE7C,wCAAmC;AAEnC,2DAA2D;AAC3D,SAAgB,aAAa;IAC3B,OAAO,GAAG,eAAK,CAAC,OAAO,YAAY,eAAK,CAAC,MAAM,GAAG,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAa,cAAe,SAAQ,qBAAW;IACpC,IAAI,GAAG,SAAS,CAAC;IACjB,WAAW,GAAG,wBAAwB,CAAC;IACvC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,QAAQ,GAAG;QAClB,QAAQ,EAAE,0BAAe,CAAC,OAAO;QACjC,YAAY,EAAE,KAAK;QACnB,WAAW,EAAE,KAAK;KACnB,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,OAAuB,EAAE,IAAiB;QACtD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,cAAc,aAAa,EAAE,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,eAAK,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC5D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,wBAAwB;gBACjC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACjE,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAzBD,wCAyBC"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -27,6 +27,8 @@ import { DirsCommand } from './DirsCommand';
|
|
|
27
27
|
import { VersionCommand } from './VersionCommand';
|
|
28
28
|
import { TagsCommand } from './TagsCommand';
|
|
29
29
|
import { TopicCommand } from './TopicCommand';
|
|
30
|
+
import { OutboxCommand } from './OutboxCommand';
|
|
31
|
+
import { RunsCommand } from './RunsCommand';
|
|
30
32
|
/**
|
|
31
33
|
* Create and register all commands
|
|
32
34
|
*/
|
|
@@ -34,5 +36,5 @@ export declare function registerAllCommands(registry: CommandRegistry): void;
|
|
|
34
36
|
/**
|
|
35
37
|
* Export all command classes
|
|
36
38
|
*/
|
|
37
|
-
export { HelpCommand, LoginCommand, LoginHeadlessCommand, RefreshCommand, DownloadCommand, RandomDownloadCommand, SchedulerCommand, SchedulerRunOnceCommand, MigrateConfigCommand, NormalizeCommand, WebUICommand, HealthCommand, DoctorCommand, ReconcileCommand, StatusCommand, LogsCommand, ConfigCommand, BackupCommand, MaintainCommand, MonitorCommand, SetupCommand, DirsCommand, VersionCommand, TagsCommand, TopicCommand, };
|
|
39
|
+
export { HelpCommand, LoginCommand, LoginHeadlessCommand, RefreshCommand, DownloadCommand, RandomDownloadCommand, SchedulerCommand, SchedulerRunOnceCommand, MigrateConfigCommand, NormalizeCommand, WebUICommand, HealthCommand, DoctorCommand, ReconcileCommand, StatusCommand, LogsCommand, ConfigCommand, BackupCommand, MaintainCommand, MonitorCommand, SetupCommand, DirsCommand, VersionCommand, TagsCommand, TopicCommand, OutboxCommand, RunsCommand, };
|
|
38
40
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CA4BnE;AAED;;GAEG;AACH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Command exports and registration
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.TopicCommand = exports.TagsCommand = exports.VersionCommand = exports.DirsCommand = exports.SetupCommand = exports.MonitorCommand = exports.MaintainCommand = exports.BackupCommand = exports.ConfigCommand = exports.LogsCommand = exports.StatusCommand = exports.ReconcileCommand = exports.DoctorCommand = exports.HealthCommand = exports.WebUICommand = exports.NormalizeCommand = exports.MigrateConfigCommand = exports.SchedulerRunOnceCommand = exports.SchedulerCommand = exports.RandomDownloadCommand = exports.DownloadCommand = exports.RefreshCommand = exports.LoginHeadlessCommand = exports.LoginCommand = exports.HelpCommand = void 0;
|
|
6
|
+
exports.RunsCommand = exports.OutboxCommand = exports.TopicCommand = exports.TagsCommand = exports.VersionCommand = exports.DirsCommand = exports.SetupCommand = exports.MonitorCommand = exports.MaintainCommand = exports.BackupCommand = exports.ConfigCommand = exports.LogsCommand = exports.StatusCommand = exports.ReconcileCommand = exports.DoctorCommand = exports.HealthCommand = exports.WebUICommand = exports.NormalizeCommand = exports.MigrateConfigCommand = exports.SchedulerRunOnceCommand = exports.SchedulerCommand = exports.RandomDownloadCommand = exports.DownloadCommand = exports.RefreshCommand = exports.LoginHeadlessCommand = exports.LoginCommand = exports.HelpCommand = void 0;
|
|
7
7
|
exports.registerAllCommands = registerAllCommands;
|
|
8
8
|
const HelpCommand_1 = require("./HelpCommand");
|
|
9
9
|
Object.defineProperty(exports, "HelpCommand", { enumerable: true, get: function () { return HelpCommand_1.HelpCommand; } });
|
|
@@ -55,6 +55,10 @@ const TagsCommand_1 = require("./TagsCommand");
|
|
|
55
55
|
Object.defineProperty(exports, "TagsCommand", { enumerable: true, get: function () { return TagsCommand_1.TagsCommand; } });
|
|
56
56
|
const TopicCommand_1 = require("./TopicCommand");
|
|
57
57
|
Object.defineProperty(exports, "TopicCommand", { enumerable: true, get: function () { return TopicCommand_1.TopicCommand; } });
|
|
58
|
+
const OutboxCommand_1 = require("./OutboxCommand");
|
|
59
|
+
Object.defineProperty(exports, "OutboxCommand", { enumerable: true, get: function () { return OutboxCommand_1.OutboxCommand; } });
|
|
60
|
+
const RunsCommand_1 = require("./RunsCommand");
|
|
61
|
+
Object.defineProperty(exports, "RunsCommand", { enumerable: true, get: function () { return RunsCommand_1.RunsCommand; } });
|
|
58
62
|
/**
|
|
59
63
|
* Create and register all commands
|
|
60
64
|
*/
|
|
@@ -84,5 +88,7 @@ function registerAllCommands(registry) {
|
|
|
84
88
|
registry.register(new VersionCommand_1.VersionCommand());
|
|
85
89
|
registry.register(new TagsCommand_1.TagsCommand());
|
|
86
90
|
registry.register(new TopicCommand_1.TopicCommand());
|
|
91
|
+
registry.register(new OutboxCommand_1.OutboxCommand());
|
|
92
|
+
registry.register(new RunsCommand_1.RunsCommand());
|
|
87
93
|
}
|
|
88
94
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler-runtime.d.ts","sourceRoot":"","sources":["../../src/commands/scheduler-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA6B,cAAc,EAAE,gBAAgB,EAAgB,MAAM,WAAW,CAAC;AACtG,OAAO,EAAE,QAAQ,EAA0B,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAU3E,OAAO,EAAE,kBAAkB,EAAiB,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"scheduler-runtime.d.ts","sourceRoot":"","sources":["../../src/commands/scheduler-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAA6B,cAAc,EAAE,gBAAgB,EAAgB,MAAM,WAAW,CAAC;AACtG,OAAO,EAAE,QAAQ,EAA0B,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,OAAO,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAU3E,OAAO,EAAE,kBAAkB,EAAiB,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKpD,+EAA+E;AAC/E,MAAM,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAC;IACnE,6EAA6E;IAC7E,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrG,kDAAkD;IAClD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qEAAqE;IACrE,qBAAqB,CACnB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,+DAA+D;IAC/D,iBAAiB,IAAI,IAAI,CAAC;IAC1B,6DAA6D;IAC7D,WAAW,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3F,8EAA8E;IAC9E,KAAK,IAAI,IAAI,CAAC;CACf;AAiGD,wBAAsB,qBAAqB,CACvC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,IAAI,CAAC,CAiBjB;AAWD,wBAAsB,sBAAsB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsS9F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,IAAI,EACrB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,CAAC,CAAC,CAcZ"}
|
|
@@ -60,6 +60,7 @@ const NotificationPolicy_1 = require("../notification/NotificationPolicy");
|
|
|
60
60
|
const node_crypto_1 = require("node:crypto");
|
|
61
61
|
const placeholders_1 = require("../config/placeholders");
|
|
62
62
|
const logger_1 = require("../logger");
|
|
63
|
+
const version_1 = require("../version");
|
|
63
64
|
/**
|
|
64
65
|
* Open the pixivflow database with a startup integrity check. A structurally
|
|
65
66
|
* corrupt file (quick_check failure) is isolated aside and replaced with a
|
|
@@ -161,6 +162,7 @@ function buildProxyUrl(network) {
|
|
|
161
162
|
return `${protocol}://${auth}${proxy.host}:${proxy.port}`;
|
|
162
163
|
}
|
|
163
164
|
async function createSchedulerRuntime(configPathArg) {
|
|
165
|
+
logger_1.logger.info('PixivFlow runtime starting', { component: 'pixivflow', version: version_1.BUILD.version, commit: version_1.BUILD.commit });
|
|
164
166
|
// Keep TODAY/YESTERDAY placeholders intact. They are resolved afresh for
|
|
165
167
|
// every plan execution, not frozen at daemon startup.
|
|
166
168
|
const configPath = (0, config_1.getConfigPath)(configPathArg);
|