@vertesia/tools-sdk 1.0.0-dev.20260225.024852Z → 1.0.0-dev.20260227.112605Z
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/lib/cjs/RenderingTemplateCollection.js +43 -0
- package/lib/cjs/RenderingTemplateCollection.js.map +1 -0
- package/lib/cjs/auth.js +27 -0
- package/lib/cjs/auth.js.map +1 -1
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/server/app-package.js +11 -0
- package/lib/cjs/server/app-package.js.map +1 -1
- package/lib/cjs/server/site.js +7 -1
- package/lib/cjs/server/site.js.map +1 -1
- package/lib/cjs/server/templates.js +67 -0
- package/lib/cjs/server/templates.js.map +1 -0
- package/lib/cjs/server.js +4 -1
- package/lib/cjs/server.js.map +1 -1
- package/lib/cjs/site/templates.js +173 -2
- package/lib/cjs/site/templates.js.map +1 -1
- package/lib/esm/RenderingTemplateCollection.js +39 -0
- package/lib/esm/RenderingTemplateCollection.js.map +1 -0
- package/lib/esm/auth.js +27 -0
- package/lib/esm/auth.js.map +1 -1
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/server/app-package.js +11 -0
- package/lib/esm/server/app-package.js.map +1 -1
- package/lib/esm/server/site.js +8 -2
- package/lib/esm/server/site.js.map +1 -1
- package/lib/esm/server/templates.js +64 -0
- package/lib/esm/server/templates.js.map +1 -0
- package/lib/esm/server.js +4 -1
- package/lib/esm/server.js.map +1 -1
- package/lib/esm/site/templates.js +171 -2
- package/lib/esm/site/templates.js.map +1 -1
- package/lib/types/RenderingTemplateCollection.d.ts +17 -0
- package/lib/types/RenderingTemplateCollection.d.ts.map +1 -0
- package/lib/types/auth.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/server/app-package.d.ts.map +1 -1
- package/lib/types/server/site.d.ts.map +1 -1
- package/lib/types/server/templates.d.ts +4 -0
- package/lib/types/server/templates.d.ts.map +1 -0
- package/lib/types/server/types.d.ts +5 -0
- package/lib/types/server/types.d.ts.map +1 -1
- package/lib/types/server.d.ts.map +1 -1
- package/lib/types/site/templates.d.ts +12 -1
- package/lib/types/site/templates.d.ts.map +1 -1
- package/lib/types/types.d.ts +2 -1
- package/lib/types/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/RenderingTemplateCollection.ts +51 -0
- package/src/auth.ts +27 -0
- package/src/index.ts +1 -0
- package/src/server/app-package.ts +13 -0
- package/src/server/site.ts +9 -0
- package/src/server/templates.ts +80 -0
- package/src/server/types.ts +5 -0
- package/src/server.ts +4 -0
- package/src/site/templates.ts +179 -2
- package/src/types.ts +5 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RenderingTemplateCollection = void 0;
|
|
4
|
+
const utils_js_1 = require("./utils.js");
|
|
5
|
+
class RenderingTemplateCollection {
|
|
6
|
+
templates;
|
|
7
|
+
name;
|
|
8
|
+
title;
|
|
9
|
+
icon;
|
|
10
|
+
description;
|
|
11
|
+
constructor({ name, title, icon, description, templates }) {
|
|
12
|
+
this.name = name;
|
|
13
|
+
this.title = title || (0, utils_js_1.kebabCaseToTitle)(name);
|
|
14
|
+
this.icon = icon;
|
|
15
|
+
this.description = description;
|
|
16
|
+
this.templates = templates;
|
|
17
|
+
}
|
|
18
|
+
getTemplateDefinitions() {
|
|
19
|
+
return this.templates;
|
|
20
|
+
}
|
|
21
|
+
getTemplate(name) {
|
|
22
|
+
return this.templates.find(t => t.name === name);
|
|
23
|
+
}
|
|
24
|
+
[Symbol.iterator]() {
|
|
25
|
+
let index = 0;
|
|
26
|
+
const templates = this.templates;
|
|
27
|
+
return {
|
|
28
|
+
next() {
|
|
29
|
+
if (index < templates.length) {
|
|
30
|
+
return { value: templates[index++], done: false };
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
return { done: true, value: undefined };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
map(callback) {
|
|
39
|
+
return this.templates.map(callback);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.RenderingTemplateCollection = RenderingTemplateCollection;
|
|
43
|
+
//# sourceMappingURL=RenderingTemplateCollection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderingTemplateCollection.js","sourceRoot":"","sources":["../../src/RenderingTemplateCollection.ts"],"names":[],"mappings":";;;AACA,yCAA8C;AAM9C,MAAa,2BAA2B;IACpC,SAAS,CAAgC;IACzC,IAAI,CAAS;IACb,KAAK,CAAU;IACf,IAAI,CAAU;IACd,WAAW,CAAU;IAErB,YAAY,EACR,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EACV;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAA,2BAAgB,EAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,sBAAsB;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,WAAW,CAAC,IAAY;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAEjC,OAAO;YACH,IAAI;gBACA,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;oBAC3B,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAC5C,CAAC;YACL,CAAC;SACJ,CAAC;IACN,CAAC;IAED,GAAG,CAAI,QAAqE;QACxE,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;CACJ;AA3CD,kEA2CC"}
|
package/lib/cjs/auth.js
CHANGED
|
@@ -54,11 +54,14 @@ async function authorize(ctx, endpointOverrides, toolContext) {
|
|
|
54
54
|
}
|
|
55
55
|
try {
|
|
56
56
|
const { payload } = await verifyToken(value);
|
|
57
|
+
assertAllowedOrg(payload);
|
|
57
58
|
const session = new AuthSession(value, payload, endpointOverrides, toolContext);
|
|
58
59
|
ctx.set("auth", session);
|
|
59
60
|
return session;
|
|
60
61
|
}
|
|
61
62
|
catch (err) {
|
|
63
|
+
if (err instanceof http_exception_1.HTTPException)
|
|
64
|
+
throw err;
|
|
62
65
|
throw new http_exception_1.HTTPException(401, {
|
|
63
66
|
message: err.message,
|
|
64
67
|
cause: err
|
|
@@ -101,4 +104,28 @@ exports.AuthSession = AuthSession;
|
|
|
101
104
|
function isAllowedIssuer(iss) {
|
|
102
105
|
return iss.endsWith(".vertesia.io") || iss.endsWith(".becomposable.com");
|
|
103
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* If VERTESIA_ALLOWED_ORGS is set (comma-separated org IDs), restrict access
|
|
109
|
+
* to only those organizations. If not set, all authenticated orgs are allowed.
|
|
110
|
+
*/
|
|
111
|
+
let _allowedOrgs;
|
|
112
|
+
function getAllowedOrgs() {
|
|
113
|
+
if (_allowedOrgs === undefined) {
|
|
114
|
+
const raw = process.env.VERTESIA_ALLOWED_ORGS;
|
|
115
|
+
_allowedOrgs = raw
|
|
116
|
+
? new Set(raw.split(',').map(s => s.trim()).filter(Boolean))
|
|
117
|
+
: null;
|
|
118
|
+
}
|
|
119
|
+
return _allowedOrgs;
|
|
120
|
+
}
|
|
121
|
+
function assertAllowedOrg(payload) {
|
|
122
|
+
const allowed = getAllowedOrgs();
|
|
123
|
+
if (!allowed)
|
|
124
|
+
return;
|
|
125
|
+
if (!allowed.has(payload.account.id)) {
|
|
126
|
+
throw new http_exception_1.HTTPException(403, {
|
|
127
|
+
message: `Organization ${payload.account.name} is not authorized to access this server`,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
104
131
|
//# sourceMappingURL=auth.js.map
|
package/lib/cjs/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":";;;AAQA,0BAcC;AAED,kCAUC;AAeD,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":";;;AAQA,0BAcC;AAED,kCAUC;AAeD,8BA+BC;AAhFD,6CAAmE;AAGnE,wDAAoD;AACpD,+BAA+F;AAE/F,MAAM,KAAK,GAAoC,EAAE,CAAC;AAE3C,KAAK,UAAU,OAAO,CAAC,GAAW;IACrC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YACnC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBACP,OAAO,CAAC,CAAC,IAAI,EAA4B,CAAC;YAC9C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,GAAG,GAAG,IAAA,wBAAiB,EAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,KAAK,CAAC,GAAG,CAAC;AACrB,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,KAAa;IAC3C,MAAM,UAAU,GAAG,IAAA,gBAAS,EAAC,KAAK,CAAC,CAAC;IACpC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,UAAU,CAAC,GAAG,mBAAmB,CAAC,CAAC;IACjE,OAAO,MAAM,IAAA,gBAAS,EAAmB,KAAK,EAAE,IAAI,CAAC,CAAC;AAC1D,CAAC;AAeM,KAAK,UAAU,SAAS,CAAC,GAAY,EAAE,iBAAqC,EAAE,WAAyB;IAC1G,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,MAAM,IAAI,8BAAa,CAAC,GAAG,EAAE;YACzB,OAAO,EAAE,8BAA8B;SAC1C,CAAC,CAAC;IACP,CAAC;IACD,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,8BAAa,CAAC,GAAG,EAAE;YACzB,OAAO,EAAE,wBAAwB,MAAM,mBAAmB;SAC7D,CAAC,CAAC;IACP,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,MAAM,IAAI,8BAAa,CAAC,GAAG,EAAE;YACzB,OAAO,EAAE,4BAA4B;SACxC,CAAC,CAAC;IACP,CAAC;IACD,IAAI,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7C,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAChF,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC;IACnB,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,IAAI,GAAG,YAAY,8BAAa;YAAE,MAAM,GAAG,CAAC;QAC5C,MAAM,IAAI,8BAAa,CAAC,GAAG,EAAE;YACzB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,KAAK,EAAE,GAAG;SACb,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,MAAa,WAAW;IAUT;IACA;IAVX,OAAO,CAA6B;IACpC,SAAS,CAIP;IACF,WAAW,CAAe;IAE1B,YACW,KAAa,EACb,OAAyB,EAChC,iBAAqC,EACrC,WAAyB;QAHlB,UAAK,GAAL,KAAK,CAAQ;QACb,YAAO,GAAP,OAAO,CAAkB;QAIhC,MAAM,OAAO,GAAG,IAAA,wBAAe,EAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnD,gFAAgF;QAChF,IAAI,CAAC,SAAS,GAAG;YACb,MAAM,EAAE,iBAAiB,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM;YACnD,KAAK,EAAE,iBAAiB,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK;YAChD,KAAK,EAAE,iBAAiB,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG;SAClE,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,SAAS;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,OAAO,CAAC,GAAG,CAAC,uCAAuC,QAAQ,EAAE,EAAE;gBAC3D,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ;gBAChC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS;gBACtC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK;gBAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC5B,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,GAAG,MAAM,uBAAc,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAChG,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AAtCD,kCAsCC;AAED,SAAS,eAAe,CAAC,GAAW;IAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AAC7E,CAAC;AAED;;;GAGG;AACH,IAAI,YAA4C,CAAC;AACjD,SAAS,cAAc;IACnB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAC9C,YAAY,GAAG,GAAG;YACd,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC5D,CAAC,CAAC,IAAI,CAAC;IACf,CAAC;IACD,OAAO,YAAY,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAyB;IAC/C,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,8BAAa,CAAC,GAAG,EAAE;YACzB,OAAO,EAAE,gBAAgB,OAAO,CAAC,OAAO,CAAC,IAAI,0CAA0C;SAC1F,CAAC,CAAC;IACP,CAAC;AACL,CAAC"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -19,6 +19,7 @@ var auth_js_1 = require("./auth.js");
|
|
|
19
19
|
Object.defineProperty(exports, "authorize", { enumerable: true, get: function () { return auth_js_1.authorize; } });
|
|
20
20
|
Object.defineProperty(exports, "AuthSession", { enumerable: true, get: function () { return auth_js_1.AuthSession; } });
|
|
21
21
|
__exportStar(require("./ContentTypesCollection.js"), exports);
|
|
22
|
+
__exportStar(require("./RenderingTemplateCollection.js"), exports);
|
|
22
23
|
var copy_assets_js_1 = require("./copy-assets.js");
|
|
23
24
|
Object.defineProperty(exports, "copyRuntimeAssets", { enumerable: true, get: function () { return copy_assets_js_1.copyRuntimeAssets; } });
|
|
24
25
|
__exportStar(require("./InteractionCollection.js"), exports);
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAAmD;AAA1C,oGAAA,SAAS,OAAA;AAAE,sGAAA,WAAW,OAAA;AAC/B,8DAA4C;AAC5C,mDAAqD;AAA5C,mHAAA,iBAAiB,OAAA;AAC1B,6DAA2C;AAC3C,8CAA4B;AAC5B,oDAAkC;AAClC,sDAAoC;AACpC,uDAAqC;AACrC,sDAAoC;AACpC,oDAAkC;AAClC,6CAA2B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAAmD;AAA1C,oGAAA,SAAS,OAAA;AAAE,sGAAA,WAAW,OAAA;AAC/B,8DAA4C;AAC5C,mEAAiD;AACjD,mDAAqD;AAA5C,mHAAA,iBAAiB,OAAA;AAC1B,6DAA2C;AAC3C,8CAA4B;AAC5B,oDAAkC;AAClC,sDAAoC;AACpC,uDAAqC;AACrC,sDAAoC;AACpC,oDAAkC;AAClC,6CAA2B"}
|
|
@@ -52,6 +52,13 @@ const builders = {
|
|
|
52
52
|
}
|
|
53
53
|
pkg.types = allTypes;
|
|
54
54
|
},
|
|
55
|
+
async templates(pkg, config) {
|
|
56
|
+
const basePath = `${config.prefix || '/api'}/templates`;
|
|
57
|
+
pkg.templates = (config.templates || []).flatMap(coll => coll.templates.map(({ instructions: _, ...ref }) => ({
|
|
58
|
+
...ref,
|
|
59
|
+
path: `${basePath}/${coll.name}/${ref.name}`,
|
|
60
|
+
})));
|
|
61
|
+
},
|
|
55
62
|
async widgets(pkg, config) {
|
|
56
63
|
const { skills: skillCollections = [] } = config;
|
|
57
64
|
const widgets = {};
|
|
@@ -93,6 +100,7 @@ async function handlePackageRequest(c, config) {
|
|
|
93
100
|
await builders.tools(pkg, config, c);
|
|
94
101
|
await builders.interactions(pkg, config, c);
|
|
95
102
|
await builders.types(pkg, config, c);
|
|
103
|
+
await builders.templates(pkg, config, c);
|
|
96
104
|
await builders.widgets(pkg, config, c);
|
|
97
105
|
await builders.ui(pkg, config, c);
|
|
98
106
|
await builders.settings(pkg, config, c);
|
|
@@ -107,6 +115,9 @@ async function handlePackageRequest(c, config) {
|
|
|
107
115
|
if (scopes.has('types')) {
|
|
108
116
|
await builders.types(pkg, config, c);
|
|
109
117
|
}
|
|
118
|
+
if (scopes.has('templates')) {
|
|
119
|
+
await builders.templates(pkg, config, c);
|
|
120
|
+
}
|
|
110
121
|
if (scopes.has('widgets')) {
|
|
111
122
|
await builders.widgets(pkg, config, c);
|
|
112
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-package.js","sourceRoot":"","sources":["../../../src/server/app-package.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"app-package.js","sourceRoot":"","sources":["../../../src/server/app-package.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/server/site.js
CHANGED
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createSiteRoute = createSiteRoute;
|
|
4
4
|
const templates_js_1 = require("../site/templates.js");
|
|
5
5
|
function createSiteRoute(app, basePath, config) {
|
|
6
|
-
const { tools = [], interactions = [], types = [], skills = [], } = config;
|
|
6
|
+
const { tools = [], interactions = [], types = [], skills = [], templates = [], } = config;
|
|
7
7
|
// Index page
|
|
8
8
|
app.get(`${basePath}/`, (c) => {
|
|
9
9
|
return c.html((0, templates_js_1.indexPage)(config));
|
|
@@ -26,6 +26,12 @@ function createSiteRoute(app, basePath, config) {
|
|
|
26
26
|
return c.html((0, templates_js_1.interactionCollectionPage)(coll));
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
|
+
// Template collection pages
|
|
30
|
+
for (const coll of templates) {
|
|
31
|
+
app.get(`${basePath}/templates/${coll.name}`, (c) => {
|
|
32
|
+
return c.html((0, templates_js_1.templateCollectionPage)(coll));
|
|
33
|
+
});
|
|
34
|
+
}
|
|
29
35
|
// Content type collection pages
|
|
30
36
|
for (const coll of types) {
|
|
31
37
|
app.get(`${basePath}/types/${coll.name}`, (c) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"site.js","sourceRoot":"","sources":["../../../src/server/site.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"site.js","sourceRoot":"","sources":["../../../src/server/site.ts"],"names":[],"mappings":";;AAYA,0CAiDC;AA5DD,uDAO8B;AAI9B,SAAgB,eAAe,CAAC,GAAS,EAAE,QAAgB,EAAE,MAAwB;IACjF,MAAM,EACF,KAAK,GAAG,EAAE,EACV,YAAY,GAAG,EAAE,EACjB,KAAK,GAAG,EAAE,EACV,MAAM,GAAG,EAAE,EACX,SAAS,GAAG,EAAE,GACjB,GAAG,MAAM,CAAC;IAEX,aAAa;IACb,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QAC1B,OAAO,CAAC,CAAC,IAAI,CAAC,IAAA,wBAAS,EAAC,MAAM,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,wBAAwB;IACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,UAAU,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,IAAA,iCAAkB,EAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,yBAAyB;IACzB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,WAAW,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,IAAA,kCAAmB,EAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACP,CAAC;IAED,+BAA+B;IAC/B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAC9B,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,iBAAiB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YACnD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAA,wCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,4BAA4B;IAC5B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,cAAc,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAChD,OAAO,CAAC,CAAC,IAAI,CAAC,IAAA,qCAAsB,EAAC,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,gCAAgC;IAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,UAAU,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,IAAA,wCAAyB,EAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC;AAEL,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ================== Template Endpoints ==================
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createTemplatesRoute = createTemplatesRoute;
|
|
5
|
+
const hono_1 = require("hono");
|
|
6
|
+
const http_exception_1 = require("hono/http-exception");
|
|
7
|
+
function toRef(basePath, collectionName, { instructions: _, ...ref }) {
|
|
8
|
+
return { ...ref, path: `${basePath}/${collectionName}/${ref.name}` };
|
|
9
|
+
}
|
|
10
|
+
function createTemplatesRoute(app, basePath, config) {
|
|
11
|
+
const { templates = [] } = config;
|
|
12
|
+
// GET /api/templates - Returns all templates from all collections (without instructions)
|
|
13
|
+
app.get(basePath, (c) => {
|
|
14
|
+
const allTemplates = templates.flatMap(coll => coll.templates.map(t => toRef(basePath, coll.name, t)));
|
|
15
|
+
return c.json({
|
|
16
|
+
title: 'All Templates',
|
|
17
|
+
description: 'All available templates across all collections',
|
|
18
|
+
templates: allTemplates,
|
|
19
|
+
collections: templates.map(t => ({
|
|
20
|
+
name: t.name,
|
|
21
|
+
title: t.title,
|
|
22
|
+
description: t.description,
|
|
23
|
+
})),
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
// Create template collection endpoints
|
|
27
|
+
for (const coll of templates) {
|
|
28
|
+
app.route(`${basePath}/${coll.name}`, createTemplateEndpoints(basePath, coll));
|
|
29
|
+
}
|
|
30
|
+
// GET /api/templates/:name - Direct access by "collection:name" id format
|
|
31
|
+
app.get(`${basePath}/:id`, async (c) => {
|
|
32
|
+
const id = c.req.param('id');
|
|
33
|
+
const parts = id.split(':');
|
|
34
|
+
if (parts.length !== 2) {
|
|
35
|
+
throw new http_exception_1.HTTPException(400, {
|
|
36
|
+
message: "Invalid template id. Expected format 'collection:name'"
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const collName = parts[0];
|
|
40
|
+
const templateName = parts[1];
|
|
41
|
+
const template = templates.find(t => t.name === collName)?.getTemplate(templateName);
|
|
42
|
+
if (template) {
|
|
43
|
+
return c.json(template);
|
|
44
|
+
}
|
|
45
|
+
throw new http_exception_1.HTTPException(404, {
|
|
46
|
+
message: "No template found with id: " + id
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function createTemplateEndpoints(basePath, coll) {
|
|
51
|
+
const endpoint = new hono_1.Hono();
|
|
52
|
+
endpoint.get('/', (c) => {
|
|
53
|
+
return c.json(coll.templates.map(t => toRef(basePath, coll.name, t)));
|
|
54
|
+
});
|
|
55
|
+
endpoint.get('/:name', (c) => {
|
|
56
|
+
const name = c.req.param('name');
|
|
57
|
+
const template = coll.templates.find(t => t.name === name);
|
|
58
|
+
if (!template) {
|
|
59
|
+
throw new http_exception_1.HTTPException(404, {
|
|
60
|
+
message: "No template found with name: " + name
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
return c.json(template);
|
|
64
|
+
});
|
|
65
|
+
return endpoint;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/server/templates.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/server.js
CHANGED
|
@@ -11,6 +11,7 @@ const mcp_js_1 = require("./server/mcp.js");
|
|
|
11
11
|
const site_js_1 = require("./server/site.js");
|
|
12
12
|
const skills_js_1 = require("./server/skills.js");
|
|
13
13
|
const tools_js_1 = require("./server/tools.js");
|
|
14
|
+
const templates_js_1 = require("./server/templates.js");
|
|
14
15
|
const widgets_js_1 = require("./server/widgets.js");
|
|
15
16
|
const app_package_js_1 = require("./server/app-package.js");
|
|
16
17
|
const content_types_js_1 = require("./server/content-types.js");
|
|
@@ -39,7 +40,7 @@ const ToolExecutionPayloadSchema = zod_1.z.object({
|
|
|
39
40
|
* ```
|
|
40
41
|
*/
|
|
41
42
|
function createToolServer(config) {
|
|
42
|
-
const { prefix = '/api', tools = [], interactions = [], skills = [], mcpProviders = [], disableHtml = false, } = config;
|
|
43
|
+
const { prefix = '/api', tools = [], interactions = [], skills = [], templates = [], mcpProviders = [], disableHtml = false, } = config;
|
|
43
44
|
const app = new hono_1.Hono();
|
|
44
45
|
// Add CORS middleware globally
|
|
45
46
|
app.use('*', (0, cors_1.cors)({ origin: '*', allowMethods: ['GET', 'POST', 'OPTIONS'] }));
|
|
@@ -82,6 +83,7 @@ function createToolServer(config) {
|
|
|
82
83
|
endpoints: {
|
|
83
84
|
tools: allToolEndpoints,
|
|
84
85
|
interactions: interactions.map(col => `${prefix}/interactions/${col.name}`),
|
|
86
|
+
templates: templates.map(col => `${prefix}/templates/${col.name}`),
|
|
85
87
|
mcp: mcpProviders.map(p => `${prefix}/mcp/${p.name}`),
|
|
86
88
|
}
|
|
87
89
|
});
|
|
@@ -91,6 +93,7 @@ function createToolServer(config) {
|
|
|
91
93
|
(0, skills_js_1.createSkillsRoute)(app, `${prefix}/skills`, config);
|
|
92
94
|
(0, widgets_js_1.createWidgetsRoute)(app, `${prefix}/widgets`, config);
|
|
93
95
|
(0, interactions_js_1.createInteractionsRoute)(app, `${prefix}/interactions`, config);
|
|
96
|
+
(0, templates_js_1.createTemplatesRoute)(app, `${prefix}/templates`, config);
|
|
94
97
|
(0, content_types_js_1.createContentTypesRoute)(app, `${prefix}/types`, config);
|
|
95
98
|
(0, mcp_js_1.createMcpRoute)(app, `${prefix}/mcp`, config);
|
|
96
99
|
// Global error handler - returns ToolExecutionResponseError format
|
package/lib/cjs/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ exports.mcpProviderCard = mcpProviderCard;
|
|
|
6
6
|
exports.toolDetailCard = toolDetailCard;
|
|
7
7
|
exports.skillCard = skillCard;
|
|
8
8
|
exports.skillDetailCard = skillDetailCard;
|
|
9
|
+
exports.templateDetailCard = templateDetailCard;
|
|
10
|
+
exports.templateCollectionPage = templateCollectionPage;
|
|
9
11
|
exports.indexPage = indexPage;
|
|
10
12
|
exports.toolCollectionPage = toolCollectionPage;
|
|
11
13
|
exports.skillCollectionPage = skillCollectionPage;
|
|
@@ -24,6 +26,14 @@ const skillIcon = /*html*/ `
|
|
|
24
26
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
25
27
|
<path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"/>
|
|
26
28
|
</svg>`;
|
|
29
|
+
const templateIcon = /*html*/ `
|
|
30
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
31
|
+
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/>
|
|
32
|
+
<polyline points="14 2 14 8 20 8"/>
|
|
33
|
+
<line x1="16" y1="13" x2="8" y2="13"/>
|
|
34
|
+
<line x1="16" y1="17" x2="8" y2="17"/>
|
|
35
|
+
<polyline points="10 9 9 9 8 9"/>
|
|
36
|
+
</svg>`;
|
|
27
37
|
/**
|
|
28
38
|
* Extended styles for detail pages
|
|
29
39
|
*/
|
|
@@ -246,6 +256,19 @@ ${styles_js_1.baseStyles}
|
|
|
246
256
|
color: white;
|
|
247
257
|
}
|
|
248
258
|
|
|
259
|
+
.template-type-badge {
|
|
260
|
+
background: #f59e0b;
|
|
261
|
+
color: white;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.template-type-badge.document {
|
|
265
|
+
background: #f59e0b;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
.template-type-badge.presentation {
|
|
269
|
+
background: #8b5cf6;
|
|
270
|
+
}
|
|
271
|
+
|
|
249
272
|
@media (prefers-color-scheme: dark) {
|
|
250
273
|
.nav a {
|
|
251
274
|
color: #9ca3af;
|
|
@@ -568,6 +591,135 @@ function skillDetailCard(skill, collection) {
|
|
|
568
591
|
</div>
|
|
569
592
|
</div>`;
|
|
570
593
|
}
|
|
594
|
+
/**
|
|
595
|
+
* Render a template endpoint URL with copy button
|
|
596
|
+
*/
|
|
597
|
+
function renderTemplateUrl(template, collectionName) {
|
|
598
|
+
const templatePath = `/api/templates/${collectionName}/${template.name}`;
|
|
599
|
+
return /*html*/ `<div class="script-item" style='display: flex; align-items: center; gap: 0.5rem; width:100%;justify-content: space-between;'><span class="script-name">${templatePath}</span>
|
|
600
|
+
<button class="copy-btn" onclick="navigator.clipboard.writeText(window.location.origin + '${templatePath}')" title="Copy endpoint URL">
|
|
601
|
+
${copyIcon}
|
|
602
|
+
</button>
|
|
603
|
+
</div>`;
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* Render a tag list
|
|
607
|
+
*/
|
|
608
|
+
function tagList(tags) {
|
|
609
|
+
if (!tags || tags.length === 0)
|
|
610
|
+
return '';
|
|
611
|
+
return /*html*/ `
|
|
612
|
+
<div class="detail-section">
|
|
613
|
+
<h4 class="detail-section-title">Tags</h4>
|
|
614
|
+
<div class="keyword-list">
|
|
615
|
+
${tags.map(tag => `<span class="keyword-tag">${tag}</span>`).join('')}
|
|
616
|
+
</div>
|
|
617
|
+
</div>`;
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Render an asset file list
|
|
621
|
+
*/
|
|
622
|
+
function assetList(assets) {
|
|
623
|
+
if (assets.length === 0)
|
|
624
|
+
return '';
|
|
625
|
+
return /*html*/ `
|
|
626
|
+
<div class="detail-section">
|
|
627
|
+
<h4 class="detail-section-title">Assets</h4>
|
|
628
|
+
<div class="script-list">
|
|
629
|
+
${assets.map(asset => /*html*/ `
|
|
630
|
+
<div class="script-item">
|
|
631
|
+
${fileIcon}
|
|
632
|
+
<span class="script-name">${asset}</span>
|
|
633
|
+
</div>
|
|
634
|
+
`).join('')}
|
|
635
|
+
</div>
|
|
636
|
+
</div>`;
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* Render an instructions preview section
|
|
640
|
+
*/
|
|
641
|
+
function instructionsPreview(instructions) {
|
|
642
|
+
return /*html*/ `
|
|
643
|
+
<div class="detail-section">
|
|
644
|
+
<h4 class="detail-section-title">Instructions Preview</h4>
|
|
645
|
+
<div class="instructions-preview">${escapeHtml(instructions.slice(0, 1000))}${instructions.length > 1000 ? '...' : ''}</div>
|
|
646
|
+
</div>`;
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* Render a detailed template card
|
|
650
|
+
*/
|
|
651
|
+
function templateDetailCard(template, collection) {
|
|
652
|
+
return /*html*/ `
|
|
653
|
+
<div class="detail-card">
|
|
654
|
+
<div class="detail-header">
|
|
655
|
+
<div>
|
|
656
|
+
<h3 class="detail-title">${template.title || template.name}</h3>
|
|
657
|
+
<p class="detail-desc">${template.description || 'No description'}</p>
|
|
658
|
+
${renderTemplateUrl(template, collection.name)}
|
|
659
|
+
</div>
|
|
660
|
+
<div class="detail-badges">
|
|
661
|
+
<span class="badge template-type-badge ${template.type}">${template.type}</span>
|
|
662
|
+
</div>
|
|
663
|
+
</div>
|
|
664
|
+
<div class="detail-body">
|
|
665
|
+
<div class="info-grid">
|
|
666
|
+
<div class="info-item">
|
|
667
|
+
<div class="info-label">Type</div>
|
|
668
|
+
<div class="info-value"><code>${template.type}</code></div>
|
|
669
|
+
</div>
|
|
670
|
+
<div class="info-item">
|
|
671
|
+
<div class="info-label">Assets</div>
|
|
672
|
+
<div class="info-value">${template.assets.length} file${template.assets.length !== 1 ? 's' : ''}</div>
|
|
673
|
+
</div>
|
|
674
|
+
</div>
|
|
675
|
+
|
|
676
|
+
${tagList(template.tags)}
|
|
677
|
+
${assetList(template.assets)}
|
|
678
|
+
${instructionsPreview(template.instructions)}
|
|
679
|
+
</div>
|
|
680
|
+
</div>`;
|
|
681
|
+
}
|
|
682
|
+
/**
|
|
683
|
+
* Render a template collection detail page
|
|
684
|
+
*/
|
|
685
|
+
function templateCollectionPage(collection) {
|
|
686
|
+
const templatesArray = Array.from(collection);
|
|
687
|
+
return /*html*/ `
|
|
688
|
+
<!DOCTYPE html>
|
|
689
|
+
<html lang="en">
|
|
690
|
+
<head>
|
|
691
|
+
<meta charset="UTF-8">
|
|
692
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
693
|
+
<title>${collection.title || collection.name} - Templates</title>
|
|
694
|
+
<style>${detailStyles}</style>
|
|
695
|
+
</head>
|
|
696
|
+
<body>
|
|
697
|
+
<nav class="nav">
|
|
698
|
+
<a href="/">${backArrow} Back to all collections</a>
|
|
699
|
+
</nav>
|
|
700
|
+
|
|
701
|
+
<div class="header">
|
|
702
|
+
<div class="header-icon">${collection.icon || templateIcon}</div>
|
|
703
|
+
<div>
|
|
704
|
+
<h1>${collection.title || collection.name}</h1>
|
|
705
|
+
<p style="color: #6b7280; margin: 0.25rem 0 0 0;">${collection.description || ''}</p>
|
|
706
|
+
<div class="endpoint-box">
|
|
707
|
+
<code>/api/templates/${collection.name}</code>
|
|
708
|
+
<button class="copy-btn" onclick="navigator.clipboard.writeText(window.location.origin + '/api/templates/${collection.name}')" title="Copy endpoint URL">
|
|
709
|
+
${copyIcon}
|
|
710
|
+
</button>
|
|
711
|
+
</div>
|
|
712
|
+
</div>
|
|
713
|
+
</div>
|
|
714
|
+
|
|
715
|
+
<h2>${templatesArray.length} Template${templatesArray.length !== 1 ? 's' : ''}</h2>
|
|
716
|
+
|
|
717
|
+
${templatesArray.length > 0 ?
|
|
718
|
+
templatesArray.map(template => templateDetailCard(template, collection)).join('') :
|
|
719
|
+
'<div class="empty-state">No templates in this collection</div>'}
|
|
720
|
+
</body>
|
|
721
|
+
</html>`;
|
|
722
|
+
}
|
|
571
723
|
/**
|
|
572
724
|
* Escape HTML for safe rendering
|
|
573
725
|
*/
|
|
@@ -637,9 +789,11 @@ function copyPluginUrl(btn) {
|
|
|
637
789
|
* Note: The fourth argument is backward compatible:
|
|
638
790
|
* - If a string is passed, it is treated as the title.
|
|
639
791
|
* - If an array is passed, it is treated as MCP providers and the fifth argument (if any) is the title.
|
|
792
|
+
* @deprecated Static templates were replaced by a React site. Do not use them anymore.
|
|
793
|
+
* Will be removed.
|
|
640
794
|
*/
|
|
641
795
|
function indexPage(config) {
|
|
642
|
-
const { title = 'Tools Server', tools = [], interactions = [], skills = [], types = [], mcpProviders = [], hideUILinks = false, } = config;
|
|
796
|
+
const { title = 'Tools Server', tools = [], interactions = [], skills = [], templates = [], types = [], mcpProviders = [], hideUILinks = false, } = config;
|
|
643
797
|
return /*html*/ `
|
|
644
798
|
<!DOCTYPE html>
|
|
645
799
|
<html lang="en">
|
|
@@ -667,6 +821,7 @@ function indexPage(config) {
|
|
|
667
821
|
${skills.length ? /*html*/ `<span><dot></dot> ${skills.length} skill collection${skills.length !== 1 ? 's' : ''}</span>` : ''}
|
|
668
822
|
${interactions.length ? /*html*/ `<span><dot></dot> ${interactions.length} interaction collection${interactions.length !== 1 ? 's' : ''}</span>` : ''}
|
|
669
823
|
${types.length ? /*html*/ `<span><dot></dot> ${types.length} content type collection${types.length !== 1 ? 's' : ''}</span>` : ''}
|
|
824
|
+
${templates.length ? /*html*/ `<span><dot></dot> ${templates.length} template collection${templates.length !== 1 ? 's' : ''}</span>` : ''}
|
|
670
825
|
${mcpProviders.length ? /*html*/ `<span><dot></dot> ${mcpProviders.length} MCP provider${mcpProviders.length !== 1 ? 's' : ''}</span>` : ''}
|
|
671
826
|
</div>
|
|
672
827
|
${hideUILinks ? '' : renderUILinks()}
|
|
@@ -694,7 +849,7 @@ function indexPage(config) {
|
|
|
694
849
|
type="search"
|
|
695
850
|
id="collection-search"
|
|
696
851
|
class="search-input"
|
|
697
|
-
placeholder="Search tools, skills, interactions, types..."
|
|
852
|
+
placeholder="Search tools, skills, interactions, types, templates..."
|
|
698
853
|
aria-label="Search collections"
|
|
699
854
|
autocomplete="off"
|
|
700
855
|
/>
|
|
@@ -763,6 +918,22 @@ function indexPage(config) {
|
|
|
763
918
|
</section>
|
|
764
919
|
` : ''}
|
|
765
920
|
|
|
921
|
+
${templates.length > 0 ? /*html*/ `
|
|
922
|
+
<section data-section="templates">
|
|
923
|
+
<hr>
|
|
924
|
+
<div class="section-header">
|
|
925
|
+
<h2>Rendering Template Collections</h2>
|
|
926
|
+
<p class="section-subtitle">Document and presentation templates for content generation.</p>
|
|
927
|
+
</div>
|
|
928
|
+
<div class="card-grid">
|
|
929
|
+
${templates.map((t) => {
|
|
930
|
+
const count = t.getTemplateDefinitions().length;
|
|
931
|
+
return collectionCard(t, 'templates', `${count} template${count !== 1 ? 's' : ''}`);
|
|
932
|
+
}).join('')}
|
|
933
|
+
</div>
|
|
934
|
+
</section>
|
|
935
|
+
` : ''}
|
|
936
|
+
|
|
766
937
|
${mcpProviders.length > 0 ? /*html*/ `
|
|
767
938
|
<section data-section="mcp">
|
|
768
939
|
<hr>
|