me2lon 0.0.0-stage → 0.1.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/README.md +62 -2
- package/dist/api.d.ts +35 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +286 -0
- package/dist/api.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +261 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +23 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +272 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +173 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +14 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +31 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/presentation.d.ts +12 -0
- package/dist/presentation.d.ts.map +1 -0
- package/dist/presentation.js +50 -0
- package/dist/presentation.js.map +1 -0
- package/dist/safe-output.d.ts +20 -0
- package/dist/safe-output.d.ts.map +1 -0
- package/dist/safe-output.js +770 -0
- package/dist/safe-output.js.map +1 -0
- package/dist/setup.d.ts +14 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +92 -0
- package/dist/setup.js.map +1 -0
- package/dist/skill.d.ts +2 -0
- package/dist/skill.d.ts.map +1 -0
- package/dist/skill.js +30 -0
- package/dist/skill.js.map +1 -0
- package/dist/types.d.ts +76 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace-source.d.ts +11 -0
- package/dist/workspace-source.d.ts.map +1 -0
- package/dist/workspace-source.js +387 -0
- package/dist/workspace-source.js.map +1 -0
- package/package.json +43 -4
- package/skill/LICENSE +21 -0
- package/skill/SKILL.md +18 -0
- package/src/api.ts +426 -0
- package/src/cli.ts +305 -0
- package/src/client.ts +413 -0
- package/src/config.ts +252 -0
- package/src/errors.ts +40 -0
- package/src/index.ts +37 -0
- package/src/presentation.ts +39 -0
- package/src/safe-output.ts +826 -0
- package/src/setup.ts +95 -0
- package/src/skill.ts +22 -0
- package/src/types.ts +85 -0
- package/src/workspace-source.ts +526 -0
- package/tsconfig.build.json +18 -0
- package/tsconfig.json +14 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFile, realpath } from "node:fs/promises";
|
|
3
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
4
|
+
import { parseArgs } from "node:util";
|
|
5
|
+
import { Me2lonAgentClient } from "./client.js";
|
|
6
|
+
import { resolveRuntimeConfig } from "./config.js";
|
|
7
|
+
import { Me2lonClientError, publicError } from "./errors.js";
|
|
8
|
+
import { installSkill } from "./skill.js";
|
|
9
|
+
import { humanOutput, waitForJob } from "./presentation.js";
|
|
10
|
+
import { setupProject } from "./setup.js";
|
|
11
|
+
const HELP = `me2lon — CLI client for /api/agent/v1
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
me2lon setup [--base-url URL] [--project-name NAME] [--new-credential]
|
|
15
|
+
me2lon skill install [--agent generic|codex|claude] [--path DIRECTORY] [--force]
|
|
16
|
+
--json machine-readable output
|
|
17
|
+
--wait wait for analyze/get-job (default timeout: 7200 seconds)
|
|
18
|
+
--timeout-seconds N override waiting timeout
|
|
19
|
+
--version print client version
|
|
20
|
+
me2lon capabilities [connection options]
|
|
21
|
+
me2lon analyze [--project-root PATH] [--revision-id ID] [connection options]
|
|
22
|
+
me2lon check-workspace [connection options]
|
|
23
|
+
me2lon get-job --job-id ID [connection options]
|
|
24
|
+
me2lon translate --check-job-id ID --project-id ID [connection options]
|
|
25
|
+
me2lon verify --translation-job-id ID --expected-policy-set-digest DIGEST [connection options]
|
|
26
|
+
me2lon get-policy [--policy-unit-id ID] [connection options]
|
|
27
|
+
me2lon propose-policy --policy-unit-id ID --expected-policy-set-digest DIGEST --policy-file FILE [--rationale TEXT] [connection options]
|
|
28
|
+
me2lon cancel-job --job-id ID [connection options]
|
|
29
|
+
|
|
30
|
+
Connection options:
|
|
31
|
+
--base-url URL API origin (or ME2LON_AGENT_URL)
|
|
32
|
+
--workspace-root PATH exact Git root (or ME2LON_WORKSPACE_ROOT; default cwd)
|
|
33
|
+
--repository-id ID bound repository (or ME2LON_REPOSITORY_ID)
|
|
34
|
+
--base-commit SHA full 40-character commit (or ME2LON_BASE_COMMIT)
|
|
35
|
+
--config FILE mode-0600 JSON config (or ME2LON_AGENT_CONFIG)
|
|
36
|
+
--token-stdin read the token from stdin
|
|
37
|
+
|
|
38
|
+
The token is accepted only from ME2LON_AGENT_TOKEN, a protected config file,
|
|
39
|
+
or stdin for one-shot CLI calls. A token option is deliberately not supported.
|
|
40
|
+
`;
|
|
41
|
+
const options = {
|
|
42
|
+
json: { type: "boolean" },
|
|
43
|
+
wait: { type: "boolean" },
|
|
44
|
+
version: { type: "boolean" },
|
|
45
|
+
"timeout-seconds": { type: "string" },
|
|
46
|
+
agent: { type: "string" },
|
|
47
|
+
path: { type: "string" },
|
|
48
|
+
force: { type: "boolean" },
|
|
49
|
+
"project-name": { type: "string" },
|
|
50
|
+
"new-credential": { type: "boolean", default: false },
|
|
51
|
+
"base-url": { type: "string" },
|
|
52
|
+
"workspace-root": { type: "string" },
|
|
53
|
+
"repository-id": { type: "string" },
|
|
54
|
+
"base-commit": { type: "string" },
|
|
55
|
+
config: { type: "string" },
|
|
56
|
+
"token-stdin": { type: "boolean", default: false },
|
|
57
|
+
"job-id": { type: "string" },
|
|
58
|
+
"check-job-id": { type: "string" },
|
|
59
|
+
"translation-job-id": { type: "string" },
|
|
60
|
+
"project-root": { type: "string" },
|
|
61
|
+
"revision-id": { type: "string" },
|
|
62
|
+
"project-id": { type: "string" },
|
|
63
|
+
"policy-unit-id": { type: "string" },
|
|
64
|
+
"expected-policy-set-digest": { type: "string" },
|
|
65
|
+
"policy-file": { type: "string" },
|
|
66
|
+
rationale: { type: "string" },
|
|
67
|
+
help: { type: "boolean", short: "h", default: false },
|
|
68
|
+
};
|
|
69
|
+
function rejectSecretArguments(argv) {
|
|
70
|
+
if (argv.some((argument) => argument === "--token" ||
|
|
71
|
+
argument.startsWith("--token=") ||
|
|
72
|
+
argument === "--api-key" ||
|
|
73
|
+
argument.startsWith("--api-key="))) {
|
|
74
|
+
throw new Me2lonClientError("ME2LON_TOKEN_ON_ARGV", "Me2lon tokens are never accepted on the command line. Use ME2LON_AGENT_TOKEN, a protected config file, or --token-stdin.");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function tokenFromStdin() {
|
|
78
|
+
const chunks = [];
|
|
79
|
+
let bytes = 0;
|
|
80
|
+
for await (const chunk of process.stdin) {
|
|
81
|
+
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
82
|
+
bytes += buffer.length;
|
|
83
|
+
if (bytes > 8_192) {
|
|
84
|
+
throw new Me2lonClientError("ME2LON_TOKEN_INVALID", "The stdin token exceeds the Me2lon client safety limit.");
|
|
85
|
+
}
|
|
86
|
+
chunks.push(buffer);
|
|
87
|
+
}
|
|
88
|
+
return Buffer.concat(chunks).toString("utf8").trim();
|
|
89
|
+
}
|
|
90
|
+
function requiredOption(values, name) {
|
|
91
|
+
const value = values[name];
|
|
92
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
93
|
+
throw new Me2lonClientError("ME2LON_CLI_INPUT_MISSING", `Missing --${name}.`);
|
|
94
|
+
}
|
|
95
|
+
return value.trim();
|
|
96
|
+
}
|
|
97
|
+
async function readPolicy(path) {
|
|
98
|
+
const bytes = await readFile(path);
|
|
99
|
+
if (bytes.length > 1024 * 1024) {
|
|
100
|
+
throw new Me2lonClientError("ME2LON_POLICY_FILE_LIMIT", "The policy proposal exceeds the 1 MiB client limit.");
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
return JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
throw new Me2lonClientError("ME2LON_POLICY_FILE_INVALID", "The policy proposal file must contain valid UTF-8 JSON.", { cause: error });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export async function runCli(argv) {
|
|
110
|
+
rejectSecretArguments(argv);
|
|
111
|
+
const parsed = parseArgs({
|
|
112
|
+
args: argv,
|
|
113
|
+
options,
|
|
114
|
+
allowPositionals: true,
|
|
115
|
+
strict: true,
|
|
116
|
+
});
|
|
117
|
+
const [command, ...extraPositionals] = parsed.positionals;
|
|
118
|
+
const print = (value) => process.stdout.write(`${parsed.values.json ? JSON.stringify(value) : humanOutput(value)}\n`);
|
|
119
|
+
if (parsed.values.version) {
|
|
120
|
+
const { version } = JSON.parse(await readFile(new URL('../package.json', import.meta.url), 'utf8'));
|
|
121
|
+
print(parsed.values.json ? { version } : version);
|
|
122
|
+
return 0;
|
|
123
|
+
}
|
|
124
|
+
if (command === 'skill' && extraPositionals.length === 1 && extraPositionals[0] === 'install') {
|
|
125
|
+
const path = await installSkill(parsed.values.agent, parsed.values.path, parsed.values.force);
|
|
126
|
+
print({ installed: path });
|
|
127
|
+
return 0;
|
|
128
|
+
}
|
|
129
|
+
if (parsed.values.wait && !['analyze', 'get-job'].includes(command ?? ''))
|
|
130
|
+
throw new Me2lonClientError("ME2LON_CLI_INPUT_INVALID", '--wait requires analyze or get-job.');
|
|
131
|
+
const timeout = Number(parsed.values['timeout-seconds'] ?? 7200);
|
|
132
|
+
if (!Number.isFinite(timeout) || timeout <= 0)
|
|
133
|
+
throw new Me2lonClientError("ME2LON_CLI_INPUT_INVALID", '--timeout-seconds must be a positive number.');
|
|
134
|
+
if (parsed.values.help || !command) {
|
|
135
|
+
process.stdout.write(HELP);
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
if (extraPositionals.length > 0) {
|
|
139
|
+
throw new Me2lonClientError("ME2LON_CLI_INPUT_INVALID", "Unexpected positional command arguments.");
|
|
140
|
+
}
|
|
141
|
+
if (command === "setup") {
|
|
142
|
+
const result = await setupProject({
|
|
143
|
+
directory: parsed.values["workspace-root"], baseUrl: parsed.values["base-url"],
|
|
144
|
+
configPath: parsed.values.config, projectName: parsed.values["project-name"],
|
|
145
|
+
newCredential: parsed.values["new-credential"],
|
|
146
|
+
}, { notify: (value) => process.stderr.write(`${parsed.values.json ? JSON.stringify(value) : humanOutput(value)}\n`) });
|
|
147
|
+
print(result);
|
|
148
|
+
return 0;
|
|
149
|
+
}
|
|
150
|
+
const stdinToken = parsed.values["token-stdin"]
|
|
151
|
+
? await tokenFromStdin()
|
|
152
|
+
: undefined;
|
|
153
|
+
const config = await resolveRuntimeConfig({
|
|
154
|
+
...(parsed.values["base-url"]
|
|
155
|
+
? { baseUrl: parsed.values["base-url"] }
|
|
156
|
+
: {}),
|
|
157
|
+
...(parsed.values["workspace-root"]
|
|
158
|
+
? { workspaceRoot: parsed.values["workspace-root"] }
|
|
159
|
+
: {}),
|
|
160
|
+
...(parsed.values["repository-id"]
|
|
161
|
+
? { repositoryId: parsed.values["repository-id"] }
|
|
162
|
+
: {}),
|
|
163
|
+
...(parsed.values["base-commit"]
|
|
164
|
+
? { baseCommitSha: parsed.values["base-commit"] }
|
|
165
|
+
: {}),
|
|
166
|
+
...(parsed.values.config ? { configPath: parsed.values.config } : {}),
|
|
167
|
+
...(stdinToken ? { tokenFromStdin: stdinToken } : {}),
|
|
168
|
+
});
|
|
169
|
+
const client = new Me2lonAgentClient(config);
|
|
170
|
+
let result;
|
|
171
|
+
switch (command) {
|
|
172
|
+
case "capabilities":
|
|
173
|
+
result = await client.capabilities();
|
|
174
|
+
break;
|
|
175
|
+
case "analyze":
|
|
176
|
+
result = await client.analyzeWorkspace(parsed.values["project-root"], parsed.values["revision-id"]);
|
|
177
|
+
break;
|
|
178
|
+
case "check-workspace":
|
|
179
|
+
result = await client.checkWorkspace();
|
|
180
|
+
break;
|
|
181
|
+
case "get-job":
|
|
182
|
+
result = await client.getJob(requiredOption(parsed.values, "job-id"));
|
|
183
|
+
break;
|
|
184
|
+
case "translate":
|
|
185
|
+
result = await client.translate(requiredOption(parsed.values, "check-job-id"), requiredOption(parsed.values, "project-id"));
|
|
186
|
+
break;
|
|
187
|
+
case "verify":
|
|
188
|
+
result = await client.verify(requiredOption(parsed.values, "translation-job-id"), requiredOption(parsed.values, "expected-policy-set-digest"));
|
|
189
|
+
break;
|
|
190
|
+
case "get-policy":
|
|
191
|
+
result = await client.getPolicy(typeof parsed.values["policy-unit-id"] === "string"
|
|
192
|
+
? parsed.values["policy-unit-id"]
|
|
193
|
+
: undefined);
|
|
194
|
+
break;
|
|
195
|
+
case "propose-policy": {
|
|
196
|
+
const rationale = parsed.values.rationale;
|
|
197
|
+
result = await client.proposePolicy({
|
|
198
|
+
policyUnitId: requiredOption(parsed.values, "policy-unit-id"),
|
|
199
|
+
expectedPolicySetDigest: requiredOption(parsed.values, "expected-policy-set-digest"),
|
|
200
|
+
policy: await readPolicy(requiredOption(parsed.values, "policy-file")),
|
|
201
|
+
...(typeof rationale === "string" ? { rationale } : {}),
|
|
202
|
+
});
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
case "cancel-job":
|
|
206
|
+
result = await client.cancelJob(requiredOption(parsed.values, "job-id"));
|
|
207
|
+
break;
|
|
208
|
+
default:
|
|
209
|
+
throw new Me2lonClientError("ME2LON_CLI_COMMAND_UNKNOWN", `Unknown Me2lon command: ${command}.`);
|
|
210
|
+
}
|
|
211
|
+
if (parsed.values.wait) {
|
|
212
|
+
const initial = command === 'analyze' ? result.job : result;
|
|
213
|
+
if (!initial || typeof initial !== 'object' || Array.isArray(initial))
|
|
214
|
+
throw new Me2lonClientError("ME2LON_CLI_INPUT_INVALID", 'Missing job response.');
|
|
215
|
+
const controller = new AbortController();
|
|
216
|
+
const interrupt = () => controller.abort();
|
|
217
|
+
process.once('SIGINT', interrupt);
|
|
218
|
+
try {
|
|
219
|
+
const completed = await waitForJob(initial, id => client.getJob(id), {
|
|
220
|
+
timeoutMs: timeout * 1000, signal: controller.signal,
|
|
221
|
+
notify: message => process.stderr.write(`${message}\n`),
|
|
222
|
+
});
|
|
223
|
+
print(completed.result);
|
|
224
|
+
return completed.exitCode;
|
|
225
|
+
}
|
|
226
|
+
finally {
|
|
227
|
+
process.removeListener('SIGINT', interrupt);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
print(result);
|
|
231
|
+
return 0;
|
|
232
|
+
}
|
|
233
|
+
async function main() {
|
|
234
|
+
try {
|
|
235
|
+
process.exitCode = await runCli(process.argv.slice(2));
|
|
236
|
+
}
|
|
237
|
+
catch (error) {
|
|
238
|
+
const safe = publicError(error);
|
|
239
|
+
process.stderr.write(`${process.argv.includes("--json") ? JSON.stringify(safe) : safe.message}\n`);
|
|
240
|
+
process.exitCode = 1;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
export async function isMainModule(moduleUrl, entrypoint) {
|
|
244
|
+
if (!entrypoint) {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
const [modulePath, entrypointPath] = await Promise.all([
|
|
249
|
+
realpath(fileURLToPath(moduleUrl)),
|
|
250
|
+
realpath(entrypoint),
|
|
251
|
+
]);
|
|
252
|
+
return modulePath === entrypointPath;
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
return moduleUrl === pathToFileURL(entrypoint).href;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (await isMainModule(import.meta.url, process.argv[1])) {
|
|
259
|
+
await main();
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Me2lonAgentApi } from "./api.js";
|
|
2
|
+
import { type AgentRuntimeConfig, type JsonValue, type SafeToolResult } from "./types.js";
|
|
3
|
+
export type PolicyProposalInput = Readonly<{
|
|
4
|
+
policyUnitId: string;
|
|
5
|
+
expectedPolicySetDigest: string;
|
|
6
|
+
policy: JsonValue;
|
|
7
|
+
rationale?: string;
|
|
8
|
+
}>;
|
|
9
|
+
export declare class Me2lonAgentClient {
|
|
10
|
+
#private;
|
|
11
|
+
constructor(config: AgentRuntimeConfig, api?: Me2lonAgentApi, newAttemptId?: () => string);
|
|
12
|
+
capabilities(): Promise<SafeToolResult>;
|
|
13
|
+
analyzeWorkspace(projectRoot?: string, workspaceRevisionId?: string): Promise<SafeToolResult>;
|
|
14
|
+
checkWorkspace(): Promise<SafeToolResult>;
|
|
15
|
+
private captureWorkspace;
|
|
16
|
+
getJob(jobId: string): Promise<SafeToolResult>;
|
|
17
|
+
translate(checkJobId: string, projectId: string): Promise<SafeToolResult>;
|
|
18
|
+
verify(translationJobId: string, expectedPolicySetDigest: string): Promise<SafeToolResult>;
|
|
19
|
+
getPolicy(policyUnitId?: string): Promise<SafeToolResult>;
|
|
20
|
+
proposePolicy(input: PolicyProposalInput): Promise<SafeToolResult>;
|
|
21
|
+
cancelJob(jobId: string): Promise<SafeToolResult>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,UAAU,CAAC;AAY7D,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AA4FpB,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,qBAAa,iBAAiB;;gBAQ1B,MAAM,EAAE,kBAAkB,EAC1B,GAAG,CAAC,EAAE,cAAc,EACpB,YAAY,GAAE,MAAM,MAA0B;IA+C1C,YAAY,IAAI,OAAO,CAAC,cAAc,CAAC;IAYvC,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAW7F,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC;YAEjC,gBAAgB;IAoDxB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAyD9C,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAYzE,MAAM,CACV,gBAAgB,EAAE,MAAM,EACxB,uBAAuB,EAAE,MAAM,GAC9B,OAAO,CAAC,cAAc,CAAC;IAYpB,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAYzD,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IA0DlE,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAMxD"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { Me2lonAgentApi, mutationAttemptId } from "./api.js";
|
|
2
|
+
import { Me2lonClientError } from "./errors.js";
|
|
3
|
+
import { assertNoForbiddenOutput, projectCapabilities, projectJob, projectPolicy, projectPolicyProposal, projectPolicyUnits, repositoryFromList, requireResourceId, } from "./safe-output.js";
|
|
4
|
+
import { LOCAL_SOURCE_LIMITS, SOURCE_SCHEMA_VERSION, } from "./types.js";
|
|
5
|
+
import { buildWorkspaceSource, buildWorkspaceSnapshot } from "./workspace-source.js";
|
|
6
|
+
import { updateProjectState } from "./config.js";
|
|
7
|
+
const MAX_RETURNED_DIAGNOSTICS = 2_000;
|
|
8
|
+
function object(value) {
|
|
9
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
10
|
+
? value
|
|
11
|
+
: undefined;
|
|
12
|
+
}
|
|
13
|
+
function positiveInteger(value) {
|
|
14
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value > 0
|
|
15
|
+
? value
|
|
16
|
+
: undefined;
|
|
17
|
+
}
|
|
18
|
+
function nonnegativeInteger(value) {
|
|
19
|
+
return typeof value === "number" &&
|
|
20
|
+
Number.isSafeInteger(value) &&
|
|
21
|
+
value >= 0
|
|
22
|
+
? value
|
|
23
|
+
: undefined;
|
|
24
|
+
}
|
|
25
|
+
function jobRecord(raw) {
|
|
26
|
+
return object(raw.job) ??
|
|
27
|
+
object(raw.checkJob) ??
|
|
28
|
+
object(raw.translationJob) ??
|
|
29
|
+
object(raw.verificationJob) ??
|
|
30
|
+
object(raw.data) ??
|
|
31
|
+
raw;
|
|
32
|
+
}
|
|
33
|
+
function sourceLimits(raw) {
|
|
34
|
+
const capabilities = object(raw.capabilities) ?? raw;
|
|
35
|
+
const limits = object(capabilities.limits);
|
|
36
|
+
const source = object(limits?.source) ?? limits;
|
|
37
|
+
return {
|
|
38
|
+
maxChanges: Math.min(LOCAL_SOURCE_LIMITS.maxChanges, positiveInteger(source?.maxChanges) ?? LOCAL_SOURCE_LIMITS.maxChanges),
|
|
39
|
+
maxFileBytes: Math.min(LOCAL_SOURCE_LIMITS.maxFileBytes, positiveInteger(source?.maxFileBytes) ?? LOCAL_SOURCE_LIMITS.maxFileBytes),
|
|
40
|
+
maxTotalBytes: Math.min(LOCAL_SOURCE_LIMITS.maxTotalBytes, positiveInteger(source?.maxTotalBytes) ??
|
|
41
|
+
LOCAL_SOURCE_LIMITS.maxTotalBytes),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function checked(result) {
|
|
45
|
+
assertNoForbiddenOutput(result);
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
function validateBoundRepository(response, repositoryId) {
|
|
49
|
+
const candidates = [];
|
|
50
|
+
const visit = (value, depth) => {
|
|
51
|
+
if (depth > 4 || !value || typeof value !== "object")
|
|
52
|
+
return;
|
|
53
|
+
if (Array.isArray(value)) {
|
|
54
|
+
for (const item of value.slice(0, 100))
|
|
55
|
+
visit(item, depth + 1);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
59
|
+
if (key === "repositoryId" &&
|
|
60
|
+
(typeof nested === "string" || typeof nested === "number")) {
|
|
61
|
+
candidates.push(nested);
|
|
62
|
+
}
|
|
63
|
+
else if (/^(?:data|job|workspace|revision|result)$/u.test(key)) {
|
|
64
|
+
visit(nested, depth + 1);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
visit(response, 0);
|
|
69
|
+
if (candidates.some((value) => String(value) !== repositoryId)) {
|
|
70
|
+
throw new Me2lonClientError("ME2LON_REPOSITORY_MISMATCH", "The API response belongs to a repository other than the MCP-bound repository.");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
export class Me2lonAgentClient {
|
|
74
|
+
#config;
|
|
75
|
+
#api;
|
|
76
|
+
#repositoryPromise;
|
|
77
|
+
#workspaceIdPromise;
|
|
78
|
+
#newAttemptId;
|
|
79
|
+
constructor(config, api, newAttemptId = mutationAttemptId) {
|
|
80
|
+
this.#config = config;
|
|
81
|
+
this.#newAttemptId = newAttemptId;
|
|
82
|
+
this.#api =
|
|
83
|
+
api ??
|
|
84
|
+
new Me2lonAgentApi(config.baseUrl, config.token, config.workspace.repositoryId);
|
|
85
|
+
}
|
|
86
|
+
async #repository() {
|
|
87
|
+
this.#repositoryPromise ??= (async () => {
|
|
88
|
+
const raw = await this.#api.repositories();
|
|
89
|
+
const repository = repositoryFromList(raw, this.#config.workspace.repositoryId);
|
|
90
|
+
if (!repository) {
|
|
91
|
+
throw new Me2lonClientError("ME2LON_REPOSITORY_UNAUTHORIZED", "The agent credential does not authorize the MCP-bound repository.");
|
|
92
|
+
}
|
|
93
|
+
return repository;
|
|
94
|
+
})();
|
|
95
|
+
return await this.#repositoryPromise;
|
|
96
|
+
}
|
|
97
|
+
async #workspaceId() {
|
|
98
|
+
await this.#repository();
|
|
99
|
+
if (this.#config.workspaceId)
|
|
100
|
+
return this.#config.workspaceId;
|
|
101
|
+
this.#workspaceIdPromise ??= (async () => {
|
|
102
|
+
const raw = await this.#api.createWorkspace(this.#config.workspace.repositoryId, this.#newAttemptId());
|
|
103
|
+
validateBoundRepository(raw, this.#config.workspace.repositoryId);
|
|
104
|
+
const id = requireResourceId(raw, ["workspace"], ["workspaceId", "id"]);
|
|
105
|
+
await updateProjectState(this.#config, { workspaceId: id });
|
|
106
|
+
return id;
|
|
107
|
+
})();
|
|
108
|
+
return await this.#workspaceIdPromise;
|
|
109
|
+
}
|
|
110
|
+
async capabilities() {
|
|
111
|
+
const [rawCapabilities, rawRepositories] = await Promise.all([
|
|
112
|
+
this.#api.capabilities(),
|
|
113
|
+
this.#api.repositories(),
|
|
114
|
+
]);
|
|
115
|
+
const repository = repositoryFromList(rawRepositories, this.#config.workspace.repositoryId);
|
|
116
|
+
return checked(projectCapabilities(rawCapabilities, repository));
|
|
117
|
+
}
|
|
118
|
+
async analyzeWorkspace(projectRoot, workspaceRevisionId) {
|
|
119
|
+
if (workspaceRevisionId !== undefined) {
|
|
120
|
+
await this.#repository();
|
|
121
|
+
const raw = await this.#api.createAnalysisJob(workspaceRevisionId, projectRoot);
|
|
122
|
+
validateBoundRepository(raw, this.#config.workspace.repositoryId);
|
|
123
|
+
requireResourceId(raw, ['job'], ['id', 'jobId']);
|
|
124
|
+
return checked({ job: projectJob(raw) });
|
|
125
|
+
}
|
|
126
|
+
return this.captureWorkspace(true, projectRoot);
|
|
127
|
+
}
|
|
128
|
+
async checkWorkspace() { return this.captureWorkspace(false); }
|
|
129
|
+
async captureWorkspace(analyze, projectRoot) {
|
|
130
|
+
const attemptId = this.#newAttemptId();
|
|
131
|
+
const [workspaceId, capabilities] = await Promise.all([
|
|
132
|
+
this.#workspaceId(),
|
|
133
|
+
this.#api.capabilities(),
|
|
134
|
+
]);
|
|
135
|
+
if (this.#config.sourceFormat === "snapshot") {
|
|
136
|
+
const source = await buildWorkspaceSnapshot(this.#config.workspace, sourceLimits(capabilities));
|
|
137
|
+
const revision = await this.#api.createSnapshot(workspaceId, source, this.#config.previousRevisionId, attemptId);
|
|
138
|
+
validateBoundRepository(revision, this.#config.workspace.repositoryId);
|
|
139
|
+
const revisionId = requireResourceId(revision, ["revision"], ["id", "revisionId"]);
|
|
140
|
+
await updateProjectState(this.#config, { previousRevisionId: revisionId });
|
|
141
|
+
const job = await (analyze ? this.#api.createAnalysisJob(revisionId, projectRoot, attemptId) : this.#api.createCheckJob(revisionId, attemptId));
|
|
142
|
+
validateBoundRepository(job, this.#config.workspace.repositoryId);
|
|
143
|
+
requireResourceId(job, ["job", "checkJob"], ["jobId", "id"]);
|
|
144
|
+
return checked({ job: projectJob(job), upload: {
|
|
145
|
+
sourceSchemaVersion: source.schemaVersion, baseCommitSha: source.baseCommitSha,
|
|
146
|
+
branchLabel: source.branchLabel, digest: source.digest, fileCount: source.files.length,
|
|
147
|
+
totalReplacementBytes: source.totalReplacementBytes, workspaceRevisionId: revisionId,
|
|
148
|
+
} });
|
|
149
|
+
}
|
|
150
|
+
const source = await buildWorkspaceSource(this.#config.workspace, sourceLimits(capabilities));
|
|
151
|
+
const revision = await this.#api.createRevision(workspaceId, source, attemptId);
|
|
152
|
+
validateBoundRepository(revision, this.#config.workspace.repositoryId);
|
|
153
|
+
const workspaceRevisionId = requireResourceId(revision, ["revision", "workspaceRevision"], ["workspaceRevisionId", "revisionId", "id"]);
|
|
154
|
+
const job = await (analyze ? this.#api.createAnalysisJob(workspaceRevisionId, projectRoot, attemptId) : this.#api.createCheckJob(workspaceRevisionId, attemptId));
|
|
155
|
+
validateBoundRepository(job, this.#config.workspace.repositoryId);
|
|
156
|
+
requireResourceId(job, ["job", "checkJob"], ["jobId", "id"]);
|
|
157
|
+
return checked({
|
|
158
|
+
job: projectJob(job),
|
|
159
|
+
upload: {
|
|
160
|
+
sourceSchemaVersion: SOURCE_SCHEMA_VERSION,
|
|
161
|
+
baseCommitSha: source.baseCommitSha,
|
|
162
|
+
digest: source.digest,
|
|
163
|
+
replacementCount: source.replacementCount,
|
|
164
|
+
deletionCount: source.deletionCount,
|
|
165
|
+
totalReplacementBytes: source.totalReplacementBytes,
|
|
166
|
+
},
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
async getJob(jobId) {
|
|
170
|
+
await this.#repository();
|
|
171
|
+
const raw = await this.#api.job(jobId);
|
|
172
|
+
validateBoundRepository(raw, this.#config.workspace.repositoryId);
|
|
173
|
+
const job = jobRecord(raw);
|
|
174
|
+
const kind = typeof job.kind === "string" ? job.kind.toLowerCase() : "";
|
|
175
|
+
const status = typeof job.status === "string" ? job.status.toLowerCase() : "";
|
|
176
|
+
const diagnostics = (kind === "analysis" || (kind === "check" && ["succeeded", "completed"].includes(status)))
|
|
177
|
+
? await this.#checkDiagnostics(jobId)
|
|
178
|
+
: undefined;
|
|
179
|
+
return checked(projectJob(raw, diagnostics));
|
|
180
|
+
}
|
|
181
|
+
async #checkDiagnostics(jobId) {
|
|
182
|
+
const items = [];
|
|
183
|
+
let cursor = 0;
|
|
184
|
+
let total;
|
|
185
|
+
let nextCursor = null;
|
|
186
|
+
let pages = 0;
|
|
187
|
+
while (items.length < MAX_RETURNED_DIAGNOSTICS && pages < 4) {
|
|
188
|
+
pages += 1;
|
|
189
|
+
const page = await this.#api.jobDiagnostics(jobId, cursor, Math.min(500, MAX_RETURNED_DIAGNOSTICS - items.length));
|
|
190
|
+
const body = object(page.data) ?? page;
|
|
191
|
+
const pageItems = Array.isArray(body.items) ? body.items : [];
|
|
192
|
+
items.push(...pageItems.slice(0, MAX_RETURNED_DIAGNOSTICS - items.length));
|
|
193
|
+
total = nonnegativeInteger(body.total) ?? total;
|
|
194
|
+
const candidate = body.nextCursor === null ? null : nonnegativeInteger(body.nextCursor);
|
|
195
|
+
if (candidate === null || candidate === undefined || candidate <= cursor) {
|
|
196
|
+
nextCursor = null;
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
nextCursor = candidate;
|
|
200
|
+
cursor = candidate;
|
|
201
|
+
}
|
|
202
|
+
if (pages === 4 && nextCursor !== null) {
|
|
203
|
+
nextCursor = cursor;
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
items,
|
|
207
|
+
total: total ?? items.length,
|
|
208
|
+
nextCursor,
|
|
209
|
+
truncated: nextCursor !== null ||
|
|
210
|
+
(total !== undefined && total > items.length),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
async translate(checkJobId, projectId) {
|
|
214
|
+
await this.#repository();
|
|
215
|
+
const raw = await this.#api.createTranslationJob(checkJobId, projectId, this.#newAttemptId());
|
|
216
|
+
validateBoundRepository(raw, this.#config.workspace.repositoryId);
|
|
217
|
+
requireResourceId(raw, ["job", "translationJob"], ["jobId", "id"]);
|
|
218
|
+
return checked(projectJob(raw));
|
|
219
|
+
}
|
|
220
|
+
async verify(translationJobId, expectedPolicySetDigest) {
|
|
221
|
+
await this.#repository();
|
|
222
|
+
const raw = await this.#api.createVerificationJob(translationJobId, expectedPolicySetDigest, this.#newAttemptId());
|
|
223
|
+
validateBoundRepository(raw, this.#config.workspace.repositoryId);
|
|
224
|
+
requireResourceId(raw, ["job", "verificationJob"], ["jobId", "id"]);
|
|
225
|
+
return checked(projectJob(raw));
|
|
226
|
+
}
|
|
227
|
+
async getPolicy(policyUnitId) {
|
|
228
|
+
await this.#repository();
|
|
229
|
+
if (!policyUnitId) {
|
|
230
|
+
return checked(projectPolicyUnits(await this.#api.policyUnits(this.#config.workspace.repositoryId)));
|
|
231
|
+
}
|
|
232
|
+
return checked(projectPolicy(await this.#api.policyUnit(policyUnitId)));
|
|
233
|
+
}
|
|
234
|
+
async proposePolicy(input) {
|
|
235
|
+
await this.#repository();
|
|
236
|
+
const attemptId = this.#newAttemptId();
|
|
237
|
+
const draft = await this.#api.createPolicyDraft(input.policyUnitId, input.expectedPolicySetDigest, attemptId);
|
|
238
|
+
const draftId = requireResourceId(draft, ["draft"], ["draftId", "id"]);
|
|
239
|
+
const revision = await this.#api.createPolicyRevision(draftId, input.expectedPolicySetDigest, input.policy, input.rationale, attemptId);
|
|
240
|
+
const revisionId = requireResourceId(revision, ["revision"], ["revisionId", "id"]);
|
|
241
|
+
const validation = await this.#api.validatePolicyRevision(revisionId, attemptId);
|
|
242
|
+
const validationInput = object(validation.validation) ?? validation;
|
|
243
|
+
const diff = await this.#api.policyRevisionDiff(revisionId);
|
|
244
|
+
const approvalEligible = validationInput.status === "valid_complete" &&
|
|
245
|
+
validationInput.approvalEligible === true;
|
|
246
|
+
if (!approvalEligible) {
|
|
247
|
+
return checked(projectPolicyProposal({
|
|
248
|
+
draft,
|
|
249
|
+
revision,
|
|
250
|
+
validation,
|
|
251
|
+
diff,
|
|
252
|
+
submitted: false,
|
|
253
|
+
}));
|
|
254
|
+
}
|
|
255
|
+
const submission = await this.#api.submitPolicyRevision(revisionId, input.expectedPolicySetDigest, attemptId);
|
|
256
|
+
return checked(projectPolicyProposal({
|
|
257
|
+
draft,
|
|
258
|
+
revision,
|
|
259
|
+
validation,
|
|
260
|
+
diff,
|
|
261
|
+
submission,
|
|
262
|
+
submitted: true,
|
|
263
|
+
}));
|
|
264
|
+
}
|
|
265
|
+
async cancelJob(jobId) {
|
|
266
|
+
await this.#repository();
|
|
267
|
+
const raw = await this.#api.cancelJob(jobId);
|
|
268
|
+
validateBoundRepository(raw, this.#config.workspace.repositoryId);
|
|
269
|
+
return checked(projectJob(raw));
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AgentRuntimeConfig, ConfigFileShape } from "./types.js";
|
|
2
|
+
export declare function projectConfigPath(root: string, environment?: NodeJS.ProcessEnv): string;
|
|
3
|
+
export declare function writeProjectConfig(path: string, value: ConfigFileShape): Promise<void>;
|
|
4
|
+
export declare function updateProjectState(config: AgentRuntimeConfig, state: {
|
|
5
|
+
workspaceId?: string;
|
|
6
|
+
previousRevisionId?: string;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export type RuntimeConfigOverrides = {
|
|
9
|
+
baseUrl?: string;
|
|
10
|
+
tokenFromStdin?: string;
|
|
11
|
+
workspaceRoot?: string;
|
|
12
|
+
repositoryId?: string;
|
|
13
|
+
baseCommitSha?: string;
|
|
14
|
+
configPath?: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function readConfigFile(configPath: string | undefined): Promise<ConfigFileShape>;
|
|
17
|
+
export declare function parseBaseUrl(raw: string): URL;
|
|
18
|
+
export declare function resolveRuntimeConfig(overrides: RuntimeConfigOverrides, environment?: NodeJS.ProcessEnv): Promise<AgentRuntimeConfig>;
|
|
19
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EAChB,MAAM,YAAY,CAAC;AAGpB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAGpG;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAO5F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAShJ;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAA;AAkBD,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,GAAG,SAAS,GAC7B,OAAO,CAAC,eAAe,CAAC,CA4E1B;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CA+B7C;AAYD,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,sBAAsB,EACjC,WAAW,GAAE,MAAM,CAAC,UAAwB,GAC3C,OAAO,CAAC,kBAAkB,CAAC,CA+D7B"}
|