agenticros 0.2.4 → 0.3.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.
Files changed (83) hide show
  1. package/README.md +13 -4
  2. package/dist/__tests__/codex-config.test.d.ts +2 -0
  3. package/dist/__tests__/codex-config.test.d.ts.map +1 -0
  4. package/dist/__tests__/codex-config.test.js +76 -0
  5. package/dist/__tests__/codex-config.test.js.map +1 -0
  6. package/dist/__tests__/skill-scaffold.test.d.ts +2 -0
  7. package/dist/__tests__/skill-scaffold.test.d.ts.map +1 -0
  8. package/dist/__tests__/skill-scaffold.test.js +80 -0
  9. package/dist/__tests__/skill-scaffold.test.js.map +1 -0
  10. package/dist/commands/codex.d.ts +18 -0
  11. package/dist/commands/codex.d.ts.map +1 -0
  12. package/dist/commands/codex.js +99 -0
  13. package/dist/commands/codex.js.map +1 -0
  14. package/dist/commands/create-skill.d.ts +9 -0
  15. package/dist/commands/create-skill.d.ts.map +1 -0
  16. package/dist/commands/create-skill.js +41 -0
  17. package/dist/commands/create-skill.js.map +1 -0
  18. package/dist/commands/doctor.d.ts.map +1 -1
  19. package/dist/commands/doctor.js +25 -1
  20. package/dist/commands/doctor.js.map +1 -1
  21. package/dist/commands/init.d.ts +2 -1
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +26 -1
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/commands/publish-skill.d.ts +10 -0
  26. package/dist/commands/publish-skill.d.ts.map +1 -0
  27. package/dist/commands/publish-skill.js +222 -0
  28. package/dist/commands/publish-skill.js.map +1 -0
  29. package/dist/commands/skills-dev.d.ts +11 -0
  30. package/dist/commands/skills-dev.d.ts.map +1 -0
  31. package/dist/commands/skills-dev.js +154 -0
  32. package/dist/commands/skills-dev.js.map +1 -0
  33. package/dist/commands/skills.d.ts.map +1 -1
  34. package/dist/commands/skills.js +22 -12
  35. package/dist/commands/skills.js.map +1 -1
  36. package/dist/index.js +57 -2
  37. package/dist/index.js.map +1 -1
  38. package/dist/menu.d.ts.map +1 -1
  39. package/dist/menu.js +28 -2
  40. package/dist/menu.js.map +1 -1
  41. package/dist/util/codex-config.d.ts +56 -0
  42. package/dist/util/codex-config.d.ts.map +1 -0
  43. package/dist/util/codex-config.js +326 -0
  44. package/dist/util/codex-config.js.map +1 -0
  45. package/dist/util/marketplace.d.ts +26 -2
  46. package/dist/util/marketplace.d.ts.map +1 -1
  47. package/dist/util/marketplace.js +56 -4
  48. package/dist/util/marketplace.js.map +1 -1
  49. package/dist/util/skill-manifest.d.ts +58 -0
  50. package/dist/util/skill-manifest.d.ts.map +1 -0
  51. package/dist/util/skill-manifest.js +81 -0
  52. package/dist/util/skill-manifest.js.map +1 -0
  53. package/dist/util/skill-scaffold.d.ts +26 -0
  54. package/dist/util/skill-scaffold.d.ts.map +1 -0
  55. package/dist/util/skill-scaffold.js +153 -0
  56. package/dist/util/skill-scaffold.js.map +1 -0
  57. package/package.json +4 -1
  58. package/runtime/BUNDLE.json +1 -1
  59. package/runtime/README.md +20 -5
  60. package/runtime/docs/cli.md +12 -0
  61. package/runtime/packages/agenticros-claude-code/README.md +18 -8
  62. package/runtime/packages/agenticros-claude-code/package.json +11 -1
  63. package/runtime/packages/core/README.md +12 -2
  64. package/templates/skills/camera/README.md +16 -0
  65. package/templates/skills/camera/demo.md +5 -0
  66. package/templates/skills/camera/package.json +38 -0
  67. package/templates/skills/camera/src/index.ts +68 -0
  68. package/templates/skills/camera/tsconfig.json +15 -0
  69. package/templates/skills/depth/README.md +16 -0
  70. package/templates/skills/depth/demo.md +5 -0
  71. package/templates/skills/depth/package.json +38 -0
  72. package/templates/skills/depth/src/index.ts +69 -0
  73. package/templates/skills/depth/tsconfig.json +15 -0
  74. package/templates/skills/hello/README.md +32 -0
  75. package/templates/skills/hello/demo.md +5 -0
  76. package/templates/skills/hello/package.json +37 -0
  77. package/templates/skills/hello/src/index.ts +37 -0
  78. package/templates/skills/hello/tsconfig.json +15 -0
  79. package/templates/skills/robot/README.md +18 -0
  80. package/templates/skills/robot/demo.md +5 -0
  81. package/templates/skills/robot/package.json +40 -0
  82. package/templates/skills/robot/src/index.ts +69 -0
  83. package/templates/skills/robot/tsconfig.json +15 -0
@@ -0,0 +1,326 @@
1
+ /**
2
+ * Read/write helpers for OpenAI Codex CLI MCP config (`config.toml`).
3
+ *
4
+ * Codex stores MCP servers under `[mcp_servers.<name>]` in either
5
+ * `~/.codex/config.toml` (global) or `<project>/.codex/config.toml` (project).
6
+ * We only manage the `agenticros` entry — other servers are preserved.
7
+ */
8
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
9
+ import { homedir } from "node:os";
10
+ import { dirname, isAbsolute, join, resolve } from "node:path";
11
+ const AGENTICROS_BLOCK_START = "[mcp_servers.agenticros]";
12
+ const AGENTICROS_ENV_BLOCK = "[mcp_servers.agenticros.env]";
13
+ /** Global Codex config: `~/.codex/config.toml`. */
14
+ export function globalCodexConfigPath() {
15
+ return join(homedir(), ".codex", "config.toml");
16
+ }
17
+ /** Project-scoped Codex config: `<cwd>/.codex/config.toml`. */
18
+ export function projectCodexConfigPath(cwd = process.cwd()) {
19
+ return join(cwd, ".codex", "config.toml");
20
+ }
21
+ export function resolveCodexConfigPath(scope, cwd = process.cwd()) {
22
+ return scope === "global" ? globalCodexConfigPath() : projectCodexConfigPath(cwd);
23
+ }
24
+ /**
25
+ * Build the TOML block for the AgenticROS MCP server. Uses an absolute path
26
+ * to index.js (required by Codex) and leaves namespace empty so
27
+ * `~/.agenticros/config.json` / `agenticros mode` drives the active robot.
28
+ */
29
+ export function buildAgenticrosMcpTomlBlock(mcpEntryAbs, namespace = "") {
30
+ const escaped = mcpEntryAbs.replace(/\\/g, "\\\\");
31
+ const shellCmd = `node ${escaped} 2>>/tmp/agenticros-mcp.log`;
32
+ const nsValue = namespace.replace(/"/g, '\\"');
33
+ return `${AGENTICROS_BLOCK_START}
34
+ command = "sh"
35
+ args = ["-c", "${shellCmd.replace(/"/g, '\\"')}"]
36
+ enabled = true
37
+ startup_timeout_sec = 30
38
+
39
+ ${AGENTICROS_ENV_BLOCK}
40
+ AGENTICROS_ROBOT_NAMESPACE = "${nsValue}"
41
+ `;
42
+ }
43
+ /** Insert or replace the agenticros MCP block, preserving other TOML content. */
44
+ export function upsertAgenticrosBlock(existingContent, block) {
45
+ const trimmedBlock = block.trimEnd() + "\n";
46
+ if (!existingContent?.trim()) {
47
+ return trimmedBlock;
48
+ }
49
+ const lines = existingContent.split("\n");
50
+ const out = [];
51
+ let i = 0;
52
+ let replaced = false;
53
+ while (i < lines.length) {
54
+ const line = lines[i] ?? "";
55
+ if (line.trim() === AGENTICROS_BLOCK_START) {
56
+ if (!replaced) {
57
+ out.push(trimmedBlock.trimEnd());
58
+ replaced = true;
59
+ }
60
+ i++;
61
+ while (i < lines.length) {
62
+ const next = lines[i] ?? "";
63
+ const trimmed = next.trim();
64
+ if (/^\[mcp_servers\./.test(trimmed)) {
65
+ if (trimmed !== AGENTICROS_BLOCK_START && trimmed !== AGENTICROS_ENV_BLOCK) {
66
+ break;
67
+ }
68
+ }
69
+ i++;
70
+ }
71
+ continue;
72
+ }
73
+ out.push(line);
74
+ i++;
75
+ }
76
+ if (!replaced) {
77
+ const sep = out.length > 0 && out[out.length - 1]?.trim() !== "" ? "\n" : "";
78
+ return out.join("\n") + sep + trimmedBlock;
79
+ }
80
+ return out.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd() + "\n";
81
+ }
82
+ /** Parse the agenticros MCP section from a Codex config.toml file. */
83
+ export function readCodexAgenticrosConfig(configPath) {
84
+ const base = { configPath, exists: existsSync(configPath) };
85
+ if (!base.exists)
86
+ return base;
87
+ let content;
88
+ try {
89
+ content = readFileSync(configPath, "utf8");
90
+ }
91
+ catch {
92
+ return base;
93
+ }
94
+ const serverSection = extractSection(content, AGENTICROS_BLOCK_START, AGENTICROS_ENV_BLOCK);
95
+ const envSection = extractSection(content, AGENTICROS_ENV_BLOCK, /^\[/);
96
+ base.command = parseTomlString(serverSection, "command");
97
+ base.args = parseTomlStringArray(serverSection, "args");
98
+ base.enabled = parseTomlBoolean(serverSection, "enabled");
99
+ base.env = parseTomlEnvBlock(envSection);
100
+ return base;
101
+ }
102
+ export function writeCodexAgenticrosConfig(configPath, mcpEntryAbs, options) {
103
+ const abs = resolve(mcpEntryAbs);
104
+ const block = buildAgenticrosMcpTomlBlock(abs, options?.namespace ?? "");
105
+ const existing = existsSync(configPath) ? readFileSync(configPath, "utf8") : null;
106
+ const merged = upsertAgenticrosBlock(existing, block);
107
+ mkdirSync(dirname(configPath), { recursive: true });
108
+ writeFileSync(configPath, merged, "utf8");
109
+ }
110
+ /** Validate Codex agenticros MCP config against expected MCP binary path. */
111
+ export function validateCodexAgenticrosConfig(cfg, mcpEntryExpected) {
112
+ const issues = [];
113
+ if (!cfg.exists) {
114
+ issues.push({
115
+ severity: "yellow",
116
+ message: `Codex config missing (${cfg.configPath})`,
117
+ hint: "Run `agenticros codex setup` to register the AgenticROS MCP server.",
118
+ });
119
+ return { ok: false, issues };
120
+ }
121
+ if (!cfg.command && (!cfg.args || cfg.args.length === 0)) {
122
+ issues.push({
123
+ severity: "red",
124
+ message: "Codex [mcp_servers.agenticros] has no command or args",
125
+ hint: "Run `agenticros codex setup` to repair the entry.",
126
+ });
127
+ }
128
+ const mcpPathInArgs = extractMcpPathFromArgs(cfg.args ?? []);
129
+ if (mcpPathInArgs && !isAbsolute(mcpPathInArgs.split(/\s/)[0] ?? "")) {
130
+ issues.push({
131
+ severity: "red",
132
+ message: "Codex MCP path is relative — Codex cwd is not the repo root",
133
+ hint: "Run `agenticros codex setup` to rewrite with an absolute path.",
134
+ });
135
+ }
136
+ if (mcpEntryExpected && mcpPathInArgs) {
137
+ const expected = resolve(mcpEntryExpected);
138
+ const actual = resolve(mcpPathInArgs.split(/\s/)[0] ?? mcpPathInArgs);
139
+ if (actual !== expected && !existsSync(actual)) {
140
+ issues.push({
141
+ severity: "red",
142
+ message: "Codex MCP path does not point to a built server",
143
+ hint: `Expected ${expected}. Run \`agenticros codex setup\`.`,
144
+ });
145
+ }
146
+ else if (actual !== expected) {
147
+ issues.push({
148
+ severity: "yellow",
149
+ message: "Codex MCP path differs from the CLI-resolved MCP entry",
150
+ hint: `CLI expects ${expected}. Run \`agenticros codex setup\` to sync.`,
151
+ });
152
+ }
153
+ }
154
+ else if (mcpEntryExpected && !mcpPathInArgs) {
155
+ issues.push({
156
+ severity: "yellow",
157
+ message: "Could not parse MCP server path from Codex config",
158
+ hint: "Run `agenticros codex setup` to rewrite the entry.",
159
+ });
160
+ }
161
+ const ns = (cfg.env?.["AGENTICROS_ROBOT_NAMESPACE"] ?? "").trim();
162
+ if (ns.length > 0) {
163
+ issues.push({
164
+ severity: "yellow",
165
+ message: `Codex AGENTICROS_ROBOT_NAMESPACE is hardcoded ('${ns}')`,
166
+ hint: 'Leave it empty in ~/.codex/config.toml so `agenticros mode real|sim` drives the namespace (same as .mcp.json).',
167
+ });
168
+ }
169
+ if (cfg.enabled === false) {
170
+ issues.push({
171
+ severity: "yellow",
172
+ message: "Codex agenticros MCP server is disabled (enabled = false)",
173
+ hint: "Set enabled = true or re-run `agenticros codex setup`.",
174
+ });
175
+ }
176
+ const hasRed = issues.some((i) => i.severity === "red");
177
+ return { ok: !hasRed && issues.length === 0, issues };
178
+ }
179
+ /** Collect Codex config paths to inspect (global + project when in a workspace). */
180
+ export function listCodexConfigCandidates(repoRoot) {
181
+ const paths = [globalCodexConfigPath()];
182
+ if (repoRoot) {
183
+ paths.push(projectCodexConfigPath(repoRoot));
184
+ }
185
+ const cwdProject = projectCodexConfigPath(process.cwd());
186
+ if (!paths.includes(cwdProject)) {
187
+ paths.push(cwdProject);
188
+ }
189
+ return paths;
190
+ }
191
+ function extractSection(content, startMarker, endPattern) {
192
+ const lines = content.split("\n");
193
+ const out = [];
194
+ let inSection = false;
195
+ for (const line of lines) {
196
+ const trimmed = line.trim();
197
+ if (trimmed === startMarker) {
198
+ inSection = true;
199
+ continue;
200
+ }
201
+ if (inSection) {
202
+ if (typeof endPattern === "string") {
203
+ if (trimmed === endPattern)
204
+ break;
205
+ }
206
+ else if (endPattern.test(trimmed) && trimmed !== startMarker) {
207
+ break;
208
+ }
209
+ out.push(line);
210
+ }
211
+ }
212
+ return out.join("\n");
213
+ }
214
+ function parseTomlString(section, key) {
215
+ const re = new RegExp(`^${key}\\s*=\\s*"([^"]*)"`, "m");
216
+ const m = section.match(re);
217
+ return m?.[1];
218
+ }
219
+ function parseTomlBoolean(section, key) {
220
+ const re = new RegExp(`^${key}\\s*=\\s*(true|false)`, "m");
221
+ const m = section.match(re);
222
+ if (!m)
223
+ return undefined;
224
+ return m[1] === "true";
225
+ }
226
+ function parseTomlStringArray(section, key) {
227
+ const inline = section.match(new RegExp(`^${key}\\s*=\\s*\\[([^\\]]*)\\]`, "m"));
228
+ if (inline?.[1]) {
229
+ return [...inline[1].matchAll(/"((?:\\.|[^"\\])*)"/g)].map((m) => m[1].replace(/\\"/g, '"').replace(/\\\\/g, "\\"));
230
+ }
231
+ const start = section.match(new RegExp(`^${key}\\s*=\\s*\\[`, "m"));
232
+ if (!start)
233
+ return undefined;
234
+ const after = section.slice(start.index ?? 0);
235
+ const values = [];
236
+ for (const m of after.matchAll(/"((?:\\.|[^"\\])*)"/g)) {
237
+ values.push(m[1].replace(/\\"/g, '"').replace(/\\\\/g, "\\"));
238
+ }
239
+ return values.length > 0 ? values : undefined;
240
+ }
241
+ function parseTomlEnvBlock(section) {
242
+ const env = {};
243
+ for (const line of section.split("\n")) {
244
+ const m = line.match(/^([A-Z0-9_]+)\s*=\s*"([^"]*)"/);
245
+ if (m)
246
+ env[m[1]] = m[2];
247
+ }
248
+ return env;
249
+ }
250
+ /** Doctor check entries for Codex MCP config (used by `agenticros doctor`). */
251
+ export function buildCodexDoctorChecks(mcpEntryExpected, repoRoot) {
252
+ const checks = [];
253
+ const globalPath = globalCodexConfigPath();
254
+ const globalCfg = readCodexAgenticrosConfig(globalPath);
255
+ if (!globalCfg.exists) {
256
+ checks.push({
257
+ id: "codex-config-global",
258
+ label: "Codex global MCP config missing (~/.codex/config.toml)",
259
+ severity: "yellow",
260
+ hint: "Run `agenticros codex setup` to register the AgenticROS MCP server.",
261
+ });
262
+ }
263
+ else {
264
+ const v = validateCodexAgenticrosConfig(globalCfg, mcpEntryExpected);
265
+ if (v.ok) {
266
+ checks.push({
267
+ id: "codex-config-global",
268
+ label: "Codex global MCP config OK",
269
+ severity: "green",
270
+ detail: globalPath,
271
+ });
272
+ }
273
+ else {
274
+ const worst = v.issues.some((i) => i.severity === "red") ? "red" : "yellow";
275
+ const first = v.issues[0];
276
+ checks.push({
277
+ id: "codex-config-global",
278
+ label: `Codex global MCP: ${first.message}`,
279
+ severity: worst,
280
+ hint: first.hint ?? "Run `agenticros codex setup`.",
281
+ });
282
+ }
283
+ }
284
+ if (repoRoot) {
285
+ const projectPath = projectCodexConfigPath(repoRoot);
286
+ const projectCfg = readCodexAgenticrosConfig(projectPath);
287
+ if (projectCfg.exists) {
288
+ const v = validateCodexAgenticrosConfig(projectCfg, mcpEntryExpected);
289
+ if (v.ok) {
290
+ checks.push({
291
+ id: "codex-config-project",
292
+ label: "Codex project MCP config OK",
293
+ severity: "green",
294
+ detail: projectPath,
295
+ });
296
+ }
297
+ else {
298
+ const worst = v.issues.some((i) => i.severity === "red") ? "red" : "yellow";
299
+ const first = v.issues[0];
300
+ checks.push({
301
+ id: "codex-config-project",
302
+ label: `Codex project MCP: ${first.message}`,
303
+ severity: worst,
304
+ hint: first.hint ?? "Run `agenticros codex setup --project`.",
305
+ });
306
+ }
307
+ }
308
+ }
309
+ return checks;
310
+ }
311
+ function extractMcpPathFromArgs(args) {
312
+ if (args.length === 0)
313
+ return undefined;
314
+ if (args[0] === "-c" && args[1]) {
315
+ const cmd = args[1];
316
+ const nodeMatch = cmd.match(/node\s+(\S+)/);
317
+ return nodeMatch?.[1];
318
+ }
319
+ if (args[0] === "node" || args[0]?.endsWith("/node")) {
320
+ return args[1];
321
+ }
322
+ const joined = args.join(" ");
323
+ const nodeMatch = joined.match(/node\s+(\S+)/);
324
+ return nodeMatch?.[1];
325
+ }
326
+ //# sourceMappingURL=codex-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-config.js","sourceRoot":"","sources":["../../src/util/codex-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwB/D,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAC1D,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAE5D,mDAAmD;AACnD,MAAM,UAAU,qBAAqB;IACnC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,sBAAsB,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACxD,OAAO,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAuB,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE;IACjF,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;AACpF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,WAAmB,EAAE,SAAS,GAAG,EAAE;IAC7E,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,QAAQ,OAAO,6BAA6B,CAAC;IAC9D,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,GAAG,sBAAsB;;iBAEjB,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;;;;EAI5C,oBAAoB;gCACU,OAAO;CACtC,CAAC;AACF,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,qBAAqB,CAAC,eAA8B,EAAE,KAAa;IACjF,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,sBAAsB,EAAE,CAAC;YAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjC,QAAQ,GAAG,IAAI,CAAC;YAClB,CAAC;YACD,CAAC,EAAE,CAAC;YACJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACrC,IAAI,OAAO,KAAK,sBAAsB,IAAI,OAAO,KAAK,oBAAoB,EAAE,CAAC;wBAC3E,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,CAAC,EAAE,CAAC;YACN,CAAC;YACD,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,EAAE,CAAC;IACN,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC;IAC7C,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACpE,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,yBAAyB,CAAC,UAAkB;IAC1D,MAAM,IAAI,GAA0B,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;IACnF,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE9B,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;IAC5F,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;IAExE,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACxD,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC,GAAG,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,UAAkB,EAClB,WAAmB,EACnB,OAAgC;IAEhC,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,2BAA2B,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtD,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,6BAA6B,CAC3C,GAA0B,EAC1B,gBAAyB;IAEzB,MAAM,MAAM,GAAuB,EAAE,CAAC;IAEtC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,yBAAyB,GAAG,CAAC,UAAU,GAAG;YACnD,IAAI,EAAE,qEAAqE;SAC5E,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,uDAAuD;YAChE,IAAI,EAAE,mDAAmD;SAC1D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7D,IAAI,aAAa,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,6DAA6D;YACtE,IAAI,EAAE,gEAAgE;SACvE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,gBAAgB,IAAI,aAAa,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;QACtE,IAAI,MAAM,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,iDAAiD;gBAC1D,IAAI,EAAE,YAAY,QAAQ,mCAAmC;aAC9D,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,wDAAwD;gBACjE,IAAI,EAAE,eAAe,QAAQ,2CAA2C;aACzE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,IAAI,gBAAgB,IAAI,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,mDAAmD;YAC5D,IAAI,EAAE,oDAAoD;SAC3D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,4BAA4B,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,mDAAmD,EAAE,IAAI;YAClE,IAAI,EACF,gHAAgH;SACnH,CAAC,CAAC;IACL,CAAC;IAED,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC;YACV,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,2DAA2D;YACpE,IAAI,EAAE,wDAAwD;SAC/D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;IACxD,OAAO,EAAE,EAAE,EAAE,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AACxD,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,yBAAyB,CAAC,QAAiB;IACzD,MAAM,KAAK,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,UAAU,GAAG,sBAAsB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,WAAmB,EAAE,UAA2B;IACvF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YAC5B,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS;QACX,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;gBACnC,IAAI,OAAO,KAAK,UAAU;oBAAE,MAAM;YACpC,CAAC;iBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC/D,MAAM;YACR,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,GAAW;IACnD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe,EAAE,GAAW;IACpD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,uBAAuB,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACzB,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;AACzB,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe,EAAE,GAAW;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,0BAA0B,EAAE,GAAG,CAAC,CAAC,CAAC;IACjF,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/D,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAClD,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACtD,IAAI,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;IAC5B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,sBAAsB,CACpC,gBAAoC,EACpC,QAAiB;IAEjB,MAAM,MAAM,GAMP,EAAE,CAAC;IAER,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,qBAAqB;YACzB,KAAK,EAAE,wDAAwD;YAC/D,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,qEAAqE;SAC5E,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,6BAA6B,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACrE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,qBAAqB;gBACzB,KAAK,EAAE,4BAA4B;gBACnC,QAAQ,EAAE,OAAO;gBACjB,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5E,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,qBAAqB;gBACzB,KAAK,EAAE,qBAAqB,KAAK,CAAC,OAAO,EAAE;gBAC3C,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,+BAA+B;aACpD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,6BAA6B,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;YACtE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,sBAAsB;oBAC1B,KAAK,EAAE,6BAA6B;oBACpC,QAAQ,EAAE,OAAO;oBACjB,MAAM,EAAE,WAAW;iBACpB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC5E,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,sBAAsB;oBAC1B,KAAK,EAAE,sBAAsB,KAAK,CAAC,OAAO,EAAE;oBAC5C,QAAQ,EAAE,KAAK;oBACf,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,yCAAyC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAc;IAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAExC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC5C,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/C,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;AACxB,CAAC"}
@@ -2,6 +2,9 @@ export declare const DEFAULT_API_BASE = "https://skills.agenticros.com/api";
2
2
  export declare function apiBase(): string;
3
3
  export interface MarketplaceSkill {
4
4
  slug: string;
5
+ marketplaceRef?: string;
6
+ ownerLogin?: string;
7
+ skillSlug?: string;
5
8
  name: string;
6
9
  displayName: string;
7
10
  description: string;
@@ -14,15 +17,19 @@ export interface MarketplaceSkill {
14
17
  maintainerLogin: string;
15
18
  starCount: number;
16
19
  viewCount: number;
20
+ visibility?: string;
17
21
  }
18
22
  export interface InstallDescriptor {
19
23
  slug: string;
24
+ marketplaceRef?: string;
20
25
  skillId: string;
21
26
  packageName: string;
22
27
  githubUrl: string;
23
28
  ref: string;
24
29
  buildCmd: string;
25
30
  }
31
+ export declare function skillApiPath(ref: string): string;
32
+ export declare function displayRef(skill: MarketplaceSkill | InstallDescriptor): string;
26
33
  export declare class MarketplaceError extends Error {
27
34
  }
28
35
  export declare function searchSkills(q: string, opts?: {
@@ -30,8 +37,25 @@ export declare function searchSkills(q: string, opts?: {
30
37
  category?: string;
31
38
  sort?: "recent" | "popular";
32
39
  }): Promise<MarketplaceSkill[]>;
33
- export declare function getSkill(slug: string): Promise<MarketplaceSkill>;
34
- export declare function getInstallDescriptor(slug: string): Promise<InstallDescriptor>;
40
+ export declare function getSkill(ref: string): Promise<MarketplaceSkill>;
41
+ export declare function getInstallDescriptor(ref: string): Promise<InstallDescriptor>;
42
+ export interface ValidateResult {
43
+ ok: boolean;
44
+ errors: string[];
45
+ warnings: string[];
46
+ }
47
+ export declare function validateSkillOnMarketplace(manifest: unknown): Promise<ValidateResult>;
48
+ export interface SubmitResult {
49
+ marketplaceRef: string;
50
+ ownerLogin: string;
51
+ skillSlug: string;
52
+ visibility: string;
53
+ warnings?: string[];
54
+ }
55
+ export declare function submitSkillToMarketplace(opts: {
56
+ githubUrl: string;
57
+ githubAccessToken: string;
58
+ }): Promise<SubmitResult>;
35
59
  /**
36
60
  * Pick a sensible parent directory for `git clone` — the parent of the
37
61
  * agenticros repo if we can find it, otherwise `~/Projects`, otherwise
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/util/marketplace.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,gBAAgB,sCAAsC,CAAC;AAEpE,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkBD,qBAAa,gBAAiB,SAAQ,KAAK;CAAG;AAE9C,wBAAsB,YAAY,CAChC,CAAC,EAAE,MAAM,EACT,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAO,GAC5E,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAQ7B;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAEtE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAInF;AAMD;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAgBxC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,iBAAiB,EAC7B,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAO,GAC9E,OAAO,CAAC,mBAAmB,CAAC,CAyC9B;AA4BD,eAAO,MAAM,WAAW,0BAAU,CAAC"}
1
+ {"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/util/marketplace.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,18 @@ export const DEFAULT_API_BASE = "https://skills.agenticros.com/api";
16
16
  export function apiBase() {
17
17
  return (process.env.AGENTICROS_SKILLS_API || DEFAULT_API_BASE).replace(/\/+$/, "");
18
18
  }
19
+ export function skillApiPath(ref) {
20
+ const trimmed = ref.trim();
21
+ if (trimmed.includes("/")) {
22
+ const [owner, ...rest] = trimmed.split("/");
23
+ const skill = rest.join("/");
24
+ return `${apiBase()}/skills/${encodeURIComponent(owner)}/${encodeURIComponent(skill)}`;
25
+ }
26
+ return `${apiBase()}/skills/${encodeURIComponent(trimmed)}`;
27
+ }
28
+ export function displayRef(skill) {
29
+ return skill.marketplaceRef ?? skill.slug;
30
+ }
19
31
  async function getJson(url) {
20
32
  const res = await fetch(url, { headers: { Accept: "application/json" } });
21
33
  if (!res.ok) {
@@ -45,11 +57,51 @@ export async function searchSkills(q, opts = {}) {
45
57
  const body = await getJson(u.toString());
46
58
  return body.skills;
47
59
  }
48
- export async function getSkill(slug) {
49
- return getJson(`${apiBase()}/skills/${encodeURIComponent(slug)}`);
60
+ export async function getSkill(ref) {
61
+ const skill = await getJson(skillApiPath(ref));
62
+ if (!skill.marketplaceRef && ref.includes("/")) {
63
+ skill.marketplaceRef = ref;
64
+ }
65
+ return skill;
50
66
  }
51
- export async function getInstallDescriptor(slug) {
52
- return getJson(`${apiBase()}/skills/${encodeURIComponent(slug)}/install`);
67
+ export async function getInstallDescriptor(ref) {
68
+ const desc = await getJson(`${skillApiPath(ref)}/install`);
69
+ if (!desc.marketplaceRef && ref.includes("/")) {
70
+ desc.marketplaceRef = ref;
71
+ }
72
+ return desc;
73
+ }
74
+ export async function validateSkillOnMarketplace(manifest) {
75
+ const res = await fetch(`${apiBase()}/skills/validate`, {
76
+ method: "POST",
77
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
78
+ body: JSON.stringify({ manifest }),
79
+ });
80
+ const body = (await res.json());
81
+ if (!res.ok) {
82
+ return {
83
+ ok: false,
84
+ errors: body.errors ?? [body.error ?? `Validation failed (${res.status})`],
85
+ warnings: body.warnings ?? [],
86
+ };
87
+ }
88
+ return body;
89
+ }
90
+ export async function submitSkillToMarketplace(opts) {
91
+ const res = await fetch(`${apiBase()}/skills/submit`, {
92
+ method: "POST",
93
+ headers: {
94
+ "Content-Type": "application/json",
95
+ Accept: "application/json",
96
+ Authorization: `Bearer ${opts.githubAccessToken}`,
97
+ },
98
+ body: JSON.stringify({ githubUrl: opts.githubUrl }),
99
+ });
100
+ const body = (await res.json());
101
+ if (!res.ok) {
102
+ throw new MarketplaceError(body.error ?? `Submit failed (${res.status})`);
103
+ }
104
+ return body;
53
105
  }
54
106
  // ---------------------------------------------------------------------------
55
107
  // Local clone + build
@@ -1 +1 @@
1
- {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/util/marketplace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/util/marketplace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;AAEpE,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACrF,CAAC;AAgCD,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7B,OAAO,GAAG,OAAO,EAAE,WAAW,kBAAkB,CAAC,KAAK,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;IACzF,CAAC;IACD,OAAO,GAAG,OAAO,EAAE,WAAW,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAA2C;IACpE,OAAO,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,OAAO,CAAI,GAAW;IACnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC1E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,MAAM,IAAI,gBAAgB,CACxB,mBAAmB,GAAG,CAAC,MAAM,OAAO,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CACjE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AACjC,CAAC;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;CAAG;AAE9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,CAAS,EACT,OAA2E,EAAE;IAE7E,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,EAAE,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC;QAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,QAAQ;QAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,IAAI;QAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,IAAI,CAAC,KAAK;QAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAiC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,GAAW;IACxC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAmB,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,GAAW;IACpD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAoB,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9E,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,QAAiB;IAEjB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,EAAE,kBAAkB,EAAE;QACtD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE;QAC3E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;KACnC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwC,CAAC;IACvE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,sBAAsB,GAAG,CAAC,MAAM,GAAG,CAAC;YAC1E,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;SAC9B,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,IAG9C;IACC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,EAAE,gBAAgB,EAAE;QACpD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,aAAa,EAAE,UAAU,IAAI,CAAC,iBAAiB,EAAE;SAClD;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;KACpD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAsC,CAAC;IACrE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,kBAAkB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,uDAAuD;IACvD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IACE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YACjC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,EACrD,CAAC;YACD,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,mDAAmD;IACnD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAChE,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,oBAAoB;IACpB,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;AACnC,CAAC;AAOD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAA6B,EAC7B,OAA6E,EAAE;IAE/E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnD,CAAC,CAAC,UAAU,CAAC,SAAS;QACtB,CAAC,CAAC,GAAG,UAAU,CAAC,SAAS,MAAM,CAAC;IAClC,oEAAoE;IACpE,8DAA8D;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;QACzB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QACvB,CAAC,CAAC,eAAe,EAAE,CAAC;IACtB,MAAM,QAAQ,GAAG,QAAQ,CACvB,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAC/D,CAAC;IACF,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAExC,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,GAAG,CAAC,qBAAqB,QAAQ,oBAAoB,CAAC,CAAC;YACvD,cAAc,GAAG,IAAI,CAAC;YACtB,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,GAAG,CAAC,WAAW,OAAO,SAAS,QAAQ,GAAG,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IAED,qEAAqE;IACrE,uCAAuC;IACvC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,uCAAuC,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,KAAK,CAClB,GAAW,EACX,GAAW,EACX,IAAc,EACd,GAA0B;IAE1B,GAAG,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;QAC3B,GAAG;QACH,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACH,MAAM,GAAG,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Local validation of skill package.json manifests.
3
+ * Keep in sync with agenticros-skills/functions/src/util/manifest.ts
4
+ */
5
+ export interface AgenticROSBlock {
6
+ id: string;
7
+ displayName?: string;
8
+ description?: string;
9
+ tutorial?: boolean;
10
+ categories?: string[];
11
+ screenshots?: string[];
12
+ demoVideoUrl?: string;
13
+ capabilities?: Capability[];
14
+ }
15
+ export interface Capability {
16
+ id: string;
17
+ verb: string;
18
+ description: string;
19
+ inputs?: Record<string, string>;
20
+ outputs?: Record<string, string>;
21
+ interruptible?: boolean;
22
+ blocks_base?: boolean;
23
+ }
24
+ export interface SkillManifest {
25
+ name: string;
26
+ version: string;
27
+ description?: string;
28
+ main?: string;
29
+ homepage?: string;
30
+ bugs?: string | {
31
+ url?: string;
32
+ };
33
+ keywords?: string[];
34
+ repository?: string | {
35
+ url?: string;
36
+ };
37
+ dependencies?: Record<string, string>;
38
+ agenticros?: AgenticROSBlock;
39
+ agenticrosSkill?: unknown;
40
+ }
41
+ export interface ValidatedManifest {
42
+ manifest: SkillManifest;
43
+ block: AgenticROSBlock;
44
+ warnings: string[];
45
+ }
46
+ export declare class ManifestError extends Error {
47
+ constructor(message: string);
48
+ }
49
+ export declare function isValidSlug(slug: string): boolean;
50
+ export declare function validateManifest(raw: unknown): ValidatedManifest;
51
+ export declare function manifestRepoUrl(m: SkillManifest): string | null;
52
+ export declare function firestoreDocId(ownerLogin: string, skillSlug: string): string;
53
+ export declare function marketplaceRef(ownerLogin: string, skillSlug: string): string;
54
+ export declare function parseMarketplaceRef(ref: string): {
55
+ owner: string;
56
+ skill: string;
57
+ } | null;
58
+ //# sourceMappingURL=skill-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-manifest.d.ts","sourceRoot":"","sources":["../../src/util/skill-manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAID,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,CAwDhE;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAI/D;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,GACV;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASzC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Local validation of skill package.json manifests.
3
+ * Keep in sync with agenticros-skills/functions/src/util/manifest.ts
4
+ */
5
+ export class ManifestError extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ this.name = "ManifestError";
9
+ }
10
+ }
11
+ const SLUG_RE = /^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/;
12
+ export function isValidSlug(slug) {
13
+ return SLUG_RE.test(slug);
14
+ }
15
+ export function validateManifest(raw) {
16
+ if (!raw || typeof raw !== "object") {
17
+ throw new ManifestError("package.json is missing or empty");
18
+ }
19
+ const m = raw;
20
+ if (!m.name || typeof m.name !== "string") {
21
+ throw new ManifestError("package.json must declare a `name`");
22
+ }
23
+ if (!m.version || typeof m.version !== "string") {
24
+ throw new ManifestError("package.json must declare a `version`");
25
+ }
26
+ if (!m.main || typeof m.main !== "string") {
27
+ throw new ManifestError("package.json must declare a `main` entry (e.g. `dist/index.js`).");
28
+ }
29
+ if (!m.agenticros || typeof m.agenticros !== "object") {
30
+ throw new ManifestError("package.json must declare an `agenticros` block. See https://skills.agenticros.com");
31
+ }
32
+ const block = m.agenticros;
33
+ if (!block.id || typeof block.id !== "string" || !isValidSlug(block.id)) {
34
+ throw new ManifestError("`agenticros.id` is required and must be a kebab-case slug (2-64 chars, [a-z0-9-]).");
35
+ }
36
+ const warnings = [];
37
+ if (m.agenticrosSkill !== undefined) {
38
+ warnings.push("The legacy `agenticrosSkill` field is deprecated. Move metadata into the `agenticros` block.");
39
+ }
40
+ const coreDep = m.dependencies?.["@agenticros/core"];
41
+ if (coreDep?.startsWith("file:")) {
42
+ warnings.push("`@agenticros/core` is declared as a `file:` path. Publish a version from npm (e.g. `^0.5.0`) before others can install your skill.");
43
+ }
44
+ if (!block.description && !m.description) {
45
+ warnings.push("Add a one-sentence `description` (top-level or in `agenticros`).");
46
+ }
47
+ if (!block.capabilities || block.capabilities.length === 0) {
48
+ warnings.push("Declare at least one capability in `agenticros.capabilities` so the agent planner can reason about your skill.");
49
+ }
50
+ if (!block.screenshots || block.screenshots.length === 0) {
51
+ warnings.push("Add at least one entry to `agenticros.screenshots` so the marketplace card has a preview image.");
52
+ }
53
+ return { manifest: m, block, warnings };
54
+ }
55
+ export function manifestRepoUrl(m) {
56
+ if (!m.repository)
57
+ return null;
58
+ if (typeof m.repository === "string")
59
+ return m.repository;
60
+ return m.repository.url ?? null;
61
+ }
62
+ export function firestoreDocId(ownerLogin, skillSlug) {
63
+ return `${ownerLogin.toLowerCase()}__${skillSlug}`;
64
+ }
65
+ export function marketplaceRef(ownerLogin, skillSlug) {
66
+ return `${ownerLogin.toLowerCase()}/${skillSlug}`;
67
+ }
68
+ export function parseMarketplaceRef(ref) {
69
+ const trimmed = ref.trim();
70
+ const slash = trimmed.indexOf("/");
71
+ if (slash <= 0 || slash === trimmed.length - 1)
72
+ return null;
73
+ const owner = trimmed.slice(0, slash).toLowerCase();
74
+ const skill = trimmed.slice(slash + 1);
75
+ if (!/^[a-z0-9]([a-z0-9-]{0,62}[a-z0-9])?$/.test(owner))
76
+ return null;
77
+ if (!isValidSlug(skill))
78
+ return null;
79
+ return { owner, skill };
80
+ }
81
+ //# sourceMappingURL=skill-manifest.js.map