@maind-dev/cli 0.4.0 → 0.6.1
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 +50 -0
- package/build/index.js +3930 -58
- package/build/meta.json +1 -0
- package/package.json +20 -11
- package/build/auth.js +0 -76
- package/build/auth.js.map +0 -1
- package/build/ci-report.js +0 -146
- package/build/ci-report.js.map +0 -1
- package/build/ci-result.js +0 -145
- package/build/ci-result.js.map +0 -1
- package/build/context.js +0 -157
- package/build/context.js.map +0 -1
- package/build/git-context.js +0 -212
- package/build/git-context.js.map +0 -1
- package/build/git.js +0 -162
- package/build/git.js.map +0 -1
- package/build/index.js.map +0 -1
- package/build/mcp-client.js +0 -221
- package/build/mcp-client.js.map +0 -1
- package/build/render.js +0 -81
- package/build/render.js.map +0 -1
package/build/context.js
DELETED
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
// `maind context` — pull stack-relevant lessons + conventions into a CI runner.
|
|
2
|
-
//
|
|
3
|
-
// Fail-open by contract: a CI job must never fail because the context pull failed.
|
|
4
|
-
// Any error is logged to stderr, an explanatory empty context.md + an error-tagged
|
|
5
|
-
// manifest are still written, and the process exits 0. The caller decides whether
|
|
6
|
-
// to proceed (it always can — the agent just runs without extra context).
|
|
7
|
-
import { mkdirSync, writeFileSync } from "node:fs";
|
|
8
|
-
import { dirname } from "node:path";
|
|
9
|
-
import { MissingApiKeyError, resolveAuth } from "./auth.js";
|
|
10
|
-
import { McpClient } from "./mcp-client.js";
|
|
11
|
-
import { buildManifest, renderContextMarkdown, } from "./render.js";
|
|
12
|
-
function csvSplit(s) {
|
|
13
|
-
return s
|
|
14
|
-
.split(",")
|
|
15
|
-
.map((x) => x.trim())
|
|
16
|
-
.filter((x) => x.length > 0);
|
|
17
|
-
}
|
|
18
|
-
/** Parses the `context` subcommand flags. Unknown flags are ignored (forward-compat). */
|
|
19
|
-
export function parseContextArgs(argv) {
|
|
20
|
-
const get = (name) => {
|
|
21
|
-
const i = argv.indexOf(name);
|
|
22
|
-
if (i === -1 || i + 1 >= argv.length)
|
|
23
|
-
return undefined;
|
|
24
|
-
return argv[i + 1];
|
|
25
|
-
};
|
|
26
|
-
const stack = csvSplit(get("--stack") ?? "");
|
|
27
|
-
const platforms = csvSplit(get("--platforms") ?? "");
|
|
28
|
-
const tools = csvSplit(get("--tools") ?? "");
|
|
29
|
-
const languages = csvSplit(get("--languages") ?? "");
|
|
30
|
-
const budgetRaw = get("--budget");
|
|
31
|
-
const budgetParsed = budgetRaw ? Number.parseInt(budgetRaw, 10) : NaN;
|
|
32
|
-
const budget = Number.isFinite(budgetParsed) && budgetParsed > 0 ? Math.min(budgetParsed, 50) : 15;
|
|
33
|
-
return {
|
|
34
|
-
stack,
|
|
35
|
-
languages,
|
|
36
|
-
// --stack is a convenience that seeds the platforms filter; explicit --platforms wins/merges.
|
|
37
|
-
platforms: platforms.length > 0 ? platforms : stack,
|
|
38
|
-
tools,
|
|
39
|
-
query: get("--query") ?? null,
|
|
40
|
-
out: get("--out") ?? ".maind/context.md",
|
|
41
|
-
manifest: get("--manifest") ?? ".maind/manifest.json",
|
|
42
|
-
budget,
|
|
43
|
-
runRef: get("--run-ref") ?? process.env.GITHUB_RUN_ID ?? null,
|
|
44
|
-
mcpUrl: get("--mcp-url") ?? null,
|
|
45
|
-
clientVersion: "0.1.0",
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function nowIso() {
|
|
49
|
-
// Real Node runtime — Date is available (the Date-ban only applies to Workflow scripts).
|
|
50
|
-
return new Date().toISOString();
|
|
51
|
-
}
|
|
52
|
-
function writeArtifact(path, content) {
|
|
53
|
-
const dir = dirname(path);
|
|
54
|
-
if (dir && dir !== ".")
|
|
55
|
-
mkdirSync(dir, { recursive: true });
|
|
56
|
-
writeFileSync(path, content, "utf8");
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Runs the context pull. Returns the process exit code. Always 0 on the
|
|
60
|
-
* fail-open path (artifacts still written); non-zero is reserved for truly
|
|
61
|
-
* unwritable output paths where we can't even emit the empty artifacts.
|
|
62
|
-
*/
|
|
63
|
-
export async function runContext(opts) {
|
|
64
|
-
const query = opts.query ?? deriveQuery(opts);
|
|
65
|
-
const meta = {
|
|
66
|
-
stack: opts.stack,
|
|
67
|
-
languages: opts.languages,
|
|
68
|
-
platforms: opts.platforms,
|
|
69
|
-
tools: opts.tools,
|
|
70
|
-
query,
|
|
71
|
-
budget: opts.budget,
|
|
72
|
-
generatedAt: nowIso(),
|
|
73
|
-
keyPrefix: "unknown",
|
|
74
|
-
runRef: opts.runRef,
|
|
75
|
-
mcpUrl: opts.mcpUrl ?? process.env.MAIND_MCP_URL ?? "https://mcp.maind.dev/mcp",
|
|
76
|
-
};
|
|
77
|
-
try {
|
|
78
|
-
const auth = resolveAuth();
|
|
79
|
-
meta.keyPrefix = auth.keyPrefix;
|
|
80
|
-
const client = new McpClient({
|
|
81
|
-
apiKey: auth.apiKey,
|
|
82
|
-
deviceId: auth.deviceId,
|
|
83
|
-
clientVersion: opts.clientVersion,
|
|
84
|
-
mcpUrl: opts.mcpUrl ?? undefined,
|
|
85
|
-
});
|
|
86
|
-
// Two calls: search_lessons gives full lesson bodies; get_session_briefing
|
|
87
|
-
// gives the always-on convention awareness index. Conventions are best-effort —
|
|
88
|
-
// a failure there must not lose the lessons.
|
|
89
|
-
const search = await client.callTool("search_lessons", {
|
|
90
|
-
query,
|
|
91
|
-
platforms: opts.platforms,
|
|
92
|
-
languages: opts.languages,
|
|
93
|
-
tools: opts.tools,
|
|
94
|
-
limit: Math.min(opts.budget, 10), // search_lessons caps limit at 10 server-side
|
|
95
|
-
});
|
|
96
|
-
const lessons = Array.isArray(search.lessons) ? search.lessons : [];
|
|
97
|
-
let conventions = [];
|
|
98
|
-
try {
|
|
99
|
-
const briefing = await client.callTool("get_session_briefing", {
|
|
100
|
-
tools: opts.tools.length > 0 ? opts.tools : ["claude-code"],
|
|
101
|
-
languages: opts.languages,
|
|
102
|
-
platforms: opts.platforms,
|
|
103
|
-
});
|
|
104
|
-
if (Array.isArray(briefing.convention_index))
|
|
105
|
-
conventions = briefing.convention_index;
|
|
106
|
-
}
|
|
107
|
-
catch (err) {
|
|
108
|
-
warn(`conventions unavailable (continuing with lessons only): ${msg(err)}`);
|
|
109
|
-
}
|
|
110
|
-
writeArtifact(opts.out, renderContextMarkdown(lessons, conventions, meta));
|
|
111
|
-
writeArtifact(opts.manifest, JSON.stringify(buildManifest(lessons, conventions, meta), null, 2) + "\n");
|
|
112
|
-
process.stderr.write(`maind context: wrote ${lessons.length} lessons + ${conventions.length} conventions ` +
|
|
113
|
-
`→ ${opts.out} (manifest: ${opts.manifest})\n`);
|
|
114
|
-
return 0;
|
|
115
|
-
}
|
|
116
|
-
catch (err) {
|
|
117
|
-
// Fail-open: emit explanatory empty artifacts so the manifest path always exists,
|
|
118
|
-
// then exit 0 so CI proceeds without maind context.
|
|
119
|
-
const reason = err instanceof MissingApiKeyError ? err.message : msg(err);
|
|
120
|
-
warn(`context pull failed, continuing without maind context: ${reason}`);
|
|
121
|
-
const emptyManifest = buildManifest([], [], meta);
|
|
122
|
-
emptyManifest.error = reason;
|
|
123
|
-
try {
|
|
124
|
-
writeArtifact(opts.out, failOpenMarkdown(meta, reason));
|
|
125
|
-
writeArtifact(opts.manifest, JSON.stringify(emptyManifest, null, 2) + "\n");
|
|
126
|
-
}
|
|
127
|
-
catch (writeErr) {
|
|
128
|
-
warn(`could not write fail-open artifacts: ${msg(writeErr)}`);
|
|
129
|
-
return 1; // truly unwritable output path — signal it, but this is rare
|
|
130
|
-
}
|
|
131
|
-
return 0;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
function deriveQuery(opts) {
|
|
135
|
-
const parts = [...opts.stack, ...opts.tools, ...opts.languages];
|
|
136
|
-
return parts.length > 0 ? parts.join(" ") : "common build and CI pitfalls";
|
|
137
|
-
}
|
|
138
|
-
function failOpenMarkdown(meta, reason) {
|
|
139
|
-
return [
|
|
140
|
-
"<!-- Generated by `maind context` (fail-open path). -->",
|
|
141
|
-
`<!-- generated_at: ${meta.generatedAt} -->`,
|
|
142
|
-
"",
|
|
143
|
-
"# maind context",
|
|
144
|
-
"",
|
|
145
|
-
`_maind context was unavailable for this run: ${reason}_`,
|
|
146
|
-
"",
|
|
147
|
-
"The build can proceed normally — this file is informational only.",
|
|
148
|
-
"",
|
|
149
|
-
].join("\n");
|
|
150
|
-
}
|
|
151
|
-
function msg(err) {
|
|
152
|
-
return err instanceof Error ? err.message : String(err);
|
|
153
|
-
}
|
|
154
|
-
function warn(line) {
|
|
155
|
-
process.stderr.write(`maind context: ${line}\n`);
|
|
156
|
-
}
|
|
157
|
-
//# sourceMappingURL=context.js.map
|
package/build/context.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/build/git-context.js
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
// `maind git-context` — a session-start briefing of the LOCAL git state, enriched
|
|
2
|
-
// with maind's parallel-session coordination (ADR-188) and state-relevant git
|
|
3
|
-
// lessons (ADR-212 v2 / B1). Run it before an agent starts work so it begins
|
|
4
|
-
// informed ("you're on feat/x, 3 ahead, CI red, a peer is editing src/auth.ts")
|
|
5
|
-
// instead of blind.
|
|
6
|
-
//
|
|
7
|
-
// Fail-open + fail-soft: local git state always renders; the MCP enrichment
|
|
8
|
-
// (peer conflicts, lessons) is best-effort and each piece degrades independently.
|
|
9
|
-
// No git remote, no API key, no network, no `gh` → you still get what's available.
|
|
10
|
-
// The remote URL never leaves the machine — only the project_key (sha256) does.
|
|
11
|
-
import { mkdirSync, writeFileSync } from "node:fs";
|
|
12
|
-
import { dirname } from "node:path";
|
|
13
|
-
import { resolveAuth } from "./auth.js";
|
|
14
|
-
import { McpClient } from "./mcp-client.js";
|
|
15
|
-
import { gatherGitState, gatherOpenPrs } from "./git.js";
|
|
16
|
-
export function parseGitContextArgs(argv) {
|
|
17
|
-
const get = (name) => {
|
|
18
|
-
const i = argv.indexOf(name);
|
|
19
|
-
if (i === -1 || i + 1 >= argv.length)
|
|
20
|
-
return undefined;
|
|
21
|
-
return argv[i + 1];
|
|
22
|
-
};
|
|
23
|
-
return {
|
|
24
|
-
out: get("--out") ?? ".maind/git-context.md",
|
|
25
|
-
manifest: get("--manifest") ?? null,
|
|
26
|
-
mcpUrl: get("--mcp-url") ?? null,
|
|
27
|
-
noMcp: argv.includes("--no-mcp"),
|
|
28
|
-
clientVersion: "0.4.0",
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function nowIso() {
|
|
32
|
-
return new Date().toISOString();
|
|
33
|
-
}
|
|
34
|
-
function writeArtifact(path, content) {
|
|
35
|
-
const dir = dirname(path);
|
|
36
|
-
if (dir && dir !== ".")
|
|
37
|
-
mkdirSync(dir, { recursive: true });
|
|
38
|
-
writeFileSync(path, content, "utf8");
|
|
39
|
-
}
|
|
40
|
-
/** A state-aware query so the pulled lessons match the current situation. */
|
|
41
|
-
function stateQuery(git, prs) {
|
|
42
|
-
if (prs.some((p) => p.isCurrentBranch && p.ci === "failure"))
|
|
43
|
-
return "ci failure red build fix";
|
|
44
|
-
if ((git.behind ?? 0) > 0 && (git.ahead ?? 0) > 0)
|
|
45
|
-
return "rebase merge integration diverged branch";
|
|
46
|
-
if ((git.behind ?? 0) > 0)
|
|
47
|
-
return "branch behind main pull rebase update";
|
|
48
|
-
if (prs.some((p) => p.isCurrentBranch))
|
|
49
|
-
return "pull request review merge workflow";
|
|
50
|
-
if ((git.ahead ?? 0) > 0)
|
|
51
|
-
return "open pull request commit message branch";
|
|
52
|
-
return "git branch commit pull request workflow";
|
|
53
|
-
}
|
|
54
|
-
export async function runGitContext(opts) {
|
|
55
|
-
const git = gatherGitState();
|
|
56
|
-
// gh is optional; only probe when we're in a repo.
|
|
57
|
-
const prResult = git.isRepo ? gatherOpenPrs(git.branch) : { available: false, prs: [] };
|
|
58
|
-
let peer = null;
|
|
59
|
-
let lessons = [];
|
|
60
|
-
let lessonsAvailable = false;
|
|
61
|
-
if (!opts.noMcp && git.isRepo) {
|
|
62
|
-
try {
|
|
63
|
-
const auth = resolveAuth();
|
|
64
|
-
const client = new McpClient({
|
|
65
|
-
apiKey: auth.apiKey,
|
|
66
|
-
deviceId: auth.deviceId,
|
|
67
|
-
clientVersion: opts.clientVersion,
|
|
68
|
-
mcpUrl: opts.mcpUrl ?? undefined,
|
|
69
|
-
});
|
|
70
|
-
// Peer/conflict check — READ-ONLY (no announce → no phantom session).
|
|
71
|
-
if (git.projectKey && git.workingPaths.length > 0) {
|
|
72
|
-
try {
|
|
73
|
-
const c = await client.callTool("check_path_conflicts", {
|
|
74
|
-
project_key: git.projectKey,
|
|
75
|
-
paths: git.workingPaths,
|
|
76
|
-
});
|
|
77
|
-
peer = {
|
|
78
|
-
peersActive: c.peers_active ?? 0,
|
|
79
|
-
conflicts: (c.conflicts ?? [])
|
|
80
|
-
.filter((x) => x.path)
|
|
81
|
-
.map((x) => ({ path: x.path, focus: x.focus })),
|
|
82
|
-
recommendation: c.recommendation ?? null,
|
|
83
|
-
checked: true,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
warn(`peer check unavailable: ${msg(err)}`);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
// State-relevant git lessons.
|
|
91
|
-
try {
|
|
92
|
-
const res = await client.callTool("search_lessons", {
|
|
93
|
-
query: stateQuery(git, prResult.prs),
|
|
94
|
-
platforms: ["git", "github"],
|
|
95
|
-
limit: 3,
|
|
96
|
-
});
|
|
97
|
-
lessons = Array.isArray(res.lessons) ? res.lessons : [];
|
|
98
|
-
lessonsAvailable = true;
|
|
99
|
-
}
|
|
100
|
-
catch (err) {
|
|
101
|
-
warn(`git lessons unavailable: ${msg(err)}`);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
catch (err) {
|
|
105
|
-
// No API key / auth failure → local-only briefing, still useful.
|
|
106
|
-
warn(`maind enrichment skipped (${msg(err)}); rendering local git state only.`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
writeArtifact(opts.out, renderMarkdown(git, prResult, peer, lessons, lessonsAvailable));
|
|
110
|
-
if (opts.manifest) {
|
|
111
|
-
writeArtifact(opts.manifest, JSON.stringify(buildManifest(git, prResult.prs, peer), null, 2) + "\n");
|
|
112
|
-
}
|
|
113
|
-
process.stderr.write(`maind git-context: ${git.isRepo ? `${git.branch ?? "?"} (+${git.ahead ?? "?"}/-${git.behind ?? "?"})` : "not a git repo"}` +
|
|
114
|
-
(peer?.conflicts.length ? `, ${peer.conflicts.length} peer conflict(s)` : "") +
|
|
115
|
-
` → ${opts.out}\n`);
|
|
116
|
-
return 0;
|
|
117
|
-
}
|
|
118
|
-
function ciIcon(ci) {
|
|
119
|
-
return ci === "success" ? "🟢" : ci === "failure" ? "🔴" : ci === "pending" ? "🟡" : "⚪";
|
|
120
|
-
}
|
|
121
|
-
function renderMarkdown(git, prResult, peer, lessons, lessonsAvailable) {
|
|
122
|
-
const L = [];
|
|
123
|
-
L.push("<!-- Generated by `maind git-context` — local git state for the agent. -->");
|
|
124
|
-
L.push(`<!-- generated_at: ${nowIso()} -->`);
|
|
125
|
-
L.push("");
|
|
126
|
-
L.push("# maind git-context");
|
|
127
|
-
L.push("");
|
|
128
|
-
if (!git.isRepo) {
|
|
129
|
-
L.push("_Not inside a git work tree — no git context to report._");
|
|
130
|
-
L.push("");
|
|
131
|
-
return L.join("\n");
|
|
132
|
-
}
|
|
133
|
-
const aheadBehind = git.defaultBranch != null
|
|
134
|
-
? `${git.ahead ?? "?"} ahead, ${git.behind ?? "?"} behind \`${git.defaultBranch}\``
|
|
135
|
-
: "no upstream default branch resolved";
|
|
136
|
-
L.push(`**Branch:** \`${git.branch ?? "?"}\` — ${aheadBehind}`);
|
|
137
|
-
L.push(`**Working tree:** ${git.uncommitted} uncommitted change${git.uncommitted === 1 ? "" : "s"}`);
|
|
138
|
-
if (git.projectKey)
|
|
139
|
-
L.push(`**Project:** \`${git.projectKey.slice(0, 12)}…\` (sha256 of remote — URL never sent)`);
|
|
140
|
-
L.push("");
|
|
141
|
-
// Open PRs
|
|
142
|
-
if (prResult.available) {
|
|
143
|
-
if (prResult.prs.length === 0) {
|
|
144
|
-
L.push("**Open PRs:** none");
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
L.push("**Open PRs:**");
|
|
148
|
-
for (const p of prResult.prs) {
|
|
149
|
-
const tag = p.isCurrentBranch ? ` ${ciIcon(p.ci)} CI:${p.ci} · this branch` : "";
|
|
150
|
-
L.push(`- #${p.number} ${p.title}${tag}`);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
L.push("**Open PRs:** _unavailable (`gh` not installed / not authenticated)_");
|
|
156
|
-
}
|
|
157
|
-
L.push("");
|
|
158
|
-
// Peers (ADR-188 coordination)
|
|
159
|
-
if (peer?.checked) {
|
|
160
|
-
if (peer.conflicts.length > 0) {
|
|
161
|
-
L.push(`**⚠ Parallel sessions on this repo:** ${peer.peersActive} active — path conflicts:`);
|
|
162
|
-
for (const c of peer.conflicts) {
|
|
163
|
-
L.push(`- \`${c.path}\`${c.focus ? ` — peer focus: ${c.focus}` : ""}`);
|
|
164
|
-
}
|
|
165
|
-
if (peer.recommendation)
|
|
166
|
-
L.push(`- _${peer.recommendation}_`);
|
|
167
|
-
}
|
|
168
|
-
else if (peer.peersActive > 0) {
|
|
169
|
-
L.push(`**Parallel sessions on this repo:** ${peer.peersActive} active — no conflict on your changed paths.`);
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
L.push("**Parallel sessions on this repo:** none.");
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
L.push("**Parallel sessions:** _not checked (no key / no changed paths / offline)._");
|
|
177
|
-
}
|
|
178
|
-
L.push("");
|
|
179
|
-
// Lessons
|
|
180
|
-
if (lessonsAvailable && lessons.length > 0) {
|
|
181
|
-
L.push("## Relevant git lessons (maind)");
|
|
182
|
-
for (const l of lessons) {
|
|
183
|
-
L.push(`- **${l.title ?? l.id}**${l.id ? ` \`${l.id}\`` : ""}`);
|
|
184
|
-
}
|
|
185
|
-
L.push("");
|
|
186
|
-
}
|
|
187
|
-
L.push("_Full PR workflow: `activate_skill({id:\"skill_pr_lifecycle\"})`._");
|
|
188
|
-
L.push("");
|
|
189
|
-
return L.join("\n");
|
|
190
|
-
}
|
|
191
|
-
function buildManifest(git, prs, peer) {
|
|
192
|
-
return {
|
|
193
|
-
schema: "maind.git-context/v1",
|
|
194
|
-
generated_at: nowIso(),
|
|
195
|
-
project_key: git.projectKey,
|
|
196
|
-
branch: git.branch,
|
|
197
|
-
default_branch: git.defaultBranch,
|
|
198
|
-
ahead: git.ahead,
|
|
199
|
-
behind: git.behind,
|
|
200
|
-
uncommitted: git.uncommitted,
|
|
201
|
-
open_prs: prs.map((p) => ({ number: p.number, ci: p.ci, current_branch: p.isCurrentBranch })),
|
|
202
|
-
peers_active: peer?.checked ? peer.peersActive : null,
|
|
203
|
-
path_conflicts: peer?.conflicts.map((c) => c.path) ?? [],
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
function msg(err) {
|
|
207
|
-
return err instanceof Error ? err.message : String(err);
|
|
208
|
-
}
|
|
209
|
-
function warn(line) {
|
|
210
|
-
process.stderr.write(`maind git-context: ${line}\n`);
|
|
211
|
-
}
|
|
212
|
-
//# sourceMappingURL=git-context.js.map
|
package/build/git-context.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-context.js","sourceRoot":"","sources":["../src/git-context.ts"],"names":[],"mappings":"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"}
|
package/build/git.js
DELETED
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
// Local git/gh state gathering for `maind git-context` (ADR-212 v2 / B1).
|
|
2
|
-
//
|
|
3
|
-
// All gathering is CLIENT-SIDE — the maind server is repo-blind by design
|
|
4
|
-
// (ADR-188 privacy): only the project_key (sha256 of the normalized remote) and
|
|
5
|
-
// repo-relative paths ever leave this machine; the remote URL never does.
|
|
6
|
-
//
|
|
7
|
-
// Every probe is fail-soft: a missing git, no remote, or absent `gh` degrades to
|
|
8
|
-
// null/empty, never throws. The command around this is fail-open.
|
|
9
|
-
import { execFileSync } from "node:child_process";
|
|
10
|
-
import { createHash } from "node:crypto";
|
|
11
|
-
function run(bin, args) {
|
|
12
|
-
try {
|
|
13
|
-
return execFileSync(bin, args, {
|
|
14
|
-
encoding: "utf8",
|
|
15
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
16
|
-
timeout: 5000,
|
|
17
|
-
}).trim();
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
const git = (args) => run("git", args);
|
|
24
|
-
const gh = (args) => run("gh", args);
|
|
25
|
-
// ── project_key contract (replicated from apps/vscode-extension/src/harness/
|
|
26
|
-
// projectKey.ts — ADR-188). MUST normalize identically or sessions won't match
|
|
27
|
-
// across clients. Keep in sync; extract to a shared package when a third client
|
|
28
|
-
// needs it. ────────────────────────────────────────────────────────────────────
|
|
29
|
-
export function sha256Hex(input) {
|
|
30
|
-
return createHash("sha256").update(input).digest("hex");
|
|
31
|
-
}
|
|
32
|
-
export function normalizeRemoteUrl(raw) {
|
|
33
|
-
let s = raw.trim();
|
|
34
|
-
if (!s)
|
|
35
|
-
return null;
|
|
36
|
-
const scheme = /^[a-z][a-z0-9+.-]*:\/\//i.exec(s);
|
|
37
|
-
if (scheme) {
|
|
38
|
-
s = s.slice(scheme[0].length);
|
|
39
|
-
s = s.replace(/^[^@/]+@/, "");
|
|
40
|
-
s = s.replace(/^([^/:]+):\d+(?=\/)/, "$1");
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
s = s.replace(/^[^@/]+@/, "");
|
|
44
|
-
const i = s.indexOf(":");
|
|
45
|
-
if (i >= 0)
|
|
46
|
-
s = `${s.slice(0, i)}/${s.slice(i + 1)}`;
|
|
47
|
-
}
|
|
48
|
-
s = s
|
|
49
|
-
.replace(/\.git$/i, "")
|
|
50
|
-
.replace(/\/+$/, "")
|
|
51
|
-
.toLowerCase();
|
|
52
|
-
return s.length > 0 ? s : null;
|
|
53
|
-
}
|
|
54
|
-
export function projectKeyFromRemote(raw) {
|
|
55
|
-
const norm = normalizeRemoteUrl(raw);
|
|
56
|
-
return norm ? sha256Hex(norm) : null;
|
|
57
|
-
}
|
|
58
|
-
function resolveDefaultBranch() {
|
|
59
|
-
// origin/HEAD → refs/remotes/origin/main (when set), else probe common names.
|
|
60
|
-
const sym = git(["symbolic-ref", "--quiet", "refs/remotes/origin/HEAD"]);
|
|
61
|
-
if (sym) {
|
|
62
|
-
const m = /refs\/remotes\/origin\/(.+)$/.exec(sym);
|
|
63
|
-
if (m)
|
|
64
|
-
return m[1];
|
|
65
|
-
}
|
|
66
|
-
for (const cand of ["main", "master"]) {
|
|
67
|
-
if (git(["rev-parse", "--verify", "--quiet", `origin/${cand}`]) !== null)
|
|
68
|
-
return cand;
|
|
69
|
-
}
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
export function gatherGitState() {
|
|
73
|
-
const inside = git(["rev-parse", "--is-inside-work-tree"]);
|
|
74
|
-
if (inside !== "true") {
|
|
75
|
-
return {
|
|
76
|
-
isRepo: false,
|
|
77
|
-
projectKey: null,
|
|
78
|
-
branch: null,
|
|
79
|
-
defaultBranch: null,
|
|
80
|
-
ahead: null,
|
|
81
|
-
behind: null,
|
|
82
|
-
uncommitted: 0,
|
|
83
|
-
workingPaths: [],
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
const remote = git(["config", "--get", "remote.origin.url"]);
|
|
87
|
-
const projectKey = remote ? projectKeyFromRemote(remote) : null;
|
|
88
|
-
const branch = git(["rev-parse", "--abbrev-ref", "HEAD"]);
|
|
89
|
-
const defaultBranch = resolveDefaultBranch();
|
|
90
|
-
let ahead = null;
|
|
91
|
-
let behind = null;
|
|
92
|
-
if (defaultBranch) {
|
|
93
|
-
// `--left-right --count A...B` → "<left> <right>": left = in A not B (behind),
|
|
94
|
-
// right = in B not A (ahead). Here A=origin/default, B=HEAD.
|
|
95
|
-
const counts = git(["rev-list", "--left-right", "--count", `origin/${defaultBranch}...HEAD`]);
|
|
96
|
-
if (counts) {
|
|
97
|
-
const [b, a] = counts.split(/\s+/).map((n) => Number.parseInt(n, 10));
|
|
98
|
-
if (Number.isFinite(b))
|
|
99
|
-
behind = b;
|
|
100
|
-
if (Number.isFinite(a))
|
|
101
|
-
ahead = a;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
const porcelain = git(["status", "--porcelain"]) ?? "";
|
|
105
|
-
const changedLines = porcelain.split("\n").filter((l) => l.trim().length > 0);
|
|
106
|
-
const workingPaths = changedLines
|
|
107
|
-
.map((l) => l.slice(3).split(" -> ").pop().trim().replace(/^"|"$/g, ""))
|
|
108
|
-
.filter((p) => p.length > 0)
|
|
109
|
-
.slice(0, 32);
|
|
110
|
-
return {
|
|
111
|
-
isRepo: true,
|
|
112
|
-
projectKey,
|
|
113
|
-
branch,
|
|
114
|
-
defaultBranch,
|
|
115
|
-
ahead,
|
|
116
|
-
behind,
|
|
117
|
-
uncommitted: changedLines.length,
|
|
118
|
-
workingPaths,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
function ciFromChecks(prNumber) {
|
|
122
|
-
const out = gh(["pr", "checks", String(prNumber), "--json", "bucket"]);
|
|
123
|
-
if (!out)
|
|
124
|
-
return "unknown";
|
|
125
|
-
try {
|
|
126
|
-
const rows = JSON.parse(out);
|
|
127
|
-
if (rows.length === 0)
|
|
128
|
-
return "unknown";
|
|
129
|
-
if (rows.some((r) => r.bucket === "fail"))
|
|
130
|
-
return "failure";
|
|
131
|
-
if (rows.some((r) => r.bucket === "pending"))
|
|
132
|
-
return "pending";
|
|
133
|
-
if (rows.every((r) => r.bucket === "pass" || r.bucket === "skipping"))
|
|
134
|
-
return "success";
|
|
135
|
-
return "unknown";
|
|
136
|
-
}
|
|
137
|
-
catch {
|
|
138
|
-
return "unknown";
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
export function gatherOpenPrs(currentBranch, max = 5) {
|
|
142
|
-
const out = gh(["pr", "list", "--state", "open", "--limit", String(max), "--json", "number,title,headRefName"]);
|
|
143
|
-
if (out === null)
|
|
144
|
-
return { available: false, prs: [] };
|
|
145
|
-
try {
|
|
146
|
-
const rows = JSON.parse(out);
|
|
147
|
-
const prs = rows.map((r) => ({
|
|
148
|
-
number: r.number,
|
|
149
|
-
title: r.title,
|
|
150
|
-
isCurrentBranch: currentBranch != null && r.headRefName === currentBranch,
|
|
151
|
-
// Only resolve CI for the current branch's PR (cheap) — others stay unknown to avoid N gh calls.
|
|
152
|
-
ci: currentBranch != null && r.headRefName === currentBranch
|
|
153
|
-
? ciFromChecks(r.number)
|
|
154
|
-
: "unknown",
|
|
155
|
-
}));
|
|
156
|
-
return { available: true, prs };
|
|
157
|
-
}
|
|
158
|
-
catch {
|
|
159
|
-
return { available: false, prs: [] };
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
//# sourceMappingURL=git.js.map
|
package/build/git.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/build/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,EAAE;AACF,gCAAgC;AAChC,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,gFAAgF;AAChF,sEAAsE;AACtE,EAAE;AACF,yEAAyE;AACzE,qEAAqE;AAErE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtE,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,IAAI,GAAG,SAAS,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkD5B,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QAC/D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QACrC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;QAC1B,OAAO,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,GAAG,0BAA0B,CAAC,CAAC;IAC/E,OAAO,CAAC,CAAC;AACX,CAAC;AAED,IAAI,EAAE;KACH,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAClC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACb,+EAA+E;IAC/E,2EAA2E;IAC3E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|