ework-web 0.10.124 → 0.10.126
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/package.json +3 -3
- package/src/db.ts +4 -0
- package/src/schema-mysql.sql +1 -0
- package/src/translate.ts +5 -1
- package/src/webhooks.ts +9 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ework-web",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.126",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "ework-web — standalone multi-project issue tracker. Local SQLite-backed, no external API dependency. Bun + TypeScript + SSR HTML.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"start": "bun src/index.ts",
|
|
43
43
|
"check": "tsc --noEmit",
|
|
44
44
|
"typecheck": "tsc --noEmit",
|
|
45
|
-
"test": "bun test",
|
|
45
|
+
"test": "bun test --timeout=30000",
|
|
46
46
|
"test:mysql": "bash scripts/test-mysql.sh"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"zod": "^3.23.8"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@types/bun": "
|
|
59
|
+
"@types/bun": "1.4.2",
|
|
60
60
|
"@types/jsdom": "^28.0.3",
|
|
61
61
|
"typescript": "^5.6.0"
|
|
62
62
|
}
|
package/src/db.ts
CHANGED
|
@@ -151,6 +151,9 @@ function migrateCommentsTable(db: Database): void {
|
|
|
151
151
|
if (!have.has("model")) {
|
|
152
152
|
db.exec(applyPrefix("ALTER TABLE {{comments}} ADD COLUMN model TEXT NOT NULL DEFAULT ''"));
|
|
153
153
|
}
|
|
154
|
+
if (!have.has("runtime")) {
|
|
155
|
+
db.exec(applyPrefix("ALTER TABLE {{comments}} ADD COLUMN runtime TEXT NOT NULL DEFAULT ''"));
|
|
156
|
+
}
|
|
154
157
|
}
|
|
155
158
|
|
|
156
159
|
function migrateLabelsTable(db: Database): void {
|
|
@@ -397,6 +400,7 @@ async function migrateMysqlIssuesAiStatus(pool: Pool): Promise<void> {
|
|
|
397
400
|
await migrateMysqlColumn(pool, "issues", "runtime", "runtime VARCHAR(32) NOT NULL DEFAULT ''");
|
|
398
401
|
await migrateMysqlColumn(pool, "issues", "upstream_issue_number", "upstream_issue_number INT DEFAULT NULL");
|
|
399
402
|
await migrateMysqlColumn(pool, "comments", "model", "model VARCHAR(128) NOT NULL DEFAULT ''");
|
|
403
|
+
await migrateMysqlColumn(pool, "comments", "runtime", "runtime VARCHAR(32) NOT NULL DEFAULT ''");
|
|
400
404
|
await migrateMysqlColumn(pool, "comments", "upstream_comment_id", "upstream_comment_id BIGINT DEFAULT NULL");
|
|
401
405
|
const indexes: Array<[string, string]> = [
|
|
402
406
|
["uq_issues_project_upstream", applyPrefix("CREATE UNIQUE INDEX uq_issues_project_upstream ON {{issues}} (project_id, upstream_issue_number)")],
|
package/src/schema-mysql.sql
CHANGED
|
@@ -80,6 +80,7 @@ CREATE TABLE IF NOT EXISTS {{comments}} (
|
|
|
80
80
|
CONSTRAINT {{fk_comments_issue}} FOREIGN KEY (issue_id) REFERENCES {{issues}}(id) ON DELETE CASCADE,
|
|
81
81
|
CONSTRAINT {{fk_comments_author}} FOREIGN KEY (author) REFERENCES {{users}}(login),
|
|
82
82
|
model VARCHAR(128) NOT NULL DEFAULT ''
|
|
83
|
+
,runtime VARCHAR(32) NOT NULL DEFAULT ''
|
|
83
84
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
84
85
|
CREATE INDEX comments_issue_created ON {{comments}} (issue_id, created_at);
|
|
85
86
|
CREATE INDEX comments_author ON {{comments}} (author);
|
package/src/translate.ts
CHANGED
|
@@ -12,7 +12,11 @@ export class TranslateError extends Error {
|
|
|
12
12
|
const SYSTEM_PROMPT =
|
|
13
13
|
"Translate the following English text to Simplified Chinese. Preserve ALL markdown formatting (bullet lists with - or *, **bold**, `code`, # headings). Output ONLY the translation, nothing else.";
|
|
14
14
|
const MAX_CHARS = 16_000;
|
|
15
|
-
|
|
15
|
+
// Per-request ceiling (covers connect + queue + prefill + generation for one
|
|
16
|
+
// chunk). The shared self-hosted server also serves agent traffic; time-to-
|
|
17
|
+
// first-token can reach minutes when long-context prefills are queued ahead,
|
|
18
|
+
// so this must tolerate far more than an interactive RTT.
|
|
19
|
+
const TIMEOUT_MS = 180_000;
|
|
16
20
|
|
|
17
21
|
// OpenAI-compatible chat-completion shapes (vLLM serves /v1/chat/completions).
|
|
18
22
|
interface ChatChoice {
|
package/src/webhooks.ts
CHANGED
|
@@ -105,6 +105,15 @@ function releaseDeliverySlot(): void {
|
|
|
105
105
|
if (next) next();
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
+
/** Await webhook delivery quiescence (tests/ops); throws after timeoutMs. */
|
|
109
|
+
export async function waitForWebhookQueueIdle(timeoutMs = 5_000): Promise<void> {
|
|
110
|
+
const deadline = Date.now() + timeoutMs;
|
|
111
|
+
while (inFlightDeliveries > 0 || deliveryQueue.length > 0) {
|
|
112
|
+
if (Date.now() >= deadline) throw new Error("waitForWebhookQueueIdle: timeout");
|
|
113
|
+
await Bun.sleep(10);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
108
117
|
function now(): string {
|
|
109
118
|
return new Date().toISOString();
|
|
110
119
|
}
|