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.
Files changed (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +62 -2
  3. package/dist/api.d.ts +35 -0
  4. package/dist/api.d.ts.map +1 -0
  5. package/dist/api.js +286 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/cli.d.ts +4 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +261 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/client.d.ts +23 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +272 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/config.d.ts +19 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +173 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/errors.d.ts +14 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +31 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/index.d.ts +8 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +8 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/presentation.d.ts +12 -0
  28. package/dist/presentation.d.ts.map +1 -0
  29. package/dist/presentation.js +50 -0
  30. package/dist/presentation.js.map +1 -0
  31. package/dist/safe-output.d.ts +20 -0
  32. package/dist/safe-output.d.ts.map +1 -0
  33. package/dist/safe-output.js +770 -0
  34. package/dist/safe-output.js.map +1 -0
  35. package/dist/setup.d.ts +14 -0
  36. package/dist/setup.d.ts.map +1 -0
  37. package/dist/setup.js +92 -0
  38. package/dist/setup.js.map +1 -0
  39. package/dist/skill.d.ts +2 -0
  40. package/dist/skill.d.ts.map +1 -0
  41. package/dist/skill.js +30 -0
  42. package/dist/skill.js.map +1 -0
  43. package/dist/types.d.ts +76 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +8 -0
  46. package/dist/types.js.map +1 -0
  47. package/dist/workspace-source.d.ts +11 -0
  48. package/dist/workspace-source.d.ts.map +1 -0
  49. package/dist/workspace-source.js +387 -0
  50. package/dist/workspace-source.js.map +1 -0
  51. package/package.json +43 -4
  52. package/skill/LICENSE +21 -0
  53. package/skill/SKILL.md +18 -0
  54. package/src/api.ts +426 -0
  55. package/src/cli.ts +305 -0
  56. package/src/client.ts +413 -0
  57. package/src/config.ts +252 -0
  58. package/src/errors.ts +40 -0
  59. package/src/index.ts +37 -0
  60. package/src/presentation.ts +39 -0
  61. package/src/safe-output.ts +826 -0
  62. package/src/setup.ts +95 -0
  63. package/src/skill.ts +22 -0
  64. package/src/types.ts +85 -0
  65. package/src/workspace-source.ts +526 -0
  66. package/tsconfig.build.json +18 -0
  67. 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -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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"}
@@ -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"}