@happyvertical/smrt-agents 0.37.2 → 0.37.4

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.
@@ -1,71 +0,0 @@
1
- import { readFileSync, existsSync } from "node:fs";
2
- import { createRequire } from "node:module";
3
- import { resolve } from "node:path";
4
- import { createLogger } from "@happyvertical/logger";
5
- import { AgentUIRegistry } from "../ui.js";
6
- const logger = createLogger({ level: "info" });
7
- function extractAgentManifest(manifest, agentClass) {
8
- for (const obj of Object.values(manifest.objects)) {
9
- if (obj.className === agentClass && obj.agent) {
10
- return obj.agent;
11
- }
12
- }
13
- return null;
14
- }
15
- function loadManifestsFromPackages(packages, projectRoot) {
16
- const result = /* @__PURE__ */ new Map();
17
- const localRequire = createRequire(resolve(projectRoot, "package.json"));
18
- for (const pkg of packages) {
19
- try {
20
- const manifestPath = localRequire.resolve(`${pkg}/manifest`);
21
- const manifestContent = readFileSync(manifestPath, "utf-8");
22
- const manifest = JSON.parse(manifestContent);
23
- for (const obj of Object.values(manifest.objects)) {
24
- if (obj.agent) {
25
- const agentClass = obj.className;
26
- AgentUIRegistry.registerManifest(agentClass, obj.agent);
27
- result.set(agentClass, obj.agent);
28
- break;
29
- }
30
- }
31
- } catch {
32
- logger.warn(
33
- `[smrt-agents/server] Could not load manifest for ${pkg} — skipping`
34
- );
35
- }
36
- }
37
- return result;
38
- }
39
- function extractAgentPackagesFromConfig(configPath) {
40
- const configContent = readFileSync(configPath, "utf-8");
41
- const agentMatches = configContent.match(/agents\s*:\s*\[([^\]]*)\]/s);
42
- if (!agentMatches) return [];
43
- const agentsBlock = agentMatches[1];
44
- const withoutComments = agentsBlock.replace(/\/\/.*$/gm, "");
45
- return [...withoutComments.matchAll(/['"]([^'"]+)['"]/g)].map((m) => m[1]);
46
- }
47
- function loadManifestsFromConfig(configPath, projectRoot) {
48
- const root = projectRoot || process.cwd();
49
- const resolvedConfigPath = configPath || resolve(root, "smrt.config.js");
50
- if (!existsSync(resolvedConfigPath)) {
51
- logger.warn(
52
- `[smrt-agents/server] Config file not found: ${resolvedConfigPath}`
53
- );
54
- return /* @__PURE__ */ new Map();
55
- }
56
- const packages = extractAgentPackagesFromConfig(resolvedConfigPath);
57
- if (packages.length === 0) {
58
- logger.warn(
59
- `[smrt-agents/server] No agents found in config: ${resolvedConfigPath}`
60
- );
61
- return /* @__PURE__ */ new Map();
62
- }
63
- return loadManifestsFromPackages(packages, root);
64
- }
65
- export {
66
- extractAgentManifest as a,
67
- loadManifestsFromPackages as b,
68
- extractAgentPackagesFromConfig as e,
69
- loadManifestsFromConfig as l
70
- };
71
- //# sourceMappingURL=manifest-utils-CMeEKwgq.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manifest-utils-CMeEKwgq.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 { createLogger } from '@happyvertical/logger';\nimport { type AgentManifestInfo, AgentUIRegistry } from '../ui.js';\n\nconst logger = createLogger({ level: 'info' });\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 logger.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 logger.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 logger.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":";;;;;AAeA,MAAM,SAAS,aAAa,EAAE,OAAO,QAAQ;AA6BtC,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,aAAO;AAAA,QACL,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,WAAO;AAAA,MACL,+CAA+C,kBAAkB;AAAA,IAAA;AAEnE,+BAAW,IAAA;AAAA,EACb;AAEA,QAAM,WAAW,+BAA+B,kBAAkB;AAClE,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO;AAAA,MACL,mDAAmD,kBAAkB;AAAA,IAAA;AAEvE,+BAAW,IAAA;AAAA,EACb;AAEA,SAAO,0BAA0B,UAAU,IAAI;AACjD;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"action-types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"summary-article.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}