@capybearista/opencode-agents-loader 1.0.0 → 2.0.1

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.
@@ -0,0 +1,443 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { Model } from "@opencode/plugin";
5
+ import matter from "gray-matter";
6
+ const agentKeys = new Set([
7
+ "variant",
8
+ "model",
9
+ "request",
10
+ "system",
11
+ "description",
12
+ "mode",
13
+ "hidden",
14
+ "color",
15
+ "steps",
16
+ "disabled",
17
+ "permissions",
18
+ ]);
19
+ const legacyAgentKeys = new Set([
20
+ "name",
21
+ "model",
22
+ "variant",
23
+ "temperature",
24
+ "top_p",
25
+ "prompt",
26
+ "tools",
27
+ "disable",
28
+ "description",
29
+ "mode",
30
+ "hidden",
31
+ "options",
32
+ "color",
33
+ "steps",
34
+ "maxSteps",
35
+ "permission",
36
+ "permissions",
37
+ ]);
38
+ const permissionEffects = new Set(["allow", "deny", "ask"]);
39
+ const agentModes = new Set(["subagent", "primary", "all"]);
40
+ const pathPermissionActions = new Set(["external_directory", "read", "edit"]);
41
+ const hexColor = /^#[0-9a-fA-F]{6}$/;
42
+ const invalid = Symbol("invalid");
43
+ export function fallbackSanitization(content) {
44
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
45
+ if (!match)
46
+ return content;
47
+ const frontmatter = match[1];
48
+ const lines = frontmatter.split(/\r?\n/);
49
+ const result = [];
50
+ for (const line of lines) {
51
+ if (line.trim().startsWith("#") || line.trim() === "") {
52
+ result.push(line);
53
+ continue;
54
+ }
55
+ if (/^\s+/.test(line)) {
56
+ result.push(line);
57
+ continue;
58
+ }
59
+ const kvMatch = line.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*:\s*(.*)$/);
60
+ if (!kvMatch) {
61
+ result.push(line);
62
+ continue;
63
+ }
64
+ const key = kvMatch[1];
65
+ const value = kvMatch[2].trim();
66
+ if (value === "" ||
67
+ value === ">" ||
68
+ value === "|" ||
69
+ value.startsWith('"') ||
70
+ value.startsWith("'")) {
71
+ result.push(line);
72
+ continue;
73
+ }
74
+ if (value.includes(":")) {
75
+ result.push(`${key}: |-`);
76
+ result.push(` ${value}`);
77
+ continue;
78
+ }
79
+ result.push(line);
80
+ }
81
+ const processed = result.join("\n");
82
+ return content.replace(match[0], () => `---\n${processed}\n---`);
83
+ }
84
+ export async function parseMarkdown(filePath) {
85
+ return parseMarkdownContent(await readFile(filePath, "utf8"), filePath);
86
+ }
87
+ export function parseMarkdownContent(template, source) {
88
+ try {
89
+ const parsed = matter(template);
90
+ return { data: parsed.data, content: parsed.content.trim() };
91
+ }
92
+ catch {
93
+ try {
94
+ const parsed = matter(fallbackSanitization(template));
95
+ return { data: parsed.data, content: parsed.content.trim() };
96
+ }
97
+ catch (error) {
98
+ throw new Error(`${source}: Failed to parse YAML frontmatter: ${error instanceof Error ? error.message : String(error)}`);
99
+ }
100
+ }
101
+ }
102
+ export function validateAgentContent(source, content, home = os.homedir()) {
103
+ if (content.length === 0)
104
+ return "empty agent source";
105
+ let entry;
106
+ try {
107
+ entry = parseMarkdownContent(content.toString("utf8"), source);
108
+ }
109
+ catch (error) {
110
+ return error instanceof Error ? error.message : String(error);
111
+ }
112
+ const result = convertAgentResult(entry, home);
113
+ return result.error;
114
+ }
115
+ export function convertAgent(_name, entry, home = os.homedir()) {
116
+ return convertAgentResult(entry, home).patch;
117
+ }
118
+ function convertAgentResult(entry, home) {
119
+ const data = entry.data;
120
+ const legacy = Object.keys(data).some((key) => !agentKeys.has(key));
121
+ if (legacy && data.permissions !== undefined) {
122
+ return invalidResult("mixed legacy and V2 permissions are unsupported; use one dialect");
123
+ }
124
+ return legacy ? convertLegacyAgent(entry, home) : convertV2Agent(entry, home);
125
+ }
126
+ function convertV2Agent(entry, home) {
127
+ const { data } = entry;
128
+ const disabled = readBoolean(data.disabled);
129
+ if (disabled === invalid)
130
+ return invalidResult("disabled must be a boolean");
131
+ if (data.system !== undefined && typeof data.system !== "string")
132
+ return invalidResult("system must be a string when present");
133
+ const model = parseModel(data.model, data.variant, true);
134
+ if (model.invalid)
135
+ return invalidResult("model or variant is not a valid V2 model selection");
136
+ const common = readAgentFields(data, false);
137
+ if (common === undefined)
138
+ return invalidResult("agent metadata has an invalid field");
139
+ const request = readRequest(data.request);
140
+ if (request === invalid)
141
+ return invalidResult(requestError(data.request));
142
+ const permissions = readV2Permissions(data.permissions, home);
143
+ if (permissions === invalid)
144
+ return invalidResult("permissions must be an array of valid rules");
145
+ return {
146
+ patch: {
147
+ system: entry.content,
148
+ ...(model.model === undefined ? {} : { model: model.model }),
149
+ ...(request === undefined ? {} : { request }),
150
+ ...common,
151
+ ...(disabled === undefined ? {} : { disabled }),
152
+ permissions: permissions ?? [],
153
+ },
154
+ };
155
+ }
156
+ function convertLegacyAgent(entry, home) {
157
+ const { data } = entry;
158
+ if (data.prompt !== undefined && typeof data.prompt !== "string")
159
+ return invalidResult("prompt must be a string when present");
160
+ const disable = readBoolean(data.disable);
161
+ if (disable === invalid)
162
+ return invalidResult("disable must be a boolean");
163
+ if (Object.keys(data).some((key) => !legacyAgentKeys.has(key) && looksLikePermissionField(key))) {
164
+ const key = Object.keys(data).find((candidate) => !legacyAgentKeys.has(candidate) && looksLikePermissionField(candidate));
165
+ return invalidResult(`unsupported permission alias${key === undefined ? "" : ` '${key}'`}; use tools or permission`);
166
+ }
167
+ const variant = data.variant;
168
+ if (variant !== undefined && typeof variant !== "string")
169
+ return invalidResult("variant must be a string");
170
+ const model = parseModel(data.model, variant, false);
171
+ if (model.invalid)
172
+ return invalidResult("legacy model or variant is malformed");
173
+ const common = readAgentFields(data, true);
174
+ if (common === undefined)
175
+ return invalidResult("legacy agent metadata has an invalid field");
176
+ const options = data.options;
177
+ if (options !== undefined && !isJsonRecord(options))
178
+ return invalidResult("options must be a JSON object");
179
+ const body = isJsonRecord(options) ? { ...options } : {};
180
+ for (const [key, value] of Object.entries(data)) {
181
+ if (!legacyAgentKeys.has(key))
182
+ body[key] = value;
183
+ }
184
+ for (const key of ["temperature", "top_p"]) {
185
+ const value = data[key];
186
+ if (value !== undefined) {
187
+ if (typeof value !== "number" || !Number.isFinite(value))
188
+ return invalidResult(`${key} must be a finite number`);
189
+ body[key] = value;
190
+ }
191
+ }
192
+ const permissions = readLegacyPermissions(data.tools, data.permission, home);
193
+ if (permissions === invalid)
194
+ return invalidResult("tools or permission contains an invalid rule");
195
+ const directPermissions = readV2Permissions(data.permissions, home);
196
+ if (directPermissions === invalid)
197
+ return invalidResult("permissions must be an array of valid rules");
198
+ const steps = readSteps(data.steps, data.maxSteps);
199
+ if (steps === invalid)
200
+ return invalidResult("steps or maxSteps must be a positive integer");
201
+ return {
202
+ patch: {
203
+ system: entry.content,
204
+ ...(model.model === undefined ? {} : { model: model.model }),
205
+ ...(Object.keys(body).length === 0 ? {} : { request: { body } }),
206
+ ...common,
207
+ ...(steps === undefined ? {} : { steps }),
208
+ ...(disable === true ? { disabled: true } : {}),
209
+ permissions: [...(permissions ?? []), ...(directPermissions ?? [])],
210
+ },
211
+ };
212
+ }
213
+ function readAgentFields(data, legacy) {
214
+ const fields = {};
215
+ if (data.description !== undefined) {
216
+ if (typeof data.description !== "string")
217
+ return undefined;
218
+ fields.description = data.description;
219
+ }
220
+ if (data.mode !== undefined) {
221
+ if (typeof data.mode !== "string" || !agentModes.has(data.mode))
222
+ return undefined;
223
+ fields.mode = data.mode;
224
+ }
225
+ if (data.hidden !== undefined) {
226
+ if (typeof data.hidden !== "boolean")
227
+ return undefined;
228
+ fields.hidden = data.hidden;
229
+ }
230
+ if (data.color !== undefined) {
231
+ if (typeof data.color !== "string")
232
+ return undefined;
233
+ if (legacy) {
234
+ fields.color = hexColor.test(data.color) ? data.color : "#aaaaaa";
235
+ }
236
+ else {
237
+ if (!hexColor.test(data.color))
238
+ return undefined;
239
+ fields.color = data.color;
240
+ }
241
+ }
242
+ if (!legacy) {
243
+ const steps = readSteps(data.steps);
244
+ if (steps === invalid)
245
+ return undefined;
246
+ if (steps !== undefined)
247
+ fields.steps = steps;
248
+ }
249
+ return fields;
250
+ }
251
+ function readSteps(steps, maxSteps) {
252
+ if (steps !== undefined &&
253
+ (!isPositiveInteger(steps) || (maxSteps !== undefined && !isPositiveInteger(maxSteps)))) {
254
+ return invalid;
255
+ }
256
+ if (steps === undefined && maxSteps !== undefined && !isPositiveInteger(maxSteps))
257
+ return invalid;
258
+ return (steps ?? maxSteps);
259
+ }
260
+ function parseModel(value, variant, strict) {
261
+ if (variant !== undefined && typeof variant !== "string")
262
+ return { invalid: true };
263
+ if (value === undefined)
264
+ return { invalid: false };
265
+ if (typeof value === "string") {
266
+ const pattern = strict ? /^[^/#]+\/[^#]+(?:#[^#]+)?$/ : /^[^/#]+\/[^#]+$/;
267
+ if (!pattern.test(value))
268
+ return strict ? { invalid: true } : { invalid: false };
269
+ const reference = `${value}${typeof variant === "string" &&
270
+ variant.length > 0 &&
271
+ !variant.includes("#") &&
272
+ !value.includes("#")
273
+ ? `#${variant}`
274
+ : ""}`;
275
+ try {
276
+ return { model: Model.Ref.parse(reference), invalid: false };
277
+ }
278
+ catch {
279
+ return { invalid: strict };
280
+ }
281
+ }
282
+ if (!strict)
283
+ return { invalid: true };
284
+ if (!isJsonRecord(value))
285
+ return { invalid: true };
286
+ if (Object.keys(value).some((key) => !["providerID", "model", "variant"].includes(key)))
287
+ return { invalid: true };
288
+ if (value.variant !== undefined && typeof value.variant !== "string")
289
+ return { invalid: true };
290
+ if (typeof value.providerID !== "string" ||
291
+ typeof value.model !== "string" ||
292
+ value.providerID.includes("/") ||
293
+ value.providerID.includes("#") ||
294
+ value.model.includes("#") ||
295
+ (typeof value.variant === "string" && value.variant.includes("#"))) {
296
+ return { invalid: true };
297
+ }
298
+ const reference = `${value.providerID}/${value.model}${typeof value.variant === "string" ? `#${value.variant}` : ""}`;
299
+ try {
300
+ return { model: Model.Ref.parse(reference), invalid: false };
301
+ }
302
+ catch {
303
+ return { invalid: true };
304
+ }
305
+ }
306
+ function readRequest(value) {
307
+ if (value === undefined)
308
+ return undefined;
309
+ if (!isJsonRecord(value))
310
+ return invalid;
311
+ if (Object.hasOwn(value, "settings"))
312
+ return invalid;
313
+ if (Object.keys(value).some((key) => key !== "headers" && key !== "body"))
314
+ return invalid;
315
+ const headers = value.headers;
316
+ const body = value.body;
317
+ if (headers !== undefined &&
318
+ (!isJsonRecord(headers) || Object.values(headers).some((item) => typeof item !== "string"))) {
319
+ return invalid;
320
+ }
321
+ if (body !== undefined && !isJsonRecord(body))
322
+ return invalid;
323
+ return {
324
+ ...(headers === undefined ? {} : { headers: headers }),
325
+ ...(body === undefined ? {} : { body }),
326
+ };
327
+ }
328
+ function requestError(value) {
329
+ if (isJsonRecord(value) && Object.hasOwn(value, "settings")) {
330
+ return "request.settings is unsupported by V2 agents; use request.headers or request.body";
331
+ }
332
+ return "request must contain only JSON headers and body fields";
333
+ }
334
+ function readV2Permissions(value, home) {
335
+ if (value === undefined)
336
+ return undefined;
337
+ if (!Array.isArray(value))
338
+ return invalid;
339
+ const result = [];
340
+ for (const rule of value) {
341
+ if (!isJsonRecord(rule) ||
342
+ Object.keys(rule).some((key) => !["action", "resource", "effect"].includes(key)) ||
343
+ typeof rule.action !== "string" ||
344
+ typeof rule.resource !== "string" ||
345
+ !isEffect(rule.effect)) {
346
+ return invalid;
347
+ }
348
+ result.push(expandPermission({ action: rule.action, resource: rule.resource, effect: rule.effect }, home));
349
+ }
350
+ return result;
351
+ }
352
+ function readLegacyPermissions(tools, permission, home) {
353
+ const rules = [];
354
+ if (tools !== undefined) {
355
+ if (!isJsonRecord(tools))
356
+ return invalid;
357
+ for (const [action, enabled] of Object.entries(tools)) {
358
+ if (typeof enabled !== "boolean")
359
+ return invalid;
360
+ rules.push(expandPermission({ action: normalizeAction(action), resource: "*", effect: enabled ? "allow" : "deny" }, home));
361
+ }
362
+ }
363
+ if (permission !== undefined) {
364
+ if (!isJsonRecord(permission))
365
+ return invalid;
366
+ for (const [action, value] of Object.entries(permission)) {
367
+ if (typeof value === "string") {
368
+ if (!isEffect(value))
369
+ return invalid;
370
+ rules.push(expandPermission({ action: normalizeAction(action), resource: "*", effect: value }, home));
371
+ continue;
372
+ }
373
+ if (!isJsonRecord(value))
374
+ return invalid;
375
+ for (const [resource, effect] of Object.entries(value)) {
376
+ if (!isEffect(effect))
377
+ return invalid;
378
+ rules.push(expandPermission({ action: normalizeAction(action), resource, effect }, home));
379
+ }
380
+ }
381
+ }
382
+ return rules.length ? rules : undefined;
383
+ }
384
+ function normalizeAction(action) {
385
+ if (action === "write" || action === "patch")
386
+ return "edit";
387
+ if (action === "task")
388
+ return "subagent";
389
+ if (action === "bash")
390
+ return "shell";
391
+ return action;
392
+ }
393
+ function expandPermission(rule, home) {
394
+ if (!pathPermissionActions.has(rule.action))
395
+ return rule;
396
+ if (rule.resource === "~" || rule.resource === "$HOME")
397
+ return { ...rule, resource: home };
398
+ const relative = rule.resource.startsWith("~/")
399
+ ? rule.resource.slice(2)
400
+ : rule.resource.startsWith("$HOME/") || rule.resource.startsWith("$HOME\\")
401
+ ? rule.resource.slice(6)
402
+ : undefined;
403
+ return relative === undefined
404
+ ? rule
405
+ : {
406
+ ...rule,
407
+ resource: (path.posix.isAbsolute(home) ? path.posix : path.win32).join(home, relative),
408
+ };
409
+ }
410
+ function looksLikePermissionField(key) {
411
+ const normalized = key.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
412
+ return /(^|[-_])(allow|allowed|deny|permission|permissions|tool|tools)([-_]|$)/.test(normalized);
413
+ }
414
+ function isEffect(value) {
415
+ return typeof value === "string" && permissionEffects.has(value);
416
+ }
417
+ function isPositiveInteger(value) {
418
+ return typeof value === "number" && Number.isInteger(value) && value > 0;
419
+ }
420
+ function isJsonRecord(value) {
421
+ return isRecord(value) && Object.values(value).every(isJsonValue);
422
+ }
423
+ function isJsonValue(value) {
424
+ if (value === null || typeof value === "string" || typeof value === "boolean")
425
+ return true;
426
+ if (typeof value === "number")
427
+ return Number.isFinite(value);
428
+ if (Array.isArray(value))
429
+ return value.every(isJsonValue);
430
+ return isRecord(value) && Object.values(value).every(isJsonValue);
431
+ }
432
+ function isRecord(value) {
433
+ return typeof value === "object" && value !== null && !Array.isArray(value);
434
+ }
435
+ function readBoolean(value) {
436
+ if (value === undefined)
437
+ return undefined;
438
+ return typeof value === "boolean" ? value : invalid;
439
+ }
440
+ function invalidResult(error) {
441
+ return { error };
442
+ }
443
+ //# sourceMappingURL=agent-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-source.js","sourceRoot":"","sources":["../src/agent-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ export interface CommandBridgeLocation {
2
+ readonly directory: string;
3
+ readonly project: {
4
+ readonly directory: string;
5
+ };
6
+ }
7
+ export interface CommandBridgeContext {
8
+ readonly location: CommandBridgeLocation;
9
+ readonly command: {
10
+ readonly reload: () => Promise<void>;
11
+ };
12
+ }
13
+ export interface AgentBridgeContext {
14
+ readonly location: CommandBridgeLocation;
15
+ readonly agent: {
16
+ readonly reload: () => Promise<void>;
17
+ };
18
+ }
19
+ export interface CommandBridgeScheduler {
20
+ readonly setInterval: (callback: () => void | Promise<void>, delay: number) => unknown;
21
+ readonly clearInterval: (handle: unknown) => void;
22
+ }
23
+ export interface CommandBridgeOptions {
24
+ readonly home?: string;
25
+ readonly environment?: Readonly<Record<string, string | undefined>>;
26
+ readonly pollIntervalMs?: number;
27
+ readonly scheduler?: CommandBridgeScheduler;
28
+ readonly diagnostics?: (message: string) => void;
29
+ readonly lockAttempts?: number;
30
+ readonly lockDelayMs?: number;
31
+ }
32
+ export interface CommandBridgeScopeResult {
33
+ readonly scope: string;
34
+ readonly safe: boolean;
35
+ readonly changed: boolean;
36
+ readonly fingerprint: string;
37
+ }
38
+ export interface CommandBridgeSyncResult {
39
+ readonly safe: boolean;
40
+ readonly changed: boolean;
41
+ readonly fingerprint: string;
42
+ readonly scopes: readonly CommandBridgeScopeResult[];
43
+ }
44
+ export interface CommandBridgeHandle {
45
+ readonly sync: () => Promise<CommandBridgeSyncResult>;
46
+ readonly dispose: () => Promise<void>;
47
+ }
48
+ export type AgentBridgeOptions = CommandBridgeOptions;
49
+ export type AgentBridgeHandle = CommandBridgeHandle;
50
+ export type AgentBridgeScopeResult = CommandBridgeScopeResult;
51
+ export type AgentBridgeSyncResult = CommandBridgeSyncResult;
52
+ export declare function startCommandBridge(context: CommandBridgeContext, options?: CommandBridgeOptions): Promise<CommandBridgeHandle>;
53
+ export declare function startAgentBridge(context: AgentBridgeContext, options?: AgentBridgeOptions): Promise<AgentBridgeHandle>;
54
+ export declare function syncCommandLinks(location: CommandBridgeLocation, options?: CommandBridgeOptions): Promise<CommandBridgeSyncResult>;
55
+ export declare function syncAgentLinks(location: CommandBridgeLocation, options?: AgentBridgeOptions): Promise<AgentBridgeSyncResult>;