dot-agents 0.1.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/LICENSE +21 -0
  2. package/README.md +238 -0
  3. package/dist/cli/commands/daemon.d.ts +3 -0
  4. package/dist/cli/commands/daemon.d.ts.map +1 -0
  5. package/dist/cli/commands/daemon.js +179 -0
  6. package/dist/cli/commands/daemon.js.map +1 -0
  7. package/dist/cli/commands/index.d.ts +6 -0
  8. package/dist/cli/commands/index.d.ts.map +1 -0
  9. package/dist/cli/commands/index.js +6 -0
  10. package/dist/cli/commands/index.js.map +1 -0
  11. package/dist/cli/commands/list.d.ts +3 -0
  12. package/dist/cli/commands/list.d.ts.map +1 -0
  13. package/dist/cli/commands/list.js +100 -0
  14. package/dist/cli/commands/list.js.map +1 -0
  15. package/dist/cli/commands/run.d.ts +3 -0
  16. package/dist/cli/commands/run.d.ts.map +1 -0
  17. package/dist/cli/commands/run.js +107 -0
  18. package/dist/cli/commands/run.js.map +1 -0
  19. package/dist/cli/commands/schedule.d.ts +3 -0
  20. package/dist/cli/commands/schedule.d.ts.map +1 -0
  21. package/dist/cli/commands/schedule.js +172 -0
  22. package/dist/cli/commands/schedule.js.map +1 -0
  23. package/dist/cli/commands/show.d.ts +3 -0
  24. package/dist/cli/commands/show.d.ts.map +1 -0
  25. package/dist/cli/commands/show.js +122 -0
  26. package/dist/cli/commands/show.js.map +1 -0
  27. package/dist/cli/index.d.ts +3 -0
  28. package/dist/cli/index.d.ts.map +1 -0
  29. package/dist/cli/index.js +38 -0
  30. package/dist/cli/index.js.map +1 -0
  31. package/dist/cli/lib/index.d.ts +2 -0
  32. package/dist/cli/lib/index.d.ts.map +1 -0
  33. package/dist/cli/lib/index.js +2 -0
  34. package/dist/cli/lib/index.js.map +1 -0
  35. package/dist/cli/lib/runner.d.ts +41 -0
  36. package/dist/cli/lib/runner.d.ts.map +1 -0
  37. package/dist/cli/lib/runner.js +179 -0
  38. package/dist/cli/lib/runner.js.map +1 -0
  39. package/dist/daemon/api/index.d.ts +2 -0
  40. package/dist/daemon/api/index.d.ts.map +1 -0
  41. package/dist/daemon/api/index.js +2 -0
  42. package/dist/daemon/api/index.js.map +1 -0
  43. package/dist/daemon/api/server.d.ts +12 -0
  44. package/dist/daemon/api/server.d.ts.map +1 -0
  45. package/dist/daemon/api/server.js +111 -0
  46. package/dist/daemon/api/server.js.map +1 -0
  47. package/dist/daemon/daemon.d.ts +95 -0
  48. package/dist/daemon/daemon.d.ts.map +1 -0
  49. package/dist/daemon/daemon.js +265 -0
  50. package/dist/daemon/daemon.js.map +1 -0
  51. package/dist/daemon/index.d.ts +4 -0
  52. package/dist/daemon/index.d.ts.map +1 -0
  53. package/dist/daemon/index.js +4 -0
  54. package/dist/daemon/index.js.map +1 -0
  55. package/dist/daemon/lib/executor.d.ts +17 -0
  56. package/dist/daemon/lib/executor.d.ts.map +1 -0
  57. package/dist/daemon/lib/executor.js +169 -0
  58. package/dist/daemon/lib/executor.js.map +1 -0
  59. package/dist/daemon/lib/index.d.ts +4 -0
  60. package/dist/daemon/lib/index.d.ts.map +1 -0
  61. package/dist/daemon/lib/index.js +4 -0
  62. package/dist/daemon/lib/index.js.map +1 -0
  63. package/dist/daemon/lib/scheduler.d.ts +90 -0
  64. package/dist/daemon/lib/scheduler.d.ts.map +1 -0
  65. package/dist/daemon/lib/scheduler.js +176 -0
  66. package/dist/daemon/lib/scheduler.js.map +1 -0
  67. package/dist/daemon/lib/watcher.d.ts +48 -0
  68. package/dist/daemon/lib/watcher.d.ts.map +1 -0
  69. package/dist/daemon/lib/watcher.js +77 -0
  70. package/dist/daemon/lib/watcher.js.map +1 -0
  71. package/dist/lib/config.d.ts +14 -0
  72. package/dist/lib/config.d.ts.map +1 -0
  73. package/dist/lib/config.js +76 -0
  74. package/dist/lib/config.js.map +1 -0
  75. package/dist/lib/frontmatter.d.ts +18 -0
  76. package/dist/lib/frontmatter.d.ts.map +1 -0
  77. package/dist/lib/frontmatter.js +26 -0
  78. package/dist/lib/frontmatter.js.map +1 -0
  79. package/dist/lib/index.d.ts +7 -0
  80. package/dist/lib/index.d.ts.map +1 -0
  81. package/dist/lib/index.js +9 -0
  82. package/dist/lib/index.js.map +1 -0
  83. package/dist/lib/persona.d.ts +32 -0
  84. package/dist/lib/persona.d.ts.map +1 -0
  85. package/dist/lib/persona.js +177 -0
  86. package/dist/lib/persona.js.map +1 -0
  87. package/dist/lib/types/index.d.ts +69 -0
  88. package/dist/lib/types/index.d.ts.map +1 -0
  89. package/dist/lib/types/index.js +4 -0
  90. package/dist/lib/types/index.js.map +1 -0
  91. package/dist/lib/types/persona.d.ts +46 -0
  92. package/dist/lib/types/persona.d.ts.map +1 -0
  93. package/dist/lib/types/persona.js +2 -0
  94. package/dist/lib/types/persona.js.map +1 -0
  95. package/dist/lib/types/triggers.d.ts +96 -0
  96. package/dist/lib/types/triggers.d.ts.map +1 -0
  97. package/dist/lib/types/triggers.js +2 -0
  98. package/dist/lib/types/triggers.js.map +1 -0
  99. package/dist/lib/types/workflow.d.ts +75 -0
  100. package/dist/lib/types/workflow.d.ts.map +1 -0
  101. package/dist/lib/types/workflow.js +2 -0
  102. package/dist/lib/types/workflow.js.map +1 -0
  103. package/dist/lib/variables.d.ts +28 -0
  104. package/dist/lib/variables.d.ts.map +1 -0
  105. package/dist/lib/variables.js +113 -0
  106. package/dist/lib/variables.js.map +1 -0
  107. package/dist/lib/workflow.d.ts +29 -0
  108. package/dist/lib/workflow.d.ts.map +1 -0
  109. package/dist/lib/workflow.js +155 -0
  110. package/dist/lib/workflow.js.map +1 -0
  111. package/package.json +71 -0
@@ -0,0 +1,179 @@
1
+ import { execa } from "execa";
2
+ import { mkdir, writeFile } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { createExecutionContext, processTemplate, expandVariables, getInputDefaults, } from "../../lib/index.js";
5
+ /**
6
+ * Parse duration string to milliseconds
7
+ * Supports: "30s", "5m", "1h"
8
+ */
9
+ export function parseDuration(duration) {
10
+ const match = duration.match(/^(\d+)(s|m|h)$/);
11
+ if (!match) {
12
+ throw new Error(`Invalid duration format: ${duration}`);
13
+ }
14
+ const [, value, unit] = match;
15
+ const num = parseInt(value, 10);
16
+ switch (unit) {
17
+ case "s":
18
+ return num * 1000;
19
+ case "m":
20
+ return num * 60 * 1000;
21
+ case "h":
22
+ return num * 60 * 60 * 1000;
23
+ default:
24
+ throw new Error(`Unknown duration unit: ${unit}`);
25
+ }
26
+ }
27
+ /**
28
+ * Build the full prompt for the agent
29
+ */
30
+ export function buildPrompt(workflow, persona, context, inputs) {
31
+ const parts = [];
32
+ // Add persona system prompt if present
33
+ if (persona.prompt) {
34
+ const expandedPrompt = processTemplate(persona.prompt, { ...context, ...inputs }, persona.env);
35
+ parts.push(expandedPrompt);
36
+ parts.push("\n---\n");
37
+ }
38
+ // Add workflow task
39
+ const expandedTask = processTemplate(workflow.task, { ...context, ...inputs }, { ...persona.env, ...workflow.env });
40
+ parts.push(expandedTask);
41
+ return parts.join("\n");
42
+ }
43
+ /**
44
+ * Run a workflow with a resolved persona
45
+ */
46
+ export async function runWorkflow(workflow, persona, options = {}) {
47
+ const startedAt = new Date();
48
+ const context = createExecutionContext({
49
+ WORKFLOW_NAME: workflow.name,
50
+ WORKFLOW_DIR: workflow.path,
51
+ PERSONA_NAME: persona.name,
52
+ PERSONA_DIR: persona.path,
53
+ });
54
+ // Merge inputs: defaults < workflow inputs < options.inputs
55
+ const inputs = {
56
+ ...getInputDefaults(workflow),
57
+ ...options.inputs,
58
+ };
59
+ // Merge environment
60
+ const env = {
61
+ ...process.env,
62
+ ...persona.env,
63
+ ...workflow.env,
64
+ ...options.env,
65
+ };
66
+ // Expand environment variable values
67
+ for (const [key, value] of Object.entries(env)) {
68
+ if (value) {
69
+ env[key] = expandVariables(value, context, env);
70
+ }
71
+ }
72
+ // Determine working directory
73
+ let workingDir = options.workingDir ?? workflow.working_dir ?? process.cwd();
74
+ workingDir = expandVariables(workingDir, { ...context, ...inputs }, env);
75
+ // Build the prompt
76
+ const prompt = buildPrompt(workflow, persona, context, inputs);
77
+ // Determine timeout
78
+ const timeoutMs = options.timeout
79
+ ? parseDuration(options.timeout)
80
+ : workflow.timeout
81
+ ? parseDuration(workflow.timeout)
82
+ : 10 * 60 * 1000; // Default 10 minutes
83
+ // Dry run - just return the prompt
84
+ if (options.dryRun) {
85
+ return {
86
+ success: true,
87
+ exitCode: 0,
88
+ stdout: prompt,
89
+ stderr: "",
90
+ duration: 0,
91
+ runId: context.RUN_ID,
92
+ startedAt,
93
+ endedAt: new Date(),
94
+ };
95
+ }
96
+ // Try each command in order
97
+ let lastError = null;
98
+ let result = null;
99
+ for (const cmd of persona.cmd) {
100
+ try {
101
+ const expandedCmd = expandVariables(cmd, context, env);
102
+ const [command, ...args] = expandedCmd.split(/\s+/);
103
+ const subprocess = execa(command, args, {
104
+ input: prompt,
105
+ cwd: workingDir,
106
+ env,
107
+ timeout: timeoutMs,
108
+ reject: false,
109
+ });
110
+ const execResult = await subprocess;
111
+ const endedAt = new Date();
112
+ result = {
113
+ success: execResult.exitCode === 0,
114
+ exitCode: execResult.exitCode ?? 1,
115
+ stdout: execResult.stdout,
116
+ stderr: execResult.stderr,
117
+ duration: endedAt.getTime() - startedAt.getTime(),
118
+ runId: context.RUN_ID,
119
+ startedAt,
120
+ endedAt,
121
+ };
122
+ if (result.success) {
123
+ break; // Success, no need to try fallback commands
124
+ }
125
+ lastError = new Error(`Command failed with exit code ${result.exitCode}: ${execResult.stderr}`);
126
+ }
127
+ catch (error) {
128
+ lastError = error;
129
+ // Continue to next fallback command
130
+ }
131
+ }
132
+ if (!result) {
133
+ const endedAt = new Date();
134
+ return {
135
+ success: false,
136
+ exitCode: 1,
137
+ stdout: "",
138
+ stderr: lastError?.message ?? "All commands failed",
139
+ duration: endedAt.getTime() - startedAt.getTime(),
140
+ runId: context.RUN_ID,
141
+ startedAt,
142
+ endedAt,
143
+ error: lastError?.message,
144
+ };
145
+ }
146
+ return result;
147
+ }
148
+ /**
149
+ * Ensure log directory exists and write execution log
150
+ */
151
+ export async function writeExecutionLog(sessionsDir, metadata, result) {
152
+ await mkdir(sessionsDir, { recursive: true });
153
+ // Format: YYYYMMDD-HHMMSS.log
154
+ const timestamp = result.startedAt
155
+ .toISOString()
156
+ .replace(/[-:]/g, "")
157
+ .replace("T", "-")
158
+ .split(".")[0];
159
+ const filename = `${timestamp}.log`;
160
+ const logPath = join(sessionsDir, filename);
161
+ const logContent = `Run ID: ${result.runId}
162
+ Workflow: ${metadata.workflowName}
163
+ Persona: ${metadata.personaName}
164
+ Started: ${result.startedAt.toISOString()}
165
+ Ended: ${result.endedAt.toISOString()}
166
+ Duration: ${result.duration}ms
167
+ Exit Code: ${result.exitCode}
168
+ Success: ${result.success}
169
+ ${result.error ? `Error: ${result.error}\n` : ""}
170
+ --- STDOUT ---
171
+ ${result.stdout}
172
+
173
+ --- STDERR ---
174
+ ${result.stderr}
175
+ `;
176
+ await writeFile(logPath, logContent, "utf-8");
177
+ return logPath;
178
+ }
179
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/cli/lib/runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./server.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/daemon/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./server.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/daemon/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type Express } from "express";
2
+ import type { Server } from "node:http";
3
+ import type { Daemon } from "../daemon.js";
4
+ /**
5
+ * Create the HTTP API server
6
+ */
7
+ export declare function createApiServer(daemon: Daemon): Express;
8
+ /**
9
+ * Start the API server
10
+ */
11
+ export declare function startApiServer(app: Express, port: number): Promise<Server>;
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/daemon/api/server.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAA+B,MAAM,SAAS,CAAC;AAC7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAsB3C;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAsGvD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,CAMjB"}
@@ -0,0 +1,111 @@
1
+ import express from "express";
2
+ /**
3
+ * Create the HTTP API server
4
+ */
5
+ export function createApiServer(daemon) {
6
+ const app = express();
7
+ app.use(express.json());
8
+ // Health check
9
+ app.get("/health", (_req, res) => {
10
+ res.json({ ok: true });
11
+ });
12
+ // Status
13
+ app.get("/status", (_req, res) => {
14
+ const status = {
15
+ status: daemon.isRunning() ? "running" : "stopped",
16
+ uptime: daemon.getUptime(),
17
+ jobs: daemon.getScheduler().getJobCount(),
18
+ version: "0.1.0",
19
+ };
20
+ res.json(status);
21
+ });
22
+ // List scheduled jobs
23
+ app.get("/jobs", (_req, res) => {
24
+ const jobs = daemon.getScheduler().getJobs();
25
+ const response = { jobs };
26
+ res.json(response);
27
+ });
28
+ // Get specific job
29
+ app.get("/jobs/:id", (req, res) => {
30
+ const job = daemon.getScheduler().getJob(req.params.id);
31
+ if (!job) {
32
+ res.status(404).json({ error: "Job not found" });
33
+ return;
34
+ }
35
+ res.json(job);
36
+ });
37
+ // Trigger a workflow
38
+ app.post("/trigger/:workflow", async (req, res) => {
39
+ const workflowName = req.params.workflow;
40
+ const inputs = req.body?.inputs;
41
+ try {
42
+ const result = await daemon.triggerWorkflow(workflowName, inputs);
43
+ const response = {
44
+ success: result.success,
45
+ message: result.success
46
+ ? `Workflow ${workflowName} completed successfully`
47
+ : `Workflow ${workflowName} failed`,
48
+ runId: result.runId,
49
+ };
50
+ res.json(response);
51
+ }
52
+ catch (error) {
53
+ res.status(500).json({
54
+ success: false,
55
+ message: error.message,
56
+ });
57
+ }
58
+ });
59
+ // List workflows
60
+ app.get("/workflows", async (_req, res) => {
61
+ try {
62
+ const workflows = await daemon.getWorkflows();
63
+ res.json({ workflows });
64
+ }
65
+ catch (error) {
66
+ res.status(500).json({ error: error.message });
67
+ }
68
+ });
69
+ // List personas
70
+ app.get("/personas", async (_req, res) => {
71
+ try {
72
+ const personas = await daemon.getPersonas();
73
+ res.json({ personas });
74
+ }
75
+ catch (error) {
76
+ res.status(500).json({ error: error.message });
77
+ }
78
+ });
79
+ // Recent sessions/logs
80
+ app.get("/sessions", async (_req, res) => {
81
+ try {
82
+ const sessions = await daemon.getRecentSessions(20);
83
+ res.json({ sessions });
84
+ }
85
+ catch (error) {
86
+ res.status(500).json({ error: error.message });
87
+ }
88
+ });
89
+ // Reload workflows (after file changes)
90
+ app.post("/reload", async (_req, res) => {
91
+ try {
92
+ await daemon.reloadWorkflows();
93
+ res.json({ success: true, message: "Workflows reloaded" });
94
+ }
95
+ catch (error) {
96
+ res.status(500).json({ error: error.message });
97
+ }
98
+ });
99
+ return app;
100
+ }
101
+ /**
102
+ * Start the API server
103
+ */
104
+ export function startApiServer(app, port) {
105
+ return new Promise((resolve) => {
106
+ const server = app.listen(port, () => {
107
+ resolve(server);
108
+ });
109
+ });
110
+ }
111
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/daemon/api/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import { type DotAgentsConfig, type Workflow, type ExecutionResult } from "../lib/index.js";
2
+ import { Scheduler } from "./lib/scheduler.js";
3
+ /**
4
+ * Daemon configuration options
5
+ */
6
+ export interface DaemonOptions {
7
+ /** HTTP API port */
8
+ port?: number;
9
+ /** Enable file watching */
10
+ watch?: boolean;
11
+ /** Custom config (auto-detected if not provided) */
12
+ config?: DotAgentsConfig;
13
+ }
14
+ /**
15
+ * Session log metadata
16
+ */
17
+ export interface SessionInfo {
18
+ filename: string;
19
+ timestamp: Date;
20
+ workflow?: string;
21
+ persona?: string;
22
+ }
23
+ /**
24
+ * Main daemon class
25
+ */
26
+ export declare class Daemon {
27
+ private config;
28
+ private scheduler;
29
+ private executor;
30
+ private watcher;
31
+ private apiServer;
32
+ private app;
33
+ private startTime;
34
+ private running;
35
+ private port;
36
+ private watchEnabled;
37
+ constructor(options?: DaemonOptions);
38
+ /**
39
+ * Start the daemon
40
+ */
41
+ start(): Promise<void>;
42
+ /**
43
+ * Stop the daemon
44
+ */
45
+ stop(): Promise<void>;
46
+ /**
47
+ * Load all workflows and add to scheduler
48
+ */
49
+ private loadWorkflows;
50
+ /**
51
+ * Reload all workflows
52
+ */
53
+ reloadWorkflows(): Promise<void>;
54
+ /**
55
+ * Set up file watcher event handlers
56
+ */
57
+ private setupWatcherEvents;
58
+ /**
59
+ * Manually trigger a workflow
60
+ */
61
+ triggerWorkflow(name: string, inputs?: Record<string, unknown>): Promise<ExecutionResult>;
62
+ /**
63
+ * Get all workflows
64
+ */
65
+ getWorkflows(): Promise<Workflow[]>;
66
+ /**
67
+ * Get all personas (just basic info, not resolved)
68
+ */
69
+ getPersonas(): Promise<Array<{
70
+ path: string;
71
+ name: string;
72
+ description?: string;
73
+ }>>;
74
+ /**
75
+ * Get recent session logs
76
+ */
77
+ getRecentSessions(limit?: number): Promise<SessionInfo[]>;
78
+ /**
79
+ * Get the scheduler instance
80
+ */
81
+ getScheduler(): Scheduler;
82
+ /**
83
+ * Check if daemon is running
84
+ */
85
+ isRunning(): boolean;
86
+ /**
87
+ * Get uptime in seconds
88
+ */
89
+ getUptime(): number;
90
+ /**
91
+ * Get the API port
92
+ */
93
+ getPort(): number;
94
+ }
95
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/daemon/daemon.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,QAAQ,EACb,KAAK,eAAe,EAMrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AAKlE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oBAAoB;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,YAAY,CAAU;gBAElB,OAAO,GAAE,aAAkB;IAyBvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0C5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;OAEG;YACW,aAAa;IAc3B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBtC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;IACG,eAAe,CACnB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,eAAe,CAAC;IAa3B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAgBzC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAoBzF;;OAEG;IACG,iBAAiB,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA4BnE;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,SAAS,IAAI,MAAM;IAKnB;;OAEG;IACH,OAAO,IAAI,MAAM;CAGlB"}