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/config.js
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { mkdir, readFile, rename, rm, stat, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { Me2lonClientError } from "./errors.js";
|
|
6
|
+
import { bindWorkspace, discoverWorkspace } from "./workspace-source.js";
|
|
7
|
+
export function projectConfigPath(root, environment = process.env) {
|
|
8
|
+
return join(environment.XDG_CONFIG_HOME || join(homedir(), ".config"), "me2lon", "projects", `${createHash("sha256").update(root).digest("hex")}.json`);
|
|
9
|
+
}
|
|
10
|
+
export async function writeProjectConfig(path, value) {
|
|
11
|
+
await mkdir(dirname(path), { recursive: true, mode: 0o700 });
|
|
12
|
+
const temporary = `${path}.${randomBytes(8).toString("hex")}.tmp`;
|
|
13
|
+
try {
|
|
14
|
+
await writeFile(temporary, `${JSON.stringify(value, null, 2)}\n`, { flag: "wx", mode: 0o600 });
|
|
15
|
+
await rename(temporary, path);
|
|
16
|
+
}
|
|
17
|
+
finally {
|
|
18
|
+
await rm(temporary, { force: true });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export async function updateProjectState(config, state) {
|
|
22
|
+
if (!config.configPath || config.sourceFormat !== "snapshot")
|
|
23
|
+
return;
|
|
24
|
+
const current = await readConfigFile(config.configPath);
|
|
25
|
+
if (current.repositoryId !== config.workspace.repositoryId || current.workspaceRoot !== config.workspace.root ||
|
|
26
|
+
current.baseUrl !== config.baseUrl.origin || current.credentialId !== config.credentialId) {
|
|
27
|
+
throw new Me2lonClientError("ME2LON_CONFIG_CHANGED", "The project connection changed; restart the client.");
|
|
28
|
+
}
|
|
29
|
+
await writeProjectConfig(config.configPath, { ...current, ...state });
|
|
30
|
+
Object.assign(config, state);
|
|
31
|
+
}
|
|
32
|
+
function optionalNonEmptyString(value, field) {
|
|
33
|
+
if (value === undefined) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
37
|
+
throw new Me2lonClientError("ME2LON_CONFIG_INVALID", `Configuration field ${field} must be a non-empty string.`);
|
|
38
|
+
}
|
|
39
|
+
return value.trim();
|
|
40
|
+
}
|
|
41
|
+
export async function readConfigFile(configPath) {
|
|
42
|
+
if (!configPath) {
|
|
43
|
+
return {};
|
|
44
|
+
}
|
|
45
|
+
const absolutePath = resolve(configPath);
|
|
46
|
+
let metadata;
|
|
47
|
+
try {
|
|
48
|
+
metadata = await stat(absolutePath);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
throw new Me2lonClientError("ME2LON_CONFIG_UNREADABLE", `Cannot read the Me2lon configuration file at ${absolutePath}.`, { cause: error });
|
|
52
|
+
}
|
|
53
|
+
if (!metadata.isFile()) {
|
|
54
|
+
throw new Me2lonClientError("ME2LON_CONFIG_INVALID", `The Me2lon configuration path is not a regular file: ${absolutePath}.`);
|
|
55
|
+
}
|
|
56
|
+
if (process.platform !== "win32" && (metadata.mode & 0o077) !== 0) {
|
|
57
|
+
throw new Me2lonClientError("ME2LON_CONFIG_PERMISSIONS", "The Me2lon configuration file contains credentials and must not be accessible by group or other users (use mode 0600).");
|
|
58
|
+
}
|
|
59
|
+
let parsed;
|
|
60
|
+
try {
|
|
61
|
+
parsed = JSON.parse(await readFile(absolutePath, "utf8"));
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
throw new Me2lonClientError("ME2LON_CONFIG_INVALID", "The Me2lon configuration file must contain valid JSON.", { cause: error });
|
|
65
|
+
}
|
|
66
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
67
|
+
throw new Me2lonClientError("ME2LON_CONFIG_INVALID", "The Me2lon configuration file must contain a JSON object.");
|
|
68
|
+
}
|
|
69
|
+
const record = parsed;
|
|
70
|
+
const result = {};
|
|
71
|
+
const baseUrl = optionalNonEmptyString(record.baseUrl, "baseUrl");
|
|
72
|
+
const token = optionalNonEmptyString(record.token, "token");
|
|
73
|
+
const workspaceRoot = optionalNonEmptyString(record.workspaceRoot, "workspaceRoot");
|
|
74
|
+
const repositoryId = optionalNonEmptyString(record.repositoryId, "repositoryId");
|
|
75
|
+
const baseCommitSha = optionalNonEmptyString(record.baseCommitSha, "baseCommitSha");
|
|
76
|
+
if (baseUrl)
|
|
77
|
+
result.baseUrl = baseUrl;
|
|
78
|
+
if (token)
|
|
79
|
+
result.token = token;
|
|
80
|
+
if (workspaceRoot)
|
|
81
|
+
result.workspaceRoot = workspaceRoot;
|
|
82
|
+
if (repositoryId)
|
|
83
|
+
result.repositoryId = repositoryId;
|
|
84
|
+
if (baseCommitSha)
|
|
85
|
+
result.baseCommitSha = baseCommitSha;
|
|
86
|
+
if (record.sourceFormat !== undefined) {
|
|
87
|
+
if (record.sourceFormat !== "snapshot")
|
|
88
|
+
throw new Me2lonClientError("ME2LON_CONFIG_INVALID", "Unknown source format.");
|
|
89
|
+
result.sourceFormat = "snapshot";
|
|
90
|
+
}
|
|
91
|
+
for (const field of ["credentialId", "workspaceId", "previousRevisionId"]) {
|
|
92
|
+
const value = optionalNonEmptyString(record[field], field);
|
|
93
|
+
if (value !== undefined)
|
|
94
|
+
result[field] = value;
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
export function parseBaseUrl(raw) {
|
|
99
|
+
let url;
|
|
100
|
+
try {
|
|
101
|
+
url = new URL(raw);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
throw new Me2lonClientError("ME2LON_CONFIG_INVALID", "The Me2lon API URL is invalid.", { cause: error });
|
|
105
|
+
}
|
|
106
|
+
if (url.username || url.password || url.search || url.hash) {
|
|
107
|
+
throw new Me2lonClientError("ME2LON_CONFIG_INVALID", "The Me2lon API URL cannot contain credentials, a query, or a fragment.");
|
|
108
|
+
}
|
|
109
|
+
if (url.pathname !== "/") {
|
|
110
|
+
throw new Me2lonClientError("ME2LON_CONFIG_INVALID", "The Me2lon API URL must be an origin without a path.");
|
|
111
|
+
}
|
|
112
|
+
const loopback = new Set(["localhost", "127.0.0.1", "[::1]"]);
|
|
113
|
+
if (url.protocol !== "https:" && !(url.protocol === "http:" && loopback.has(url.hostname))) {
|
|
114
|
+
throw new Me2lonClientError("ME2LON_INSECURE_URL", "The Me2lon API URL must use HTTPS (HTTP is accepted only for loopback development).");
|
|
115
|
+
}
|
|
116
|
+
return url;
|
|
117
|
+
}
|
|
118
|
+
function required(value, label) {
|
|
119
|
+
if (!value) {
|
|
120
|
+
throw new Me2lonClientError("ME2LON_CONFIG_MISSING", `Missing ${label}.`);
|
|
121
|
+
}
|
|
122
|
+
return value;
|
|
123
|
+
}
|
|
124
|
+
export async function resolveRuntimeConfig(overrides, environment = process.env) {
|
|
125
|
+
let configPath = overrides.configPath ?? environment.ME2LON_AGENT_CONFIG;
|
|
126
|
+
if (!configPath) {
|
|
127
|
+
const workspace = await discoverWorkspace(overrides.workspaceRoot ?? environment.ME2LON_WORKSPACE_ROOT ?? process.cwd());
|
|
128
|
+
const candidate = projectConfigPath(workspace.root, environment);
|
|
129
|
+
try {
|
|
130
|
+
await stat(candidate);
|
|
131
|
+
configPath = candidate;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error.code !== "ENOENT")
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const file = await readConfigFile(configPath);
|
|
139
|
+
const token = overrides.tokenFromStdin?.trim() ||
|
|
140
|
+
environment.ME2LON_AGENT_TOKEN?.trim() ||
|
|
141
|
+
file.token?.trim();
|
|
142
|
+
if (!token) {
|
|
143
|
+
throw new Me2lonClientError("ME2LON_TOKEN_MISSING", "Run me2lon setup to connect this project. Existing tokens can also use ME2LON_AGENT_TOKEN, a protected config file, or --token-stdin.");
|
|
144
|
+
}
|
|
145
|
+
if (token.length > 8_192 || /[\r\n]/u.test(token)) {
|
|
146
|
+
throw new Me2lonClientError("ME2LON_TOKEN_INVALID", "The Me2lon agent token has an invalid shape.");
|
|
147
|
+
}
|
|
148
|
+
const baseUrl = parseBaseUrl(required(overrides.baseUrl ?? environment.ME2LON_AGENT_URL ?? file.baseUrl, "Me2lon API URL (--base-url or ME2LON_AGENT_URL)"));
|
|
149
|
+
const root = overrides.workspaceRoot ??
|
|
150
|
+
environment.ME2LON_WORKSPACE_ROOT ??
|
|
151
|
+
file.workspaceRoot ??
|
|
152
|
+
process.cwd();
|
|
153
|
+
const repositoryId = required(overrides.repositoryId ??
|
|
154
|
+
environment.ME2LON_REPOSITORY_ID ??
|
|
155
|
+
file.repositoryId, "repository id (--repository-id or ME2LON_REPOSITORY_ID)");
|
|
156
|
+
if (file.sourceFormat === "snapshot" && (overrides.baseCommitSha || environment.ME2LON_BASE_COMMIT)) {
|
|
157
|
+
throw new Me2lonClientError("ME2LON_CONFIG_INVALID", "Full snapshots capture the current HEAD; remove the base-commit override.");
|
|
158
|
+
}
|
|
159
|
+
const baseCommitSha = file.sourceFormat === "snapshot" ? (await discoverWorkspace(root)).head : required(overrides.baseCommitSha ??
|
|
160
|
+
environment.ME2LON_BASE_COMMIT ??
|
|
161
|
+
file.baseCommitSha, "exact base commit (--base-commit or ME2LON_BASE_COMMIT)");
|
|
162
|
+
return {
|
|
163
|
+
baseUrl,
|
|
164
|
+
token,
|
|
165
|
+
workspace: await bindWorkspace(root, repositoryId, baseCommitSha),
|
|
166
|
+
...(configPath ? { configPath: resolve(configPath) } : {}),
|
|
167
|
+
...(file.sourceFormat ? { sourceFormat: file.sourceFormat } : {}),
|
|
168
|
+
...(file.credentialId ? { credentialId: file.credentialId } : {}),
|
|
169
|
+
...(file.workspaceId ? { workspaceId: file.workspaceId } : {}),
|
|
170
|
+
...(file.previousRevisionId ? { previousRevisionId: file.previousRevisionId } : {}),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class Me2lonClientError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
constructor(code: string, message: string, options?: ErrorOptions);
|
|
4
|
+
}
|
|
5
|
+
export declare class Me2lonApiError extends Me2lonClientError {
|
|
6
|
+
readonly status: number;
|
|
7
|
+
readonly requestId?: string;
|
|
8
|
+
constructor(status: number, requestId?: string);
|
|
9
|
+
}
|
|
10
|
+
export declare function publicError(error: unknown): {
|
|
11
|
+
code: string;
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAKlE;AAED,qBAAa,cAAe,SAAQ,iBAAiB;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEhB,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAY/C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAQA"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export class Me2lonClientError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
constructor(code, message, options) {
|
|
4
|
+
super(message, options);
|
|
5
|
+
this.name = "Me2lonClientError";
|
|
6
|
+
this.code = code;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class Me2lonApiError extends Me2lonClientError {
|
|
10
|
+
status;
|
|
11
|
+
requestId;
|
|
12
|
+
constructor(status, requestId) {
|
|
13
|
+
const requestSuffix = requestId ? `; request ${requestId}` : "";
|
|
14
|
+
super(status === 401 ? "ME2LON_AUTHENTICATION_REQUIRED" : "ME2LON_API_ERROR", status === 401 ? "Me2lon authentication expired or was revoked. Run me2lon setup, then retry." : `Me2lon API request failed with HTTP ${status}${requestSuffix}.`);
|
|
15
|
+
this.name = "Me2lonApiError";
|
|
16
|
+
this.status = status;
|
|
17
|
+
if (requestId) {
|
|
18
|
+
this.requestId = requestId;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function publicError(error) {
|
|
23
|
+
if (error instanceof Me2lonClientError) {
|
|
24
|
+
return { code: error.code, message: error.message };
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
code: "ME2LON_CLIENT_FAILURE",
|
|
28
|
+
message: "The Me2lon client could not complete the request.",
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,CAAS;IAEtB,YAAY,IAAY,EAAE,OAAe,EAAE,OAAsB;QAC/D,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,iBAAiB;IAC1C,MAAM,CAAS;IACf,SAAS,CAAU;IAE5B,YAAY,MAAc,EAAE,SAAkB;QAC5C,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,KAAK,CACH,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,kBAAkB,EACtE,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,6EAA6E,CAAC,CAAC,CAAC,uCAAuC,MAAM,GAAG,aAAa,GAAG,CAClK,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7B,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IAIxC,IAAI,KAAK,YAAY,iBAAiB,EAAE,CAAC;QACvC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;IACD,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,mDAAmD;KAC7D,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Me2lonAgentApi, idempotencyKey, mutationAttemptId, } from "./api.js";
|
|
2
|
+
export { Me2lonAgentClient, type PolicyProposalInput } from "./client.js";
|
|
3
|
+
export { readConfigFile, resolveRuntimeConfig, type RuntimeConfigOverrides, } from "./config.js";
|
|
4
|
+
export { Me2lonApiError, Me2lonClientError } from "./errors.js";
|
|
5
|
+
export { assertNoForbiddenOutput, projectCapabilities, projectJob, projectPolicy, projectPolicyProposal, projectPolicyUnits, projectPolicyValidation, safeJsonText, } from "./safe-output.js";
|
|
6
|
+
export { LOCAL_SOURCE_LIMITS, SOURCE_SCHEMA_VERSION, type AgentRuntimeConfig, type BoundWorkspace, type ConfigFileShape, type DeleteChange, type JsonValue, type ReplaceChange, type SafeToolResult, type SourceChange, type SourceLimits, type WorkspaceSource, } from "./types.js";
|
|
7
|
+
export { bindWorkspace, buildWorkspaceSource } from "./workspace-source.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Me2lonAgentApi, idempotencyKey, mutationAttemptId, } from "./api.js";
|
|
2
|
+
export { Me2lonAgentClient } from "./client.js";
|
|
3
|
+
export { readConfigFile, resolveRuntimeConfig, } from "./config.js";
|
|
4
|
+
export { Me2lonApiError, Me2lonClientError } from "./errors.js";
|
|
5
|
+
export { assertNoForbiddenOutput, projectCapabilities, projectJob, projectPolicy, projectPolicyProposal, projectPolicyUnits, projectPolicyValidation, safeJsonText, } from "./safe-output.js";
|
|
6
|
+
export { LOCAL_SOURCE_LIMITS, SOURCE_SCHEMA_VERSION, } from "./types.js";
|
|
7
|
+
export { bindWorkspace, buildWorkspaceSource } from "./workspace-source.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EACd,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,iBAAiB,EAA4B,MAAM,aAAa,CAAC;AAC1E,OAAO,EACL,cAAc,EACd,oBAAoB,GAErB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EACL,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,YAAY,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GAWtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SafeToolResult, JsonValue } from './types.js';
|
|
2
|
+
export declare function humanOutput(value: JsonValue, depth?: number): string;
|
|
3
|
+
export declare function waitForJob(initial: SafeToolResult, getJob: (id: string) => Promise<SafeToolResult>, options: {
|
|
4
|
+
timeoutMs: number;
|
|
5
|
+
signal?: AbortSignal;
|
|
6
|
+
notify: (message: string) => void;
|
|
7
|
+
intervalMs?: number;
|
|
8
|
+
}): Promise<{
|
|
9
|
+
result: SafeToolResult;
|
|
10
|
+
exitCode: number;
|
|
11
|
+
}>;
|
|
12
|
+
//# sourceMappingURL=presentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation.d.ts","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5D,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,SAAI,GAAG,MAAM,CAK/D;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE;IAClH,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAyBxD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Me2lonClientError } from "./errors.js";
|
|
2
|
+
export function humanOutput(value, depth = 0) {
|
|
3
|
+
if (value === null)
|
|
4
|
+
return 'none';
|
|
5
|
+
if (typeof value !== 'object')
|
|
6
|
+
return String(value);
|
|
7
|
+
const entries = Array.isArray(value) ? value.map((item, i) => [String(i + 1), item]) : Object.entries(value);
|
|
8
|
+
return entries.map(([key, item]) => `${' '.repeat(depth)}${key}: ${item !== null && typeof item === 'object' ? '\n' + humanOutput(item, depth + 1) : String(item)}`).join('\n');
|
|
9
|
+
}
|
|
10
|
+
export async function waitForJob(initial, getJob, options) {
|
|
11
|
+
let result = initial;
|
|
12
|
+
const id = result.id ?? result.jobId;
|
|
13
|
+
if (typeof id !== 'string')
|
|
14
|
+
throw new Me2lonClientError("ME2LON_CLIENT_INPUT", 'The server did not return a job ID.');
|
|
15
|
+
const deadline = Date.now() + options.timeoutMs;
|
|
16
|
+
let previousProgress = "";
|
|
17
|
+
const resume = `Resume: me2lon get-job --job-id ${id} --wait`;
|
|
18
|
+
for (;;) {
|
|
19
|
+
if (result.jobStatus === 'succeeded')
|
|
20
|
+
return { result, exitCode: 0 };
|
|
21
|
+
if (result.jobStatus === 'failed' || result.jobStatus === 'canceled')
|
|
22
|
+
return { result, exitCode: 1 };
|
|
23
|
+
if (options.signal?.aborted) {
|
|
24
|
+
options.notify(resume);
|
|
25
|
+
return { result, exitCode: 130 };
|
|
26
|
+
}
|
|
27
|
+
if (Date.now() >= deadline) {
|
|
28
|
+
options.notify(resume);
|
|
29
|
+
return { result, exitCode: 124 };
|
|
30
|
+
}
|
|
31
|
+
if (result.jobStatus !== 'queued' && result.jobStatus !== 'running')
|
|
32
|
+
throw new Me2lonClientError("ME2LON_CLIENT_INPUT", 'Unknown job lifecycle status.');
|
|
33
|
+
const progress = result.progress;
|
|
34
|
+
const stage = progress && typeof progress === 'object' && !Array.isArray(progress) ? progress.stage : undefined;
|
|
35
|
+
const completed = progress && typeof progress === 'object' && !Array.isArray(progress) ? progress.completedStages : undefined;
|
|
36
|
+
const message = `Job ${id}: ${result.jobStatus}${typeof stage === 'string' ? ` — ${stage}` : ''}${typeof completed === 'number' ? ` (${completed} stages completed)` : ''}`;
|
|
37
|
+
if (message !== previousProgress) {
|
|
38
|
+
options.notify(message);
|
|
39
|
+
previousProgress = message;
|
|
40
|
+
}
|
|
41
|
+
await new Promise((resolve) => {
|
|
42
|
+
const done = () => { clearTimeout(timer); options.signal?.removeEventListener('abort', done); resolve(); };
|
|
43
|
+
const timer = setTimeout(done, Math.min(options.intervalMs ?? 5000, deadline - Date.now()));
|
|
44
|
+
options.signal?.addEventListener('abort', done, { once: true });
|
|
45
|
+
});
|
|
46
|
+
if (!options.signal?.aborted && Date.now() < deadline)
|
|
47
|
+
result = await getJob(id);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=presentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentation.js","sourceRoot":"","sources":["../src/presentation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SafeToolResult } from "./types.js";
|
|
2
|
+
export declare function requireResourceId(raw: Record<string, unknown>, preferredContainers: string[], idNames: string[]): string;
|
|
3
|
+
export declare function projectCapabilities(raw: Record<string, unknown>, repository: Record<string, unknown> | undefined): SafeToolResult;
|
|
4
|
+
export declare function projectJob(raw: Record<string, unknown>, diagnosticsResponse?: Record<string, unknown>): SafeToolResult;
|
|
5
|
+
export declare function projectPolicyUnits(raw: Record<string, unknown>): SafeToolResult;
|
|
6
|
+
export declare function projectPolicy(raw: Record<string, unknown>): SafeToolResult;
|
|
7
|
+
export declare function projectResource(raw: Record<string, unknown>, containers: string[]): SafeToolResult;
|
|
8
|
+
export declare function projectPolicyValidation(raw: Record<string, unknown>): SafeToolResult;
|
|
9
|
+
export declare function projectPolicyProposal(parts: {
|
|
10
|
+
draft: Record<string, unknown>;
|
|
11
|
+
revision: Record<string, unknown>;
|
|
12
|
+
validation: Record<string, unknown>;
|
|
13
|
+
diff: Record<string, unknown>;
|
|
14
|
+
submission?: Record<string, unknown>;
|
|
15
|
+
submitted: boolean;
|
|
16
|
+
}): SafeToolResult;
|
|
17
|
+
export declare function repositoryFromList(raw: Record<string, unknown>, repositoryId: string): Record<string, unknown> | undefined;
|
|
18
|
+
export declare function safeJsonText(result: SafeToolResult): string;
|
|
19
|
+
export declare function assertNoForbiddenOutput(result: SafeToolResult): void;
|
|
20
|
+
//# sourceMappingURL=safe-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-output.d.ts","sourceRoot":"","sources":["../src/safe-output.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAa,cAAc,EAAE,MAAM,YAAY,CAAC;AA6F5D,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,mBAAmB,EAAE,MAAM,EAAE,EAC7B,OAAO,EAAE,MAAM,EAAE,GAChB,MAAM,CA2BR;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC9C,cAAc,CAgFhB;AAiRD,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5C,cAAc,CAsIhB;AA4CD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAa/E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAM1E;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,UAAU,EAAE,MAAM,EAAE,GACnB,cAAc,CAoChB;AAED,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,cAAc,CAsBhB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC;CACpB,GAAG,cAAc,CA8BjB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,YAAY,EAAE,MAAM,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAerC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAE3D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAQpE"}
|