@rotifer/playground 0.5.0-alpha.1 → 0.7.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.
- package/CHANGELOG.md +178 -16
- package/LICENSE +1 -1
- package/README.md +52 -24
- package/README.zh.md +54 -25
- package/dist/cloud/auth.d.ts +7 -1
- package/dist/cloud/auth.d.ts.map +1 -1
- package/dist/cloud/auth.js +65 -1
- package/dist/cloud/auth.js.map +1 -1
- package/dist/cloud/client.d.ts +4 -1
- package/dist/cloud/client.d.ts.map +1 -1
- package/dist/cloud/client.js +10 -3
- package/dist/cloud/client.js.map +1 -1
- package/dist/cloud/types.d.ts +4 -2
- package/dist/cloud/types.d.ts.map +1 -1
- package/dist/cloud/types.js +1 -1
- package/dist/cloud/types.js.map +1 -1
- package/dist/commands/agent-create.d.ts.map +1 -1
- package/dist/commands/agent-create.js +66 -3
- package/dist/commands/agent-create.js.map +1 -1
- package/dist/commands/agent-run.d.ts.map +1 -1
- package/dist/commands/agent-run.js +296 -32
- package/dist/commands/agent-run.js.map +1 -1
- package/dist/commands/arena-submit.d.ts.map +1 -1
- package/dist/commands/arena-submit.js +45 -17
- package/dist/commands/arena-submit.js.map +1 -1
- package/dist/commands/compile.d.ts.map +1 -1
- package/dist/commands/compile.js +9 -3
- package/dist/commands/compile.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +13 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +23 -16
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/network.js +4 -4
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js +162 -44
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/scan.d.ts +10 -0
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +70 -3
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +209 -23
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/wrap.d.ts.map +1 -1
- package/dist/commands/wrap.js +76 -2
- package/dist/commands/wrap.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/runtime/network-gateway.d.ts +53 -0
- package/dist/runtime/network-gateway.d.ts.map +1 -0
- package/dist/runtime/network-gateway.js +147 -0
- package/dist/runtime/network-gateway.js.map +1 -0
- package/dist/utils/binding.d.ts +25 -0
- package/dist/utils/binding.d.ts.map +1 -1
- package/dist/utils/binding.js.map +1 -1
- package/dist/utils/open-browser.d.ts +10 -0
- package/dist/utils/open-browser.d.ts.map +1 -0
- package/dist/utils/open-browser.js +23 -0
- package/dist/utils/open-browser.js.map +1 -0
- package/genes/academic-writer/.cloud-manifest.json +6 -0
- package/genes/academic-writer/.gene-manifest.json +8 -0
- package/genes/academic-writer/SKILL.md +274 -0
- package/genes/academic-writer/phenotype.json +28 -0
- package/genes/ai-components/.cloud-manifest.json +6 -0
- package/genes/ai-components/.gene-manifest.json +8 -0
- package/genes/ai-components/SKILL.md +381 -0
- package/genes/ai-components/phenotype.json +28 -0
- package/genes/algorithmic-art/.cloud-manifest.json +6 -0
- package/genes/algorithmic-art/.gene-manifest.json +8 -0
- package/genes/algorithmic-art/SKILL.md +405 -0
- package/genes/algorithmic-art/phenotype.json +28 -0
- package/genes/answer-synthesizer/.cloud-manifest.json +6 -0
- package/genes/answer-synthesizer/index.ts +194 -0
- package/genes/answer-synthesizer/phenotype.json +61 -0
- package/genes/api-designer/.cloud-manifest.json +6 -0
- package/genes/api-designer/.gene-manifest.json +8 -0
- package/genes/api-designer/SKILL.md +456 -0
- package/genes/api-designer/phenotype.json +28 -0
- package/genes/auto-coder/.cloud-manifest.json +6 -0
- package/genes/auto-coder/.gene-manifest.json +8 -0
- package/genes/auto-coder/SKILL.md +400 -0
- package/genes/auto-coder/phenotype.json +28 -0
- package/genes/auto-writer/.cloud-manifest.json +6 -0
- package/genes/auto-writer/.gene-manifest.json +8 -0
- package/genes/auto-writer/SKILL.md +361 -0
- package/genes/auto-writer/phenotype.json +28 -0
- package/genes/brand-personality/.cloud-manifest.json +6 -0
- package/genes/brand-personality/.gene-manifest.json +8 -0
- package/genes/brand-personality/SKILL.md +549 -0
- package/genes/brand-personality/phenotype.json +28 -0
- package/genes/business-writer/.cloud-manifest.json +6 -0
- package/genes/business-writer/.gene-manifest.json +8 -0
- package/genes/business-writer/SKILL.md +448 -0
- package/genes/business-writer/phenotype.json +28 -0
- package/genes/citation-manager/.cloud-manifest.json +6 -0
- package/genes/citation-manager/.gene-manifest.json +8 -0
- package/genes/citation-manager/SKILL.md +279 -0
- package/genes/citation-manager/index.ts +162 -0
- package/genes/citation-manager/package.json +1 -0
- package/genes/citation-manager/phenotype.json +50 -0
- package/genes/code-complexity/.cloud-manifest.json +6 -0
- package/genes/code-complexity/README.md +35 -0
- package/genes/code-complexity/index.ts +101 -0
- package/genes/code-complexity/phenotype.json +34 -0
- package/genes/copywriter/.cloud-manifest.json +6 -0
- package/genes/copywriter/.gene-manifest.json +8 -0
- package/genes/copywriter/SKILL.md +329 -0
- package/genes/copywriter/phenotype.json +28 -0
- package/genes/creative-writer/.cloud-manifest.json +6 -0
- package/genes/creative-writer/.gene-manifest.json +8 -0
- package/genes/creative-writer/SKILL.md +356 -0
- package/genes/creative-writer/phenotype.json +28 -0
- package/genes/data-modeler/.cloud-manifest.json +6 -0
- package/genes/data-modeler/.gene-manifest.json +8 -0
- package/genes/data-modeler/SKILL.md +486 -0
- package/genes/data-modeler/phenotype.json +28 -0
- package/genes/debugger/.cloud-manifest.json +6 -0
- package/genes/debugger/.gene-manifest.json +8 -0
- package/genes/debugger/SKILL.md +416 -0
- package/genes/debugger/phenotype.json +28 -0
- package/genes/design-tokens/.cloud-manifest.json +6 -0
- package/genes/design-tokens/.gene-manifest.json +8 -0
- package/genes/design-tokens/SKILL.md +222 -0
- package/genes/design-tokens/index.ts +128 -0
- package/genes/design-tokens/package.json +1 -0
- package/genes/design-tokens/phenotype.json +1 -0
- package/genes/devops-automator/.cloud-manifest.json +6 -0
- package/genes/devops-automator/.gene-manifest.json +8 -0
- package/genes/devops-automator/SKILL.md +490 -0
- package/genes/devops-automator/phenotype.json +28 -0
- package/genes/doc-coauthoring/.cloud-manifest.json +6 -0
- package/genes/doc-coauthoring/.gene-manifest.json +8 -0
- package/genes/doc-coauthoring/SKILL.md +375 -0
- package/genes/doc-coauthoring/phenotype.json +28 -0
- package/genes/doc-retrieval/.cloud-manifest.json +6 -0
- package/genes/doc-retrieval/index.ts +134 -0
- package/genes/doc-retrieval/phenotype.json +54 -0
- package/genes/docs-writer/.cloud-manifest.json +6 -0
- package/genes/docs-writer/.gene-manifest.json +8 -0
- package/genes/docs-writer/SKILL.md +492 -0
- package/genes/docs-writer/phenotype.json +28 -0
- package/genes/evolve-life/.cloud-manifest.json +6 -0
- package/genes/evolve-life/.compile-result.json +12 -0
- package/genes/evolve-life/README.md +52 -0
- package/genes/evolve-life/gene.ir.wasm +0 -0
- package/genes/evolve-life/gene.wasm +0 -0
- package/genes/evolve-life/index.ts +255 -0
- package/genes/evolve-life/phenotype.json +129 -0
- package/genes/evolve-life-bitwise/.cloud-manifest.json +6 -0
- package/genes/evolve-life-bitwise/.compile-result.json +12 -0
- package/genes/evolve-life-bitwise/gene.ir.wasm +0 -0
- package/genes/evolve-life-bitwise/gene.wasm +0 -0
- package/genes/evolve-life-bitwise/index.ts +273 -0
- package/genes/evolve-life-bitwise/phenotype.json +129 -0
- package/genes/evolve-life-sparse/.cloud-manifest.json +6 -0
- package/genes/evolve-life-sparse/.compile-result.json +12 -0
- package/genes/evolve-life-sparse/gene.ir.wasm +0 -0
- package/genes/evolve-life-sparse/gene.wasm +0 -0
- package/genes/evolve-life-sparse/index.ts +236 -0
- package/genes/evolve-life-sparse/phenotype.json +129 -0
- package/genes/fact-checker/.cloud-manifest.json +6 -0
- package/genes/fact-checker/.gene-manifest.json +8 -0
- package/genes/fact-checker/SKILL.md +373 -0
- package/genes/fact-checker/phenotype.json +28 -0
- package/genes/genesis-code-format/.cloud-manifest.json +6 -0
- package/genes/genesis-code-format/package.json +1 -0
- package/genes/genesis-code-format/phenotype.json +1 -0
- package/genes/genesis-file-read/.cloud-manifest.json +6 -0
- package/genes/genesis-file-read/index.ts +11 -1
- package/genes/genesis-file-read/package.json +1 -0
- package/genes/genesis-file-read/phenotype.json +1 -0
- package/genes/genesis-l0-constraint/.cloud-manifest.json +6 -0
- package/genes/genesis-l0-constraint/package.json +1 -0
- package/genes/genesis-l0-constraint/phenotype.json +1 -0
- package/genes/genesis-web-search/.cloud-manifest.json +2 -2
- package/genes/genesis-web-search/package.json +1 -0
- package/genes/genesis-web-search/phenotype.json +1 -0
- package/genes/genesis-web-search-lite/.cloud-manifest.json +6 -0
- package/genes/genesis-web-search-lite/package.json +1 -0
- package/genes/genesis-web-search-lite/phenotype.json +1 -0
- package/genes/git-workflow/.cloud-manifest.json +6 -0
- package/genes/git-workflow/.gene-manifest.json +8 -0
- package/genes/git-workflow/SKILL.md +407 -0
- package/genes/git-workflow/phenotype.json +28 -0
- package/genes/grammar-checker/.cloud-manifest.json +6 -0
- package/genes/grammar-checker/.gene-manifest.json +8 -0
- package/genes/grammar-checker/SKILL.md +194 -0
- package/genes/grammar-checker/index.ts +168 -0
- package/genes/grammar-checker/package.json +1 -0
- package/genes/grammar-checker/phenotype.json +52 -0
- package/genes/json-validator/.cloud-manifest.json +6 -0
- package/genes/json-validator/README.md +42 -0
- package/genes/json-validator/index.ts +112 -0
- package/genes/json-validator/phenotype.json +42 -0
- package/genes/license-advisor/.cloud-manifest.json +6 -0
- package/genes/license-advisor/.gene-manifest.json +8 -0
- package/genes/license-advisor/SKILL.md +117 -0
- package/genes/license-advisor/phenotype.json +28 -0
- package/genes/logic-architect/.cloud-manifest.json +6 -0
- package/genes/logic-architect/.gene-manifest.json +8 -0
- package/genes/logic-architect/SKILL.md +451 -0
- package/genes/logic-architect/phenotype.json +28 -0
- package/genes/markdown-formatter/.cloud-manifest.json +6 -0
- package/genes/markdown-formatter/README.md +34 -0
- package/genes/markdown-formatter/index.ts +86 -0
- package/genes/markdown-formatter/phenotype.json +32 -0
- package/genes/orch/.cloud-manifest.json +6 -0
- package/genes/orch/.gene-manifest.json +8 -0
- package/genes/orch/SKILL.md +504 -0
- package/genes/orch/phenotype.json +28 -0
- package/genes/particle-barneshut/.cloud-manifest.json +6 -0
- package/genes/particle-barneshut/.compile-result.json +12 -0
- package/genes/particle-barneshut/README.md +55 -0
- package/genes/particle-barneshut/gene.ir.wasm +0 -0
- package/genes/particle-barneshut/gene.wasm +0 -0
- package/genes/particle-barneshut/index.ts +486 -0
- package/genes/particle-barneshut/phenotype.json +137 -0
- package/genes/particle-brute/.cloud-manifest.json +6 -0
- package/genes/particle-brute/.compile-result.json +12 -0
- package/genes/particle-brute/README.md +55 -0
- package/genes/particle-brute/gene.ir.wasm +0 -0
- package/genes/particle-brute/gene.wasm +0 -0
- package/genes/particle-brute/index.ts +277 -0
- package/genes/particle-brute/phenotype.json +137 -0
- package/genes/particle-spatial/.cloud-manifest.json +6 -0
- package/genes/particle-spatial/.compile-result.json +12 -0
- package/genes/particle-spatial/README.md +53 -0
- package/genes/particle-spatial/gene.ir.wasm +0 -0
- package/genes/particle-spatial/gene.wasm +0 -0
- package/genes/particle-spatial/index.ts +352 -0
- package/genes/particle-spatial/phenotype.json +137 -0
- package/genes/performance-optimizer/.cloud-manifest.json +6 -0
- package/genes/performance-optimizer/.gene-manifest.json +8 -0
- package/genes/performance-optimizer/SKILL.md +480 -0
- package/genes/performance-optimizer/phenotype.json +28 -0
- package/genes/plagiarism-checker/.cloud-manifest.json +6 -0
- package/genes/plagiarism-checker/.gene-manifest.json +8 -0
- package/genes/plagiarism-checker/SKILL.md +342 -0
- package/genes/plagiarism-checker/phenotype.json +28 -0
- package/genes/product-manager/.cloud-manifest.json +6 -0
- package/genes/product-manager/.gene-manifest.json +8 -0
- package/genes/product-manager/SKILL.md +249 -0
- package/genes/product-manager/phenotype.json +28 -0
- package/genes/project-reviewer/.cloud-manifest.json +6 -0
- package/genes/project-reviewer/.gene-manifest.json +8 -0
- package/genes/project-reviewer/SKILL.md +312 -0
- package/genes/project-reviewer/phenotype.json +28 -0
- package/genes/prompt-engineer/.cloud-manifest.json +6 -0
- package/genes/prompt-engineer/.gene-manifest.json +8 -0
- package/genes/prompt-engineer/SKILL.md +411 -0
- package/genes/prompt-engineer/phenotype.json +28 -0
- package/genes/readability-analyzer/.cloud-manifest.json +6 -0
- package/genes/readability-analyzer/.gene-manifest.json +8 -0
- package/genes/readability-analyzer/SKILL.md +357 -0
- package/genes/readability-analyzer/index.ts +123 -0
- package/genes/readability-analyzer/package.json +1 -0
- package/genes/readability-analyzer/phenotype.json +35 -0
- package/genes/rotifer-protocol/SKILL.md +121 -0
- package/genes/security-auditor/.cloud-manifest.json +6 -0
- package/genes/security-auditor/.gene-manifest.json +8 -0
- package/genes/security-auditor/SKILL.md +494 -0
- package/genes/security-auditor/phenotype.json +28 -0
- package/genes/seo-optimizer/.cloud-manifest.json +6 -0
- package/genes/seo-optimizer/.gene-manifest.json +8 -0
- package/genes/seo-optimizer/SKILL.md +327 -0
- package/genes/seo-optimizer/index.ts +206 -0
- package/genes/seo-optimizer/package.json +1 -0
- package/genes/seo-optimizer/phenotype.json +1 -0
- package/genes/source-linker/.cloud-manifest.json +6 -0
- package/genes/source-linker/index.ts +88 -0
- package/genes/source-linker/phenotype.json +45 -0
- package/genes/style-optimizer/.cloud-manifest.json +6 -0
- package/genes/style-optimizer/.gene-manifest.json +8 -0
- package/genes/style-optimizer/SKILL.md +285 -0
- package/genes/style-optimizer/phenotype.json +28 -0
- package/genes/tech-lead/.cloud-manifest.json +6 -0
- package/genes/tech-lead/.gene-manifest.json +8 -0
- package/genes/tech-lead/SKILL.md +451 -0
- package/genes/tech-lead/phenotype.json +28 -0
- package/genes/test-wrap/.cloud-manifest.json +6 -0
- package/genes/test-wrap/.gene-manifest.json +8 -0
- package/genes/test-wrap/phenotype.json +28 -0
- package/genes/testing-strategist/.cloud-manifest.json +6 -0
- package/genes/testing-strategist/.gene-manifest.json +8 -0
- package/genes/testing-strategist/SKILL.md +500 -0
- package/genes/testing-strategist/phenotype.json +28 -0
- package/genes/text-summarizer/.cloud-manifest.json +6 -0
- package/genes/text-summarizer/README.md +34 -0
- package/genes/text-summarizer/index.ts +122 -0
- package/genes/text-summarizer/phenotype.json +32 -0
- package/genes/tone-analyzer/.cloud-manifest.json +6 -0
- package/genes/tone-analyzer/.gene-manifest.json +8 -0
- package/genes/tone-analyzer/SKILL.md +410 -0
- package/genes/tone-analyzer/phenotype.json +28 -0
- package/genes/translator/.cloud-manifest.json +6 -0
- package/genes/translator/.gene-manifest.json +8 -0
- package/genes/translator/SKILL.md +355 -0
- package/genes/translator/phenotype.json +28 -0
- package/genes/ui-components/.cloud-manifest.json +6 -0
- package/genes/ui-components/.gene-manifest.json +8 -0
- package/genes/ui-components/SKILL.md +467 -0
- package/genes/ui-components/phenotype.json +28 -0
- package/genes/uiux-designer/.cloud-manifest.json +6 -0
- package/genes/uiux-designer/.gene-manifest.json +8 -0
- package/genes/uiux-designer/SKILL.md +353 -0
- package/genes/uiux-designer/phenotype.json +28 -0
- package/genes/url-extractor/.cloud-manifest.json +6 -0
- package/genes/url-extractor/README.md +37 -0
- package/genes/url-extractor/index.ts +86 -0
- package/genes/url-extractor/phenotype.json +48 -0
- package/genes/ux-patterns/.cloud-manifest.json +6 -0
- package/genes/ux-patterns/.gene-manifest.json +8 -0
- package/genes/ux-patterns/SKILL.md +872 -0
- package/genes/ux-patterns/phenotype.json +28 -0
- package/genes/web3-components/.cloud-manifest.json +6 -0
- package/genes/web3-components/.gene-manifest.json +8 -0
- package/genes/web3-components/SKILL.md +390 -0
- package/genes/web3-components/phenotype.json +28 -0
- package/package.json +6 -5
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
interface GrammarInput {
|
|
2
|
+
text: string;
|
|
3
|
+
strict?: boolean;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
interface GrammarIssue {
|
|
7
|
+
rule: string;
|
|
8
|
+
message: string;
|
|
9
|
+
position: number;
|
|
10
|
+
suggestion: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface GrammarOutput {
|
|
14
|
+
issues: GrammarIssue[];
|
|
15
|
+
score: number;
|
|
16
|
+
summary: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
interface Rule {
|
|
20
|
+
id: string;
|
|
21
|
+
pattern: RegExp;
|
|
22
|
+
message: string;
|
|
23
|
+
suggestion: (match: RegExpExecArray) => string;
|
|
24
|
+
strict?: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const RULES: Rule[] = [
|
|
28
|
+
{
|
|
29
|
+
id: "double-space",
|
|
30
|
+
pattern: / +/g,
|
|
31
|
+
message: "Multiple consecutive spaces",
|
|
32
|
+
suggestion: () => "Use a single space",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "sentence-capitalization",
|
|
36
|
+
pattern: /(?:^|[.!?]\s+)([a-z])/gm,
|
|
37
|
+
message: "Sentence should start with a capital letter",
|
|
38
|
+
suggestion: (m) => `Capitalize "${m[1]}" → "${m[1].toUpperCase()}"`,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: "repeated-word",
|
|
42
|
+
pattern: /\b(\w{2,})\s+\1\b/gi,
|
|
43
|
+
message: "Repeated word",
|
|
44
|
+
suggestion: (m) => `Remove duplicate "${m[1]}"`,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: "missing-period",
|
|
48
|
+
pattern: /[a-zA-Z]\s*$/,
|
|
49
|
+
message: "Text does not end with punctuation",
|
|
50
|
+
suggestion: () => "Add a period at the end",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: "space-before-punctuation",
|
|
54
|
+
pattern: /\s+[,;:!?.]/g,
|
|
55
|
+
message: "Space before punctuation",
|
|
56
|
+
suggestion: () => "Remove space before punctuation mark",
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: "no-space-after-punctuation",
|
|
60
|
+
pattern: /[,;:][^\s\n"')\]]/g,
|
|
61
|
+
message: "Missing space after punctuation",
|
|
62
|
+
suggestion: () => "Add a space after the punctuation mark",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: "a-an-mismatch",
|
|
66
|
+
pattern: /\ba\s+(?=[aeiouAEIOU]\w)/g,
|
|
67
|
+
message: '"a" before a vowel sound — should be "an"',
|
|
68
|
+
suggestion: () => 'Use "an" before vowel sounds',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
id: "an-consonant-mismatch",
|
|
72
|
+
pattern: /\ban\s+(?=[bcdfgjklmnpqrstvwxyzBCDFGJKLMNPQRSTVWXYZ]\w)/g,
|
|
73
|
+
message: '"an" before a consonant sound — should be "a"',
|
|
74
|
+
suggestion: () => 'Use "a" before consonant sounds',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: "its-confusion",
|
|
78
|
+
pattern: /\bits\s+(?=a\b|the\b|not\b|been\b|going\b|time\b)/gi,
|
|
79
|
+
message: 'Possible "it\'s" (it is) instead of "its" (possessive)',
|
|
80
|
+
suggestion: () => 'Consider "it\'s" if you mean "it is"',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: "then-than",
|
|
84
|
+
pattern: /\bmore\s+\w+\s+then\b/gi,
|
|
85
|
+
message: '"then" should be "than" in comparisons',
|
|
86
|
+
suggestion: () => 'Use "than" for comparisons',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
id: "double-negative",
|
|
90
|
+
pattern: /\b(?:don't|doesn't|didn't|won't|wouldn't|can't|couldn't)\s+\w*\s*(?:no|nothing|nobody|nowhere|never)\b/gi,
|
|
91
|
+
message: "Double negative detected",
|
|
92
|
+
suggestion: () => "Rewrite to use a single negative",
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: "oxford-comma",
|
|
96
|
+
pattern: /,\s+\w+\s+and\s+/gi,
|
|
97
|
+
message: "Consider Oxford comma before 'and' in a list",
|
|
98
|
+
suggestion: () => "Add comma before 'and' in lists of three or more",
|
|
99
|
+
strict: true,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: "passive-voice",
|
|
103
|
+
pattern: /\b(?:is|are|was|were|been|being)\s+\w+ed\b/gi,
|
|
104
|
+
message: "Passive voice detected",
|
|
105
|
+
suggestion: () => "Consider rewriting in active voice",
|
|
106
|
+
strict: true,
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: "very-qualifier",
|
|
110
|
+
pattern: /\bvery\s+\w+/gi,
|
|
111
|
+
message: 'Weak qualifier "very" — consider a stronger word',
|
|
112
|
+
suggestion: () => 'Replace "very + adjective" with a single stronger adjective',
|
|
113
|
+
strict: true,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: "trailing-whitespace",
|
|
117
|
+
pattern: /[ \t]+$/gm,
|
|
118
|
+
message: "Trailing whitespace at end of line",
|
|
119
|
+
suggestion: () => "Remove trailing whitespace",
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Grammar Checker Gene
|
|
125
|
+
*
|
|
126
|
+
* Rule-based English grammar checker with ~15 rules.
|
|
127
|
+
* Detects common errors like double spaces, capitalization, repeated words, etc.
|
|
128
|
+
*/
|
|
129
|
+
export async function express(input: GrammarInput): Promise<GrammarOutput> {
|
|
130
|
+
const text = (input.text || "").trim();
|
|
131
|
+
const strict = input.strict ?? false;
|
|
132
|
+
|
|
133
|
+
if (!text) {
|
|
134
|
+
return { issues: [], score: 100, summary: "No text provided." };
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const issues: GrammarIssue[] = [];
|
|
138
|
+
|
|
139
|
+
for (const rule of RULES) {
|
|
140
|
+
if (rule.strict && !strict) continue;
|
|
141
|
+
|
|
142
|
+
const regex = new RegExp(rule.pattern.source, rule.pattern.flags);
|
|
143
|
+
let match: RegExpExecArray | null;
|
|
144
|
+
|
|
145
|
+
while ((match = regex.exec(text)) !== null) {
|
|
146
|
+
issues.push({
|
|
147
|
+
rule: rule.id,
|
|
148
|
+
message: rule.message,
|
|
149
|
+
position: match.index,
|
|
150
|
+
suggestion: rule.suggestion(match),
|
|
151
|
+
});
|
|
152
|
+
if (!regex.global) break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
issues.sort((a, b) => a.position - b.position);
|
|
157
|
+
|
|
158
|
+
const wordCount = text.split(/\s+/).filter((w) => w.length > 0).length;
|
|
159
|
+
const penalty = Math.min(issues.length * 5, 100);
|
|
160
|
+
const score = Math.max(0, 100 - penalty);
|
|
161
|
+
|
|
162
|
+
const summary =
|
|
163
|
+
issues.length === 0
|
|
164
|
+
? `No issues found in ${wordCount} words. Clean text!`
|
|
165
|
+
: `Found ${issues.length} issue${issues.length > 1 ? "s" : ""} in ${wordCount} words.`;
|
|
166
|
+
|
|
167
|
+
return { issues, score, summary };
|
|
168
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domain": "content.grammar",
|
|
3
|
+
"description": "Check grammar, spelling, and punctuation in written content. Identify common errors and provide corrections. Use when reviewing any written content for grammatical accuracy.",
|
|
4
|
+
"inputSchema": {
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"text": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "English text to check for grammar issues"
|
|
10
|
+
},
|
|
11
|
+
"strict": {
|
|
12
|
+
"type": "boolean",
|
|
13
|
+
"description": "Enable additional rules (passive voice, excessive adverbs)",
|
|
14
|
+
"default": false
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"required": ["text"]
|
|
18
|
+
},
|
|
19
|
+
"outputSchema": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"properties": {
|
|
22
|
+
"issues": {
|
|
23
|
+
"type": "array",
|
|
24
|
+
"items": {
|
|
25
|
+
"type": "object",
|
|
26
|
+
"properties": {
|
|
27
|
+
"rule": { "type": "string" },
|
|
28
|
+
"message": { "type": "string" },
|
|
29
|
+
"position": { "type": "number" },
|
|
30
|
+
"suggestion": { "type": "string" }
|
|
31
|
+
},
|
|
32
|
+
"required": ["rule", "message", "position", "suggestion"]
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"score": {
|
|
36
|
+
"type": "number",
|
|
37
|
+
"description": "0-100, higher = fewer issues"
|
|
38
|
+
},
|
|
39
|
+
"summary": {
|
|
40
|
+
"type": "string"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"required": ["issues", "score", "summary"]
|
|
44
|
+
},
|
|
45
|
+
"dependencies": [],
|
|
46
|
+
"version": "0.2.0",
|
|
47
|
+
"author": "rotifer-team",
|
|
48
|
+
"createdAt": 1771939397858,
|
|
49
|
+
"fidelity": "Native",
|
|
50
|
+
"transparency": "Open",
|
|
51
|
+
"source": "skill"
|
|
52
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# json-validator
|
|
2
|
+
|
|
3
|
+
A Native Gene that validates JSON data against a JSON Schema definition.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
rotifer test json-validator --input '{
|
|
9
|
+
"data": {"name": "Alice", "age": "not-a-number"},
|
|
10
|
+
"schema": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"properties": {
|
|
13
|
+
"name": {"type": "string"},
|
|
14
|
+
"age": {"type": "number"}
|
|
15
|
+
},
|
|
16
|
+
"required": ["name", "age"]
|
|
17
|
+
}
|
|
18
|
+
}'
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Features
|
|
22
|
+
|
|
23
|
+
- Full JSON Schema Draft-07 validation
|
|
24
|
+
- Detailed error messages with JSON path locations
|
|
25
|
+
- Strict mode for disallowing extra properties
|
|
26
|
+
- Nested schema support
|
|
27
|
+
|
|
28
|
+
## Input
|
|
29
|
+
|
|
30
|
+
| Field | Type | Required | Description |
|
|
31
|
+
|-------|------|----------|-------------|
|
|
32
|
+
| `data` | any | Yes | The JSON data to validate |
|
|
33
|
+
| `schema` | object | Yes | JSON Schema definition |
|
|
34
|
+
| `strict` | boolean | No | Disallow additional properties (default: false) |
|
|
35
|
+
|
|
36
|
+
## Output
|
|
37
|
+
|
|
38
|
+
| Field | Type | Description |
|
|
39
|
+
|-------|------|-------------|
|
|
40
|
+
| `valid` | boolean | Whether validation passed |
|
|
41
|
+
| `errors` | array | Validation errors with path, message, keyword |
|
|
42
|
+
| `errorCount` | number | Total error count |
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
interface ValidatorInput {
|
|
2
|
+
data: unknown;
|
|
3
|
+
schema: Record<string, unknown>;
|
|
4
|
+
strict?: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
interface ValidationError {
|
|
8
|
+
path: string;
|
|
9
|
+
message: string;
|
|
10
|
+
keyword: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
interface ValidatorOutput {
|
|
14
|
+
valid: boolean;
|
|
15
|
+
errors: ValidationError[];
|
|
16
|
+
errorCount: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function validate(
|
|
20
|
+
data: unknown,
|
|
21
|
+
schema: Record<string, unknown>,
|
|
22
|
+
path: string,
|
|
23
|
+
strict: boolean,
|
|
24
|
+
): ValidationError[] {
|
|
25
|
+
const errors: ValidationError[] = [];
|
|
26
|
+
|
|
27
|
+
if (schema.type) {
|
|
28
|
+
const expected = schema.type as string;
|
|
29
|
+
const actual = Array.isArray(data) ? "array" : data === null ? "null" : typeof data;
|
|
30
|
+
if (expected !== actual) {
|
|
31
|
+
errors.push({ path, message: `Expected ${expected}, got ${actual}`, keyword: "type" });
|
|
32
|
+
return errors;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (schema.enum && Array.isArray(schema.enum)) {
|
|
37
|
+
if (!schema.enum.includes(data)) {
|
|
38
|
+
errors.push({ path, message: `Value must be one of: ${schema.enum.join(", ")}`, keyword: "enum" });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
if (typeof data === "number") {
|
|
43
|
+
if (typeof schema.minimum === "number" && data < schema.minimum) {
|
|
44
|
+
errors.push({ path, message: `Value ${data} is below minimum ${schema.minimum}`, keyword: "minimum" });
|
|
45
|
+
}
|
|
46
|
+
if (typeof schema.maximum === "number" && data > schema.maximum) {
|
|
47
|
+
errors.push({ path, message: `Value ${data} exceeds maximum ${schema.maximum}`, keyword: "maximum" });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (typeof data === "string") {
|
|
52
|
+
if (typeof schema.minLength === "number" && data.length < schema.minLength) {
|
|
53
|
+
errors.push({ path, message: `String length ${data.length} is below minLength ${schema.minLength}`, keyword: "minLength" });
|
|
54
|
+
}
|
|
55
|
+
if (typeof schema.maxLength === "number" && data.length > schema.maxLength) {
|
|
56
|
+
errors.push({ path, message: `String length ${data.length} exceeds maxLength ${schema.maxLength}`, keyword: "maxLength" });
|
|
57
|
+
}
|
|
58
|
+
if (schema.pattern) {
|
|
59
|
+
const re = new RegExp(schema.pattern as string);
|
|
60
|
+
if (!re.test(data)) {
|
|
61
|
+
errors.push({ path, message: `String does not match pattern "${schema.pattern}"`, keyword: "pattern" });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (Array.isArray(data) && schema.type === "array") {
|
|
67
|
+
if (typeof schema.minItems === "number" && data.length < (schema.minItems as number)) {
|
|
68
|
+
errors.push({ path, message: `Array has ${data.length} items, minimum is ${schema.minItems}`, keyword: "minItems" });
|
|
69
|
+
}
|
|
70
|
+
if (typeof schema.maxItems === "number" && data.length > (schema.maxItems as number)) {
|
|
71
|
+
errors.push({ path, message: `Array has ${data.length} items, maximum is ${schema.maxItems}`, keyword: "maxItems" });
|
|
72
|
+
}
|
|
73
|
+
if (schema.items && typeof schema.items === "object") {
|
|
74
|
+
for (let i = 0; i < data.length; i++) {
|
|
75
|
+
errors.push(...validate(data[i], schema.items as Record<string, unknown>, `${path}[${i}]`, strict));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (data !== null && typeof data === "object" && !Array.isArray(data) && schema.type === "object") {
|
|
81
|
+
const obj = data as Record<string, unknown>;
|
|
82
|
+
const props = (schema.properties || {}) as Record<string, Record<string, unknown>>;
|
|
83
|
+
const required = (schema.required || []) as string[];
|
|
84
|
+
|
|
85
|
+
for (const key of required) {
|
|
86
|
+
if (!(key in obj)) {
|
|
87
|
+
errors.push({ path: `${path}.${key}`, message: `Required property "${key}" is missing`, keyword: "required" });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
92
|
+
if (props[key]) {
|
|
93
|
+
errors.push(...validate(value, props[key], `${path}.${key}`, strict));
|
|
94
|
+
} else if (strict && schema.additionalProperties === false) {
|
|
95
|
+
errors.push({ path: `${path}.${key}`, message: `Additional property "${key}" is not allowed`, keyword: "additionalProperties" });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return errors;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export async function express(input: ValidatorInput): Promise<ValidatorOutput> {
|
|
104
|
+
const { data, schema, strict = false } = input;
|
|
105
|
+
|
|
106
|
+
if (!schema || typeof schema !== "object") {
|
|
107
|
+
return { valid: false, errors: [{ path: "$", message: "Invalid schema provided", keyword: "schema" }], errorCount: 1 };
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const errors = validate(data, schema, "$", strict);
|
|
111
|
+
return { valid: errors.length === 0, errors, errorCount: errors.length };
|
|
112
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domain": "data.validate",
|
|
3
|
+
"description": "Validates JSON data against a JSON Schema definition, returning detailed validation errors with paths.",
|
|
4
|
+
"inputSchema": {
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"data": { "description": "The JSON data to validate (any type)" },
|
|
8
|
+
"schema": { "type": "object", "description": "JSON Schema to validate against" },
|
|
9
|
+
"strict": { "type": "boolean", "description": "Disallow additional properties not in schema", "default": false }
|
|
10
|
+
},
|
|
11
|
+
"required": ["data", "schema"]
|
|
12
|
+
},
|
|
13
|
+
"outputSchema": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"properties": {
|
|
16
|
+
"valid": { "type": "boolean", "description": "Whether the data passes validation" },
|
|
17
|
+
"errors": {
|
|
18
|
+
"type": "array",
|
|
19
|
+
"items": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"properties": {
|
|
22
|
+
"path": { "type": "string", "description": "JSON path to the error (e.g. $.items[0].name)" },
|
|
23
|
+
"message": { "type": "string", "description": "Human-readable error message" },
|
|
24
|
+
"keyword": { "type": "string", "description": "The schema keyword that failed (e.g. type, required)" }
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"description": "List of validation errors (empty if valid)"
|
|
28
|
+
},
|
|
29
|
+
"errorCount": { "type": "number", "description": "Total number of validation errors" }
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"dependencies": [],
|
|
33
|
+
"version": "0.1.0",
|
|
34
|
+
"author": "rotifer-genesis",
|
|
35
|
+
"fidelity": "Native",
|
|
36
|
+
"transparency": "Open",
|
|
37
|
+
"semantic_requirements": {
|
|
38
|
+
"timeModel": "Sync",
|
|
39
|
+
"concurrencyModel": "Stateless",
|
|
40
|
+
"failureSemantics": "Fail"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"geneId": "157314d0eb6da3529235d9ad6cf877b22a46a8aec461bafeba1825040ab1841a",
|
|
3
|
+
"name": "license-advisor",
|
|
4
|
+
"domain": "legal.licensing",
|
|
5
|
+
"fidelity": "Wrapped",
|
|
6
|
+
"wrappedAt": "2026-02-24T13:23:40.260Z",
|
|
7
|
+
"fromSkill": "../.cursor/skills/license-advisor/SKILL.md"
|
|
8
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: license-advisor
|
|
3
|
+
description: Analyze project requirements and recommend suitable open source licenses (MIT, Apache, GPL, AGPL, LGPL, MPL, BSL, SSPL, etc.). Use when the user asks about licensing, choosing a license, open source strategy, or mentions license names like MIT/GPL/Apache.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# License Advisor
|
|
7
|
+
|
|
8
|
+
Help users select the most appropriate open source license by analyzing their product requirements, business model, and goals.
|
|
9
|
+
|
|
10
|
+
## Analysis Process
|
|
11
|
+
|
|
12
|
+
### Step 1: Gather Project Context
|
|
13
|
+
|
|
14
|
+
Ask the user about:
|
|
15
|
+
|
|
16
|
+
1. **Project type**: Library, framework, application, SaaS, developer tool?
|
|
17
|
+
2. **Business model**: Open core, SaaS, support/consulting, donations, fully open?
|
|
18
|
+
3. **Key concerns**: (rank by priority)
|
|
19
|
+
- Monetization and commercial protection
|
|
20
|
+
- Preventing cloud providers from competing
|
|
21
|
+
- Maximizing adoption and contributions
|
|
22
|
+
- Ensuring derivatives stay open
|
|
23
|
+
- Patent protection
|
|
24
|
+
|
|
25
|
+
### Step 2: Apply Decision Matrix
|
|
26
|
+
|
|
27
|
+
| Requirement | Recommended Licenses |
|
|
28
|
+
|-------------|---------------------|
|
|
29
|
+
| Maximum adoption, minimal restrictions | MIT, ISC, Unlicense |
|
|
30
|
+
| Adoption + patent protection | Apache 2.0 |
|
|
31
|
+
| Derivatives must stay open (weak copyleft) | LGPL, MPL 2.0 |
|
|
32
|
+
| All derivatives must be open (strong copyleft) | GPL v3 |
|
|
33
|
+
| Network/SaaS derivatives must be open | AGPL v3 |
|
|
34
|
+
| Time-delayed open source | BSL 1.1 |
|
|
35
|
+
| Prevent cloud competition | SSPL, Elastic License, FSL |
|
|
36
|
+
| Dual licensing strategy | GPL + Commercial |
|
|
37
|
+
|
|
38
|
+
### Step 3: Provide Recommendation
|
|
39
|
+
|
|
40
|
+
Format your recommendation as:
|
|
41
|
+
|
|
42
|
+
```markdown
|
|
43
|
+
## License Recommendation
|
|
44
|
+
|
|
45
|
+
**Primary recommendation**: [License Name]
|
|
46
|
+
**Alternative options**: [Other suitable licenses]
|
|
47
|
+
|
|
48
|
+
### Why this license fits your needs
|
|
49
|
+
|
|
50
|
+
[2-3 bullet points explaining the match]
|
|
51
|
+
|
|
52
|
+
### Key considerations
|
|
53
|
+
|
|
54
|
+
- [Important implication 1]
|
|
55
|
+
- [Important implication 2]
|
|
56
|
+
|
|
57
|
+
### Compatibility notes
|
|
58
|
+
|
|
59
|
+
[Dependencies, ecosystem considerations]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Quick Reference
|
|
63
|
+
|
|
64
|
+
### Permissive Licenses (Business-friendly)
|
|
65
|
+
|
|
66
|
+
| License | Patent Grant | Attribution | Key Use Case |
|
|
67
|
+
|---------|-------------|-------------|--------------|
|
|
68
|
+
| MIT | No | Yes | Maximum adoption |
|
|
69
|
+
| Apache 2.0 | Yes | Yes | Corporate-friendly, patent protection |
|
|
70
|
+
| BSD 3-Clause | No | Yes | Similar to MIT |
|
|
71
|
+
| ISC | No | Yes | Simplified MIT |
|
|
72
|
+
|
|
73
|
+
### Copyleft Licenses (Community-focused)
|
|
74
|
+
|
|
75
|
+
| License | Scope | Network Trigger | Key Use Case |
|
|
76
|
+
|---------|-------|-----------------|--------------|
|
|
77
|
+
| GPL v3 | Full | No | Ensure all derivatives open |
|
|
78
|
+
| LGPL v3 | Library boundary | No | Open libraries, closed apps OK |
|
|
79
|
+
| MPL 2.0 | File-level | No | Per-file copyleft |
|
|
80
|
+
| AGPL v3 | Full | Yes | SaaS must share code |
|
|
81
|
+
|
|
82
|
+
### Source-Available Licenses (Commercial protection)
|
|
83
|
+
|
|
84
|
+
| License | After Delay | Cloud Restriction | Key Use Case |
|
|
85
|
+
|---------|-------------|-------------------|--------------|
|
|
86
|
+
| BSL 1.1 | Configurable (typically 4yr) | Production use restricted | Delayed open source |
|
|
87
|
+
| SSPL | Never (not OSI) | Must open entire stack | Anti-cloud provider |
|
|
88
|
+
| Elastic 2.0 | No | SaaS restriction | Similar to SSPL, less strict |
|
|
89
|
+
| FSL | 2 years → Apache/MIT | Production restricted | Functional Source |
|
|
90
|
+
|
|
91
|
+
## Common Scenarios
|
|
92
|
+
|
|
93
|
+
### "I want maximum adoption"
|
|
94
|
+
→ **MIT** or **Apache 2.0** (if patent protection needed)
|
|
95
|
+
|
|
96
|
+
### "I'm building a SaaS and competitors might use my code"
|
|
97
|
+
→ **AGPL v3** (if open source important) or **BSL/SSPL** (if commercial protection priority)
|
|
98
|
+
|
|
99
|
+
### "I want contributions back but allow commercial use"
|
|
100
|
+
→ **LGPL v3** (for libraries) or **MPL 2.0** (file-level copyleft)
|
|
101
|
+
|
|
102
|
+
### "I want to sell commercial licenses"
|
|
103
|
+
→ **GPL v3 + Commercial dual license** or **BSL 1.1**
|
|
104
|
+
|
|
105
|
+
### "I hate cloud providers using my work"
|
|
106
|
+
→ **SSPL**, **Elastic License 2.0**, or **FSL**
|
|
107
|
+
|
|
108
|
+
## Detailed Reference
|
|
109
|
+
|
|
110
|
+
For comprehensive license details, compatibility matrices, and legal considerations, see [LICENSES.md](LICENSES.md).
|
|
111
|
+
|
|
112
|
+
## Important Caveats
|
|
113
|
+
|
|
114
|
+
1. **Not legal advice**: Always recommend consulting a lawyer for commercial decisions
|
|
115
|
+
2. **Dependency compatibility**: Check that chosen license is compatible with dependencies
|
|
116
|
+
3. **CLA considerations**: For contributions, consider if a CLA is needed
|
|
117
|
+
4. **Relicensing**: Changing licenses later requires all contributors' consent (or CLA)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"domain": "legal.licensing",
|
|
3
|
+
"description": "Analyze project requirements and recommend suitable open source licenses (MIT, Apache, GPL, AGPL, LGPL, MPL, BSL, SSPL, etc.). Use when the user asks about licensing, choosing a license, open source strategy, or mentions license names like MIT/GPL/Apache.",
|
|
4
|
+
"inputSchema": {
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"prompt": {
|
|
8
|
+
"type": "string"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"required": []
|
|
12
|
+
},
|
|
13
|
+
"outputSchema": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"properties": {
|
|
16
|
+
"result": {
|
|
17
|
+
"type": "string"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"dependencies": [],
|
|
22
|
+
"version": "0.1.0",
|
|
23
|
+
"author": "rotifer-team",
|
|
24
|
+
"createdAt": 1771939420260,
|
|
25
|
+
"fidelity": "Wrapped",
|
|
26
|
+
"transparency": "Open",
|
|
27
|
+
"source": "skill"
|
|
28
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"geneId": "571243178fd0054cf51dda771e71ba83ff0f48e336b485e64054983f9c6d60fc",
|
|
3
|
+
"name": "logic-architect",
|
|
4
|
+
"domain": "code.architecture",
|
|
5
|
+
"fidelity": "Wrapped",
|
|
6
|
+
"wrappedAt": "2026-02-24T13:23:27.334Z",
|
|
7
|
+
"fromSkill": "../.cursor/skills/logic-architect/SKILL.md"
|
|
8
|
+
}
|