@zenobius/opencode-skillful 1.2.1-next.1 → 1.2.1-next.2

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 (2) hide show
  1. package/dist/index.js +206 -28
  2. package/package.json +2 -1
package/dist/index.js CHANGED
@@ -22994,14 +22994,13 @@ async function getPluginConfig(ctx) {
22994
22994
 
22995
22995
  // src/lib/renderers/JsonPromptRenderer.ts
22996
22996
  var createJsonPromptRenderer = () => {
22997
- const format = "json";
22998
- const render = (data, rootElement = "root") => {
22999
- return JSON.stringify({ [rootElement]: data }, null, 2);
23000
- };
23001
- return {
23002
- format,
23003
- render
22997
+ const renderer = {
22998
+ format: "json",
22999
+ render(args) {
23000
+ return JSON.stringify({ [args.type]: args.data }, null, 2);
23001
+ }
23004
23002
  };
23003
+ return renderer;
23005
23004
  };
23006
23005
 
23007
23006
  // src/lib/xml.ts
@@ -23042,21 +23041,174 @@ function jsonToXml(json2, rootElement = "root") {
23042
23041
  return xml;
23043
23042
  }
23044
23043
 
23044
+ // src/lib/renderers/resourceMapToArray.ts
23045
+ var resourceMapToArray = (resources) => {
23046
+ return Array.from(resources.entries()).map(([relativePath, data]) => ({
23047
+ relativePath,
23048
+ ...data
23049
+ }));
23050
+ };
23051
+
23045
23052
  // src/lib/renderers/XmlPromptRenderer.ts
23046
23053
  var createXmlPromptRenderer = () => {
23047
- const format = "xml";
23048
- const render = (data, rootElement = "root") => {
23049
- return jsonToXml(data, rootElement);
23054
+ const prepareSkill = (skill) => {
23055
+ return {
23056
+ ...skill,
23057
+ references: resourceMapToArray(skill.references),
23058
+ scripts: resourceMapToArray(skill.scripts),
23059
+ assets: resourceMapToArray(skill.assets)
23060
+ };
23050
23061
  };
23051
- return {
23052
- format,
23053
- render
23062
+ const prepareResource = (resource) => {
23063
+ return resource;
23064
+ };
23065
+ const prepareSearchResult = (result) => {
23066
+ return result;
23054
23067
  };
23068
+ const renderer = {
23069
+ format: "xml",
23070
+ render(args) {
23071
+ const rootElement = args.type || "root";
23072
+ if (args.type === "Skill") {
23073
+ return jsonToXml(prepareSkill(args.data), rootElement);
23074
+ }
23075
+ if (args.type === "SkillResource") {
23076
+ return jsonToXml(prepareResource(args.data), rootElement);
23077
+ }
23078
+ if (args.type === "SkillSearchResults") {
23079
+ return jsonToXml(prepareSearchResult(args.data), rootElement);
23080
+ }
23081
+ return jsonToXml({}, rootElement);
23082
+ }
23083
+ };
23084
+ return renderer;
23055
23085
  };
23056
23086
 
23087
+ // node_modules/dedent/dist/dedent.mjs
23088
+ function ownKeys(object2, enumerableOnly) {
23089
+ var keys = Object.keys(object2);
23090
+ if (Object.getOwnPropertySymbols) {
23091
+ var symbols = Object.getOwnPropertySymbols(object2);
23092
+ enumerableOnly && (symbols = symbols.filter(function(sym) {
23093
+ return Object.getOwnPropertyDescriptor(object2, sym).enumerable;
23094
+ })), keys.push.apply(keys, symbols);
23095
+ }
23096
+ return keys;
23097
+ }
23098
+ function _objectSpread(target) {
23099
+ for (var i = 1;i < arguments.length; i++) {
23100
+ var source = arguments[i] != null ? arguments[i] : {};
23101
+ i % 2 ? ownKeys(Object(source), true).forEach(function(key) {
23102
+ _defineProperty(target, key, source[key]);
23103
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) {
23104
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
23105
+ });
23106
+ }
23107
+ return target;
23108
+ }
23109
+ function _defineProperty(obj, key, value) {
23110
+ key = _toPropertyKey(key);
23111
+ if (key in obj) {
23112
+ Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
23113
+ } else {
23114
+ obj[key] = value;
23115
+ }
23116
+ return obj;
23117
+ }
23118
+ function _toPropertyKey(arg) {
23119
+ var key = _toPrimitive(arg, "string");
23120
+ return typeof key === "symbol" ? key : String(key);
23121
+ }
23122
+ function _toPrimitive(input, hint) {
23123
+ if (typeof input !== "object" || input === null)
23124
+ return input;
23125
+ var prim = input[Symbol.toPrimitive];
23126
+ if (prim !== undefined) {
23127
+ var res = prim.call(input, hint || "default");
23128
+ if (typeof res !== "object")
23129
+ return res;
23130
+ throw new TypeError("@@toPrimitive must return a primitive value.");
23131
+ }
23132
+ return (hint === "string" ? String : Number)(input);
23133
+ }
23134
+ var dedent = createDedent({});
23135
+ var dedent_default = dedent;
23136
+ function createDedent(options3) {
23137
+ dedent2.withOptions = (newOptions) => createDedent(_objectSpread(_objectSpread({}, options3), newOptions));
23138
+ return dedent2;
23139
+ function dedent2(strings, ...values) {
23140
+ const raw = typeof strings === "string" ? [strings] : strings.raw;
23141
+ const {
23142
+ alignValues = false,
23143
+ escapeSpecialCharacters = Array.isArray(strings),
23144
+ trimWhitespace = true
23145
+ } = options3;
23146
+ let result = "";
23147
+ for (let i = 0;i < raw.length; i++) {
23148
+ let next = raw[i];
23149
+ if (escapeSpecialCharacters) {
23150
+ next = next.replace(/\\\n[ \t]*/g, "").replace(/\\`/g, "`").replace(/\\\$/g, "$").replace(/\\\{/g, "{");
23151
+ }
23152
+ result += next;
23153
+ if (i < values.length) {
23154
+ const value = alignValues ? alignValue(values[i], result) : values[i];
23155
+ result += value;
23156
+ }
23157
+ }
23158
+ const lines = result.split(`
23159
+ `);
23160
+ let mindent = null;
23161
+ for (const l of lines) {
23162
+ const m = l.match(/^(\s+)\S+/);
23163
+ if (m) {
23164
+ const indent = m[1].length;
23165
+ if (!mindent) {
23166
+ mindent = indent;
23167
+ } else {
23168
+ mindent = Math.min(mindent, indent);
23169
+ }
23170
+ }
23171
+ }
23172
+ if (mindent !== null) {
23173
+ const m = mindent;
23174
+ result = lines.map((l) => l[0] === " " || l[0] === "\t" ? l.slice(m) : l).join(`
23175
+ `);
23176
+ }
23177
+ if (trimWhitespace) {
23178
+ result = result.trim();
23179
+ }
23180
+ if (escapeSpecialCharacters) {
23181
+ result = result.replace(/\\n/g, `
23182
+ `);
23183
+ }
23184
+ if (typeof Bun !== "undefined") {
23185
+ result = result.replace(/\\u(?:\{([\da-fA-F]{1,6})\}|([\da-fA-F]{4}))/g, (_, braced, unbraced) => {
23186
+ var _ref;
23187
+ const hex3 = (_ref = braced !== null && braced !== undefined ? braced : unbraced) !== null && _ref !== undefined ? _ref : "";
23188
+ return String.fromCodePoint(parseInt(hex3, 16));
23189
+ });
23190
+ }
23191
+ return result;
23192
+ }
23193
+ }
23194
+ function alignValue(value, precedingText) {
23195
+ if (typeof value !== "string" || !value.includes(`
23196
+ `)) {
23197
+ return value;
23198
+ }
23199
+ const currentLine = precedingText.slice(precedingText.lastIndexOf(`
23200
+ `) + 1);
23201
+ const indentMatch = currentLine.match(/^(\s+)/);
23202
+ if (indentMatch) {
23203
+ const indent = indentMatch[1];
23204
+ return value.replace(/\n/g, `
23205
+ ${indent}`);
23206
+ }
23207
+ return value;
23208
+ }
23209
+
23057
23210
  // src/lib/renderers/MdPromptRenderer.ts
23058
23211
  var createMdPromptRenderer = () => {
23059
- const format = "md";
23060
23212
  const renderObject = (obj, headingLevel, indentLevel = 0) => {
23061
23213
  const entries = Object.entries(obj);
23062
23214
  let output = "";
@@ -23122,25 +23274,51 @@ var createMdPromptRenderer = () => {
23122
23274
  const htmlEscape = (value) => {
23123
23275
  return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
23124
23276
  };
23125
- const render = (data, rootElement = "Prompt") => {
23126
- const { content, ...restData } = data;
23127
- return `# ${rootElement}
23277
+ const renderSkill = (skill) => {
23278
+ return dedent_default`
23279
+ # ${skill.name}
23280
+
23281
+ ${skill.content}
23128
23282
 
23129
- ${renderObject(restData, 3)}
23283
+ ## Metadata
23130
23284
 
23131
- ${content && `---
23285
+ ${skill.metadata ? renderObject(skill.metadata, 3) : ""}
23286
+
23287
+ ## References
23132
23288
 
23133
- ### Content
23289
+ ${skill.references ? renderArray(resourceMapToArray(skill.references), 1) : ""}
23134
23290
 
23135
- ${content}
23291
+ ## Scripts
23136
23292
 
23137
- ` || ""}
23293
+ ${skill.scripts ? renderArray(resourceMapToArray(skill.scripts), 1) : ""}
23294
+
23295
+ ## Assets
23296
+
23297
+ ${skill.assets ? renderArray(resourceMapToArray(skill.assets), 1) : ""}
23138
23298
  `;
23139
23299
  };
23140
- return {
23141
- format,
23142
- render
23300
+ const renderResource = (resource) => {
23301
+ return renderObject(resource, 3);
23302
+ };
23303
+ const renderSearchResult = (result) => {
23304
+ return renderObject(result, 3);
23305
+ };
23306
+ const renderer = {
23307
+ format: "md",
23308
+ render(args) {
23309
+ if (args.type === "Skill") {
23310
+ return renderSkill(args.data);
23311
+ }
23312
+ if (args.type === "SkillResource") {
23313
+ return renderResource(args.data);
23314
+ }
23315
+ if (args.type === "SkillSearchResults") {
23316
+ return renderSearchResult(args.data);
23317
+ }
23318
+ return renderObject({}, 3);
23319
+ }
23143
23320
  };
23321
+ return renderer;
23144
23322
  };
23145
23323
 
23146
23324
  // src/lib/createPromptRenderer.ts
@@ -23272,7 +23450,7 @@ var SkillsPlugin = async (ctx) => {
23272
23450
  const renderer = promptRenderer.getFormatter(format);
23273
23451
  const results = await api2.loadSkill(args.skill_names);
23274
23452
  for await (const skill of results.loaded) {
23275
- await sendPrompt(renderer(skill, "Skill"), {
23453
+ await sendPrompt(renderer({ data: skill, type: "Skill" }), {
23276
23454
  sessionId: toolCtx.sessionID
23277
23455
  });
23278
23456
  }
@@ -23298,7 +23476,7 @@ var SkillsPlugin = async (ctx) => {
23298
23476
  });
23299
23477
  const renderer = promptRenderer.getFormatter(format);
23300
23478
  const results = await api2.findSkills(args);
23301
- const output = renderer(results, "SkillSearchResults");
23479
+ const output = renderer({ data: results, type: "SkillSearchResults" });
23302
23480
  return output;
23303
23481
  }
23304
23482
  }),
@@ -23322,7 +23500,7 @@ var SkillsPlugin = async (ctx) => {
23322
23500
  if (!result.injection) {
23323
23501
  throw new Error("Failed to read resource");
23324
23502
  }
23325
- await sendPrompt(renderer(result.injection, "Resource"), {
23503
+ await sendPrompt(renderer({ data: result.injection, type: "SkillResource" }), {
23326
23504
  sessionId: toolCtx.sessionID
23327
23505
  });
23328
23506
  return JSON.stringify({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zenobius/opencode-skillful",
3
- "version": "1.2.1-next.1",
3
+ "version": "1.2.1-next.2",
4
4
  "description": "OpenCode Skills Plugin - Anthropic Agent Skills Specification implementation",
5
5
  "type": "module",
6
6
  "module": "src/index.ts",
@@ -21,6 +21,7 @@
21
21
  "dependencies": {
22
22
  "@opencode-ai/plugin": "1.0.85",
23
23
  "bunfig": "^0.15.6",
24
+ "dedent": "^1.7.1",
24
25
  "env-paths": "^3.0.0",
25
26
  "gray-matter": "^4.0.3",
26
27
  "mime": "^4.1.0",