@alisio/plugin-reportforge 0.1.0 → 0.1.1
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/.agents/agents/rf-editor.md +17 -8
- package/.agents/skills/rf-design/SKILL.md +3 -2
- package/README.es.md +13 -3
- package/README.md +11 -3
- package/dist/generate.d.ts +63 -6
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +332 -46
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/service.d.ts +8 -0
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +65 -16
- package/dist/service.js.map +1 -1
- package/dist/store.d.ts +7 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +38 -2
- package/dist/store.js.map +1 -1
- package/dist/ui.html +126 -14
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/service.js
CHANGED
|
@@ -15,6 +15,8 @@ import { initialReport, PALETTES } from "./types.js";
|
|
|
15
15
|
export const MAX_SOURCES = 30;
|
|
16
16
|
export const SOURCE_BUDGET = 3_000_000;
|
|
17
17
|
const MAX_JOBS = 50;
|
|
18
|
+
/** Longest wait for a cancelled generation to stop before its report is deleted anyway. */
|
|
19
|
+
const CANCEL_WAIT_MS = 10_000;
|
|
18
20
|
const str = (value, max = 4000) => (typeof value === "string" ? value.slice(0, max) : "");
|
|
19
21
|
export function exportName(name) {
|
|
20
22
|
const base = name
|
|
@@ -23,6 +25,13 @@ export function exportName(name) {
|
|
|
23
25
|
.slice(0, 90);
|
|
24
26
|
return `${base || "report"}.html`;
|
|
25
27
|
}
|
|
28
|
+
/** A readable label: provider (and profile, when not the default) · model name. */
|
|
29
|
+
export function modelLabel(m) {
|
|
30
|
+
const provider = m.providerName || m.provider || "";
|
|
31
|
+
const profile = m.profile && m.profile !== "default" ? ` (${m.profile})` : "";
|
|
32
|
+
const name = m.model?.name || m.model?.id || m.reference;
|
|
33
|
+
return provider ? `${provider}${profile} · ${name}` : name;
|
|
34
|
+
}
|
|
26
35
|
export function createService(deps) {
|
|
27
36
|
const { api } = deps;
|
|
28
37
|
const stores = new Map();
|
|
@@ -48,6 +57,15 @@ export function createService(deps) {
|
|
|
48
57
|
}
|
|
49
58
|
return pending;
|
|
50
59
|
}
|
|
60
|
+
async function listModels() {
|
|
61
|
+
try {
|
|
62
|
+
const list = await api.models.list();
|
|
63
|
+
return Array.isArray(list) ? list.filter((m) => typeof m?.reference === "string") : [];
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
throw new Error("models_unavailable");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
51
69
|
function addSource(r, source) {
|
|
52
70
|
if (r.sources.length >= MAX_SOURCES)
|
|
53
71
|
throw new Error("too_many_sources");
|
|
@@ -78,18 +96,28 @@ export function createService(deps) {
|
|
|
78
96
|
if (running.has(r.id))
|
|
79
97
|
throw new Error("report_busy");
|
|
80
98
|
const controller = new AbortController();
|
|
81
|
-
running.set(r.id, controller);
|
|
82
99
|
const job = { id: randomUUID(), reportId: r.id, status: "running" };
|
|
83
100
|
rememberJob(job);
|
|
84
|
-
|
|
101
|
+
const done = (async () => {
|
|
85
102
|
try {
|
|
86
103
|
const result = await generate(sessionId, r, prompt || r.goal, controller.signal);
|
|
104
|
+
// A cancelled (or deleted) report never gets a late write.
|
|
105
|
+
controller.signal.throwIfAborted();
|
|
87
106
|
const latest = await store.get(r.id);
|
|
107
|
+
controller.signal.throwIfAborted();
|
|
88
108
|
if (latest.revision !== r.revision)
|
|
89
109
|
throw new Error("revision_conflict");
|
|
90
|
-
|
|
110
|
+
latest.title = result.title;
|
|
111
|
+
latest.subtitle = result.subtitle;
|
|
112
|
+
latest.eyebrow = result.eyebrow;
|
|
113
|
+
latest.summary = result.summary;
|
|
114
|
+
latest.blocks = result.blocks;
|
|
91
115
|
bump(latest, prompt || "Generated");
|
|
92
116
|
await store.put(latest);
|
|
117
|
+
if (result.dropped)
|
|
118
|
+
job.dropped = result.dropped;
|
|
119
|
+
if (result.modelFallback)
|
|
120
|
+
job.modelFallback = true;
|
|
93
121
|
job.status = "succeeded";
|
|
94
122
|
}
|
|
95
123
|
catch (error) {
|
|
@@ -100,19 +128,15 @@ export function createService(deps) {
|
|
|
100
128
|
running.delete(r.id);
|
|
101
129
|
}
|
|
102
130
|
})();
|
|
131
|
+
running.set(r.id, { controller, done });
|
|
103
132
|
return job;
|
|
104
133
|
}
|
|
105
134
|
async function run(action, input, sessionId) {
|
|
106
135
|
switch (action) {
|
|
107
136
|
case "context":
|
|
108
137
|
return { locale: api.options?.locale === "en" ? "en" : "es", palettes: PALETTES };
|
|
109
|
-
case "models":
|
|
110
|
-
|
|
111
|
-
return models.map((m) => ({
|
|
112
|
-
reference: m.reference,
|
|
113
|
-
label: `${m.providerName} · ${m.model.name ?? m.reference}`,
|
|
114
|
-
}));
|
|
115
|
-
}
|
|
138
|
+
case "models":
|
|
139
|
+
return (await listModels()).map((m) => ({ reference: m.reference, label: modelLabel(m) }));
|
|
116
140
|
case "jobs.get": {
|
|
117
141
|
const job = jobs.get(str(input.jobId, 64));
|
|
118
142
|
if (!job)
|
|
@@ -123,7 +147,7 @@ export function createService(deps) {
|
|
|
123
147
|
const job = jobs.get(str(input.jobId, 64));
|
|
124
148
|
if (!job)
|
|
125
149
|
throw new Error("job_not_found");
|
|
126
|
-
running.get(job.reportId)?.abort();
|
|
150
|
+
running.get(job.reportId)?.controller.abort();
|
|
127
151
|
return { ...job };
|
|
128
152
|
}
|
|
129
153
|
}
|
|
@@ -132,6 +156,21 @@ export function createService(deps) {
|
|
|
132
156
|
return store.list();
|
|
133
157
|
if (action === "reports.create")
|
|
134
158
|
return store.put(initialReport(input));
|
|
159
|
+
if (action === "reports.delete") {
|
|
160
|
+
const id = str(input.id, 64);
|
|
161
|
+
store.check(id);
|
|
162
|
+
const task = running.get(id);
|
|
163
|
+
if (task) {
|
|
164
|
+
// The user confirmed the deletion: stop the generation instead of refusing with `busy`.
|
|
165
|
+
task.controller.abort();
|
|
166
|
+
await Promise.race([
|
|
167
|
+
task.done,
|
|
168
|
+
new Promise((resolve) => setTimeout(resolve, CANCEL_WAIT_MS)),
|
|
169
|
+
]);
|
|
170
|
+
}
|
|
171
|
+
await store.remove(id);
|
|
172
|
+
return { id, deleted: true };
|
|
173
|
+
}
|
|
135
174
|
const r = await store.get(str(input.id, 64));
|
|
136
175
|
switch (action) {
|
|
137
176
|
case "reports.get":
|
|
@@ -158,8 +197,14 @@ export function createService(deps) {
|
|
|
158
197
|
r.pageSize = input.pageSize;
|
|
159
198
|
if (input.language === "es" || input.language === "en")
|
|
160
199
|
r.language = input.language;
|
|
161
|
-
|
|
162
|
-
|
|
200
|
+
return store.put(r);
|
|
201
|
+
}
|
|
202
|
+
case "report.setModel": {
|
|
203
|
+
const model = str(input.model, 256);
|
|
204
|
+
if (model && !(await listModels()).some((m) => m.reference === model)) {
|
|
205
|
+
throw new Error("unknown_model");
|
|
206
|
+
}
|
|
207
|
+
r.model = model;
|
|
163
208
|
return store.put(r);
|
|
164
209
|
}
|
|
165
210
|
case "report.fit": {
|
|
@@ -251,8 +296,8 @@ export function createService(deps) {
|
|
|
251
296
|
run,
|
|
252
297
|
busy: () => running.size > 0,
|
|
253
298
|
dispose() {
|
|
254
|
-
for (const
|
|
255
|
-
controller.abort();
|
|
299
|
+
for (const task of running.values())
|
|
300
|
+
task.controller.abort();
|
|
256
301
|
running.clear();
|
|
257
302
|
jobs.clear();
|
|
258
303
|
stores.clear();
|
|
@@ -305,9 +350,13 @@ export const ACTIONS = {
|
|
|
305
350
|
mode: { type: "string", enum: ["multipage", "singlepage"] },
|
|
306
351
|
pageSize: { type: "string", enum: ["A4", "Letter"] },
|
|
307
352
|
language: { type: "string", enum: ["es", "en"] },
|
|
308
|
-
model: { type: "string", maxLength: 256 },
|
|
309
353
|
}, ["id"]),
|
|
310
354
|
},
|
|
355
|
+
"report.setModel": {
|
|
356
|
+
effect: "write",
|
|
357
|
+
inputSchema: object({ id, model: { type: "string", maxLength: 256 } }, ["id", "model"]),
|
|
358
|
+
},
|
|
359
|
+
"reports.delete": { effect: "write", inputSchema: object({ id }, ["id"]) },
|
|
311
360
|
"report.fit": {
|
|
312
361
|
effect: "write",
|
|
313
362
|
inputSchema: object({
|
package/dist/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAwB,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,UAAU,EAAyB,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAA4B,MAAM,YAAY,CAAC;AAE/E,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,CAAC;AAC9B,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AACvC,MAAM,QAAQ,GAAG,EAAE,CAAC;AAwBpB,MAAM,GAAG,GAAG,CAAC,KAAc,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEnG,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,IAAI,GAAG,IAAI;SACd,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC;SACnC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,GAAG,IAAI,IAAI,QAAQ,OAAO,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAiB;IAC7C,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACrB,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAe,CAAC;IACpC,MAAM,QAAQ,GACZ,IAAI,CAAC,QAAQ;QACb,CAAC,CAAC,SAAiB,EAAE,CAAS,EAAE,WAAmB,EAAE,MAAmB,EAAE,EAAE,CAC1E,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAEhE,SAAS,QAAQ,CAAC,SAAiB;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CACd,IAAI,EACJ,SAAS,EACT,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAClE,CAAC;QACF,IAAI,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;gBACpB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7B,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS,SAAS,CAAC,CAAS,EAAE,MAAc;QAC1C,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACnF,IAAI,IAAI,GAAG,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACpE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,SAAS,IAAI,CAAC,CAAS,EAAE,OAAe;QACtC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACb,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;YACb,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC9B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC7B,CAAC,CAAC;QACH,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,SAAS,WAAW,CAAC,GAAQ;QAC3B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACtB,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ;gBAAE,MAAM;YACjC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,UAAU,eAAe,CAC5B,KAAY,EACZ,CAAS,EACT,SAAiB,EACjB,MAAc;QAEd,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACzE,WAAW,CAAC,GAAG,CAAC,CAAC;QACjB,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBACjF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrC,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;oBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBACzE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC9B,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,WAAW,CAAC,CAAC;gBACpC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACxB,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC;YAC3B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAChE,GAAG,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;YACxF,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,UAAU,GAAG,CAChB,MAAc,EACd,KAA8B,EAC9B,SAAiB;QAEjB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,SAAS;gBACZ,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;YACpF,KAAK,QAAQ,EAAE,CAAC;gBACd,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACxB,SAAS,EAAE,CAAC,CAAC,SAAS;oBACtB,KAAK,EAAE,GAAG,CAAC,CAAC,YAAY,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE;iBAC5D,CAAC,CAAC,CAAC;YACN,CAAC;YACD,KAAK,UAAU,EAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;gBAC3C,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC;YACpB,CAAC;YACD,KAAK,aAAa,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG;oBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;gBAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;gBACnC,OAAO,EAAE,GAAG,GAAG,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,MAAM,KAAK,cAAc;YAAE,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,MAAM,KAAK,gBAAgB;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7C,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,aAAa;gBAChB,OAAO,CAAC,CAAC;YACX,KAAK,eAAe;gBAClB,OAAO;oBACL,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;oBAC1D,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;iBAC5B,CAAC;YACJ,KAAK,eAAe;gBAClB,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,KAAK,iBAAiB,EAAE,CAAC;gBACvB,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;oBACxC,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;oBAC/D,IAAI,CAAC,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBACjD,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;gBAC7B,CAAC;gBACD,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC;oBACnE,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;oBAAE,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;gBACnF,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;oBAAE,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBACxF,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;oBAAE,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;gBACpF,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;oBAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACzE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,KAAK,YAAY,EAAE,CAAC;gBAClB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBACnD,CAAC,CAAC,GAAG,GAAG;oBACN,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;oBACxB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;oBAC1B,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;iBACnB,CAAC;gBACF,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnB,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,KAAK,uBAAuB,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBACpE,IAAI,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC;oBAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;gBACtF,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC7E,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;wBACtE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACxE,CAAC;oBACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC/D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAiD,CAAC;wBAC7E,IACE,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;4BAC/B,MAAM,CAAC,MAAM,KAAK,CAAC;4BACnB,MAAM,CAAC,MAAM,GAAG,EAAE;4BAClB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;4BAC1D,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAChE,CAAC;4BACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;wBACxC,CAAC;wBACD,KAAK,CAAC,MAAM,GAAG,MAAkB,CAAC;wBAClC,KAAK,CAAC,MAAM,GAAG,MAAkB,CAAC;oBACpC,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK;oBACrD,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC1C,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBACtB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,KAAK,YAAY,EAAE,CAAC;gBAClB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,QAAQ,CAAC;gBAC9C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxE,IAAI,MAAc,CAAC;gBACnB,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAC3C,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC1F,MAAM,GAAG;wBACP,EAAE,EAAE,UAAU,EAAE;wBAChB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBACxB,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,SAAS,CAAC,IAAI;wBACpB,IAAI,EAAE,SAAS,CAAC,IAAI;wBACpB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBACrC,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,YAAY,EAAE,MAAM,CAAC,CAAC;gBAC1E,CAAC;gBACD,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBACrB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,KAAK,eAAe,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;gBAChC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;gBACtE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACrE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,KAAK,YAAY,EAAE,CAAC;gBAClB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW;oBAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACzE,SAAS,CAAC,CAAC,EAAE,MAAM,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC3E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;YACD,KAAK,iBAAiB,CAAC;YACvB,KAAK,eAAe;gBAClB,OAAO,eAAe,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;YACvE;gBACE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG;QACH,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;QAC5B,OAAO;YACL,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE;gBAAE,UAAU,CAAC,KAAK,EAAE,CAAC;YAC9D,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,SAAiB;YACjC,OAAO,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC;AAID,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAW,CAAC;AACtD,MAAM,MAAM,GAAG,CAAC,UAAmC,EAAE,QAAQ,GAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAChF,IAAI,EAAE,QAAQ;IACd,UAAU;IACV,QAAQ;IACR,oBAAoB,EAAE,KAAK;CAC5B,CAAC,CAAC;AAEH,qEAAqE;AACrE,MAAM,CAAC,MAAM,OAAO,GAGhB;IACF,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE;IACpD,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE;IACnD,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE;IAC3D,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE;IACtE,eAAe,EAAE;QACf,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;KAClE;IACD,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE;IACxE,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE;IAC7E,aAAa,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE;IACjF,gBAAgB,EAAE;QAChB,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,CAAC;YAClB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;YACxC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YACvC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;YAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;YACzC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAC7C,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;YACzC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE;YAC7C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;YAC5C,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;SAC7C,CAAC;KACH;IACD,iBAAiB,EAAE;QACjB,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,CACjB;YACE,EAAE;YACF,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;YAC5C,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YACpD,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE;YAC3D,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE;YACpD,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YAChD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;SAC1C,EACD,CAAC,IAAI,CAAC,CACP;KACF;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,CACjB;YACE,EAAE;YACF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,EAAE;YAC9C,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,EAAE;SAChD,EACD,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAC1B;KACF;IACD,uBAAuB,EAAE;QACvB,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,CACjB;YACE,EAAE;YACF,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YACjD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;YACzC,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE;YACjF,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;SACnE,EACD,CAAC,IAAI,EAAE,SAAS,CAAC,CAClB;KACF;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,CACjB;YACE,EAAE;YACF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;YACxC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE;YACxC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;SAC7E,EACD,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CACzB;KACF;IACD,eAAe,EAAE;QACf,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;KAC9D;IACD,YAAY,EAAE;QACZ,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KACrF;IACD,iBAAiB,EAAE;QACjB,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;KACjF;IACD,eAAe,EAAE;QACf,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;KACjF;CACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
CHANGED
|
@@ -10,9 +10,16 @@ export declare class Store {
|
|
|
10
10
|
readonly root: string;
|
|
11
11
|
constructor(root: string);
|
|
12
12
|
init(): Promise<void>;
|
|
13
|
+
/** Throws `invalid_id` unless `id` is a report id. */
|
|
14
|
+
check(id: string): void;
|
|
13
15
|
private file;
|
|
14
16
|
list(): Promise<ReportSummary[]>;
|
|
15
17
|
get(id: string): Promise<Report>;
|
|
16
18
|
put(r: Report): Promise<Report>;
|
|
19
|
+
/**
|
|
20
|
+
* Deletes a report (its sources live in the same file). Only entries of this directory named by
|
|
21
|
+
* a valid id are touched, and a symbolic link is removed itself, never followed.
|
|
22
|
+
*/
|
|
23
|
+
remove(id: string): Promise<void>;
|
|
17
24
|
}
|
|
18
25
|
//# sourceMappingURL=store.d.ts.map
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAOzC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,KAAK;IACJ,QAAQ,CAAC,IAAI,EAAE,MAAM;IAAjC,YAAqB,IAAI,EAAE,MAAM,EAAI;IAE/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAK1B;IAED,sDAAsD;IACtD,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEtB;IAED,OAAO,CAAC,IAAI;IAKN,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAkBrC;IAEK,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOrC;IAEK,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWpC;IAED;;;OAGG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAatC;CACF"}
|
package/dist/store.js
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* One JSON file per report (sources included), written atomically (temporary file + rename) with
|
|
3
|
+
* private modes. Deleting renames the file out of the listing first, so a crash never leaves a
|
|
4
|
+
* half-deleted report visible; leftovers are swept on the next start.
|
|
5
|
+
*/
|
|
2
6
|
import { randomBytes } from "node:crypto";
|
|
3
|
-
import { mkdir, readdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
7
|
+
import { lstat, mkdir, readdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
4
8
|
import { join } from "node:path";
|
|
5
9
|
const ID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
10
|
+
const UUID = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
|
|
11
|
+
/** Our own leftovers: a deletion or a write interrupted by a crash. */
|
|
12
|
+
const LEFTOVER = new RegExp(`^${UUID}\\.json\\.[0-9a-f]{12}\\.(deleted|tmp)$`);
|
|
6
13
|
export class Store {
|
|
7
14
|
root;
|
|
8
15
|
constructor(root) {
|
|
@@ -10,6 +17,14 @@ export class Store {
|
|
|
10
17
|
}
|
|
11
18
|
async init() {
|
|
12
19
|
await mkdir(this.root, { recursive: true, mode: 0o700 });
|
|
20
|
+
for (const name of await readdir(this.root)) {
|
|
21
|
+
if (LEFTOVER.test(name))
|
|
22
|
+
await rm(join(this.root, name), { force: true }).catch(() => { });
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Throws `invalid_id` unless `id` is a report id. */
|
|
26
|
+
check(id) {
|
|
27
|
+
this.file(id);
|
|
13
28
|
}
|
|
14
29
|
file(id) {
|
|
15
30
|
if (typeof id !== "string" || !ID.test(id))
|
|
@@ -59,5 +74,26 @@ export class Store {
|
|
|
59
74
|
}
|
|
60
75
|
return r;
|
|
61
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Deletes a report (its sources live in the same file). Only entries of this directory named by
|
|
79
|
+
* a valid id are touched, and a symbolic link is removed itself, never followed.
|
|
80
|
+
*/
|
|
81
|
+
async remove(id) {
|
|
82
|
+
const dest = this.file(id);
|
|
83
|
+
let info;
|
|
84
|
+
try {
|
|
85
|
+
info = await lstat(dest);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (error.code === "ENOENT")
|
|
89
|
+
throw new Error("report_not_found");
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
if (info.isDirectory())
|
|
93
|
+
throw new Error("invalid_report");
|
|
94
|
+
const grave = `${dest}.${randomBytes(6).toString("hex")}.deleted`;
|
|
95
|
+
await rename(dest, grave);
|
|
96
|
+
await rm(grave, { force: true });
|
|
97
|
+
}
|
|
62
98
|
}
|
|
63
99
|
//# sourceMappingURL=store.js.map
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.html
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
<title>ReportForge</title>
|
|
7
7
|
<style>
|
|
8
8
|
:root{font-family:Inter,system-ui,'Segoe UI',sans-serif;color:#e8edf9;background:#0b1020;--line:#29314d;--soft:#141b30;--accent:#8f75f8}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}button:disabled{opacity:.5;cursor:not-allowed}.shell{display:grid;grid-template-columns:235px minmax(0,1fr);min-height:100vh}.side{padding:24px 16px;background:#10162a;border-right:1px solid var(--line)}.brand{font-weight:850;font-size:22px;letter-spacing:-.04em}.brand b{color:#b9a7ff}.side p{color:#8592ad;font-size:12px;line-height:1.5}.nav{margin-top:34px;display:grid;gap:8px}.nav button{text-align:left;background:transparent;border:0;color:#b9c4e0;padding:13px 12px;border-radius:11px}.nav button.current,.nav button:hover{background:#252a49;color:white}.content{padding:30px;min-width:0}.top{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:25px}.top h1{font-size:25px;margin:0;letter-spacing:-.04em}.top small{color:#929bb3}.primary{background:#8871f8;color:#fff;border:0;border-radius:10px;padding:11px 17px;font-weight:750}.secondary{background:#1b2541;color:#d7dff5;border:1px solid #354064;border-radius:10px;padding:11px 17px}.muted{color:#96a3c2}.grid{display:grid;grid-template-columns: minmax(280px,410px) minmax(0,1fr);gap:22px}.panel{background:var(--soft);border:1px solid var(--line);border-radius:17px;padding:22px;min-width:0}.panel h2{font-size:17px;margin:0 0 18px}.field{display:grid;gap:7px;margin-bottom:15px}.field label{font-size:12px;color:#b3bdd6;font-weight:700}input,select,textarea{width:100%;background:#0c1428;color:#f0f2ff;border:1px solid #323e5b;border-radius:9px;padding:11px;outline:none}input:focus,select:focus,textarea:focus{border-color:#9382fa}textarea{resize:vertical;min-height:80px}.stephead{display:flex;gap:8px;align-items:center;margin-bottom:18px}.step{background:#25304c;color:#a8b6d1;border-radius:99px;padding:7px 12px;font-size:11px;font-weight:700}.step.active{background:#6f5fd3;color:white}.palettes{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.palette{border:1px solid #3c4660;border-radius:11px;padding:8px;background:#0e172c;color:#cbd2e3;text-align:left}.palette.selected{outline:2px solid #c4b8ff}.palette i{display:block;height:18px;border-radius:5px;margin-bottom:8px}.palette span{font-size:10px}.help{font-size:12px;color:#97a4bd;line-height:1.55}.preview{border-radius:13px;overflow:hidden;background:#e6ecf3;height:67vh;min-height:500px}.preview iframe{border:0;width:100%;height:100%;background:white}.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:15px}.toolbar>*{flex-shrink:0}.list{display:grid;gap:10px}.list button{background:#19223a;border:1px solid #35405f;color:#e6eaff;text-align:left;border-radius:12px;padding:16px}.list small{color:#96a2bf}.notice{border-left:3px solid #9685ff;background:#262445;border-radius:4px;padding:12px;font-size:12px;color:#d6d2ff;margin:14px 0}.hidden{display:none!important}.error{color:#ffbcb8;font-size:12px;white-space:pre-wrap}.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}.formrow{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media(max-width:1100px){.shell{grid-template-columns:1fr}.side{display:none}.grid{grid-template-columns:1fr}.content{padding:14px}}@media(max-width:650px){.formrow{grid-template-columns:1fr}.palettes{grid-template-columns:repeat(2,1fr)}.top{align-items:start}.preview{height:55vh}}
|
|
9
|
-
.measure{position:absolute;left:-10000px;top:0;width:1200px;height:800px;border:0;visibility:hidden}.fitnote{font-size:12px;color:#c9d2ea;margin:8px 0 0}.fitnote.warn{color:#ffd59a}.banner{background:#3b1d2a;border:1px solid #7a3550;color:#ffd6e0;border-radius:10px;padding:14px;margin-bottom:16px}.srcrow{display:flex;justify-content:space-between;gap:8px;align-items:center;background:#19223a;border:1px solid #35405f;border-radius:10px;padding:8px 10px}.srcrow small{overflow-wrap:anywhere}.link{background:none;border:0;color:#b9a7ff;padding:4px;text-decoration:underline}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}</style>
|
|
9
|
+
.measure{position:absolute;left:-10000px;top:0;width:1200px;height:800px;border:0;visibility:hidden}.fitnote{font-size:12px;color:#c9d2ea;margin:8px 0 0}.fitnote.warn{color:#ffd59a}.banner{background:#3b1d2a;border:1px solid #7a3550;color:#ffd6e0;border-radius:10px;padding:14px;margin-bottom:16px}.srcrow{display:flex;justify-content:space-between;gap:8px;align-items:center;background:#19223a;border:1px solid #35405f;border-radius:10px;padding:8px 10px}.srcrow small{overflow-wrap:anywhere}.link{background:none;border:0;color:#b9a7ff;padding:4px;text-decoration:underline}.reportrow{display:flex;gap:8px;align-items:stretch}.reportrow>button:first-child{flex:1}.list .rowdel{background:transparent;border:1px solid #5a3346;color:#ffb8c8;padding:0 14px;text-align:center}.danger{background:#a8324f;color:#fff;border:0;border-radius:10px;padding:11px 17px;font-weight:750}.confirm{position:fixed;inset:0;background:rgba(5,8,18,.72);display:grid;place-items:center;z-index:10;padding:16px}.confirm .panel{max-width:440px}.brand{display:flex;align-items:center;gap:10px}.logo{display:inline-flex;width:30px;height:30px;flex:none;border-radius:7px;box-shadow:0 0 0 1px #343f66}.logo svg{width:30px;height:30px;display:block}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}</style>
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
12
12
|
<div class="shell">
|
|
13
|
-
<aside class="side"><div class="brand"
|
|
13
|
+
<aside class="side"><div class="brand"><span class="logo" aria-hidden="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="30" height="30" aria-hidden="true" focusable="false"><g transform="scale(4)"><defs><linearGradient id="rf-brand-g" x1="0" y1="0" x2="1" y2="1"><stop stop-color="#7F54F9"/><stop offset="1" stop-color="#06C8E8"/></linearGradient></defs><rect width="128" height="128" rx="28" fill="#10162B"/><path d="M35 23h43l18 18v63H35a10 10 0 0 1-10-10V33a10 10 0 0 1 10-10Z" fill="#FFFFFF"/><path d="M78 23v18h18" fill="#C7B4FF"/><path d="M40 51h30" stroke="#9DA8C5" stroke-width="6" stroke-linecap="round"/><rect x="41" y="78" width="10" height="14" rx="3" fill="#7F54F9"/><rect x="56" y="66" width="10" height="26" rx="3" fill="#4B77E4"/><rect x="71" y="57" width="10" height="35" rx="3" fill="#06C8E8"/><path d="M40 47h36" stroke="#DCE3F4" stroke-width="3"/></g></svg></span><span>Report<b>Forge</b></span></div><p data-i="tagline">Reports that impress, data that explains.</p>
|
|
14
14
|
<nav class="nav"><button type="button" class="current" id="navReports">▤ <span data-i="reports">My reports</span></button><button type="button" id="navCreate">✦ <span data-i="new">New report</span></button></nav></aside>
|
|
15
15
|
<main class="content">
|
|
16
16
|
<header class="top"><div><h1 id="heading">ReportForge</h1><small data-i="subheading">Editorial report studio</small></div><button type="button" class="primary" id="newTop">+ <span data-i="new">New report</span></button></header>
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
<div class="field"><label for="name" data-i="name">Report name</label><input id="name" maxlength="120" data-ip="namePh" placeholder="Q4 strategy report"></div>
|
|
22
22
|
<div class="formrow"><div class="field"><label for="type" data-i="type">Report type</label><select id="type"></select></div>
|
|
23
23
|
<div class="field"><label for="language" data-i="language">Report language</label><select id="language"><option value="es">Español</option><option value="en">English</option></select></div></div>
|
|
24
|
-
<div class="field"><label for="model" data-i="model">Alisio model</label><select id="model"><option value=""
|
|
24
|
+
<div class="field"><label for="model" data-i="model">Alisio model</label><select id="model"><option value="">Alisio default model</option></select><p id="modelsNote" class="help" role="status"></p></div>
|
|
25
25
|
<div class="field"><label for="creativity" data-i="creativity">Creative freedom</label><select id="creativity"><option value="strict" data-i="strict">Conservative · evidence only</option><option value="balanced" data-i="balanced" selected>Balanced · recommended</option><option value="bold" data-i="bold">Bold · experimental design</option></select></div>
|
|
26
26
|
<div class="field"><label for="goal" data-i="goal">Goal and intended decisions</label><textarea id="goal" data-ip="goalPh" placeholder="What should the reader understand and decide?"></textarea></div>
|
|
27
27
|
<div class="field"><label for="context" data-i="context">Additional context</label><textarea id="context" data-ip="contextPh" placeholder="Company, period, audience, constraints…"></textarea></div>
|
|
@@ -35,9 +35,10 @@
|
|
|
35
35
|
<label class="sr" for="columns" data-i="columns">Columns</label><select style="width:95px" id="columns"><option value="1">1 col.</option><option value="2">2 col.</option><option value="3">3 col.</option></select>
|
|
36
36
|
<label class="sr" for="pageSize" data-i="pageSize">Page size</label><select style="width:125px" id="pageSize"><option value="A4">A4</option><option value="Letter">Letter</option></select>
|
|
37
37
|
<label class="sr" for="mode" data-i="layout">Layout</label><select style="width:165px" id="mode"><option value="multipage" data-i="multipage">Multiple pages</option><option value="singlepage" data-i="singlepage">Fit to one page</option></select>
|
|
38
|
-
<button type="button" class="secondary" id="exportHtml" data-i="exportHtml">↓ HTML</button><button type="button" class="primary" id="printPdf" data-i="print">PDF / Print</button></div>
|
|
38
|
+
<button type="button" class="secondary" id="exportHtml" data-i="exportHtml">↓ HTML</button><button type="button" class="primary" id="printPdf" data-i="print">PDF / Print</button><button type="button" class="secondary" id="deleteReport" data-i="deleteReport">Delete report</button></div>
|
|
39
39
|
<p id="fitNote" class="fitnote" role="status" aria-live="polite"></p>
|
|
40
40
|
<div class="grid"><div class="panel"><h2 id="docTitle">—</h2><p class="help" id="docMeta"></p>
|
|
41
|
+
<div class="field"><label for="editModel" data-i="editModel">Model for the next generation</label><select id="editModel"><option value="">Alisio default model</option></select><p id="modelNote" class="fitnote warn" role="status" aria-live="polite"></p></div>
|
|
41
42
|
<div class="field"><label for="file" data-i="sources">Information sources</label><input id="file" type="file" multiple accept=".csv,.txt,.md,.json,.html,.xlsx,.docx,.pdf"></div>
|
|
42
43
|
<div id="sources" class="list"></div>
|
|
43
44
|
<div class="field" style="margin-top:14px"><label for="sourceUrl" data-i="url">Public web page (HTTPS)</label><input id="sourceUrl" type="url" placeholder="https://example.org/report"></div>
|
|
@@ -54,6 +55,7 @@
|
|
|
54
55
|
<div class="field" style="margin-top:24px"><label for="revisionPrompt" data-i="editPrompt">Request a change</label><textarea id="revisionPrompt" data-ip="revisionPh" placeholder="Make the conclusion clearer, compare by quarter…"></textarea></div>
|
|
55
56
|
<button type="button" class="secondary" id="revise" data-i="modify">Apply change</button></div>
|
|
56
57
|
<div class="panel"><h2 data-i="preview">Preview</h2><div class="preview"><iframe id="frame" title="Report preview" sandbox="allow-same-origin allow-modals"></iframe></div></div></div></section>
|
|
58
|
+
<div id="confirmBox" class="confirm hidden" role="alertdialog" aria-modal="true" aria-labelledby="confirmText"><div class="panel"><p id="confirmText"></p><div class="actions"><button type="button" class="secondary" id="confirmCancel" data-i="cancel">Cancel</button><button type="button" class="danger" id="confirmDelete" data-i="delete">Delete</button></div></div></div>
|
|
57
59
|
<iframe id="measure" class="measure" title="Layout measurement" aria-hidden="true" tabindex="-1" sandbox="allow-same-origin"></iframe>
|
|
58
60
|
</main></div>
|
|
59
61
|
<script nonce="__ALISIO_NONCE__">
|
|
@@ -65,7 +67,13 @@ const DICT = {
|
|
|
65
67
|
en: {
|
|
66
68
|
tagline: "Reports that impress, data that explains.", subheading: "Editorial report studio",
|
|
67
69
|
reports: "My reports", new: "New report", name: "Report name", namePh: "Q4 strategy report",
|
|
68
|
-
type: "Report type", language: "Report language", model: "Alisio model", defaultModel: "
|
|
70
|
+
type: "Report type", language: "Report language", model: "Alisio model", defaultModel: "Alisio default model",
|
|
71
|
+
editModel: "Model for the next generation", modelGone: "The model {model} is no longer available; the Alisio default model will be used.",
|
|
72
|
+
modelsFailed: "Could not list the Alisio models; the Alisio default model will be used.",
|
|
73
|
+
modelsEmpty: "No models are configured in Alisio (/connect); the Alisio default model will be used.",
|
|
74
|
+
deleteReport: "Delete report", delete: "Delete",
|
|
75
|
+
confirmDelete: "Delete “{name}”? Its sources and history are removed too. This cannot be undone.",
|
|
76
|
+
dropped: "{n} invalid components were left out.", modelFallback: "The report's model is no longer available; the Alisio default model was used.",
|
|
69
77
|
creativity: "Creative freedom", strict: "Conservative · evidence only", balanced: "Balanced · recommended",
|
|
70
78
|
bold: "Bold · experimental design", goal: "Goal and intended decisions",
|
|
71
79
|
goalPh: "What should the reader understand and decide?", context: "Additional context",
|
|
@@ -97,7 +105,15 @@ const DICT = {
|
|
|
97
105
|
url_not_html: "That page is not HTML.", url_too_large: "That page is larger than 2 MB.",
|
|
98
106
|
url_no_extractable_text: "No readable text was found on that page.", report_busy: "This report is already being generated.",
|
|
99
107
|
generation_malformed: "The model's answer could not be read. Try again or choose another model.",
|
|
100
|
-
generation_too_large: "The model's answer was too large.",
|
|
108
|
+
generation_too_large: "The model's answer was too large.",
|
|
109
|
+
generation_truncated: "The model's answer was cut off (too long). Try again; ReportForge will ask for a more compact report.",
|
|
110
|
+
generation_unreadable: "The model's answer did not contain a readable report. Try again or choose another model.",
|
|
111
|
+
generation_invalid_structure: "The model returned a report without enough valid components. Try again or choose another model.",
|
|
112
|
+
generation_incomplete: "The model did not finish answering (timeout or interrupted session). Try again.",
|
|
113
|
+
generation_model_error: "The model provider returned an error. Check the model connection in Alisio or choose another model.",
|
|
114
|
+
unknown_model: "That model is not available in Alisio. Choose another one.",
|
|
115
|
+
models_unavailable: "Could not list the Alisio models. Try again in a moment.",
|
|
116
|
+
report_not_found: "That report no longer exists.",
|
|
101
117
|
revision_conflict: "The report changed while generating. Generate again.", invalid_chart_data: "Chart data must be labels and numbers of equal length (at most 35).",
|
|
102
118
|
request_timeout: "No answer from Alisio.", invalid_json: "The chart data is not valid JSON.",
|
|
103
119
|
},
|
|
@@ -105,7 +121,13 @@ const DICT = {
|
|
|
105
121
|
es: {
|
|
106
122
|
tagline: "Informes que impresionan, datos que explican.", subheading: "Estudio de informes editoriales",
|
|
107
123
|
reports: "Mis informes", new: "Nuevo informe", name: "Nombre del informe", namePh: "Informe estratégico T4",
|
|
108
|
-
type: "Tipo de informe", language: "Idioma del informe", model: "Modelo de Alisio", defaultModel: "Modelo predeterminado",
|
|
124
|
+
type: "Tipo de informe", language: "Idioma del informe", model: "Modelo de Alisio", defaultModel: "Modelo predeterminado de Alisio",
|
|
125
|
+
editModel: "Modelo para la próxima generación", modelGone: "El modelo {model} ya no está disponible; se usará el Modelo predeterminado de Alisio.",
|
|
126
|
+
modelsFailed: "No se pudieron listar los modelos de Alisio; se usará el Modelo predeterminado de Alisio.",
|
|
127
|
+
modelsEmpty: "No hay modelos configurados en Alisio (/connect); se usará el Modelo predeterminado de Alisio.",
|
|
128
|
+
deleteReport: "Borrar informe", delete: "Borrar",
|
|
129
|
+
confirmDelete: "¿Borrar «{name}»? También se eliminan sus fuentes y su historial. No se puede deshacer.",
|
|
130
|
+
dropped: "Se omitieron {n} componentes no válidos.", modelFallback: "El modelo del informe ya no está disponible; se usó el Modelo predeterminado de Alisio.",
|
|
109
131
|
creativity: "Libertad creativa", strict: "Conservadora · solo evidencia", balanced: "Equilibrada · recomendada",
|
|
110
132
|
bold: "Audaz · diseño experimental", goal: "Objetivo y decisiones esperadas",
|
|
111
133
|
goalPh: "¿Qué debe comprender y decidir el lector?", context: "Contexto adicional",
|
|
@@ -137,7 +159,15 @@ const DICT = {
|
|
|
137
159
|
url_not_html: "Esa página no es HTML.", url_too_large: "Esa página supera los 2 MB.",
|
|
138
160
|
url_no_extractable_text: "No se encontró texto legible en esa página.", report_busy: "Este informe ya se está generando.",
|
|
139
161
|
generation_malformed: "No se pudo leer la respuesta del modelo. Inténtalo de nuevo o elige otro modelo.",
|
|
140
|
-
generation_too_large: "La respuesta del modelo era demasiado grande.",
|
|
162
|
+
generation_too_large: "La respuesta del modelo era demasiado grande.",
|
|
163
|
+
generation_truncated: "La respuesta del modelo quedó incompleta (demasiado larga). Inténtalo de nuevo; ReportForge pedirá un informe más compacto.",
|
|
164
|
+
generation_unreadable: "La respuesta del modelo no contenía un informe legible. Inténtalo de nuevo o elige otro modelo.",
|
|
165
|
+
generation_invalid_structure: "El modelo devolvió un informe sin suficientes componentes válidos. Inténtalo de nuevo o elige otro modelo.",
|
|
166
|
+
generation_incomplete: "El modelo no terminó de responder (tiempo agotado o sesión interrumpida). Inténtalo de nuevo.",
|
|
167
|
+
generation_model_error: "El proveedor del modelo devolvió un error. Revisa la conexión del modelo en Alisio o elige otro modelo.",
|
|
168
|
+
unknown_model: "Ese modelo no está disponible en Alisio. Elige otro.",
|
|
169
|
+
models_unavailable: "No se pudieron listar los modelos de Alisio. Inténtalo de nuevo en un momento.",
|
|
170
|
+
report_not_found: "Ese informe ya no existe.",
|
|
141
171
|
revision_conflict: "El informe cambió durante la generación. Genera de nuevo.", invalid_chart_data: "Los datos deben ser etiquetas y números de igual longitud (máximo 35).",
|
|
142
172
|
request_timeout: "Alisio no respondió.", invalid_json: "Los datos del gráfico no son JSON válido.",
|
|
143
173
|
},
|
|
@@ -149,7 +179,7 @@ const MAX_IN_FLIGHT = 6;
|
|
|
149
179
|
const RESPONSE_GUARD_MS = 11 * 60 * 1000;
|
|
150
180
|
const POLL_MS = 1000;
|
|
151
181
|
|
|
152
|
-
const state = { locale: "en", palettes: [], current: null, html: "", job: null, visible: true };
|
|
182
|
+
const state = { locale: "en", palettes: [], current: null, html: "", job: null, visible: true, models: [], modelsStatus: "ok", deleting: null };
|
|
153
183
|
const t = (key) => DICT[state.locale][key] ?? DICT.en[key] ?? key;
|
|
154
184
|
const fill = (text, values) => text.replace(/\{(\w+)\}/g, (_, k) => String(values[k] ?? ""));
|
|
155
185
|
|
|
@@ -248,6 +278,7 @@ function localize() {
|
|
|
248
278
|
$("audience").value = t("audienceDefault");
|
|
249
279
|
}
|
|
250
280
|
$("language").value = state.locale;
|
|
281
|
+
renderModels();
|
|
251
282
|
}
|
|
252
283
|
function option(value, label) {
|
|
253
284
|
const node = document.createElement("option");
|
|
@@ -255,6 +286,38 @@ function option(value, label) {
|
|
|
255
286
|
node.textContent = label;
|
|
256
287
|
return node;
|
|
257
288
|
}
|
|
289
|
+
/** Fills a model select: the Alisio default first, then the listed models (and `extra`, if any). */
|
|
290
|
+
function fillModels(select, selected, extra) {
|
|
291
|
+
const options = [option("", t("defaultModel")), ...state.models.map((m) => option(m.reference, m.label || m.reference))];
|
|
292
|
+
if (extra) options.push(option(extra, extra));
|
|
293
|
+
select.replaceChildren(...options);
|
|
294
|
+
select.value = [...select.options].some((o) => o.value === selected) ? selected : "";
|
|
295
|
+
}
|
|
296
|
+
function catalogNote() {
|
|
297
|
+
return state.modelsStatus === "failed" ? t("modelsFailed") : state.modelsStatus === "empty" ? t("modelsEmpty") : "";
|
|
298
|
+
}
|
|
299
|
+
function renderModels() {
|
|
300
|
+
fillModels($("model"), $("model").value);
|
|
301
|
+
$("modelsNote").textContent = catalogNote();
|
|
302
|
+
const r = state.current;
|
|
303
|
+
if (!r) return;
|
|
304
|
+
const stored = r.model || "";
|
|
305
|
+
const listed = !stored || state.models.some((m) => m.reference === stored);
|
|
306
|
+
// A stored model we cannot check (listing failed) stays visible; a model that is gone does not.
|
|
307
|
+
fillModels($("editModel"), stored, !listed && state.modelsStatus === "failed" ? stored : "");
|
|
308
|
+
$("modelNote").textContent = !listed && state.modelsStatus !== "failed" ? fill(t("modelGone"), { model: stored }) : catalogNote();
|
|
309
|
+
}
|
|
310
|
+
function askDelete(id, name) {
|
|
311
|
+
state.deleting = id;
|
|
312
|
+
$("confirmText").textContent = fill(t("confirmDelete"), { name });
|
|
313
|
+
$("confirmBox").classList.remove("hidden");
|
|
314
|
+
$("confirmCancel").focus?.();
|
|
315
|
+
}
|
|
316
|
+
function closeConfirm() {
|
|
317
|
+
state.deleting = null;
|
|
318
|
+
$("confirmBox").classList.add("hidden");
|
|
319
|
+
}
|
|
320
|
+
|
|
258
321
|
function renderPalettes() {
|
|
259
322
|
const box = $("palettes");
|
|
260
323
|
box.replaceChildren();
|
|
@@ -287,10 +350,15 @@ async function init() {
|
|
|
287
350
|
const context = await call("context");
|
|
288
351
|
state.palettes = Array.isArray(context?.palettes) ? context.palettes : [];
|
|
289
352
|
renderPalettes();
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
353
|
+
try {
|
|
354
|
+
const models = await call("models");
|
|
355
|
+
state.models = (Array.isArray(models) ? models : []).filter((m) => typeof m?.reference === "string" && m.reference);
|
|
356
|
+
state.modelsStatus = state.models.length ? "ok" : "empty";
|
|
357
|
+
} catch {
|
|
358
|
+
state.models = [];
|
|
359
|
+
state.modelsStatus = "failed";
|
|
293
360
|
}
|
|
361
|
+
renderModels();
|
|
294
362
|
await listing();
|
|
295
363
|
} catch (error) {
|
|
296
364
|
showError(error);
|
|
@@ -313,7 +381,17 @@ async function listing() {
|
|
|
313
381
|
const date = new Date(r.updatedAt);
|
|
314
382
|
button.textContent = `${r.name} · ${t("types")[r.type] ?? r.type} · ${Number.isNaN(date.getTime()) ? "" : date.toLocaleDateString(state.locale)}`;
|
|
315
383
|
button.onclick = () => openReport(r.id).catch(showError);
|
|
316
|
-
|
|
384
|
+
const remove = document.createElement("button");
|
|
385
|
+
remove.type = "button";
|
|
386
|
+
remove.className = "rowdel";
|
|
387
|
+
remove.dataset.delete = r.id;
|
|
388
|
+
remove.textContent = t("delete");
|
|
389
|
+
remove.setAttribute("aria-label", `${t("deleteReport")}: ${r.name}`);
|
|
390
|
+
remove.onclick = () => askDelete(r.id, r.name);
|
|
391
|
+
const row = document.createElement("div");
|
|
392
|
+
row.className = "reportrow";
|
|
393
|
+
row.append(button, remove);
|
|
394
|
+
list.append(row);
|
|
317
395
|
}
|
|
318
396
|
}
|
|
319
397
|
|
|
@@ -327,6 +405,7 @@ async function openReport(id) {
|
|
|
327
405
|
$("columns").value = String(r.columns);
|
|
328
406
|
$("pageSize").value = r.pageSize;
|
|
329
407
|
$("mode").value = r.mode;
|
|
408
|
+
renderModels();
|
|
330
409
|
const select = $("blockSelect");
|
|
331
410
|
select.replaceChildren(option("", "—"), ...r.blocks.map((b, i) => option(b.id, `${i + 1}. ${b.title || b.label || b.type}`)));
|
|
332
411
|
$("blockData").value = "";
|
|
@@ -442,7 +521,10 @@ async function work(action, prompt) {
|
|
|
442
521
|
const status = await call("jobs.get", { jobId: job.id });
|
|
443
522
|
if (status.status === "running") continue;
|
|
444
523
|
if (status.status === "succeeded") {
|
|
445
|
-
|
|
524
|
+
const notes = [t("done")];
|
|
525
|
+
if (Number(status.dropped) > 0) notes.push(fill(t("dropped"), { n: Number(status.dropped) }));
|
|
526
|
+
if (status.modelFallback) notes.push(t("modelFallback"));
|
|
527
|
+
$("jobState").textContent = notes.join(" ");
|
|
446
528
|
await openReport(r.id);
|
|
447
529
|
} else if (status.status === "cancelled") {
|
|
448
530
|
$("jobState").textContent = t("cancelled");
|
|
@@ -544,6 +626,36 @@ $("addUrl").onclick = async () => {
|
|
|
544
626
|
showError(error);
|
|
545
627
|
}
|
|
546
628
|
};
|
|
629
|
+
$("editModel").onchange = async () => {
|
|
630
|
+
const r = state.current;
|
|
631
|
+
if (!r) return;
|
|
632
|
+
try {
|
|
633
|
+
await call("report.setModel", { id: r.id, model: $("editModel").value });
|
|
634
|
+
await openReport(r.id);
|
|
635
|
+
} catch (error) {
|
|
636
|
+
showError(error);
|
|
637
|
+
renderModels();
|
|
638
|
+
}
|
|
639
|
+
};
|
|
640
|
+
$("deleteReport").onclick = () => {
|
|
641
|
+
if (state.current) askDelete(state.current.id, state.current.name);
|
|
642
|
+
};
|
|
643
|
+
$("confirmCancel").onclick = closeConfirm;
|
|
644
|
+
$("confirmDelete").onclick = async () => {
|
|
645
|
+
const id = state.deleting;
|
|
646
|
+
closeConfirm();
|
|
647
|
+
if (!id) return;
|
|
648
|
+
try {
|
|
649
|
+
await call("reports.delete", { id });
|
|
650
|
+
if (state.current?.id === id) state.current = null;
|
|
651
|
+
await listing();
|
|
652
|
+
} catch (error) {
|
|
653
|
+
showError(error);
|
|
654
|
+
}
|
|
655
|
+
};
|
|
656
|
+
document.addEventListener("keydown", (event) => {
|
|
657
|
+
if (event.key === "Escape" && state.deleting) closeConfirm();
|
|
658
|
+
});
|
|
547
659
|
$("generate").onclick = () => work("report.generate", "");
|
|
548
660
|
$("revise").onclick = () => work("report.revise", $("revisionPrompt").value);
|
|
549
661
|
$("cancelJob").onclick = () => {
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const VERSION = "0.1.
|
|
1
|
+
export declare const VERSION = "0.1.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED