@amonstack/gitea-mcp 0.2.1 → 0.3.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/README.md +76 -19
- package/README.zh-CN.md +69 -17
- package/dist/assets/instructions.md +19 -7
- package/dist/assets/skills/gitea-comment-issue/SKILL.md +34 -0
- package/dist/assets/skills/gitea-configure/SKILL.md +60 -0
- package/dist/assets/skills/gitea-create-issue/SKILL.md +44 -1
- package/dist/assets/skills/gitea-plan-milestones/SKILL.md +17 -0
- package/dist/assets/skills/gitea-resolve-repo/SKILL.md +17 -6
- package/dist/assets/skills/gitea-summarize-issue/SKILL.md +1 -1
- package/dist/cli.js +18 -12
- package/dist/cli.js.map +1 -1
- package/dist/git-config.d.ts +73 -0
- package/dist/git-config.js +195 -0
- package/dist/git-config.js.map +1 -0
- package/dist/gitea-client.d.ts +3 -2
- package/dist/gitea-client.js +3 -4
- package/dist/gitea-client.js.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.js +20 -20
- package/dist/server.js.map +1 -1
- package/dist/skills.d.ts +32 -12
- package/dist/skills.js +99 -29
- package/dist/skills.js.map +1 -1
- package/package.json +1 -1
package/dist/skills.js
CHANGED
|
@@ -4,9 +4,64 @@ import { homedir } from "node:os";
|
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
const BUNDLED_SKILLS_REL = ["assets", "skills"];
|
|
6
6
|
const SKILL_FILENAME = "SKILL.md";
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
--
|
|
7
|
+
const DEFAULT_TOOL = "opencode";
|
|
8
|
+
const USAGE = `Usage: gitea-mcp init [--tool <name>] [--project] [--dir <path>]
|
|
9
|
+
--tool <name> target AI tool (default: ${DEFAULT_TOOL})
|
|
10
|
+
--project install into ./.<tool>/skills/ instead of the tool's global skills dir
|
|
11
|
+
--dir <path> install into this exact directory (overrides --tool and --project)
|
|
12
|
+
Supported tools:
|
|
13
|
+
amazon-q, antigravity, auggie, claude, cline, codex, codebuddy, continue,
|
|
14
|
+
costrict, crush, cursor, factory, gemini, github-copilot, iflow, kilocode,
|
|
15
|
+
opencode, qoder, qwen, roocode, windsurf`;
|
|
16
|
+
/** opencode honors OPENCODE_CONFIG_DIR; everything else is home-relative. */
|
|
17
|
+
function opencodeBase() {
|
|
18
|
+
return process.env.OPENCODE_CONFIG_DIR ?? join(homedir(), ".config", "opencode");
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Registry of supported tools and their conventional skills directories.
|
|
22
|
+
*
|
|
23
|
+
* Global paths follow each tool's documented config home plus a `skills/`
|
|
24
|
+
* folder. For tools without a publicly documented skills folder, a
|
|
25
|
+
* `~/.config/<tool>/skills/` convention is used; override the destination
|
|
26
|
+
* with `--dir <path>` for an exact location.
|
|
27
|
+
*/
|
|
28
|
+
/** Lazy home-relative path (homedir is read at call time). */
|
|
29
|
+
const home = (...parts) => join(homedir(), ...parts);
|
|
30
|
+
export const TOOL_REGISTRY = {
|
|
31
|
+
"amazon-q": { label: "Amazon Q", globalSkillsDir: () => home(".aws", "amazonq", "skills"), projectSkillsDir: join(".amazonq", "skills") },
|
|
32
|
+
antigravity: { label: "Antigravity", globalSkillsDir: () => home(".config", "antigravity", "skills"), projectSkillsDir: join(".antigravity", "skills") },
|
|
33
|
+
auggie: { label: "Auggie", globalSkillsDir: () => home(".config", "auggie", "skills"), projectSkillsDir: join(".auggie", "skills") },
|
|
34
|
+
claude: { label: "Claude Code", globalSkillsDir: () => home(".claude", "skills"), projectSkillsDir: join(".claude", "skills") },
|
|
35
|
+
cline: { label: "Cline", globalSkillsDir: () => home(".cline", "skills"), projectSkillsDir: join(".cline", "skills") },
|
|
36
|
+
codex: { label: "Codex CLI", globalSkillsDir: () => home(".codex", "skills"), projectSkillsDir: join(".codex", "skills") },
|
|
37
|
+
codebuddy: { label: "CodeBuddy", globalSkillsDir: () => home(".config", "codebuddy", "skills"), projectSkillsDir: join(".codebuddy", "skills") },
|
|
38
|
+
continue: { label: "Continue", globalSkillsDir: () => home(".continue", "skills"), projectSkillsDir: join(".continue", "skills") },
|
|
39
|
+
costrict: { label: "Costrict", globalSkillsDir: () => home(".config", "costrict", "skills"), projectSkillsDir: join(".costrict", "skills") },
|
|
40
|
+
crush: { label: "Crush", globalSkillsDir: () => home(".config", "crush", "skills"), projectSkillsDir: join(".crush", "skills") },
|
|
41
|
+
cursor: { label: "Cursor", globalSkillsDir: () => home(".cursor", "skills"), projectSkillsDir: join(".cursor", "skills") },
|
|
42
|
+
factory: { label: "Factory", globalSkillsDir: () => home(".factory", "skills"), projectSkillsDir: join(".factory", "skills") },
|
|
43
|
+
gemini: { label: "Gemini CLI", globalSkillsDir: () => home(".gemini", "skills"), projectSkillsDir: join(".gemini", "skills") },
|
|
44
|
+
"github-copilot": { label: "GitHub Copilot", globalSkillsDir: () => home(".config", "github-copilot", "skills"), projectSkillsDir: join(".github", "copilot", "skills") },
|
|
45
|
+
iflow: { label: "iFlow", globalSkillsDir: () => home(".config", "iflow", "skills"), projectSkillsDir: join(".iflow", "skills") },
|
|
46
|
+
kilocode: { label: "Kilo Code", globalSkillsDir: () => home(".kilo", "skills"), projectSkillsDir: join(".kilo", "skills") },
|
|
47
|
+
opencode: { label: "opencode", globalSkillsDir: () => join(opencodeBase(), "skills"), projectSkillsDir: join(".opencode", "skills") },
|
|
48
|
+
qoder: { label: "Qoder", globalSkillsDir: () => home(".config", "qoder", "skills"), projectSkillsDir: join(".qoder", "skills") },
|
|
49
|
+
qwen: { label: "Qwen Code", globalSkillsDir: () => home(".qwen", "skills"), projectSkillsDir: join(".qwen", "skills") },
|
|
50
|
+
roocode: { label: "Roo Code", globalSkillsDir: () => home(".roo", "skills"), projectSkillsDir: join(".roo", "skills") },
|
|
51
|
+
windsurf: { label: "Windsurf", globalSkillsDir: () => home(".codeium", "windsurf", "skills"), projectSkillsDir: join(".windsurf", "skills") },
|
|
52
|
+
};
|
|
53
|
+
/** Sorted list of supported tool names (for help and error messages). */
|
|
54
|
+
export function supportedTools() {
|
|
55
|
+
return Object.keys(TOOL_REGISTRY).sort();
|
|
56
|
+
}
|
|
57
|
+
/** Look up a tool, throwing a helpful error listing every supported tool. */
|
|
58
|
+
export function resolveTool(name) {
|
|
59
|
+
const target = TOOL_REGISTRY[name];
|
|
60
|
+
if (!target) {
|
|
61
|
+
throw new Error(`Unsupported tool: ${name}\nSupported tools: ${supportedTools().join(", ")}`);
|
|
62
|
+
}
|
|
63
|
+
return target;
|
|
64
|
+
}
|
|
10
65
|
/** Absolute path to the directory of bundled skills shipped inside dist/. */
|
|
11
66
|
export function bundledSkillsDir() {
|
|
12
67
|
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
@@ -15,25 +70,33 @@ export function bundledSkillsDir() {
|
|
|
15
70
|
/**
|
|
16
71
|
* Skills root to install into. Each bundled skill (a subdirectory containing a
|
|
17
72
|
* SKILL.md) is copied to `<root>/<skill-name>/`. Precedence: explicit --dir >
|
|
18
|
-
* --project (
|
|
73
|
+
* --project (./.<tool>/skills) > the tool's global skills dir.
|
|
19
74
|
*/
|
|
20
75
|
export function resolveInstallDir(opts) {
|
|
21
76
|
if (opts.dir)
|
|
22
77
|
return opts.dir;
|
|
78
|
+
const target = resolveTool(opts.tool);
|
|
23
79
|
if (opts.project)
|
|
24
|
-
return join(process.cwd(),
|
|
25
|
-
|
|
26
|
-
return join(base, "skills");
|
|
80
|
+
return join(process.cwd(), target.projectSkillsDir);
|
|
81
|
+
return target.globalSkillsDir();
|
|
27
82
|
}
|
|
28
|
-
/** Parse `gitea-mcp
|
|
29
|
-
export function
|
|
30
|
-
const opts = { project: false };
|
|
31
|
-
let command;
|
|
83
|
+
/** Parse `gitea-mcp init [flags]`. Throws on unknown flags or missing values. */
|
|
84
|
+
export function parseInitArgs(argv) {
|
|
85
|
+
const opts = { tool: DEFAULT_TOOL, project: false };
|
|
32
86
|
for (let i = 0; i < argv.length; i++) {
|
|
33
87
|
const a = argv[i];
|
|
34
88
|
if (a === "--project") {
|
|
35
89
|
opts.project = true;
|
|
36
90
|
}
|
|
91
|
+
else if (a === "--tool") {
|
|
92
|
+
const val = argv[++i];
|
|
93
|
+
if (!val)
|
|
94
|
+
throw new Error("--tool requires a name argument");
|
|
95
|
+
opts.tool = val;
|
|
96
|
+
}
|
|
97
|
+
else if (a.startsWith("--tool=")) {
|
|
98
|
+
opts.tool = a.slice("--tool=".length);
|
|
99
|
+
}
|
|
37
100
|
else if (a === "--dir") {
|
|
38
101
|
const val = argv[++i];
|
|
39
102
|
if (!val)
|
|
@@ -43,14 +106,14 @@ export function parseInstallArgs(argv) {
|
|
|
43
106
|
else if (a.startsWith("--dir=")) {
|
|
44
107
|
opts.dir = a.slice("--dir=".length);
|
|
45
108
|
}
|
|
46
|
-
else if (
|
|
47
|
-
|
|
109
|
+
else if (a === "--help" || a === "-h") {
|
|
110
|
+
throw new Error(USAGE);
|
|
48
111
|
}
|
|
49
112
|
else {
|
|
50
|
-
throw new Error(`Unknown argument: ${a}`);
|
|
113
|
+
throw new Error(`Unknown argument: ${a}\n${USAGE}`);
|
|
51
114
|
}
|
|
52
115
|
}
|
|
53
|
-
return
|
|
116
|
+
return opts;
|
|
54
117
|
}
|
|
55
118
|
/** Recursively copy a directory tree (no experimental fs.cp dependency). */
|
|
56
119
|
async function copyTree(src, dest) {
|
|
@@ -68,18 +131,13 @@ async function copyTree(src, dest) {
|
|
|
68
131
|
}
|
|
69
132
|
}
|
|
70
133
|
/**
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
134
|
+
* Copy every skill (each subdirectory of `srcDir` containing a SKILL.md) into
|
|
135
|
+
* `<destRoot>/<skill-name>/`, recursing into nested folders. Returns the names
|
|
136
|
+
* of the skills installed. Throws if `srcDir` cannot be read or holds no skill.
|
|
137
|
+
* Extracted from `runInitCommand` so the copy loop (and its error branches) can
|
|
138
|
+
* be exercised against a crafted temp tree without mocking the filesystem.
|
|
75
139
|
*/
|
|
76
|
-
export async function
|
|
77
|
-
const { command, opts } = parseInstallArgs(argv);
|
|
78
|
-
if (command !== "install") {
|
|
79
|
-
const reason = command ? `Unknown skills subcommand: ${command}` : "Missing skills subcommand";
|
|
80
|
-
throw new Error(`${reason}\n${USAGE}`);
|
|
81
|
-
}
|
|
82
|
-
const srcDir = bundledSkillsDir();
|
|
140
|
+
export async function installSkills(srcDir, destRoot) {
|
|
83
141
|
let entries;
|
|
84
142
|
try {
|
|
85
143
|
entries = await readdir(srcDir, { withFileTypes: true });
|
|
@@ -87,7 +145,6 @@ export async function runSkillsCommand(argv) {
|
|
|
87
145
|
catch {
|
|
88
146
|
throw new Error(`Bundled skills not found at ${srcDir}. The package may be corrupted or was installed without its assets.`);
|
|
89
147
|
}
|
|
90
|
-
const destRoot = resolveInstallDir(opts);
|
|
91
148
|
const installed = [];
|
|
92
149
|
for (const entry of entries) {
|
|
93
150
|
if (!entry.isDirectory())
|
|
@@ -105,9 +162,22 @@ export async function runSkillsCommand(argv) {
|
|
|
105
162
|
if (installed.length === 0) {
|
|
106
163
|
throw new Error(`No skills found to install under ${srcDir}.`);
|
|
107
164
|
}
|
|
108
|
-
|
|
165
|
+
return installed;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Implements `gitea-mcp init`: copies every bundled skill (each subdirectory of
|
|
169
|
+
* dist/assets/skills containing a SKILL.md) into the target tool's skills
|
|
170
|
+
* directory so the tool loads them on next start. Does NOT need
|
|
171
|
+
* GITEA_BASE_URL / GITEA_TOKEN.
|
|
172
|
+
*/
|
|
173
|
+
export async function runInitCommand(argv) {
|
|
174
|
+
const opts = parseInitArgs(argv);
|
|
175
|
+
const target = resolveTool(opts.tool);
|
|
176
|
+
const destRoot = resolveInstallDir(opts);
|
|
177
|
+
const installed = await installSkills(bundledSkillsDir(), destRoot);
|
|
178
|
+
process.stdout.write(`Installed ${installed.length} gitea-mcp skill(s) for ${target.label} -> ${destRoot}\n`);
|
|
109
179
|
for (const name of installed)
|
|
110
180
|
process.stdout.write(` - ${name}\n`);
|
|
111
|
-
process.stdout.write(
|
|
181
|
+
process.stdout.write(`Restart ${target.label} for the skills to take effect.\n`);
|
|
112
182
|
}
|
|
113
183
|
//# sourceMappingURL=skills.js.map
|
package/dist/skills.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAU,CAAC;AACzD,MAAM,cAAc,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
|