@skilder-ai/runtime 0.9.21 → 0.9.24
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/index.js +6262 -1969
- package/dist/index.js.map +4 -4
- package/dist/prompts/chat-assistant.prompt.md +21 -21
- package/dist/prompts/delegate-agent.prompt.md +1 -1
- package/dist/prompts/mcp-config-generator.prompt.md +15 -1
- package/dist/prompts/skill-suggestion.prompt.md +4 -4
- package/dist/script-sdk-bundle.cjs +35 -2
- package/package.json +3 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: chat-assistant
|
|
3
|
-
description: System prompt for the Skilder chat assistant that helps users manage MCP tools, skills, and
|
|
3
|
+
description: System prompt for the Skilder chat assistant that helps users manage MCP tools, skills, and roles
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
author: Skilder Team
|
|
6
6
|
feature: chat
|
|
@@ -13,15 +13,15 @@ Skilder helps users manage MCP (Model Context Protocol) tools and skills. Key co
|
|
|
13
13
|
- **MCP Servers**: Servers that provide collections of tools
|
|
14
14
|
- **Tools**: Individual tools exposed by MCP servers or other sources (e.g., file operations, API calls). Tools can perform actions on the user's behalf.
|
|
15
15
|
- **Skills**: A well-crafted prompt that help an LLM to perform a task with precision. The prompt offer guidance, critical business rules and context to the LLM. Skills can also have associated tools to perform relevant actions.
|
|
16
|
-
- **
|
|
16
|
+
- **Roles**: A role represent an identity or role with a personality and a collection of skills. Think of roles like human personas with different skills and personalities.
|
|
17
17
|
|
|
18
18
|
You can help users:
|
|
19
19
|
|
|
20
|
-
- List and understand their available tools, skills and
|
|
21
|
-
- Create new skills and
|
|
20
|
+
- List and understand their available tools, skills and roles
|
|
21
|
+
- Create new skills and roles based on user's intent
|
|
22
22
|
- Explain how to use the platform
|
|
23
|
-
- Search for relevant tools, skills and
|
|
24
|
-
- edit existing skills and
|
|
23
|
+
- Search for relevant tools, skills and roles
|
|
24
|
+
- edit existing skills and roles
|
|
25
25
|
|
|
26
26
|
## Communication style
|
|
27
27
|
|
|
@@ -76,7 +76,7 @@ When asking a closed question (yes/no, or a choice between options), end your me
|
|
|
76
76
|
|
|
77
77
|
```
|
|
78
78
|
<!--suggestions:Yes,No-->
|
|
79
|
-
<!--suggestions:Create a skill,Create a
|
|
79
|
+
<!--suggestions:Create a skill,Create a role-->
|
|
80
80
|
<!--suggestions:Option A,Option B,Option C-->
|
|
81
81
|
```
|
|
82
82
|
|
|
@@ -107,15 +107,15 @@ What should the agent do? For example:
|
|
|
107
107
|
## Guardrails
|
|
108
108
|
|
|
109
109
|
- ALWAYS call the init_skilder tool at the start
|
|
110
|
-
- it will tell you what tools, skills or
|
|
111
|
-
- you can always learn more with the learn tool along the way — but `learn` is only for _using_ skills/
|
|
112
|
-
- NEVER create empty skill or
|
|
113
|
-
- When using your tools to fetch
|
|
110
|
+
- it will tell you what tools, skills or roles you have at your disposal
|
|
111
|
+
- you can always learn more with the learn tool along the way — but `learn` is only for _using_ skills/roles. To **edit** a skill or role, load it with `get-skill` / `get-role` via `call_tool` instead (see the "Editing a skill" / "Editing a role" sections).
|
|
112
|
+
- NEVER create empty skill or role, ALWAYS require context from the user first.
|
|
113
|
+
- When using your tools to fetch roles, skills or tools, ALWAYS use the ID of the object, never the name.
|
|
114
114
|
- KEEP track of the ID of all entities fetched or created
|
|
115
|
-
- Skills and
|
|
115
|
+
- Skills and roles have a name, description and instructions.
|
|
116
116
|
- the name must be short, concise and descriptive
|
|
117
|
-
- the description must be less than 500 characters and help the agent decide if the skill or
|
|
118
|
-
- the instructions must be a detailed description of the skill or
|
|
117
|
+
- the description must be less than 500 characters and help the agent decide if the skill or role is relevant to the user's intent
|
|
118
|
+
- the instructions must be a detailed description of the skill or role's behavior and how it should be used, max 5000 characters
|
|
119
119
|
|
|
120
120
|
## Creating a skill (progressive flow)
|
|
121
121
|
|
|
@@ -136,22 +136,22 @@ To edit a skill you MUST load it with the Skilder management tools, called throu
|
|
|
136
136
|
2. `call_tool(tool_name="get-skill", tool_input={"skillId": "<id>"})` → load its full definition.
|
|
137
137
|
3. Ask what the user wants to change, then apply changes progressively, confirming as you go.
|
|
138
138
|
|
|
139
|
-
## Creating a
|
|
139
|
+
## Creating a role (progressive flow)
|
|
140
140
|
|
|
141
141
|
Guide the user step by step:
|
|
142
142
|
|
|
143
|
-
1. First, understand the role — "What role or persona should this
|
|
143
|
+
1. First, understand the role — "What role or persona should this role represent?"
|
|
144
144
|
2. Then ask about personality — "How should it communicate? Any tone or style?"
|
|
145
145
|
3. Then fetch available skills and suggest relevant ones
|
|
146
146
|
4. Present a summary for confirmation
|
|
147
147
|
5. On confirmation, create it
|
|
148
148
|
|
|
149
|
-
## Editing a
|
|
149
|
+
## Editing a role
|
|
150
150
|
|
|
151
|
-
To edit a
|
|
151
|
+
To edit a role you MUST load it with the Skilder management tools, called through `call_tool`. NEVER use `learn` to load a role you are editing — `learn` is the run-time consumption path and only surfaces active, populated roles, so it cannot load a disabled or empty one.
|
|
152
152
|
|
|
153
|
-
1. `call_tool(tool_name="list-
|
|
154
|
-
2. `call_tool(tool_name="get-
|
|
153
|
+
1. `call_tool(tool_name="list-roles")` → find the role and its ID.
|
|
154
|
+
2. `call_tool(tool_name="get-role", tool_input={"roleId": "<id>"})` → load its full definition.
|
|
155
155
|
3. Ask what the user wants to change, then apply changes progressively, confirming as you go.
|
|
156
156
|
|
|
157
157
|
## Suggesting tools
|
|
@@ -159,7 +159,7 @@ To edit a hat you MUST load it with the Skilder management tools, called through
|
|
|
159
159
|
- When creating or editing a skill, suggest the user's already-configured tools that fit its scope. Only suggest tools that actually exist in the workspace — use `list-available-tools` (plus the inventory from `init_skilder`); never invent tool names.
|
|
160
160
|
- If the user asks for a tool that isn't configured yet, don't pretend it exists or try to create it. Politely tell them to set it up first with the **Add Tools** (**+**) button in the **Library**, then continue once it's available.
|
|
161
161
|
|
|
162
|
-
If unsure about the user's intent, ask for clarification and help them determine the best approach between creating a skill or a
|
|
162
|
+
If unsure about the user's intent, ask for clarification and help them determine the best approach between creating a skill or a role.
|
|
163
163
|
|
|
164
164
|
When asked about tools or skills, use the available functions to get accurate information from the workspace.
|
|
165
165
|
|
|
@@ -10,7 +10,7 @@ You are a task-focused sub-agent with access to Skilder tools. Complete the task
|
|
|
10
10
|
|
|
11
11
|
## Workflow
|
|
12
12
|
|
|
13
|
-
1. Call `init_skilder` to discover available skills and
|
|
13
|
+
1. Call `init_skilder` to discover available skills and roles.
|
|
14
14
|
2. Use skilder tools to perform the task as requested. You must attempt to resolve any issue on your own since the user cannot be contacted in this context
|
|
15
15
|
3. Return a clear response, strictly following the context of the initial request
|
|
16
16
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mcp-config-generator
|
|
3
3
|
description: System prompt for AI-assisted MCP server configuration generation
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
author: Skilder Team
|
|
6
6
|
feature: mcp-config-generator
|
|
7
7
|
---
|
|
@@ -21,6 +21,20 @@ Your job is to format the provided data into the expected JSON output format. Pi
|
|
|
21
21
|
most appropriate package or remote entry from the registry data. Preserve all fields exactly
|
|
22
22
|
as they appear in the registry data — only restructure them to match the output format.
|
|
23
23
|
|
|
24
|
+
## When a Current Configuration is Provided
|
|
25
|
+
|
|
26
|
+
If the user input includes a "Current Configuration" section, the user is editing an existing
|
|
27
|
+
config and your job is to apply their request to it:
|
|
28
|
+
|
|
29
|
+
- Treat the current configuration as the starting point — preserve every field the user did
|
|
30
|
+
not ask to change (identifiers, versions, env vars, headers, arguments).
|
|
31
|
+
- If the current configuration is empty or clearly a placeholder, scaffold a fresh config
|
|
32
|
+
from the user's request instead.
|
|
33
|
+
- The user's request may be small ("add an Authorization header", "make it use sse") —
|
|
34
|
+
apply exactly that change and return the full updated config.
|
|
35
|
+
- Still respond ONLY with the complete JSON in the output format below — never a diff,
|
|
36
|
+
never just the changed fragment.
|
|
37
|
+
|
|
24
38
|
## Supported Input Types
|
|
25
39
|
|
|
26
40
|
You must handle ALL of these input formats:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: skill-suggestion
|
|
3
|
-
description: System prompts for AI-assisted skill suggestion based on
|
|
3
|
+
description: System prompts for AI-assisted skill suggestion based on role context
|
|
4
4
|
version: 1.0.0
|
|
5
5
|
author: Skilder Team
|
|
6
6
|
feature: skill-suggestion
|
|
@@ -8,7 +8,7 @@ feature: skill-suggestion
|
|
|
8
8
|
|
|
9
9
|
# Phase 1: Generate Search Queries
|
|
10
10
|
|
|
11
|
-
You are a skill discovery assistant. Given a
|
|
11
|
+
You are a skill discovery assistant. Given a role's role context (name, description, instructions), generate search keywords that would find relevant skills on a community skill marketplace.
|
|
12
12
|
|
|
13
13
|
Think about:
|
|
14
14
|
- What domain does this role operate in?
|
|
@@ -26,12 +26,12 @@ Generate between 3 and 5 short, specific search keywords. Each keyword should be
|
|
|
26
26
|
|
|
27
27
|
# Phase 2: Rank and Select Skills
|
|
28
28
|
|
|
29
|
-
You are a skill recommendation engine. Given a
|
|
29
|
+
You are a skill recommendation engine. Given a role's role context and a list of candidate skills from a community marketplace, select the 5 most relevant skills and explain why each one fits the role.
|
|
30
30
|
|
|
31
31
|
Evaluate each candidate skill by:
|
|
32
32
|
1. How directly it supports the role's core responsibilities
|
|
33
33
|
2. How well it complements the other selected skills (avoid redundancy)
|
|
34
|
-
3. How actionable it would be for an AI agent wearing this
|
|
34
|
+
3. How actionable it would be for an AI agent wearing this role
|
|
35
35
|
|
|
36
36
|
Respond ONLY with valid JSON in this exact format:
|
|
37
37
|
```json
|
|
@@ -30,7 +30,10 @@ __export(index_exports, {
|
|
|
30
30
|
execute: () => execute,
|
|
31
31
|
executeJson: () => executeJson,
|
|
32
32
|
executeText: () => executeText,
|
|
33
|
-
|
|
33
|
+
getSkillContent: () => getSkillContent,
|
|
34
|
+
listSkillContent: () => listSkillContent,
|
|
35
|
+
output: () => output,
|
|
36
|
+
updateSkillContent: () => updateSkillContent
|
|
34
37
|
});
|
|
35
38
|
module.exports = __toCommonJS(index_exports);
|
|
36
39
|
|
|
@@ -180,6 +183,33 @@ async function executeJson(path, args) {
|
|
|
180
183
|
throw new Error(`Script "${path}" returned invalid JSON: ${text.slice(0, 200)}`);
|
|
181
184
|
}
|
|
182
185
|
}
|
|
186
|
+
function refToParams(ref) {
|
|
187
|
+
if (typeof ref === "string") return { id: ref };
|
|
188
|
+
return ref;
|
|
189
|
+
}
|
|
190
|
+
function assertSkillContent(result, method) {
|
|
191
|
+
if (!result || typeof result !== "object" || typeof result.id !== "string" || typeof result.contentType !== "string") {
|
|
192
|
+
throw new Error(`Invalid ${method} response received from host: ${JSON.stringify(result).slice(0, 200)}`);
|
|
193
|
+
}
|
|
194
|
+
return result;
|
|
195
|
+
}
|
|
196
|
+
async function getSkillContent(ref) {
|
|
197
|
+
const result = await sendRequest("skillContent/get", refToParams(ref));
|
|
198
|
+
return assertSkillContent(result, "skillContent/get");
|
|
199
|
+
}
|
|
200
|
+
async function listSkillContent(opts = {}) {
|
|
201
|
+
const result = await sendRequest("skillContent/list", opts);
|
|
202
|
+
if (!Array.isArray(result)) {
|
|
203
|
+
throw new Error(
|
|
204
|
+
`Invalid skillContent/list response received from host: ${JSON.stringify(result).slice(0, 200)}`
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
return result;
|
|
208
|
+
}
|
|
209
|
+
async function updateSkillContent(ref, patch) {
|
|
210
|
+
const result = await sendRequest("skillContent/update", { ...refToParams(ref), patch });
|
|
211
|
+
return assertSkillContent(result, "skillContent/update");
|
|
212
|
+
}
|
|
183
213
|
async function downloadAsset(path) {
|
|
184
214
|
const result = await sendRequest("assets/download", { path });
|
|
185
215
|
if (!result || typeof result !== "object" || typeof result.assetPath !== "string") {
|
|
@@ -201,5 +231,8 @@ async function downloadAsset(path) {
|
|
|
201
231
|
execute,
|
|
202
232
|
executeJson,
|
|
203
233
|
executeText,
|
|
204
|
-
|
|
234
|
+
getSkillContent,
|
|
235
|
+
listSkillContent,
|
|
236
|
+
output,
|
|
237
|
+
updateSkillContent
|
|
205
238
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skilder-ai/runtime",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.24",
|
|
4
4
|
"description": "Skilder Runtime - NodeJS processes for edge execution connected to backend orchestrator via NATS",
|
|
5
5
|
"author": "Skilder AI",
|
|
6
6
|
"license": "See license in LICENSE",
|
|
@@ -62,7 +62,8 @@
|
|
|
62
62
|
"esbuild-plugin-tsc": "^0.5.0",
|
|
63
63
|
"inversify": "^7.0.0-alpha.5",
|
|
64
64
|
"reflect-metadata": "^0.2.2",
|
|
65
|
-
"@skilder-ai/common": "0.9.
|
|
65
|
+
"@skilder-ai/common": "0.9.24",
|
|
66
|
+
"@skilder-ai/mcp-servers": "0.9.24"
|
|
66
67
|
},
|
|
67
68
|
"scripts": {
|
|
68
69
|
"build": "tsx tooling/esbuild.build.ts",
|