restricted-github-mcp 1.1.29 → 1.1.32

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.
@@ -1 +1 @@
1
- {"version":3,"file":"config-server.d.ts","sourceRoot":"","sources":["../src/config-server.ts"],"names":[],"mappings":"AAyEA;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAazD;AAED,wBAAsB,iBAAiB,kBA+ItC"}
1
+ {"version":3,"file":"config-server.d.ts","sourceRoot":"","sources":["../src/config-server.ts"],"names":[],"mappings":"AA0EA;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAazD;AAED,wBAAsB,iBAAiB,kBA+OtC"}
@@ -2,6 +2,7 @@ import express from "express";
2
2
  import path from "path";
3
3
  import fs from "fs";
4
4
  import { fileURLToPath } from "url";
5
+ import { Octokit } from "octokit";
5
6
  import { logToFile, updateEnvFile } from "./logger.js";
6
7
  /**
7
8
  * Envoie un message au parent de manière sécurisée.
@@ -114,6 +115,8 @@ export async function startConfigServer() {
114
115
  TARGET_BRANCH: process.env.TARGET_BRANCH,
115
116
  BASE_BRANCH: process.env.BASE_BRANCH || "main",
116
117
  READ_ONLY: process.env.READ_ONLY === "true",
118
+ INCLUDE_PUBLIC: process.env.INCLUDE_PUBLIC === "true",
119
+ INCLUDE_NOT_OWNED: process.env.INCLUDE_NOT_OWNED === "true",
117
120
  });
118
121
  }
119
122
  catch (error) {
@@ -122,6 +125,89 @@ export async function startConfigServer() {
122
125
  res.status(500).json({ error: msg });
123
126
  }
124
127
  });
128
+ app.get("/api/repositories", async (req, res) => {
129
+ logToFile("[GUI] GET /api/repositories called");
130
+ try {
131
+ const token = process.env.GITHUB_TOKEN;
132
+ if (!token) {
133
+ logToFile("[GUI] Repositories endpoint: Token non configuré");
134
+ return res.status(400).json({ error: "Token GitHub non configuré" });
135
+ }
136
+ const octokit = new Octokit({ auth: token });
137
+ const user = await octokit.rest.users.getAuthenticated();
138
+ logToFile(`[GUI] Authenticated as: ${user.data.login}`);
139
+ const includePublic = process.env.INCLUDE_PUBLIC === "true";
140
+ const includeNotOwned = process.env.INCLUDE_NOT_OWNED === "true";
141
+ const search = req.query.search;
142
+ let accessibleRepos = [];
143
+ if (search && search.length > 0) {
144
+ // Mode Recherche : Utilise l'API de recherche
145
+ const user = await octokit.rest.users.getAuthenticated();
146
+ // Si on n'inclut pas les "non-owned", on restreint la recherche à l'utilisateur actuel
147
+ const query = includeNotOwned
148
+ ? `${search} in:name fork:true`
149
+ : `${search} user:${user.data.login} in:name fork:true`;
150
+ const { data: searchResults } = await octokit.rest.search.repos({
151
+ q: query,
152
+ sort: "updated",
153
+ per_page: 10,
154
+ });
155
+ accessibleRepos = searchResults.items.map(repo => repo.full_name);
156
+ logToFile(`[GUI] Search for "${search}" found ${accessibleRepos.length} repos`);
157
+ }
158
+ else {
159
+ // Mode Liste : Utilise l'API de listing classique (top 10 récents)
160
+ const { data } = await octokit.rest.repos.listForAuthenticatedUser({
161
+ affiliation: includeNotOwned ? "owner,collaborator,organization_member" : "owner",
162
+ visibility: includePublic ? "all" : "private",
163
+ sort: "updated",
164
+ per_page: 10,
165
+ });
166
+ accessibleRepos = data.map(repo => repo.full_name);
167
+ logToFile(`[GUI] Default list found ${accessibleRepos.length} repos`);
168
+ }
169
+ res.json(accessibleRepos);
170
+ }
171
+ catch (error) {
172
+ const msg = `[GUI] Failed to fetch repositories: ${error.message}`;
173
+ logToFile(msg);
174
+ res.status(500).json({ error: msg });
175
+ }
176
+ });
177
+ app.get("/api/branches", async (req, res) => {
178
+ logToFile("[GUI] GET /api/branches called");
179
+ try {
180
+ const repo = req.query.repo;
181
+ const token = process.env.GITHUB_TOKEN;
182
+ if (!repo) {
183
+ logToFile("[GUI] Branches endpoint: Paramètre repo manquant");
184
+ return res.status(400).json({ error: "Paramètre repo manquant" });
185
+ }
186
+ if (!token) {
187
+ logToFile("[GUI] Branches endpoint: Token non configuré");
188
+ return res.status(400).json({ error: "Token GitHub non configuré" });
189
+ }
190
+ const [owner, repoName] = repo.split("/");
191
+ if (!owner || !repoName) {
192
+ logToFile("[GUI] Branches endpoint: Format de repo invalide");
193
+ return res.status(400).json({ error: "Format de repo invalide (owner/repo)" });
194
+ }
195
+ const octokit = new Octokit({ auth: token });
196
+ const { data } = await octokit.rest.repos.listBranches({
197
+ owner,
198
+ repo: repoName,
199
+ per_page: 100,
200
+ });
201
+ const branches = data.map((branch) => branch.name).reverse();
202
+ logToFile(`[GUI] Branches endpoint: ${branches.length} branches retournées pour ${repo}`);
203
+ res.json(branches);
204
+ }
205
+ catch (error) {
206
+ const msg = `[GUI] Failed to fetch branches: ${error.message}`;
207
+ logToFile(msg);
208
+ res.status(500).json({ error: msg });
209
+ }
210
+ });
125
211
  app.post("/api/config", (req, res) => {
126
212
  logToFile("[GUI] POST /api/config called");
127
213
  const newConfig = req.body;
@@ -1 +1 @@
1
- {"version":3,"file":"config-server.js","sourceRoot":"","sources":["../src/config-server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvD;;GAEG;AACH,SAAS,QAAQ,CAAC,OAAY;IAC5B,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,SAAS,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,sBAAsB;AACtB,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;AACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,mBAAmB,CAAC;AAE7D,0CAA0C;AAC1C,IAAI,cAAc,GAAkB,IAAI,CAAC;AAEzC;;;GAGG;AACH,KAAK,UAAU,oBAAoB;IACjC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,SAAS,CAAC,4DAA4D,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,iBAAiB,EAAE;YAC1D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACxD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,YAAY,CAAC,SAAS,CAAC,CAAC;QAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,SAAS,CAAC,qCAAqC,SAAS,CAAC,KAAK,IAAI,QAAQ,CAAC,UAAU,uBAAuB,YAAY,EAAE,CAAC,CAAC;YAC5H,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,cAAc,GAAG,QAAQ,CAAC;QAC1B,SAAS,CAAC,2CAA2C,QAAQ,WAAW,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;QACvE,SAAS,CAAC,qCAAqC,MAAM,uBAAuB,YAAY,EAAE,CAAC,CAAC;QAC5F,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc;QAAE,OAAO;IAE1C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,SAAS,mBAAmB,EAAE;YAC3C,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;SAC/C,CAAC,CAAC;QACH,SAAS,CAAC,uCAAuC,cAAc,GAAG,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,SAAS,CAAC,qCAAqC,CAAC,CAAC;IAEjD,6CAA6C;IAC7C,MAAM,SAAS,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,SAAS,IAAI,YAAY,CAAC;IAEvC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAExB,sCAAsC;IACtC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,SAAS,CAAC,kBAAkB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACpC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,mEAAmE;IACnE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACxD,SAAS,CAAC,sCAAsC,UAAU,EAAE,CAAC,CAAC;IAE9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,uDAAuD,UAAU,EAAE,CAAC;QACrF,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxB,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAEpC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAClC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC;gBACP,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;gBACtC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;gBACpC,aAAa,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;gBACxC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM;gBAC9C,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM;aAC5C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC;YAClE,SAAS,CAAC,GAAG,CAAC,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC;QAE3B,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAEtC,kEAAkE;YAClE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrD,aAAa,CAAC,GAAG,EAAE,KAAe,CAAC,CAAC;YACtC,CAAC;YAED,yCAAyC;YACzC,SAAS,CAAC,gDAAgD,CAAC,CAAC;YAC5D,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAExD,SAAS,CAAC,iDAAiD,CAAC,CAAC;YAC7D,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC;YAC1D,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,SAAS,CAAC,GAAG,CAAC,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACpC,SAAS,CAAC,2CAA2C,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAAC;YAEzD,UAAU,CAAC,GAAG,EAAE;gBACd,SAAS,CAAC,gDAAgD,CAAC,CAAC;gBAC5D,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;oBACnC,SAAS,CAAC,mDAAmD,CAAC,CAAC;oBAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC;YACxD,SAAS,CAAC,GAAG,CAAC,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACjC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAC;YAEvD,UAAU,CAAC,GAAG,EAAE;gBACd,SAAS,CAAC,6CAA6C,CAAC,CAAC;gBACzD,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;oBAChC,SAAS,CAAC,mDAAmD,CAAC,CAAC;oBAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC;YACrD,SAAS,CAAC,GAAG,CAAC,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,SAAS,CAAC,sCAAsC,IAAI,KAAK,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,SAAS,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,iBAAiB,CAAC;YACnF,MAAM,GAAG,GAAG,oDAAoD,IAAI,MAAM,IAAI,EAAE,CAAC;YACjF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,SAAS,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;YACtC,IAAI,GAAG,GAAG,+BAA+B,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YACjE,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,GAAG,GAAG,6BAA6B,IAAI,wCAAwC,CAAC;YAClF,CAAC;YACD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnB,SAAS,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC9B,SAAS,CAAC,4CAA4C,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,iDAAiD,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7E,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"config-server.js","sourceRoot":"","sources":["../src/config-server.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -32,7 +32,9 @@ const getConfig = () => {
32
32
  BASE_BRANCH: process.env.BASE_BRANCH || "main",
33
33
  TARGET_REPO: process.env.TARGET_REPO,
34
34
  REPO_PATH: process.env.REPO_PATH,
35
- READ_ONLY: process.env.READ_ONLY === "true"
35
+ READ_ONLY: process.env.READ_ONLY === "true",
36
+ INCLUDE_PUBLIC: process.env.INCLUDE_PUBLIC === "true",
37
+ INCLUDE_NOT_OWNED: process.env.INCLUDE_NOT_OWNED === "true"
36
38
  };
37
39
  };
38
40
  /**
@@ -379,6 +381,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
379
381
  BASE_BRANCH: config.BASE_BRANCH,
380
382
  REPO_PATH: config.REPO_PATH || "Not defined (Call 'clone' first)",
381
383
  READ_ONLY: config.READ_ONLY,
384
+ INCLUDE_PUBLIC: process.env.INCLUDE_PUBLIC === "true",
385
+ INCLUDE_NOT_OWNED: process.env.INCLUDE_NOT_OWNED === "true",
382
386
  CURRENT_WORKING_DIR: process.cwd(),
383
387
  GITHUB_TOKEN_LAST_5: config.GITHUB_TOKEN ? `***${config.GITHUB_TOKEN.slice(-5)}` : "Non configuré",
384
388
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "restricted-github-mcp",
3
- "version": "1.1.29",
3
+ "version": "1.1.32",
4
4
  "main": "index.js",
5
5
  "type": "module",
6
6
  "files": [
package/public/index.html CHANGED
@@ -1,217 +1,682 @@
1
- <!DOCTYPE html>
2
- <html lang="fr" class="dark">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>GitHub MCP</title>
7
- <script src="https://cdn.tailwindcss.com"></script>
8
- <style>
9
- body {
10
- background-color: #0f172a;
11
- color: #f8fafc;
12
- }
13
- </style>
14
- </head>
15
- <body class="min-h-screen p-8">
16
- <div class="max-w-2xl mx-auto bg-slate-800 rounded-xl shadow-2xl p-8 border border-slate-700">
17
- <h1 class="text-3xl font-bold mb-6 text-blue-400 flex items-center">
18
- <svg class="w-8 h-8 mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
19
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"></path>
20
- </svg>
21
- Configuration MCP GitHub
22
- </h1>
23
-
24
- <form id="configForm" class="space-y-6">
25
- <div class="space-y-4" id="inputs">
26
- <!-- Inputs will be injected here -->
27
- <div class="flex justify-center p-8">
28
- <div class="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-400"></div>
29
- </div>
30
- </div>
31
-
32
- <div class="pt-4 space-y-3">
33
- <button type="submit" class="w-full bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-4 rounded-lg transition duration-200 shadow-lg flex justify-center items-center">
34
- <span>Enregistrer la configuration</span>
35
- </button>
36
-
37
- <button type="button" id="restartBtn" class="w-full bg-amber-600 hover:bg-amber-700 text-white font-bold py-3 px-4 rounded-lg transition duration-200 shadow-lg flex justify-center items-center">
38
- <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
39
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
40
- </svg>
41
- <span>Redémarrer le serveur MCP</span>
42
- </button>
43
-
44
- <button type="button" id="stopBtn" class="w-full bg-red-600 hover:bg-red-700 text-white font-bold py-3 px-4 rounded-lg transition duration-200 shadow-lg flex justify-center items-center">
45
- <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
46
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
47
- </svg>
48
- <span>Arrêter le serveur MCP</span>
49
- </button>
50
- </div>
51
- </form>
52
-
53
- <div id="status" class="mt-6 p-4 rounded-lg hidden"></div>
54
-
55
- <div class="mt-8 text-sm text-slate-400 border-t border-slate-700 pt-4 italic">
56
- Note: Le serveur MCP doit être redémarré pour appliquer les changements.
57
- </div>
58
- </div>
59
-
60
- <script>
61
- // Détection automatique du base path pour fonctionner via proxy
62
- const pathname = window.location.pathname;
63
- const BASE_PATH = pathname.includes('.')
64
- ? pathname.replace(/\/[^/]*$/, '') // /github-mcp/index.html -> /github-mcp
65
- : pathname.endsWith('/')
66
- ? pathname.slice(0, -1) // /github-mcp/ -> /github-mcp
67
- : pathname === '/' ? '' : pathname; // /github-mcp -> /github-mcp, / -> ''
68
-
69
- // Helper pour construire les URLs d'API
70
- const api = (endpoint) => `${BASE_PATH}/${endpoint}`.replace(/\/+/g, '/');
71
-
72
- const form = document.getElementById('configForm');
73
- const status = document.getElementById('status');
74
- const inputsContainer = document.getElementById('inputs');
75
- const restartBtn = document.getElementById('restartBtn');
76
- const stopBtn = document.getElementById('stopBtn');
77
-
78
- const fields = [
79
- { id: 'GITHUB_TOKEN', label: 'GitHub Token', type: 'password', placeholder: 'ghp_...' },
80
- { id: 'TARGET_REPO', label: 'Target Repository', type: 'text', placeholder: 'owner/repo' },
81
- { id: 'TARGET_BRANCH', label: 'Target Branch', type: 'text', placeholder: 'feature-branch' },
82
- { id: 'BASE_BRANCH', label: 'Base Branch', type: 'text', placeholder: 'main' },
83
- { id: 'READ_ONLY', label: 'Read Only Mode', type: 'checkbox' }
84
- ];
85
-
86
- // Fetch current config
87
- async function fetchConfig() {
88
- try {
89
- const response = await fetch(api('api/config'));
90
- if (!response.ok) {
91
- const data = await response.json().catch(() => ({ error: 'Erreur lors du chargement' }));
92
- throw new Error(data.error || 'Erreur lors du chargement');
93
- }
94
- const config = await response.json();
95
-
96
- inputsContainer.innerHTML = fields.map(field => {
97
- if (field.type === 'checkbox') {
98
- return `
99
- <div class="flex items-center space-x-3 p-3 bg-slate-700/50 rounded-lg">
100
- <input type="checkbox" id="${field.id}" ${config[field.id] === 'true' || config[field.id] === true ? 'checked' : ''} class="w-5 h-5 text-blue-600 rounded focus:ring-blue-500 bg-slate-900 border-slate-600">
101
- <label for="${field.id}" class="text-sm font-medium text-slate-200">${field.label}</label>
102
- </div>
103
- `;
104
- }
105
- return `
106
- <div class="space-y-1">
107
- <label for="${field.id}" class="block text-sm font-medium text-slate-300">${field.label}</label>
108
- <input type="${field.type}" id="${field.id}" value="${config[field.id] || ''}" placeholder="${field.placeholder}" class="w-full px-4 py-2 bg-slate-900 border border-slate-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition duration-200 text-slate-100">
109
- </div>
110
- `;
111
- }).join('');
112
- } catch (error) {
113
- showStatus(error.message || 'Erreur lors du chargement de la configuration', 'error');
114
- }
115
- }
116
-
117
- function showStatus(message, type) {
118
- status.textContent = message;
119
- status.className = `mt-6 p-4 rounded-lg font-medium text-center ${type === 'success' ? 'bg-green-900/50 text-green-300 border border-green-700' : 'bg-red-900/50 text-red-300 border border-red-700'}`;
120
- status.classList.remove('hidden');
121
- setTimeout(() => status.classList.add('hidden'), 5000);
122
- }
123
-
124
- form.onsubmit = async (e) => {
125
- e.preventDefault();
126
- const config = {};
127
- fields.forEach(field => {
128
- const input = document.getElementById(field.id);
129
- config[field.id] = field.type === 'checkbox' ? input.checked : input.value;
130
- });
131
-
132
- try {
133
- const response = await fetch(api('api/config'), {
134
- method: 'POST',
135
- headers: { 'Content-Type': 'application/json' },
136
- body: JSON.stringify(config)
137
- });
138
-
139
- if (response.ok) {
140
- showStatus('Configuration enregistrée avec succès !', 'success');
141
- } else {
142
- const data = await response.json().catch(() => ({ error: 'Erreur inconnue' }));
143
- throw new Error(data.error || 'Erreur lors de l\'enregistrement');
144
- }
145
- } catch (error) {
146
- showStatus(error.message, 'error');
147
- }
148
- };
149
-
150
- restartBtn.onclick = async () => {
151
- if (!confirm('Êtes-vous sûr de vouloir redémarrer le serveur MCP ? Cela coupera la connexion actuelle pour appliquer les changements.')) {
152
- return;
153
- }
154
-
155
- try {
156
- restartBtn.disabled = true;
157
- restartBtn.innerHTML = '<span>Redémarrage en cours...</span>';
158
-
159
- const response = await fetch(api('api/restart'), {
160
- method: 'POST'
161
- });
162
-
163
- if (response.ok) {
164
- showStatus('Signal de redémarrage envoyé. Le serveur va se relancer...', 'success');
165
- // On attend un peu que le serveur s'arrête
166
- setTimeout(() => {
167
- window.location.reload();
168
- }, 3000);
169
- } else {
170
- throw new Error('Erreur lors de la demande de redémarrage');
171
- }
172
- } catch (error) {
173
- showStatus(error.message, 'error');
174
- restartBtn.disabled = false;
175
- restartBtn.innerHTML = `
176
- <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
177
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
178
- </svg>
179
- <span>Redémarrer le serveur MCP</span>
180
- `;
181
- }
182
- };
183
-
184
- stopBtn.onclick = async () => {
185
- if (!confirm('Êtes-vous sûr de vouloir arrêter COMPLÈTEMENT le serveur MCP ?')) {
186
- return;
187
- }
188
-
189
- try {
190
- stopBtn.disabled = true;
191
- stopBtn.innerHTML = '<span>Arrêt en cours...</span>';
192
-
193
- const response = await fetch(api('api/stop'), {
194
- method: 'POST'
195
- });
196
-
197
- if (response.ok) {
198
- showStatus('Le serveur s\'arrête. Cette page ne sera plus disponible.', 'success');
199
- } else {
200
- throw new Error('Erreur lors de la demande d\'arrêt');
201
- }
202
- } catch (error) {
203
- showStatus(error.message, 'error');
204
- stopBtn.disabled = false;
205
- stopBtn.innerHTML = `
206
- <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
207
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
208
- </svg>
209
- <span>Arrêter le serveur MCP</span>
210
- `;
211
- }
212
- };
213
-
214
- fetchConfig();
215
- </script>
216
- </body>
217
- </html>
1
+ <!DOCTYPE html>
2
+ <html lang="fr" class="dark">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>GitHub MCP</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <style>
9
+ body {
10
+ background-color: #0f172a;
11
+ color: #f8fafc;
12
+ }
13
+
14
+ /* iPhone style slider */
15
+ .switch {
16
+ position: relative;
17
+ display: inline-block;
18
+ width: 44px;
19
+ height: 24px;
20
+ flex-shrink: 0;
21
+ }
22
+
23
+ .switch input {
24
+ opacity: 0;
25
+ width: 0;
26
+ height: 0;
27
+ }
28
+
29
+ .slider {
30
+ position: absolute;
31
+ cursor: pointer;
32
+ top: 0;
33
+ left: 0;
34
+ right: 0;
35
+ bottom: 0;
36
+ background-color: #334155;
37
+ transition: .4s;
38
+ border-radius: 24px;
39
+ }
40
+
41
+ .slider:before {
42
+ position: absolute;
43
+ content: "";
44
+ height: 18px;
45
+ width: 18px;
46
+ left: 3px;
47
+ bottom: 3px;
48
+ background-color: white;
49
+ transition: .4s;
50
+ border-radius: 50%;
51
+ }
52
+
53
+ input:checked + .slider {
54
+ background-color: #2563eb;
55
+ }
56
+
57
+ input:checked + .slider:before {
58
+ transform: translateX(20px);
59
+ }
60
+
61
+ /* Custom dropdown styles */
62
+ .search-results {
63
+ position: absolute;
64
+ top: 100%;
65
+ left: 0;
66
+ right: 0;
67
+ z-index: 50;
68
+ background-color: #0f172a;
69
+ border: 1px solid #334155;
70
+ border-radius: 0.5rem;
71
+ margin-top: 0.25rem;
72
+ max-height: 15rem;
73
+ overflow-y: auto;
74
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
75
+ }
76
+
77
+ .search-result-item {
78
+ padding: 0.5rem 1rem;
79
+ cursor: pointer;
80
+ transition: background-color 0.2s;
81
+ font-size: 0.875rem;
82
+ }
83
+
84
+ .search-result-item:hover {
85
+ background-color: #1e293b;
86
+ color: #60a5fa;
87
+ }
88
+
89
+ .search-result-item.active {
90
+ background-color: #1e293b;
91
+ color: #60a5fa;
92
+ outline: 1px solid #3b82f6;
93
+ }
94
+
95
+ .search-result-item.selected {
96
+ background-color: #2563eb;
97
+ color: white;
98
+ }
99
+ </style>
100
+ </head>
101
+ <body class="min-h-screen p-8">
102
+ <div class="max-w-2xl mx-auto bg-slate-800 rounded-xl shadow-2xl p-8 border border-slate-700">
103
+ <h1 class="text-3xl font-bold mb-6 text-blue-400 flex items-center">
104
+ <svg class="w-8 h-8 mr-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
105
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"></path>
106
+ </svg>
107
+ Configuration MCP GitHub
108
+ </h1>
109
+
110
+ <form id="configForm" class="space-y-6">
111
+ <div class="space-y-4" id="inputs">
112
+ <!-- Inputs will be injected here -->
113
+ <div class="flex justify-center p-8">
114
+ <div class="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-400"></div>
115
+ </div>
116
+ </div>
117
+
118
+ <div class="pt-4 space-y-3">
119
+ <button type="submit" class="w-full bg-blue-600 hover:bg-blue-700 text-white font-bold py-3 px-4 rounded-lg transition duration-200 shadow-lg flex justify-center items-center">
120
+ <span>Enregistrer la configuration</span>
121
+ </button>
122
+
123
+ <button type="button" id="restartBtn" class="w-full bg-amber-600 hover:bg-amber-700 text-white font-bold py-3 px-4 rounded-lg transition duration-200 shadow-lg flex justify-center items-center">
124
+ <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
125
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"></path>
126
+ </svg>
127
+ <span>Redémarrer le serveur MCP</span>
128
+ </button>
129
+
130
+ <button type="button" id="stopBtn" class="w-full bg-red-600 hover:bg-red-700 text-white font-bold py-3 px-4 rounded-lg transition duration-200 shadow-lg flex justify-center items-center">
131
+ <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
132
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"></path>
133
+ </svg>
134
+ <span>Arrêter le serveur MCP</span>
135
+ </button>
136
+ </div>
137
+ </form>
138
+
139
+ <div id="status" class="mt-6 p-4 rounded-lg hidden"></div>
140
+
141
+ <div class="mt-8 text-sm text-slate-400 border-t border-slate-700 pt-4 italic">
142
+ Note: Le serveur MCP doit être redémarré pour appliquer les changements.
143
+ </div>
144
+ </div>
145
+
146
+ <script>
147
+ // Détection automatique du base path pour fonctionner via proxy
148
+ const pathname = window.location.pathname;
149
+ const BASE_PATH = pathname.includes('.')
150
+ ? pathname.replace(/\/[^/]*$/, '') // /github-mcp/index.html -> /github-mcp
151
+ : pathname.endsWith('/')
152
+ ? pathname.slice(0, -1) // /github-mcp/ -> /github-mcp
153
+ : pathname === '/' ? '' : pathname; // /github-mcp -> /github-mcp, / -> ''
154
+
155
+ // Helper pour construire les URLs d'API
156
+ const api = (endpoint) => `${BASE_PATH}/${endpoint}`.replace(/\/+/g, '/');
157
+
158
+ const form = document.getElementById('configForm');
159
+ const status = document.getElementById('status');
160
+ const inputsContainer = document.getElementById('inputs');
161
+ const restartBtn = document.getElementById('restartBtn');
162
+ const stopBtn = document.getElementById('stopBtn');
163
+
164
+ const fields = [
165
+ { id: 'GITHUB_TOKEN', label: 'GitHub Token', type: 'password', placeholder: 'ghp_...' },
166
+ { id: 'TARGET_REPO', label: 'Target Repository', type: 'select', placeholder: 'owner/repo' },
167
+ { id: 'BASE_BRANCH', label: 'Base Branch', type: 'select', placeholder: 'main' },
168
+ { id: 'TARGET_BRANCH', label: 'Target Branch', type: 'select', placeholder: 'feature-branch' },
169
+ { id: 'READ_ONLY', label: 'Mode Lecture Seule', type: 'slider' },
170
+ { id: 'INCLUDE_PUBLIC', label: 'Inclure les dépôts publics', type: 'slider' },
171
+ { id: 'INCLUDE_NOT_OWNED', label: 'Inclure les dépôts dont je ne suis pas propriétaire', type: 'slider' }
172
+ ];
173
+
174
+ // État de l'application
175
+ let currentConfig = {};
176
+ const selectState = {
177
+ repos: [],
178
+ branches: {},
179
+ loadingRepos: false,
180
+ loadingBranches: {}
181
+ };
182
+
183
+ let searchTimeout;
184
+ let activeIndex = -1;
185
+
186
+ // Fetch repositories
187
+ async function fetchRepositories(token, searchTerm = '') {
188
+ if (!token || token.length < 10) return [];
189
+
190
+ const loadingIndicator = document.getElementById('REPO_LOADING_INDICATOR');
191
+ if (loadingIndicator) loadingIndicator.classList.remove('hidden');
192
+
193
+ try {
194
+ const url = api(`api/repositories${searchTerm ? `?search=${encodeURIComponent(searchTerm)}` : ''}`);
195
+ const response = await fetch(url);
196
+ if (response.ok) {
197
+ selectState.repos = await response.json();
198
+ renderRepoResults();
199
+ }
200
+ } catch (error) {
201
+ console.warn('Error fetching repositories:', error);
202
+ } finally {
203
+ if (loadingIndicator) loadingIndicator.classList.add('hidden');
204
+ }
205
+ }
206
+
207
+ // Affiche les résultats chargés dans le DOM
208
+ function renderRepoResults() {
209
+ const resultsContainer = document.getElementById('REPO_RESULTS');
210
+ if (!resultsContainer) return;
211
+
212
+ if (selectState.repos.length > 0) {
213
+ const currentRepo = document.getElementById('TARGET_REPO')?.value;
214
+ resultsContainer.innerHTML = selectState.repos.map((repo, index) => `
215
+ <div class="search-result-item ${repo === currentRepo ? 'selected' : ''}" data-index="${index}" onclick="selectRepo('${repo}')">
216
+ ${repo}
217
+ ${repo === currentRepo ? '<span class="float-right text-blue-400">✓</span>' : ''}
218
+ </div>
219
+ `).join('');
220
+ resultsContainer.classList.remove('hidden');
221
+ activeIndex = -1;
222
+ } else {
223
+ resultsContainer.innerHTML = '<div class="p-3 text-slate-500 text-sm">Aucun résultat</div>';
224
+ resultsContainer.classList.remove('hidden');
225
+ }
226
+ }
227
+
228
+ // Sélectionner un repo depuis la liste custom
229
+ window.selectRepo = async function(repo) {
230
+ const searchInput = document.getElementById('REPO_SEARCH');
231
+ const hiddenInput = document.getElementById('TARGET_REPO');
232
+ const resultsContainer = document.getElementById('REPO_RESULTS');
233
+
234
+ if (searchInput) searchInput.value = repo;
235
+ if (hiddenInput) {
236
+ hiddenInput.value = repo;
237
+ currentConfig.TARGET_REPO = repo;
238
+ }
239
+ if (resultsContainer) resultsContainer.classList.add('hidden');
240
+
241
+ // Charger les branches pour ce repo
242
+ const token = document.getElementById('GITHUB_TOKEN')?.value;
243
+ if (token) {
244
+ await fetchBranches(repo, token);
245
+ updateSelectUI();
246
+ }
247
+ };
248
+
249
+ // Fetch branches for a repository
250
+ async function fetchBranches(repo, token) {
251
+ if (!repo || !token) return [];
252
+
253
+ selectState.loadingBranches[repo] = true;
254
+ updateSelectUI();
255
+
256
+ try {
257
+ const url = api(`api/branches?repo=${encodeURIComponent(repo)}`);
258
+ const response = await fetch(url);
259
+ if (response.ok) {
260
+ selectState.branches[repo] = await response.json();
261
+ }
262
+ } catch (error) {
263
+ console.error('[fetchBranches] Fetch error:', error);
264
+ selectState.branches[repo] = [];
265
+ } finally {
266
+ selectState.loadingBranches[repo] = false;
267
+ updateSelectUI();
268
+ }
269
+ }
270
+
271
+ // Render select field
272
+ function renderSelectField(field, value, config) {
273
+ let options = '<option value="">-- Sélectionner une option --</option>';
274
+
275
+ if (field.id === 'TARGET_REPO') {
276
+ if (selectState.loadingRepos && selectState.repos.length === 0) {
277
+ return `
278
+ <div class="space-y-1">
279
+ <label for="${field.id}" class="block text-sm font-medium text-slate-300">${field.label}</label>
280
+ <div id="${field.id}_loading" class="w-full px-4 py-2 bg-slate-900 border border-slate-600 rounded-lg text-slate-400 flex items-center">
281
+ <div class="animate-spin rounded-full h-4 w-4 border-b-2 border-blue-400 mr-2"></div>
282
+ Chargement des dépôts...
283
+ </div>
284
+ </div>
285
+ `;
286
+ }
287
+
288
+ options += selectState.repos.map(repo =>
289
+ `<option value="${repo}" ${value === repo ? 'selected' : ''}>${repo}</option>`
290
+ ).join('');
291
+
292
+ if (value && !selectState.repos.includes(value)) {
293
+ options += `<option value="${value}" selected>${value}</option>`;
294
+ }
295
+
296
+ return `
297
+ <div class="space-y-1">
298
+ <label for="${field.id}" class="block text-sm font-medium text-slate-300">${field.label}</label>
299
+ <div class="relative">
300
+ <div class="relative">
301
+ <div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
302
+ <svg class="h-4 w-4 text-slate-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
303
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
304
+ </svg>
305
+ </div>
306
+ <input type="text" id="REPO_SEARCH" placeholder="Rechercher un dépôt..." class="w-full pl-10 pr-4 py-2 bg-slate-900 border border-slate-700 rounded-lg focus:ring-2 focus:ring-blue-500 outline-none text-sm text-slate-200" autocomplete="off" value="${value || ''}">
307
+ <div id="REPO_LOADING_INDICATOR" class="absolute inset-y-0 right-0 pr-3 flex items-center hidden">
308
+ <div class="animate-spin rounded-full h-4 w-4 border-b-2 border-blue-400"></div>
309
+ </div>
310
+ </div>
311
+ <div id="REPO_RESULTS" class="search-results hidden"></div>
312
+ <input type="hidden" id="${field.id}" value="${value || ''}">
313
+ </div>
314
+ </div>
315
+ `;
316
+ } else if (field.id === 'BASE_BRANCH') {
317
+ const currentRepo = config.TARGET_REPO;
318
+ const branches = selectState.branches[currentRepo] || [];
319
+
320
+ if (selectState.loadingBranches[currentRepo]) {
321
+ return `
322
+ <div class="space-y-1">
323
+ <label for="${field.id}" class="block text-sm font-medium text-slate-300">${field.label}</label>
324
+ <div id="${field.id}_loading" class="w-full px-4 py-2 bg-slate-900 border border-slate-600 rounded-lg text-slate-400 flex items-center">
325
+ <div class="animate-spin rounded-full h-4 w-4 border-b-2 border-blue-400 mr-2"></div>
326
+ Chargement des branches...
327
+ </div>
328
+ </div>
329
+ `;
330
+ }
331
+
332
+ options += branches.map(branch =>
333
+ `<option value="${branch}" ${value === branch ? 'selected' : ''}>${branch}</option>`
334
+ ).join('');
335
+
336
+ // Préserver la valeur actuelle si elle n'est pas dans la liste (pendant le chargement ou si elle est custom)
337
+ if (value && !branches.includes(value)) {
338
+ options += `<option value="${value}" selected>${value}</option>`;
339
+ }
340
+ } else if (field.id === 'TARGET_BRANCH') {
341
+ const currentRepo = config.TARGET_REPO;
342
+ const branches = selectState.branches[currentRepo] || [];
343
+
344
+ if (selectState.loadingBranches[currentRepo]) {
345
+ return `
346
+ <div class="space-y-1">
347
+ <label for="${field.id}" class="block text-sm font-medium text-slate-300">${field.label}</label>
348
+ <div id="${field.id}_loading" class="w-full px-4 py-2 bg-slate-900 border border-slate-600 rounded-lg text-slate-400 flex items-center">
349
+ <div class="animate-spin rounded-full h-4 w-4 border-b-2 border-blue-400 mr-2"></div>
350
+ Chargement des branches...
351
+ </div>
352
+ </div>
353
+ `;
354
+ }
355
+
356
+ let selectOptions = '<option value="">-- Créer une nouvelle branche --</option>';
357
+ selectOptions += branches.map(branch =>
358
+ `<option value="${branch}" ${value === branch ? 'selected' : ''}>${branch}</option>`
359
+ ).join('');
360
+
361
+ const isCustom = value && !branches.includes(value);
362
+ const shouldShowCustom = isCustom || value === '';
363
+
364
+ return `
365
+ <div class="space-y-1">
366
+ <label for="${field.id}" class="block text-sm font-medium text-slate-300">${field.label}</label>
367
+ <div class="space-y-2">
368
+ <select id="${field.id}" class="w-full px-4 py-2 bg-slate-900 border border-slate-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition duration-200 text-slate-100">
369
+ ${selectOptions}
370
+ </select>
371
+ <input type="text" id="${field.id}_custom" placeholder="Entrez le nom de la nouvelle branche" value="${isCustom ? value : ''}" class="w-full px-4 py-2 bg-slate-900 border border-slate-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition duration-200 text-slate-100 ${shouldShowCustom ? '' : 'hidden'}">
372
+ </div>
373
+ </div>
374
+ `;
375
+ }
376
+
377
+ return `
378
+ <div class="space-y-1">
379
+ <label for="${field.id}" class="block text-sm font-medium text-slate-300">${field.label}</label>
380
+ <select id="${field.id}" class="w-full px-4 py-2 bg-slate-900 border border-slate-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition duration-200 text-slate-100">
381
+ ${options}
382
+ </select>
383
+ </div>
384
+ `;
385
+ }
386
+
387
+ // Fetch current config
388
+ async function fetchConfig() {
389
+ try {
390
+ const response = await fetch(api('api/config'));
391
+ if (!response.ok) {
392
+ const data = await response.json().catch(() => ({ error: 'Erreur lors du chargement' }));
393
+ throw new Error(data.error || 'Erreur lors du chargement');
394
+ }
395
+ currentConfig = await response.json();
396
+
397
+ if (currentConfig.GITHUB_TOKEN) {
398
+ await fetchRepositories(currentConfig.GITHUB_TOKEN);
399
+ if (currentConfig.TARGET_REPO) {
400
+ await fetchBranches(currentConfig.TARGET_REPO, currentConfig.GITHUB_TOKEN);
401
+ }
402
+ }
403
+
404
+ renderInputs(currentConfig);
405
+ } catch (error) {
406
+ showStatus(error.message || 'Erreur lors du chargement de la configuration', 'error');
407
+ }
408
+ }
409
+
410
+ // Render inputs
411
+ function renderInputs(config) {
412
+ inputsContainer.innerHTML = fields.map(field => {
413
+ if (field.type === 'slider') {
414
+ return `
415
+ <div class="flex items-center justify-between p-3 bg-slate-700/50 rounded-lg">
416
+ <label for="${field.id}" class="text-sm font-medium text-slate-200">${field.label}</label>
417
+ <label class="switch">
418
+ <input type="checkbox" id="${field.id}" ${config[field.id] === 'true' || config[field.id] === true ? 'checked' : ''}>
419
+ <span class="slider"></span>
420
+ </label>
421
+ </div>
422
+ `;
423
+ }
424
+ if (field.type === 'checkbox') {
425
+ return `
426
+ <div class="flex items-center space-x-3 p-3 bg-slate-700/50 rounded-lg">
427
+ <input type="checkbox" id="${field.id}" ${config[field.id] === 'true' || config[field.id] === true ? 'checked' : ''} class="w-5 h-5 text-blue-600 rounded focus:ring-blue-500 bg-slate-900 border-slate-600">
428
+ <label for="${field.id}" class="text-sm font-medium text-slate-200">${field.label}</label>
429
+ </div>
430
+ `;
431
+ }
432
+ if (field.type === 'select') {
433
+ return renderSelectField(field, config[field.id] || '', config);
434
+ }
435
+ return `
436
+ <div class="space-y-1">
437
+ <label for="${field.id}" class="block text-sm font-medium text-slate-300">${field.label}</label>
438
+ <input type="${field.type}" id="${field.id}" value="${config[field.id] || ''}" placeholder="${field.placeholder}" class="w-full px-4 py-2 bg-slate-900 border border-slate-600 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent outline-none transition duration-200 text-slate-100">
439
+ </div>
440
+ `;
441
+ }).join('');
442
+
443
+ setupEventListeners();
444
+ }
445
+
446
+ // Update select UI
447
+ function updateSelectUI() {
448
+ // Mettre à jour currentConfig à partir du DOM pour les éléments qui existent
449
+ fields.forEach(field => {
450
+ const input = document.getElementById(field.id);
451
+ if (input) {
452
+ if (field.type === 'checkbox' || field.type === 'slider') {
453
+ currentConfig[field.id] = input.checked;
454
+ } else if (field.id === 'TARGET_BRANCH') {
455
+ const customInput = document.getElementById('TARGET_BRANCH_custom');
456
+ currentConfig[field.id] = (input.value === '' && customInput && customInput.value) ? customInput.value : input.value;
457
+ } else {
458
+ currentConfig[field.id] = input.value;
459
+ }
460
+ }
461
+ });
462
+ renderInputs(currentConfig);
463
+ }
464
+
465
+ // Setup event listeners
466
+ function setupEventListeners() {
467
+ const tokenInput = document.getElementById('GITHUB_TOKEN');
468
+ const targetBranchSelect = document.getElementById('TARGET_BRANCH');
469
+ const repoSearch = document.getElementById('REPO_SEARCH');
470
+ const resultsContainer = document.getElementById('REPO_RESULTS');
471
+
472
+ if (repoSearch) {
473
+ // Focus: ouvre la liste avec ce qui est déjà là
474
+ repoSearch.addEventListener('focus', () => {
475
+ if (selectState.repos.length > 0) {
476
+ renderRepoResults();
477
+ } else {
478
+ // Si vraiment vide, on tente de charger une fois
479
+ const token = document.getElementById('GITHUB_TOKEN')?.value;
480
+ if (token) fetchRepositories(token);
481
+ }
482
+ });
483
+
484
+ // Clavier: navigation avec flèches et Enter
485
+ repoSearch.addEventListener('keydown', (e) => {
486
+ const items = resultsContainer.querySelectorAll('.search-result-item');
487
+ if (items.length === 0) return;
488
+
489
+ if (e.key === 'ArrowDown') {
490
+ e.preventDefault();
491
+ activeIndex = Math.min(activeIndex + 1, items.length - 1);
492
+ updateActiveItem(items);
493
+ } else if (e.key === 'ArrowUp') {
494
+ e.preventDefault();
495
+ activeIndex = Math.max(activeIndex - 1, 0);
496
+ updateActiveItem(items);
497
+ } else if (e.key === 'Enter') {
498
+ e.preventDefault();
499
+ if (activeIndex >= 0) {
500
+ selectRepo(selectState.repos[activeIndex]);
501
+ }
502
+ } else if (e.key === 'Escape') {
503
+ resultsContainer.classList.add('hidden');
504
+ }
505
+ });
506
+
507
+ repoSearch.addEventListener('input', (e) => {
508
+ const term = e.target.value;
509
+ clearTimeout(searchTimeout);
510
+ searchTimeout = setTimeout(() => {
511
+ const token = document.getElementById('GITHUB_TOKEN')?.value;
512
+ fetchRepositories(token, term);
513
+ }, 500);
514
+ });
515
+ }
516
+
517
+ function updateActiveItem(items) {
518
+ items.forEach((item, index) => {
519
+ item.classList.toggle('active', index === activeIndex);
520
+ if (index === activeIndex) {
521
+ item.scrollIntoView({ block: 'nearest' });
522
+ }
523
+ });
524
+ }
525
+
526
+ document.addEventListener('click', (e) => {
527
+ if (resultsContainer && !resultsContainer.contains(e.target) && e.target !== repoSearch) {
528
+ resultsContainer.classList.add('hidden');
529
+ }
530
+ });
531
+
532
+ if (tokenInput) {
533
+ tokenInput.addEventListener('change', async () => {
534
+ const token = tokenInput.value;
535
+ if (token && token.length > 10) {
536
+ selectState.branches = {};
537
+ await fetchRepositories(token);
538
+ }
539
+ });
540
+ }
541
+
542
+ ['INCLUDE_PUBLIC', 'INCLUDE_NOT_OWNED'].forEach(id => {
543
+ const input = document.getElementById(id);
544
+ if (input) {
545
+ input.addEventListener('change', async () => {
546
+ const token = document.getElementById('GITHUB_TOKEN')?.value;
547
+ if (token && token.length > 10) {
548
+ const config = {};
549
+ fields.forEach(f => {
550
+ const inp = document.getElementById(f.id);
551
+ if (inp) {
552
+ if (f.type === 'checkbox' || f.type === 'slider') config[f.id] = inp.checked;
553
+ else config[f.id] = inp.value;
554
+ }
555
+ });
556
+
557
+ try {
558
+ await fetch(api('api/config'), {
559
+ method: 'POST',
560
+ headers: { 'Content-Type': 'application/json' },
561
+ body: JSON.stringify(config)
562
+ });
563
+ await fetchRepositories(token, repoSearch?.value || '');
564
+ } catch (e) {
565
+ console.error('Erreur lors de la mise à jour auto:', e);
566
+ }
567
+ }
568
+ });
569
+ }
570
+ });
571
+
572
+ if (targetBranchSelect) {
573
+ targetBranchSelect.addEventListener('change', () => {
574
+ const customInput = document.getElementById('TARGET_BRANCH_custom');
575
+ if (!customInput) return;
576
+
577
+ const isNewBranch = targetBranchSelect.value === '';
578
+ customInput.classList.toggle('hidden', !isNewBranch);
579
+ if (isNewBranch) {
580
+ customInput.focus();
581
+ } else {
582
+ customInput.value = '';
583
+ }
584
+ });
585
+ }
586
+ }
587
+
588
+ function showStatus(message, type) {
589
+ status.textContent = message;
590
+ status.className = `mt-6 p-4 rounded-lg font-medium text-center ${type === 'success' ? 'bg-green-900/50 text-green-300 border border-green-700' : 'bg-red-900/50 text-red-300 border border-red-700'}`;
591
+ status.classList.remove('hidden');
592
+ setTimeout(() => status.classList.add('hidden'), 5000);
593
+ }
594
+
595
+ // Uniformisation: addEventListener au lieu de onsubmit/onclick
596
+ form.addEventListener('submit', async (e) => {
597
+ e.preventDefault();
598
+ const config = {};
599
+ fields.forEach(field => {
600
+ const input = document.getElementById(field.id);
601
+ if (!input) return; // Protection contre les éléments manquants
602
+ if (field.type === 'checkbox' || field.type === 'slider') {
603
+ config[field.id] = input.checked;
604
+ } else if (field.id === 'TARGET_BRANCH') {
605
+ const customInput = document.getElementById(`${field.id}_custom`);
606
+ config[field.id] = customInput && customInput.value ? customInput.value : input.value;
607
+ } else {
608
+ config[field.id] = input.value;
609
+ }
610
+ });
611
+
612
+ try {
613
+ const response = await fetch(api('api/config'), {
614
+ method: 'POST',
615
+ headers: { 'Content-Type': 'application/json' },
616
+ body: JSON.stringify(config)
617
+ });
618
+
619
+ if (response.ok) {
620
+ showStatus('Configuration enregistrée avec succès !', 'success');
621
+ } else {
622
+ const data = await response.json().catch(() => ({ error: 'Erreur inconnue' }));
623
+ throw new Error(data.error || 'Erreur lors de l\'enregistrement');
624
+ }
625
+ } catch (error) {
626
+ showStatus(error.message, 'error');
627
+ }
628
+ });
629
+
630
+ restartBtn.addEventListener('click', async () => {
631
+ if (!confirm('Êtes-vous sûr de vouloir redémarrer le serveur MCP ? Cela coupera la connexion actuelle pour appliquer les changements.')) {
632
+ return;
633
+ }
634
+
635
+ const originalHTML = restartBtn.innerHTML; // Sauvegarder le HTML original
636
+ try {
637
+ restartBtn.disabled = true;
638
+ restartBtn.innerHTML = '<span>Redémarrage en cours...</span>';
639
+
640
+ const response = await fetch(api('api/restart'), { method: 'POST' });
641
+
642
+ if (response.ok) {
643
+ showStatus('Signal de redémarrage envoyé. Le serveur va se relancer...', 'success');
644
+ setTimeout(() => window.location.reload(), 3000);
645
+ } else {
646
+ throw new Error('Erreur lors de la demande de redémarrage');
647
+ }
648
+ } catch (error) {
649
+ showStatus(error.message, 'error');
650
+ restartBtn.disabled = false;
651
+ restartBtn.innerHTML = originalHTML; // Restaurer le HTML original
652
+ }
653
+ });
654
+
655
+ stopBtn.addEventListener('click', async () => {
656
+ if (!confirm('Êtes-vous sûr de vouloir arrêter COMPLÈTEMENT le serveur MCP ?')) {
657
+ return;
658
+ }
659
+
660
+ const originalHTML = stopBtn.innerHTML; // Sauvegarder le HTML original
661
+ try {
662
+ stopBtn.disabled = true;
663
+ stopBtn.innerHTML = '<span>Arrêt en cours...</span>';
664
+
665
+ const response = await fetch(api('api/stop'), { method: 'POST' });
666
+
667
+ if (response.ok) {
668
+ showStatus('Le serveur s\'arrête. Cette page ne sera plus disponible.', 'success');
669
+ } else {
670
+ throw new Error('Erreur lors de la demande d\'arrêt');
671
+ }
672
+ } catch (error) {
673
+ showStatus(error.message, 'error');
674
+ stopBtn.disabled = false;
675
+ stopBtn.innerHTML = originalHTML; // Restaurer le HTML original
676
+ }
677
+ });
678
+
679
+ fetchConfig();
680
+ </script>
681
+ </body>
682
+ </html>