@dev-tren/mapd 0.21.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/LICENSE +21 -0
- package/MASTER_PROMPT.md +134 -0
- package/README.md +494 -0
- package/SETUP.md +108 -0
- package/UAT.md +77 -0
- package/package.json +56 -0
- package/src/adapters/github-app.js +79 -0
- package/src/agents/anthropicClient.js +18 -0
- package/src/agents/llm.js +196 -0
- package/src/agents/modelResolver.js +87 -0
- package/src/agents/provider.js +222 -0
- package/src/chat/commandRunner.js +86 -0
- package/src/chat/commands.js +275 -0
- package/src/chat/intent.js +87 -0
- package/src/chat/llmIntent.js +118 -0
- package/src/chat/repl.js +471 -0
- package/src/cli.js +1408 -0
- package/src/config/index.js +197 -0
- package/src/config/schema.js +119 -0
- package/src/core/assist.js +64 -0
- package/src/core/audit.js +63 -0
- package/src/core/changes.js +110 -0
- package/src/core/confidence.js +0 -0
- package/src/core/configLint.js +141 -0
- package/src/core/diagnose.js +262 -0
- package/src/core/docs.js +140 -0
- package/src/core/doctor.js +134 -0
- package/src/core/envFiles.js +43 -0
- package/src/core/events.js +53 -0
- package/src/core/evidence.js +212 -0
- package/src/core/findingScoring.js +20 -0
- package/src/core/fix.js +192 -0
- package/src/core/fixApply.js +172 -0
- package/src/core/frameworkEntries.js +247 -0
- package/src/core/gates.js +209 -0
- package/src/core/graph.js +467 -0
- package/src/core/grounding.js +235 -0
- package/src/core/handoff.js +157 -0
- package/src/core/importResolver.js +218 -0
- package/src/core/improve.js +226 -0
- package/src/core/integrate.js +169 -0
- package/src/core/intelligence.js +212 -0
- package/src/core/modernize.js +370 -0
- package/src/core/parseCache.js +64 -0
- package/src/core/parser.js +536 -0
- package/src/core/policy.js +65 -0
- package/src/core/polyglot.js +333 -0
- package/src/core/proc.js +25 -0
- package/src/core/reachability.js +543 -0
- package/src/core/regression.js +193 -0
- package/src/core/resolution.js +92 -0
- package/src/core/retry.js +61 -0
- package/src/core/review.js +219 -0
- package/src/core/score.js +338 -0
- package/src/core/security.js +0 -0
- package/src/core/session.js +143 -0
- package/src/core/solutions.js +254 -0
- package/src/core/staleness.js +45 -0
- package/src/core/testGuidance.js +226 -0
- package/src/core/theme.js +50 -0
- package/src/core/trace.js +151 -0
- package/src/core/verify.js +123 -0
- package/src/core/view.js +221 -0
- package/src/core/viewServer.js +88 -0
- package/src/core/watch.js +76 -0
- package/src/core/workspace.js +115 -0
- package/src/mcp/server.js +48 -0
- package/src/mcp/tools.js +423 -0
- package/src/server.js +84 -0
package/src/server.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* server.js — runnable GitHub App wrapper. Zero framework deps (node:http).
|
|
4
|
+
*
|
|
5
|
+
* Env:
|
|
6
|
+
* MAPD_WEBHOOK_SECRET HMAC secret from the GitHub App settings.
|
|
7
|
+
* REQUIRED in production; if unset the server starts in
|
|
8
|
+
* --insecure-dev mode ONLY when that flag is passed,
|
|
9
|
+
* otherwise it refuses to boot. No silent insecurity.
|
|
10
|
+
* PORT default 8787
|
|
11
|
+
*
|
|
12
|
+
* Endpoints:
|
|
13
|
+
* POST /webhook GitHub events (push, pull_request) → adapters/github-app.js
|
|
14
|
+
* GET /healthz liveness probe
|
|
15
|
+
*
|
|
16
|
+
* Local test without GitHub:
|
|
17
|
+
* MAPD_WEBHOOK_SECRET=s node src/server.js
|
|
18
|
+
* BODY='{"zen":"ok"}'
|
|
19
|
+
* SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac s | cut -d' ' -f2)
|
|
20
|
+
* curl -s -X POST localhost:8787/webhook -H "x-github-event: ping" \
|
|
21
|
+
* -H "x-hub-signature-256: sha256=$SIG" -d "$BODY"
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import http from "node:http";
|
|
25
|
+
import crypto from "node:crypto";
|
|
26
|
+
import { handleWebhook } from "./adapters/github-app.js";
|
|
27
|
+
|
|
28
|
+
const PORT = Number(process.env.PORT ?? 8787);
|
|
29
|
+
const SECRET = process.env.MAPD_WEBHOOK_SECRET;
|
|
30
|
+
const insecureDev = process.argv.includes("--insecure-dev");
|
|
31
|
+
|
|
32
|
+
if (!SECRET && !insecureDev) {
|
|
33
|
+
console.error("Refusing to start: MAPD_WEBHOOK_SECRET is unset. For local testing only, pass --insecure-dev.");
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function verifySignature(body, signatureHeader) {
|
|
38
|
+
if (!SECRET) return insecureDev; // explicit dev mode only
|
|
39
|
+
if (!signatureHeader?.startsWith("sha256=")) return false;
|
|
40
|
+
const expected = "sha256=" + crypto.createHmac("sha256", SECRET).update(body).digest("hex");
|
|
41
|
+
const a = Buffer.from(signatureHeader), b = Buffer.from(expected);
|
|
42
|
+
return a.length === b.length && crypto.timingSafeEqual(a, b);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const server = http.createServer((req, res) => {
|
|
46
|
+
const json = (code, obj) => {
|
|
47
|
+
res.writeHead(code, { "content-type": "application/json" });
|
|
48
|
+
res.end(JSON.stringify(obj));
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
if (req.method === "GET" && req.url === "/healthz") return json(200, { ok: true, service: "mapd-github-app" });
|
|
52
|
+
if (req.method !== "POST" || req.url !== "/webhook") return json(404, { error: "not found" });
|
|
53
|
+
|
|
54
|
+
const chunks = [];
|
|
55
|
+
let size = 0;
|
|
56
|
+
req.on("data", (c) => {
|
|
57
|
+
size += c.length;
|
|
58
|
+
if (size > 5 * 1024 * 1024) { req.destroy(); return; } // 5MB cap
|
|
59
|
+
chunks.push(c);
|
|
60
|
+
});
|
|
61
|
+
req.on("end", async () => {
|
|
62
|
+
const body = Buffer.concat(chunks).toString("utf8");
|
|
63
|
+
if (!verifySignature(body, req.headers["x-hub-signature-256"])) {
|
|
64
|
+
return json(401, { error: "invalid signature" });
|
|
65
|
+
}
|
|
66
|
+
const event = req.headers["x-github-event"];
|
|
67
|
+
if (event === "ping") return json(200, { pong: true });
|
|
68
|
+
|
|
69
|
+
let payload;
|
|
70
|
+
try { payload = JSON.parse(body); } catch { return json(400, { error: "invalid JSON" }); }
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
const result = await handleWebhook(event, payload);
|
|
74
|
+
return json(200, { received: event, result: result ?? { action: "ignored" } });
|
|
75
|
+
} catch (e) {
|
|
76
|
+
console.error(`[mapd] ${event} handler error:`, e.message);
|
|
77
|
+
return json(500, { error: "handler failure", detail: e.message });
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
server.listen(PORT, () => {
|
|
83
|
+
console.log(`mapd github-app listening on :${PORT} (${SECRET ? "signature verification ON" : "INSECURE DEV MODE"})`);
|
|
84
|
+
});
|