@oharness/engine 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/skills.d.ts +10 -2
- package/dist/agent/skills.js +38 -12
- package/dist/agent/skills.js.map +1 -1
- package/dist/auth/manager.d.ts +13 -0
- package/dist/auth/manager.js +22 -0
- package/dist/auth/manager.js.map +1 -1
- package/dist/auth/providers/openai-codex.d.ts +46 -0
- package/dist/auth/providers/openai-codex.js +201 -0
- package/dist/auth/providers/openai-codex.js.map +1 -0
- package/dist/harness.js +14 -3
- package/dist/harness.js.map +1 -1
- package/dist/mcp/builtin.d.ts +13 -0
- package/dist/mcp/builtin.js +93 -0
- package/dist/mcp/builtin.js.map +1 -0
- package/dist/mcp/client.d.ts +5 -1
- package/dist/mcp/client.js +11 -4
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/manager.d.ts +13 -1
- package/dist/mcp/manager.js +30 -2
- package/dist/mcp/manager.js.map +1 -1
- package/dist/mcp/secrets.d.ts +15 -0
- package/dist/mcp/secrets.js +61 -0
- package/dist/mcp/secrets.js.map +1 -1
- package/dist/providers/builtin.js +17 -4
- package/dist/providers/builtin.js.map +1 -1
- package/dist/providers/catalog.d.ts +27 -3
- package/dist/providers/catalog.js +10 -0
- package/dist/providers/catalog.js.map +1 -1
- package/dist/providers/catalog.json +41 -5
- package/dist/providers/piai.d.ts +1 -1
- package/dist/providers/piai.js +10 -1
- package/dist/providers/piai.js.map +1 -1
- package/dist/providers/registry.js +4 -2
- package/dist/providers/registry.js.map +1 -1
- package/dist/runtime-plugins/builtin/media.d.ts +33 -0
- package/dist/runtime-plugins/builtin/media.js +315 -0
- package/dist/runtime-plugins/builtin/media.js.map +1 -0
- package/dist/runtime-plugins/host.d.ts +2 -0
- package/dist/runtime-plugins/host.js +3 -2
- package/dist/runtime-plugins/host.js.map +1 -1
- package/dist/runtime-plugins/index.d.ts +1 -0
- package/dist/runtime-plugins/index.js.map +1 -1
- package/dist/runtime-plugins/types.d.ts +5 -0
- package/package.json +23 -2
- package/skills/media-generation/SKILL.md +96 -0
- package/skills/plugin-creator/SKILL.md +120 -0
- package/skills/plugin-creator/scripts/create-plugin.mjs +76 -0
- package/skills/plugin-creator/scripts/validate-plugin.mjs +46 -0
- package/skills/plugin-creator/scripts/validate-runtime-plugin.mjs +28 -0
- package/skills/skill-authoring/SKILL.md +4 -1
- package/skills/skill-creator/SKILL.md +98 -0
- package/skills/skill-creator/scripts/create-skill.mjs +75 -0
- package/skills/skill-creator/scripts/validate-runtime-skill.mjs +36 -0
- package/skills/skill-creator/scripts/validate-skill.mjs +40 -0
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import { McpClient } from "../../mcp/client.js";
|
|
4
|
+
import { ottoportMediaServer } from "../../mcp/builtin.js";
|
|
5
|
+
import { normalizeObjectSchema } from "../../util/schema.js";
|
|
6
|
+
import { toolError, toolText } from "../../tools/types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Image, video, speech and music, as four ordinary tools.
|
|
9
|
+
*
|
|
10
|
+
* The generation itself belongs to a vendor and always will: the models change
|
|
11
|
+
* weekly, each takes different parameters, and keeping a copy of that here
|
|
12
|
+
* would be a copy that goes stale and bills the user for the privilege. So the
|
|
13
|
+
* work is done by the gateway's own MCP server, and this plugin is the façade
|
|
14
|
+
* in front of it.
|
|
15
|
+
*
|
|
16
|
+
* A façade rather than a passthrough, for three reasons that the raw server
|
|
17
|
+
* cannot address from where it sits:
|
|
18
|
+
*
|
|
19
|
+
* The vendor's name is not part of the product. Tools called
|
|
20
|
+
* `mcp__ottoport__ottoport_generate_image` would put an implementation
|
|
21
|
+
* detail in front of the user and in every request's tool list, and would
|
|
22
|
+
* have to be renamed the day the backend moves. `GenerateImage` survives it.
|
|
23
|
+
*
|
|
24
|
+
* Generations come back as URLs that expire within hours. A file in the
|
|
25
|
+
* workspace is what the user actually wanted, and doing it here means the
|
|
26
|
+
* model cannot forget to.
|
|
27
|
+
*
|
|
28
|
+
* These tools spend real money — cents for an image, dollars for a video —
|
|
29
|
+
* which makes them the rare case where a confirmation is worth its
|
|
30
|
+
* interruption. Being tools rather than an MCP server is what lets the title
|
|
31
|
+
* say what is about to be spent.
|
|
32
|
+
*/
|
|
33
|
+
/** Where generated files land when the caller does not say. */
|
|
34
|
+
const DEFAULT_DIR = "media";
|
|
35
|
+
export function createMediaPlugin(options) {
|
|
36
|
+
return {
|
|
37
|
+
id: "media",
|
|
38
|
+
version: "1.0.0",
|
|
39
|
+
apiVersion: 1,
|
|
40
|
+
description: "Image, video, speech and music generation",
|
|
41
|
+
parseConfig(raw) {
|
|
42
|
+
if (raw !== undefined && (typeof raw !== "object" || raw === null)) {
|
|
43
|
+
throw new Error("Invalid media config");
|
|
44
|
+
}
|
|
45
|
+
return {};
|
|
46
|
+
},
|
|
47
|
+
async setup(ctx) {
|
|
48
|
+
/**
|
|
49
|
+
* No credential, no tools — and no subprocess either.
|
|
50
|
+
*
|
|
51
|
+
* Registering them anyway would put five tool definitions in the system
|
|
52
|
+
* prompt of every request for every user who will never generate an
|
|
53
|
+
* image, and each one would fail on the first call.
|
|
54
|
+
*/
|
|
55
|
+
if (!(await options.secret()))
|
|
56
|
+
return;
|
|
57
|
+
const config = ottoportMediaServer();
|
|
58
|
+
if (!config) {
|
|
59
|
+
ctx.logger.warn("media tools unavailable: the gateway client is not installed");
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const client = new McpClient("media", config, ctx.logger, undefined, async () => options.secret());
|
|
63
|
+
ctx.onDispose(async () => {
|
|
64
|
+
await client.close().catch(() => { });
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Connected during setup, because the tools are built from what the
|
|
68
|
+
* server says it takes.
|
|
69
|
+
*
|
|
70
|
+
* The alternative — connecting on the first call — would mean writing
|
|
71
|
+
* the parameters out here, and a copy of someone else's parameter list
|
|
72
|
+
* goes stale silently: a field added upstream would never reach the
|
|
73
|
+
* gateway, and nothing would report it. One subprocess for an account
|
|
74
|
+
* that actually has a media gateway is the cheaper mistake.
|
|
75
|
+
*/
|
|
76
|
+
let advertised;
|
|
77
|
+
try {
|
|
78
|
+
await client.connect();
|
|
79
|
+
advertised = await client.listTools();
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
// Never fatal. A gateway that cannot be reached is a session without
|
|
83
|
+
// media tools, not a session that will not start.
|
|
84
|
+
ctx.logger.warn("media tools unavailable", { error: String(err) });
|
|
85
|
+
await client.close().catch(() => { });
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const call = async (tool, args, tctx) => {
|
|
89
|
+
const result = await client.callTool(tool, args, tctx.signal);
|
|
90
|
+
const text = result.content
|
|
91
|
+
.map((block) => (block.type === "text" ? block.text : ""))
|
|
92
|
+
.join("")
|
|
93
|
+
.trim();
|
|
94
|
+
if (result.isError)
|
|
95
|
+
throw new Error(text || "the gateway refused the request");
|
|
96
|
+
return text;
|
|
97
|
+
};
|
|
98
|
+
for (const entry of FACADE) {
|
|
99
|
+
const def = advertised.find((candidate) => candidate.name === entry.upstream);
|
|
100
|
+
// A tool this gateway does not serve is simply not offered; registering
|
|
101
|
+
// one from a hardcoded list would put a button here that cannot work.
|
|
102
|
+
if (!def)
|
|
103
|
+
continue;
|
|
104
|
+
ctx.tools.register(facadeTool(entry, def, call));
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* What each upstream tool is called here, and what it produces.
|
|
111
|
+
*
|
|
112
|
+
* The rename is the whole of the mapping. Parameters are not restated: the
|
|
113
|
+
* schema comes from the server, so a model can send anything that server
|
|
114
|
+
* accepts and a parameter added upstream works the day it ships. Writing them
|
|
115
|
+
* out here would be a second, staler copy of somebody else's list — and the
|
|
116
|
+
* failure mode is silent, since a parameter this file has not heard of would
|
|
117
|
+
* simply never reach the gateway.
|
|
118
|
+
*/
|
|
119
|
+
export const FACADE = [
|
|
120
|
+
{
|
|
121
|
+
upstream: "ottoport_list_models",
|
|
122
|
+
name: "ListMediaModels",
|
|
123
|
+
kind: "",
|
|
124
|
+
note: "Ask before naming a model: the catalog changes, and a wrong id is a failed billable call. " +
|
|
125
|
+
"This is also how to answer what a generation will cost.",
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
upstream: "ottoport_generate_image",
|
|
129
|
+
name: "GenerateImage",
|
|
130
|
+
kind: "image",
|
|
131
|
+
note: "Saves the result into the workspace and returns the path. Costs money per image — make one " +
|
|
132
|
+
"unless more were asked for, and do not regenerate for a better result unless the user asked " +
|
|
133
|
+
"for another try.",
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
upstream: "ottoport_generate_video",
|
|
137
|
+
name: "GenerateVideo",
|
|
138
|
+
kind: "video",
|
|
139
|
+
note: "Saves the result into the workspace and returns the path. Runs for a minute or more and is " +
|
|
140
|
+
"the most expensive call here — seconds of output are the main lever on price. Say it is " +
|
|
141
|
+
"running before you start, and never call it again while one is in flight: that is a second " +
|
|
142
|
+
"generation and a second charge.",
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
upstream: "ottoport_generate_speech",
|
|
146
|
+
name: "GenerateSpeech",
|
|
147
|
+
kind: "speech",
|
|
148
|
+
note: "Saves the audio into the workspace and returns the path. Priced by the character.",
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
upstream: "ottoport_generate_music",
|
|
152
|
+
name: "GenerateMusic",
|
|
153
|
+
kind: "music",
|
|
154
|
+
note: "Saves the track into the workspace and returns the path. Priced by the second, and a " +
|
|
155
|
+
"full-length track costs several dollars — ask for the length the user actually needs.",
|
|
156
|
+
},
|
|
157
|
+
];
|
|
158
|
+
/** The one parameter that is ours: the gateway has no idea where files go. */
|
|
159
|
+
const PATH_PROPERTY = {
|
|
160
|
+
type: "string",
|
|
161
|
+
description: `Where to save the result. Relative to the project; default ${DEFAULT_DIR}/.`,
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* One upstream tool, wearing this harness's name and manners.
|
|
165
|
+
*
|
|
166
|
+
* `inputSchema` is the server's own, with `path` added. Nothing validates it
|
|
167
|
+
* here: the server validates its own inputs, and a second opinion derived from
|
|
168
|
+
* its JSON Schema would only be a less accurate one — the same reasoning the
|
|
169
|
+
* MCP tool adapter states.
|
|
170
|
+
*/
|
|
171
|
+
export function facadeTool(entry, def, call) {
|
|
172
|
+
const generates = entry.kind !== "";
|
|
173
|
+
const schema = normalizeObjectSchema(def.inputSchema ?? {});
|
|
174
|
+
return {
|
|
175
|
+
name: entry.name,
|
|
176
|
+
description: `${def.description ?? entry.name} ${entry.note}`,
|
|
177
|
+
inputSchema: {
|
|
178
|
+
...schema,
|
|
179
|
+
...(generates
|
|
180
|
+
? { properties: { ...(schema.properties ?? {}), path: PATH_PROPERTY } }
|
|
181
|
+
: {}),
|
|
182
|
+
},
|
|
183
|
+
// Reading the catalog spends nothing; generating spends real money, and a
|
|
184
|
+
// tool marked readOnly skips the confirmation that is the only thing
|
|
185
|
+
// between a model's instinct to retry and a second charge.
|
|
186
|
+
readOnly: !generates,
|
|
187
|
+
concurrencySafe: !generates,
|
|
188
|
+
source: "builtin",
|
|
189
|
+
renderTitle: (input) => `${entry.name}(${bill(input)})`,
|
|
190
|
+
async execute(input, ctx) {
|
|
191
|
+
const args = { ...input };
|
|
192
|
+
const into = typeof args["path"] === "string" ? args["path"] : undefined;
|
|
193
|
+
delete args["path"];
|
|
194
|
+
if (entry.name === "GenerateVideo") {
|
|
195
|
+
ctx.onProgress({
|
|
196
|
+
toolCallId: ctx.toolCallId,
|
|
197
|
+
toolName: entry.name,
|
|
198
|
+
message: "generating — this usually takes a minute or more",
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
const answer = await call(entry.upstream, args, ctx);
|
|
202
|
+
return generates ? await land(answer, ctx, into, entry.kind) : toolText(answer);
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* The bits of a call the bill is made of, for the line the user confirms.
|
|
208
|
+
*
|
|
209
|
+
* Model, count and duration, when they are there — and nothing invented when
|
|
210
|
+
* they are not, since which of them a model takes is the server's business.
|
|
211
|
+
*/
|
|
212
|
+
function bill(input) {
|
|
213
|
+
const args = (input ?? {});
|
|
214
|
+
const parts = [typeof args["model"] === "string" ? args["model"] : "default"];
|
|
215
|
+
if (typeof args["n"] === "number" && args["n"] > 1)
|
|
216
|
+
parts.push(`×${args["n"]}`);
|
|
217
|
+
if (typeof args["duration"] === "number")
|
|
218
|
+
parts.push(`${args["duration"]}s`);
|
|
219
|
+
if (typeof args["size"] === "string")
|
|
220
|
+
parts.push(args["size"]);
|
|
221
|
+
if (typeof args["modality"] === "string")
|
|
222
|
+
return args["modality"];
|
|
223
|
+
return parts.join(", ");
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Put what came back on disk, and say where.
|
|
227
|
+
*
|
|
228
|
+
* The gateway answers with URLs, and provider URLs expire within hours — often
|
|
229
|
+
* before the conversation that asked for them is over. Downloading is
|
|
230
|
+
* therefore not a convenience: a reply that returns only the link is a reply
|
|
231
|
+
* that stops working, and the user paid for the file, not the link.
|
|
232
|
+
*
|
|
233
|
+
* A download that fails is not a failed generation. The money is already
|
|
234
|
+
* spent, so the URL is handed back with the reason rather than swallowed — a
|
|
235
|
+
* caller who can still fetch it in the next minute loses nothing.
|
|
236
|
+
*/
|
|
237
|
+
async function land(answer, ctx, into, kind) {
|
|
238
|
+
/**
|
|
239
|
+
* Inline audio, before anything else.
|
|
240
|
+
*
|
|
241
|
+
* Speech models may answer with the bytes themselves rather than a link —
|
|
242
|
+
* `data:audio;base64,…` — and that answer is the file, megabytes of it. Left
|
|
243
|
+
* alone it goes straight into the conversation, where it costs a fortune in
|
|
244
|
+
* tokens, is unreadable, and is thrown away at the end of the session. It is
|
|
245
|
+
* written out for the same reason a URL is downloaded, only more urgently.
|
|
246
|
+
*/
|
|
247
|
+
const inline = /^data:([\w/+.-]+)?;base64,([A-Za-z0-9+/=\s]+)$/.exec(answer.trim());
|
|
248
|
+
if (inline) {
|
|
249
|
+
try {
|
|
250
|
+
return toolText(`Saved:\n ${await write(Buffer.from(inline[2], "base64"), ctx, into, kind, 0, mediaExtension(inline[1]))}`);
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
// Never hand the blob back on failure: the point of the branch is that it
|
|
254
|
+
// must not reach the transcript.
|
|
255
|
+
return toolError(`generated, but could not be written: ${err instanceof Error ? err.message : String(err)}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
const urls = [...answer.matchAll(/https?:\/\/\S+/g)].map((m) => m[0].replace(/[.,)\]]+$/, ""));
|
|
259
|
+
if (urls.length === 0)
|
|
260
|
+
return toolText(answer);
|
|
261
|
+
const saved = [];
|
|
262
|
+
const failed = [];
|
|
263
|
+
for (const [index, url] of urls.entries()) {
|
|
264
|
+
try {
|
|
265
|
+
saved.push(await download(url, ctx, into, kind, index));
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
failed.push(`${url} — ${err instanceof Error ? err.message : String(err)}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const lines = [];
|
|
272
|
+
if (saved.length)
|
|
273
|
+
lines.push(`Saved:\n${saved.map((f) => ` ${f}`).join("\n")}`);
|
|
274
|
+
if (failed.length) {
|
|
275
|
+
lines.push(`Generated but not downloaded — these expire within hours:\n${failed.map((f) => ` ${f}`).join("\n")}`);
|
|
276
|
+
}
|
|
277
|
+
return lines.length ? toolText(lines.join("\n\n")) : toolError(answer);
|
|
278
|
+
}
|
|
279
|
+
async function download(url, ctx, into, kind, index) {
|
|
280
|
+
const response = await fetch(url, { signal: ctx.signal });
|
|
281
|
+
if (!response.ok)
|
|
282
|
+
throw new Error(`HTTP ${response.status}`);
|
|
283
|
+
return await write(Buffer.from(await response.arrayBuffer()), ctx, into, kind, index, extensionOf(url));
|
|
284
|
+
}
|
|
285
|
+
/** One file into the workspace, named for what made it. */
|
|
286
|
+
async function write(bytes, ctx, into, kind, index, extension) {
|
|
287
|
+
const name = `${kind}-${Date.now()}${index ? `-${index + 1}` : ""}${extension}`;
|
|
288
|
+
const target = path.join(into ?? DEFAULT_DIR, name);
|
|
289
|
+
// Through the workspace policy, so a model-supplied `path` cannot write
|
|
290
|
+
// outside the roots this session is allowed to touch.
|
|
291
|
+
const absolute = ctx.host.resolvePath?.(target, "write") ?? path.resolve(ctx.cwd, target);
|
|
292
|
+
await mkdir(path.dirname(absolute), { recursive: true });
|
|
293
|
+
await writeFile(absolute, bytes);
|
|
294
|
+
return path.relative(ctx.cwd, absolute) || absolute;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* An extension for a media type, when it says something useful.
|
|
298
|
+
*
|
|
299
|
+
* `data:audio;base64,…` — which is what one of these models actually sends —
|
|
300
|
+
* carries no subtype at all, so the common case is a guess between nothing and
|
|
301
|
+
* something plausible. `.mp3` is what the gateway's own `format` defaults to.
|
|
302
|
+
*/
|
|
303
|
+
function mediaExtension(mime) {
|
|
304
|
+
const subtype = (mime ?? "").split("/")[1]?.split(";")[0];
|
|
305
|
+
if (subtype && /^[a-z0-9]{2,5}$/.test(subtype))
|
|
306
|
+
return `.${subtype === "mpeg" ? "mp3" : subtype}`;
|
|
307
|
+
return (mime ?? "").startsWith("audio") || mime === "audio" ? ".mp3" : "";
|
|
308
|
+
}
|
|
309
|
+
/** The extension the URL carries, when it carries a plausible one. */
|
|
310
|
+
function extensionOf(url) {
|
|
311
|
+
const clean = url.split(/[?#]/)[0] ?? "";
|
|
312
|
+
const ext = path.extname(clean);
|
|
313
|
+
return /^\.[A-Za-z0-9]{2,5}$/.test(ext) ? ext.toLowerCase() : "";
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../../src/runtime-plugins/builtin/media.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AuthManager } from "../auth/manager.ts";
|
|
2
2
|
import type { HookRegistry } from "../agent/hooks.ts";
|
|
3
|
+
import type { SkillRegistry } from "../agent/skills.ts";
|
|
3
4
|
import type { ProviderRegistry } from "../providers/registry.ts";
|
|
4
5
|
import type { ToolRegistry } from "../tools/registry.ts";
|
|
5
6
|
import type { Logger } from "../util/logger.ts";
|
|
@@ -8,6 +9,7 @@ import { PluginExtensions } from "./extensions.ts";
|
|
|
8
9
|
import type { RuntimePluginConfig, RuntimePluginRegistration, RuntimePluginStatus } from "./types.ts";
|
|
9
10
|
interface Services {
|
|
10
11
|
tools: ToolRegistry;
|
|
12
|
+
skills: SkillRegistry;
|
|
11
13
|
hooks: HookRegistry;
|
|
12
14
|
models: ProviderRegistry;
|
|
13
15
|
auth: AuthManager;
|
|
@@ -49,7 +49,7 @@ export class PluginHost {
|
|
|
49
49
|
status: {
|
|
50
50
|
id, required: config.required !== false,
|
|
51
51
|
state: config.enabled === false ? "disabled" : "loading",
|
|
52
|
-
contributions: { tools: 0, models: 0, auth: 0, hooks: 0, audit: 0, prompts: 0, pages: 0 },
|
|
52
|
+
contributions: { tools: 0, skills: 0, models: 0, auth: 0, hooks: 0, audit: 0, prompts: 0, pages: 0 },
|
|
53
53
|
},
|
|
54
54
|
controller: new AbortController(), registrations: [], resources: [], starts: [], calls: new Set(),
|
|
55
55
|
};
|
|
@@ -133,6 +133,7 @@ export class PluginHost {
|
|
|
133
133
|
}
|
|
134
134
|
},
|
|
135
135
|
}))) }),
|
|
136
|
+
skills: Object.freeze({ register: (skill) => register("skills", () => services.skills.registerScoped(skill)) }),
|
|
136
137
|
hooks: Object.freeze({ on: (event, handler) => register("hooks", () => services.hooks.subscribe(event, async (payload) => {
|
|
137
138
|
if (signal.aborted || instance.status.state !== "active")
|
|
138
139
|
return;
|
|
@@ -241,7 +242,7 @@ export class PluginHost {
|
|
|
241
242
|
for (const cleanup of instance.resources.splice(0).reverse())
|
|
242
243
|
await this.bounded(cleanup, instance);
|
|
243
244
|
instance.starts.length = 0;
|
|
244
|
-
instance.status.contributions = { tools: 0, models: 0, auth: 0, hooks: 0, audit: 0, prompts: 0, pages: 0 };
|
|
245
|
+
instance.status.contributions = { tools: 0, skills: 0, models: 0, auth: 0, hooks: 0, audit: 0, prompts: 0, pages: 0 };
|
|
245
246
|
}
|
|
246
247
|
async bounded(cleanup, instance) {
|
|
247
248
|
let timer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/runtime-plugins/host.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../../src/runtime-plugins/host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAShD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAuBnD,kFAAkF;AAClF,MAAM,OAAO,UAAU;IACJ,QAAQ,CAAW;IACnB,SAAS,GAAe,EAAE,CAAC;IACpC,MAAM,GAAG,KAAK,CAAC;IACf,OAAO,CAAiB;IAEhC,YAAY,QAAkB,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;IAE7D,MAAM;QACJ,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,EAAE,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAsC,EAAE,EAAE,aAAoC,EAAE;QACzF,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,WAAW,CAAC,+BAA+B,CAAC,CAAC;QACxF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmE,CAAC;QAC3F,KAAK,MAAM,YAAY,IAAI,MAAM,EAAE,CAAC;YAClC,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC1C,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,WAAW,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE;oBACrD,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,CAAC,QAAQ;iBAChG,EAAE,CAAC,CAAC;QACP,CAAC;QACD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7B,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,WAAW,CAAC,oCAAoC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACzG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrC,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM;gBAAE,MAAM,IAAI,WAAW,CAAC,2CAA2C,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YAClH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7F,CAAC;QACD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC;gBACrE,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,EAAE,CAAC;gBAC5E,MAAM,IAAI,WAAW,CAAC,sDAAsD,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC;gBACzD,MAAM,QAAQ,GAAa;oBACzB,MAAM,EAAE;wBACN,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,KAAK;wBACvC,KAAK,EAAE,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;wBACxD,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;qBACrG;oBACD,UAAU,EAAE,IAAI,eAAe,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE;iBAClG,CAAC;gBACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9B,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;oBAAE,SAAS,CAAC,oCAAoC;gBAC5E,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAChG,IAAI,CAAC,MAAM;wBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;oBAC9D,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAClC,QAAQ,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;oBACzC,QAAQ,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;oBACjD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACjD,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC;oBACrC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;oBACnD,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC;gBAClC,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,6DAA6D,CAAC,CAAC;gBAC3F,CAAC;YACH,CAAC;YACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACtC,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO;oBAAE,SAAS;gBAChD,IAAI,CAAC;oBACH,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC;oBACnC,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM;wBAAE,MAAM,KAAK,EAAE,CAAC;oBACnD,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACnC,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;gBACnD,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,QAAkB,EAAE,KAAa;QAClD,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC;QACjC,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9B,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACnE,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,WAAW,CAAC,mBAAmB,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;IACzG,CAAC;IAEO,OAAO,CAAC,QAAkB;QAChC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1C,MAAM,QAAQ,GAAG,CAAC,IAAgD,EAAE,MAAqB,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;YACtG,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC7G,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QAC/C,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAiB,EAAE;YAC/B,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9E,MAAM,IAAI,KAAK,CAAC,UAAU,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAChE,CAAC;YACD,IAAI,MAAmB,CAAC;YACxB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,MAAM;YACN,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,EAAE;oBACrH,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;oBAC9C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;wBAC5B,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;wBACtB,IAAI,CAAC;4BAAC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBAAC,CAAC;gCAC5F,CAAC;4BAAC,KAAK,EAAE,CAAC;wBAAC,CAAC;oBACtB,CAAC;iBACF,CAAC,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/G,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;oBACvH,IAAI,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ;wBAAE,OAAO;oBACjE,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;oBACtB,IAAI,CAAC;wBAAC,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;oBAAC,CAAC;4BAAS,CAAC;wBAAC,KAAK,EAAE,CAAC;oBAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC,EAAE,CAAC;YACN,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;oBAC9E,MAAM,OAAO,GAAa;wBACxB,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACpC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE;wBAC9D,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO;4BACnB,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;4BACtB,IAAI,CAAC;gCAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BAAC,CAAC;oCACvH,CAAC;gCAAC,KAAK,EAAE,CAAC;4BAAC,CAAC;wBACtB,CAAC;wBACD,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,IAAI,EAAE;gCACjD,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;gCACtB,IAAI,CAAC;oCAAC,OAAO,MAAM,QAAQ,CAAC,UAAW,EAAE,CAAC;gCAAC,CAAC;wCAAS,CAAC;oCAAC,KAAK,EAAE,CAAC;gCAAC,CAAC;4BACnE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACV,CAAC;oBACF,OAAO,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACzD,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACpB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC/G,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACxG,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;oBACtE,IAAI,CAAC,QAAQ,CAAC,UAAU;wBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;oBAC3E,OAAO,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;wBACvE,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC;wBACtB,IAAI,CAAC;4BAAC,OAAO,MAAM,MAAM,EAAE,CAAC;wBAAC,CAAC;gCAAS,CAAC;4BAAC,KAAK,EAAE,CAAC;wBAAC,CAAC;oBACrD,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,EAAE,CAAC;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;oBAChE,IAAI,CAAC,QAAQ,CAAC,UAAU;wBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;oBACzE,OAAO,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI;wBAC/C,IAAI,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;4BAAC,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;wBAAC,CAAC;gCAAS,CAAC;4BAAC,KAAK,EAAE,CAAC;wBAAC,CAAC,CAAC,CAAC;wBACnG,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC;4BAAC,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;wBAAC,CAAC;gCAAS,CAAC;4BAAC,KAAK,EAAE,CAAC;wBAAC,CAAC,CAAC,CAAC;qBAC5G,CAAC,CAAC;gBACL,CAAC,CAAC,EAAE,CAAC;YACL,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,YAAY;oBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACvG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;YACD,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;gBACrB,IAAI,MAAM,CAAC,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAClE,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;SACsB,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,+EAA+E;QAC/E,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC;QAC7G,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAC7D,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAAE,QAAQ,CAC3D,CAAC,CAAC,CAAC;QACJ,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU;gBAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;QAC9E,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE,KAAK,GAAG,IAAI;QACpD,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,KAAK;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1F,sFAAsF;QACtF,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACxG,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACpG,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,QAAQ,CAAC,MAAM,CAAC,aAAa,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACxH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,OAAgB,EAAE,QAAkB;QACxD,IAAI,KAAgD,CAAC;QACrD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC/B,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aACrG,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,oCAAoC,CAAC;YAC7D,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QACpG,CAAC;gBAAS,CAAC;YAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export type { RuntimePlugin, RuntimePluginConfig, RuntimePluginRegistration, RuntimePluginStatus, PluginContext, PluginState, Dispose } from "./types.ts";
|
|
2
|
+
export type { RuntimeSkill } from "../agent/skills.ts";
|
|
2
3
|
export type { AuditSink, RuntimeAuditEvent } from "../core/audit.ts";
|
|
3
4
|
export { createConnectorPlugin } from "./connector.ts";
|
|
4
5
|
export { CloudConnectorService, createCloudConnectorPlugin } from "./cloud-connector.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime-plugins/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime-plugins/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAInD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { HookEvent, HookHandler } from "../agent/hooks.ts";
|
|
2
|
+
import type { RuntimeSkill } from "../agent/skills.ts";
|
|
2
3
|
import type { AuthProvider } from "../auth/types.ts";
|
|
3
4
|
import type { AuditSink } from "../core/audit.ts";
|
|
4
5
|
import type { ModelSpec, Provider } from "../providers/types.ts";
|
|
@@ -22,6 +23,9 @@ export interface PluginContext {
|
|
|
22
23
|
readonly tools: {
|
|
23
24
|
register(tool: Tool): void;
|
|
24
25
|
};
|
|
26
|
+
readonly skills: {
|
|
27
|
+
register(skill: RuntimeSkill): void;
|
|
28
|
+
};
|
|
25
29
|
readonly hooks: {
|
|
26
30
|
on(event: HookEvent, handler: HookHandler): void;
|
|
27
31
|
};
|
|
@@ -69,6 +73,7 @@ export interface RuntimePluginStatus {
|
|
|
69
73
|
required: boolean;
|
|
70
74
|
contributions: {
|
|
71
75
|
tools: number;
|
|
76
|
+
skills: number;
|
|
72
77
|
models: number;
|
|
73
78
|
auth: number;
|
|
74
79
|
hooks: number;
|
package/package.json
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oharness/engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "The agent loop, tool execution, context management and permissions. No frontend, no transport.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
|
+
"author": "Litbox LLC",
|
|
8
|
+
"homepage": "https://oharness.ai",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/Jet1217/OHarness.git",
|
|
12
|
+
"directory": "packages/engine"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/Jet1217/OHarness/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"agent",
|
|
19
|
+
"llm",
|
|
20
|
+
"tool-calling",
|
|
21
|
+
"mcp",
|
|
22
|
+
"anthropic",
|
|
23
|
+
"openai",
|
|
24
|
+
"gemini",
|
|
25
|
+
"harness"
|
|
26
|
+
],
|
|
7
27
|
"engines": {
|
|
8
28
|
"node": ">=22.6.0"
|
|
9
29
|
},
|
|
@@ -32,7 +52,8 @@
|
|
|
32
52
|
"postpack": "node scripts/write-official.mjs --clean"
|
|
33
53
|
},
|
|
34
54
|
"dependencies": {
|
|
35
|
-
"@earendil-works/pi-ai": "^0.
|
|
55
|
+
"@earendil-works/pi-ai": "^0.85.1",
|
|
56
|
+
"ottoport": "1.4.1",
|
|
36
57
|
"zod": "^4.1.5"
|
|
37
58
|
}
|
|
38
59
|
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: media-generation
|
|
3
|
+
description: Generate images, video, speech and music with the GenerateImage, GenerateVideo, GenerateSpeech and GenerateMusic tools. Use when the user wants a picture, a clip, a voiceover or a track made — covers what each call costs, which model suits the job, and how to handle a video that takes minutes. Not for editing media that already exists.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Generating media
|
|
7
|
+
|
|
8
|
+
Five tools, when the account has a media gateway configured:
|
|
9
|
+
|
|
10
|
+
| Tool | For |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| `ListMediaModels` | What this account can call, and what each costs |
|
|
13
|
+
| `GenerateImage` | A picture, or an edit of one via `image_url` |
|
|
14
|
+
| `GenerateVideo` | A clip, or a still animated via `image_url` |
|
|
15
|
+
| `GenerateSpeech` | Text read aloud |
|
|
16
|
+
| `GenerateMusic` | An instrumental or a song |
|
|
17
|
+
|
|
18
|
+
Each one saves what it generates into the workspace and tells you the path.
|
|
19
|
+
There is no download step to remember.
|
|
20
|
+
|
|
21
|
+
**If the tools are not there**, the account has no gateway credential. Say so
|
|
22
|
+
and point at `/login ottoport`. Do not reach for `Bash`, `curl` or an `npx`
|
|
23
|
+
command instead: the credential deliberately lives where a shell cannot read
|
|
24
|
+
it, so a shell cannot spend it either.
|
|
25
|
+
|
|
26
|
+
## Every call spends the user's money
|
|
27
|
+
|
|
28
|
+
This is what makes these tools unlike everything else in the harness. A chat
|
|
29
|
+
turn costs a fraction of a cent; eight seconds of video is about four dollars,
|
|
30
|
+
and a three-minute track about eight.
|
|
31
|
+
|
|
32
|
+
- **Never regenerate to get a better result** unless the user asked for another
|
|
33
|
+
try. A retry is a second charge, not a second attempt at the first one.
|
|
34
|
+
- **Never loop.** If a result disappoints, show it and ask — the user may be
|
|
35
|
+
perfectly happy, and they are the one paying.
|
|
36
|
+
- Generate **one** of a thing unless more were asked for. `n: 4` is four
|
|
37
|
+
charges.
|
|
38
|
+
- Iterate on the prompt with a cheap model, then spend once on the good one.
|
|
39
|
+
The fast tiers cost a fraction of the flagships.
|
|
40
|
+
|
|
41
|
+
## Choosing a model
|
|
42
|
+
|
|
43
|
+
Call `ListMediaModels` rather than trusting a memorised id. The catalog moves,
|
|
44
|
+
prices move with it, and **a wrong id is a failed billable call**. It is also
|
|
45
|
+
how to answer "what will this cost" before spending anything.
|
|
46
|
+
|
|
47
|
+
Leave `model` unset unless there is a reason. When there is, it is usually one
|
|
48
|
+
of these:
|
|
49
|
+
|
|
50
|
+
- **Text inside the image** — a poster, a UI mock, a label. The GPT Image
|
|
51
|
+
family renders type far better than the rest.
|
|
52
|
+
- **Editing or restyling an image the user has** — pass `image_url`; the Nano
|
|
53
|
+
Banana family is built for it.
|
|
54
|
+
- **Video that needs sound** — Veo generates its own audio. Everything else
|
|
55
|
+
returns silent footage that then needs a separate speech or music call.
|
|
56
|
+
- **Animating a still** — pass `image_url` to `GenerateVideo`. Seedance holds a
|
|
57
|
+
reference image better than the alternatives.
|
|
58
|
+
|
|
59
|
+
## What a model accepts is per-model, and `ListMediaModels` says so
|
|
60
|
+
|
|
61
|
+
Not one of these is universal:
|
|
62
|
+
|
|
63
|
+
- **Modes.** A video model may take a text prompt, a first frame (`image_url`),
|
|
64
|
+
a first *and* last frame (`last_frame_url`), or subject references
|
|
65
|
+
(`reference_image_urls`) — and most take some but not all. One or two take
|
|
66
|
+
only image-to-video.
|
|
67
|
+
- **Resolution.** The words are `480p`/`720p`/`1080p`/`2k`/`4k` for video and
|
|
68
|
+
`1k`/`2k`/`4k` for images, but no model offers the whole range.
|
|
69
|
+
- **How many references.** Anywhere from one to sixteen.
|
|
70
|
+
|
|
71
|
+
**Resolution is priced**, so this is not a validity question only — a higher
|
|
72
|
+
tier costs more, and the cheap tier is often what the user actually wanted.
|
|
73
|
+
|
|
74
|
+
So call `ListMediaModels` before naming a mode, a resolution, or a second
|
|
75
|
+
reference image. It prints each model's own menu beside its price. Guessing
|
|
76
|
+
costs a round trip when the gateway refuses (it names the real menu in the
|
|
77
|
+
error, and a rejected call is not billed) — but the round trip is avoidable
|
|
78
|
+
and the catalog is one call.
|
|
79
|
+
|
|
80
|
+
Sizes and durations work the same way: send what the user asked for, and if a
|
|
81
|
+
`400` comes back, **read it** rather than guessing again. Duration is the
|
|
82
|
+
single biggest lever on what a video costs.
|
|
83
|
+
|
|
84
|
+
## Video takes minutes
|
|
85
|
+
|
|
86
|
+
`GenerateVideo` runs for a minute or more, sometimes several.
|
|
87
|
+
|
|
88
|
+
Say so before starting, so the wait reads as expected rather than as a hang.
|
|
89
|
+
Then leave it alone — a second call is a second generation and a second charge,
|
|
90
|
+
and the first one is still running.
|
|
91
|
+
|
|
92
|
+
## Where files land
|
|
93
|
+
|
|
94
|
+
Under `media/` by default, or wherever `path` says. Point `path` at the
|
|
95
|
+
directory the work actually belongs in — an `assets/` folder, the directory of
|
|
96
|
+
the page that will reference it — when that is obvious, and ask when it is not.
|