@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,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vite Plugin: Agent Auto-Registration
|
|
3
|
+
*
|
|
4
|
+
* Provides the `virtual:smrt-agent-registrations` virtual module.
|
|
5
|
+
* When imported, this module registers each agent's manifest with
|
|
6
|
+
* AgentUIRegistry and imports the agent's `./admin` entry (if it exists)
|
|
7
|
+
* for side-effect component registration.
|
|
8
|
+
*
|
|
9
|
+
* Agent packages are discovered from smrt.config.js's `agents` array,
|
|
10
|
+
* or from the `agents` option passed directly to the plugin.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* // vite.config.ts
|
|
15
|
+
* import { vitePluginAgentRoutes } from '@happyvertical/smrt-agents/vite';
|
|
16
|
+
*
|
|
17
|
+
* export default defineConfig({
|
|
18
|
+
* plugins: [
|
|
19
|
+
* sveltekit(),
|
|
20
|
+
* vitePluginAgentRoutes({
|
|
21
|
+
* agents: [
|
|
22
|
+
* { packageName: '@happyvertical/praeco', agentClass: 'Praeco' },
|
|
23
|
+
* ],
|
|
24
|
+
* }),
|
|
25
|
+
* ],
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* ```ts
|
|
30
|
+
* // In your app:
|
|
31
|
+
* import 'virtual:smrt-agent-registrations';
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export interface AgentRoutesPluginOptions {
|
|
35
|
+
/** Path to smrt.config.js (default: <project root>/smrt.config.js) */
|
|
36
|
+
configPath?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Agent packages to register. Falls back to reading smrt.config.js `agents` array
|
|
39
|
+
* if not provided. When provided, `agentClass` is used as a hint but the plugin
|
|
40
|
+
* still reads each package's manifest to discover the actual agent class.
|
|
41
|
+
*/
|
|
42
|
+
agents?: Array<{
|
|
43
|
+
packageName: string;
|
|
44
|
+
agentClass: string;
|
|
45
|
+
}>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Vite plugin that auto-registers agent manifests and admin components.
|
|
49
|
+
*
|
|
50
|
+
* Provides `virtual:smrt-agent-registrations` — import it to register
|
|
51
|
+
* all agents declared in smrt.config.js.
|
|
52
|
+
*/
|
|
53
|
+
export declare function vitePluginAgentRoutes(options?: AgentRoutesPluginOptions): {
|
|
54
|
+
name: string;
|
|
55
|
+
resolveId: (id: string) => string | undefined;
|
|
56
|
+
load: (id: string) => string | undefined;
|
|
57
|
+
configResolved?: (config: {
|
|
58
|
+
root: string;
|
|
59
|
+
}) => void;
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=vite-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-plugin.d.ts","sourceRoot":"","sources":["../src/vite-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAkBH,MAAM,WAAW,wBAAwB;IACvC,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CACJ;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,wBAA6B,GAAG;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC9C,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACzC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACrD,CAmNA"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { resolve, dirname } from "node:path";
|
|
4
|
+
import { e as extractAgentPackagesFromConfig } from "./chunks/manifest-utils-DLXfTOq0.js";
|
|
5
|
+
const VIRTUAL_MODULE_ID = "virtual:smrt-agent-registrations";
|
|
6
|
+
const RESOLVED_VIRTUAL_MODULE_ID = `\0${VIRTUAL_MODULE_ID}`;
|
|
7
|
+
function toSafeIdentifier(packageName) {
|
|
8
|
+
return packageName.replace("@", "").replace(/[/.-]/g, "_");
|
|
9
|
+
}
|
|
10
|
+
function vitePluginAgentRoutes(options = {}) {
|
|
11
|
+
let projectRoot = process.cwd();
|
|
12
|
+
let agentPackages = [];
|
|
13
|
+
return {
|
|
14
|
+
name: "smrt-agent-routes",
|
|
15
|
+
configResolved(config) {
|
|
16
|
+
projectRoot = config.root;
|
|
17
|
+
const configPath = options.configPath || resolve(projectRoot, "smrt.config.js");
|
|
18
|
+
try {
|
|
19
|
+
agentPackages = extractAgentPackagesFromConfig(configPath);
|
|
20
|
+
} catch {
|
|
21
|
+
}
|
|
22
|
+
if (agentPackages.length === 0 && options.agents) {
|
|
23
|
+
agentPackages = options.agents.map((a) => a.packageName);
|
|
24
|
+
}
|
|
25
|
+
if (agentPackages.length > 0) {
|
|
26
|
+
console.log(
|
|
27
|
+
`[smrt-agent-routes] Discovered ${agentPackages.length} agents: ${agentPackages.map((p) => p.split("/").pop()).join(", ")}`
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
resolveId(id) {
|
|
32
|
+
if (id === VIRTUAL_MODULE_ID) {
|
|
33
|
+
return RESOLVED_VIRTUAL_MODULE_ID;
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
load(id) {
|
|
37
|
+
if (id !== RESOLVED_VIRTUAL_MODULE_ID) return;
|
|
38
|
+
if (agentPackages.length === 0) {
|
|
39
|
+
return `// No agents configured in smrt.config.js
|
|
40
|
+
export const agentAdminRegistry = new Map();
|
|
41
|
+
export function initializeAgentRegistrations() {}
|
|
42
|
+
`;
|
|
43
|
+
}
|
|
44
|
+
const lines = [
|
|
45
|
+
"/**",
|
|
46
|
+
" * Auto-generated agent registrations",
|
|
47
|
+
` * Source: smrt.config.js (${agentPackages.length} agents)`,
|
|
48
|
+
" * Generated by @happyvertical/smrt-agents/vite",
|
|
49
|
+
" */",
|
|
50
|
+
"import { AgentUIRegistry } from '@happyvertical/smrt-agents/ui';",
|
|
51
|
+
""
|
|
52
|
+
];
|
|
53
|
+
const registrations = [];
|
|
54
|
+
for (let i = 0; i < agentPackages.length; i++) {
|
|
55
|
+
const pkg = agentPackages[i];
|
|
56
|
+
const safeName = toSafeIdentifier(pkg);
|
|
57
|
+
const manifestVar = `manifest_${safeName}`;
|
|
58
|
+
let agentClass = null;
|
|
59
|
+
let manifestPath = null;
|
|
60
|
+
try {
|
|
61
|
+
const localRequire = createRequire(
|
|
62
|
+
resolve(projectRoot, "package.json")
|
|
63
|
+
);
|
|
64
|
+
manifestPath = localRequire.resolve(`${pkg}/manifest`);
|
|
65
|
+
const manifestContent = readFileSync(manifestPath, "utf-8");
|
|
66
|
+
const manifest = JSON.parse(manifestContent);
|
|
67
|
+
for (const obj of Object.values(manifest.objects)) {
|
|
68
|
+
if (obj.agent) {
|
|
69
|
+
agentClass = obj.className;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
} catch {
|
|
74
|
+
console.warn(
|
|
75
|
+
`[smrt-agent-routes] Could not read manifest for ${pkg} — skipping`
|
|
76
|
+
);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (!agentClass) {
|
|
80
|
+
console.warn(
|
|
81
|
+
`[smrt-agent-routes] No agent object found in manifest for ${pkg} — skipping`
|
|
82
|
+
);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
let hasAdmin = false;
|
|
86
|
+
try {
|
|
87
|
+
let pkgDir = dirname(manifestPath);
|
|
88
|
+
while (!existsSync(resolve(pkgDir, "package.json"))) {
|
|
89
|
+
const parent = dirname(pkgDir);
|
|
90
|
+
if (parent === pkgDir) {
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
pkgDir = parent;
|
|
94
|
+
}
|
|
95
|
+
const pkgJson = JSON.parse(
|
|
96
|
+
readFileSync(resolve(pkgDir, "package.json"), "utf-8")
|
|
97
|
+
);
|
|
98
|
+
hasAdmin = !!pkgJson.exports?.["./admin"];
|
|
99
|
+
} catch {
|
|
100
|
+
}
|
|
101
|
+
registrations.push({
|
|
102
|
+
packageName: pkg,
|
|
103
|
+
manifestVar,
|
|
104
|
+
agentClass,
|
|
105
|
+
hasAdmin
|
|
106
|
+
});
|
|
107
|
+
lines.push(`import ${manifestVar} from '${pkg}/manifest';`);
|
|
108
|
+
}
|
|
109
|
+
lines.push("");
|
|
110
|
+
lines.push(
|
|
111
|
+
"function extractAgentManifest(manifest, agentClass) {",
|
|
112
|
+
" for (const obj of Object.values(manifest.objects)) {",
|
|
113
|
+
" if (obj.className === agentClass && obj.agent) {",
|
|
114
|
+
" return obj.agent;",
|
|
115
|
+
" }",
|
|
116
|
+
" }",
|
|
117
|
+
" return null;",
|
|
118
|
+
"}",
|
|
119
|
+
""
|
|
120
|
+
);
|
|
121
|
+
lines.push("// Register agent manifests");
|
|
122
|
+
for (const { manifestVar, agentClass } of registrations) {
|
|
123
|
+
const key = JSON.stringify(agentClass);
|
|
124
|
+
lines.push(
|
|
125
|
+
`{`,
|
|
126
|
+
` const m = extractAgentManifest(${manifestVar}, ${key});`,
|
|
127
|
+
` if (m) AgentUIRegistry.registerManifest(${key}, m);`,
|
|
128
|
+
`}`
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
lines.push("");
|
|
132
|
+
lines.push(
|
|
133
|
+
"// Import admin modules (AgentAdminExport contract + legacy slot registration)"
|
|
134
|
+
);
|
|
135
|
+
const adminImports = [];
|
|
136
|
+
for (const { packageName, agentClass, hasAdmin } of registrations) {
|
|
137
|
+
if (hasAdmin) {
|
|
138
|
+
const adminVar = `admin_${toSafeIdentifier(packageName)}`;
|
|
139
|
+
lines.push(`import * as ${adminVar} from '${packageName}/admin';`);
|
|
140
|
+
adminImports.push({ agentClass, adminVar });
|
|
141
|
+
} else {
|
|
142
|
+
lines.push(
|
|
143
|
+
`// ${packageName}/admin — not available (no ./admin export)`
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
lines.push("");
|
|
148
|
+
lines.push("// Agent admin registry: agentClass -> AgentAdminExport");
|
|
149
|
+
lines.push("export const agentAdminRegistry = new Map();");
|
|
150
|
+
for (const { agentClass, adminVar } of adminImports) {
|
|
151
|
+
const key = JSON.stringify(agentClass);
|
|
152
|
+
lines.push(
|
|
153
|
+
`if (${adminVar}.default) {`,
|
|
154
|
+
` agentAdminRegistry.set(${key}, {`,
|
|
155
|
+
` default: ${adminVar}.default,`,
|
|
156
|
+
` createAPIClient: ${adminVar}.createAPIClient,`,
|
|
157
|
+
` navItems: ${adminVar}.navItems,`,
|
|
158
|
+
` });`,
|
|
159
|
+
`}`
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
lines.push("");
|
|
163
|
+
lines.push("// Export for explicit initialization if needed");
|
|
164
|
+
lines.push("export function initializeAgentRegistrations() {}");
|
|
165
|
+
lines.push("");
|
|
166
|
+
return lines.join("\n");
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export {
|
|
171
|
+
vitePluginAgentRoutes
|
|
172
|
+
};
|
|
173
|
+
//# sourceMappingURL=vite-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-plugin.js","sources":["../src/vite-plugin.ts"],"sourcesContent":["/**\n * Vite Plugin: Agent Auto-Registration\n *\n * Provides the `virtual:smrt-agent-registrations` virtual module.\n * When imported, this module registers each agent's manifest with\n * AgentUIRegistry and imports the agent's `./admin` entry (if it exists)\n * for side-effect component registration.\n *\n * Agent packages are discovered from smrt.config.js's `agents` array,\n * or from the `agents` option passed directly to the plugin.\n *\n * @example\n * ```ts\n * // vite.config.ts\n * import { vitePluginAgentRoutes } from '@happyvertical/smrt-agents/vite';\n *\n * export default defineConfig({\n * plugins: [\n * sveltekit(),\n * vitePluginAgentRoutes({\n * agents: [\n * { packageName: '@happyvertical/praeco', agentClass: 'Praeco' },\n * ],\n * }),\n * ],\n * });\n * ```\n *\n * ```ts\n * // In your app:\n * import 'virtual:smrt-agent-registrations';\n * ```\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport { dirname, resolve } from 'node:path';\nimport {\n extractAgentPackagesFromConfig,\n type PackageManifest,\n} from './server/manifest-utils.js';\n\nconst VIRTUAL_MODULE_ID = 'virtual:smrt-agent-registrations';\nconst RESOLVED_VIRTUAL_MODULE_ID = `\\0${VIRTUAL_MODULE_ID}`;\n\n/** Convert a package name to a safe JS identifier (e.g., '@test/with-admin' → 'test_with_admin') */\nfunction toSafeIdentifier(packageName: string): string {\n return packageName.replace('@', '').replace(/[/.-]/g, '_');\n}\n\nexport interface AgentRoutesPluginOptions {\n /** Path to smrt.config.js (default: <project root>/smrt.config.js) */\n configPath?: string;\n /**\n * Agent packages to register. Falls back to reading smrt.config.js `agents` array\n * if not provided. When provided, `agentClass` is used as a hint but the plugin\n * still reads each package's manifest to discover the actual agent class.\n */\n agents?: Array<{\n packageName: string;\n agentClass: string;\n }>;\n}\n\n/**\n * Vite plugin that auto-registers agent manifests and admin components.\n *\n * Provides `virtual:smrt-agent-registrations` — import it to register\n * all agents declared in smrt.config.js.\n */\nexport function vitePluginAgentRoutes(options: AgentRoutesPluginOptions = {}): {\n name: string;\n resolveId: (id: string) => string | undefined;\n load: (id: string) => string | undefined;\n configResolved?: (config: { root: string }) => void;\n} {\n let projectRoot = process.cwd();\n let agentPackages: string[] = [];\n\n return {\n name: 'smrt-agent-routes',\n\n configResolved(config: { root: string }) {\n projectRoot = config.root;\n\n // Try to load smrt.config.js using shared config extraction\n const configPath =\n options.configPath || resolve(projectRoot, 'smrt.config.js');\n\n try {\n agentPackages = extractAgentPackagesFromConfig(configPath);\n } catch {\n // Config not found or unreadable — fall back to options.agents\n }\n\n // Fall back to legacy options.agents if config didn't provide packages\n if (agentPackages.length === 0 && options.agents) {\n agentPackages = options.agents.map((a) => a.packageName);\n }\n\n if (agentPackages.length > 0) {\n console.log(\n `[smrt-agent-routes] Discovered ${agentPackages.length} agents: ${agentPackages.map((p) => p.split('/').pop()).join(', ')}`,\n );\n }\n },\n\n resolveId(id: string) {\n if (id === VIRTUAL_MODULE_ID) {\n return RESOLVED_VIRTUAL_MODULE_ID;\n }\n },\n\n load(id: string) {\n if (id !== RESOLVED_VIRTUAL_MODULE_ID) return;\n\n if (agentPackages.length === 0) {\n return `// No agents configured in smrt.config.js\\nexport const agentAdminRegistry = new Map();\\nexport function initializeAgentRegistrations() {}\\n`;\n }\n\n const lines: string[] = [\n '/**',\n ' * Auto-generated agent registrations',\n ` * Source: smrt.config.js (${agentPackages.length} agents)`,\n ' * Generated by @happyvertical/smrt-agents/vite',\n ' */',\n \"import { AgentUIRegistry } from '@happyvertical/smrt-agents/ui';\",\n '',\n ];\n\n // For each agent package, try to resolve its manifest and find the agent class\n const registrations: Array<{\n packageName: string;\n manifestVar: string;\n agentClass: string | null;\n hasAdmin: boolean;\n }> = [];\n\n for (let i = 0; i < agentPackages.length; i++) {\n const pkg = agentPackages[i];\n const safeName = toSafeIdentifier(pkg);\n const manifestVar = `manifest_${safeName}`;\n\n // Try to read the manifest to extract the agent class name\n let agentClass: string | null = null;\n let manifestPath: string | null = null;\n try {\n const localRequire = createRequire(\n resolve(projectRoot, 'package.json'),\n );\n 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 agentClass = obj.className;\n break;\n }\n }\n } catch {\n // Manifest not found or unparseable — skip this agent\n console.warn(\n `[smrt-agent-routes] Could not read manifest for ${pkg} — skipping`,\n );\n continue;\n }\n\n if (!agentClass) {\n console.warn(\n `[smrt-agent-routes] No agent object found in manifest for ${pkg} — skipping`,\n );\n continue;\n }\n\n // Check if ./admin export exists by reading the package's exports field.\n // We can't use createRequire().resolve() because CJS resolution doesn't\n // recognise 'svelte' or 'import' conditions — only 'default'/'require'/'node'.\n // Derive the package root from the manifest path we already resolved.\n let hasAdmin = false;\n try {\n let pkgDir = dirname(manifestPath!);\n while (!existsSync(resolve(pkgDir, 'package.json'))) {\n const parent = dirname(pkgDir);\n if (parent === pkgDir) {\n break;\n }\n pkgDir = parent;\n }\n const pkgJson = JSON.parse(\n readFileSync(resolve(pkgDir, 'package.json'), 'utf-8'),\n );\n hasAdmin = !!pkgJson.exports?.['./admin'];\n } catch {\n // Failed to read package.json or parse exports — treat as no admin export\n }\n\n registrations.push({\n packageName: pkg,\n manifestVar,\n agentClass,\n hasAdmin,\n });\n\n // Import manifest\n lines.push(`import ${manifestVar} from '${pkg}/manifest';`);\n }\n\n lines.push('');\n\n // Generate the extractAgentManifest helper inline in the virtual module.\n // This runs in the browser, so it can't import from ./server.\n lines.push(\n 'function extractAgentManifest(manifest, agentClass) {',\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\n // Register manifests\n lines.push('// Register agent manifests');\n for (const { manifestVar, agentClass } of registrations) {\n const key = JSON.stringify(agentClass);\n lines.push(\n `{`,\n ` const m = extractAgentManifest(${manifestVar}, ${key});`,\n ` if (m) AgentUIRegistry.registerManifest(${key}, m);`,\n `}`,\n );\n }\n lines.push('');\n\n // Import admin modules — named imports for AgentAdminExport contract,\n // plus side-effect registration of legacy slot components\n lines.push(\n '// Import admin modules (AgentAdminExport contract + legacy slot registration)',\n );\n\n const adminImports: Array<{ agentClass: string; adminVar: string }> = [];\n\n for (const { packageName, agentClass, hasAdmin } of registrations) {\n if (hasAdmin) {\n const adminVar = `admin_${toSafeIdentifier(packageName)}`;\n // Use namespace import so missing optional exports (navItems) resolve\n // as undefined instead of throwing a hard ESM error.\n lines.push(`import * as ${adminVar} from '${packageName}/admin';`);\n adminImports.push({ agentClass: agentClass!, adminVar });\n } else {\n lines.push(\n `// ${packageName}/admin — not available (no ./admin export)`,\n );\n }\n }\n\n lines.push('');\n\n // Build the agentAdminRegistry Map\n lines.push('// Agent admin registry: agentClass -> AgentAdminExport');\n lines.push('export const agentAdminRegistry = new Map();');\n for (const { agentClass, adminVar } of adminImports) {\n const key = JSON.stringify(agentClass);\n lines.push(\n `if (${adminVar}.default) {`,\n ` agentAdminRegistry.set(${key}, {`,\n ` default: ${adminVar}.default,`,\n ` createAPIClient: ${adminVar}.createAPIClient,`,\n ` navItems: ${adminVar}.navItems,`,\n ` });`,\n `}`,\n );\n }\n\n lines.push('');\n lines.push('// Export for explicit initialization if needed');\n lines.push('export function initializeAgentRegistrations() {}');\n lines.push('');\n\n return lines.join('\\n');\n },\n };\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@happyvertical/smrt-agents",
|
|
3
|
+
"version": "0.30.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Agent framework for building autonomous actors in the SMRT ecosystem",
|
|
6
|
+
"author": "HappyVertical",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./ui": {
|
|
16
|
+
"types": "./dist/ui.d.ts",
|
|
17
|
+
"import": "./dist/ui.js"
|
|
18
|
+
},
|
|
19
|
+
"./vite": {
|
|
20
|
+
"types": "./dist/vite-plugin.d.ts",
|
|
21
|
+
"import": "./dist/vite-plugin.js"
|
|
22
|
+
},
|
|
23
|
+
"./server": {
|
|
24
|
+
"types": "./dist/server/index.d.ts",
|
|
25
|
+
"import": "./dist/server.js"
|
|
26
|
+
},
|
|
27
|
+
"./manifest": "./dist/manifest.json",
|
|
28
|
+
"./manifest.json": "./dist/manifest.json",
|
|
29
|
+
"./playground": {
|
|
30
|
+
"types": "./dist/playground.d.ts",
|
|
31
|
+
"import": "./dist/playground.js"
|
|
32
|
+
},
|
|
33
|
+
"./svelte": {
|
|
34
|
+
"types": "./dist/svelte/index.d.ts",
|
|
35
|
+
"svelte": "./dist/svelte/index.js",
|
|
36
|
+
"import": "./dist/svelte/index.js"
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"files": [
|
|
40
|
+
"dist",
|
|
41
|
+
"CLAUDE.md",
|
|
42
|
+
"AGENTS.md"
|
|
43
|
+
],
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"svelte": "^5.0.0"
|
|
46
|
+
},
|
|
47
|
+
"peerDependenciesMeta": {
|
|
48
|
+
"svelte": {
|
|
49
|
+
"optional": true
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@happyvertical/ai": "^0.74.7",
|
|
54
|
+
"@happyvertical/files": "^0.74.7",
|
|
55
|
+
"@happyvertical/utils": "^0.74.7",
|
|
56
|
+
"@happyvertical/smrt-core": "0.30.0",
|
|
57
|
+
"@happyvertical/smrt-secrets": "0.30.0",
|
|
58
|
+
"@happyvertical/smrt-config": "0.30.0",
|
|
59
|
+
"@happyvertical/smrt-tenancy": "0.30.0",
|
|
60
|
+
"@happyvertical/smrt-types": "0.30.0",
|
|
61
|
+
"@happyvertical/smrt-ui": "0.30.0",
|
|
62
|
+
"@happyvertical/smrt-users": "0.30.0"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@happyvertical/logger": "^0.74.7",
|
|
66
|
+
"@happyvertical/sql": "^0.74.7",
|
|
67
|
+
"@sentry/node": "^10.51.0",
|
|
68
|
+
"@sveltejs/package": "^2.5.7",
|
|
69
|
+
"@types/node": "25.0.9",
|
|
70
|
+
"fast-glob": "3.3.3",
|
|
71
|
+
"svelte-check": "^4.3.5",
|
|
72
|
+
"svelte": "^5.18.0",
|
|
73
|
+
"typescript": "^5.9.3",
|
|
74
|
+
"vite": "^7.3.1",
|
|
75
|
+
"vitest": "^4.0.17",
|
|
76
|
+
"@happyvertical/smrt-vitest": "0.30.0"
|
|
77
|
+
},
|
|
78
|
+
"keywords": [
|
|
79
|
+
"agent",
|
|
80
|
+
"automation",
|
|
81
|
+
"smrt",
|
|
82
|
+
"framework"
|
|
83
|
+
],
|
|
84
|
+
"publishConfig": {
|
|
85
|
+
"registry": "https://registry.npmjs.org",
|
|
86
|
+
"access": "public"
|
|
87
|
+
},
|
|
88
|
+
"repository": {
|
|
89
|
+
"type": "git",
|
|
90
|
+
"url": "https://github.com/happyvertical/smrt.git",
|
|
91
|
+
"directory": "packages/agents"
|
|
92
|
+
},
|
|
93
|
+
"scripts": {
|
|
94
|
+
"build": "vite build --mode library && svelte-package -i src/svelte -o dist/svelte --tsconfig tsconfig.svelte.json",
|
|
95
|
+
"build:watch": "vite build --mode library --watch",
|
|
96
|
+
"clean": "rm -rf dist",
|
|
97
|
+
"dev": "vite dev",
|
|
98
|
+
"check": "pnpm exec svelte-check --tsconfig ./tsconfig.svelte.json",
|
|
99
|
+
"typecheck": "tsc --noEmit && node ../../scripts/svelte-check-a11y.mjs --tsconfig ./tsconfig.svelte.json",
|
|
100
|
+
"test": "vitest run",
|
|
101
|
+
"test:watch": "vitest",
|
|
102
|
+
"verify:pack": "node ../../scripts/verify-package-types-exports.js ."
|
|
103
|
+
}
|
|
104
|
+
}
|