@happyvertical/smrt-agents 0.30.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.
- package/AGENTS.md +96 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/README.md +139 -0
- package/dist/__smrt-register__.d.ts +2 -0
- package/dist/__smrt-register__.d.ts.map +1 -0
- package/dist/agent.d.ts +545 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/ai-config.d.ts +27 -0
- package/dist/ai-config.d.ts.map +1 -0
- package/dist/chunks/config-BYbOxt24.js +179 -0
- package/dist/chunks/config-BYbOxt24.js.map +1 -0
- package/dist/chunks/manifest-utils-DLXfTOq0.js +69 -0
- package/dist/chunks/manifest-utils-DLXfTOq0.js.map +1 -0
- package/dist/config.d.ts +117 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/identity.d.ts +19 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1477 -0
- package/dist/index.js.map +1 -0
- package/dist/interests.d.ts +291 -0
- package/dist/interests.d.ts.map +1 -0
- package/dist/manifest.json +2012 -0
- package/dist/playground.d.ts +2 -0
- package/dist/playground.d.ts.map +1 -0
- package/dist/playground.js +156 -0
- package/dist/playground.js.map +1 -0
- package/dist/schedule.d.ts +168 -0
- package/dist/schedule.d.ts.map +1 -0
- package/dist/server/action-types.d.ts +65 -0
- package/dist/server/action-types.d.ts.map +1 -0
- package/dist/server/action-types.js +2 -0
- package/dist/server/action-types.js.map +1 -0
- package/dist/server/api-routes.d.ts +57 -0
- package/dist/server/api-routes.d.ts.map +1 -0
- package/dist/server/config-loader.d.ts +17 -0
- package/dist/server/config-loader.d.ts.map +1 -0
- package/dist/server/index.d.ts +34 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/manifest-utils.d.ts +63 -0
- package/dist/server/manifest-utils.d.ts.map +1 -0
- package/dist/server/serialization.d.ts +58 -0
- package/dist/server/serialization.d.ts.map +1 -0
- package/dist/server.js +105 -0
- package/dist/server.js.map +1 -0
- package/dist/smrt-knowledge.json +983 -0
- package/dist/summary-article.d.ts +30 -0
- package/dist/summary-article.d.ts.map +1 -0
- package/dist/summary-article.js +2 -0
- package/dist/summary-article.js.map +1 -0
- package/dist/svelte/components/AgentDashboard.svelte +250 -0
- package/dist/svelte/components/AgentDashboard.svelte.d.ts +21 -0
- package/dist/svelte/components/AgentDashboard.svelte.d.ts.map +1 -0
- package/dist/svelte/components/AgentRunHistory.svelte +225 -0
- package/dist/svelte/components/AgentRunHistory.svelte.d.ts +16 -0
- package/dist/svelte/components/AgentRunHistory.svelte.d.ts.map +1 -0
- package/dist/svelte/components/AgentScheduleForm.svelte +381 -0
- package/dist/svelte/components/AgentScheduleForm.svelte.d.ts +19 -0
- package/dist/svelte/components/AgentScheduleForm.svelte.d.ts.map +1 -0
- package/dist/svelte/components/AgentScheduleList.svelte +370 -0
- package/dist/svelte/components/AgentScheduleList.svelte.d.ts +24 -0
- package/dist/svelte/components/AgentScheduleList.svelte.d.ts.map +1 -0
- package/dist/svelte/components/ScheduleStatusBadge.svelte +23 -0
- package/dist/svelte/components/ScheduleStatusBadge.svelte.d.ts +9 -0
- package/dist/svelte/components/ScheduleStatusBadge.svelte.d.ts.map +1 -0
- package/dist/svelte/i18n.d.ts +33 -0
- package/dist/svelte/i18n.d.ts.map +1 -0
- package/dist/svelte/i18n.js +37 -0
- package/dist/svelte/index.d.ts +23 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +26 -0
- package/dist/svelte/playground.d.ts +196 -0
- package/dist/svelte/playground.d.ts.map +1 -0
- package/dist/svelte/playground.js +151 -0
- package/dist/svelte/types.d.ts +155 -0
- package/dist/svelte/types.d.ts.map +1 -0
- package/dist/svelte/types.js +116 -0
- package/dist/tenant-agent.d.ts +106 -0
- package/dist/tenant-agent.d.ts.map +1 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui.d.ts +298 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +133 -0
- package/dist/ui.js.map +1 -0
- package/dist/vite-plugin.d.ts +61 -0
- package/dist/vite-plugin.d.ts.map +1 -0
- package/dist/vite-plugin.js +173 -0
- package/dist/vite-plugin.js.map +1 -0
- package/package.json +104 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { ObjectRegistry, getClassName, field, smrt, SmrtObject, SmrtCollection } from "@happyvertical/smrt-core";
|
|
2
|
+
import { tenantId, TenantScoped } from "@happyvertical/smrt-tenancy";
|
|
3
|
+
function getAgentTypeName(name) {
|
|
4
|
+
const registered = ObjectRegistry.getClass(name);
|
|
5
|
+
return registered?.qualifiedName || registered?.name || name;
|
|
6
|
+
}
|
|
7
|
+
function getAgentClassName(name) {
|
|
8
|
+
const registered = ObjectRegistry.getClass(name);
|
|
9
|
+
return registered?.name || getClassName(name);
|
|
10
|
+
}
|
|
11
|
+
function getAgentTypeAliases(name) {
|
|
12
|
+
return Array.from(
|
|
13
|
+
new Set([getAgentTypeName(name), getAgentClassName(name)].filter(Boolean))
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
var __defProp = Object.defineProperty;
|
|
17
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
18
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
19
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
20
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
21
|
+
if (decorator = decorators[i])
|
|
22
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
23
|
+
if (kind && result) __defProp(target, key, result);
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
let AgentConfig = class extends SmrtObject {
|
|
27
|
+
tenantId = null;
|
|
28
|
+
agentId = "";
|
|
29
|
+
agentClass = "";
|
|
30
|
+
slotId = "";
|
|
31
|
+
configData = {};
|
|
32
|
+
schemaVersion = 1;
|
|
33
|
+
/**
|
|
34
|
+
* Load all configs for a specific agent
|
|
35
|
+
*
|
|
36
|
+
* @param agentId - Agent instance ID
|
|
37
|
+
* @param options - Database options
|
|
38
|
+
* @returns Map of slotId → configData
|
|
39
|
+
*/
|
|
40
|
+
static async forAgent(agentId, options) {
|
|
41
|
+
const configsByAgent = await AgentConfig.forAgents([agentId], options);
|
|
42
|
+
return configsByAgent.get(agentId) ?? /* @__PURE__ */ new Map();
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Load configs for multiple agents in a single query.
|
|
46
|
+
*
|
|
47
|
+
* @param agentIds - Agent instance IDs
|
|
48
|
+
* @param options - Database options
|
|
49
|
+
* @returns Map of agentId -> (slotId -> configData)
|
|
50
|
+
*/
|
|
51
|
+
static async forAgents(agentIds, options) {
|
|
52
|
+
const configsByAgent = /* @__PURE__ */ new Map();
|
|
53
|
+
if (agentIds.length === 0) {
|
|
54
|
+
return configsByAgent;
|
|
55
|
+
}
|
|
56
|
+
const collection = await AgentConfigCollection.create(options);
|
|
57
|
+
const configs = await collection.list({
|
|
58
|
+
where: { "agentId in": agentIds }
|
|
59
|
+
});
|
|
60
|
+
for (const config of configs) {
|
|
61
|
+
if (!configsByAgent.has(config.agentId)) {
|
|
62
|
+
configsByAgent.set(config.agentId, /* @__PURE__ */ new Map());
|
|
63
|
+
}
|
|
64
|
+
configsByAgent.get(config.agentId)?.set(config.slotId, config.configData);
|
|
65
|
+
}
|
|
66
|
+
return configsByAgent;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Load config for a specific agent and slot
|
|
70
|
+
*
|
|
71
|
+
* @param agentId - Agent instance ID
|
|
72
|
+
* @param slotId - UI slot ID
|
|
73
|
+
* @param options - Database options
|
|
74
|
+
* @returns Config data or undefined if not found
|
|
75
|
+
*/
|
|
76
|
+
static async forSlot(agentId, slotId, options) {
|
|
77
|
+
const collection = await AgentConfigCollection.create(options);
|
|
78
|
+
const configs = await collection.list({
|
|
79
|
+
where: { agentId, slotId },
|
|
80
|
+
limit: 1
|
|
81
|
+
});
|
|
82
|
+
return configs[0]?.configData;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Save or update config for an agent slot
|
|
86
|
+
*
|
|
87
|
+
* @param data - Config data including agentId, agentClass, slotId, configData
|
|
88
|
+
* @param options - Database options
|
|
89
|
+
* @returns Saved AgentConfig instance
|
|
90
|
+
*/
|
|
91
|
+
static async saveSlot(data, options) {
|
|
92
|
+
const normalizedAgentClass = getAgentTypeName(data.agentClass);
|
|
93
|
+
const collection = await AgentConfigCollection.create(options);
|
|
94
|
+
const existingConfigs = await collection.list({
|
|
95
|
+
where: { agentId: data.agentId, slotId: data.slotId },
|
|
96
|
+
limit: 1
|
|
97
|
+
});
|
|
98
|
+
if (existingConfigs.length > 0) {
|
|
99
|
+
const existing = existingConfigs[0];
|
|
100
|
+
existing.configData = data.configData;
|
|
101
|
+
existing.agentClass = normalizedAgentClass;
|
|
102
|
+
await existing.save();
|
|
103
|
+
return existing;
|
|
104
|
+
}
|
|
105
|
+
const config = await collection.create({
|
|
106
|
+
agentId: data.agentId,
|
|
107
|
+
agentClass: normalizedAgentClass,
|
|
108
|
+
slotId: data.slotId,
|
|
109
|
+
configData: data.configData,
|
|
110
|
+
slug: `${data.agentId}-${data.slotId}`
|
|
111
|
+
});
|
|
112
|
+
await config.save();
|
|
113
|
+
return config;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
__decorateClass([
|
|
117
|
+
tenantId({ nullable: true })
|
|
118
|
+
], AgentConfig.prototype, "tenantId", 2);
|
|
119
|
+
__decorateClass([
|
|
120
|
+
field({ type: "text" })
|
|
121
|
+
], AgentConfig.prototype, "agentId", 2);
|
|
122
|
+
__decorateClass([
|
|
123
|
+
field({ type: "text" })
|
|
124
|
+
], AgentConfig.prototype, "agentClass", 2);
|
|
125
|
+
__decorateClass([
|
|
126
|
+
field({ type: "text" })
|
|
127
|
+
], AgentConfig.prototype, "slotId", 2);
|
|
128
|
+
__decorateClass([
|
|
129
|
+
field({ type: "json", sensitive: true })
|
|
130
|
+
], AgentConfig.prototype, "configData", 2);
|
|
131
|
+
__decorateClass([
|
|
132
|
+
field({ type: "integer" })
|
|
133
|
+
], AgentConfig.prototype, "schemaVersion", 2);
|
|
134
|
+
AgentConfig = __decorateClass([
|
|
135
|
+
TenantScoped({ mode: "optional" }),
|
|
136
|
+
smrt({
|
|
137
|
+
tableName: "agent_configs",
|
|
138
|
+
api: { include: ["list", "get", "create", "update", "delete"] },
|
|
139
|
+
mcp: { include: ["list", "get"] },
|
|
140
|
+
cli: true
|
|
141
|
+
})
|
|
142
|
+
], AgentConfig);
|
|
143
|
+
class AgentConfigCollection extends SmrtCollection {
|
|
144
|
+
static _itemClass = AgentConfig;
|
|
145
|
+
/**
|
|
146
|
+
* Find all configs for a specific tenant
|
|
147
|
+
* @param tenantId - Tenant ID to filter by
|
|
148
|
+
* @returns Array of AgentConfig objects for the tenant
|
|
149
|
+
*/
|
|
150
|
+
async findByTenant(tenantId2) {
|
|
151
|
+
return this.list({ where: { tenantId: tenantId2 } });
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Find all global configs (not associated with any tenant)
|
|
155
|
+
* @returns Array of global AgentConfig objects
|
|
156
|
+
*/
|
|
157
|
+
async findGlobal() {
|
|
158
|
+
return this.list({ where: { tenantId: null } });
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Find configs for a tenant including global configs
|
|
162
|
+
* @param tenantId - Tenant ID to include
|
|
163
|
+
* @returns Array of AgentConfig objects for the tenant and global configs
|
|
164
|
+
*/
|
|
165
|
+
async findWithGlobals(tenantId2) {
|
|
166
|
+
return this.query(
|
|
167
|
+
`SELECT * FROM ${this.tableName} WHERE tenant_id = ? OR tenant_id IS NULL`,
|
|
168
|
+
[tenantId2]
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
export {
|
|
173
|
+
AgentConfig as A,
|
|
174
|
+
getAgentClassName as a,
|
|
175
|
+
getAgentTypeAliases as b,
|
|
176
|
+
AgentConfigCollection as c,
|
|
177
|
+
getAgentTypeName as g
|
|
178
|
+
};
|
|
179
|
+
//# sourceMappingURL=config-BYbOxt24.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-BYbOxt24.js","sources":["../../src/identity.ts","../../src/config.ts"],"sourcesContent":["import { getClassName, ObjectRegistry } from '@happyvertical/smrt-core';\n\n/**\n * Return the canonical agent type identifier for storage and dispatch routing.\n *\n * Uses the registry's qualified name when available and falls back to the input\n * name for dynamically defined or unregistered classes.\n */\nexport function getAgentTypeName(name: string): string {\n const registered = ObjectRegistry.getClass(name);\n return registered?.qualifiedName || registered?.name || name;\n}\n\n/**\n * Return the human-readable class name for UI and logs.\n */\nexport function getAgentClassName(name: string): string {\n const registered = ObjectRegistry.getClass(name);\n return registered?.name || getClassName(name);\n}\n\n/**\n * Return all meaningful aliases for an agent type.\n *\n * The qualified name is first so persistence lookups prefer canonical rows,\n * while the simple class name keeps legacy rows discoverable during migration.\n */\nexport function getAgentTypeAliases(name: string): string[] {\n return Array.from(\n new Set([getAgentTypeName(name), getAgentClassName(name)].filter(Boolean)),\n );\n}\n","/**\n * AgentConfig - Persistent configuration storage for agents\n *\n * This module provides database-backed configuration for agents,\n * enabling consuming apps to persist agent settings.\n *\n * @module\n */\n\nimport {\n field,\n type SmrtClassOptions,\n SmrtCollection,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport { getAgentTypeName } from './identity.js';\n\n/**\n * AgentConfig stores agent configuration in the database\n *\n * Each config record maps to a UI slot for an agent instance:\n * - agentId: The agent instance's ID\n * - agentClass: The canonical agent type (qualified name when available)\n * - slotId: The configuration slot (e.g., 'sources', 'settings')\n * - configData: JSON object containing the configuration\n *\n * @example\n * ```typescript\n * // Save config for an agent slot\n * const config = new AgentConfig({\n * agentId: agent.id,\n * agentClass: 'Praeco',\n * slotId: 'sources',\n * configData: { scrapers: ['civicweb', 'govstack'] },\n * db: options.db\n * });\n * await config.initialize();\n * await config.save();\n * ```\n */\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: 'agent_configs',\n api: { include: ['list', 'get', 'create', 'update', 'delete'] },\n mcp: { include: ['list', 'get'] },\n cli: true,\n})\nexport class AgentConfig extends SmrtObject {\n /**\n * Tenant ID for multi-tenant isolation\n * Nullable to support both tenant-scoped and global agent configs\n */\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n /**\n * ID of the agent instance this config belongs to\n */\n @field({ type: 'text' })\n agentId: string = '';\n\n /**\n * Canonical agent type for this config (qualified name when available)\n */\n @field({ type: 'text' })\n agentClass: string = '';\n\n /**\n * UI slot ID (e.g., 'sources', 'settings', 'reports')\n */\n @field({ type: 'text' })\n slotId: string = '';\n\n /**\n * Configuration data stored as JSON\n *\n * Sensitive (#1540): agent config blobs routinely carry API keys/credentials,\n * so this is excluded from generated API/MCP responses and rejected as a\n * `where` filter key.\n */\n @field({ type: 'json', sensitive: true })\n configData: Record<string, any> = {};\n\n /**\n * Schema version for future migrations\n */\n @field({ type: 'integer' })\n schemaVersion: number = 1;\n\n /**\n * Load all configs for a specific agent\n *\n * @param agentId - Agent instance ID\n * @param options - Database options\n * @returns Map of slotId → configData\n */\n static async forAgent(\n agentId: string,\n options: SmrtClassOptions,\n ): Promise<Map<string, any>> {\n const configsByAgent = await AgentConfig.forAgents([agentId], options);\n return configsByAgent.get(agentId) ?? new Map();\n }\n\n /**\n * Load configs for multiple agents in a single query.\n *\n * @param agentIds - Agent instance IDs\n * @param options - Database options\n * @returns Map of agentId -> (slotId -> configData)\n */\n static async forAgents(\n agentIds: string[],\n options: SmrtClassOptions,\n ): Promise<Map<string, Map<string, any>>> {\n const configsByAgent = new Map<string, Map<string, any>>();\n if (agentIds.length === 0) {\n return configsByAgent;\n }\n\n const collection = await AgentConfigCollection.create(options);\n const configs = await collection.list({\n where: { 'agentId in': agentIds },\n });\n\n for (const config of configs) {\n if (!configsByAgent.has(config.agentId)) {\n configsByAgent.set(config.agentId, new Map());\n }\n configsByAgent.get(config.agentId)?.set(config.slotId, config.configData);\n }\n\n return configsByAgent;\n }\n\n /**\n * Load config for a specific agent and slot\n *\n * @param agentId - Agent instance ID\n * @param slotId - UI slot ID\n * @param options - Database options\n * @returns Config data or undefined if not found\n */\n static async forSlot(\n agentId: string,\n slotId: string,\n options: SmrtClassOptions,\n ): Promise<any | undefined> {\n const collection = await AgentConfigCollection.create(options);\n const configs = await collection.list({\n where: { agentId, slotId },\n limit: 1,\n });\n return configs[0]?.configData;\n }\n\n /**\n * Save or update config for an agent slot\n *\n * @param data - Config data including agentId, agentClass, slotId, configData\n * @param options - Database options\n * @returns Saved AgentConfig instance\n */\n static async saveSlot(\n data: {\n agentId: string;\n agentClass: string;\n slotId: string;\n configData: Record<string, any>;\n },\n options: SmrtClassOptions,\n ): Promise<AgentConfig> {\n const normalizedAgentClass = getAgentTypeName(data.agentClass);\n const collection = await AgentConfigCollection.create(options);\n\n // Check for existing config using list with where clause\n const existingConfigs = await collection.list({\n where: { agentId: data.agentId, slotId: data.slotId },\n limit: 1,\n });\n\n if (existingConfigs.length > 0) {\n // Update existing\n const existing = existingConfigs[0];\n existing.configData = data.configData;\n existing.agentClass = normalizedAgentClass;\n await existing.save();\n return existing;\n }\n\n // Create new\n const config = await collection.create({\n agentId: data.agentId,\n agentClass: normalizedAgentClass,\n slotId: data.slotId,\n configData: data.configData,\n slug: `${data.agentId}-${data.slotId}`,\n });\n await config.save();\n return config;\n }\n}\n\n/**\n * Collection for AgentConfig objects\n */\nexport class AgentConfigCollection extends SmrtCollection<AgentConfig> {\n static readonly _itemClass = AgentConfig;\n\n /**\n * Find all configs for a specific tenant\n * @param tenantId - Tenant ID to filter by\n * @returns Array of AgentConfig objects for the tenant\n */\n async findByTenant(tenantId: string): Promise<AgentConfig[]> {\n return this.list({ where: { tenantId } });\n }\n\n /**\n * Find all global configs (not associated with any tenant)\n * @returns Array of global AgentConfig objects\n */\n async findGlobal(): Promise<AgentConfig[]> {\n return this.list({ where: { tenantId: null } });\n }\n\n /**\n * Find configs for a tenant including global configs\n * @param tenantId - Tenant ID to include\n * @returns Array of AgentConfig objects for the tenant and global configs\n */\n async findWithGlobals(tenantId: string): Promise<AgentConfig[]> {\n return this.query(\n `SELECT * FROM ${this.tableName} WHERE tenant_id = ? OR tenant_id IS NULL`,\n [tenantId],\n );\n }\n}\n"],"names":["tenantId"],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { AgentUIRegistry } from "../ui.js";
|
|
5
|
+
function extractAgentManifest(manifest, agentClass) {
|
|
6
|
+
for (const obj of Object.values(manifest.objects)) {
|
|
7
|
+
if (obj.className === agentClass && obj.agent) {
|
|
8
|
+
return obj.agent;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
function loadManifestsFromPackages(packages, projectRoot) {
|
|
14
|
+
const result = /* @__PURE__ */ new Map();
|
|
15
|
+
const localRequire = createRequire(resolve(projectRoot, "package.json"));
|
|
16
|
+
for (const pkg of packages) {
|
|
17
|
+
try {
|
|
18
|
+
const manifestPath = localRequire.resolve(`${pkg}/manifest`);
|
|
19
|
+
const manifestContent = readFileSync(manifestPath, "utf-8");
|
|
20
|
+
const manifest = JSON.parse(manifestContent);
|
|
21
|
+
for (const obj of Object.values(manifest.objects)) {
|
|
22
|
+
if (obj.agent) {
|
|
23
|
+
const agentClass = obj.className;
|
|
24
|
+
AgentUIRegistry.registerManifest(agentClass, obj.agent);
|
|
25
|
+
result.set(agentClass, obj.agent);
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
} catch {
|
|
30
|
+
console.warn(
|
|
31
|
+
`[smrt-agents/server] Could not load manifest for ${pkg} — skipping`
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
function extractAgentPackagesFromConfig(configPath) {
|
|
38
|
+
const configContent = readFileSync(configPath, "utf-8");
|
|
39
|
+
const agentMatches = configContent.match(/agents\s*:\s*\[([^\]]*)\]/s);
|
|
40
|
+
if (!agentMatches) return [];
|
|
41
|
+
const agentsBlock = agentMatches[1];
|
|
42
|
+
const withoutComments = agentsBlock.replace(/\/\/.*$/gm, "");
|
|
43
|
+
return [...withoutComments.matchAll(/['"]([^'"]+)['"]/g)].map((m) => m[1]);
|
|
44
|
+
}
|
|
45
|
+
function loadManifestsFromConfig(configPath, projectRoot) {
|
|
46
|
+
const root = projectRoot || process.cwd();
|
|
47
|
+
const resolvedConfigPath = configPath || resolve(root, "smrt.config.js");
|
|
48
|
+
if (!existsSync(resolvedConfigPath)) {
|
|
49
|
+
console.warn(
|
|
50
|
+
`[smrt-agents/server] Config file not found: ${resolvedConfigPath}`
|
|
51
|
+
);
|
|
52
|
+
return /* @__PURE__ */ new Map();
|
|
53
|
+
}
|
|
54
|
+
const packages = extractAgentPackagesFromConfig(resolvedConfigPath);
|
|
55
|
+
if (packages.length === 0) {
|
|
56
|
+
console.warn(
|
|
57
|
+
`[smrt-agents/server] No agents found in config: ${resolvedConfigPath}`
|
|
58
|
+
);
|
|
59
|
+
return /* @__PURE__ */ new Map();
|
|
60
|
+
}
|
|
61
|
+
return loadManifestsFromPackages(packages, root);
|
|
62
|
+
}
|
|
63
|
+
export {
|
|
64
|
+
extractAgentManifest as a,
|
|
65
|
+
loadManifestsFromPackages as b,
|
|
66
|
+
extractAgentPackagesFromConfig as e,
|
|
67
|
+
loadManifestsFromConfig as l
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=manifest-utils-DLXfTOq0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-utils-DLXfTOq0.js","sources":["../../src/server/manifest-utils.ts"],"sourcesContent":["/**\n * Server-side manifest utilities for SMRT agents\n *\n * Provides functions to extract and register agent manifests on the server,\n * where the Vite virtual module (`virtual:smrt-agent-registrations`) doesn't run.\n *\n * @module @happyvertical/smrt-agents/server\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { resolve } from 'node:path';\nimport { type AgentManifestInfo, AgentUIRegistry } from '../ui.js';\n\n/**\n * Shape of a package manifest's `objects` entry\n */\ninterface ManifestObject {\n className: string;\n agent?: AgentManifestInfo;\n [key: string]: unknown;\n}\n\n/**\n * Shape of a package manifest JSON file\n */\nexport interface PackageManifest {\n objects: Record<string, ManifestObject>;\n [key: string]: unknown;\n}\n\n/**\n * Extract the AgentManifestInfo from a package manifest by class name.\n *\n * Iterates `manifest.objects` looking for the entry whose `className` matches\n * and has an `agent` metadata block.\n *\n * @param manifest - Parsed manifest JSON from a package\n * @param agentClass - Agent class name to search for (e.g., 'Praeco')\n * @returns The agent manifest info, or null if not found\n */\nexport function extractAgentManifest(\n manifest: PackageManifest,\n agentClass: string,\n): AgentManifestInfo | null {\n for (const obj of Object.values(manifest.objects)) {\n if (obj.className === agentClass && obj.agent) {\n return obj.agent;\n }\n }\n return null;\n}\n\n/**\n * Load and register agent manifests from a list of package names.\n *\n * For each package, resolves its `<package>/manifest` export via `createRequire`,\n * reads the manifest JSON, extracts the agent class and metadata, and registers\n * with `AgentUIRegistry`.\n *\n * @param packages - Array of package names (e.g., ['@happyvertical/praeco'])\n * @param projectRoot - Absolute path to the project root (for require resolution)\n * @returns Map of agentClass -> AgentManifestInfo for successfully loaded agents\n */\nexport function loadManifestsFromPackages(\n packages: string[],\n projectRoot: string,\n): Map<string, AgentManifestInfo> {\n const result = new Map<string, AgentManifestInfo>();\n const localRequire = createRequire(resolve(projectRoot, 'package.json'));\n\n for (const pkg of packages) {\n try {\n const manifestPath = localRequire.resolve(`${pkg}/manifest`);\n const manifestContent = readFileSync(manifestPath, 'utf-8');\n const manifest: PackageManifest = JSON.parse(manifestContent);\n\n // Find the agent object (one with agent metadata)\n for (const obj of Object.values(manifest.objects)) {\n if (obj.agent) {\n const agentClass = obj.className;\n AgentUIRegistry.registerManifest(agentClass, obj.agent);\n result.set(agentClass, obj.agent);\n break;\n }\n }\n } catch {\n console.warn(\n `[smrt-agents/server] Could not load manifest for ${pkg} — skipping`,\n );\n }\n }\n\n return result;\n}\n\n/**\n * Extract agent package names from a smrt.config.js file.\n *\n * Reads the file, finds the `agents: [...]` array, strips comments,\n * and extracts quoted package names. Same logic as the Vite plugin.\n *\n * @param configPath - Absolute path to smrt.config.js\n * @returns Array of package name strings\n */\nexport function extractAgentPackagesFromConfig(configPath: string): string[] {\n const configContent = readFileSync(configPath, 'utf-8');\n const agentMatches = configContent.match(/agents\\s*:\\s*\\[([^\\]]*)\\]/s);\n if (!agentMatches) return [];\n\n const agentsBlock = agentMatches[1];\n const withoutComments = agentsBlock.replace(/\\/\\/.*$/gm, '');\n return [...withoutComments.matchAll(/['\"]([^'\"]+)['\"]/g)].map((m) => m[1]);\n}\n\n/**\n * Load and register agent manifests by reading smrt.config.js.\n *\n * One-call setup: reads the config file to discover agent packages,\n * then loads and registers manifests for each. Idempotent — safe to\n * call from multiple server load functions.\n *\n * @param configPath - Path to smrt.config.js (default: `<projectRoot>/smrt.config.js`)\n * @param projectRoot - Project root for require resolution (default: `process.cwd()`)\n * @returns Map of agentClass -> AgentManifestInfo\n */\nexport function loadManifestsFromConfig(\n configPath?: string,\n projectRoot?: string,\n): Map<string, AgentManifestInfo> {\n const root = projectRoot || process.cwd();\n const resolvedConfigPath = configPath || resolve(root, 'smrt.config.js');\n\n if (!existsSync(resolvedConfigPath)) {\n console.warn(\n `[smrt-agents/server] Config file not found: ${resolvedConfigPath}`,\n );\n return new Map();\n }\n\n const packages = extractAgentPackagesFromConfig(resolvedConfigPath);\n if (packages.length === 0) {\n console.warn(\n `[smrt-agents/server] No agents found in config: ${resolvedConfigPath}`,\n );\n return new Map();\n }\n\n return loadManifestsFromPackages(packages, root);\n}\n"],"names":[],"mappings":";;;;AAyCO,SAAS,qBACd,UACA,YAC0B;AAC1B,aAAW,OAAO,OAAO,OAAO,SAAS,OAAO,GAAG;AACjD,QAAI,IAAI,cAAc,cAAc,IAAI,OAAO;AAC7C,aAAO,IAAI;AAAA,IACb;AAAA,EACF;AACA,SAAO;AACT;AAaO,SAAS,0BACd,UACA,aACgC;AAChC,QAAM,6BAAa,IAAA;AACnB,QAAM,eAAe,cAAc,QAAQ,aAAa,cAAc,CAAC;AAEvE,aAAW,OAAO,UAAU;AAC1B,QAAI;AACF,YAAM,eAAe,aAAa,QAAQ,GAAG,GAAG,WAAW;AAC3D,YAAM,kBAAkB,aAAa,cAAc,OAAO;AAC1D,YAAM,WAA4B,KAAK,MAAM,eAAe;AAG5D,iBAAW,OAAO,OAAO,OAAO,SAAS,OAAO,GAAG;AACjD,YAAI,IAAI,OAAO;AACb,gBAAM,aAAa,IAAI;AACvB,0BAAgB,iBAAiB,YAAY,IAAI,KAAK;AACtD,iBAAO,IAAI,YAAY,IAAI,KAAK;AAChC;AAAA,QACF;AAAA,MACF;AAAA,IACF,QAAQ;AACN,cAAQ;AAAA,QACN,oDAAoD,GAAG;AAAA,MAAA;AAAA,IAE3D;AAAA,EACF;AAEA,SAAO;AACT;AAWO,SAAS,+BAA+B,YAA8B;AAC3E,QAAM,gBAAgB,aAAa,YAAY,OAAO;AACtD,QAAM,eAAe,cAAc,MAAM,4BAA4B;AACrE,MAAI,CAAC,aAAc,QAAO,CAAA;AAE1B,QAAM,cAAc,aAAa,CAAC;AAClC,QAAM,kBAAkB,YAAY,QAAQ,aAAa,EAAE;AAC3D,SAAO,CAAC,GAAG,gBAAgB,SAAS,mBAAmB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3E;AAaO,SAAS,wBACd,YACA,aACgC;AAChC,QAAM,OAAO,eAAe,QAAQ,IAAA;AACpC,QAAM,qBAAqB,cAAc,QAAQ,MAAM,gBAAgB;AAEvE,MAAI,CAAC,WAAW,kBAAkB,GAAG;AACnC,YAAQ;AAAA,MACN,+CAA+C,kBAAkB;AAAA,IAAA;AAEnE,+BAAW,IAAA;AAAA,EACb;AAEA,QAAM,WAAW,+BAA+B,kBAAkB;AAClE,MAAI,SAAS,WAAW,GAAG;AACzB,YAAQ;AAAA,MACN,mDAAmD,kBAAkB;AAAA,IAAA;AAEvE,+BAAW,IAAA;AAAA,EACb;AAEA,SAAO,0BAA0B,UAAU,IAAI;AACjD;"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { SmrtClassOptions, SmrtCollection, SmrtObject } from '@happyvertical/smrt-core';
|
|
2
|
+
/**
|
|
3
|
+
* AgentConfig stores agent configuration in the database
|
|
4
|
+
*
|
|
5
|
+
* Each config record maps to a UI slot for an agent instance:
|
|
6
|
+
* - agentId: The agent instance's ID
|
|
7
|
+
* - agentClass: The canonical agent type (qualified name when available)
|
|
8
|
+
* - slotId: The configuration slot (e.g., 'sources', 'settings')
|
|
9
|
+
* - configData: JSON object containing the configuration
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // Save config for an agent slot
|
|
14
|
+
* const config = new AgentConfig({
|
|
15
|
+
* agentId: agent.id,
|
|
16
|
+
* agentClass: 'Praeco',
|
|
17
|
+
* slotId: 'sources',
|
|
18
|
+
* configData: { scrapers: ['civicweb', 'govstack'] },
|
|
19
|
+
* db: options.db
|
|
20
|
+
* });
|
|
21
|
+
* await config.initialize();
|
|
22
|
+
* await config.save();
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare class AgentConfig extends SmrtObject {
|
|
26
|
+
/**
|
|
27
|
+
* Tenant ID for multi-tenant isolation
|
|
28
|
+
* Nullable to support both tenant-scoped and global agent configs
|
|
29
|
+
*/
|
|
30
|
+
tenantId: string | null;
|
|
31
|
+
/**
|
|
32
|
+
* ID of the agent instance this config belongs to
|
|
33
|
+
*/
|
|
34
|
+
agentId: string;
|
|
35
|
+
/**
|
|
36
|
+
* Canonical agent type for this config (qualified name when available)
|
|
37
|
+
*/
|
|
38
|
+
agentClass: string;
|
|
39
|
+
/**
|
|
40
|
+
* UI slot ID (e.g., 'sources', 'settings', 'reports')
|
|
41
|
+
*/
|
|
42
|
+
slotId: string;
|
|
43
|
+
/**
|
|
44
|
+
* Configuration data stored as JSON
|
|
45
|
+
*
|
|
46
|
+
* Sensitive (#1540): agent config blobs routinely carry API keys/credentials,
|
|
47
|
+
* so this is excluded from generated API/MCP responses and rejected as a
|
|
48
|
+
* `where` filter key.
|
|
49
|
+
*/
|
|
50
|
+
configData: Record<string, any>;
|
|
51
|
+
/**
|
|
52
|
+
* Schema version for future migrations
|
|
53
|
+
*/
|
|
54
|
+
schemaVersion: number;
|
|
55
|
+
/**
|
|
56
|
+
* Load all configs for a specific agent
|
|
57
|
+
*
|
|
58
|
+
* @param agentId - Agent instance ID
|
|
59
|
+
* @param options - Database options
|
|
60
|
+
* @returns Map of slotId → configData
|
|
61
|
+
*/
|
|
62
|
+
static forAgent(agentId: string, options: SmrtClassOptions): Promise<Map<string, any>>;
|
|
63
|
+
/**
|
|
64
|
+
* Load configs for multiple agents in a single query.
|
|
65
|
+
*
|
|
66
|
+
* @param agentIds - Agent instance IDs
|
|
67
|
+
* @param options - Database options
|
|
68
|
+
* @returns Map of agentId -> (slotId -> configData)
|
|
69
|
+
*/
|
|
70
|
+
static forAgents(agentIds: string[], options: SmrtClassOptions): Promise<Map<string, Map<string, any>>>;
|
|
71
|
+
/**
|
|
72
|
+
* Load config for a specific agent and slot
|
|
73
|
+
*
|
|
74
|
+
* @param agentId - Agent instance ID
|
|
75
|
+
* @param slotId - UI slot ID
|
|
76
|
+
* @param options - Database options
|
|
77
|
+
* @returns Config data or undefined if not found
|
|
78
|
+
*/
|
|
79
|
+
static forSlot(agentId: string, slotId: string, options: SmrtClassOptions): Promise<any | undefined>;
|
|
80
|
+
/**
|
|
81
|
+
* Save or update config for an agent slot
|
|
82
|
+
*
|
|
83
|
+
* @param data - Config data including agentId, agentClass, slotId, configData
|
|
84
|
+
* @param options - Database options
|
|
85
|
+
* @returns Saved AgentConfig instance
|
|
86
|
+
*/
|
|
87
|
+
static saveSlot(data: {
|
|
88
|
+
agentId: string;
|
|
89
|
+
agentClass: string;
|
|
90
|
+
slotId: string;
|
|
91
|
+
configData: Record<string, any>;
|
|
92
|
+
}, options: SmrtClassOptions): Promise<AgentConfig>;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Collection for AgentConfig objects
|
|
96
|
+
*/
|
|
97
|
+
export declare class AgentConfigCollection extends SmrtCollection<AgentConfig> {
|
|
98
|
+
static readonly _itemClass: typeof AgentConfig;
|
|
99
|
+
/**
|
|
100
|
+
* Find all configs for a specific tenant
|
|
101
|
+
* @param tenantId - Tenant ID to filter by
|
|
102
|
+
* @returns Array of AgentConfig objects for the tenant
|
|
103
|
+
*/
|
|
104
|
+
findByTenant(tenantId: string): Promise<AgentConfig[]>;
|
|
105
|
+
/**
|
|
106
|
+
* Find all global configs (not associated with any tenant)
|
|
107
|
+
* @returns Array of global AgentConfig objects
|
|
108
|
+
*/
|
|
109
|
+
findGlobal(): Promise<AgentConfig[]>;
|
|
110
|
+
/**
|
|
111
|
+
* Find configs for a tenant including global configs
|
|
112
|
+
* @param tenantId - Tenant ID to include
|
|
113
|
+
* @returns Array of AgentConfig objects for the tenant and global configs
|
|
114
|
+
*/
|
|
115
|
+
findWithGlobals(tenantId: string): Promise<AgentConfig[]>;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EACrB,cAAc,EACd,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAIlC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAOa,WAAY,SAAQ,UAAU;IACzC;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;OAEG;IAEH,OAAO,EAAE,MAAM,CAAM;IAErB;;OAEG;IAEH,UAAU,EAAE,MAAM,CAAM;IAExB;;OAEG;IAEH,MAAM,EAAE,MAAM,CAAM;IAEpB;;;;;;OAMG;IAEH,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAM;IAErC;;OAEG;IAEH,aAAa,EAAE,MAAM,CAAK;IAE1B;;;;;;OAMG;WACU,QAAQ,CACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAK5B;;;;;;OAMG;WACU,SAAS,CACpB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAqBzC;;;;;;;OAOG;WACU,OAAO,CAClB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAS3B;;;;;;OAMG;WACU,QAAQ,CACnB,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACjC,EACD,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,WAAW,CAAC;CA8BxB;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,cAAc,CAAC,WAAW,CAAC;IACpE,MAAM,CAAC,QAAQ,CAAC,UAAU,qBAAe;IAEzC;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAI5D;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAI1C;;;;OAIG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAMhE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return the canonical agent type identifier for storage and dispatch routing.
|
|
3
|
+
*
|
|
4
|
+
* Uses the registry's qualified name when available and falls back to the input
|
|
5
|
+
* name for dynamically defined or unregistered classes.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getAgentTypeName(name: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Return the human-readable class name for UI and logs.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getAgentClassName(name: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Return all meaningful aliases for an agent type.
|
|
14
|
+
*
|
|
15
|
+
* The qualified name is first so persistence lookups prefer canonical rows,
|
|
16
|
+
* while the simple class name keeps legacy rows discoverable during migration.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getAgentTypeAliases(name: string): string[];
|
|
19
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI1D"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type { ConfigResolver, LazyConfigSentinel, ResolveLazyConfigOptions, } from '@happyvertical/smrt-core';
|
|
2
|
+
export { getClassConfigResolvers, getConfigResolver, isLazyConfigSentinel, listConfigResolvers, registerConfigResolver, resetConfigResolvers, resolveLazyConfig, unregisterConfigResolver, } from '@happyvertical/smrt-core';
|
|
3
|
+
export { Agent, type AgentOptions } from './agent.js';
|
|
4
|
+
export { type AgentAIOptions, type AgentAISecretFallback, resolveAgentAIOptions, } from './ai-config.js';
|
|
5
|
+
export { AgentConfig, AgentConfigCollection } from './config.js';
|
|
6
|
+
export type { AgentWithInterestsOptions, AsyncQualifierFn, InterestFilter, InterestHandlerFn, InterestOptions, InterestResult, ObjectFilter, ObjectInterestConfig, QueryFn, } from './interests.js';
|
|
7
|
+
export { mergeFilters, normalizeSort } from './interests.js';
|
|
8
|
+
export { AgentSchedule, AgentScheduleCollection, type ScheduleStatus, } from './schedule.js';
|
|
9
|
+
export type { SummaryArticleImage, SummaryArticleOptions, SummaryArticleResult, } from './summary-article.js';
|
|
10
|
+
export { type ResolvedAgentAvailability, TenantAgent, TenantAgentCollection, type TenantAgentStatus, } from './tenant-agent.js';
|
|
11
|
+
export type { AgentStatusType } from './types.js';
|
|
12
|
+
export { type AdminPanelBaseProps, type AgentAdminExport, type AgentAdminNavItem, type AgentAdminRootProps, type AgentAdminRoute, type AgentManifestInfo, type AgentRouteLoadContext, type AgentRouteLoadFn, type AgentUIComponentRegistry, AgentUIRegistry, type AgentUISlot, type AgentUISlots, type ComponentType, createUIRegistry, } from './ui.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AAKH,OAAO,wBAAwB,CAAC;AAIhC,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EACV,yBAAyB,EACzB,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,uBAAuB,EACvB,KAAK,cAAc,GACpB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,yBAAyB,EAC9B,WAAW,EACX,qBAAqB,EACrB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
|