@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.
Files changed (54) hide show
  1. package/dist/agent/skills.d.ts +10 -2
  2. package/dist/agent/skills.js +38 -12
  3. package/dist/agent/skills.js.map +1 -1
  4. package/dist/auth/manager.d.ts +13 -0
  5. package/dist/auth/manager.js +22 -0
  6. package/dist/auth/manager.js.map +1 -1
  7. package/dist/auth/providers/openai-codex.d.ts +46 -0
  8. package/dist/auth/providers/openai-codex.js +201 -0
  9. package/dist/auth/providers/openai-codex.js.map +1 -0
  10. package/dist/harness.js +14 -3
  11. package/dist/harness.js.map +1 -1
  12. package/dist/mcp/builtin.d.ts +13 -0
  13. package/dist/mcp/builtin.js +93 -0
  14. package/dist/mcp/builtin.js.map +1 -0
  15. package/dist/mcp/client.d.ts +5 -1
  16. package/dist/mcp/client.js +11 -4
  17. package/dist/mcp/client.js.map +1 -1
  18. package/dist/mcp/manager.d.ts +13 -1
  19. package/dist/mcp/manager.js +30 -2
  20. package/dist/mcp/manager.js.map +1 -1
  21. package/dist/mcp/secrets.d.ts +15 -0
  22. package/dist/mcp/secrets.js +61 -0
  23. package/dist/mcp/secrets.js.map +1 -1
  24. package/dist/providers/builtin.js +17 -4
  25. package/dist/providers/builtin.js.map +1 -1
  26. package/dist/providers/catalog.d.ts +27 -3
  27. package/dist/providers/catalog.js +10 -0
  28. package/dist/providers/catalog.js.map +1 -1
  29. package/dist/providers/catalog.json +41 -5
  30. package/dist/providers/piai.d.ts +1 -1
  31. package/dist/providers/piai.js +10 -1
  32. package/dist/providers/piai.js.map +1 -1
  33. package/dist/providers/registry.js +4 -2
  34. package/dist/providers/registry.js.map +1 -1
  35. package/dist/runtime-plugins/builtin/media.d.ts +33 -0
  36. package/dist/runtime-plugins/builtin/media.js +315 -0
  37. package/dist/runtime-plugins/builtin/media.js.map +1 -0
  38. package/dist/runtime-plugins/host.d.ts +2 -0
  39. package/dist/runtime-plugins/host.js +3 -2
  40. package/dist/runtime-plugins/host.js.map +1 -1
  41. package/dist/runtime-plugins/index.d.ts +1 -0
  42. package/dist/runtime-plugins/index.js.map +1 -1
  43. package/dist/runtime-plugins/types.d.ts +5 -0
  44. package/package.json +23 -2
  45. package/skills/media-generation/SKILL.md +96 -0
  46. package/skills/plugin-creator/SKILL.md +120 -0
  47. package/skills/plugin-creator/scripts/create-plugin.mjs +76 -0
  48. package/skills/plugin-creator/scripts/validate-plugin.mjs +46 -0
  49. package/skills/plugin-creator/scripts/validate-runtime-plugin.mjs +28 -0
  50. package/skills/skill-authoring/SKILL.md +4 -1
  51. package/skills/skill-creator/SKILL.md +98 -0
  52. package/skills/skill-creator/scripts/create-skill.mjs +75 -0
  53. package/skills/skill-creator/scripts/validate-runtime-skill.mjs +36 -0
  54. 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":"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"}
@@ -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":"AAEA,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
+ {"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.2.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.84.3",
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.