@happyvertical/smrt-agents 0.31.0 → 0.31.1
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/dist/agent.d.ts.map +1 -1
- package/dist/chunks/{manifest-utils-DLXfTOq0.js → manifest-utils-CMeEKwgq.js} +6 -4
- package/dist/chunks/manifest-utils-CMeEKwgq.js.map +1 -0
- package/dist/index.js +30 -85
- package/dist/index.js.map +1 -1
- package/dist/interests.d.ts +14 -2
- package/dist/interests.d.ts.map +1 -1
- package/dist/manifest.json +2 -54
- package/dist/schedule.d.ts +17 -29
- package/dist/schedule.d.ts.map +1 -1
- package/dist/server/manifest-utils.d.ts.map +1 -1
- package/dist/server.js +1 -1
- package/dist/smrt-knowledge.json +5 -10
- package/dist/svelte/components/AgentRunHistory.svelte +10 -0
- package/dist/svelte/components/AgentRunHistory.svelte.d.ts.map +1 -1
- package/dist/svelte/components/AgentScheduleList.svelte +18 -8
- package/dist/svelte/components/AgentScheduleList.svelte.d.ts.map +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +6 -2
- package/dist/ui.js.map +1 -1
- package/dist/vite-plugin.js +1 -1
- package/package.json +9 -9
- package/dist/chunks/manifest-utils-DLXfTOq0.js.map +0 -1
package/dist/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "1.0.0",
|
|
3
|
-
"timestamp":
|
|
3
|
+
"timestamp": 1782192603900,
|
|
4
4
|
"packageName": "@happyvertical/smrt-agents",
|
|
5
|
-
"packageVersion": "0.31.
|
|
5
|
+
"packageVersion": "0.31.1",
|
|
6
6
|
"objects": {
|
|
7
7
|
"@happyvertical/smrt-agents:Agent": {
|
|
8
8
|
"name": "agent",
|
|
@@ -1239,36 +1239,6 @@
|
|
|
1239
1239
|
"isStatic": false,
|
|
1240
1240
|
"isPublic": true
|
|
1241
1241
|
},
|
|
1242
|
-
"recordSuccess": {
|
|
1243
|
-
"name": "recordSuccess",
|
|
1244
|
-
"async": true,
|
|
1245
|
-
"parameters": [],
|
|
1246
|
-
"returnType": "Promise<void>",
|
|
1247
|
-
"isStatic": false,
|
|
1248
|
-
"isPublic": true
|
|
1249
|
-
},
|
|
1250
|
-
"recordFailure": {
|
|
1251
|
-
"name": "recordFailure",
|
|
1252
|
-
"async": true,
|
|
1253
|
-
"parameters": [
|
|
1254
|
-
{
|
|
1255
|
-
"name": "error",
|
|
1256
|
-
"type": "string",
|
|
1257
|
-
"optional": false
|
|
1258
|
-
}
|
|
1259
|
-
],
|
|
1260
|
-
"returnType": "Promise<void>",
|
|
1261
|
-
"isStatic": false,
|
|
1262
|
-
"isPublic": true
|
|
1263
|
-
},
|
|
1264
|
-
"isDue": {
|
|
1265
|
-
"name": "isDue",
|
|
1266
|
-
"async": false,
|
|
1267
|
-
"parameters": [],
|
|
1268
|
-
"returnType": "boolean",
|
|
1269
|
-
"isStatic": false,
|
|
1270
|
-
"isPublic": true
|
|
1271
|
-
},
|
|
1272
1242
|
"calculateNextRun": {
|
|
1273
1243
|
"name": "calculateNextRun",
|
|
1274
1244
|
"async": false,
|
|
@@ -1544,20 +1514,6 @@
|
|
|
1544
1514
|
"isStatic": false,
|
|
1545
1515
|
"isPublic": true
|
|
1546
1516
|
},
|
|
1547
|
-
"listDue": {
|
|
1548
|
-
"name": "listDue",
|
|
1549
|
-
"async": true,
|
|
1550
|
-
"parameters": [
|
|
1551
|
-
{
|
|
1552
|
-
"name": "options",
|
|
1553
|
-
"type": "object",
|
|
1554
|
-
"optional": true
|
|
1555
|
-
}
|
|
1556
|
-
],
|
|
1557
|
-
"returnType": "Promise<AgentSchedule[]>",
|
|
1558
|
-
"isStatic": false,
|
|
1559
|
-
"isPublic": true
|
|
1560
|
-
},
|
|
1561
1517
|
"listByAgentType": {
|
|
1562
1518
|
"name": "listByAgentType",
|
|
1563
1519
|
"async": true,
|
|
@@ -1576,14 +1532,6 @@
|
|
|
1576
1532
|
"returnType": "Promise<AgentSchedule[]>",
|
|
1577
1533
|
"isStatic": false,
|
|
1578
1534
|
"isPublic": true
|
|
1579
|
-
},
|
|
1580
|
-
"stats": {
|
|
1581
|
-
"name": "stats",
|
|
1582
|
-
"async": true,
|
|
1583
|
-
"parameters": [],
|
|
1584
|
-
"returnType": "Promise<object>",
|
|
1585
|
-
"isStatic": false,
|
|
1586
|
-
"isPublic": true
|
|
1587
1535
|
}
|
|
1588
1536
|
},
|
|
1589
1537
|
"decoratorConfig": {
|
package/dist/schedule.d.ts
CHANGED
|
@@ -86,18 +86,6 @@ export declare class AgentSchedule extends SmrtObject {
|
|
|
86
86
|
* Resume a paused schedule
|
|
87
87
|
*/
|
|
88
88
|
resume(): Promise<void>;
|
|
89
|
-
/**
|
|
90
|
-
* Record a successful run
|
|
91
|
-
*/
|
|
92
|
-
recordSuccess(): Promise<void>;
|
|
93
|
-
/**
|
|
94
|
-
* Record a failed run
|
|
95
|
-
*/
|
|
96
|
-
recordFailure(error: string): Promise<void>;
|
|
97
|
-
/**
|
|
98
|
-
* Check if the schedule is due to run
|
|
99
|
-
*/
|
|
100
|
-
isDue(): boolean;
|
|
101
89
|
/**
|
|
102
90
|
* Calculate the next run time based on cron expression
|
|
103
91
|
*/
|
|
@@ -139,12 +127,6 @@ export declare class AgentScheduleCollection extends SmrtCollection<AgentSchedul
|
|
|
139
127
|
listByStatus(status: ScheduleStatus | ScheduleStatus[], options?: {
|
|
140
128
|
limit?: number;
|
|
141
129
|
}): Promise<AgentSchedule[]>;
|
|
142
|
-
/**
|
|
143
|
-
* List schedules that are due to run
|
|
144
|
-
*/
|
|
145
|
-
listDue(options?: {
|
|
146
|
-
limit?: number;
|
|
147
|
-
}): Promise<AgentSchedule[]>;
|
|
148
130
|
/**
|
|
149
131
|
* List schedules for a specific agent type
|
|
150
132
|
*/
|
|
@@ -152,17 +134,23 @@ export declare class AgentScheduleCollection extends SmrtCollection<AgentSchedul
|
|
|
152
134
|
limit?: number;
|
|
153
135
|
includeDisabled?: boolean;
|
|
154
136
|
}): Promise<AgentSchedule[]>;
|
|
155
|
-
/**
|
|
156
|
-
* Get schedule statistics
|
|
157
|
-
*/
|
|
158
|
-
stats(): Promise<{
|
|
159
|
-
total: number;
|
|
160
|
-
active: number;
|
|
161
|
-
paused: number;
|
|
162
|
-
disabled: number;
|
|
163
|
-
error: number;
|
|
164
|
-
dueNow: number;
|
|
165
|
-
}>;
|
|
166
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Parse a cron expression and get the next run date.
|
|
140
|
+
*
|
|
141
|
+
* Supports standard 5-field cron format: minute hour day-of-month month
|
|
142
|
+
* day-of-week. Day-of-month / day-of-week follow POSIX OR semantics when both
|
|
143
|
+
* are restricted (see the loop body). Matched against the host's local time
|
|
144
|
+
* (not timezone-aware).
|
|
145
|
+
*
|
|
146
|
+
* Examples:
|
|
147
|
+
* - '0 2 * * *' - 2:00 AM daily
|
|
148
|
+
* - '0 0 * * 0' - Midnight on Sundays
|
|
149
|
+
* - 'x/15 * * * *' - Every 15 minutes (where x is asterisk)
|
|
150
|
+
* - '0 9 1 * *' - 9:00 AM on the 1st of every month
|
|
151
|
+
*
|
|
152
|
+
* Exported for unit testing of the matching logic.
|
|
153
|
+
*/
|
|
154
|
+
export declare function getNextCronDate(cron: string, _timezone?: string): Date;
|
|
167
155
|
export default AgentSchedule;
|
|
168
156
|
//# sourceMappingURL=schedule.d.ts.map
|
package/dist/schedule.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAQlC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAExE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAYa,aAAc,SAAQ,UAAU;IAC3C;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B,kEAAkE;IAElE,SAAS,EAAE,MAAM,CAAM;IAEvB,kEAAkE;IAElE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE9B;;;;;OAKG;IAEH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAE1C,yDAAyD;IAEzD,IAAI,EAAE,MAAM,CAAM;IAElB,sDAAsD;IAEtD,QAAQ,EAAE,MAAM,CAAS;IAEzB,sCAAsC;IAEtC,OAAO,EAAE,OAAO,CAAQ;IAExB,8BAA8B;IAE9B,MAAM,EAAE,cAAc,CAAY;IAElC,kCAAkC;IAElC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE5B,8BAA8B;IAE9B,OAAO,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE5B,6BAA6B;IAE7B,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAQ;IAE/C,yCAAyC;IAEzC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhC,2BAA2B;IAE3B,QAAQ,EAAE,MAAM,CAAK;IAErB,sCAAsC;IAEtC,YAAY,EAAE,MAAM,CAAK;IAEzB,kCAAkC;IAElC,YAAY,EAAE,MAAM,CAAK;IAEzB,oDAAoD;IAEpD,aAAa,EAAE,MAAM,CAAK;IAE1B,0CAA0C;IAE1C,YAAY,EAAE,MAAM,CAAK;IAEzB,oEAAoE;IAEpE,OAAO,EAAE,MAAM,CAAW;IAE1B,mDAAmD;IAEnD,MAAM,EAAE,MAAM,CAAS;IAEvB,sCAAsC;IAEtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAEzC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7B;;OAEG;
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../src/schedule.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,UAAU,EAEX,MAAM,0BAA0B,CAAC;AAQlC;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAExE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAYa,aAAc,SAAQ,UAAU;IAC3C;;;OAGG;IAEH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B,kEAAkE;IAElE,SAAS,EAAE,MAAM,CAAM;IAEvB,kEAAkE;IAElE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE9B;;;;;OAKG;IAEH,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAE1C,yDAAyD;IAEzD,IAAI,EAAE,MAAM,CAAM;IAElB,sDAAsD;IAEtD,QAAQ,EAAE,MAAM,CAAS;IAEzB,sCAAsC;IAEtC,OAAO,EAAE,OAAO,CAAQ;IAExB,8BAA8B;IAE9B,MAAM,EAAE,cAAc,CAAY;IAElC,kCAAkC;IAElC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE5B,8BAA8B;IAE9B,OAAO,EAAE,IAAI,GAAG,IAAI,CAAQ;IAE5B,6BAA6B;IAE7B,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAQ;IAE/C,yCAAyC;IAEzC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEhC,2BAA2B;IAE3B,QAAQ,EAAE,MAAM,CAAK;IAErB,sCAAsC;IAEtC,YAAY,EAAE,MAAM,CAAK;IAEzB,kCAAkC;IAElC,YAAY,EAAE,MAAM,CAAK;IAEzB,oDAAoD;IAEpD,aAAa,EAAE,MAAM,CAAK;IAE1B,0CAA0C;IAE1C,YAAY,EAAE,MAAM,CAAK;IAEzB,oEAAoE;IAEpE,OAAO,EAAE,MAAM,CAAW;IAE1B,mDAAmD;IAEnD,MAAM,EAAE,MAAM,CAAS;IAEvB,sCAAsC;IAEtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAEzC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7B;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAgBxB;;OAEG;IACH,cAAc,IAAI,MAAM;IAQxB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAQlC;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,cAAc,CAAC,aAAa,CAAC;IACxE,MAAM,CAAC,QAAQ,CAAC,UAAU,uBAAiB;IAE3C;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAI9D;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAI5C;;;;OAIG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAOjE;;OAEG;IACG,YAAY,CAChB,MAAM,EAAE,cAAc,GAAG,cAAc,EAAE,EACzC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAC/B,OAAO,CAAC,aAAa,EAAE,CAAC;IAU3B;;OAEG;IACG,eAAe,CACnB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAO,GAC1D,OAAO,CAAC,aAAa,EAAE,CAAC;CAgB5B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,IAAI,CA4D7E;AA8CD,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest-utils.d.ts","sourceRoot":"","sources":["../../src/server/manifest-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"manifest-utils.d.ts","sourceRoot":"","sources":["../../src/server/manifest-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAE,KAAK,iBAAiB,EAAmB,MAAM,UAAU,CAAC;AAInE;;GAEG;AACH,UAAU,cAAc;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,MAAM,GACjB,iBAAiB,GAAG,IAAI,CAO1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAAE,EAClB,WAAW,EAAE,MAAM,GAClB,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CA2BhC;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ3E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,CAAC,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAoBhC"}
|
package/dist/server.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { A as AgentConfig } from "./chunks/config-BYbOxt24.js";
|
|
2
|
-
import { a, e, l, b } from "./chunks/manifest-utils-
|
|
2
|
+
import { a, e, l, b } from "./chunks/manifest-utils-CMeEKwgq.js";
|
|
3
3
|
import { sanitizeConfig } from "@happyvertical/smrt-config";
|
|
4
4
|
function buildRouteMap(manifests) {
|
|
5
5
|
const routes = /* @__PURE__ */ new Map();
|
package/dist/smrt-knowledge.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"generatedAt": "2026-06-
|
|
3
|
+
"generatedAt": "2026-06-23T05:30:04.298Z",
|
|
4
4
|
"packageName": "@happyvertical/smrt-agents",
|
|
5
|
-
"packageVersion": "0.31.
|
|
5
|
+
"packageVersion": "0.31.1",
|
|
6
6
|
"sourceManifestPath": "dist/manifest.json",
|
|
7
7
|
"agentDocPath": "AGENTS.md",
|
|
8
8
|
"sourceHashes": {
|
|
9
|
-
"manifest": "
|
|
10
|
-
"packageJson": "
|
|
9
|
+
"manifest": "604b5330ef84407eedf62a600a27079b3423a836ab171b3005f991859ddfedff",
|
|
10
|
+
"packageJson": "9deba35e29f855a9e12d11aaedb1678829624f2f856191923504deae71577b04",
|
|
11
11
|
"agents": "3cdef62db9f57de1f5675726cdc54b3e64e9d39e67ad316904d08212cf046112"
|
|
12
12
|
},
|
|
13
13
|
"exports": [
|
|
@@ -457,10 +457,7 @@
|
|
|
457
457
|
"disable",
|
|
458
458
|
"enable",
|
|
459
459
|
"getDescription",
|
|
460
|
-
"isDue",
|
|
461
460
|
"pause",
|
|
462
|
-
"recordFailure",
|
|
463
|
-
"recordSuccess",
|
|
464
461
|
"resume"
|
|
465
462
|
],
|
|
466
463
|
"surfaces": [
|
|
@@ -579,9 +576,7 @@
|
|
|
579
576
|
"findGlobal",
|
|
580
577
|
"findWithGlobals",
|
|
581
578
|
"listByAgentType",
|
|
582
|
-
"listByStatus"
|
|
583
|
-
"listDue",
|
|
584
|
-
"stats"
|
|
579
|
+
"listByStatus"
|
|
585
580
|
],
|
|
586
581
|
"surfaces": [],
|
|
587
582
|
"relationshipFeatures": [
|
|
@@ -32,6 +32,15 @@ let { history = [], loading = false, onEntryClick, empty }: Props = $props();
|
|
|
32
32
|
function handleEntryClick(entry: AgentRunHistoryEntry) {
|
|
33
33
|
onEntryClick?.(entry);
|
|
34
34
|
}
|
|
35
|
+
|
|
36
|
+
function handleEntryKeydown(entry: AgentRunHistoryEntry, event: KeyboardEvent) {
|
|
37
|
+
if (!onEntryClick) return;
|
|
38
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
39
|
+
// Prevent Space from scrolling the page when activating the row.
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
onEntryClick(entry);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
35
44
|
</script>
|
|
36
45
|
|
|
37
46
|
<div class="run-history-container">
|
|
@@ -73,6 +82,7 @@ function handleEntryClick(entry: AgentRunHistoryEntry) {
|
|
|
73
82
|
<tr
|
|
74
83
|
class="run-history__row"
|
|
75
84
|
onclick={() => handleEntryClick(entry)}
|
|
85
|
+
onkeydown={(event) => handleEntryKeydown(entry, event)}
|
|
76
86
|
role={onEntryClick ? 'button' : undefined}
|
|
77
87
|
tabindex={onEntryClick ? 0 : undefined}
|
|
78
88
|
>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentRunHistory.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/AgentRunHistory.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAQxD,MAAM,WAAW,KAAK;IACpB,0BAA0B;IAC1B,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACrD,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"AgentRunHistory.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/AgentRunHistory.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAQxD,MAAM,WAAW,KAAK;IACpB,0BAA0B;IAC1B,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qCAAqC;IACrC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;IACrD,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAqGD,QAAA,MAAM,eAAe,2CAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
|
|
@@ -51,6 +51,15 @@ function handleRowClick(schedule: AgentScheduleData) {
|
|
|
51
51
|
onScheduleClick?.(schedule);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
function handleRowKeydown(schedule: AgentScheduleData, event: KeyboardEvent) {
|
|
55
|
+
if (!onScheduleClick) return;
|
|
56
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
57
|
+
// Prevent Space from scrolling the page when activating the row.
|
|
58
|
+
event.preventDefault();
|
|
59
|
+
onScheduleClick(schedule);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
54
63
|
function handleToggle(schedule: AgentScheduleData, event: Event) {
|
|
55
64
|
event.stopPropagation();
|
|
56
65
|
if (schedule.enabled) {
|
|
@@ -111,6 +120,7 @@ function handleRunNow(schedule: AgentScheduleData, event: Event) {
|
|
|
111
120
|
<tr
|
|
112
121
|
class="schedule-list__row"
|
|
113
122
|
onclick={() => handleRowClick(schedule)}
|
|
123
|
+
onkeydown={(event) => handleRowKeydown(schedule, event)}
|
|
114
124
|
role={onScheduleClick ? 'button' : undefined}
|
|
115
125
|
tabindex={onScheduleClick ? 0 : undefined}
|
|
116
126
|
>
|
|
@@ -322,7 +332,7 @@ function handleRunNow(schedule: AgentScheduleData, event: Event) {
|
|
|
322
332
|
}
|
|
323
333
|
|
|
324
334
|
.running-indicator {
|
|
325
|
-
color: var(--color-primary, #
|
|
335
|
+
color: var(--smrt-color-primary, #005ac1);
|
|
326
336
|
font-size: var(--smrt-typography-label-medium-size, 0.75rem);
|
|
327
337
|
}
|
|
328
338
|
|
|
@@ -332,12 +342,12 @@ function handleRunNow(schedule: AgentScheduleData, event: Event) {
|
|
|
332
342
|
|
|
333
343
|
.actions {
|
|
334
344
|
display: flex;
|
|
335
|
-
gap: var(--spacing-xs, 0.25rem);
|
|
345
|
+
gap: var(--smrt-spacing-xs, 0.25rem);
|
|
336
346
|
}
|
|
337
347
|
|
|
338
348
|
.schedule-list__cell--loading,
|
|
339
349
|
.schedule-list__cell--empty {
|
|
340
|
-
padding: var(--spacing-xl, 2rem);
|
|
350
|
+
padding: var(--smrt-spacing-xl, 2rem);
|
|
341
351
|
text-align: center;
|
|
342
352
|
}
|
|
343
353
|
|
|
@@ -345,15 +355,15 @@ function handleRunNow(schedule: AgentScheduleData, event: Event) {
|
|
|
345
355
|
display: flex;
|
|
346
356
|
align-items: center;
|
|
347
357
|
justify-content: center;
|
|
348
|
-
gap: var(--spacing-sm, 0.5rem);
|
|
349
|
-
color: var(--color-
|
|
358
|
+
gap: var(--smrt-spacing-sm, 0.5rem);
|
|
359
|
+
color: var(--smrt-color-on-surface-variant, #43474e);
|
|
350
360
|
}
|
|
351
361
|
|
|
352
362
|
.schedule-list__spinner {
|
|
353
363
|
width: 20px;
|
|
354
364
|
height: 20px;
|
|
355
|
-
border: 2px solid var(--color-
|
|
356
|
-
border-top-color: var(--color-primary, #
|
|
365
|
+
border: 2px solid var(--smrt-color-outline-variant, #c4c6cf);
|
|
366
|
+
border-top-color: var(--smrt-color-primary, #005ac1);
|
|
357
367
|
border-radius: var(--smrt-radius-full, 9999px);
|
|
358
368
|
animation: spin 0.8s linear infinite;
|
|
359
369
|
}
|
|
@@ -365,6 +375,6 @@ function handleRunNow(schedule: AgentScheduleData, event: Event) {
|
|
|
365
375
|
}
|
|
366
376
|
|
|
367
377
|
.schedule-list__empty {
|
|
368
|
-
color: var(--color-
|
|
378
|
+
color: var(--smrt-color-on-surface-variant, #43474e);
|
|
369
379
|
}
|
|
370
380
|
</style>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentScheduleList.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/AgentScheduleList.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AASrD,MAAM,WAAW,KAAK;IACpB,2BAA2B;IAC3B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACxD,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,uCAAuC;IACvC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"AgentScheduleList.svelte.d.ts","sourceRoot":"","sources":["../../../src/svelte/components/AgentScheduleList.svelte.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AASrD,MAAM,WAAW,KAAK;IACpB,2BAA2B;IAC3B,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wCAAwC;IACxC,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACxD,sCAAsC;IACtC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,uCAAuC;IACvC,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA+JD,QAAA,MAAM,iBAAiB,2CAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}
|
package/dist/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"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"}
|
package/dist/ui.js
CHANGED
|
@@ -121,8 +121,12 @@ const AGENTS_MODULE_META = {
|
|
|
121
121
|
displayName: "Agents",
|
|
122
122
|
description: "Agent framework for building autonomous actors",
|
|
123
123
|
uiSlots: AGENTS_UI_SLOTS,
|
|
124
|
-
models: ["Agent", "AgentSchedule", "
|
|
125
|
-
collections: [
|
|
124
|
+
models: ["Agent", "AgentConfig", "AgentSchedule", "TenantAgent"],
|
|
125
|
+
collections: [
|
|
126
|
+
"AgentConfigCollection",
|
|
127
|
+
"AgentScheduleCollection",
|
|
128
|
+
"TenantAgentCollection"
|
|
129
|
+
]
|
|
126
130
|
};
|
|
127
131
|
export {
|
|
128
132
|
AGENTS_MODULE_META,
|
package/dist/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sources":["../src/ui.ts"],"sourcesContent":["import type { ModuleUISlot, SmrtModuleMeta } from '@happyvertical/smrt-types';\n\n/**\n * UI type definitions for SMRT Agents\n *\n * These types allow agents to declare admin panel UI slots\n * that can be implemented as Svelte components in agent packages.\n *\n * @example\n * ```typescript\n * import { AgentUIRegistry, type AdminPanelBaseProps } from '@happyvertical/smrt-agents/ui';\n *\n * // In agent package: register components at import time\n * AgentUIRegistry.register('MyAgent', 'settings', SettingsPanel);\n *\n * // In host app: use registered components\n * const Component = AgentUIRegistry.get('MyAgent', 'settings');\n * ```\n */\n\n/**\n * Svelte component type (compatible with svelte's ComponentType)\n *\n * Using a generic function type to avoid requiring svelte as a dependency\n * and to avoid DOM type references that don't exist in Node.js builds.\n *\n * In practice, the actual Svelte component will be passed and used\n * with `<svelte:component this={Component} />` in SvelteKit apps.\n */\nexport type ComponentType<Props = any> = (...args: any[]) => any;\n\n/**\n * Base props that all admin panel components receive\n */\nexport interface AdminPanelBaseProps<TConfig = unknown> {\n /** Current configuration from the agent (merged file + db) */\n config: TConfig;\n /** Callback to save configuration changes */\n onSave: (config: TConfig) => Promise<void>;\n /** Whether the panel is in read-only mode */\n readonly?: boolean;\n /** CSS class for styling integration */\n class?: string;\n /**\n * Read-only file-based configuration defaults (from smrt.config.js)\n * Use this to display which values come from the config file\n */\n fileConfig?: TConfig;\n /**\n * Editable database-persisted configuration overrides\n * Use this to display which values have been customized in the DB\n */\n dbConfig?: TConfig;\n}\n\n/**\n * Definition of a UI slot that an agent declares\n *\n * Agents define slots they support; UI packages implement them.\n */\nexport interface AgentUISlot {\n /** Unique identifier for this slot (e.g., 'sources', 'reports', 'settings') */\n id: string;\n /** Human-readable label for the slot */\n label: string;\n /** Description of what this panel configures */\n description?: string;\n /** Icon identifier (e.g., 'settings', 'database', 'users') */\n icon?: string;\n /** Display order (lower numbers first) */\n order?: number;\n /** Whether the slot is currently unavailable in the admin UI */\n disabled?: boolean;\n}\n\n/**\n * Map of slot IDs to their definitions\n * Used as static property on Agent subclasses\n */\nexport type AgentUISlots = Record<string, AgentUISlot>;\n\n/**\n * A route an agent provides for its admin UI\n *\n * Agents declare these so that host applications or tooling\n * (for example, a Vite plugin) can wire them into a SvelteKit app.\n *\n * @example\n * ```typescript\n * static adminRoutes: AgentAdminRoute[] = [\n * { path: 'sources', component: 'SourcesPanel', load: 'loadSources' },\n * { path: 'sources/[sourceId]', component: 'SourceDetail', load: 'loadSourceDetail' },\n * ];\n * ```\n */\nexport interface AgentAdminRoute {\n /** Route path relative to agent root (e.g., 'sources/[sourceId]') */\n path: string;\n /** Component export name from the agent's admin entry point */\n component: string;\n /** Optional: export name for server load function */\n load?: string;\n}\n\n/**\n * Context passed to agent route load functions\n *\n * A normalized subset of SvelteKit's ServerLoadEvent,\n * so agent load functions don't need a direct SvelteKit dependency.\n */\nexport interface AgentRouteLoadContext {\n params: Record<string, string>;\n parent: () => Promise<any>;\n fetch: typeof fetch;\n url: URL;\n}\n\n/**\n * Agent route load function signature\n *\n * Returned data is spread into the page's `data` prop.\n */\nexport type AgentRouteLoadFn = (\n context: AgentRouteLoadContext,\n) => Promise<Record<string, unknown>> | Record<string, unknown>;\n\n/**\n * Agent manifest type (re-exported from smrt-core scanner types)\n * Duplicated here to avoid hard dependency on scanner internals\n */\nexport interface AgentManifestInfo {\n name: string;\n slug: string;\n icon?: string;\n tier: 'free' | 'standard' | 'premium';\n description?: string;\n uiSlots: Record<string, AgentUISlot>;\n adminRoutes?: AgentAdminRoute[];\n /** Default signal subscriptions declared by this agent */\n signalSubscriptions?: string[];\n permissions: Array<{\n id: string;\n label: string;\n category: string;\n defaultGranted?: boolean;\n }>;\n features: Array<{\n id: string;\n label: string;\n description?: string;\n type: string;\n }>;\n menuItems: Array<{\n id: string;\n label: string;\n icon?: string;\n order: number;\n path: string;\n requiredPermission?: string;\n }>;\n components: Array<{ exportPath: string; type: string }>;\n}\n\n/**\n * Registry of UI component implementations\n * Maps agent class name + slot ID to Svelte component\n */\nexport interface AgentUIComponentRegistry {\n /** Register a component for an agent's slot */\n register<TProps extends AdminPanelBaseProps>(\n agentClass: string,\n slotId: string,\n component: ComponentType<TProps>,\n ): void;\n\n /** Get a component for an agent's slot */\n get<TProps extends AdminPanelBaseProps>(\n agentClass: string,\n slotId: string,\n ): ComponentType<TProps> | undefined;\n\n /** Get all registered slot IDs for an agent */\n getSlots(agentClass: string): string[];\n\n /** Check if a component is registered */\n has(agentClass: string, slotId: string): boolean;\n\n /** Get all registered agent class names */\n getAgents(): string[];\n\n /** Unregister a component (useful for testing) */\n unregister(agentClass: string, slotId: string): boolean;\n\n /** Clear all registrations (useful for testing) */\n clear(): void;\n\n /** Register a component by composite key (e.g., 'praeco:sources') */\n registerByKey(key: string, component: ComponentType): void;\n\n /** Get a component by composite key */\n getByKey(key: string): ComponentType | undefined;\n\n /** Register an agent manifest for runtime access */\n registerManifest(agentClass: string, manifest: AgentManifestInfo): void;\n\n /** Get a registered agent manifest */\n getManifest(agentClass: string): AgentManifestInfo | undefined;\n\n /** Get all registered manifests */\n getAllManifests(): Map<string, AgentManifestInfo>;\n\n /** Register a route component for an agent */\n registerRouteComponent(\n agentClass: string,\n path: string,\n component: ComponentType,\n ): void;\n\n /** Get a route component for an agent */\n getRouteComponent(\n agentClass: string,\n path: string,\n ): ComponentType | undefined;\n\n /** Register a route load function for an agent */\n registerRouteLoad(\n agentClass: string,\n path: string,\n loadFn: AgentRouteLoadFn,\n ): void;\n\n /** Get a route load function for an agent */\n getRouteLoad(agentClass: string, path: string): AgentRouteLoadFn | undefined;\n}\n\n/**\n * Create a new UI component registry\n *\n * @example\n * ```typescript\n * const registry = createUIRegistry();\n * registry.register('MyAgent', 'settings', SettingsPanel);\n *\n * const Component = registry.get('MyAgent', 'settings');\n * if (Component) {\n * // Render component\n * }\n * ```\n */\nexport function createUIRegistry(): AgentUIComponentRegistry {\n const components = new Map<string, ComponentType<any>>();\n const manifests = new Map<string, AgentManifestInfo>();\n const routeComponents = new Map<string, ComponentType>();\n const routeLoads = new Map<string, AgentRouteLoadFn>();\n\n const makeKey = (agentClass: string, slotId: string) =>\n `${agentClass}:${slotId}`;\n\n const makeRouteKey = (agentClass: string, path: string) =>\n `${agentClass}:route:${path}`;\n\n return {\n register(agentClass, slotId, component) {\n components.set(makeKey(agentClass, slotId), component);\n },\n\n get(agentClass, slotId) {\n return components.get(makeKey(agentClass, slotId));\n },\n\n getSlots(agentClass) {\n const prefix = `${agentClass}:`;\n return Array.from(components.keys())\n .filter((k) => k.startsWith(prefix))\n .map((k) => k.slice(prefix.length));\n },\n\n has(agentClass, slotId) {\n return components.has(makeKey(agentClass, slotId));\n },\n\n getAgents() {\n const agents = new Set<string>();\n for (const key of components.keys()) {\n const agentClass = key.split(':')[0];\n agents.add(agentClass);\n }\n return Array.from(agents);\n },\n\n unregister(agentClass, slotId) {\n return components.delete(makeKey(agentClass, slotId));\n },\n\n clear() {\n components.clear();\n manifests.clear();\n routeComponents.clear();\n routeLoads.clear();\n },\n\n registerByKey(key, component) {\n components.set(key, component);\n },\n\n getByKey(key) {\n return components.get(key);\n },\n\n registerManifest(agentClass, manifest) {\n manifests.set(agentClass, manifest);\n },\n\n getManifest(agentClass) {\n return manifests.get(agentClass);\n },\n\n getAllManifests() {\n return new Map(manifests);\n },\n\n registerRouteComponent(agentClass, path, component) {\n routeComponents.set(makeRouteKey(agentClass, path), component);\n },\n\n getRouteComponent(agentClass, path) {\n return routeComponents.get(makeRouteKey(agentClass, path));\n },\n\n registerRouteLoad(agentClass, path, loadFn) {\n routeLoads.set(makeRouteKey(agentClass, path), loadFn);\n },\n\n getRouteLoad(agentClass, path) {\n return routeLoads.get(makeRouteKey(agentClass, path));\n },\n };\n}\n\n/**\n * Global UI registry singleton\n *\n * Agent UI packages register their components here at import time,\n * enabling discovery by host applications.\n *\n * Uses a `globalThis.__smrtAgentUIRegistry` property to guarantee a\n * single registry instance per JavaScript runtime, even when bundlers\n * (Vite, webpack) duplicate this module across optimized dependency\n * chunks or package versions.\n *\n * @example\n * ```typescript\n * // In agent package (e.g., @happyvertical/praeco/admin)\n * import { AgentUIRegistry } from '@happyvertical/smrt-agents/ui';\n * import SourcesPanel from './SourcesPanel.svelte';\n *\n * AgentUIRegistry.register('Praeco', 'sources', SourcesPanel);\n *\n * // In host SvelteKit app\n * import { AgentUIRegistry } from '@happyvertical/smrt-agents/ui';\n * import '@happyvertical/praeco/admin'; // Registers components\n *\n * const Component = AgentUIRegistry.get('Praeco', 'sources');\n * ```\n */\ndeclare global {\n // eslint-disable-next-line no-var\n var __smrtAgentUIRegistry: AgentUIComponentRegistry | undefined;\n}\n\nif (!globalThis.__smrtAgentUIRegistry) {\n globalThis.__smrtAgentUIRegistry = createUIRegistry();\n}\nexport const AgentUIRegistry: AgentUIComponentRegistry =\n globalThis.__smrtAgentUIRegistry;\n\n/**\n * What an agent's `./admin` entry point must export.\n *\n * This is the contract between agent packages and host apps.\n * Instead of registering individual slot components, agents export\n * a single root component that handles its own sub-navigation.\n *\n * @example\n * ```typescript\n * // In agent package: histrio/src/ui/admin/index.ts\n * export { default } from './AdminRoot.svelte';\n * export { createAPIClient } from '../types.js';\n * export const navItems: AgentAdminNavItem[] = [\n * { id: 'characters', label: 'Characters', icon: 'users', order: 1 },\n * { id: 'performers', label: 'Performers', icon: 'mic', order: 2 },\n * ];\n * ```\n */\nexport interface AgentAdminExport {\n /** Root admin component — renders all panels, handles its own sub-navigation */\n default?: ComponentType;\n /** Create a typed API client for this agent */\n createAPIClient?: (baseUrl: string) => unknown;\n /** Navigation items for tabs/sidebar within the agent admin */\n navItems?: AgentAdminNavItem[];\n}\n\n/**\n * Props passed to the root admin component\n */\nexport interface AgentAdminRootProps {\n /** Typed API client created by the agent's own factory */\n apiClient: unknown;\n /** Which panel to show (from URL hash, e.g., 'sources') */\n activePanel?: string;\n /** Called when user navigates within the agent */\n onNavigate?: (panelId: string) => void;\n /** Whether admin is in read-only mode */\n readonly?: boolean;\n}\n\n/**\n * Navigation item within an agent's admin UI\n */\nexport interface AgentAdminNavItem {\n /** Matches hash fragment and panel ID */\n id: string;\n /** Display label */\n label: string;\n /** Icon identifier */\n icon?: string;\n /** Display order (lower numbers first) */\n order?: number;\n}\n\n/**\n * Agents module UI slots (for ModuleUIRegistry)\n */\nexport const AGENTS_UI_SLOTS: Record<string, ModuleUISlot> = {\n 'agent-dashboard': {\n id: 'agent-dashboard',\n label: 'Agent Dashboard',\n description: 'Combined overview panel for agent schedules',\n icon: 'activity',\n category: 'admin',\n order: 1,\n propsInterface: 'AgentDashboardProps',\n },\n 'agent-schedule-list': {\n id: 'agent-schedule-list',\n label: 'Agent Schedule List',\n description: 'List of scheduled agents',\n icon: 'calendar',\n category: 'list',\n order: 2,\n propsInterface: 'AgentScheduleListProps',\n },\n 'agent-schedule-form': {\n id: 'agent-schedule-form',\n label: 'Agent Schedule Form',\n description: 'Form for creating or editing agent schedules',\n icon: 'edit',\n category: 'form',\n order: 3,\n propsInterface: 'AgentScheduleFormProps',\n },\n 'agent-run-history': {\n id: 'agent-run-history',\n label: 'Agent Run History',\n description: 'History of agent runs',\n icon: 'clock',\n category: 'list',\n order: 4,\n propsInterface: 'AgentRunHistoryProps',\n },\n 'schedule-status-badge': {\n id: 'schedule-status-badge',\n label: 'Schedule Status Badge',\n description: 'Status indicator for schedule states',\n icon: 'tag',\n category: 'display',\n order: 5,\n propsInterface: 'ScheduleStatusBadgeProps',\n },\n};\n\n/**\n * Agents module metadata\n */\nexport const AGENTS_MODULE_META: SmrtModuleMeta = {\n name: '@happyvertical/smrt-agents',\n displayName: 'Agents',\n description: 'Agent framework for building autonomous actors',\n uiSlots: AGENTS_UI_SLOTS,\n models: ['Agent', 'AgentSchedule', 'AgentRun'],\n collections: ['AgentCollection', 'AgentScheduleCollection'],\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui.js","sources":["../src/ui.ts"],"sourcesContent":["import type { ModuleUISlot, SmrtModuleMeta } from '@happyvertical/smrt-types';\n\n/**\n * UI type definitions for SMRT Agents\n *\n * These types allow agents to declare admin panel UI slots\n * that can be implemented as Svelte components in agent packages.\n *\n * @example\n * ```typescript\n * import { AgentUIRegistry, type AdminPanelBaseProps } from '@happyvertical/smrt-agents/ui';\n *\n * // In agent package: register components at import time\n * AgentUIRegistry.register('MyAgent', 'settings', SettingsPanel);\n *\n * // In host app: use registered components\n * const Component = AgentUIRegistry.get('MyAgent', 'settings');\n * ```\n */\n\n/**\n * Svelte component type (compatible with svelte's ComponentType)\n *\n * Using a generic function type to avoid requiring svelte as a dependency\n * and to avoid DOM type references that don't exist in Node.js builds.\n *\n * In practice, the actual Svelte component will be passed and used\n * with `<svelte:component this={Component} />` in SvelteKit apps.\n */\nexport type ComponentType<Props = any> = (...args: any[]) => any;\n\n/**\n * Base props that all admin panel components receive\n */\nexport interface AdminPanelBaseProps<TConfig = unknown> {\n /** Current configuration from the agent (merged file + db) */\n config: TConfig;\n /** Callback to save configuration changes */\n onSave: (config: TConfig) => Promise<void>;\n /** Whether the panel is in read-only mode */\n readonly?: boolean;\n /** CSS class for styling integration */\n class?: string;\n /**\n * Read-only file-based configuration defaults (from smrt.config.js)\n * Use this to display which values come from the config file\n */\n fileConfig?: TConfig;\n /**\n * Editable database-persisted configuration overrides\n * Use this to display which values have been customized in the DB\n */\n dbConfig?: TConfig;\n}\n\n/**\n * Definition of a UI slot that an agent declares\n *\n * Agents define slots they support; UI packages implement them.\n */\nexport interface AgentUISlot {\n /** Unique identifier for this slot (e.g., 'sources', 'reports', 'settings') */\n id: string;\n /** Human-readable label for the slot */\n label: string;\n /** Description of what this panel configures */\n description?: string;\n /** Icon identifier (e.g., 'settings', 'database', 'users') */\n icon?: string;\n /** Display order (lower numbers first) */\n order?: number;\n /** Whether the slot is currently unavailable in the admin UI */\n disabled?: boolean;\n}\n\n/**\n * Map of slot IDs to their definitions\n * Used as static property on Agent subclasses\n */\nexport type AgentUISlots = Record<string, AgentUISlot>;\n\n/**\n * A route an agent provides for its admin UI\n *\n * Agents declare these so that host applications or tooling\n * (for example, a Vite plugin) can wire them into a SvelteKit app.\n *\n * @example\n * ```typescript\n * static adminRoutes: AgentAdminRoute[] = [\n * { path: 'sources', component: 'SourcesPanel', load: 'loadSources' },\n * { path: 'sources/[sourceId]', component: 'SourceDetail', load: 'loadSourceDetail' },\n * ];\n * ```\n */\nexport interface AgentAdminRoute {\n /** Route path relative to agent root (e.g., 'sources/[sourceId]') */\n path: string;\n /** Component export name from the agent's admin entry point */\n component: string;\n /** Optional: export name for server load function */\n load?: string;\n}\n\n/**\n * Context passed to agent route load functions\n *\n * A normalized subset of SvelteKit's ServerLoadEvent,\n * so agent load functions don't need a direct SvelteKit dependency.\n */\nexport interface AgentRouteLoadContext {\n params: Record<string, string>;\n parent: () => Promise<any>;\n fetch: typeof fetch;\n url: URL;\n}\n\n/**\n * Agent route load function signature\n *\n * Returned data is spread into the page's `data` prop.\n */\nexport type AgentRouteLoadFn = (\n context: AgentRouteLoadContext,\n) => Promise<Record<string, unknown>> | Record<string, unknown>;\n\n/**\n * Agent manifest type (re-exported from smrt-core scanner types)\n * Duplicated here to avoid hard dependency on scanner internals\n */\nexport interface AgentManifestInfo {\n name: string;\n slug: string;\n icon?: string;\n tier: 'free' | 'standard' | 'premium';\n description?: string;\n uiSlots: Record<string, AgentUISlot>;\n adminRoutes?: AgentAdminRoute[];\n /** Default signal subscriptions declared by this agent */\n signalSubscriptions?: string[];\n permissions: Array<{\n id: string;\n label: string;\n category: string;\n defaultGranted?: boolean;\n }>;\n features: Array<{\n id: string;\n label: string;\n description?: string;\n type: string;\n }>;\n menuItems: Array<{\n id: string;\n label: string;\n icon?: string;\n order: number;\n path: string;\n requiredPermission?: string;\n }>;\n components: Array<{ exportPath: string; type: string }>;\n}\n\n/**\n * Registry of UI component implementations\n * Maps agent class name + slot ID to Svelte component\n */\nexport interface AgentUIComponentRegistry {\n /** Register a component for an agent's slot */\n register<TProps extends AdminPanelBaseProps>(\n agentClass: string,\n slotId: string,\n component: ComponentType<TProps>,\n ): void;\n\n /** Get a component for an agent's slot */\n get<TProps extends AdminPanelBaseProps>(\n agentClass: string,\n slotId: string,\n ): ComponentType<TProps> | undefined;\n\n /** Get all registered slot IDs for an agent */\n getSlots(agentClass: string): string[];\n\n /** Check if a component is registered */\n has(agentClass: string, slotId: string): boolean;\n\n /** Get all registered agent class names */\n getAgents(): string[];\n\n /** Unregister a component (useful for testing) */\n unregister(agentClass: string, slotId: string): boolean;\n\n /** Clear all registrations (useful for testing) */\n clear(): void;\n\n /** Register a component by composite key (e.g., 'praeco:sources') */\n registerByKey(key: string, component: ComponentType): void;\n\n /** Get a component by composite key */\n getByKey(key: string): ComponentType | undefined;\n\n /** Register an agent manifest for runtime access */\n registerManifest(agentClass: string, manifest: AgentManifestInfo): void;\n\n /** Get a registered agent manifest */\n getManifest(agentClass: string): AgentManifestInfo | undefined;\n\n /** Get all registered manifests */\n getAllManifests(): Map<string, AgentManifestInfo>;\n\n /** Register a route component for an agent */\n registerRouteComponent(\n agentClass: string,\n path: string,\n component: ComponentType,\n ): void;\n\n /** Get a route component for an agent */\n getRouteComponent(\n agentClass: string,\n path: string,\n ): ComponentType | undefined;\n\n /** Register a route load function for an agent */\n registerRouteLoad(\n agentClass: string,\n path: string,\n loadFn: AgentRouteLoadFn,\n ): void;\n\n /** Get a route load function for an agent */\n getRouteLoad(agentClass: string, path: string): AgentRouteLoadFn | undefined;\n}\n\n/**\n * Create a new UI component registry\n *\n * @example\n * ```typescript\n * const registry = createUIRegistry();\n * registry.register('MyAgent', 'settings', SettingsPanel);\n *\n * const Component = registry.get('MyAgent', 'settings');\n * if (Component) {\n * // Render component\n * }\n * ```\n */\nexport function createUIRegistry(): AgentUIComponentRegistry {\n const components = new Map<string, ComponentType<any>>();\n const manifests = new Map<string, AgentManifestInfo>();\n const routeComponents = new Map<string, ComponentType>();\n const routeLoads = new Map<string, AgentRouteLoadFn>();\n\n const makeKey = (agentClass: string, slotId: string) =>\n `${agentClass}:${slotId}`;\n\n const makeRouteKey = (agentClass: string, path: string) =>\n `${agentClass}:route:${path}`;\n\n return {\n register(agentClass, slotId, component) {\n components.set(makeKey(agentClass, slotId), component);\n },\n\n get(agentClass, slotId) {\n return components.get(makeKey(agentClass, slotId));\n },\n\n getSlots(agentClass) {\n const prefix = `${agentClass}:`;\n return Array.from(components.keys())\n .filter((k) => k.startsWith(prefix))\n .map((k) => k.slice(prefix.length));\n },\n\n has(agentClass, slotId) {\n return components.has(makeKey(agentClass, slotId));\n },\n\n getAgents() {\n const agents = new Set<string>();\n for (const key of components.keys()) {\n const agentClass = key.split(':')[0];\n agents.add(agentClass);\n }\n return Array.from(agents);\n },\n\n unregister(agentClass, slotId) {\n return components.delete(makeKey(agentClass, slotId));\n },\n\n clear() {\n components.clear();\n manifests.clear();\n routeComponents.clear();\n routeLoads.clear();\n },\n\n registerByKey(key, component) {\n components.set(key, component);\n },\n\n getByKey(key) {\n return components.get(key);\n },\n\n registerManifest(agentClass, manifest) {\n manifests.set(agentClass, manifest);\n },\n\n getManifest(agentClass) {\n return manifests.get(agentClass);\n },\n\n getAllManifests() {\n return new Map(manifests);\n },\n\n registerRouteComponent(agentClass, path, component) {\n routeComponents.set(makeRouteKey(agentClass, path), component);\n },\n\n getRouteComponent(agentClass, path) {\n return routeComponents.get(makeRouteKey(agentClass, path));\n },\n\n registerRouteLoad(agentClass, path, loadFn) {\n routeLoads.set(makeRouteKey(agentClass, path), loadFn);\n },\n\n getRouteLoad(agentClass, path) {\n return routeLoads.get(makeRouteKey(agentClass, path));\n },\n };\n}\n\n/**\n * Global UI registry singleton\n *\n * Agent UI packages register their components here at import time,\n * enabling discovery by host applications.\n *\n * Uses a `globalThis.__smrtAgentUIRegistry` property to guarantee a\n * single registry instance per JavaScript runtime, even when bundlers\n * (Vite, webpack) duplicate this module across optimized dependency\n * chunks or package versions.\n *\n * @example\n * ```typescript\n * // In agent package (e.g., @happyvertical/praeco/admin)\n * import { AgentUIRegistry } from '@happyvertical/smrt-agents/ui';\n * import SourcesPanel from './SourcesPanel.svelte';\n *\n * AgentUIRegistry.register('Praeco', 'sources', SourcesPanel);\n *\n * // In host SvelteKit app\n * import { AgentUIRegistry } from '@happyvertical/smrt-agents/ui';\n * import '@happyvertical/praeco/admin'; // Registers components\n *\n * const Component = AgentUIRegistry.get('Praeco', 'sources');\n * ```\n */\ndeclare global {\n // eslint-disable-next-line no-var\n var __smrtAgentUIRegistry: AgentUIComponentRegistry | undefined;\n}\n\nif (!globalThis.__smrtAgentUIRegistry) {\n globalThis.__smrtAgentUIRegistry = createUIRegistry();\n}\nexport const AgentUIRegistry: AgentUIComponentRegistry =\n globalThis.__smrtAgentUIRegistry;\n\n/**\n * What an agent's `./admin` entry point must export.\n *\n * This is the contract between agent packages and host apps.\n * Instead of registering individual slot components, agents export\n * a single root component that handles its own sub-navigation.\n *\n * @example\n * ```typescript\n * // In agent package: histrio/src/ui/admin/index.ts\n * export { default } from './AdminRoot.svelte';\n * export { createAPIClient } from '../types.js';\n * export const navItems: AgentAdminNavItem[] = [\n * { id: 'characters', label: 'Characters', icon: 'users', order: 1 },\n * { id: 'performers', label: 'Performers', icon: 'mic', order: 2 },\n * ];\n * ```\n */\nexport interface AgentAdminExport {\n /** Root admin component — renders all panels, handles its own sub-navigation */\n default?: ComponentType;\n /** Create a typed API client for this agent */\n createAPIClient?: (baseUrl: string) => unknown;\n /** Navigation items for tabs/sidebar within the agent admin */\n navItems?: AgentAdminNavItem[];\n}\n\n/**\n * Props passed to the root admin component\n */\nexport interface AgentAdminRootProps {\n /** Typed API client created by the agent's own factory */\n apiClient: unknown;\n /** Which panel to show (from URL hash, e.g., 'sources') */\n activePanel?: string;\n /** Called when user navigates within the agent */\n onNavigate?: (panelId: string) => void;\n /** Whether admin is in read-only mode */\n readonly?: boolean;\n}\n\n/**\n * Navigation item within an agent's admin UI\n */\nexport interface AgentAdminNavItem {\n /** Matches hash fragment and panel ID */\n id: string;\n /** Display label */\n label: string;\n /** Icon identifier */\n icon?: string;\n /** Display order (lower numbers first) */\n order?: number;\n}\n\n/**\n * Agents module UI slots (for ModuleUIRegistry)\n */\nexport const AGENTS_UI_SLOTS: Record<string, ModuleUISlot> = {\n 'agent-dashboard': {\n id: 'agent-dashboard',\n label: 'Agent Dashboard',\n description: 'Combined overview panel for agent schedules',\n icon: 'activity',\n category: 'admin',\n order: 1,\n propsInterface: 'AgentDashboardProps',\n },\n 'agent-schedule-list': {\n id: 'agent-schedule-list',\n label: 'Agent Schedule List',\n description: 'List of scheduled agents',\n icon: 'calendar',\n category: 'list',\n order: 2,\n propsInterface: 'AgentScheduleListProps',\n },\n 'agent-schedule-form': {\n id: 'agent-schedule-form',\n label: 'Agent Schedule Form',\n description: 'Form for creating or editing agent schedules',\n icon: 'edit',\n category: 'form',\n order: 3,\n propsInterface: 'AgentScheduleFormProps',\n },\n 'agent-run-history': {\n id: 'agent-run-history',\n label: 'Agent Run History',\n description: 'History of agent runs',\n icon: 'clock',\n category: 'list',\n order: 4,\n propsInterface: 'AgentRunHistoryProps',\n },\n 'schedule-status-badge': {\n id: 'schedule-status-badge',\n label: 'Schedule Status Badge',\n description: 'Status indicator for schedule states',\n icon: 'tag',\n category: 'display',\n order: 5,\n propsInterface: 'ScheduleStatusBadgeProps',\n },\n};\n\n/**\n * Agents module metadata\n */\nexport const AGENTS_MODULE_META: SmrtModuleMeta = {\n name: '@happyvertical/smrt-agents',\n displayName: 'Agents',\n description: 'Agent framework for building autonomous actors',\n uiSlots: AGENTS_UI_SLOTS,\n models: ['Agent', 'AgentConfig', 'AgentSchedule', 'TenantAgent'],\n collections: [\n 'AgentConfigCollection',\n 'AgentScheduleCollection',\n 'TenantAgentCollection',\n ],\n};\n"],"names":[],"mappings":"AAyPO,SAAS,mBAA6C;AAC3D,QAAM,iCAAiB,IAAA;AACvB,QAAM,gCAAgB,IAAA;AACtB,QAAM,sCAAsB,IAAA;AAC5B,QAAM,iCAAiB,IAAA;AAEvB,QAAM,UAAU,CAAC,YAAoB,WACnC,GAAG,UAAU,IAAI,MAAM;AAEzB,QAAM,eAAe,CAAC,YAAoB,SACxC,GAAG,UAAU,UAAU,IAAI;AAE7B,SAAO;AAAA,IACL,SAAS,YAAY,QAAQ,WAAW;AACtC,iBAAW,IAAI,QAAQ,YAAY,MAAM,GAAG,SAAS;AAAA,IACvD;AAAA,IAEA,IAAI,YAAY,QAAQ;AACtB,aAAO,WAAW,IAAI,QAAQ,YAAY,MAAM,CAAC;AAAA,IACnD;AAAA,IAEA,SAAS,YAAY;AACnB,YAAM,SAAS,GAAG,UAAU;AAC5B,aAAO,MAAM,KAAK,WAAW,KAAA,CAAM,EAChC,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,EAClC,IAAI,CAAC,MAAM,EAAE,MAAM,OAAO,MAAM,CAAC;AAAA,IACtC;AAAA,IAEA,IAAI,YAAY,QAAQ;AACtB,aAAO,WAAW,IAAI,QAAQ,YAAY,MAAM,CAAC;AAAA,IACnD;AAAA,IAEA,YAAY;AACV,YAAM,6BAAa,IAAA;AACnB,iBAAW,OAAO,WAAW,QAAQ;AACnC,cAAM,aAAa,IAAI,MAAM,GAAG,EAAE,CAAC;AACnC,eAAO,IAAI,UAAU;AAAA,MACvB;AACA,aAAO,MAAM,KAAK,MAAM;AAAA,IAC1B;AAAA,IAEA,WAAW,YAAY,QAAQ;AAC7B,aAAO,WAAW,OAAO,QAAQ,YAAY,MAAM,CAAC;AAAA,IACtD;AAAA,IAEA,QAAQ;AACN,iBAAW,MAAA;AACX,gBAAU,MAAA;AACV,sBAAgB,MAAA;AAChB,iBAAW,MAAA;AAAA,IACb;AAAA,IAEA,cAAc,KAAK,WAAW;AAC5B,iBAAW,IAAI,KAAK,SAAS;AAAA,IAC/B;AAAA,IAEA,SAAS,KAAK;AACZ,aAAO,WAAW,IAAI,GAAG;AAAA,IAC3B;AAAA,IAEA,iBAAiB,YAAY,UAAU;AACrC,gBAAU,IAAI,YAAY,QAAQ;AAAA,IACpC;AAAA,IAEA,YAAY,YAAY;AACtB,aAAO,UAAU,IAAI,UAAU;AAAA,IACjC;AAAA,IAEA,kBAAkB;AAChB,aAAO,IAAI,IAAI,SAAS;AAAA,IAC1B;AAAA,IAEA,uBAAuB,YAAY,MAAM,WAAW;AAClD,sBAAgB,IAAI,aAAa,YAAY,IAAI,GAAG,SAAS;AAAA,IAC/D;AAAA,IAEA,kBAAkB,YAAY,MAAM;AAClC,aAAO,gBAAgB,IAAI,aAAa,YAAY,IAAI,CAAC;AAAA,IAC3D;AAAA,IAEA,kBAAkB,YAAY,MAAM,QAAQ;AAC1C,iBAAW,IAAI,aAAa,YAAY,IAAI,GAAG,MAAM;AAAA,IACvD;AAAA,IAEA,aAAa,YAAY,MAAM;AAC7B,aAAO,WAAW,IAAI,aAAa,YAAY,IAAI,CAAC;AAAA,IACtD;AAAA,EAAA;AAEJ;AAiCA,IAAI,CAAC,WAAW,uBAAuB;AACrC,aAAW,wBAAwB,iBAAA;AACrC;AACO,MAAM,kBACX,WAAW;AA4DN,MAAM,kBAAgD;AAAA,EAC3D,mBAAmB;AAAA,IACjB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,gBAAgB;AAAA,EAAA;AAAA,EAElB,uBAAuB;AAAA,IACrB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,gBAAgB;AAAA,EAAA;AAAA,EAElB,uBAAuB;AAAA,IACrB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,gBAAgB;AAAA,EAAA;AAAA,EAElB,qBAAqB;AAAA,IACnB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,gBAAgB;AAAA,EAAA;AAAA,EAElB,yBAAyB;AAAA,IACvB,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,UAAU;AAAA,IACV,OAAO;AAAA,IACP,gBAAgB;AAAA,EAAA;AAEpB;AAKO,MAAM,qBAAqC;AAAA,EAChD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,EACb,SAAS;AAAA,EACT,QAAQ,CAAC,SAAS,eAAe,iBAAiB,aAAa;AAAA,EAC/D,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;"}
|
package/dist/vite-plugin.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFileSync, existsSync } from "node:fs";
|
|
2
2
|
import { createRequire } from "node:module";
|
|
3
3
|
import { resolve, dirname } from "node:path";
|
|
4
|
-
import { e as extractAgentPackagesFromConfig } from "./chunks/manifest-utils-
|
|
4
|
+
import { e as extractAgentPackagesFromConfig } from "./chunks/manifest-utils-CMeEKwgq.js";
|
|
5
5
|
const VIRTUAL_MODULE_ID = "virtual:smrt-agent-registrations";
|
|
6
6
|
const RESOLVED_VIRTUAL_MODULE_ID = `\0${VIRTUAL_MODULE_ID}`;
|
|
7
7
|
function toSafeIdentifier(packageName) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-agents",
|
|
3
|
-
"version": "0.31.
|
|
3
|
+
"version": "0.31.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Agent framework for building autonomous actors in the SMRT ecosystem",
|
|
6
6
|
"author": "HappyVertical",
|
|
@@ -53,13 +53,13 @@
|
|
|
53
53
|
"@happyvertical/ai": "^0.74.7",
|
|
54
54
|
"@happyvertical/files": "^0.74.7",
|
|
55
55
|
"@happyvertical/utils": "^0.74.7",
|
|
56
|
-
"@happyvertical/smrt-config": "0.31.
|
|
57
|
-
"@happyvertical/smrt-core": "0.31.
|
|
58
|
-
"@happyvertical/smrt-
|
|
59
|
-
"@happyvertical/smrt-secrets": "0.31.
|
|
60
|
-
"@happyvertical/smrt-
|
|
61
|
-
"@happyvertical/smrt-
|
|
62
|
-
"@happyvertical/smrt-
|
|
56
|
+
"@happyvertical/smrt-config": "0.31.1",
|
|
57
|
+
"@happyvertical/smrt-core": "0.31.1",
|
|
58
|
+
"@happyvertical/smrt-types": "0.31.1",
|
|
59
|
+
"@happyvertical/smrt-secrets": "0.31.1",
|
|
60
|
+
"@happyvertical/smrt-ui": "0.31.1",
|
|
61
|
+
"@happyvertical/smrt-users": "0.31.1",
|
|
62
|
+
"@happyvertical/smrt-tenancy": "0.31.1"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@happyvertical/logger": "^0.74.7",
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
"typescript": "^5.9.3",
|
|
74
74
|
"vite": "^7.3.1",
|
|
75
75
|
"vitest": "^4.0.17",
|
|
76
|
-
"@happyvertical/smrt-vitest": "0.31.
|
|
76
|
+
"@happyvertical/smrt-vitest": "0.31.1"
|
|
77
77
|
},
|
|
78
78
|
"keywords": [
|
|
79
79
|
"agent",
|
|
@@ -1 +0,0 @@
|
|
|
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;"}
|