@tea-agent/loop-agent 0.42.1 → 0.43.0-next.10

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 (89) hide show
  1. package/CHANGELOG.md +63 -3
  2. package/dist/build-stamp.json +3 -3
  3. package/dist/executors/dag-pi-executor.js +5 -20
  4. package/dist/worker/console/chat/pi-runtime/custom-tools/ask-user-question.js +44 -0
  5. package/dist/worker/console/chat/pi-runtime/custom-tools/explore-tools.js +202 -0
  6. package/dist/worker/console/chat/pi-runtime/custom-tools/goal-tools.js +78 -0
  7. package/dist/worker/console/chat/pi-runtime/custom-tools/operator-tools.js +86 -0
  8. package/dist/worker/console/chat/pi-runtime/custom-tools/todo-write.js +38 -0
  9. package/dist/worker/console/chat/pi-runtime/inspection-types.js +28 -0
  10. package/dist/worker/console/chat/pi-runtime/inspection.js +439 -0
  11. package/dist/worker/console/chat/pi-runtime/sdk-bindings.js +153 -0
  12. package/dist/worker/console/chat/pi-runtime/sdk-session.js +5 -0
  13. package/dist/worker/console/chat/pi-runtime.js +100 -1104
  14. package/dist/worker/console/chat/routes.js +32 -17
  15. package/dist/worker/console/chat/terminal-sessions.js +65 -1
  16. package/dist/worker/console/chat/terminal-tools.js +17 -5
  17. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-C9eI7nEo.js → abnfDiagram-N423BO3Z-D_fNbWc_.js} +1 -1
  18. package/dist/worker/console/static/assets/{arc-VJWsxWhB.js → arc-_HuqLW6m.js} +1 -1
  19. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-BGcyiMSo.js → architectureDiagram-T3A2C74G-Djy2qY1m.js} +1 -1
  20. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-BScnFwyi.js → blockDiagram-VBNYF7ZC-bB-1TSyY.js} +1 -1
  21. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-Bl9_BsLi.js → c4Diagram-5PPSVZJV-C5Hmghrz.js} +1 -1
  22. package/dist/worker/console/static/assets/channel-C0A6UEIa.js +1 -0
  23. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-F1uKxiUt.js → chunk-2GRJ4B5K-Duyl39oy.js} +1 -1
  24. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-rSRMynVu.js → chunk-2Q5K7J3B-x6mdnSyf.js} +1 -1
  25. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-DAsJm1WD.js → chunk-5RXB4S5H-WlBuFj7W.js} +1 -1
  26. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-DQIdVI0a.js → chunk-5VM5RSS4-CTF429HX.js} +1 -1
  27. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-4A_8rJ-Q.js → chunk-6Q2QTUOP-Dwd6r-SF.js} +1 -1
  28. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-BHnT-vjh.js → chunk-GF5L2VYU-C-Br82D1.js} +1 -1
  29. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-Rq7QKBkn.js → chunk-JWPE2WC7-CuGp0DeE.js} +1 -1
  30. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-BXh-AI2u.js → chunk-KBJHAD2P-CJhFX6Lh.js} +1 -1
  31. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-BblcLy8m.js → chunk-RYQCIY6F-DpGOa_jT.js} +1 -1
  32. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-zHZmVnB6.js → chunk-XXDRQBXY-DXJaTynd.js} +1 -1
  33. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DzguNppy.js +1 -0
  34. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DzguNppy.js +1 -0
  35. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-Cmwz0Wi4.js → cose-bilkent-JH36ORCC-CRBZWjE4.js} +1 -1
  36. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-Dq76MHQU.js → cynefin-VYW2F7L2-BdXcxtlb.js} +1 -1
  37. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-zPahV1fM.js → cynefinDiagram-MW4NZA55-07UKsOts.js} +1 -1
  38. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-DQJ3xPc_.js → dagre-VZM6K2ZE-D38p9__S.js} +1 -1
  39. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-BwX7u6fv.js → diagram-7IWD3JNH-nSiBNNjH.js} +1 -1
  40. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-CodnDCco.js → diagram-B4RE2ZJO-BFOTot5D.js} +1 -1
  41. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-gAjtWkxG.js → diagram-LBJQPF4R-DypKaZ6k.js} +1 -1
  42. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-CGCqz0cS.js → diagram-Q27KOJAE-B6yoOQeW.js} +1 -1
  43. package/dist/worker/console/static/assets/{diagram-UB23O5K3-RHwYEywd.js → diagram-UB23O5K3-BHYS6viX.js} +1 -1
  44. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-B6seb_p_.js → ebnfDiagram-BXEA7PRR-D2VD5Snj.js} +1 -1
  45. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-CmwCKYe8.js → erDiagram-JOGREHBK-E98mWxN1.js} +1 -1
  46. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-BfNsaZ0V.js → flowDiagram-UKHOOZJN-CT1zxhqP.js} +1 -1
  47. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-zmYgi_Z3.js → ganttDiagram-PKOTCBZU-6GcngNcy.js} +1 -1
  48. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-BDEzzSKF.js → gitGraphDiagram-DS77QQ5N-DCL6NvKe.js} +1 -1
  49. package/dist/worker/console/static/assets/{index-DgenUAfc.js → index-24jp3aBh.js} +77 -77
  50. package/dist/worker/console/static/assets/index-CY6y6I8M.css +1 -0
  51. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-DeSz8l42.js → infoDiagram-6WML65LV-C0627e-9.js} +1 -1
  52. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-B1LV29aH.js → ishikawaDiagram-WSZJBQD7-C_u3P6Ik.js} +1 -1
  53. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-CCw4W2oU.js → journeyDiagram-NVQOT4AX-DPDPv9HL.js} +1 -1
  54. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-BozaMoRJ.js → kanban-definition-27J2QSJJ-D3OHdWiO.js} +1 -1
  55. package/dist/worker/console/static/assets/{linear-G1JR40SX.js → linear-DI88zD7n.js} +1 -1
  56. package/dist/worker/console/static/assets/{mermaid.core-CCgPF0oA.js → mermaid.core-p2l8IrWY.js} +5 -5
  57. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-CEqnCHnD.js → mindmap-definition-FAOFIHXS-B1bAX-oS.js} +1 -1
  58. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DpmQPKuI.js → pegDiagram-VL7TDLO6-DwOnWxdD.js} +1 -1
  59. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-BP501AxR.js → pieDiagram-7S7Q4E2Y-xRkTXnJC.js} +1 -1
  60. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-D1dBhl_A.js → quadrantDiagram-CIZ2JOQS-_9UC5Zio.js} +1 -1
  61. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-DgZDS5pY.js → railroadDiagram-AXF67PYL-CgEUirWJ.js} +1 -1
  62. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-BzB3pyIq.js → requirementDiagram-LRYGKXZP-Czbpwiyz.js} +1 -1
  63. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-B9ZprFFP.js → sankeyDiagram-W5VNT64P-_j7_KiqY.js} +1 -1
  64. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-CC2-_XrA.js → sequenceDiagram-SI44F4Z6-BNJa6Hyi.js} +1 -1
  65. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-UVtAUqgB.js → sizeCapture-X5ZJPWSS-DedpKtOc.js} +1 -1
  66. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-CWcS5JYG.js → stateDiagram-OKZ733FA-BBvthr7c.js} +1 -1
  67. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BABVQnfM.js +1 -0
  68. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-C4p-dn06.js → swimlanes-SLNWSIFB-Ds7umgEM.js} +2 -2
  69. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-D0qsLaxR.js +8 -0
  70. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-Dnz52OHX.js → timeline-definition-Z64GVDOM-CKa-p1nF.js} +1 -1
  71. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-CzTE0Nfu.js → vennDiagram-T6HMQDX7-LoUNR56o.js} +1 -1
  72. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-NAR9cjQQ.js → wardleyDiagram-T6FBY63Y-Bqbl6ym7.js} +1 -1
  73. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-DVMk8413.js → xychartDiagram-ELKLHX3M-B8dUg4lf.js} +1 -1
  74. package/dist/worker/console/static/index.html +2 -2
  75. package/dist/worker/console/static-src/operator-chat/active-turn-tail.js +10 -0
  76. package/dist/worker/console/static-src/operator-chat/compaction-message.js +7 -0
  77. package/dist/worker/console/static-src/operator-chat/turn-process-disclosure.js +10 -0
  78. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +13 -6
  79. package/dist/worker/console/static-src/operator-chat/useChatThread.js +2 -4
  80. package/dist/worker/console/static-src/operator-chat/useComposer.js +13 -4
  81. package/dist/worker/observe/static/styles.css +7 -4
  82. package/dist/worker/observe/static/views/dag-inspector.js +5 -19
  83. package/package.json +1 -1
  84. package/dist/worker/console/static/assets/channel-B6sQYuOE.js +0 -1
  85. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-Z6s5QoeI.js +0 -1
  86. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-Z6s5QoeI.js +0 -1
  87. package/dist/worker/console/static/assets/index-aF4u-Y__.css +0 -1
  88. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BooX8u1Q.js +0 -1
  89. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-D64_eqqE.js +0 -8
@@ -4161,27 +4161,42 @@ export async function handleChatCompact(req, res, deps, sessionId) {
4161
4161
  });
4162
4162
  try {
4163
4163
  const snapshot = await deps.runtime.compact(sessionId, customInstructions);
4164
+ const completedAt = new Date().toISOString();
4165
+ const completedData = {
4166
+ schemaVersion: 1,
4167
+ compactionId,
4168
+ reason: "manual",
4169
+ status: "completed",
4170
+ summary: snapshot.summary,
4171
+ ...(snapshot.firstKeptEntryId
4172
+ ? { firstKeptEntryId: snapshot.firstKeptEntryId }
4173
+ : {}),
4174
+ ...(snapshot.tokensBefore === undefined
4175
+ ? {}
4176
+ : { tokensBefore: snapshot.tokensBefore }),
4177
+ ...(snapshot.estimatedTokensAfter === undefined
4178
+ ? {}
4179
+ : { estimatedTokensAfter: snapshot.estimatedTokensAfter }),
4180
+ willRetry: false,
4181
+ };
4164
4182
  const event = deps.events.append(sessionId, turnId, {
4165
4183
  kind: "compaction_end",
4166
- data: {
4167
- schemaVersion: 1,
4168
- compactionId,
4169
- reason: "manual",
4170
- status: "completed",
4171
- summary: snapshot.summary,
4172
- ...(snapshot.firstKeptEntryId
4173
- ? { firstKeptEntryId: snapshot.firstKeptEntryId }
4174
- : {}),
4175
- ...(snapshot.tokensBefore === undefined
4176
- ? {}
4177
- : { tokensBefore: snapshot.tokensBefore }),
4178
- ...(snapshot.estimatedTokensAfter === undefined
4179
- ? {}
4180
- : { estimatedTokensAfter: snapshot.estimatedTokensAfter }),
4181
- willRetry: false,
4184
+ at: completedAt,
4185
+ data: completedData,
4186
+ });
4187
+ sendJson(res, 200, {
4188
+ ok: true,
4189
+ snapshot,
4190
+ eventId: event.eventId,
4191
+ compaction: {
4192
+ eventId: event.eventId,
4193
+ kind: "compaction_end",
4194
+ at: completedAt,
4195
+ seq: event.seq,
4196
+ turnId,
4197
+ data: completedData,
4182
4198
  },
4183
4199
  });
4184
- sendJson(res, 200, { ok: true, snapshot, eventId: event.eventId });
4185
4200
  }
4186
4201
  catch (error) {
4187
4202
  const classified = classifyChatCompactionFailure(error);
@@ -16,6 +16,7 @@
16
16
  import { spawn as ptySpawn } from "node-pty";
17
17
  import { existsSync } from "node:fs";
18
18
  import { randomBytes } from "node:crypto";
19
+ import { release as osRelease } from "node:os";
19
20
  /** Bounded ring buffer of raw output chunks (bytes preserved as utf8 text). */
20
21
  const MAX_BUFFER_CHARS = 200_000;
21
22
  export class TerminalSessionError extends Error {
@@ -97,6 +98,51 @@ function resolveZsh() {
97
98
  const file = firstExisting(["/bin/zsh", "/usr/bin/zsh", "/usr/local/bin/zsh", "/opt/homebrew/bin/zsh"]);
98
99
  return file ? { file, args: ["-i"] } : undefined;
99
100
  }
101
+ /** Windows `cmd.exe`. Always present on Windows; offered alongside
102
+ * PowerShell so users can use native Windows tooling (`dir`, `where`,
103
+ * `mklink`, `net user`, etc.) without leaving the terminal panel.
104
+ * - `/Q` turns off command echo (otherwise cmd echoes every input line,
105
+ * doubling every prompt in PTY output).
106
+ * - `/D` disables AutoRun execution from the registry (avoid running the
107
+ * user's HKCU\...\RunOnce / autorun scripts on every fresh shell).
108
+ * - `/K "prompt $P$G"` keeps the shell alive across tool calls (cwd/env
109
+ * survive) and uses the classic cmd prompt `C:\path>` instead of the
110
+ * bare `>`, so the user can see the working directory at a glance —
111
+ * matching the default `cmd.exe` window. */
112
+ function resolveCmd() {
113
+ if (!IS_WINDOWS)
114
+ return undefined;
115
+ const file = firstExisting([
116
+ "C:\\Windows\\System32\\cmd.exe",
117
+ // Wine / uncommon layouts
118
+ "C:\\Windows\\Sysnative\\cmd.exe",
119
+ ]);
120
+ if (!file)
121
+ return undefined;
122
+ return {
123
+ file,
124
+ args: ["/Q", "/D", "/K", "prompt $P$G"],
125
+ };
126
+ }
127
+ /** Synthesize the cmd.exe startup banner that node-pty drops. cmd prints
128
+ * `Microsoft Windows [版本 10.0.26200]\n(c) Microsoft Corporation。保留所有权利。`
129
+ * via `WriteConsole` BEFORE ConPTY attaches to its stdio handles, so
130
+ * node-pty / ConPTY never sees those writes. We re-emit an equivalent
131
+ * banner using `os.release()` (kernel build, e.g. "10.0.26200") so the
132
+ * console terminal looks like a real cmd window. The leading \r\n avoids
133
+ * the banner colliding with whatever ANSI preamble ConPTY already sent.
134
+ *
135
+ * Only meaningful for the cmd shell — bash and PowerShell on Windows have
136
+ * their own startup output that we must NOT paper over with a Windows
137
+ * banner they don't print. */
138
+ function makeCmdBanner(shell) {
139
+ if (!IS_WINDOWS)
140
+ return undefined;
141
+ if (shell !== "cmd")
142
+ return undefined;
143
+ const build = osRelease();
144
+ return `\r\nMicrosoft Windows [版本 ${build}]\r\n(c) Microsoft Corporation。保留所有权利。\r\n\r\n`;
145
+ }
100
146
  let cachedCatalog;
101
147
  /** Platform shell catalog, computed once per process. Drives both the UI
102
148
  * button set and the model tool's shell parameter enum. */
@@ -113,6 +159,9 @@ export function availableShellKinds() {
113
159
  const zsh = resolveZsh();
114
160
  if (zsh)
115
161
  resolved.set("zsh", zsh);
162
+ const cmd = resolveCmd();
163
+ if (cmd)
164
+ resolved.set("cmd", cmd);
116
165
  cachedCatalog = { kinds: [...resolved.keys()], resolved };
117
166
  return cachedCatalog;
118
167
  }
@@ -165,10 +214,18 @@ export class TerminalSessionRegistry {
165
214
  bufferChars: 0,
166
215
  subscribers: new Set(),
167
216
  disposing: undefined,
217
+ pendingBanner: makeCmdBanner(options.shell) ?? undefined,
168
218
  };
169
219
  this.entries.set(sessionId, entry);
170
220
  pty.onData((chunk) => {
171
221
  entry.info.totalOutputChars += chunk.length;
222
+ // Inject the synthesized cmd banner into the FIRST chunk the
223
+ // subscribers see, so SSE/streaming attaches still see it even
224
+ // though node-pty already missed cmd's real banner.
225
+ if (entry.pendingBanner !== undefined) {
226
+ chunk = entry.pendingBanner + chunk;
227
+ entry.pendingBanner = undefined;
228
+ }
172
229
  entry.buffer.push(chunk);
173
230
  entry.bufferChars += chunk.length;
174
231
  while (entry.bufferChars > MAX_BUFFER_CHARS && entry.buffer.length > 1) {
@@ -219,8 +276,15 @@ export class TerminalSessionRegistry {
219
276
  /** Full buffered output (post-trim prefix may be incomplete). */
220
277
  readAll(sessionId) {
221
278
  const entry = this.mustGet(sessionId);
279
+ let text = entry.buffer.join("");
280
+ // If the caller reads before any real PTY output has arrived, the
281
+ // banner injection in onData hasn't fired yet — fold it in here.
282
+ if (entry.pendingBanner !== undefined) {
283
+ text = entry.pendingBanner + text;
284
+ entry.pendingBanner = undefined;
285
+ }
222
286
  return {
223
- text: entry.buffer.join(""),
287
+ text,
224
288
  truncated: entry.info.totalOutputChars > entry.bufferChars,
225
289
  totalOutputChars: entry.info.totalOutputChars,
226
290
  };
@@ -48,10 +48,16 @@ export async function buildPersistentTerminalTools(deps) {
48
48
  const marker = `${MARKER_PREFIX}${Date.now().toString(36)}${Math.random()
49
49
  .toString(36)
50
50
  .slice(2, 8)}`;
51
- // Exit-code echo: PowerShell uses $LASTEXITCODE; bash/zsh use $?.
51
+ // Exit-code echo per shell:
52
+ // - PowerShell: $LASTEXITCODE
53
+ // - bash / zsh: $?
54
+ // - cmd.exe: %ERRORLEVEL% (interpolation happens before echo runs,
55
+ // so we use `prompt` substitution style `echo MARKER:%ERRORLEVEL%`).
52
56
  const exitEcho = kind === "powershell"
53
57
  ? `Write-Host "${marker}:$LASTEXITCODE"`
54
- : `echo "${marker}:$?"`;
58
+ : kind === "cmd"
59
+ ? `echo ${marker}:%ERRORLEVEL%`
60
+ : `echo "${marker}:$?"`;
55
61
  const wrapped = `${command}\n${exitEcho}\n`;
56
62
  // Capture output from the moment of send until the marker line shows up.
57
63
  const pending = [];
@@ -122,15 +128,21 @@ export async function buildPersistentTerminalTools(deps) {
122
128
  });
123
129
  };
124
130
  const kinds = availableShellKinds().kinds;
131
+ // Default precedence: bash (most posix-feel for cross-platform models) →
132
+ // cmd (native Windows shell, offered when bash is absent) → zsh (macOS
133
+ // default on some dev boxes) → powershell (universal Windows fallback).
125
134
  const defaultKind = kinds.includes("bash")
126
135
  ? "bash"
127
- : kinds.includes("zsh")
128
- ? "zsh"
129
- : "powershell";
136
+ : kinds.includes("cmd")
137
+ ? "cmd"
138
+ : kinds.includes("zsh")
139
+ ? "zsh"
140
+ : "powershell";
130
141
  const kindLabels = {
131
142
  powershell: "PowerShell",
132
143
  bash: "bash",
133
144
  zsh: "zsh",
145
+ cmd: "cmd",
134
146
  };
135
147
  const tool = defineTool({
136
148
  name: "terminal",
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-4A_8rJ-Q.js";import{p as f}from"./chunk-JWPE2WC7-Rq7QKBkn.js";import{_ as n,l as o}from"./mermaid.core-CCgPF0oA.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-Dq76MHQU.js";import"./index-DgenUAfc.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-Dwd6r-SF.js";import{p as f}from"./chunk-JWPE2WC7-CuGp0DeE.js";import{_ as n,l as o}from"./mermaid.core-p2l8IrWY.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-BdXcxtlb.js";import"./index-24jp3aBh.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-CCgPF0oA.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-p2l8IrWY.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};