@tickernelz/paperclip-pro-skills-catalog 2026.925.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 (76) hide show
  1. package/LICENSE +22 -0
  2. package/catalog/bundled/docs/doc-maintenance/SKILL.md +75 -0
  3. package/catalog/bundled/paperclip-operations/issue-triage/SKILL.md +74 -0
  4. package/catalog/bundled/paperclip-operations/reflection-coach/SKILL.md +202 -0
  5. package/catalog/bundled/paperclip-operations/status-card-query/SKILL.md +137 -0
  6. package/catalog/bundled/paperclip-operations/summarize-status/SKILL.md +121 -0
  7. package/catalog/bundled/paperclip-operations/task-planning/SKILL.md +84 -0
  8. package/catalog/bundled/product/paperclip-capsules/SKILL.md +99 -0
  9. package/catalog/bundled/product/paperclip-capsules/references/generator-workflows.md +120 -0
  10. package/catalog/bundled/product/paperclip-capsules/references/hero-capsule-bank.md +189 -0
  11. package/catalog/bundled/product/paperclip-capsules/references/identicon-prototyper.md +213 -0
  12. package/catalog/bundled/product/paperclip-capsules/references/individual-status-capsules.md +113 -0
  13. package/catalog/bundled/product/wireframe/SKILL.md +193 -0
  14. package/catalog/bundled/product/wireframe/assets/site-template.html +356 -0
  15. package/catalog/bundled/product/wireframe/assets/template-mobile.svg +21 -0
  16. package/catalog/bundled/product/wireframe/assets/template.svg +24 -0
  17. package/catalog/bundled/product/wireframe/references/components.md +482 -0
  18. package/catalog/bundled/product/wireframe/references/examples.md +362 -0
  19. package/catalog/bundled/product/wireframe/references/grid-system.md +107 -0
  20. package/catalog/bundled/quality/qa-acceptance/SKILL.md +93 -0
  21. package/catalog/bundled/software-development/github-pr-workflow/SKILL.md +93 -0
  22. package/catalog/optional/browser/agent-browser/SKILL.md +93 -0
  23. package/catalog/optional/content/release-announcement/SKILL.md +218 -0
  24. package/catalog/optional/content/simplified-english/SKILL.md +40 -0
  25. package/catalog/optional/finance/ramp/SKILL.md +98 -0
  26. package/catalog/optional/product/design-critique/SKILL.md +121 -0
  27. package/catalog/optional/research/last30days/catalog-ref.json +44 -0
  28. package/catalog/optional/software-development/prepare-mcp-integration/SKILL.md +230 -0
  29. package/catalog/optional/software-development/prepare-mcp-integration/examples/notion-mcp-research-gate.md +43 -0
  30. package/dist/generated/catalog.json +1165 -0
  31. package/dist/scripts/build-catalog-manifest.d.ts +2 -0
  32. package/dist/scripts/build-catalog-manifest.d.ts.map +1 -0
  33. package/dist/scripts/build-catalog-manifest.js +15 -0
  34. package/dist/scripts/build-catalog-manifest.js.map +1 -0
  35. package/dist/scripts/validate-catalog.d.ts +2 -0
  36. package/dist/scripts/validate-catalog.d.ts.map +1 -0
  37. package/dist/scripts/validate-catalog.js +15 -0
  38. package/dist/scripts/validate-catalog.js.map +1 -0
  39. package/dist/src/catalog-builder.d.ts +16 -0
  40. package/dist/src/catalog-builder.d.ts.map +1 -0
  41. package/dist/src/catalog-builder.js +688 -0
  42. package/dist/src/catalog-builder.js.map +1 -0
  43. package/dist/src/catalog-builder.test.d.ts +2 -0
  44. package/dist/src/catalog-builder.test.d.ts.map +1 -0
  45. package/dist/src/catalog-builder.test.js +355 -0
  46. package/dist/src/catalog-builder.test.js.map +1 -0
  47. package/dist/src/frontmatter.d.ts +3 -0
  48. package/dist/src/frontmatter.d.ts.map +1 -0
  49. package/dist/src/frontmatter.js +3 -0
  50. package/dist/src/frontmatter.js.map +1 -0
  51. package/dist/src/frontmatter.test.d.ts +2 -0
  52. package/dist/src/frontmatter.test.d.ts.map +1 -0
  53. package/dist/src/frontmatter.test.js +31 -0
  54. package/dist/src/frontmatter.test.js.map +1 -0
  55. package/dist/src/index.d.ts +7 -0
  56. package/dist/src/index.d.ts.map +1 -0
  57. package/dist/src/index.js +21 -0
  58. package/dist/src/index.js.map +1 -0
  59. package/dist/src/packaged-artifacts.test.d.ts +2 -0
  60. package/dist/src/packaged-artifacts.test.d.ts.map +1 -0
  61. package/dist/src/packaged-artifacts.test.js +48 -0
  62. package/dist/src/packaged-artifacts.test.js.map +1 -0
  63. package/dist/src/release-content-cases-contract.test.d.ts +2 -0
  64. package/dist/src/release-content-cases-contract.test.d.ts.map +1 -0
  65. package/dist/src/release-content-cases-contract.test.js +37 -0
  66. package/dist/src/release-content-cases-contract.test.js.map +1 -0
  67. package/dist/src/shipped-catalog.test.d.ts +2 -0
  68. package/dist/src/shipped-catalog.test.d.ts.map +1 -0
  69. package/dist/src/shipped-catalog.test.js +179 -0
  70. package/dist/src/shipped-catalog.test.js.map +1 -0
  71. package/dist/src/types.d.ts +54 -0
  72. package/dist/src/types.d.ts.map +1 -0
  73. package/dist/src/types.js +2 -0
  74. package/dist/src/types.js.map +1 -0
  75. package/generated/catalog.json +1165 -0
  76. package/package.json +54 -0
@@ -0,0 +1,37 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { describe, expect, it } from "vitest";
3
+ function readRepoFile(path) {
4
+ return readFileSync(new URL(`../../../${path}`, import.meta.url), "utf8");
5
+ }
6
+ describe("release-content Cases contract", () => {
7
+ it("keeps release-content skills wired to emit the required case tree", () => {
8
+ const release = readRepoFile(".agents/skills/release/SKILL.md");
9
+ const changelog = readRepoFile(".agents/skills/release-changelog/SKILL.md");
10
+ const discord = readRepoFile(".agents/skills/release-changelog-discord-message/SKILL.md");
11
+ const announcement = readRepoFile("packages/skills-catalog/catalog/optional/content/release-announcement/SKILL.md");
12
+ const combined = [release, changelog, discord, announcement].join("\n");
13
+ for (const required of [
14
+ "\"caseType\": \"release\"",
15
+ "\"caseType\": \"blog_post\"",
16
+ "\"caseType\": \"tweet_storm\"",
17
+ "\"parentCaseId\"",
18
+ "PUT /api/cases/:caseId/documents/body",
19
+ "paperclip-release:vYYYY.MDD.P",
20
+ "X-Paperclip-Run-Id",
21
+ ]) {
22
+ expect(combined).toContain(required);
23
+ }
24
+ expect(release).toContain("same three cases instead of duplicating them");
25
+ expect(changelog).toContain("\"release_patch\": 0");
26
+ expect(changelog).toContain("\"stable\": true");
27
+ expect(changelog).toContain("\"channels\": [\"changelog\", \"blog_post\", \"tweet_storm\"]");
28
+ expect(changelog).toContain("\"artifacts\"");
29
+ expect(changelog).toContain("\"verification\"");
30
+ expect(changelog).toContain("\"notes\": null");
31
+ expect(announcement).toContain("\"word_count_target\": 650");
32
+ expect(announcement).toContain("\"requires_screenshot\": false");
33
+ expect(discord).toContain("\"needs_human_copy_paste\": true");
34
+ expect(discord).toContain("\"approved_by\": null");
35
+ });
36
+ });
37
+ //# sourceMappingURL=release-content-cases-contract.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-content-cases-contract.test.js","sourceRoot":"","sources":["../../src/release-content-cases-contract.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,YAAY,CAAC,IAAI,GAAG,CAAC,YAAY,IAAI,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;IAC9C,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,OAAO,GAAG,YAAY,CAAC,iCAAiC,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,YAAY,CAAC,2CAA2C,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,YAAY,CAAC,2DAA2D,CAAC,CAAC;QAC1F,MAAM,YAAY,GAAG,YAAY,CAAC,gFAAgF,CAAC,CAAC;QACpH,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExE,KAAK,MAAM,QAAQ,IAAI;YACrB,2BAA2B;YAC3B,6BAA6B;YAC7B,+BAA+B;YAC/B,kBAAkB;YAClB,uCAAuC;YACvC,+BAA+B;YAC/B,oBAAoB;SACrB,EAAE,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;QAC1E,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,+DAA+D,CAAC,CAAC;QAC7F,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC/C,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;QAC7D,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shipped-catalog.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shipped-catalog.test.d.ts","sourceRoot":"","sources":["../../src/shipped-catalog.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,179 @@
1
+ import { readFileSync, readdirSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { describe, expect, it } from "vitest";
5
+ import { catalogManifest, catalogSkills, resolveCatalogSkillRef } from "./index.js";
6
+ const EXPECTED_BUNDLED_KEYS = [
7
+ "paperclipai/bundled/docs/doc-maintenance",
8
+ "paperclipai/bundled/paperclip-operations/issue-triage",
9
+ "paperclipai/bundled/paperclip-operations/reflection-coach",
10
+ "paperclipai/bundled/paperclip-operations/status-card-query",
11
+ "paperclipai/bundled/paperclip-operations/summarize-status",
12
+ "paperclipai/bundled/paperclip-operations/task-planning",
13
+ "paperclipai/bundled/product/paperclip-capsules",
14
+ "paperclipai/bundled/product/wireframe",
15
+ "paperclipai/bundled/quality/qa-acceptance",
16
+ "paperclipai/bundled/software-development/github-pr-workflow",
17
+ ];
18
+ const EXPECTED_OPTIONAL_KEYS = [
19
+ "paperclipai/optional/browser/agent-browser",
20
+ "paperclipai/optional/content/release-announcement",
21
+ "paperclipai/optional/content/simplified-english",
22
+ "paperclipai/optional/finance/ramp",
23
+ "paperclipai/optional/product/design-critique",
24
+ "paperclipai/optional/research/last30days",
25
+ "paperclipai/optional/software-development/prepare-mcp-integration",
26
+ ];
27
+ const MAX_FRONTMATTER_DESCRIPTION_LENGTH = 300;
28
+ const REPO_ROOT = path.resolve(fileURLToPath(new URL("../../..", import.meta.url)));
29
+ const SKILL_FRONTMATTER_ROOTS = [
30
+ path.join(REPO_ROOT, ".agents"),
31
+ path.join(REPO_ROOT, "skills"),
32
+ path.join(REPO_ROOT, "packages/adapters"),
33
+ path.join(REPO_ROOT, "packages/plugins"),
34
+ path.join(REPO_ROOT, "packages/skills-catalog/catalog"),
35
+ path.join(REPO_ROOT, "packages/teams-catalog/catalog"),
36
+ ];
37
+ function listSkillFiles(dir) {
38
+ return readdirSync(dir, { withFileTypes: true }).flatMap((entry) => {
39
+ // Standalone provider installs can contain third-party skills. They are not
40
+ // shipped Paperclip skills and must not participate in this repo audit.
41
+ if (entry.name === "node_modules")
42
+ return [];
43
+ const entryPath = path.join(dir, entry.name);
44
+ if (entry.isDirectory())
45
+ return listSkillFiles(entryPath);
46
+ if (entry.isFile() && entry.name === "SKILL.md")
47
+ return [entryPath];
48
+ return [];
49
+ });
50
+ }
51
+ function readFrontmatterDescription(markdown) {
52
+ const match = markdown.match(/^---\r?\n([\s\S]*?)\r?\n---/);
53
+ if (!match)
54
+ return null;
55
+ const lines = match[1].split(/\r?\n/);
56
+ const descriptionIndex = lines.findIndex((line) => line.startsWith("description:"));
57
+ if (descriptionIndex === -1)
58
+ return null;
59
+ const inlineValue = lines[descriptionIndex].slice("description:".length).trim();
60
+ if (/^[>|][+-]?$/.test(inlineValue)) {
61
+ const descriptionLines = [];
62
+ for (let index = descriptionIndex + 1; index < lines.length; index += 1) {
63
+ const line = lines[index];
64
+ if (/^[A-Za-z0-9_-]+:/.test(line))
65
+ break;
66
+ descriptionLines.push(line.trim());
67
+ }
68
+ return descriptionLines.join(" ").replace(/\s+/g, " ").trim();
69
+ }
70
+ return inlineValue.replace(/^['"]|['"]$/g, "");
71
+ }
72
+ describe("shipped skills catalog", () => {
73
+ it("ships the summarize-status streaming protocol", () => {
74
+ const skill = readFileSync(path.join(REPO_ROOT, "packages/skills-catalog/catalog/bundled/paperclip-operations/summarize-status/SKILL.md"), "utf8");
75
+ expect(skill).toContain("Post the first status update immediately, before doing anything else.");
76
+ expect(skill).toContain('STATUS: considering "Fix login redirect loop"…');
77
+ expect(skill).toContain("<<<SUMMARY-DRAFT>>>");
78
+ expect(skill).toContain("<<<END-SUMMARY-DRAFT>>>");
79
+ expect(skill).toContain("tool-call arguments don't stream; assistant text does");
80
+ expect(skill).toContain("falls back to its spinner");
81
+ expect(skill).toContain("Open with what the reader needs to do.");
82
+ expect(skill).toContain("1–3 specific, concrete, actionable items");
83
+ });
84
+ it("keeps repo and catalog skill descriptions within the prompt budget cap", () => {
85
+ const violations = [];
86
+ for (const skillFile of SKILL_FRONTMATTER_ROOTS.flatMap(listSkillFiles)) {
87
+ const description = readFrontmatterDescription(readFileSync(skillFile, "utf8"));
88
+ if (!description) {
89
+ violations.push(`${path.relative(REPO_ROOT, skillFile)} is missing a frontmatter description`);
90
+ }
91
+ else if (description.length > MAX_FRONTMATTER_DESCRIPTION_LENGTH) {
92
+ violations.push(`${path.relative(REPO_ROOT, skillFile)} description is ${description.length} chars`);
93
+ }
94
+ }
95
+ for (const skill of catalogSkills) {
96
+ if (skill.description.length > MAX_FRONTMATTER_DESCRIPTION_LENGTH) {
97
+ violations.push(`${skill.key} generated description is ${skill.description.length} chars`);
98
+ }
99
+ }
100
+ expect(violations).toEqual([]);
101
+ });
102
+ it("ships the expected bundled and optional skill set", () => {
103
+ const bundledKeys = catalogSkills
104
+ .filter((skill) => skill.kind === "bundled")
105
+ .map((skill) => skill.key)
106
+ .sort();
107
+ const optionalKeys = catalogSkills
108
+ .filter((skill) => skill.kind === "optional")
109
+ .map((skill) => skill.key)
110
+ .sort();
111
+ expect(bundledKeys).toEqual(EXPECTED_BUNDLED_KEYS);
112
+ expect(optionalKeys).toEqual(EXPECTED_OPTIONAL_KEYS);
113
+ });
114
+ it("keeps script-bearing shipped skills explicit so install stays audit-gated", () => {
115
+ // The real install-time security boundary audits materialized bytes and blocks
116
+ // hard-stop findings. Static assets (svg/html templates, e.g. the wireframe skill)
117
+ // carry the "assets" trust level and are installable.
118
+ const scriptBearing = catalogSkills.filter((skill) => skill.trustLevel === "scripts_executables");
119
+ expect(scriptBearing.map((skill) => skill.key)).toEqual([
120
+ "paperclipai/optional/research/last30days",
121
+ ]);
122
+ });
123
+ it("populates browse/search-relevant fields for every shipped skill", () => {
124
+ const issues = [];
125
+ for (const skill of catalogSkills) {
126
+ if (skill.compatibility !== "compatible") {
127
+ issues.push(`${skill.key} compatibility=${skill.compatibility}`);
128
+ }
129
+ if (!skill.description || skill.description.length < 40) {
130
+ issues.push(`${skill.key} description must be at least 40 characters for catalog browse/search`);
131
+ }
132
+ if (skill.recommendedForRoles.length === 0) {
133
+ issues.push(`${skill.key} must list recommendedForRoles`);
134
+ }
135
+ if (skill.tags.length === 0) {
136
+ issues.push(`${skill.key} must list tags`);
137
+ }
138
+ }
139
+ expect(issues).toEqual([]);
140
+ });
141
+ it("uses canonical paperclip-pro keys derived from kind/category/slug", () => {
142
+ const violations = [];
143
+ for (const skill of catalogSkills) {
144
+ const expectedKey = `paperclipai/${skill.kind}/${skill.category}/${skill.slug}`;
145
+ const expectedId = `paperclipai:${skill.kind}:${skill.category}:${skill.slug}`;
146
+ if (skill.key !== expectedKey)
147
+ violations.push(`${skill.key} should be ${expectedKey}`);
148
+ if (skill.id !== expectedId)
149
+ violations.push(`${skill.id} should be ${expectedId}`);
150
+ }
151
+ expect(violations).toEqual([]);
152
+ });
153
+ it("exposes a stable manifest header for downstream consumers", () => {
154
+ expect(catalogManifest.schemaVersion).toBe(1);
155
+ expect(catalogManifest.packageName).toBe("@tickernelz/paperclip-pro-skills-catalog");
156
+ expect(catalogSkills.length).toBe(EXPECTED_BUNDLED_KEYS.length + EXPECTED_OPTIONAL_KEYS.length);
157
+ });
158
+ it("resolves shipped skills by id, key, and unique slug", () => {
159
+ const sample = catalogSkills.find((skill) => skill.key === "paperclipai/bundled/software-development/github-pr-workflow");
160
+ expect(sample, "expected github-pr-workflow to ship in the bundled catalog").toBeDefined();
161
+ if (!sample)
162
+ return;
163
+ expect(resolveCatalogSkillRef(sample.id)).toMatchObject({ key: sample.key });
164
+ expect(resolveCatalogSkillRef(sample.key)).toMatchObject({ key: sample.key });
165
+ expect(resolveCatalogSkillRef(sample.slug)).toMatchObject({ key: sample.key });
166
+ });
167
+ it("keeps the Ramp wrapper fail-closed on mixed-provenance playbooks", () => {
168
+ const rampSkill = readFileSync(new URL("../catalog/optional/finance/ramp/SKILL.md", import.meta.url), "utf8");
169
+ expect(rampSkill).toContain("mixes Official and Community playbooks");
170
+ expect(rampSkill).toContain("do not execute them inside Paperclip unless a Paperclip approval explicitly names the playbook");
171
+ expect(rampSkill).toContain("third-party browser automation, MCP server, CLI, or connector");
172
+ });
173
+ it("keeps the Ramp wrapper clear of remote-fetch execution hard-stop patterns", () => {
174
+ const rampSkill = readFileSync(new URL("../catalog/optional/finance/ramp/SKILL.md", import.meta.url), "utf8");
175
+ const remoteExecPattern = /\b(?:curl|wget)\b[\s\S]{0,160}\|\s*(?:sh|bash)|\b(?:bash|sh)\s+-c\b|\beval\b|\bpython\s+-c\b|\bnode\s+-e\b/i;
176
+ expect(remoteExecPattern.test(rampSkill)).toBe(false);
177
+ });
178
+ });
179
+ //# sourceMappingURL=shipped-catalog.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shipped-catalog.test.js","sourceRoot":"","sources":["../../src/shipped-catalog.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ export type CatalogSkillKind = "bundled" | "optional";
2
+ export type CatalogTrustLevel = "markdown_only" | "assets" | "scripts_executables";
3
+ export type CatalogCompatibility = "compatible" | "unknown" | "invalid";
4
+ export type CatalogSkillFileKind = "skill" | "markdown" | "reference" | "script" | "asset" | "other";
5
+ export interface CatalogSkillFile {
6
+ path: string;
7
+ kind: CatalogSkillFileKind;
8
+ sizeBytes: number;
9
+ sha256: string;
10
+ }
11
+ export interface CatalogSkillGitHubSource {
12
+ type: "github";
13
+ hostname: string;
14
+ owner: string;
15
+ repo: string;
16
+ ref: string;
17
+ commit: string;
18
+ path: string;
19
+ url: string;
20
+ }
21
+ export type CatalogSkillSource = CatalogSkillGitHubSource;
22
+ export interface CatalogSkill {
23
+ id: string;
24
+ key: string;
25
+ kind: CatalogSkillKind;
26
+ category: string;
27
+ slug: string;
28
+ name: string;
29
+ description: string;
30
+ path: string;
31
+ entrypoint: "SKILL.md";
32
+ trustLevel: CatalogTrustLevel;
33
+ compatibility: CatalogCompatibility;
34
+ defaultInstall: boolean;
35
+ recommendedForRoles: string[];
36
+ requires: string[];
37
+ tags: string[];
38
+ files: CatalogSkillFile[];
39
+ contentHash: string;
40
+ source?: CatalogSkillSource;
41
+ }
42
+ export interface CatalogManifest {
43
+ schemaVersion: 1;
44
+ packageName: "@tickernelz/paperclip-pro-skills-catalog";
45
+ packageVersion: string;
46
+ generatedAt: string;
47
+ skills: CatalogSkill[];
48
+ }
49
+ export interface CatalogValidationResult {
50
+ valid: boolean;
51
+ errors: string[];
52
+ manifest: CatalogManifest;
53
+ }
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GAAG,eAAe,GAAG,QAAQ,GAAG,qBAAqB,CAAC;AAEnF,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;AAExE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;AAErG,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAE1D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,aAAa,EAAE,oBAAoB,CAAC;IACpC,cAAc,EAAE,OAAO,CAAC;IACxB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,0CAA0C,CAAC;IACxD,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,eAAe,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}