pim-agent 0.12.0 → 0.13.0

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 (111) hide show
  1. package/package.json +2 -1
  2. package/packages/core/src/extensions/bash/MemoryCap.ts +128 -0
  3. package/packages/core/src/extensions/bash/format.ts +5 -0
  4. package/packages/core/src/extensions/bash/run.ts +15 -2
  5. package/packages/core/src/extensions/bash/schema.ts +2 -0
  6. package/packages/core/src/extensions/system-prompt/index.ts +2 -0
  7. package/packages/core/src/extensions/system-prompt/prompt.ts +12 -0
  8. package/packages/core/src/shared/Supervisor.ts +1 -0
  9. package/packages/web/dist/client/assets/abnfDiagram-O67JEVCF-CZ7V84ot.js +1 -0
  10. package/packages/web/dist/client/assets/arc-DiHGkUvc.js +1 -0
  11. package/packages/web/dist/client/assets/architecture-7GRP2DOG-HIzEIkwQ.js +1 -0
  12. package/packages/web/dist/client/assets/architectureDiagram-NJMV4G6O-XS5DhfJB.js +36 -0
  13. package/packages/web/dist/client/assets/array-BifhSqXX.js +1 -0
  14. package/packages/web/dist/client/assets/blockDiagram-BEXU5L5S-BCsgLvy1.js +140 -0
  15. package/packages/web/dist/client/assets/c4Diagram-YGBWAQC7-Bj9LcWNm.js +38 -0
  16. package/packages/web/dist/client/assets/channel-BCA6qe9I.js +1 -0
  17. package/packages/web/dist/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  18. package/packages/web/dist/client/assets/chunk-3FUC2YCW-BmDurFxp.js +2 -0
  19. package/packages/web/dist/client/assets/chunk-5DYCD2WN-DAjG-pqn.js +1 -0
  20. package/packages/web/dist/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  21. package/packages/web/dist/client/assets/chunk-742MDFTN-Bmxs5puY.js +1 -0
  22. package/packages/web/dist/client/assets/chunk-7INBJB4K-Di7kIxrQ.js +62 -0
  23. package/packages/web/dist/client/assets/chunk-7M6MHVWA-CSc8sR0b.js +213 -0
  24. package/packages/web/dist/client/assets/chunk-7PRAP22T-C8kd5QvY.js +1 -0
  25. package/packages/web/dist/client/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  26. package/packages/web/dist/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
  27. package/packages/web/dist/client/assets/chunk-GTNCS2PH-DG2b2LYE.js +88 -0
  28. package/packages/web/dist/client/assets/chunk-GWA4HPMP-DdLaLQCu.js +1 -0
  29. package/packages/web/dist/client/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  30. package/packages/web/dist/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  31. package/packages/web/dist/client/assets/chunk-MBY4JIJT-C1j0yQlk.js +72 -0
  32. package/packages/web/dist/client/assets/chunk-NETBCI7D-Bfq9H74p.js +1 -0
  33. package/packages/web/dist/client/assets/chunk-O7XYJQB3-ZHvBmBO-.js +128 -0
  34. package/packages/web/dist/client/assets/chunk-UA2S7LBM-ku1JeHSK.js +1 -0
  35. package/packages/web/dist/client/assets/chunk-WEXAMYUT-BP1iga_7.js +1 -0
  36. package/packages/web/dist/client/assets/chunk-XXDRQBXY-BBeccPcX.js +1 -0
  37. package/packages/web/dist/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  38. package/packages/web/dist/client/assets/chunk-Z7XXMR3K-SMHZugaR.js +10 -0
  39. package/packages/web/dist/client/assets/chunk-ZIGJFQKS-CFU_JLG4.js +2 -0
  40. package/packages/web/dist/client/assets/classDiagram-v2-NBCMYWYE-CYviuQzJ.js +217 -0
  41. package/packages/web/dist/client/assets/core-DyHsgs5k.js +3 -0
  42. package/packages/web/dist/client/assets/cose-bilkent-JH36ORCC-9v2ZkJzo.js +1 -0
  43. package/packages/web/dist/client/assets/cynefin-OW5HDTMX-Bx5xRadi.js +1 -0
  44. package/packages/web/dist/client/assets/cynefinDiagram-VND7K2PF-BRfGDKqa.js +62 -0
  45. package/packages/web/dist/client/assets/cytoscape.esm-B-1iW2ft.js +321 -0
  46. package/packages/web/dist/client/assets/dagre-6A5THRUB-C4l-2L2e.js +4 -0
  47. package/packages/web/dist/client/assets/defaultLocale-BFoDCU3G.js +1 -0
  48. package/packages/web/dist/client/assets/diagram-22UHCM2B-d_hQ3kyi.js +200 -0
  49. package/packages/web/dist/client/assets/diagram-3UASUU5V-DrEeguPI.js +24 -0
  50. package/packages/web/dist/client/assets/diagram-ATOU4E4O-BmfQ22pD.js +3 -0
  51. package/packages/web/dist/client/assets/diagram-CDSNMT55-BjVWjuPF.js +30 -0
  52. package/packages/web/dist/client/assets/diagram-MLGK6HIB-wDjk-O8i.js +24 -0
  53. package/packages/web/dist/client/assets/diagram-MPIPVDR6-DqXQFE1s.js +41 -0
  54. package/packages/web/dist/client/assets/dist-BddGOpie.js +1 -0
  55. package/packages/web/dist/client/assets/ebnfDiagram-ZINNZB2B-UB8kOITM.js +1 -0
  56. package/packages/web/dist/client/assets/elk-276RUBZZ-D4miYQnD.js +27 -0
  57. package/packages/web/dist/client/assets/erDiagram-OPXOYQCR--RXKv7KH.js +99 -0
  58. package/packages/web/dist/client/assets/eventmodeling-NTZA5JFV-l6SYFw1s.js +1 -0
  59. package/packages/web/dist/client/assets/flowDiagram-KWPJA3E3-CWW9qnqm.js +1 -0
  60. package/packages/web/dist/client/assets/ganttDiagram-FUAMR5RP-C0CFpE5x.js +292 -0
  61. package/packages/web/dist/client/assets/gitGraph-4MIJSDKK-VPL7nv2c.js +1 -0
  62. package/packages/web/dist/client/assets/gitGraphDiagram-X574FWY7-CgxJA-T8.js +106 -0
  63. package/packages/web/dist/client/assets/graphlib-DS17s2tU.js +1 -0
  64. package/packages/web/dist/client/assets/index-D9_XJLSc.css +1 -0
  65. package/packages/web/dist/client/assets/index-XTlTnQmx.js +47 -0
  66. package/packages/web/dist/client/assets/info-A6RAGUB7-P0-o68pj.js +1 -0
  67. package/packages/web/dist/client/assets/infoDiagram-VRGFBTTK-DFJZNRUP.js +2 -0
  68. package/packages/web/dist/client/assets/init-C-OQMol4.js +1 -0
  69. package/packages/web/dist/client/assets/ishikawaDiagram-OU5B5YK6-ZkyhNd1T.js +70 -0
  70. package/packages/web/dist/client/assets/journeyDiagram-ZHPQQLJL-DFevH8my.js +139 -0
  71. package/packages/web/dist/client/assets/kanban-definition-PNTS6WVX-l7e7ZZDC.js +89 -0
  72. package/packages/web/dist/client/assets/katex-ZlcWpGUi.js +257 -0
  73. package/packages/web/dist/client/assets/line-DO_s6Ujd.js +1 -0
  74. package/packages/web/dist/client/assets/linear-C4xH5PPc.js +1 -0
  75. package/packages/web/dist/client/assets/mermaid-parser.core-nQaTP3VY.js +7 -0
  76. package/packages/web/dist/client/assets/mermaid.core-Cz05yTZh.js +44 -0
  77. package/packages/web/dist/client/assets/mindmap-definition-NLK3R4M7-CHOEuHm2.js +96 -0
  78. package/packages/web/dist/client/assets/ordinal-BDEzSJ7C.js +1 -0
  79. package/packages/web/dist/client/assets/packet-AYTQ26CC-BH3ehPMo.js +1 -0
  80. package/packages/web/dist/client/assets/path-fybaL0A-.js +1 -0
  81. package/packages/web/dist/client/assets/pegDiagram-GJSIUBJH-CkWBLtad.js +1 -0
  82. package/packages/web/dist/client/assets/pie-WAS4IAKB-nNVEq3dx.js +1 -0
  83. package/packages/web/dist/client/assets/pieDiagram-5QR66LMP-DimUBAgN.js +39 -0
  84. package/packages/web/dist/client/assets/quadrantDiagram-O4NWA36T-BR0XpRGQ.js +7 -0
  85. package/packages/web/dist/client/assets/radar-RG4KPBEZ-paA-H3mb.js +1 -0
  86. package/packages/web/dist/client/assets/railroad-74A4TZTK-yEiKB3rz.js +1 -0
  87. package/packages/web/dist/client/assets/railroad-abnf-HS5TGJTU-mVQx9aVM.js +1 -0
  88. package/packages/web/dist/client/assets/railroad-ebnf-LZEXJU2U-CllXx1OJ.js +1 -0
  89. package/packages/web/dist/client/assets/railroad-peg-WCYAUIDC-BBD2Q5W_.js +1 -0
  90. package/packages/web/dist/client/assets/railroadDiagram-XR7U4H2S--TXe6rdU.js +1 -0
  91. package/packages/web/dist/client/assets/requirementDiagram-PLB6GJNP-DyqH36Za.js +84 -0
  92. package/packages/web/dist/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
  93. package/packages/web/dist/client/assets/sankeyDiagram-IPEJSGJF-Bg6e3BlM.js +40 -0
  94. package/packages/web/dist/client/assets/sequenceDiagram-PO4LG4MO-ClGf85My.js +169 -0
  95. package/packages/web/dist/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  96. package/packages/web/dist/client/assets/src-DF7hQfMh.js +1 -0
  97. package/packages/web/dist/client/assets/stateDiagram-v2-GCMORJYK-BK8TpxNo.js +291 -0
  98. package/packages/web/dist/client/assets/swimlanes-2SLR337P-DDnTIT9M.js +1 -0
  99. package/packages/web/dist/client/assets/swimlanesDiagram-TC7HE7FX-CM8UnP5t.js +8 -0
  100. package/packages/web/dist/client/assets/timeline-definition-EJHVYXUP-mBBbH3bk.js +120 -0
  101. package/packages/web/dist/client/assets/treeView-Q6P3EWNA-CTK7tRwR.js +1 -0
  102. package/packages/web/dist/client/assets/treemap-WGGIJYW6-vOI-Ef_m.js +1 -0
  103. package/packages/web/dist/client/assets/usecaseDiagram-POWQR4AR-COcii8x-.js +328 -0
  104. package/packages/web/dist/client/assets/vennDiagram-UO4OBE2U-D6kmDGpM.js +34 -0
  105. package/packages/web/dist/client/assets/wardley-WFR3VGLG-CtE2KI9r.js +1 -0
  106. package/packages/web/dist/client/assets/wardleyDiagram-VNRHLVJA-ncxNGWnW.js +78 -0
  107. package/packages/web/dist/client/assets/xychartDiagram-PMCCYNJV-DUvd2Qze.js +7 -0
  108. package/packages/web/dist/client/index.html +2 -2
  109. package/packages/web/dist/client/assets/core-DKI-ZG3V.js +0 -3
  110. package/packages/web/dist/client/assets/index-BCSESkyh.css +0 -1
  111. package/packages/web/dist/client/assets/index-BWUZzdeu.js +0 -45
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pim-agent",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "A batteries-included distro of Pi, accessible in your terminal, browser and Telegram.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -66,6 +66,7 @@
66
66
  "@types/bun": "latest",
67
67
  "happy-dom": "^20.14.0",
68
68
  "highlight.js": "^11.12.0",
69
+ "mermaid": "^12.0.0",
69
70
  "oxfmt": "0.67.0",
70
71
  "oxlint": "^1.82.0",
71
72
  "solid-js": "^2.0.0-rc.7",
@@ -0,0 +1,128 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { totalmem } from "node:os";
3
+
4
+ export const MEMORY_LIMIT_VAR = "PIM_BASH_MEMORY_MAX";
5
+ const DEFAULT_SHARE_OF_RAM = 0.25;
6
+ const PROBE_LIMIT = 1024 ** 3;
7
+ const UNITS = { "": 1, K: 1024, M: 1024 ** 2, G: 1024 ** 3, T: 1024 ** 4 };
8
+
9
+ export type MemoryScope = {
10
+ readonly unit: string;
11
+ readonly limitBytes: number;
12
+ readonly argv: readonly string[];
13
+ };
14
+
15
+ let supported: Promise<boolean> | null = null;
16
+ let owner: Promise<string | null> | null = null;
17
+
18
+ function limitBytes(): number | null {
19
+ const raw = process.env[MEMORY_LIMIT_VAR]?.trim();
20
+ if (raw === undefined || raw === "") {
21
+ return Math.floor(totalmem() * DEFAULT_SHARE_OF_RAM);
22
+ }
23
+ if (/^(off|infinity|0)$/i.test(raw)) {
24
+ return null;
25
+ }
26
+ const match = /^(\d+(?:\.\d+)?)\s*([KMGT]?)i?B?$/i.exec(raw);
27
+ if (!match) {
28
+ throw new Error(
29
+ `${MEMORY_LIMIT_VAR}=${raw} is not a size: use e.g. 8G or 512M, or off to disable the limit.`
30
+ );
31
+ }
32
+ const unit = (match[2] ?? "").toUpperCase() as keyof typeof UNITS;
33
+ return Math.floor(Number(match[1]) * UNITS[unit]);
34
+ }
35
+
36
+ /** Whether a scope's MemoryMax is really enforced: without the memory controller delegated, systemd accepts it and ignores it. */
37
+ async function probe(): Promise<boolean> {
38
+ if (process.platform !== "linux") {
39
+ return false;
40
+ }
41
+ try {
42
+ const proc = Bun.spawn({
43
+ cmd: [
44
+ "systemd-run",
45
+ "--user",
46
+ "--scope",
47
+ "--quiet",
48
+ "--expand-environment=no",
49
+ `--property=MemoryMax=${PROBE_LIMIT}`,
50
+ "--",
51
+ "sh",
52
+ "-c",
53
+ 'read -r line < /proc/self/cgroup; cat "/sys/fs/cgroup${line#0::}/memory.max"',
54
+ ],
55
+ stdout: "pipe",
56
+ stderr: "ignore",
57
+ });
58
+ const [out, code] = await Promise.all([
59
+ new Response(proc.stdout).text(),
60
+ proc.exited,
61
+ ]);
62
+ return code === 0 && out.trim() === String(PROBE_LIMIT);
63
+ } catch {
64
+ return false;
65
+ }
66
+ }
67
+
68
+ /** The user-manager service this process runs in, so a command's scope stops with it. */
69
+ async function findOwner(): Promise<string | null> {
70
+ try {
71
+ const cgroup = await readFile("/proc/self/cgroup", "utf8");
72
+ const path = cgroup.trim().split("\n").at(-1)?.split("::")[1] ?? "";
73
+ const unit = path.split("/").at(-1) ?? "";
74
+ const underUserManager = path.includes("/user@");
75
+ return underUserManager &&
76
+ unit.endsWith(".service") &&
77
+ !unit.startsWith("user@")
78
+ ? unit
79
+ : null;
80
+ } catch {
81
+ return null;
82
+ }
83
+ }
84
+
85
+ /** The systemd-run prefix that puts one command in its own memory-capped scope, or null when it cannot be capped. */
86
+ async function scope(): Promise<MemoryScope | null> {
87
+ const limit = limitBytes();
88
+ if (limit === null || !(await (supported ??= probe()))) {
89
+ return null;
90
+ }
91
+ const bindTo = await (owner ??= findOwner());
92
+ const unit = `pim-bash-${crypto.randomUUID().slice(0, 8)}.scope`;
93
+ return {
94
+ unit,
95
+ limitBytes: limit,
96
+ argv: [
97
+ "systemd-run",
98
+ "--user",
99
+ "--scope",
100
+ "--quiet",
101
+ "--expand-environment=no",
102
+ "--collect",
103
+ `--unit=${unit}`,
104
+ `--property=MemoryMax=${limit}`,
105
+ "--property=MemorySwapMax=0",
106
+ "--property=OOMPolicy=kill",
107
+ ...(bindTo
108
+ ? [`--property=BindsTo=${bindTo}`, `--property=After=${bindTo}`]
109
+ : []),
110
+ "--",
111
+ ],
112
+ };
113
+ }
114
+
115
+ async function systemctl(args: readonly string[]): Promise<void> {
116
+ await Bun.spawn({
117
+ cmd: ["systemctl", "--user", ...args],
118
+ stdout: "ignore",
119
+ stderr: "ignore",
120
+ }).exited;
121
+ }
122
+
123
+ /** Ends whatever of a killed command is still in its scope, including a scope systemd never saw empty. */
124
+ async function stop(unit: string): Promise<void> {
125
+ await systemctl(["--no-block", "stop", unit]);
126
+ }
127
+
128
+ export const MemoryCap = { limitBytes, scope, stop };
@@ -37,6 +37,11 @@ export function formatResult(
37
37
  lines.push("Aborted.");
38
38
  } else if (result.timedOut) {
39
39
  lines.push(`Timed out after ${timeoutMs} ms.`);
40
+ } else if (result.memoryLimitHit !== null) {
41
+ lines.push(
42
+ `Killed: most likely it exceeded the ${Format.bytes(result.memoryLimitHit)} memory limit for one command. ` +
43
+ "Retrying it unchanged will fail the same way; reduce its memory use (stream or batch the data, run fewer parallel workers)."
44
+ );
40
45
  }
41
46
  for (const label of STREAMS) {
42
47
  const stream = result[label];
@@ -3,6 +3,7 @@ import { SpillCache } from "../../shared/SpillCache";
3
3
  import { StreamCapture } from "./capture";
4
4
  import { isErrorResult } from "./format";
5
5
  import { normaliseStdoutImage } from "./image";
6
+ import { MemoryCap } from "./MemoryCap";
6
7
  import {
7
8
  type BashCommandResult,
8
9
  type CapturedStream,
@@ -18,7 +19,8 @@ const COMMAND_VAR = "PIM_BASH_COMMAND";
18
19
  // argv is what `pkill -f`/`pgrep -f` match, so a command naming its own target would
19
20
  // signal this shell before its target. The env hands it over out of argv's reach, and
20
21
  // the unset keeps it out of every child's environment too.
21
- const RUNNER = `__pim_command=$${COMMAND_VAR}; unset ${COMMAND_VAR}; eval "$__pim_command"`;
22
+ // The raised oom_score_adj makes the command, not the agent or the desktop, the kernel's first victim.
23
+ const RUNNER = `{ echo 500 > /proc/self/oom_score_adj; } 2>/dev/null; __pim_command=$${COMMAND_VAR}; unset ${COMMAND_VAR}; eval "$__pim_command"`;
22
24
 
23
25
  export function killAllActiveBashGroups(sig: NodeJS.Signals = "SIGTERM"): void {
24
26
  for (const pid of activePids) {
@@ -100,10 +102,11 @@ export async function runBashCommand(
100
102
  const startedAt = Date.now();
101
103
  const stdoutCap = new StreamCapture();
102
104
  const stderrCap = new StreamCapture();
105
+ const scope = await MemoryCap.scope();
103
106
 
104
107
  // setsid gives the tree its own process group (pgid == proc.pid) so the whole tree can be signalled.
105
108
  const proc = Bun.spawn({
106
- cmd: ["setsid", "bash", "-lc", RUNNER],
109
+ cmd: [...(scope?.argv ?? []), "setsid", "bash", "-lc", RUNNER],
107
110
  cwd,
108
111
  stdout: "pipe",
109
112
  stderr: "pipe",
@@ -170,6 +173,9 @@ export async function runBashCommand(
170
173
  } finally {
171
174
  clearTimeout(sigkillTimer);
172
175
  }
176
+ if (scope) {
177
+ await MemoryCap.stop(scope.unit);
178
+ }
173
179
  }
174
180
 
175
181
  exitCode = proc.exitCode ?? null;
@@ -207,6 +213,12 @@ export async function runBashCommand(
207
213
  const stdout = stdoutCap.snapshot(sniffed !== null);
208
214
  const stderr = stderrCap.snapshot();
209
215
 
216
+ // Under OOMPolicy=kill a limit hit is a SIGKILL of the whole scope; systemd's own Result for it is racy.
217
+ const memoryLimitHit =
218
+ scope !== null && signalCode === "SIGKILL" && !timedOut && !aborted
219
+ ? scope.limitBytes
220
+ : null;
221
+
210
222
  const [stdoutPath, stderrPath, stdoutImage] = await Promise.all([
211
223
  spillIfTruncated(stdout, stdoutCap, "out"),
212
224
  spillIfTruncated(stderr, stderrCap, "err"),
@@ -222,6 +234,7 @@ export async function runBashCommand(
222
234
  stdoutImage,
223
235
  timedOut,
224
236
  aborted,
237
+ memoryLimitHit,
225
238
  durationMs: Date.now() - startedAt,
226
239
  };
227
240
  }
@@ -43,6 +43,8 @@ export type BashCommandResult = {
43
43
  readonly stdoutImage: NormalisedImage | null;
44
44
  readonly timedOut: boolean;
45
45
  readonly aborted: boolean;
46
+ /** The limit in bytes, set when the capped command was SIGKILLed without pim sending it. */
47
+ readonly memoryLimitHit: number | null;
46
48
  readonly durationMs: number;
47
49
  };
48
50
 
@@ -5,6 +5,7 @@ import type {
5
5
  import type { Surface } from "../../shared/Surface";
6
6
  import {
7
7
  buildEnvironment,
8
+ buildFormatting,
8
9
  buildInstructions,
9
10
  formatDatetime,
10
11
  leadWithSystemPrompt,
@@ -36,6 +37,7 @@ export default function (surface?: Surface): ExtensionFactory {
36
37
  model: ctx.model,
37
38
  surface,
38
39
  });
40
+ options.sections.formatting = buildFormatting(surface);
39
41
  });
40
42
  pi.on("context_with_system", (event) => {
41
43
  const messages = leadWithSystemPrompt(event.messages);
@@ -13,6 +13,13 @@ type EnvironmentOptions = {
13
13
  readonly surface?: Surface;
14
14
  };
15
15
 
16
+ const FORMATTING: Readonly<Record<Surface, string>> = {
17
+ "web browser":
18
+ "Replies render as Markdown, and ```mermaid fences render as diagrams. Prefer a diagram over ASCII art for flows, sequences, state machines and structure.",
19
+ terminal: "",
20
+ Telegram: "",
21
+ };
22
+
16
23
  type RunCommand = (cmd: ReadonlyArray<string>) => string | undefined;
17
24
 
18
25
  type OsDescriptionOptions = {
@@ -71,6 +78,11 @@ export function buildEnvironment(opts: EnvironmentOptions): string {
71
78
  ].join("\n");
72
79
  }
73
80
 
81
+ /** What the surface renders beyond plain text; empty, so pi omits the section, where that is nothing. */
82
+ export function buildFormatting(surface: Surface | undefined): string {
83
+ return surface === undefined ? "" : FORMATTING[surface];
84
+ }
85
+
74
86
  export function describeOs(options: OsDescriptionOptions = {}): string {
75
87
  if (options.platform === undefined && options.runCommand === undefined) {
76
88
  cachedOs ??= computeOs(options);
@@ -379,6 +379,7 @@ function systemdUnit(unit: Unit, at: Install): string {
379
379
  `ExecStart=${at.bunPath} ${at.pimEntry} ${modeArgs(unit).join(" ")}`,
380
380
  "Restart=always",
381
381
  "RestartSec=2",
382
+ "OOMPolicy=continue",
382
383
  "",
383
384
  "[Install]",
384
385
  "WantedBy=default.target",
@@ -0,0 +1 @@
1
+ import{m as e,t}from"./mermaid-parser.core-nQaTP3VY.js";import{n}from"./chunk-Y2CYZVJY-DsF7k-Jl.js";import{m as r}from"./src-DF7hQfMh.js";import"./chunk-O7XYJQB3-ZHvBmBO-.js";import{n as i,r as a,t as o}from"./chunk-GTNCS2PH-DG2b2LYE.js";import{t as s}from"./chunk-JWPE2WC7-DVXcaiue.js";import"./mermaid.core-Cz05yTZh.js";var c=e().RailroadAbnf.parser.LangiumParser,l=n(e=>{let t=e.alternatives.map(u);return t.length===1?t[0]:{type:`choice`,alternatives:t}},`transformAlternation`),u=n(e=>{let t=e.elements.map(f);return t.length===1?t[0]:{type:`sequence`,elements:t}},`transformConcatenation`),d=n(e=>{if(e.includes(`*`)){let[t,n]=e.split(`*`);return{min:t?parseInt(t,10):0,max:n?parseInt(n,10):1/0}}let t=parseInt(e,10);return{min:t,max:t}},`parseRepeat`),f=n(e=>{let t=p(e.primary);if(!e.repeat)return t;let{min:n,max:r}=d(e.repeat);return n===0&&r===1?{type:`optional`,element:t}:{type:`repetition`,element:t,min:n,max:r}},`transformElement`),p=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 l(e.element);case`AbnfOptionalGroup`:return{type:`optional`,element:l(e.element)};default:throw Error(`Unsupported ABNF primary node: ${e.$type}`)}},`transformPrimary`),m=n(e=>({name:e.name,definition:l(e.definition)}),`transformRule`),h=n(e=>{s(e,o),e.title&&o.setTitle(e.title),e.rules.map(e=>o.addRule(m(e)))},`populateDb`),g={parser:{parse:n(e=>{o.clear(),r.debug(`[ABNF Parser] Starting Langium parse`);let n=c.parse(e);if(n.lexerErrors.length>0||n.parserErrors.length>0)throw new t(n);let i=n.value;r.debug(`[ABNF Parser] Parsed rules:`,i.rules.length),h(i),r.debug(`[ABNF Parser] Parse complete`)},`parse`),parser:{yy:o}},db:o,renderer:a,styles:i};export{g as diagram};
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./path-fybaL0A-.js";import{a as n,c as r,d as i,f as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,u as p}from"./dist-BddGOpie.js";function m(e){return e.innerRadius}function h(e){return e.outerRadius}function g(e){return e.startAngle}function _(e){return e.endAngle}function v(e){return e&&e.padAngle}function y(e,t,n,r,i,a,o,s){var c=n-e,l=r-t,u=o-i,d=s-a,f=d*c-u*l;if(!(f*f<1e-12))return f=(u*(t-a)-d*(e-i))/f,[e+f*c,t+f*l]}function b(e,t,n,r,i,a,o){var c=e-n,l=t-r,u=(o?a:-a)/d(c*c+l*l),f=u*l,p=-u*c,m=e+f,h=t+p,g=n+f,_=r+p,v=(m+g)/2,y=(h+_)/2,b=g-m,x=_-h,S=b*b+x*x,C=i-a,w=m*_-g*h,T=(x<0?-1:1)*d(s(0,C*C*S-w*w)),E=(w*x-b*T)/S,D=(-w*b-x*T)/S,O=(w*x+b*T)/S,k=(-w*b+x*T)/S,A=E-v,j=D-y,M=O-v,N=k-y;return A*A+j*j>M*M+N*N&&(E=O,D=k),{cx:E,cy:D,x01:-f,y01:-p,x11:E*(i/C-1),y11:D*(i/C-1)}}function x(){var s=m,x=h,S=e(0),C=null,w=g,T=_,E=v,D=null,O=t(k);function k(){var e,t,m=+s.apply(this,arguments),h=+x.apply(this,arguments),g=w.apply(this,arguments)-r,_=T.apply(this,arguments)-r,v=l(_-g),k=_>g;if(D||=e=O(),h<m&&(t=h,h=m,m=t),!(h>1e-12))D.moveTo(0,0);else if(v>c-1e-12)D.moveTo(h*u(g),h*a(g)),D.arc(0,0,h,g,_,!k),m>1e-12&&(D.moveTo(m*u(_),m*a(_)),D.arc(0,0,m,_,g,k));else{var A=g,j=_,M=g,N=_,P=v,F=v,I=E.apply(this,arguments)/2,L=I>1e-12&&(C?+C.apply(this,arguments):d(m*m+h*h)),R=p(l(h-m)/2,+S.apply(this,arguments)),z=R,B=R,V,H;if(L>1e-12){var U=o(L/m*a(I)),W=o(L/h*a(I));(P-=U*2)>1e-12?(U*=k?1:-1,M+=U,N-=U):(P=0,M=N=(g+_)/2),(F-=W*2)>1e-12?(W*=k?1:-1,A+=W,j-=W):(F=0,A=j=(g+_)/2)}var G=h*u(A),K=h*a(A),q=m*u(N),J=m*a(N);if(R>1e-12){var Y=h*u(j),X=h*a(j),Z=m*u(M),Q=m*a(M),$;if(v<i){if($=y(G,K,Z,Q,Y,X,q,J)){var ee=G-$[0],te=K-$[1],ne=Y-$[0],re=X-$[1],ie=1/a(f((ee*ne+te*re)/(d(ee*ee+te*te)*d(ne*ne+re*re)))/2),ae=d($[0]*$[0]+$[1]*$[1]);z=p(R,(m-ae)/(ie-1)),B=p(R,(h-ae)/(ie+1))}else z=B=0}}F>1e-12?B>1e-12?(V=b(Z,Q,G,K,h,B,k),H=b(Y,X,q,J,h,B,k),D.moveTo(V.cx+V.x01,V.cy+V.y01),B<R?D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,B,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,h,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),!k),D.arc(H.cx,H.cy,B,n(H.y11,H.x11),n(H.y01,H.x01),!k))):(D.moveTo(G,K),D.arc(0,0,h,A,j,!k)):D.moveTo(G,K),!(m>1e-12)||!(P>1e-12)?D.lineTo(q,J):z>1e-12?(V=b(q,J,Y,X,m,-z,k),H=b(G,K,Z,Q,m,-z,k),D.lineTo(V.cx+V.x01,V.cy+V.y01),z<R?D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(H.y01,H.x01),!k):(D.arc(V.cx,V.cy,z,n(V.y01,V.x01),n(V.y11,V.x11),!k),D.arc(0,0,m,n(V.cy+V.y11,V.cx+V.x11),n(H.cy+H.y11,H.cx+H.x11),k),D.arc(H.cx,H.cy,z,n(H.y11,H.x11),n(H.y01,H.x01),!k))):D.arc(0,0,m,N,M,k)}if(D.closePath(),e)return D=null,e+``||null}return k.centroid=function(){var e=(+s.apply(this,arguments)+ +x.apply(this,arguments))/2,t=(+w.apply(this,arguments)+ +T.apply(this,arguments))/2-i/2;return[u(t)*e,a(t)*e]},k.innerRadius=function(t){return arguments.length?(s=typeof t==`function`?t:e(+t),k):s},k.outerRadius=function(t){return arguments.length?(x=typeof t==`function`?t:e(+t),k):x},k.cornerRadius=function(t){return arguments.length?(S=typeof t==`function`?t:e(+t),k):S},k.padRadius=function(t){return arguments.length?(C=t==null?null:typeof t==`function`?t:e(+t),k):C},k.startAngle=function(t){return arguments.length?(w=typeof t==`function`?t:e(+t),k):w},k.endAngle=function(t){return arguments.length?(T=typeof t==`function`?t:e(+t),k):T},k.padAngle=function(t){return arguments.length?(E=typeof t==`function`?t:e(+t),k):E},k.context=function(e){return arguments.length?(D=e??null,k):D},k}export{x as t};
@@ -0,0 +1 @@
1
+ import"./chunk-FOHPRMQF-CoA4358r.js";import{M as e}from"./mermaid-parser.core-nQaTP3VY.js";export{e as createArchitectureServices};