@tuongaz/seeflow 0.1.83 → 0.1.85

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 (73) hide show
  1. package/dist/web/assets/{architectureDiagram-3BPJPVTR-CHtgIZZ1.js → architectureDiagram-3BPJPVTR-BxjUpYZP.js} +1 -1
  2. package/dist/web/assets/{blockDiagram-GPEHLZMM-D4zjpGBX.js → blockDiagram-GPEHLZMM-BwW58gmi.js} +1 -1
  3. package/dist/web/assets/{c4Diagram-AAUBKEIU-zSpjD7ZC.js → c4Diagram-AAUBKEIU-Dzt08ghL.js} +1 -1
  4. package/dist/web/assets/channel-H6DSsj4q.js +1 -0
  5. package/dist/web/assets/{chart-D6WVIyqJ.js → chart-DpfirWPs.js} +1 -1
  6. package/dist/web/assets/{chunk-2J33WTMH-Cr7utMp9.js → chunk-2J33WTMH-Bxngez4X.js} +1 -1
  7. package/dist/web/assets/{chunk-4BX2VUAB-B6PCB6H4.js → chunk-4BX2VUAB-BOogOMBc.js} +1 -1
  8. package/dist/web/assets/{chunk-55IACEB6-D_PUAOtb.js → chunk-55IACEB6-P8EKMZOA.js} +1 -1
  9. package/dist/web/assets/{chunk-727SXJPM-DTQLQ_nx.js → chunk-727SXJPM-D2YRvYNf.js} +1 -1
  10. package/dist/web/assets/{chunk-AQP2D5EJ-OBgrFsDS.js → chunk-AQP2D5EJ-DE2NipXE.js} +1 -1
  11. package/dist/web/assets/{chunk-FMBD7UC4-Cqo28fuY.js → chunk-FMBD7UC4-DDhJtfWk.js} +1 -1
  12. package/dist/web/assets/{chunk-ND2GUHAM-DcquCeO4.js → chunk-ND2GUHAM-D3XJtrli.js} +1 -1
  13. package/dist/web/assets/{chunk-QZHKN3VN-SKsRSBcC.js → chunk-QZHKN3VN-BdMZCj9e.js} +1 -1
  14. package/dist/web/assets/classDiagram-4FO5ZUOK-BAWJcCIq.js +1 -0
  15. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-BAWJcCIq.js +1 -0
  16. package/dist/web/assets/{code-block-CQcwHam8.js → code-block-sw_8m1aF.js} +1 -1
  17. package/dist/web/assets/{cose-bilkent-S5V4N54A-Ds8DGArP.js → cose-bilkent-S5V4N54A-aEoPvgjp.js} +1 -1
  18. package/dist/web/assets/{dagre-BM42HDAG-CqMyTq3c.js → dagre-BM42HDAG-p9EyJsU9.js} +1 -1
  19. package/dist/web/assets/{diagram-2AECGRRQ-CWEIApTd.js → diagram-2AECGRRQ-D5JkQMH9.js} +1 -1
  20. package/dist/web/assets/{diagram-5GNKFQAL-8TEzgir4.js → diagram-5GNKFQAL-N-K8VEKH.js} +1 -1
  21. package/dist/web/assets/{diagram-KO2AKTUF-UNKtOw9m.js → diagram-KO2AKTUF-YYXTKlRp.js} +1 -1
  22. package/dist/web/assets/{diagram-LMA3HP47-D6QoRbi6.js → diagram-LMA3HP47-DB6IV5pI.js} +1 -1
  23. package/dist/web/assets/{diagram-OG6HWLK6-CQqkl0nk.js → diagram-OG6HWLK6-CYpsa5S_.js} +1 -1
  24. package/dist/web/assets/{erDiagram-TEJ5UH35-Clv5A-5B.js → erDiagram-TEJ5UH35-DG_ieSJb.js} +1 -1
  25. package/dist/web/assets/{flowDiagram-I6XJVG4X-4hg7rn9v.js → flowDiagram-I6XJVG4X-DhkYdddf.js} +1 -1
  26. package/dist/web/assets/{ganttDiagram-6RSMTGT7-3PAgpAEA.js → ganttDiagram-6RSMTGT7-Dch6LnJg.js} +1 -1
  27. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-D5g_5z1o.js → gitGraphDiagram-PVQCEYII-BEdh0-R-.js} +1 -1
  28. package/dist/web/assets/index-2wkTDsTh.js +8619 -0
  29. package/dist/web/assets/{index-fl8DS9WO.css → index-DzEkjMbu.css} +1 -1
  30. package/dist/web/assets/{index.es-Cgv8Vcjx.js → index.es-BPbregt5.js} +1 -1
  31. package/dist/web/assets/{infoDiagram-5YYISTIA-BuFXAl4D.js → infoDiagram-5YYISTIA-Bg5TB2bn.js} +1 -1
  32. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-DOE-GUy-.js → ishikawaDiagram-YF4QCWOH-C9wgnFPt.js} +1 -1
  33. package/dist/web/assets/{journeyDiagram-JHISSGLW-B5BXjJgy.js → journeyDiagram-JHISSGLW-DXoECOxR.js} +1 -1
  34. package/dist/web/assets/{jspdf.es.min-_GQ7N2xd.js → jspdf.es.min-D0_5WkpV.js} +3 -3
  35. package/dist/web/assets/{kanban-definition-UN3LZRKU-DTLQ2kuG.js → kanban-definition-UN3LZRKU-Cul7RbDt.js} +1 -1
  36. package/dist/web/assets/{linear-DCKgJuDe.js → linear-CZ3VwjbT.js} +1 -1
  37. package/dist/web/assets/{markdown-DQ9_ZAvJ.js → markdown-EWVEPYpm.js} +1 -1
  38. package/dist/web/assets/{mermaid.core-Cf2CUPpR.js → mermaid.core-Ceyl9DjX.js} +4 -4
  39. package/dist/web/assets/{mindmap-definition-RKZ34NQL-CI-_BCCZ.js → mindmap-definition-RKZ34NQL-DCBC1TsK.js} +1 -1
  40. package/dist/web/assets/{pieDiagram-4H26LBE5-BdTv4DaU.js → pieDiagram-4H26LBE5-CqccSO7S.js} +1 -1
  41. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-pqQ7pKT1.js → quadrantDiagram-W4KKPZXB-e7-sWjUK.js} +1 -1
  42. package/dist/web/assets/{requirementDiagram-4Y6WPE33-CCP9fYhL.js → requirementDiagram-4Y6WPE33-BBwVJS4I.js} +1 -1
  43. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-CpMAd0Mj.js → sankeyDiagram-5OEKKPKP-BCNgzA-3.js} +1 -1
  44. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-BWg19eGL.js → sequenceDiagram-3UESZ5HK-BjjeSbs9.js} +1 -1
  45. package/dist/web/assets/{stateDiagram-AJRCARHV-BliITsKN.js → stateDiagram-AJRCARHV-tl6fq8NN.js} +1 -1
  46. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-7VEgV0SV.js +1 -0
  47. package/dist/web/assets/{time-Dqs-aHL0.js → time-BQz-ZWra.js} +1 -1
  48. package/dist/web/assets/{timeline-definition-PNZ67QCA-Bk8P84Jg.js → timeline-definition-PNZ67QCA-Cc_C7lIC.js} +1 -1
  49. package/dist/web/assets/{vennDiagram-CIIHVFJN-CMtXVM_H.js → vennDiagram-CIIHVFJN-BwgTN2w7.js} +1 -1
  50. package/dist/web/assets/{wardley-L42UT6IY-CHP-BfXr.js → wardley-L42UT6IY-CxmFlIp3.js} +1 -1
  51. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-DInIu6_2.js → wardleyDiagram-YWT4CUSO-DMEdETxd.js} +1 -1
  52. package/dist/web/assets/{xychartDiagram-2RQKCTM6-B0gobaUy.js → xychartDiagram-2RQKCTM6-B2xg8rTK.js} +1 -1
  53. package/dist/web/index.html +2 -2
  54. package/package.json +1 -1
  55. package/src/api.ts +7 -112
  56. package/src/cli-helpers.ts +3 -0
  57. package/src/cli-manifest.ts +61 -15
  58. package/src/cli-ops.ts +2 -2
  59. package/src/cli.ts +75 -5
  60. package/src/events.ts +0 -1
  61. package/src/mcp.ts +2 -2
  62. package/src/merge.ts +0 -3
  63. package/src/operations.ts +77 -4
  64. package/src/project-scanner.ts +18 -0
  65. package/src/proxy.ts +1 -193
  66. package/src/schema-catalog.ts +1 -3
  67. package/src/schema.ts +0 -10
  68. package/src/server.ts +1 -2
  69. package/dist/web/assets/channel-CXa0j4Re.js +0 -1
  70. package/dist/web/assets/classDiagram-4FO5ZUOK-DGPggFxp.js +0 -1
  71. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-DGPggFxp.js +0 -1
  72. package/dist/web/assets/index-CaE1zYAX.js +0 -8619
  73. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-BCerI8Jf.js +0 -1
package/src/proxy.ts CHANGED
@@ -16,7 +16,7 @@ import { realpathSync } from 'node:fs';
16
16
  import { join, resolve, sep } from 'node:path';
17
17
  import type { EventBus } from './events.ts';
18
18
  import { type ProcessSpawner, type SpawnHandle, defaultProcessSpawner } from './process-spawner.ts';
19
- import type { PlayAction, ResetAction } from './schema.ts';
19
+ import type { PlayAction } from './schema.ts';
20
20
  import { shortId } from './short-id.ts';
21
21
 
22
22
  export interface PlayResult {
@@ -73,31 +73,6 @@ function resolveScript(cwd: string, nodeId: string, scriptPath: string): Resolve
73
73
  return { ok: true, absPath: realTarget };
74
74
  }
75
75
 
76
- // Legacy anchor for resetAction (kept until resetAction gets its own design
77
- // round). Same realpath escape check as resolveScript, but rooted at the
78
- // project root rather than a per-node folder.
79
- function resolveResetScript(cwd: string, scriptPath: string): Resolved {
80
- const projectRoot = cwd;
81
- let realRoot: string;
82
- try {
83
- realRoot = realpathSync(projectRoot);
84
- } catch {
85
- return { ok: false };
86
- }
87
- const target = resolve(projectRoot, scriptPath);
88
- let realTarget: string;
89
- try {
90
- realTarget = realpathSync(target);
91
- } catch {
92
- return { ok: false };
93
- }
94
- const rootWithSep = realRoot.endsWith(sep) ? realRoot : realRoot + sep;
95
- if (realTarget !== realRoot && !realTarget.startsWith(rootWithSep)) {
96
- return { ok: false };
97
- }
98
- return { ok: true, absPath: realTarget };
99
- }
100
-
101
76
  // Copy `process.env` into a string-only record, then layer the per-run extras.
102
77
  // Bun.spawn's env contract is `Record<string, string>` so the undefineds that
103
78
  // `process.env` advertises in its type must be filtered out first.
@@ -130,54 +105,6 @@ async function writeStdinPayload(handle: SpawnHandle, input: unknown): Promise<v
130
105
  }
131
106
  }
132
107
 
133
- // Live play-script handles indexed by flowId. Populated by runPlay() on spawn;
134
- // entries are removed when each handle's `exited` promise resolves (success
135
- // AND error paths). `stopAllPlays(flowId)` consults this map to terminate
136
- // every in-flight play for a demo on /reset.
137
- const livePlayHandles = new Map<string, Set<SpawnHandle>>();
138
-
139
- function registerLiveHandle(flowId: string, handle: SpawnHandle): void {
140
- let set = livePlayHandles.get(flowId);
141
- if (!set) {
142
- set = new Set();
143
- livePlayHandles.set(flowId, set);
144
- }
145
- set.add(handle);
146
- handle.exited.finally(() => {
147
- const current = livePlayHandles.get(flowId);
148
- if (!current) return;
149
- current.delete(handle);
150
- if (current.size === 0) livePlayHandles.delete(flowId);
151
- });
152
- }
153
-
154
- async function killWithGrace(handle: SpawnHandle): Promise<void> {
155
- handle.kill('SIGTERM');
156
- let graceTimer: ReturnType<typeof setTimeout> | undefined;
157
- const gracePromise = new Promise<'grace'>((res) => {
158
- graceTimer = setTimeout(() => res('grace'), SIGKILL_GRACE_MS);
159
- });
160
- const winner = await Promise.race([handle.exited.then(() => 'exited' as const), gracePromise]);
161
- if (graceTimer) clearTimeout(graceTimer);
162
- if (winner === 'grace') {
163
- handle.kill('SIGKILL');
164
- await handle.exited;
165
- }
166
- }
167
-
168
- // Kill every live play-script for `flowId` (SIGTERM → 2s grace → SIGKILL in
169
- // parallel) and wait for each to exit. Idempotent on an unknown flowId. The
170
- // map is keyed by flowId so a stop on demo A never touches demo B.
171
- export async function stopAllPlays(flowId: string): Promise<void> {
172
- const set = livePlayHandles.get(flowId);
173
- if (!set || set.size === 0) return;
174
- const handles = [...set];
175
- // Clear eagerly so a parallel runPlay can't double-count an entry we're
176
- // about to await on. The exited.finally() will no-op the second delete.
177
- livePlayHandles.delete(flowId);
178
- await Promise.all(handles.map((h) => killWithGrace(h)));
179
- }
180
-
181
108
  export async function runPlay(options: RunPlayOptions): Promise<PlayResult> {
182
109
  const { events, flowId, nodeId, cwd, action } = options;
183
110
  const spawner = options.spawner ?? defaultProcessSpawner;
@@ -229,8 +156,6 @@ export async function runPlay(options: RunPlayOptions): Promise<PlayResult> {
229
156
  return { runId, error: message };
230
157
  }
231
158
 
232
- registerLiveHandle(flowId, handle);
233
-
234
159
  // Drain stdout AND stderr CONCURRENTLY with the process running so OS pipe
235
160
  // buffers (~64 KB) don't fill up and deadlock the child.
236
161
  const stdoutPromise = new Response(handle.stdout).text();
@@ -303,120 +228,3 @@ export async function runPlay(options: RunPlayOptions): Promise<PlayResult> {
303
228
  });
304
229
  return { runId, error: message };
305
230
  }
306
-
307
- export interface RunResetOptions {
308
- events: EventBus;
309
- flowId: string;
310
- /** Project root (`<repoPath>`). Script resolves under `<cwd>/`. */
311
- cwd: string;
312
- action: ResetAction;
313
- /** Injectable for tests; defaults to `defaultProcessSpawner`. */
314
- spawner?: ProcessSpawner;
315
- }
316
-
317
- export interface ResetResult {
318
- ok: boolean;
319
- body?: unknown;
320
- error?: string;
321
- }
322
-
323
- // Run the demo's one-shot `resetAction` script. Same spawn discipline as
324
- // runPlay (realpath-guarded scriptPath, concurrent stdout/stderr drain,
325
- // optional stdin payload, SIGTERM→2s→SIGKILL escalation on timeout) but the
326
- // lifecycle SSE event is the single `demo:reset` broadcast that mirrors the
327
- // returned shape. Callers (the /reset endpoint) decide what HTTP status to
328
- // surface; this returns `{ ok }` plus body/error so the endpoint can map.
329
- export async function runReset(options: RunResetOptions): Promise<ResetResult> {
330
- const { events, flowId, cwd, action } = options;
331
- const spawner = options.spawner ?? defaultProcessSpawner;
332
-
333
- // resetAction is anchored at the project root — design defers per-node
334
- // resetAction to a later round (decision #7).
335
- const resolved = resolveResetScript(cwd, action.scriptPath);
336
- if (!resolved.ok) {
337
- events.broadcast({
338
- type: 'demo:reset',
339
- flowId,
340
- payload: { ok: false, error: SCRIPT_PATH_ESCAPE },
341
- });
342
- return { ok: false, error: SCRIPT_PATH_ESCAPE };
343
- }
344
-
345
- const wantsStdin = action.input !== undefined;
346
- const env = buildChildEnv({ SEEFLOW_DEMO_ID: flowId });
347
-
348
- let handle: SpawnHandle;
349
- try {
350
- handle = spawner.spawn({
351
- cmd: [action.interpreter, ...(action.args ?? []), resolved.absPath],
352
- cwd,
353
- env,
354
- stdin: wantsStdin ? 'pipe' : 'ignore',
355
- });
356
- } catch (err) {
357
- const message = err instanceof Error ? err.message : String(err);
358
- events.broadcast({
359
- type: 'demo:reset',
360
- flowId,
361
- payload: { ok: false, error: message },
362
- });
363
- return { ok: false, error: message };
364
- }
365
-
366
- const stdoutPromise = new Response(handle.stdout).text();
367
- const stderrPromise = new Response(handle.stderr).text();
368
-
369
- if (wantsStdin) {
370
- await writeStdinPayload(handle, action.input);
371
- }
372
-
373
- const timeoutMs = action.timeoutMs ?? DEFAULT_TIMEOUT_MS;
374
- let timer: ReturnType<typeof setTimeout> | undefined;
375
- const timeoutPromise = new Promise<'timeout'>((res) => {
376
- timer = setTimeout(() => res('timeout'), timeoutMs);
377
- });
378
- const exitPromise = handle.exited.then((code) => ({ code }) as const);
379
-
380
- const race = await Promise.race([exitPromise, timeoutPromise]);
381
- if (timer) clearTimeout(timer);
382
-
383
- if (race === 'timeout') {
384
- await killWithGrace(handle);
385
- await Promise.allSettled([stdoutPromise, stderrPromise]);
386
- const message = `reset script timed out after ${timeoutMs}ms`;
387
- events.broadcast({
388
- type: 'demo:reset',
389
- flowId,
390
- payload: { ok: false, error: message },
391
- });
392
- return { ok: false, error: message };
393
- }
394
-
395
- const code = race.code;
396
- const [stdout, stderr] = await Promise.all([stdoutPromise, stderrPromise]);
397
-
398
- if (code === 0) {
399
- let body: unknown;
400
- try {
401
- body = JSON.parse(stdout);
402
- } catch {
403
- body = stdout;
404
- }
405
- events.broadcast({
406
- type: 'demo:reset',
407
- flowId,
408
- payload: { ok: true, body },
409
- });
410
- return { ok: true, body };
411
- }
412
-
413
- const lastLine = lastNonEmptyLine(stderr);
414
- const truncated = lastLine.slice(0, STDERR_TRUNCATE);
415
- const message = truncated.length > 0 ? truncated : `reset script exited with code ${code}`;
416
- events.broadcast({
417
- type: 'demo:reset',
418
- flowId,
419
- payload: { ok: false, error: message },
420
- });
421
- return { ok: false, error: message };
422
- }
@@ -27,7 +27,6 @@ import {
27
27
  FlowTextNodeSchema,
28
28
  FlowUserNodeSchema,
29
29
  PlayActionSchema,
30
- ResetActionSchema,
31
30
  StatusActionSchema,
32
31
  StatusReportSchema,
33
32
  StyleSchema,
@@ -63,7 +62,7 @@ const CATEGORIES: SchemaCategory[] = [
63
62
  {
64
63
  name: 'action',
65
64
  description:
66
- 'playAction, statusAction, resetAction, statusReport, plus componentAction (the set | script discriminated union dispatched on component-node action handles).',
65
+ 'playAction, statusAction, statusReport, plus componentAction (the set | script discriminated union dispatched on component-node action handles).',
67
66
  },
68
67
  {
69
68
  name: 'componentSpec',
@@ -112,7 +111,6 @@ const PAYLOADS: Record<string, SchemaPayload> = {
112
111
  schemas: {
113
112
  playAction: toJsonSchema(PlayActionSchema),
114
113
  statusAction: toJsonSchema(StatusActionSchema),
115
- resetAction: toJsonSchema(ResetActionSchema),
116
114
  statusReport: toJsonSchema(StatusReportSchema),
117
115
  componentAction: toJsonSchema(ComponentActionSchema),
118
116
  },
package/src/schema.ts CHANGED
@@ -115,9 +115,6 @@ export const ScriptActionSchema = z.object({
115
115
 
116
116
  export const PlayActionSchema = ScriptActionSchema;
117
117
 
118
- // resetAction is a one-shot script with the same shape as a play script.
119
- export const ResetActionSchema = ScriptActionSchema;
120
-
121
118
  // Long-running status script. Same spawn shape as ScriptAction (interpreter +
122
119
  // args + scriptPath) but no stdin payload and a much longer max lifetime since
123
120
  // these processes tick continuously and stream StatusReports to stdout.
@@ -395,10 +392,6 @@ export const ResolvedFlowSchema = z
395
392
  description: z.string().optional(),
396
393
  nodes: z.array(NodeSchema),
397
394
  connectors: z.array(ConnectorSchema),
398
- // Optional one-shot script the studio runs when the user clicks Restart.
399
- // The studio kills every live play + status script for the flow BEFORE
400
- // invoking this script, so the script sees no stragglers.
401
- resetAction: ResetActionSchema.optional(),
402
395
  })
403
396
  .superRefine((resolved, ctx) => {
404
397
  const nodeIds = new Set(resolved.nodes.map((n) => n.id));
@@ -476,7 +469,6 @@ export type EdgePinSide = z.infer<typeof EdgePinSideSchema>;
476
469
  export type PlayAction = z.infer<typeof PlayActionSchema>;
477
470
  export type StatusAction = z.infer<typeof StatusActionSchema>;
478
471
  export type StatusReport = z.infer<typeof StatusReportSchema>;
479
- export type ResetAction = z.infer<typeof ResetActionSchema>;
480
472
  export type StateSource = z.infer<typeof StateSourceSchema>;
481
473
 
482
474
  // =============================================================================
@@ -648,7 +640,6 @@ export const FlowSchema = z
648
640
  version: z.literal(2),
649
641
  name: z.string().min(1),
650
642
  description: z.string().optional(),
651
- resetAction: ResetActionSchema.optional(),
652
643
  nodes: z.array(FlowNodeSchema),
653
644
  connectors: z.array(FlowConnectorSchema),
654
645
  })
@@ -687,7 +678,6 @@ export const FlowEnvelopeSchema = z
687
678
  version: z.literal(2),
688
679
  name: z.string().min(1),
689
680
  description: z.string().optional(),
690
- resetAction: ResetActionSchema.optional(),
691
681
  nodes: z.array(z.unknown().describe('See `seeflow schema node`')),
692
682
  connectors: z.array(z.unknown().describe('See `seeflow schema connector`')),
693
683
  })
package/src/server.ts CHANGED
@@ -52,8 +52,7 @@ export interface CreateAppOptions {
52
52
  * proxy.ts pick `defaultProcessSpawner`. Tests use this to drive runPlay
53
53
  * with an in-memory fake spawner. */
54
54
  processSpawner?: ProcessSpawner;
55
- /** Inject a ProxyFacade — tests use this to short-circuit runPlay /
56
- * runReset / stopAllPlays and assert call order. */
55
+ /** Inject a ProxyFacade — tests use this to short-circuit runPlay. */
57
56
  proxy?: ProxyFacade;
58
57
  /** Per-process token gating `Origin: null` requests (sandboxed MCP App
59
58
  * iframe). Generated at studio boot; delivered to the iframe via
@@ -1 +0,0 @@
1
- import{U as a,C as n}from"./mermaid.core-Cf2CUPpR.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as e,C as t}from"./chunk-727SXJPM-DTQLQ_nx.js";import{a as i}from"./mermaid.core-Cf2CUPpR.js";import"./index-CaE1zYAX.js";import"./chunk-FMBD7UC4-Cqo28fuY.js";import"./chunk-ND2GUHAM-DcquCeO4.js";import"./chunk-55IACEB6-D_PUAOtb.js";import"./chunk-2J33WTMH-Cr7utMp9.js";import"./purify.es-CLGrRn1w.js";import"./step-CWvwoXpJ.js";var b={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as e,C as t}from"./chunk-727SXJPM-DTQLQ_nx.js";import{a as i}from"./mermaid.core-Cf2CUPpR.js";import"./index-CaE1zYAX.js";import"./chunk-FMBD7UC4-Cqo28fuY.js";import"./chunk-ND2GUHAM-DcquCeO4.js";import"./chunk-55IACEB6-D_PUAOtb.js";import"./chunk-2J33WTMH-Cr7utMp9.js";import"./purify.es-CLGrRn1w.js";import"./step-CWvwoXpJ.js";var b={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram};