neoctl 0.1.19 → 0.1.21
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/agents/local-agent-task.js +2 -1
- package/dist/agents/local-agent-task.js.map +1 -1
- package/dist/agents/smoke-agents.js +21 -4
- package/dist/agents/smoke-agents.js.map +1 -1
- package/dist/context/prompts.js +4 -0
- package/dist/context/prompts.js.map +1 -1
- package/dist/core/image-storage.d.ts +6 -0
- package/dist/core/image-storage.js +38 -0
- package/dist/core/image-storage.js.map +1 -0
- package/dist/core/query-engine.d.ts +21 -1
- package/dist/core/query-engine.js +103 -13
- package/dist/core/query-engine.js.map +1 -1
- package/dist/core/query.d.ts +2 -1
- package/dist/core/query.js +60 -5
- package/dist/core/query.js.map +1 -1
- package/dist/core/smoke-core-loop.js +95 -6
- package/dist/core/smoke-core-loop.js.map +1 -1
- package/dist/index.d.ts +26 -1
- package/dist/index.js +26 -1
- package/dist/index.js.map +1 -1
- package/dist/model/communication-logger.d.ts +2 -1
- package/dist/model/communication-logger.js +3 -0
- package/dist/model/communication-logger.js.map +1 -1
- package/dist/model/config.d.ts +10 -4
- package/dist/model/config.js +61 -12
- package/dist/model/config.js.map +1 -1
- package/dist/model/context-window.js +1 -0
- package/dist/model/context-window.js.map +1 -1
- package/dist/model/deepseek-adapter.d.ts +29 -0
- package/dist/model/deepseek-adapter.js +108 -0
- package/dist/model/deepseek-adapter.js.map +1 -0
- package/dist/model/env.js +35 -19
- package/dist/model/env.js.map +1 -1
- package/dist/model/kimi-adapter.d.ts +29 -0
- package/dist/model/kimi-adapter.js +108 -0
- package/dist/model/kimi-adapter.js.map +1 -0
- package/dist/model/model-metadata.json +726 -677
- package/dist/model/openai-adapter.d.ts +1 -1
- package/dist/model/openai-chat-mapper.d.ts +4 -1
- package/dist/model/openai-chat-mapper.js +30 -8
- package/dist/model/openai-chat-mapper.js.map +1 -1
- package/dist/model/openai-mappers.d.ts +5 -2
- package/dist/model/openai-mappers.js +33 -6
- package/dist/model/openai-mappers.js.map +1 -1
- package/dist/model/openai-responses-mapper.d.ts +1 -1
- package/dist/model/openai-responses-mapper.js +2 -1
- package/dist/model/openai-responses-mapper.js.map +1 -1
- package/dist/model/provider-factory.js +32 -0
- package/dist/model/provider-factory.js.map +1 -1
- package/dist/model/smoke-deepseek-mapper.d.ts +1 -0
- package/dist/model/smoke-deepseek-mapper.js +65 -0
- package/dist/model/smoke-deepseek-mapper.js.map +1 -0
- package/dist/model/smoke-openai.js +1 -1
- package/dist/model/smoke-openai.js.map +1 -1
- package/dist/model/smoke-responses-mapper.js +6 -6
- package/dist/model/smoke-responses-mapper.js.map +1 -1
- package/dist/open-directory.d.ts +1 -0
- package/dist/open-directory.js +26 -0
- package/dist/open-directory.js.map +1 -0
- package/dist/paths.d.ts +7 -0
- package/dist/paths.js +12 -0
- package/dist/paths.js.map +1 -0
- package/dist/repl/commands.d.ts +15 -0
- package/dist/repl/commands.js +58 -0
- package/dist/repl/commands.js.map +1 -1
- package/dist/repl/index.js +1012 -171
- package/dist/repl/index.js.map +1 -1
- package/dist/session/session-export.d.ts +33 -0
- package/dist/session/session-export.js +351 -0
- package/dist/session/session-export.js.map +1 -0
- package/dist/session/session-store.js +2 -2
- package/dist/session/session-store.js.map +1 -1
- package/dist/session/simple-session-runtime.d.ts +74 -0
- package/dist/session/simple-session-runtime.js +171 -0
- package/dist/session/simple-session-runtime.js.map +1 -0
- package/dist/session/smoke-session.js +22 -1
- package/dist/session/smoke-session.js.map +1 -1
- package/dist/skills/skill-filesystem.d.ts +32 -0
- package/dist/skills/skill-filesystem.js +371 -0
- package/dist/skills/skill-filesystem.js.map +1 -0
- package/dist/skills/skill-management-tools.d.ts +36 -0
- package/dist/skills/skill-management-tools.js +188 -0
- package/dist/skills/skill-management-tools.js.map +1 -0
- package/dist/skills/skill-tool.d.ts +85 -5
- package/dist/skills/skill-tool.js +173 -14
- package/dist/skills/skill-tool.js.map +1 -1
- package/dist/skills/smoke-skills.js +54 -5
- package/dist/skills/smoke-skills.js.map +1 -1
- package/dist/tips.d.ts +10 -0
- package/dist/tips.js +168 -0
- package/dist/tips.js.map +1 -0
- package/dist/tools/builtins/image-generation-tool.d.ts +96 -0
- package/dist/tools/builtins/image-generation-tool.js +471 -0
- package/dist/tools/builtins/image-generation-tool.js.map +1 -0
- package/dist/tools/builtins/search-providers.d.ts +15 -1
- package/dist/tools/builtins/search-providers.js +195 -1
- package/dist/tools/builtins/search-providers.js.map +1 -1
- package/dist/tools/builtins/search-tool.js +2 -2
- package/dist/tools/builtins/search-tool.js.map +1 -1
- package/dist/tools/registry.d.ts +1 -0
- package/dist/tools/registry.js +11 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/run-tool-use.js +1 -1
- package/dist/tools/run-tool-use.js.map +1 -1
- package/dist/tools/smoke-tool-system.js +43 -9
- package/dist/tools/smoke-tool-system.js.map +1 -1
- package/dist/tools/tool.d.ts +9 -1
- package/dist/tools/tool.js.map +1 -1
- package/dist/types/messages.d.ts +5 -0
- package/dist/types/messages.js.map +1 -1
- package/dist/ui/display-message.d.ts +103 -0
- package/dist/ui/display-message.js +115 -0
- package/dist/ui/display-message.js.map +1 -0
- package/dist/web/html.d.ts +1 -0
- package/dist/web/html.js +862 -0
- package/dist/web/html.js.map +1 -0
- package/dist/web/index.d.ts +241 -0
- package/dist/web/index.js +1873 -0
- package/dist/web/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-filesystem.js","sourceRoot":"","sources":["../../src/skills/skill-filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Tool } from "../tools/tool.js";
|
|
2
|
+
import type { MutableSkillCatalog, SkillCatalog, SkillDescriptor, SkillUpdatePatch } from "./skill-tool.js";
|
|
3
|
+
export interface SkillListToolInput {
|
|
4
|
+
includeDisabled?: boolean;
|
|
5
|
+
tag?: string;
|
|
6
|
+
query?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface SkillReadToolInput {
|
|
9
|
+
name: string;
|
|
10
|
+
includeEntrypoint?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface SkillCreateToolInput {
|
|
13
|
+
skill: SkillDescriptor;
|
|
14
|
+
overwrite?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface SkillUpdateToolInput {
|
|
17
|
+
name: string;
|
|
18
|
+
patch: SkillUpdatePatch;
|
|
19
|
+
}
|
|
20
|
+
export interface SkillDeleteToolInput {
|
|
21
|
+
name: string;
|
|
22
|
+
}
|
|
23
|
+
export interface SkillValidateToolInput {
|
|
24
|
+
skill: unknown;
|
|
25
|
+
}
|
|
26
|
+
export interface SkillManagementToolOptions {
|
|
27
|
+
requireApproval?: boolean;
|
|
28
|
+
allowDelete?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare function createSkillListTool(catalog: SkillCatalog): Tool<SkillListToolInput>;
|
|
31
|
+
export declare function createSkillReadTool(catalog: SkillCatalog): Tool<SkillReadToolInput>;
|
|
32
|
+
export declare function createSkillValidateTool(): Tool<SkillValidateToolInput>;
|
|
33
|
+
export declare function createSkillCreateTool(catalog: MutableSkillCatalog, options?: SkillManagementToolOptions): Tool<SkillCreateToolInput>;
|
|
34
|
+
export declare function createSkillUpdateTool(catalog: MutableSkillCatalog, options?: SkillManagementToolOptions): Tool<SkillUpdateToolInput>;
|
|
35
|
+
export declare function createSkillDeleteTool(catalog: MutableSkillCatalog, options?: SkillManagementToolOptions): Tool<SkillDeleteToolInput>;
|
|
36
|
+
export declare function createSkillManagementTools(catalog: MutableSkillCatalog, options?: SkillManagementToolOptions): Tool<any>[];
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { normalizeSkillDescriptor, requireSkillName, summarizeSkill, validateSkillDescriptor } from "./skill-tool.js";
|
|
2
|
+
export function createSkillListTool(catalog) {
|
|
3
|
+
return {
|
|
4
|
+
name: "skill_list",
|
|
5
|
+
description: "List available reusable agent skills. Use this before invoking an unfamiliar skill.",
|
|
6
|
+
inputSchema: {
|
|
7
|
+
type: "object",
|
|
8
|
+
properties: {
|
|
9
|
+
includeDisabled: { type: "boolean" },
|
|
10
|
+
tag: { type: "string" },
|
|
11
|
+
query: { type: "string" },
|
|
12
|
+
},
|
|
13
|
+
additionalProperties: false,
|
|
14
|
+
},
|
|
15
|
+
metadata: { readOnly: true, concurrent: true, visible: true, searchHint: "skill catalog" },
|
|
16
|
+
validate(input) {
|
|
17
|
+
return input;
|
|
18
|
+
},
|
|
19
|
+
async call(input) {
|
|
20
|
+
const query = input.query?.trim().toLowerCase();
|
|
21
|
+
const tag = input.tag?.trim().toLowerCase();
|
|
22
|
+
const skills = (await catalog.list())
|
|
23
|
+
.filter((skill) => input.includeDisabled || skill.enabled !== false)
|
|
24
|
+
.filter((skill) => !tag || skill.tags?.some((value) => value.toLowerCase() === tag))
|
|
25
|
+
.filter((skill) => !query || [skill.name, skill.title, skill.description, ...(skill.tags ?? [])].some((value) => value?.toLowerCase().includes(query)))
|
|
26
|
+
.map(summarizeSkill);
|
|
27
|
+
return { ok: true, output: { skills } };
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function createSkillReadTool(catalog) {
|
|
32
|
+
return {
|
|
33
|
+
name: "skill_read",
|
|
34
|
+
description: "Read one skill descriptor. Set includeEntrypoint when the full skill prompt is needed.",
|
|
35
|
+
inputSchema: {
|
|
36
|
+
type: "object",
|
|
37
|
+
properties: {
|
|
38
|
+
name: { type: "string" },
|
|
39
|
+
includeEntrypoint: { type: "boolean" },
|
|
40
|
+
},
|
|
41
|
+
required: ["name"],
|
|
42
|
+
additionalProperties: false,
|
|
43
|
+
},
|
|
44
|
+
metadata: { readOnly: true, concurrent: true, visible: true, searchHint: "skill catalog" },
|
|
45
|
+
validate(input) {
|
|
46
|
+
return input;
|
|
47
|
+
},
|
|
48
|
+
async call(input) {
|
|
49
|
+
const name = requireSkillName(input.name);
|
|
50
|
+
const skill = await catalog.get(name);
|
|
51
|
+
if (!skill)
|
|
52
|
+
return { ok: false, output: { error: `Unknown skill: ${name}` } };
|
|
53
|
+
const output = input.includeEntrypoint ? skill : summarizeSkill(skill);
|
|
54
|
+
return { ok: true, output };
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export function createSkillValidateTool() {
|
|
59
|
+
return {
|
|
60
|
+
name: "skill_validate",
|
|
61
|
+
description: "Validate a proposed skill descriptor before creating or updating it.",
|
|
62
|
+
inputSchema: {
|
|
63
|
+
type: "object",
|
|
64
|
+
properties: { skill: {} },
|
|
65
|
+
required: ["skill"],
|
|
66
|
+
additionalProperties: false,
|
|
67
|
+
},
|
|
68
|
+
metadata: { readOnly: true, concurrent: true, visible: true, searchHint: "skill authoring" },
|
|
69
|
+
validate(input) {
|
|
70
|
+
return input;
|
|
71
|
+
},
|
|
72
|
+
async call(input) {
|
|
73
|
+
const result = validateSkillDescriptor(input.skill, { requireEntrypoint: true, allowDisabled: true });
|
|
74
|
+
return result.ok
|
|
75
|
+
? { ok: true, output: { ok: true, skill: summarizeSkill(result.value) } }
|
|
76
|
+
: { ok: false, output: { ok: false, issues: result.issues } };
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
export function createSkillCreateTool(catalog, options = {}) {
|
|
81
|
+
return {
|
|
82
|
+
name: "skill_create",
|
|
83
|
+
description: "Create a new reusable skill plugin from a validated descriptor. Use for agent-authored skills.",
|
|
84
|
+
inputSchema: {
|
|
85
|
+
type: "object",
|
|
86
|
+
properties: {
|
|
87
|
+
skill: { type: "object" },
|
|
88
|
+
overwrite: { type: "boolean" },
|
|
89
|
+
},
|
|
90
|
+
required: ["skill"],
|
|
91
|
+
additionalProperties: false,
|
|
92
|
+
},
|
|
93
|
+
metadata: { readOnly: false, concurrent: false, visible: true, requiresApproval: options.requireApproval ?? true, searchHint: "skill authoring" },
|
|
94
|
+
validate(input) {
|
|
95
|
+
return input;
|
|
96
|
+
},
|
|
97
|
+
async call(input, context) {
|
|
98
|
+
const validation = validateSkillDescriptor(input.skill, { requireEntrypoint: true, allowDisabled: true });
|
|
99
|
+
if (!validation.ok)
|
|
100
|
+
return { ok: false, output: { error: "Invalid skill descriptor", issues: validation.issues } };
|
|
101
|
+
const created = await catalog.create(normalizeSkillDescriptor({ ...validation.value, trustLevel: validation.value.trustLevel ?? "generated" }), { overwrite: input.overwrite, actor: context.agentId });
|
|
102
|
+
await context.options?.refreshTools?.();
|
|
103
|
+
return {
|
|
104
|
+
ok: true,
|
|
105
|
+
output: { status: "created", skill: summarizeSkill(created) },
|
|
106
|
+
newMessages: [{
|
|
107
|
+
...importMetaMessage(`Skill ${created.name} has been created and is now available through the skill tool.`),
|
|
108
|
+
metadata: { skill: created.name, skillManagement: "created" },
|
|
109
|
+
}],
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export function createSkillUpdateTool(catalog, options = {}) {
|
|
115
|
+
return {
|
|
116
|
+
name: "skill_update",
|
|
117
|
+
description: "Update an existing reusable skill descriptor. Prefer reading and validating before updating.",
|
|
118
|
+
inputSchema: {
|
|
119
|
+
type: "object",
|
|
120
|
+
properties: {
|
|
121
|
+
name: { type: "string" },
|
|
122
|
+
patch: { type: "object" },
|
|
123
|
+
},
|
|
124
|
+
required: ["name", "patch"],
|
|
125
|
+
additionalProperties: false,
|
|
126
|
+
},
|
|
127
|
+
metadata: { readOnly: false, concurrent: false, visible: true, requiresApproval: options.requireApproval ?? true, searchHint: "skill authoring" },
|
|
128
|
+
validate(input) {
|
|
129
|
+
return input;
|
|
130
|
+
},
|
|
131
|
+
async call(input, context) {
|
|
132
|
+
const updated = await catalog.update(requireSkillName(input.name), input.patch, { actor: context.agentId });
|
|
133
|
+
await context.options?.refreshTools?.();
|
|
134
|
+
return {
|
|
135
|
+
ok: true,
|
|
136
|
+
output: { status: "updated", skill: summarizeSkill(updated) },
|
|
137
|
+
newMessages: [{
|
|
138
|
+
...importMetaMessage(`Skill ${updated.name} has been updated.`),
|
|
139
|
+
metadata: { skill: updated.name, skillManagement: "updated" },
|
|
140
|
+
}],
|
|
141
|
+
};
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
export function createSkillDeleteTool(catalog, options = {}) {
|
|
146
|
+
return {
|
|
147
|
+
name: "skill_delete",
|
|
148
|
+
description: "Delete a generated or writable skill. This is destructive and should normally require approval.",
|
|
149
|
+
inputSchema: {
|
|
150
|
+
type: "object",
|
|
151
|
+
properties: { name: { type: "string" } },
|
|
152
|
+
required: ["name"],
|
|
153
|
+
additionalProperties: false,
|
|
154
|
+
},
|
|
155
|
+
metadata: { readOnly: false, concurrent: false, visible: options.allowDelete ?? false, requiresApproval: true, destructive: true, searchHint: "skill authoring" },
|
|
156
|
+
validate(input) {
|
|
157
|
+
return input;
|
|
158
|
+
},
|
|
159
|
+
async call(input, context) {
|
|
160
|
+
if (options.allowDelete === false)
|
|
161
|
+
return { ok: false, output: { error: "skill_delete is disabled" } };
|
|
162
|
+
const name = requireSkillName(input.name);
|
|
163
|
+
const deleted = await catalog.delete(name, { actor: context.agentId });
|
|
164
|
+
await context.options?.refreshTools?.();
|
|
165
|
+
return { ok: deleted, output: { status: deleted ? "deleted" : "not_found", skill: name } };
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
export function createSkillManagementTools(catalog, options = {}) {
|
|
170
|
+
return [
|
|
171
|
+
createSkillListTool(catalog),
|
|
172
|
+
createSkillReadTool(catalog),
|
|
173
|
+
createSkillValidateTool(),
|
|
174
|
+
createSkillCreateTool(catalog, options),
|
|
175
|
+
createSkillUpdateTool(catalog, options),
|
|
176
|
+
createSkillDeleteTool(catalog, options),
|
|
177
|
+
];
|
|
178
|
+
}
|
|
179
|
+
function importMetaMessage(text) {
|
|
180
|
+
return {
|
|
181
|
+
id: `skill_meta_${Date.now().toString(36)}`,
|
|
182
|
+
role: "user",
|
|
183
|
+
blocks: [{ type: "text", text }],
|
|
184
|
+
createdAt: new Date().toISOString(),
|
|
185
|
+
isMeta: true,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=skill-management-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-management-tools.js","sourceRoot":"","sources":["../../src/skills/skill-management-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +1,108 @@
|
|
|
1
|
-
import type { Tool } from "../tools/tool.js";
|
|
1
|
+
import type { CanUseTool, JsonSchema, Tool } from "../tools/tool.js";
|
|
2
|
+
export type SkillExecutionMode = "inline" | "fork";
|
|
3
|
+
export type SkillEffort = "minimal" | "low" | "medium" | "high";
|
|
4
|
+
export type SkillTrustLevel = "builtin" | "workspace" | "user" | "plugin" | "generated" | "remote";
|
|
5
|
+
export interface SkillExample {
|
|
6
|
+
input?: unknown;
|
|
7
|
+
output?: unknown;
|
|
8
|
+
description?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SkillPermission {
|
|
11
|
+
kind: "tool" | "network" | "filesystem" | "env" | "model" | string;
|
|
12
|
+
value?: string;
|
|
13
|
+
reason?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface SkillSourceInfo {
|
|
16
|
+
kind: "memory" | "filesystem" | "plugin" | "remote" | "generated" | string;
|
|
17
|
+
root?: string;
|
|
18
|
+
path?: string;
|
|
19
|
+
plugin?: string;
|
|
20
|
+
uri?: string;
|
|
21
|
+
}
|
|
2
22
|
export interface SkillDescriptor {
|
|
3
23
|
name: string;
|
|
4
24
|
description: string;
|
|
5
25
|
entrypoint: string;
|
|
6
|
-
execution:
|
|
26
|
+
execution: SkillExecutionMode;
|
|
7
27
|
allowedTools?: readonly string[];
|
|
8
28
|
model?: string;
|
|
9
|
-
effort?:
|
|
29
|
+
effort?: SkillEffort;
|
|
10
30
|
disableModelInvocation?: boolean;
|
|
31
|
+
version?: string;
|
|
32
|
+
title?: string;
|
|
33
|
+
tags?: readonly string[];
|
|
34
|
+
argumentHint?: string;
|
|
35
|
+
inputSchema?: JsonSchema;
|
|
36
|
+
outputSchema?: JsonSchema;
|
|
37
|
+
permissions?: readonly SkillPermission[];
|
|
38
|
+
examples?: readonly SkillExample[];
|
|
39
|
+
metadata?: Record<string, unknown>;
|
|
40
|
+
enabled?: boolean;
|
|
41
|
+
trustLevel?: SkillTrustLevel;
|
|
42
|
+
source?: SkillSourceInfo;
|
|
43
|
+
createdAt?: string;
|
|
44
|
+
updatedAt?: string;
|
|
11
45
|
}
|
|
12
46
|
export interface SkillCatalog {
|
|
13
47
|
list(): Promise<SkillDescriptor[]>;
|
|
14
48
|
get(name: string): Promise<SkillDescriptor | undefined>;
|
|
15
49
|
}
|
|
50
|
+
export interface MutableSkillCatalog extends SkillCatalog {
|
|
51
|
+
create(skill: SkillDescriptor, options?: SkillWriteOptions): Promise<SkillDescriptor>;
|
|
52
|
+
update(name: string, patch: SkillUpdatePatch, options?: SkillWriteOptions): Promise<SkillDescriptor>;
|
|
53
|
+
delete(name: string, options?: SkillWriteOptions): Promise<boolean>;
|
|
54
|
+
}
|
|
55
|
+
export interface SkillWriteOptions {
|
|
56
|
+
overwrite?: boolean;
|
|
57
|
+
actor?: string;
|
|
58
|
+
reason?: string;
|
|
59
|
+
}
|
|
60
|
+
export type SkillUpdatePatch = Partial<Omit<SkillDescriptor, "name" | "source" | "createdAt">> & {
|
|
61
|
+
name?: never;
|
|
62
|
+
};
|
|
16
63
|
export interface SkillToolInput {
|
|
17
64
|
skill?: string;
|
|
18
65
|
name?: string;
|
|
19
66
|
args?: string;
|
|
20
67
|
input?: unknown;
|
|
21
68
|
}
|
|
22
|
-
export
|
|
23
|
-
|
|
69
|
+
export interface CreateSkillToolOptions {
|
|
70
|
+
description?: string;
|
|
71
|
+
exposeCatalogHint?: boolean;
|
|
72
|
+
}
|
|
73
|
+
export interface SkillValidationOptions {
|
|
74
|
+
allowDisabled?: boolean;
|
|
75
|
+
requireEntrypoint?: boolean;
|
|
76
|
+
}
|
|
77
|
+
export interface SkillValidationIssue {
|
|
78
|
+
path: string;
|
|
79
|
+
message: string;
|
|
80
|
+
}
|
|
81
|
+
export type SkillValidationResult = {
|
|
82
|
+
ok: true;
|
|
83
|
+
value: SkillDescriptor;
|
|
84
|
+
issues: [];
|
|
85
|
+
} | {
|
|
86
|
+
ok: false;
|
|
87
|
+
issues: SkillValidationIssue[];
|
|
88
|
+
};
|
|
89
|
+
export declare function createSkillTool(catalog: SkillCatalog, options?: CreateSkillToolOptions): Tool<SkillToolInput>;
|
|
90
|
+
export declare class InMemorySkillCatalog implements MutableSkillCatalog {
|
|
24
91
|
private readonly skills;
|
|
25
92
|
constructor(skills?: readonly SkillDescriptor[]);
|
|
26
93
|
list(): Promise<SkillDescriptor[]>;
|
|
27
94
|
get(name: string): Promise<SkillDescriptor | undefined>;
|
|
95
|
+
create(skill: SkillDescriptor, options?: SkillWriteOptions): Promise<SkillDescriptor>;
|
|
96
|
+
update(name: string, patch: SkillUpdatePatch): Promise<SkillDescriptor>;
|
|
97
|
+
delete(name: string): Promise<boolean>;
|
|
28
98
|
}
|
|
99
|
+
export declare function validateSkillDescriptor(input: unknown, options?: SkillValidationOptions): SkillValidationResult;
|
|
100
|
+
export declare function normalizeSkillDescriptor(skill: SkillDescriptor, options?: SkillValidationOptions): SkillDescriptor;
|
|
101
|
+
export declare function normalizeSkillName(value: string | undefined): string | undefined;
|
|
102
|
+
export declare function isValidSkillName(name: string): boolean;
|
|
103
|
+
export declare function requireSkillName(value: string | undefined): string;
|
|
104
|
+
export declare function renderSkillPrompt(skill: SkillDescriptor, args?: string): string;
|
|
105
|
+
export declare function summarizeSkill(skill: SkillDescriptor): Record<string, unknown>;
|
|
106
|
+
export declare function createSkillAwareCanUseTool(catalog: SkillCatalog, delegate?: CanUseTool, options?: {
|
|
107
|
+
enforceAllowedTools?: boolean;
|
|
108
|
+
}): CanUseTool;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { createTextMessage } from "../types/messages.js";
|
|
2
|
-
export function createSkillTool(catalog) {
|
|
2
|
+
export function createSkillTool(catalog, options = {}) {
|
|
3
3
|
return {
|
|
4
4
|
name: "skill",
|
|
5
5
|
aliases: ["Skill"],
|
|
6
|
-
description:
|
|
6
|
+
description: options.description ?? buildSkillToolDescription(options),
|
|
7
7
|
inputSchema: {
|
|
8
8
|
type: "object",
|
|
9
9
|
properties: {
|
|
10
|
-
skill: { type: "string" },
|
|
11
|
-
name: { type: "string" },
|
|
12
|
-
args: { type: "string" },
|
|
13
|
-
input: {},
|
|
10
|
+
skill: { type: "string", description: "Skill name to invoke." },
|
|
11
|
+
name: { type: "string", description: "Alias for skill." },
|
|
12
|
+
args: { type: "string", description: "Human-readable arguments for the skill." },
|
|
13
|
+
input: { description: "Structured arguments for the skill." },
|
|
14
14
|
},
|
|
15
15
|
additionalProperties: false,
|
|
16
16
|
},
|
|
@@ -25,6 +25,8 @@ export function createSkillTool(catalog) {
|
|
|
25
25
|
const skill = await catalog.get(name);
|
|
26
26
|
if (!skill)
|
|
27
27
|
return { ok: false, message: `Unknown skill: ${name}` };
|
|
28
|
+
if (skill.enabled === false)
|
|
29
|
+
return { ok: false, message: `Skill ${name} is disabled` };
|
|
28
30
|
if (skill.disableModelInvocation)
|
|
29
31
|
return { ok: false, message: `Skill ${name} cannot be invoked by the model` };
|
|
30
32
|
return { ok: true, value: { ...input, skill: name } };
|
|
@@ -34,6 +36,8 @@ export function createSkillTool(catalog) {
|
|
|
34
36
|
const skill = name ? await catalog.get(name) : undefined;
|
|
35
37
|
if (!name || !skill)
|
|
36
38
|
return { ok: false, output: { error: `Unknown skill: ${name ?? "<empty>"}` } };
|
|
39
|
+
if (skill.enabled === false)
|
|
40
|
+
return { ok: false, output: { error: `Skill ${name} is disabled` } };
|
|
37
41
|
if (skill.execution === "fork") {
|
|
38
42
|
return {
|
|
39
43
|
ok: false,
|
|
@@ -41,16 +45,12 @@ export function createSkillTool(catalog) {
|
|
|
41
45
|
status: "fork_required",
|
|
42
46
|
skill: name,
|
|
43
47
|
message: "Forked skill execution requires launching AgentTool with the skill prompt in this scaffold.",
|
|
48
|
+
descriptor: summarizeSkill(skill),
|
|
44
49
|
},
|
|
45
50
|
};
|
|
46
51
|
}
|
|
47
52
|
const args = renderSkillArgs(input.args ?? input.input);
|
|
48
|
-
const prompt =
|
|
49
|
-
`<skill name="${escapeXml(name)}">`,
|
|
50
|
-
skill.entrypoint,
|
|
51
|
-
args ? `\n<skill-args>\n${args}\n</skill-args>` : "",
|
|
52
|
-
`</skill>`,
|
|
53
|
-
].join("\n");
|
|
53
|
+
const prompt = renderSkillPrompt(skill, args);
|
|
54
54
|
return {
|
|
55
55
|
ok: true,
|
|
56
56
|
output: {
|
|
@@ -59,6 +59,7 @@ export function createSkillTool(catalog) {
|
|
|
59
59
|
allowed_tools: skill.allowedTools ?? [],
|
|
60
60
|
model: skill.model,
|
|
61
61
|
effort: skill.effort,
|
|
62
|
+
descriptor: summarizeSkill(skill),
|
|
62
63
|
},
|
|
63
64
|
newMessages: [
|
|
64
65
|
{
|
|
@@ -73,6 +74,13 @@ export function createSkillTool(catalog) {
|
|
|
73
74
|
...context.options,
|
|
74
75
|
mainLoopModel: skill.model ?? context.options?.mainLoopModel,
|
|
75
76
|
thinkingConfig: skill.effort ? { effort: skill.effort } : context.options?.thinkingConfig,
|
|
77
|
+
activeSkill: {
|
|
78
|
+
name,
|
|
79
|
+
allowedTools: [...(skill.allowedTools ?? [])],
|
|
80
|
+
model: skill.model,
|
|
81
|
+
effort: skill.effort,
|
|
82
|
+
source: skill.source,
|
|
83
|
+
},
|
|
76
84
|
},
|
|
77
85
|
}),
|
|
78
86
|
};
|
|
@@ -83,7 +91,7 @@ export class InMemorySkillCatalog {
|
|
|
83
91
|
skills = new Map();
|
|
84
92
|
constructor(skills = []) {
|
|
85
93
|
for (const skill of skills)
|
|
86
|
-
this.skills.set(skill.name, skill);
|
|
94
|
+
this.skills.set(requireSkillName(skill.name), normalizeSkillDescriptor(skill, { requireEntrypoint: true }));
|
|
87
95
|
}
|
|
88
96
|
async list() {
|
|
89
97
|
return [...this.skills.values()].sort((left, right) => left.name.localeCompare(right.name));
|
|
@@ -91,11 +99,162 @@ export class InMemorySkillCatalog {
|
|
|
91
99
|
async get(name) {
|
|
92
100
|
return this.skills.get(normalizeSkillName(name) ?? name);
|
|
93
101
|
}
|
|
102
|
+
async create(skill, options = {}) {
|
|
103
|
+
const normalized = normalizeSkillDescriptor(skill, { requireEntrypoint: true });
|
|
104
|
+
if (!options.overwrite && this.skills.has(normalized.name))
|
|
105
|
+
throw new Error(`Skill already exists: ${normalized.name}`);
|
|
106
|
+
const now = new Date().toISOString();
|
|
107
|
+
const stored = {
|
|
108
|
+
...normalized,
|
|
109
|
+
source: normalized.source ?? { kind: "memory" },
|
|
110
|
+
createdAt: normalized.createdAt ?? now,
|
|
111
|
+
updatedAt: now,
|
|
112
|
+
};
|
|
113
|
+
this.skills.set(stored.name, stored);
|
|
114
|
+
return stored;
|
|
115
|
+
}
|
|
116
|
+
async update(name, patch) {
|
|
117
|
+
const normalizedName = requireSkillName(name);
|
|
118
|
+
const current = this.skills.get(normalizedName);
|
|
119
|
+
if (!current)
|
|
120
|
+
throw new Error(`Unknown skill: ${normalizedName}`);
|
|
121
|
+
const updated = normalizeSkillDescriptor({ ...current, ...patch, name: normalizedName }, { requireEntrypoint: true });
|
|
122
|
+
const stored = { ...updated, createdAt: current.createdAt, source: current.source, updatedAt: new Date().toISOString() };
|
|
123
|
+
this.skills.set(normalizedName, stored);
|
|
124
|
+
return stored;
|
|
125
|
+
}
|
|
126
|
+
async delete(name) {
|
|
127
|
+
return this.skills.delete(requireSkillName(name));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export function validateSkillDescriptor(input, options = {}) {
|
|
131
|
+
const issues = [];
|
|
132
|
+
if (!input || typeof input !== "object" || Array.isArray(input)) {
|
|
133
|
+
return { ok: false, issues: [{ path: "skill", message: "Skill descriptor must be an object" }] };
|
|
134
|
+
}
|
|
135
|
+
const value = input;
|
|
136
|
+
const name = normalizeSkillName(value.name);
|
|
137
|
+
if (!name)
|
|
138
|
+
issues.push({ path: "name", message: "Skill name is required" });
|
|
139
|
+
else if (!isValidSkillName(name))
|
|
140
|
+
issues.push({ path: "name", message: "Skill name may contain letters, numbers, dot, underscore, or dash only" });
|
|
141
|
+
if (!value.description?.trim())
|
|
142
|
+
issues.push({ path: "description", message: "Skill description is required" });
|
|
143
|
+
if (options.requireEntrypoint !== false && !value.entrypoint?.trim())
|
|
144
|
+
issues.push({ path: "entrypoint", message: "Skill entrypoint is required" });
|
|
145
|
+
if (value.execution && value.execution !== "inline" && value.execution !== "fork")
|
|
146
|
+
issues.push({ path: "execution", message: "Skill execution must be inline or fork" });
|
|
147
|
+
if (value.effort && !["minimal", "low", "medium", "high"].includes(value.effort))
|
|
148
|
+
issues.push({ path: "effort", message: "Skill effort is invalid" });
|
|
149
|
+
if (value.enabled === false && !options.allowDisabled)
|
|
150
|
+
issues.push({ path: "enabled", message: "Skill is disabled" });
|
|
151
|
+
if (value.allowedTools && !Array.isArray(value.allowedTools))
|
|
152
|
+
issues.push({ path: "allowedTools", message: "allowedTools must be an array" });
|
|
153
|
+
if (value.tags && !Array.isArray(value.tags))
|
|
154
|
+
issues.push({ path: "tags", message: "tags must be an array" });
|
|
155
|
+
if (issues.length)
|
|
156
|
+
return { ok: false, issues };
|
|
157
|
+
return { ok: true, value: normalizeSkillDescriptor(value, options), issues: [] };
|
|
94
158
|
}
|
|
95
|
-
function
|
|
159
|
+
export function normalizeSkillDescriptor(skill, options = {}) {
|
|
160
|
+
const validation = validateSkillDescriptorShallow(skill, options);
|
|
161
|
+
if (validation.length)
|
|
162
|
+
throw new Error(validation.map((issue) => `${issue.path}: ${issue.message}`).join("; "));
|
|
163
|
+
return {
|
|
164
|
+
...skill,
|
|
165
|
+
name: requireSkillName(skill.name),
|
|
166
|
+
description: skill.description.trim(),
|
|
167
|
+
entrypoint: (skill.entrypoint ?? "").trim(),
|
|
168
|
+
execution: skill.execution ?? "inline",
|
|
169
|
+
allowedTools: normalizeStringList(skill.allowedTools),
|
|
170
|
+
tags: normalizeStringList(skill.tags),
|
|
171
|
+
enabled: skill.enabled ?? true,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
export function normalizeSkillName(value) {
|
|
96
175
|
const normalized = value?.trim().replace(/^\/+/, "");
|
|
97
176
|
return normalized || undefined;
|
|
98
177
|
}
|
|
178
|
+
export function isValidSkillName(name) {
|
|
179
|
+
return /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(name) && !name.includes("..") && !/[\\/]/.test(name);
|
|
180
|
+
}
|
|
181
|
+
export function requireSkillName(value) {
|
|
182
|
+
const name = normalizeSkillName(value);
|
|
183
|
+
if (!name || !isValidSkillName(name))
|
|
184
|
+
throw new Error(`Invalid skill name: ${value ?? "<empty>"}`);
|
|
185
|
+
return name;
|
|
186
|
+
}
|
|
187
|
+
export function renderSkillPrompt(skill, args = "") {
|
|
188
|
+
return [
|
|
189
|
+
`<skill name="${escapeXml(skill.name)}">`,
|
|
190
|
+
skill.entrypoint,
|
|
191
|
+
args ? `\n<skill-args>\n${args}\n</skill-args>` : "",
|
|
192
|
+
`</skill>`,
|
|
193
|
+
].join("\n");
|
|
194
|
+
}
|
|
195
|
+
export function summarizeSkill(skill) {
|
|
196
|
+
return {
|
|
197
|
+
name: skill.name,
|
|
198
|
+
title: skill.title,
|
|
199
|
+
description: skill.description,
|
|
200
|
+
version: skill.version,
|
|
201
|
+
execution: skill.execution,
|
|
202
|
+
tags: skill.tags,
|
|
203
|
+
allowedTools: skill.allowedTools,
|
|
204
|
+
model: skill.model,
|
|
205
|
+
effort: skill.effort,
|
|
206
|
+
enabled: skill.enabled !== false,
|
|
207
|
+
trustLevel: skill.trustLevel,
|
|
208
|
+
source: skill.source,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
export function createSkillAwareCanUseTool(catalog, delegate, options = {}) {
|
|
212
|
+
return async (toolUse, context) => {
|
|
213
|
+
const delegated = delegate ? await delegate(toolUse, context) : { allowed: true };
|
|
214
|
+
const delegatedAllowed = typeof delegated === "boolean" ? delegated : delegated.allowed;
|
|
215
|
+
if (!delegatedAllowed)
|
|
216
|
+
return delegated;
|
|
217
|
+
const activeSkill = context.options?.activeSkill;
|
|
218
|
+
if (!activeSkill || options.enforceAllowedTools === false)
|
|
219
|
+
return delegated;
|
|
220
|
+
const descriptor = await catalog.get(activeSkill.name);
|
|
221
|
+
const allowedTools = descriptor?.allowedTools ?? activeSkill.allowedTools;
|
|
222
|
+
if (!allowedTools?.length || allowedTools.includes("*"))
|
|
223
|
+
return delegated;
|
|
224
|
+
const tool = context.tools.get(toolUse.name) ?? context.tools.getByAlias?.(toolUse.name);
|
|
225
|
+
const canonicalName = tool?.name ?? toolUse.name;
|
|
226
|
+
if (canonicalName === "skill" || allowedTools.includes(canonicalName) || allowedTools.includes(toolUse.name))
|
|
227
|
+
return delegated;
|
|
228
|
+
return { allowed: false, reason: `Tool ${canonicalName} is not allowed while skill ${activeSkill.name} is active` };
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
function buildSkillToolDescription(options) {
|
|
232
|
+
const hint = options.exposeCatalogHint === false ? "" : " Use skill_list to discover available skills and skill_read to inspect details.";
|
|
233
|
+
return `Load a reusable prompt workflow. Inline skills inject prompt messages into the next model turn; fork skills request child-agent execution.${hint}`;
|
|
234
|
+
}
|
|
235
|
+
function validateSkillDescriptorShallow(skill, options) {
|
|
236
|
+
const issues = [];
|
|
237
|
+
const name = normalizeSkillName(skill.name);
|
|
238
|
+
if (!name)
|
|
239
|
+
issues.push({ path: "name", message: "Skill name is required" });
|
|
240
|
+
else if (!isValidSkillName(name))
|
|
241
|
+
issues.push({ path: "name", message: "Skill name may contain letters, numbers, dot, underscore, or dash only" });
|
|
242
|
+
if (!skill.description?.trim())
|
|
243
|
+
issues.push({ path: "description", message: "Skill description is required" });
|
|
244
|
+
if (options.requireEntrypoint !== false && !skill.entrypoint?.trim())
|
|
245
|
+
issues.push({ path: "entrypoint", message: "Skill entrypoint is required" });
|
|
246
|
+
if (skill.execution && skill.execution !== "inline" && skill.execution !== "fork")
|
|
247
|
+
issues.push({ path: "execution", message: "Skill execution must be inline or fork" });
|
|
248
|
+
if (skill.effort && !["minimal", "low", "medium", "high"].includes(skill.effort))
|
|
249
|
+
issues.push({ path: "effort", message: "Skill effort is invalid" });
|
|
250
|
+
return issues;
|
|
251
|
+
}
|
|
252
|
+
function normalizeStringList(values) {
|
|
253
|
+
if (!values)
|
|
254
|
+
return undefined;
|
|
255
|
+
const normalized = [...new Set(values.map((value) => value.trim()).filter(Boolean))];
|
|
256
|
+
return normalized.length ? normalized : undefined;
|
|
257
|
+
}
|
|
99
258
|
function renderSkillArgs(value) {
|
|
100
259
|
if (value === undefined || value === null)
|
|
101
260
|
return "";
|