@tea-agent/loop-agent 0.44.0-next.2 → 0.44.0-next.3
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/CHANGELOG.md +1 -0
- package/dist/build-stamp.json +3 -3
- package/dist/worker/console/chat/db-connections.js +48 -16
- package/dist/worker/console/chat/pi-runtime.js +3 -3
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-B8EdIjdl.js → abnfDiagram-N423BO3Z-COQlLTI7.js} +1 -1
- package/dist/worker/console/static/assets/{arc-CUaduV17.js → arc-zN3QkNaV.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-bYAcxRaf.js → architectureDiagram-T3A2C74G-Pyoyj5f2.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-FfhFUEMJ.js → blockDiagram-VBNYF7ZC-BNppA5WW.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-0Rqwn2_U.js → c4Diagram-5PPSVZJV-lyxL8nTx.js} +1 -1
- package/dist/worker/console/static/assets/channel-CgLPkTw2.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-D4FbDmsM.js → chunk-2GRJ4B5K-0hgjcdK4.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-C2nu32ml.js → chunk-2Q5K7J3B-D63N9d4i.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-G2tHSClK.js → chunk-5RXB4S5H-CUw2AyB5.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-181nyzuH.js → chunk-5VM5RSS4-Q_kwZT30.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-D091VbiQ.js → chunk-6Q2QTUOP-C7vMiKcw.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-BjrMCKTH.js → chunk-GF5L2VYU-T9GbV5Hz.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-T3zFHTpb.js → chunk-JWPE2WC7-D8nUSUJI.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-CIB7wrYq.js → chunk-KBJHAD2P-BCH2ewdp.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-HwnAsgDw.js → chunk-RYQCIY6F-BTdDuDBN.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-CQSdQAqo.js → chunk-XXDRQBXY-Cqm2RcKF.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-CuSD1Mhb.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-CuSD1Mhb.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CyBVLpjP.js → cose-bilkent-JH36ORCC-pjwfpVu4.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-D2Pf3U7m.js → cynefin-VYW2F7L2-BvalptKA.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-CzXuQ1a2.js → cynefinDiagram-MW4NZA55-BU4qJ6d7.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-9cMmcOsQ.js → dagre-VZM6K2ZE-DVTpq8J9.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-DTOr8GLs.js → diagram-7IWD3JNH-B8s1W6Fc.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-B8saqFHU.js → diagram-B4RE2ZJO-DPrFk9yH.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-Bvygp--w.js → diagram-LBJQPF4R-CnQIQsHC.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-CJyLwBhZ.js → diagram-Q27KOJAE-op0DEpCv.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-CkR1FDRN.js → diagram-UB23O5K3-DXQamm4T.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-BsbNtwvi.js → ebnfDiagram-BXEA7PRR-b1ad2C0r.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-EVZo9AKy.js → erDiagram-JOGREHBK-B4cD-ZFJ.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-C1x91tWN.js → flowDiagram-UKHOOZJN-CrgGjlQ1.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CiNBUsrJ.js → ganttDiagram-PKOTCBZU-DovmXQNV.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-CSd50p3d.js → gitGraphDiagram-DS77QQ5N-DpFyu2Jn.js} +1 -1
- package/dist/worker/console/static/assets/{index-RFWQLUE-.js → index-JRfTUgP7.js} +5 -5
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-1JDiYCuA.js → infoDiagram-6WML65LV-D3MoQZIl.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-BZLE6zpm.js → ishikawaDiagram-WSZJBQD7-Ci6C1yjS.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-Cg0nDmbe.js → journeyDiagram-NVQOT4AX-BWMo2lIP.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-DcwEdKjq.js → kanban-definition-27J2QSJJ-BdthIAg3.js} +1 -1
- package/dist/worker/console/static/assets/{linear-CXvVge5x.js → linear-DuFAlSOj.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-5R4WTYSN.js → mermaid.core-Dqz3Slj9.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-By9pSeeq.js → mindmap-definition-FAOFIHXS-DNVTrD09.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DzbVZTqW.js → pegDiagram-VL7TDLO6-CgfZPfBh.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-B9nbfnAq.js → pieDiagram-7S7Q4E2Y-ClM9P7yo.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-D268jfWH.js → quadrantDiagram-CIZ2JOQS-DwnEak2J.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-oNOXPRNn.js → railroadDiagram-AXF67PYL-rK4hxt9P.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-DXdr8K-4.js → requirementDiagram-LRYGKXZP-Cjqa6vo3.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-Dtm4uOJ0.js → sankeyDiagram-W5VNT64P-D3Fa250Z.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-CeeFiof4.js → sequenceDiagram-SI44F4Z6-2PdrNajj.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CK1gARll.js → sizeCapture-X5ZJPWSS-BBcuGeZn.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-3jMoAcZw.js → stateDiagram-OKZ733FA-CSJX9X6s.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cqskj0zt.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-Div6kwoD.js → swimlanes-SLNWSIFB-pOUU1bic.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CM0ZIhNP.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-B7P_6Up9.js → timeline-definition-Z64GVDOM-CAeqfQn0.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-eOPaGUOX.js → vennDiagram-T6HMQDX7-DYPLOMVO.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-tAcDnb31.js → wardleyDiagram-T6FBY63Y-Dy2V0Cha.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-Dg_r_785.js → xychartDiagram-ELKLHX3M-Dj9o7jrn.js} +1 -1
- package/dist/worker/console/static/index.html +1 -1
- package/dist/worker/console/workspace-context.js +1 -0
- package/dist/worker/observe/static/console-theme.css +174 -0
- package/dist/worker/observe/static/console-theme.js +36 -0
- package/dist/worker/observe/static/operator-chrome.css +85 -0
- package/dist/worker/observe/static/operator-chrome.js +51 -0
- package/package.json +1 -1
- package/dist/worker/console/static/assets/channel-ICokO4I1.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C0c0PBcA.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C0c0PBcA.js +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cr_kaxrX.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Bl4fQmZh.js +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
- Console 新增低饱和的「暮色蓝」深色与「雾光白」浅色主题,保留默认暖纸色;柔和背景、轻量选中态与独立按钮配色减少视觉刺激。顶部仅显示带「主题」悬停提示的紧凑明暗图标按钮,点击后展开「默认 / 深色 / 浅色」,选完自动收起,支持点击外部或 Escape 关闭;初始使用默认主题;即时切换对话、操作与观测界面,刷新后记住选择,浏览器存储不可用时仍可在当前页面切换。
|
|
5
6
|
- Operator Chat 在后台断线重连后不再丢消息:检测到中断会自动补齐缺口内容,也不会把正常的历史回放误判成丢事件而反复重连。
|
|
6
7
|
- Operator Chat 的恢复快照现在只会合并属于目标会话的乐观提交;切换会话后,旧会话尚未确认的输入不会再因延迟重连恢复而显示到新会话中。
|
|
7
8
|
- `/sdd-bingo` 成功提示现在展示上报的 Skill 与 Session ID;轨迹顶部会出现当前会话的常驻 SDD 身份栏,可一键复制、首次请求后自动更新;该上报以独立“操作”事件留痕,刷新或导出后仍在,不再伪装成工具调用。
|
package/dist/build-stamp.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "0.44.0-next.
|
|
4
|
-
"gitSha": "
|
|
5
|
-
"builtAt": "2026-09-
|
|
3
|
+
"version": "0.44.0-next.3",
|
|
4
|
+
"gitSha": "2bc5338a83fc147e9ac1a201797b3d04f5617bbe",
|
|
5
|
+
"builtAt": "2026-09-15T12:05:43.839Z"
|
|
6
6
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Operator Chat — governed database connection registry (2026-09-12).
|
|
3
3
|
*
|
|
4
4
|
* Manages NAMED database connection configs persisted in Console app-data
|
|
5
|
-
* (`db/connections.json` under the
|
|
5
|
+
* (`db/connections.json` under the Console-global app-data namespace). Credentials NEVER live in
|
|
6
6
|
* the config: sqlite stores an absolute file path; postgres/mysql store safe
|
|
7
7
|
* host/port/database/user metadata or the NAME of a DSN environment variable.
|
|
8
8
|
* Password/DSN values are never persisted, echoed, listed, or exported.
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import path from "node:path";
|
|
16
16
|
import os from "node:os";
|
|
17
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
17
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
18
18
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
19
19
|
import { createCipheriv, createDecipheriv, createHash, randomBytes, scryptSync } from "node:crypto";
|
|
20
20
|
import { writeSecureJson } from "../../../infrastructure/console/app-data.js";
|
|
@@ -243,14 +243,18 @@ export class DbConnectionRegistry {
|
|
|
243
243
|
handles = new Map();
|
|
244
244
|
runtimePasswords = new Map();
|
|
245
245
|
credentialVault;
|
|
246
|
+
legacyCredentialVault;
|
|
247
|
+
legacyRoot;
|
|
246
248
|
loaded = false;
|
|
247
249
|
write;
|
|
248
250
|
mutationQueue = Promise.resolve();
|
|
249
|
-
constructor(root, persistWriter = writeSecureJson, driverLoader = (moduleId) => import(moduleId)) {
|
|
251
|
+
constructor(root, persistWriter = writeSecureJson, driverLoader = (moduleId) => import(moduleId), legacyRoot) {
|
|
250
252
|
this.root = root;
|
|
251
253
|
this.persistWriter = persistWriter;
|
|
252
254
|
this.driverLoader = driverLoader;
|
|
255
|
+
this.legacyRoot = legacyRoot && path.resolve(legacyRoot) !== path.resolve(root) ? legacyRoot : undefined;
|
|
253
256
|
this.credentialVault = new LocalEncryptedCredentialVault(root);
|
|
257
|
+
this.legacyCredentialVault = this.legacyRoot ? new LocalEncryptedCredentialVault(this.legacyRoot) : undefined;
|
|
254
258
|
}
|
|
255
259
|
/** Wait for the latest persistence write to settle (tests / graceful stop). */
|
|
256
260
|
async flushed() {
|
|
@@ -264,10 +268,25 @@ export class DbConnectionRegistry {
|
|
|
264
268
|
* remove): the persisted file is small JSON, so a sync read on first use
|
|
265
269
|
* keeps list()/get() synchronous. connect() keeps the async reader.
|
|
266
270
|
*/
|
|
267
|
-
ensureLoadedSync() {
|
|
268
|
-
if (this.loaded)
|
|
271
|
+
ensureLoadedSync(force = false) {
|
|
272
|
+
if (this.loaded && !force)
|
|
269
273
|
return;
|
|
270
274
|
const file = this.connectionsFile();
|
|
275
|
+
if (!existsSync(file) && this.legacyRoot) {
|
|
276
|
+
const legacyFile = path.join(this.legacyRoot, "connections.json");
|
|
277
|
+
if (existsSync(legacyFile)) {
|
|
278
|
+
try {
|
|
279
|
+
this.configs = normalizePersisted(JSON.parse(readFileSync(legacyFile, "utf8")));
|
|
280
|
+
mkdirSync(this.root, { recursive: true, mode: 0o700 });
|
|
281
|
+
writeFileSync(file, JSON.stringify([...this.configs.values()], null, 2) + "\n", { mode: 0o600 });
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
this.configs = new Map();
|
|
285
|
+
}
|
|
286
|
+
this.loaded = true;
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
271
290
|
if (!existsSync(file)) {
|
|
272
291
|
this.configs = new Map();
|
|
273
292
|
this.loaded = true;
|
|
@@ -275,11 +294,19 @@ export class DbConnectionRegistry {
|
|
|
275
294
|
}
|
|
276
295
|
try {
|
|
277
296
|
const raw = JSON.parse(readFileSync(file, "utf8"));
|
|
278
|
-
|
|
297
|
+
const next = normalizePersisted(raw);
|
|
298
|
+
for (const [name, current] of this.configs) {
|
|
299
|
+
const updated = next.get(name);
|
|
300
|
+
if (!updated || JSON.stringify(updated) !== JSON.stringify(current))
|
|
301
|
+
this.closeHandle(name);
|
|
302
|
+
}
|
|
303
|
+
this.configs = next;
|
|
279
304
|
}
|
|
280
305
|
catch {
|
|
281
|
-
//
|
|
282
|
-
|
|
306
|
+
// A concurrent atomic replace can make the file briefly unavailable.
|
|
307
|
+
// Keep the last valid snapshot instead of hiding every connection.
|
|
308
|
+
if (!this.loaded)
|
|
309
|
+
this.configs = new Map();
|
|
283
310
|
}
|
|
284
311
|
this.loaded = true;
|
|
285
312
|
}
|
|
@@ -307,7 +334,7 @@ export class DbConnectionRegistry {
|
|
|
307
334
|
}
|
|
308
335
|
async add(input) {
|
|
309
336
|
return this.mutate(async () => {
|
|
310
|
-
this.ensureLoadedSync();
|
|
337
|
+
this.ensureLoadedSync(true);
|
|
311
338
|
const config = normalizeConnectionInput(input);
|
|
312
339
|
if (config.mode === "parameters" && (config.passwordMode === "runtime" || config.passwordMode === "encrypted") && typeof input.password !== "string") {
|
|
313
340
|
throw new DbConnectionError("DB_INVALID_CONFIG", "password is required for a new password connection");
|
|
@@ -330,7 +357,7 @@ export class DbConnectionRegistry {
|
|
|
330
357
|
}
|
|
331
358
|
async update(currentName, input) {
|
|
332
359
|
return this.mutate(async () => {
|
|
333
|
-
this.ensureLoadedSync();
|
|
360
|
+
this.ensureLoadedSync(true);
|
|
334
361
|
const current = this.configs.get(currentName);
|
|
335
362
|
if (!current) {
|
|
336
363
|
throw new DbConnectionError("DB_CONNECTION_NOT_FOUND", `no database connection named "${currentName}"`);
|
|
@@ -372,7 +399,7 @@ export class DbConnectionRegistry {
|
|
|
372
399
|
}
|
|
373
400
|
async remove(name) {
|
|
374
401
|
return this.mutate(async () => {
|
|
375
|
-
this.ensureLoadedSync();
|
|
402
|
+
this.ensureLoadedSync(true);
|
|
376
403
|
const current = this.configs.get(name);
|
|
377
404
|
if (!current)
|
|
378
405
|
return false;
|
|
@@ -388,7 +415,7 @@ export class DbConnectionRegistry {
|
|
|
388
415
|
});
|
|
389
416
|
}
|
|
390
417
|
exportConfig() {
|
|
391
|
-
this.ensureLoadedSync();
|
|
418
|
+
this.ensureLoadedSync(true);
|
|
392
419
|
return {
|
|
393
420
|
schemaVersion: 1,
|
|
394
421
|
exportedAt: new Date().toISOString(),
|
|
@@ -397,7 +424,7 @@ export class DbConnectionRegistry {
|
|
|
397
424
|
}
|
|
398
425
|
async importConfig(input, conflict = "skip") {
|
|
399
426
|
return this.mutate(async () => {
|
|
400
|
-
this.ensureLoadedSync();
|
|
427
|
+
this.ensureLoadedSync(true);
|
|
401
428
|
if (!isRecord(input) || input.schemaVersion !== 1 || !Array.isArray(input.connections)) {
|
|
402
429
|
throw new DbConnectionError("DB_INVALID_CONFIG", "invalid database connection export document");
|
|
403
430
|
}
|
|
@@ -470,11 +497,11 @@ export class DbConnectionRegistry {
|
|
|
470
497
|
}
|
|
471
498
|
/** Sanitized summaries — never includes any env var or password value. */
|
|
472
499
|
list() {
|
|
473
|
-
this.ensureLoadedSync();
|
|
500
|
+
this.ensureLoadedSync(true);
|
|
474
501
|
return [...this.configs.values()].map((config) => this.summary(config));
|
|
475
502
|
}
|
|
476
503
|
get(name) {
|
|
477
|
-
this.ensureLoadedSync();
|
|
504
|
+
this.ensureLoadedSync(true);
|
|
478
505
|
const config = this.configs.get(name);
|
|
479
506
|
return config ? this.summary(config) : undefined;
|
|
480
507
|
}
|
|
@@ -542,7 +569,7 @@ export class DbConnectionRegistry {
|
|
|
542
569
|
};
|
|
543
570
|
}
|
|
544
571
|
getConfig(name) {
|
|
545
|
-
this.ensureLoadedSync();
|
|
572
|
+
this.ensureLoadedSync(true);
|
|
546
573
|
const config = this.configs.get(name);
|
|
547
574
|
if (!config)
|
|
548
575
|
throw new DbConnectionError("DB_CONNECTION_NOT_FOUND", `no database connection named "${name}"`);
|
|
@@ -606,6 +633,11 @@ export class DbConnectionRegistry {
|
|
|
606
633
|
}
|
|
607
634
|
else if (config.passwordMode === "encrypted") {
|
|
608
635
|
password = config.passwordRef ? await this.credentialVault.get(config.passwordRef) : undefined;
|
|
636
|
+
if (password === undefined && this.legacyCredentialVault && config.passwordRef) {
|
|
637
|
+
password = await this.legacyCredentialVault.get(config.passwordRef);
|
|
638
|
+
if (password !== undefined)
|
|
639
|
+
await this.credentialVault.set(config.passwordRef, password);
|
|
640
|
+
}
|
|
609
641
|
if (password === undefined) {
|
|
610
642
|
throw new DbConnectionError("DB_ENV_MISSING", `encrypted password for connection "${config.name}" is not configured; edit the connection and enter it again`);
|
|
611
643
|
}
|
|
@@ -438,12 +438,12 @@ export class ConsolePiRuntime {
|
|
|
438
438
|
downloadsDir: path.join(this.options.sessionDir, "..", "browser-downloads"),
|
|
439
439
|
screenshotsDir: path.join(this.options.sessionDir, "..", "browser-screenshots"),
|
|
440
440
|
});
|
|
441
|
-
// Governed DB connections
|
|
442
|
-
//
|
|
441
|
+
// Governed DB connections are Console-global, not repository-scoped.
|
|
442
|
+
// This keeps named connections available when the user switches folders.
|
|
443
443
|
this.ownsDbConnections = options.dbConnections === undefined;
|
|
444
444
|
this.dbConnections =
|
|
445
445
|
options.dbConnections ??
|
|
446
|
-
new DbConnectionRegistry(path.join(this.options.sessionDir, "..", "db"));
|
|
446
|
+
new DbConnectionRegistry(path.join(options.globalAppDataRoot ?? path.resolve(this.options.sessionDir, ".."), "db"), undefined, undefined, path.join(this.options.sessionDir, "..", "db"));
|
|
447
447
|
this.exploreOrchestrator = new ExploreOrchestrator({
|
|
448
448
|
cwd: this.options.cwd,
|
|
449
449
|
bindings: this.bindings,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-C7vMiKcw.js";import{p as f}from"./chunk-JWPE2WC7-D8nUSUJI.js";import{_ as n,l as o}from"./mermaid.core-Dqz3Slj9.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-BvalptKA.js";import"./index-JRfTUgP7.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-Dqz3Slj9.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|