@vertesia/tools-sdk 1.6.0-dev.20261014.015055Z → 1.6.0-dev.20261022.120426Z
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/SkillCollection.d.ts.map +1 -1
- package/lib/SkillCollection.js +26 -1
- package/lib/SkillCollection.js.map +1 -1
- package/lib/auth.js +16 -1
- package/lib/auth.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/safe-fetch.d.ts +51 -0
- package/lib/safe-fetch.d.ts.map +1 -0
- package/lib/safe-fetch.js +273 -0
- package/lib/safe-fetch.js.map +1 -0
- package/lib/server/app-package.d.ts.map +1 -1
- package/lib/server/app-package.js +1 -0
- package/lib/server/app-package.js.map +1 -1
- package/lib/server/skills.js +26 -1
- package/lib/server/skills.js.map +1 -1
- package/lib/server/types.d.ts +4 -0
- package/lib/server/types.d.ts.map +1 -1
- package/lib/types.d.ts +26 -0
- package/lib/types.d.ts.map +1 -1
- package/lib/utils.d.ts +4 -0
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +7 -0
- package/lib/utils.js.map +1 -1
- package/package.json +13 -8
- package/src/SkillCollection.ts +30 -1
- package/src/auth.ts +19 -1
- package/src/index.ts +1 -0
- package/src/safe-fetch.ts +324 -0
- package/src/server/app-package.ts +1 -0
- package/src/server/skills.ts +27 -1
- package/src/server/types.ts +2 -0
- package/src/types.ts +26 -0
- package/src/utils.ts +8 -0
package/lib/server/skills.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// ================== Skill Endpoints ==================
|
|
2
2
|
import { Hono } from 'hono';
|
|
3
3
|
import { HTTPException } from 'hono/http-exception';
|
|
4
|
-
import { makeScriptUrl } from '../utils.js';
|
|
4
|
+
import { makeScriptUrl, makeSkillFileUrl } from '../utils.js';
|
|
5
5
|
export function createSkillsRoute(app, basePath, config) {
|
|
6
6
|
const { skills = [] } = config;
|
|
7
7
|
// Build a map of skill name -> collection for routing
|
|
@@ -96,6 +96,31 @@ function createSkillEndpoints(coll) {
|
|
|
96
96
|
scripts: skill.scripts ? skill.scripts.map((s) => makeScriptUrl(url.origin, s)) : [],
|
|
97
97
|
});
|
|
98
98
|
});
|
|
99
|
+
// Get the Agent Skills resource files (scripts/, references/, assets/) for a specific skill.
|
|
100
|
+
// Separate from /scripts so existing clients keep receiving only the flat scripts.
|
|
101
|
+
endpoint.get('/:name/files', (c) => {
|
|
102
|
+
const name = c.req.param('name');
|
|
103
|
+
if (!name) {
|
|
104
|
+
throw new HTTPException(400, {
|
|
105
|
+
message: 'Skill name is required',
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
const skillName = name.startsWith('learn_') ? name.slice(6) : name;
|
|
109
|
+
const skill = coll.getSkill(skillName);
|
|
110
|
+
if (!skill) {
|
|
111
|
+
throw new HTTPException(404, {
|
|
112
|
+
message: `Skill not found: ${skillName}`,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const url = new URL(c.req.url);
|
|
116
|
+
return c.json({
|
|
117
|
+
skill_name: skill.name,
|
|
118
|
+
files: (skill.files ?? []).map((path) => ({
|
|
119
|
+
path,
|
|
120
|
+
url: makeSkillFileUrl(url.origin, skill.files_namespace ?? skill.name, path),
|
|
121
|
+
})),
|
|
122
|
+
});
|
|
123
|
+
});
|
|
99
124
|
// Get a specific skill by name
|
|
100
125
|
endpoint.get('/:name', (c) => {
|
|
101
126
|
const name = c.req.param('name');
|
package/lib/server/skills.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/server/skills.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,OAAO,EAAgB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/server/skills.ts"],"names":[],"mappings":"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"}
|
package/lib/server/types.d.ts
CHANGED
|
@@ -36,6 +36,10 @@ export interface MCPProviderConfig {
|
|
|
36
36
|
export interface ToolServerConfig {
|
|
37
37
|
/** OAuth scopes requested by the app; project permissions must be explicitly declared. */
|
|
38
38
|
oauth_scopes?: string[];
|
|
39
|
+
/** Declare exact standalone callbacks; installation provisions the public PKCE client. */
|
|
40
|
+
oauth_client?: {
|
|
41
|
+
redirect_uris: string[];
|
|
42
|
+
};
|
|
39
43
|
/**
|
|
40
44
|
* Server title for HTML pages (default: 'Tools Server')
|
|
41
45
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -320,6 +320,32 @@ export interface SkillDefinition {
|
|
|
320
320
|
* Scripts bundled with this skill (synced to sandbox when skill is used)
|
|
321
321
|
*/
|
|
322
322
|
scripts?: string[];
|
|
323
|
+
/**
|
|
324
|
+
* Agent Skills resource files from the skill's `scripts/`, `references/` and `assets/` directories, as
|
|
325
|
+
* paths relative to the skill directory (e.g. `scripts/extract.py`). They are synced to the sandbox
|
|
326
|
+
* under the skill's directory with these relative paths.
|
|
327
|
+
*/
|
|
328
|
+
files?: string[];
|
|
329
|
+
/** Build-time directory under `skill-files/`, independent of a runtime name override. Defaults to `name`. */
|
|
330
|
+
files_namespace?: string;
|
|
331
|
+
/**
|
|
332
|
+
* License from the Agent Skills `license` frontmatter field.
|
|
333
|
+
*/
|
|
334
|
+
license?: string;
|
|
335
|
+
/**
|
|
336
|
+
* Environment requirements from the Agent Skills `compatibility` frontmatter field.
|
|
337
|
+
*/
|
|
338
|
+
compatibility?: string;
|
|
339
|
+
/**
|
|
340
|
+
* Arbitrary key-value metadata from the Agent Skills `metadata` frontmatter field.
|
|
341
|
+
*/
|
|
342
|
+
metadata?: Record<string, string>;
|
|
343
|
+
/**
|
|
344
|
+
* Tools named by the Agent Skills `allowed-tools` frontmatter field, which is experimental in the
|
|
345
|
+
* spec and not supported by Vertesia. Informational only: unlike `tools`, these names are not
|
|
346
|
+
* resolved and never unlock a tool.
|
|
347
|
+
*/
|
|
348
|
+
allowed_tools?: string[];
|
|
323
349
|
/**
|
|
324
350
|
* The name of the widgets provided by this skill (if any)
|
|
325
351
|
* The name will be used to load the widget dynamically from the agent chat
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/lib/utils.d.ts
CHANGED
|
@@ -6,5 +6,9 @@
|
|
|
6
6
|
export declare function toPathName(name: string): string;
|
|
7
7
|
export declare function kebabCaseToTitle(name: string): string;
|
|
8
8
|
export declare function makeScriptUrl(origin: string, script: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* URL of an Agent Skills resource file, which the build copies to `skill-files/<skill>/<path>`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function makeSkillFileUrl(origin: string, skillName: string, filePath: string): string;
|
|
9
13
|
export declare function join(left: string, right: string): string;
|
|
10
14
|
//# sourceMappingURL=utils.d.ts.map
|
package/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS/C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,UAK5C;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAE3D;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAc/C"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS/C;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,UAK5C;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAE3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAGnF;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAc/C"}
|
package/lib/utils.js
CHANGED
|
@@ -22,6 +22,13 @@ export function kebabCaseToTitle(name) {
|
|
|
22
22
|
export function makeScriptUrl(origin, script) {
|
|
23
23
|
return join(origin, join('/scripts', script));
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* URL of an Agent Skills resource file, which the build copies to `skill-files/<skill>/<path>`.
|
|
27
|
+
*/
|
|
28
|
+
export function makeSkillFileUrl(origin, skillName, filePath) {
|
|
29
|
+
const encodedPath = filePath.split('/').map(encodeURIComponent).join('/');
|
|
30
|
+
return join(origin, `/skill-files/${encodeURIComponent(skillName)}/${encodedPath}`);
|
|
31
|
+
}
|
|
25
32
|
export function join(left, right) {
|
|
26
33
|
if (left.endsWith('/')) {
|
|
27
34
|
if (right.startsWith('/')) {
|
package/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACnC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,MAAM;aACV,KAAK,CAAC,QAAQ,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAClD,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IACzC,OAAO,IAAI;SACN,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAc;IACxD,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,KAAa;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,GAAG,KAAK,CAAC;QACxB,CAAC;IACL,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,GAAG,KAAK,CAAC;IACxB,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,GAAG,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;IAC9B,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACnC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,GAAG,MAAM;aACV,KAAK,CAAC,QAAQ,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAClD,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IACzC,OAAO,IAAI;SACN,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,MAAc;IACxD,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,SAAiB,EAAE,QAAgB;IAChF,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,MAAM,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,KAAa;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,GAAG,KAAK,CAAC;QACxB,CAAC;IACL,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,GAAG,KAAK,CAAC;IACxB,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,GAAG,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACvC,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;IAC9B,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vertesia/tools-sdk",
|
|
3
|
-
"version": "1.6.0-dev.
|
|
3
|
+
"version": "1.6.0-dev.20261022.120426Z",
|
|
4
4
|
"description": "Tools SDK - utilities for building remote tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -22,20 +22,20 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@types/node": "^24.19.
|
|
25
|
+
"@types/node": "^24.19.2",
|
|
26
26
|
"@vertesia/tsconfig": "0.1.0",
|
|
27
27
|
"typescript": "7.0.2",
|
|
28
|
-
"vitest": "5.0.
|
|
28
|
+
"vitest": "5.0.4"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"hono": "^4.13.13"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@llumiverse/common": "1.6.0-dev.
|
|
35
|
-
"@vertesia/client": "1.6.0-dev.
|
|
36
|
-
"@vertesia/common": "1.6.0-dev.
|
|
34
|
+
"@llumiverse/common": "1.6.0-dev.20261022.120426Z",
|
|
35
|
+
"@vertesia/client": "1.6.0-dev.20261022.120426Z",
|
|
36
|
+
"@vertesia/common": "1.6.0-dev.20261022.120426Z",
|
|
37
37
|
"jose": "^6.2.12",
|
|
38
|
-
"zod": "4.6.
|
|
38
|
+
"zod": "4.6.7"
|
|
39
39
|
},
|
|
40
40
|
"repository": {
|
|
41
41
|
"type": "git",
|
|
@@ -51,7 +51,12 @@
|
|
|
51
51
|
"agents",
|
|
52
52
|
"typescript"
|
|
53
53
|
],
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "bcaa7879b601ce9ccc394bcd3257822da13869cd",
|
|
55
|
+
"releaseIdentity": {
|
|
56
|
+
"source_sha": "bcaa7879b601ce9ccc394bcd3257822da13869cd",
|
|
57
|
+
"dependency_sha": "93466e47b06db23ac3c800e248d170afe65e5006",
|
|
58
|
+
"lock_sha256": "117e1c8068aa07d59117323a51ceccfc96cab543e50c03eb7efc19709d6f5e6b"
|
|
59
|
+
},
|
|
55
60
|
"scripts": {
|
|
56
61
|
"lint": "biome lint src",
|
|
57
62
|
"test": "vitest run",
|
package/src/SkillCollection.ts
CHANGED
|
@@ -257,11 +257,40 @@ export class SkillCollection implements ICollection<SkillDefinition> {
|
|
|
257
257
|
|
|
258
258
|
return {
|
|
259
259
|
name: skill.name,
|
|
260
|
-
instructions,
|
|
260
|
+
instructions: instructions + describeSkillFiles(skill),
|
|
261
261
|
};
|
|
262
262
|
}
|
|
263
263
|
}
|
|
264
264
|
|
|
265
|
+
/**
|
|
266
|
+
* Tell the agent where an Agent Skills skill's resource files live in the sandbox. Spec skills refer to
|
|
267
|
+
* them by paths relative to the skill directory (`scripts/extract.py`), which resolve from there.
|
|
268
|
+
*/
|
|
269
|
+
function describeSkillFiles(skill: SkillDefinition): string {
|
|
270
|
+
if (!skill.files || skill.files.length === 0) {
|
|
271
|
+
return '';
|
|
272
|
+
}
|
|
273
|
+
const lines: string[] = [];
|
|
274
|
+
let length = 0;
|
|
275
|
+
for (const file of skill.files) {
|
|
276
|
+
const line = `- \`${file}\``;
|
|
277
|
+
if (lines.length >= 20 || length + line.length > 2000) break;
|
|
278
|
+
lines.push(line);
|
|
279
|
+
length += line.length + 1;
|
|
280
|
+
}
|
|
281
|
+
const omitted = skill.files.length - lines.length;
|
|
282
|
+
if (omitted > 0) {
|
|
283
|
+
lines.push(
|
|
284
|
+
`... ${omitted} more ${omitted === 1 ? 'file' : 'files'}. Use execute_shell to list this directory for all available files.`,
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
const list = lines.join('\n');
|
|
288
|
+
return (
|
|
289
|
+
`\n\n---\n\nThis skill's files are in the sandbox under \`~/skills/${skill.name}/\`. ` +
|
|
290
|
+
`Resolve relative paths in these instructions from that directory:\n${list}`
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
|
|
265
294
|
// ================== Skill Parser ==================
|
|
266
295
|
|
|
267
296
|
interface SkillFrontmatter {
|
package/src/auth.ts
CHANGED
|
@@ -149,7 +149,25 @@ export class AuthSession implements ToolExecutionContext {
|
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
function isAllowedIssuer(iss: string) {
|
|
152
|
-
return iss.endsWith('.vertesia.io') || iss.endsWith('.becomposable.com');
|
|
152
|
+
return getTrustedIssuers().has(iss) || iss.endsWith('.vertesia.io') || iss.endsWith('.becomposable.com');
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* VERTESIA_TRUSTED_ISSUERS (comma-separated issuer URLs) trusts additional token issuers, such as a local
|
|
157
|
+
* token server (http://localhost:8202). An issuer must match an entry exactly; a trailing slash on an entry
|
|
158
|
+
* is ignored. Unset by default, which trusts no issuer beyond the built-in domains.
|
|
159
|
+
*/
|
|
160
|
+
let _trustedIssuers: Set<string> | undefined;
|
|
161
|
+
function getTrustedIssuers(): Set<string> {
|
|
162
|
+
if (_trustedIssuers === undefined) {
|
|
163
|
+
_trustedIssuers = new Set(
|
|
164
|
+
(process.env.VERTESIA_TRUSTED_ISSUERS ?? '')
|
|
165
|
+
.split(',')
|
|
166
|
+
.map((s) => s.trim().replace(/\/+$/, ''))
|
|
167
|
+
.filter(Boolean),
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
return _trustedIssuers;
|
|
153
171
|
}
|
|
154
172
|
|
|
155
173
|
/**
|
package/src/index.ts
CHANGED
|
@@ -6,6 +6,7 @@ export * from './InteractionCollection.js';
|
|
|
6
6
|
export { loadSkillsFromDirectory, loadToolsFromDirectory } from './node-loaders.js';
|
|
7
7
|
export * from './RenderingTemplateCollection.js';
|
|
8
8
|
export * from './SkillCollection.js';
|
|
9
|
+
export * from './safe-fetch.js';
|
|
9
10
|
export * from './scratch.js';
|
|
10
11
|
export type { BuildAppPackageOptions } from './server/app-package.js';
|
|
11
12
|
export { buildAppPackage } from './server/app-package.js';
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
import { type LookupAddress, lookup } from 'node:dns';
|
|
2
|
+
import { request as httpRequest, type IncomingMessage } from 'node:http';
|
|
3
|
+
import { request as httpsRequest } from 'node:https';
|
|
4
|
+
import { BlockList, isIP, type LookupFunction } from 'node:net';
|
|
5
|
+
import type { Readable, Transform } from 'node:stream';
|
|
6
|
+
import { createBrotliDecompress, createGunzip, createInflate } from 'node:zlib';
|
|
7
|
+
|
|
8
|
+
// Every IANA special-purpose IPv4 range, plus multicast and the reserved block: loopback, private,
|
|
9
|
+
// link-local (which holds the cloud metadata address 169.254.169.254), CGNAT and documentation ranges.
|
|
10
|
+
// https://www.iana.org/assignments/iana-ipv4-special-registry/
|
|
11
|
+
const blocked4 = new BlockList();
|
|
12
|
+
for (const [address, prefix] of [
|
|
13
|
+
['0.0.0.0', 8],
|
|
14
|
+
['10.0.0.0', 8],
|
|
15
|
+
['100.64.0.0', 10],
|
|
16
|
+
['127.0.0.0', 8],
|
|
17
|
+
['169.254.0.0', 16],
|
|
18
|
+
['172.16.0.0', 12],
|
|
19
|
+
['192.0.0.0', 24],
|
|
20
|
+
['192.0.2.0', 24],
|
|
21
|
+
['192.31.196.0', 24],
|
|
22
|
+
['192.52.193.0', 24],
|
|
23
|
+
['192.88.99.0', 24],
|
|
24
|
+
['192.168.0.0', 16],
|
|
25
|
+
['192.175.48.0', 24],
|
|
26
|
+
['198.18.0.0', 15],
|
|
27
|
+
['198.51.100.0', 24],
|
|
28
|
+
['203.0.113.0', 24],
|
|
29
|
+
['224.0.0.0', 4],
|
|
30
|
+
['240.0.0.0', 4],
|
|
31
|
+
] as const) {
|
|
32
|
+
blocked4.addSubnet(address, prefix, 'ipv4');
|
|
33
|
+
}
|
|
34
|
+
// IPv6 special-purpose ranges, including every prefix that embeds or translates an IPv4 address. A
|
|
35
|
+
// separate list: BlockList matches IPv4 addresses against IPv4-mapped IPv6 rules, so ::ffff:0:0/96 in
|
|
36
|
+
// the IPv4 list would block every IPv4 address.
|
|
37
|
+
// https://www.iana.org/assignments/iana-ipv6-special-registry/
|
|
38
|
+
const blocked6 = new BlockList();
|
|
39
|
+
for (const [address, prefix] of [
|
|
40
|
+
['::', 96],
|
|
41
|
+
['::ffff:0:0', 96],
|
|
42
|
+
// IPv4-translated (RFC 2765), distinct from IPv4-mapped above: ::ffff:0:127.0.0.1 embeds loopback.
|
|
43
|
+
['::ffff:0:0:0', 96],
|
|
44
|
+
['64:ff9b::', 96],
|
|
45
|
+
['64:ff9b:1::', 48],
|
|
46
|
+
['100::', 64],
|
|
47
|
+
['2001::', 23],
|
|
48
|
+
['2001:db8::', 32],
|
|
49
|
+
['2002::', 16],
|
|
50
|
+
['3fff::', 20],
|
|
51
|
+
['5f00::', 16],
|
|
52
|
+
['fc00::', 7],
|
|
53
|
+
['fe80::', 10],
|
|
54
|
+
['fec0::', 10],
|
|
55
|
+
['ff00::', 8],
|
|
56
|
+
] as const) {
|
|
57
|
+
blocked6.addSubnet(address, prefix, 'ipv6');
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* True when `address` is an IP address that is safe to reach from a server: not loopback, private,
|
|
62
|
+
* link-local, metadata, CGNAT, multicast, documentation or otherwise reserved.
|
|
63
|
+
*/
|
|
64
|
+
export function isPublicAddress(address: string): boolean {
|
|
65
|
+
const family = isIP(address);
|
|
66
|
+
if (family === 4) {
|
|
67
|
+
return !blocked4.check(address, 'ipv4');
|
|
68
|
+
}
|
|
69
|
+
if (family === 6) {
|
|
70
|
+
return !blocked6.check(address, 'ipv6');
|
|
71
|
+
}
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** The URL, a redirect target or a resolved address is not allowed. Nothing was sent to that host. */
|
|
76
|
+
export class UnsafeUrlError extends Error {
|
|
77
|
+
constructor(message: string) {
|
|
78
|
+
super(message);
|
|
79
|
+
this.name = 'UnsafeUrlError';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** The fetch was allowed but did not complete: timeout, too many redirects, or an oversized body. */
|
|
84
|
+
export class SafeFetchError extends Error {
|
|
85
|
+
constructor(message: string, options?: ErrorOptions) {
|
|
86
|
+
super(message, options);
|
|
87
|
+
this.name = 'SafeFetchError';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface SafeFetchOptions {
|
|
92
|
+
/**
|
|
93
|
+
* Request headers, sent on every hop. `Authorization`, `Cookie` and `Proxy-Authorization` are dropped
|
|
94
|
+
* once a redirect leaves the original origin (scheme, host and port), so a redirect cannot carry
|
|
95
|
+
* credentials to another server.
|
|
96
|
+
*/
|
|
97
|
+
headers?: Record<string, string>;
|
|
98
|
+
/** Accept `http:` URLs as well as `https:`. Defaults to false. */
|
|
99
|
+
allowHttp?: boolean;
|
|
100
|
+
/** Redirects to follow before failing. Defaults to 5. */
|
|
101
|
+
maxRedirects?: number;
|
|
102
|
+
/** Deadline for the whole chain, DNS and body included. Defaults to 15000. */
|
|
103
|
+
timeoutMs?: number;
|
|
104
|
+
/** Largest body accepted, after decompression. Defaults to 5 MiB. */
|
|
105
|
+
maxBytes?: number;
|
|
106
|
+
/**
|
|
107
|
+
* Decides whether an address may be connected to. Defaults to {@link isPublicAddress}. Override it
|
|
108
|
+
* only for tests or trusted local development.
|
|
109
|
+
*/
|
|
110
|
+
allowAddress?: (address: string) => boolean;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const DEFAULT_MAX_REDIRECTS = 5;
|
|
114
|
+
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
115
|
+
const DEFAULT_MAX_BYTES = 5 * 1024 * 1024;
|
|
116
|
+
const CREDENTIAL_HEADERS = new Set(['authorization', 'cookie', 'proxy-authorization']);
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* GET a caller-supplied URL from a tool server without letting it reach internal hosts (SSRF).
|
|
120
|
+
*
|
|
121
|
+
* - Only `https:` (and `http:` with `allowHttp`) URLs without credentials are accepted.
|
|
122
|
+
* - The address is checked inside the socket's own DNS lookup, against every address the name resolves
|
|
123
|
+
* to, so the connection goes to exactly the address that passed and DNS cannot be rebound in between.
|
|
124
|
+
* IP literals are checked before connecting.
|
|
125
|
+
* - Redirects are followed by hand, each target checked the same way, up to `maxRedirects`.
|
|
126
|
+
* - One deadline covers the whole chain, and the body is capped at `maxBytes` after decompression.
|
|
127
|
+
*
|
|
128
|
+
* Resolves with the final response, its body fully read. A non-2xx status is returned, not thrown.
|
|
129
|
+
*
|
|
130
|
+
* @throws {UnsafeUrlError} when the URL, a redirect target or a resolved address is refused
|
|
131
|
+
* @throws {SafeFetchError} on timeout, too many redirects or an oversized body
|
|
132
|
+
*/
|
|
133
|
+
export async function safeFetch(url: string, options: SafeFetchOptions = {}): Promise<Response> {
|
|
134
|
+
const {
|
|
135
|
+
allowHttp = false,
|
|
136
|
+
maxRedirects = DEFAULT_MAX_REDIRECTS,
|
|
137
|
+
timeoutMs = DEFAULT_TIMEOUT_MS,
|
|
138
|
+
maxBytes = DEFAULT_MAX_BYTES,
|
|
139
|
+
allowAddress = isPublicAddress,
|
|
140
|
+
} = options;
|
|
141
|
+
const signal = AbortSignal.timeout(timeoutMs);
|
|
142
|
+
const first = parseTarget(url, allowHttp, allowAddress);
|
|
143
|
+
let current = first;
|
|
144
|
+
let headers = options.headers ?? {};
|
|
145
|
+
for (let redirects = 0; ; redirects++) {
|
|
146
|
+
const res = await send(current, headers, signal, timeoutMs, allowAddress);
|
|
147
|
+
const location = res.headers.location;
|
|
148
|
+
const status = res.statusCode ?? 0;
|
|
149
|
+
if (status >= 300 && status < 400 && location) {
|
|
150
|
+
res.destroy();
|
|
151
|
+
if (redirects >= maxRedirects) {
|
|
152
|
+
throw new SafeFetchError(`Too many redirects (more than ${maxRedirects})`);
|
|
153
|
+
}
|
|
154
|
+
current = parseTarget(new URL(location, current).toString(), allowHttp, allowAddress);
|
|
155
|
+
if (current.origin !== first.origin) {
|
|
156
|
+
headers = withoutCredentials(headers);
|
|
157
|
+
}
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
// These statuses never carry a body, whatever their Content-Length or Content-Encoding describe.
|
|
161
|
+
const nullBody = status === 204 || status === 205 || status === 304;
|
|
162
|
+
if (nullBody) {
|
|
163
|
+
res.destroy();
|
|
164
|
+
}
|
|
165
|
+
const body = nullBody ? null : await readBody(res, maxBytes, signal, timeoutMs);
|
|
166
|
+
const responseHeaders = new Headers();
|
|
167
|
+
for (const [name, value] of Object.entries(res.headers)) {
|
|
168
|
+
// The body is already decoded, so its original encoding and length no longer apply.
|
|
169
|
+
if (value === undefined || name === 'content-encoding' || name === 'content-length') {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
for (const v of Array.isArray(value) ? value : [value]) {
|
|
173
|
+
responseHeaders.append(name, v);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const response = new Response(body && new Uint8Array(body), { status, headers: responseHeaders });
|
|
177
|
+
Object.defineProperty(response, 'url', { value: current.toString() });
|
|
178
|
+
return response;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function withoutCredentials(headers: Record<string, string>): Record<string, string> {
|
|
183
|
+
return Object.fromEntries(Object.entries(headers).filter(([name]) => !CREDENTIAL_HEADERS.has(name.toLowerCase())));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function parseTarget(url: string, allowHttp: boolean, allowAddress: (address: string) => boolean): URL {
|
|
187
|
+
let target: URL;
|
|
188
|
+
try {
|
|
189
|
+
target = new URL(url);
|
|
190
|
+
} catch {
|
|
191
|
+
throw new UnsafeUrlError('Invalid URL');
|
|
192
|
+
}
|
|
193
|
+
if (target.protocol !== 'https:' && !(allowHttp && target.protocol === 'http:')) {
|
|
194
|
+
throw new UnsafeUrlError(`URL scheme ${target.protocol} is not allowed`);
|
|
195
|
+
}
|
|
196
|
+
if (target.username || target.password) {
|
|
197
|
+
throw new UnsafeUrlError('URLs with credentials are not allowed');
|
|
198
|
+
}
|
|
199
|
+
// net.connect skips the lookup hook for an IP literal, so check it here.
|
|
200
|
+
const literal = target.hostname.replace(/^\[|\]$/g, '');
|
|
201
|
+
if (isIP(literal) && !allowAddress(literal)) {
|
|
202
|
+
throw new UnsafeUrlError(`Address ${literal} is not public`);
|
|
203
|
+
}
|
|
204
|
+
return target;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function guardedLookup(allowAddress: (address: string) => boolean): LookupFunction {
|
|
208
|
+
return (hostname, options, callback) => {
|
|
209
|
+
lookup(hostname, { all: true }, (error, addresses: LookupAddress[]) => {
|
|
210
|
+
if (error) {
|
|
211
|
+
callback(error, '', 4);
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const refused = addresses.find(({ address }) => !allowAddress(address));
|
|
215
|
+
if (refused || addresses.length === 0) {
|
|
216
|
+
callback(new UnsafeUrlError(`Host ${hostname} resolves to an address that is not public`), '', 4);
|
|
217
|
+
} else if (options.all) {
|
|
218
|
+
callback(null, addresses);
|
|
219
|
+
} else {
|
|
220
|
+
callback(null, addresses[0].address, addresses[0].family);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function send(
|
|
227
|
+
target: URL,
|
|
228
|
+
headers: Record<string, string>,
|
|
229
|
+
signal: AbortSignal,
|
|
230
|
+
timeoutMs: number,
|
|
231
|
+
allowAddress: (address: string) => boolean,
|
|
232
|
+
): Promise<IncomingMessage> {
|
|
233
|
+
const request = target.protocol === 'https:' ? httpsRequest : httpRequest;
|
|
234
|
+
return new Promise((resolve, reject) => {
|
|
235
|
+
const req = request(
|
|
236
|
+
target,
|
|
237
|
+
{
|
|
238
|
+
method: 'GET',
|
|
239
|
+
headers: { 'accept-encoding': 'gzip, deflate, br', ...headers },
|
|
240
|
+
// A fresh socket per request: never reuse a connection made for another host or address.
|
|
241
|
+
agent: false,
|
|
242
|
+
signal,
|
|
243
|
+
lookup: guardedLookup(allowAddress),
|
|
244
|
+
},
|
|
245
|
+
resolve,
|
|
246
|
+
);
|
|
247
|
+
req.on('error', (error) => reject(toFetchError(error, signal, timeoutMs)));
|
|
248
|
+
req.end();
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
async function readBody(
|
|
253
|
+
res: IncomingMessage,
|
|
254
|
+
maxBytes: number,
|
|
255
|
+
signal: AbortSignal,
|
|
256
|
+
timeoutMs: number,
|
|
257
|
+
): Promise<Buffer> {
|
|
258
|
+
if (Number(res.headers['content-length']) > maxBytes) {
|
|
259
|
+
res.destroy();
|
|
260
|
+
throw new SafeFetchError(`Response is larger than ${maxBytes} bytes`);
|
|
261
|
+
}
|
|
262
|
+
// Codings are listed in the order they were applied, so undo them from the last one back.
|
|
263
|
+
const codings = (res.headers['content-encoding'] ?? '')
|
|
264
|
+
.split(',')
|
|
265
|
+
.map((coding) => coding.trim().toLowerCase())
|
|
266
|
+
.filter((coding) => coding && coding !== 'identity')
|
|
267
|
+
.reverse();
|
|
268
|
+
const streams: Readable[] = [res];
|
|
269
|
+
const chunks: Buffer[] = [];
|
|
270
|
+
let size = 0;
|
|
271
|
+
try {
|
|
272
|
+
for (const coding of codings) {
|
|
273
|
+
const decoder = decoderFor(coding);
|
|
274
|
+
const source = streams[streams.length - 1];
|
|
275
|
+
// pipe() does not pass a source's failure on: without this, a response destroyed mid-body (the
|
|
276
|
+
// deadline aborting the request, a dropped connection) would leave the decoder waiting forever.
|
|
277
|
+
source.on('error', (error) => decoder.destroy(error));
|
|
278
|
+
source.on('close', () => {
|
|
279
|
+
if (!source.readableEnded) {
|
|
280
|
+
decoder.destroy(new SafeFetchError('Response ended before its body was complete'));
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
streams.push(source.pipe(decoder));
|
|
284
|
+
}
|
|
285
|
+
for await (const chunk of streams[streams.length - 1]) {
|
|
286
|
+
size += (chunk as Buffer).length;
|
|
287
|
+
if (size > maxBytes) {
|
|
288
|
+
throw new SafeFetchError(`Response is larger than ${maxBytes} bytes`);
|
|
289
|
+
}
|
|
290
|
+
chunks.push(chunk as Buffer);
|
|
291
|
+
}
|
|
292
|
+
} catch (error) {
|
|
293
|
+
throw toFetchError(error, signal, timeoutMs);
|
|
294
|
+
} finally {
|
|
295
|
+
for (const stream of streams) {
|
|
296
|
+
stream.destroy();
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return Buffer.concat(chunks);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
function decoderFor(coding: string): Transform {
|
|
303
|
+
switch (coding) {
|
|
304
|
+
case 'gzip':
|
|
305
|
+
case 'x-gzip':
|
|
306
|
+
return createGunzip();
|
|
307
|
+
case 'deflate':
|
|
308
|
+
return createInflate();
|
|
309
|
+
case 'br':
|
|
310
|
+
return createBrotliDecompress();
|
|
311
|
+
default:
|
|
312
|
+
throw new SafeFetchError(`Unsupported content-encoding ${coding}`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
function toFetchError(error: unknown, signal: AbortSignal, timeoutMs: number): unknown {
|
|
317
|
+
if (error instanceof UnsafeUrlError || error instanceof SafeFetchError) {
|
|
318
|
+
return error;
|
|
319
|
+
}
|
|
320
|
+
if (signal.aborted) {
|
|
321
|
+
return new SafeFetchError(`Request timed out after ${timeoutMs} ms`, { cause: error });
|
|
322
|
+
}
|
|
323
|
+
return error;
|
|
324
|
+
}
|
|
@@ -222,6 +222,7 @@ export async function buildAppPackage(
|
|
|
222
222
|
): Promise<AppPackage> {
|
|
223
223
|
const pkg: AppPackage = {
|
|
224
224
|
oauth_scopes: config.oauth_scopes ? [...config.oauth_scopes] : undefined,
|
|
225
|
+
oauth_client: config.oauth_client ? { redirect_uris: [...config.oauth_client.redirect_uris] } : undefined,
|
|
225
226
|
};
|
|
226
227
|
|
|
227
228
|
const scopes = normalizeScopes(options.scope);
|