@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.
Files changed (72) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/dist/build-stamp.json +3 -3
  3. package/dist/worker/console/chat/db-connections.js +48 -16
  4. package/dist/worker/console/chat/pi-runtime.js +3 -3
  5. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-B8EdIjdl.js → abnfDiagram-N423BO3Z-COQlLTI7.js} +1 -1
  6. package/dist/worker/console/static/assets/{arc-CUaduV17.js → arc-zN3QkNaV.js} +1 -1
  7. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-bYAcxRaf.js → architectureDiagram-T3A2C74G-Pyoyj5f2.js} +1 -1
  8. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-FfhFUEMJ.js → blockDiagram-VBNYF7ZC-BNppA5WW.js} +1 -1
  9. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-0Rqwn2_U.js → c4Diagram-5PPSVZJV-lyxL8nTx.js} +1 -1
  10. package/dist/worker/console/static/assets/channel-CgLPkTw2.js +1 -0
  11. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-D4FbDmsM.js → chunk-2GRJ4B5K-0hgjcdK4.js} +1 -1
  12. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-C2nu32ml.js → chunk-2Q5K7J3B-D63N9d4i.js} +1 -1
  13. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-G2tHSClK.js → chunk-5RXB4S5H-CUw2AyB5.js} +1 -1
  14. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-181nyzuH.js → chunk-5VM5RSS4-Q_kwZT30.js} +1 -1
  15. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-D091VbiQ.js → chunk-6Q2QTUOP-C7vMiKcw.js} +1 -1
  16. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-BjrMCKTH.js → chunk-GF5L2VYU-T9GbV5Hz.js} +1 -1
  17. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-T3zFHTpb.js → chunk-JWPE2WC7-D8nUSUJI.js} +1 -1
  18. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-CIB7wrYq.js → chunk-KBJHAD2P-BCH2ewdp.js} +1 -1
  19. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-HwnAsgDw.js → chunk-RYQCIY6F-BTdDuDBN.js} +1 -1
  20. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-CQSdQAqo.js → chunk-XXDRQBXY-Cqm2RcKF.js} +1 -1
  21. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-CuSD1Mhb.js +1 -0
  22. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-CuSD1Mhb.js +1 -0
  23. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CyBVLpjP.js → cose-bilkent-JH36ORCC-pjwfpVu4.js} +1 -1
  24. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-D2Pf3U7m.js → cynefin-VYW2F7L2-BvalptKA.js} +1 -1
  25. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-CzXuQ1a2.js → cynefinDiagram-MW4NZA55-BU4qJ6d7.js} +1 -1
  26. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-9cMmcOsQ.js → dagre-VZM6K2ZE-DVTpq8J9.js} +1 -1
  27. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-DTOr8GLs.js → diagram-7IWD3JNH-B8s1W6Fc.js} +1 -1
  28. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-B8saqFHU.js → diagram-B4RE2ZJO-DPrFk9yH.js} +1 -1
  29. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-Bvygp--w.js → diagram-LBJQPF4R-CnQIQsHC.js} +1 -1
  30. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-CJyLwBhZ.js → diagram-Q27KOJAE-op0DEpCv.js} +1 -1
  31. package/dist/worker/console/static/assets/{diagram-UB23O5K3-CkR1FDRN.js → diagram-UB23O5K3-DXQamm4T.js} +1 -1
  32. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-BsbNtwvi.js → ebnfDiagram-BXEA7PRR-b1ad2C0r.js} +1 -1
  33. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-EVZo9AKy.js → erDiagram-JOGREHBK-B4cD-ZFJ.js} +1 -1
  34. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-C1x91tWN.js → flowDiagram-UKHOOZJN-CrgGjlQ1.js} +1 -1
  35. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CiNBUsrJ.js → ganttDiagram-PKOTCBZU-DovmXQNV.js} +1 -1
  36. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-CSd50p3d.js → gitGraphDiagram-DS77QQ5N-DpFyu2Jn.js} +1 -1
  37. package/dist/worker/console/static/assets/{index-RFWQLUE-.js → index-JRfTUgP7.js} +5 -5
  38. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-1JDiYCuA.js → infoDiagram-6WML65LV-D3MoQZIl.js} +1 -1
  39. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-BZLE6zpm.js → ishikawaDiagram-WSZJBQD7-Ci6C1yjS.js} +1 -1
  40. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-Cg0nDmbe.js → journeyDiagram-NVQOT4AX-BWMo2lIP.js} +1 -1
  41. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-DcwEdKjq.js → kanban-definition-27J2QSJJ-BdthIAg3.js} +1 -1
  42. package/dist/worker/console/static/assets/{linear-CXvVge5x.js → linear-DuFAlSOj.js} +1 -1
  43. package/dist/worker/console/static/assets/{mermaid.core-5R4WTYSN.js → mermaid.core-Dqz3Slj9.js} +5 -5
  44. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-By9pSeeq.js → mindmap-definition-FAOFIHXS-DNVTrD09.js} +1 -1
  45. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DzbVZTqW.js → pegDiagram-VL7TDLO6-CgfZPfBh.js} +1 -1
  46. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-B9nbfnAq.js → pieDiagram-7S7Q4E2Y-ClM9P7yo.js} +1 -1
  47. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-D268jfWH.js → quadrantDiagram-CIZ2JOQS-DwnEak2J.js} +1 -1
  48. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-oNOXPRNn.js → railroadDiagram-AXF67PYL-rK4hxt9P.js} +1 -1
  49. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-DXdr8K-4.js → requirementDiagram-LRYGKXZP-Cjqa6vo3.js} +1 -1
  50. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-Dtm4uOJ0.js → sankeyDiagram-W5VNT64P-D3Fa250Z.js} +1 -1
  51. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-CeeFiof4.js → sequenceDiagram-SI44F4Z6-2PdrNajj.js} +1 -1
  52. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CK1gARll.js → sizeCapture-X5ZJPWSS-BBcuGeZn.js} +1 -1
  53. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-3jMoAcZw.js → stateDiagram-OKZ733FA-CSJX9X6s.js} +1 -1
  54. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cqskj0zt.js +1 -0
  55. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-Div6kwoD.js → swimlanes-SLNWSIFB-pOUU1bic.js} +2 -2
  56. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-CM0ZIhNP.js +8 -0
  57. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-B7P_6Up9.js → timeline-definition-Z64GVDOM-CAeqfQn0.js} +1 -1
  58. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-eOPaGUOX.js → vennDiagram-T6HMQDX7-DYPLOMVO.js} +1 -1
  59. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-tAcDnb31.js → wardleyDiagram-T6FBY63Y-Dy2V0Cha.js} +1 -1
  60. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-Dg_r_785.js → xychartDiagram-ELKLHX3M-Dj9o7jrn.js} +1 -1
  61. package/dist/worker/console/static/index.html +1 -1
  62. package/dist/worker/console/workspace-context.js +1 -0
  63. package/dist/worker/observe/static/console-theme.css +174 -0
  64. package/dist/worker/observe/static/console-theme.js +36 -0
  65. package/dist/worker/observe/static/operator-chrome.css +85 -0
  66. package/dist/worker/observe/static/operator-chrome.js +51 -0
  67. package/package.json +1 -1
  68. package/dist/worker/console/static/assets/channel-ICokO4I1.js +0 -1
  69. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-C0c0PBcA.js +0 -1
  70. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-C0c0PBcA.js +0 -1
  71. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Cr_kaxrX.js +0 -1
  72. 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 身份栏,可一键复制、首次请求后自动更新;该上报以独立“操作”事件留痕,刷新或导出后仍在,不再伪装成工具调用。
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.44.0-next.2",
4
- "gitSha": "440f78f47ea6ba9ec7206387060b3090527c7aaf",
5
- "builtAt": "2026-09-15T01:01:15.370Z"
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 repo namespace). Credentials NEVER live in
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
- this.configs = normalizePersisted(raw);
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
- // unreadable/corrupt file: start empty rather than crash the chat
282
- this.configs = new Map();
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 persist under the repo app-data namespace
442
- // (`<repoNamespace>/db/connections.json`) — never inside the repo.
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-D091VbiQ.js";import{p as f}from"./chunk-JWPE2WC7-T3zFHTpb.js";import{_ as n,l as o}from"./mermaid.core-5R4WTYSN.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-D2Pf3U7m.js";import"./index-RFWQLUE-.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
+ 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-5R4WTYSN.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};
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};