@evref-bl/plexus-core 0.1.0-alpha.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/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +164 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +62 -0
- package/dist/config.js.map +1 -0
- package/dist/imageRescue.d.ts +136 -0
- package/dist/imageRescue.d.ts.map +1 -0
- package/dist/imageRescue.js +686 -0
- package/dist/imageRescue.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/pathStyle.d.ts +10 -0
- package/dist/pathStyle.d.ts.map +1 -0
- package/dist/pathStyle.js +33 -0
- package/dist/pathStyle.js.map +1 -0
- package/dist/pharoLauncherMcpClient.d.ts +12 -0
- package/dist/pharoLauncherMcpClient.d.ts.map +1 -0
- package/dist/pharoLauncherMcpClient.js +74 -0
- package/dist/pharoLauncherMcpClient.js.map +1 -0
- package/dist/pharoMcpHealth.d.ts +22 -0
- package/dist/pharoMcpHealth.d.ts.map +1 -0
- package/dist/pharoMcpHealth.js +80 -0
- package/dist/pharoMcpHealth.js.map +1 -0
- package/dist/projectClose.d.ts +28 -0
- package/dist/projectClose.d.ts.map +1 -0
- package/dist/projectClose.js +93 -0
- package/dist/projectClose.js.map +1 -0
- package/dist/projectConfig.d.ts +44 -0
- package/dist/projectConfig.d.ts.map +1 -0
- package/dist/projectConfig.js +208 -0
- package/dist/projectConfig.js.map +1 -0
- package/dist/projectLifecycle.d.ts +115 -0
- package/dist/projectLifecycle.d.ts.map +1 -0
- package/dist/projectLifecycle.js +495 -0
- package/dist/projectLifecycle.js.map +1 -0
- package/dist/projectOpen.d.ts +49 -0
- package/dist/projectOpen.d.ts.map +1 -0
- package/dist/projectOpen.js +218 -0
- package/dist/projectOpen.js.map +1 -0
- package/dist/projectStartupScript.d.ts +56 -0
- package/dist/projectStartupScript.d.ts.map +1 -0
- package/dist/projectStartupScript.js +150 -0
- package/dist/projectStartupScript.js.map +1 -0
- package/dist/projectState.d.ts +128 -0
- package/dist/projectState.d.ts.map +1 -0
- package/dist/projectState.js +192 -0
- package/dist/projectState.js.map +1 -0
- package/dist/scopedPharoLauncherServer.d.ts +87 -0
- package/dist/scopedPharoLauncherServer.d.ts.map +1 -0
- package/dist/scopedPharoLauncherServer.js +186 -0
- package/dist/scopedPharoLauncherServer.js.map +1 -0
- package/dist/scopedProjectContext.d.ts +93 -0
- package/dist/scopedProjectContext.d.ts.map +1 -0
- package/dist/scopedProjectContext.js +181 -0
- package/dist/scopedProjectContext.js.map +1 -0
- package/dist/server.d.ts +42 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +133 -0
- package/dist/server.js.map +1 -0
- package/dist/target.d.ts +19 -0
- package/dist/target.d.ts.map +1 -0
- package/dist/target.js +2 -0
- package/dist/target.js.map +1 -0
- package/dist/workspaceMcpConfig.d.ts +42 -0
- package/dist/workspaceMcpConfig.d.ts.map +1 -0
- package/dist/workspaceMcpConfig.js +79 -0
- package/dist/workspaceMcpConfig.js.map +1 -0
- package/package.json +37 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import { joinPathLike } from "./pathStyle.js";
|
|
3
|
+
export const plexusProjectConfigFileName = "plexus.project.json";
|
|
4
|
+
export class ProjectConfigError extends Error {
|
|
5
|
+
issues;
|
|
6
|
+
constructor(message, issues) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.issues = issues;
|
|
9
|
+
this.name = "ProjectConfigError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function isObject(value) {
|
|
13
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
14
|
+
}
|
|
15
|
+
function stringField(object, key, issues, pathPrefix) {
|
|
16
|
+
const value = object[key];
|
|
17
|
+
if (typeof value === "string" && value.trim().length > 0) {
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
issues.push(`${pathPrefix}.${key} must be a non-empty string`);
|
|
21
|
+
return "";
|
|
22
|
+
}
|
|
23
|
+
function booleanField(object, key, issues, pathPrefix) {
|
|
24
|
+
const value = object[key];
|
|
25
|
+
if (typeof value === "boolean") {
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
issues.push(`${pathPrefix}.${key} must be a boolean`);
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
function optionalPortField(object, key, issues, pathPrefix) {
|
|
32
|
+
const value = object[key];
|
|
33
|
+
if (value === undefined) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
if (typeof value === "number" &&
|
|
37
|
+
Number.isInteger(value) &&
|
|
38
|
+
value >= 1 &&
|
|
39
|
+
value <= 65_535) {
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
issues.push(`${pathPrefix}.${key} must be an integer between 1 and 65535`);
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
function parseKanban(value, issues) {
|
|
46
|
+
if (!isObject(value)) {
|
|
47
|
+
issues.push("kanban must be an object");
|
|
48
|
+
return { provider: "vibe-kanban", projectId: "" };
|
|
49
|
+
}
|
|
50
|
+
const provider = value.provider;
|
|
51
|
+
if (provider !== "vibe-kanban") {
|
|
52
|
+
issues.push("kanban.provider must be \"vibe-kanban\"");
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
provider: "vibe-kanban",
|
|
56
|
+
projectId: stringField(value, "projectId", issues, "kanban"),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function parseImageMcp(value, issues, pathPrefix) {
|
|
60
|
+
if (!isObject(value)) {
|
|
61
|
+
issues.push(`${pathPrefix}.mcp must be an object`);
|
|
62
|
+
return { loadScript: "" };
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
port: optionalPortField(value, "port", issues, `${pathPrefix}.mcp`),
|
|
66
|
+
loadScript: stringField(value, "loadScript", issues, `${pathPrefix}.mcp`),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function parseImageSshConfig(value, issues, pathPrefix) {
|
|
70
|
+
if (value === undefined) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
if (!isObject(value)) {
|
|
74
|
+
issues.push(`${pathPrefix}.ssh must be an object`);
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
publicKey: stringField(value, "publicKey", issues, `${pathPrefix}.ssh`),
|
|
79
|
+
privateKey: stringField(value, "privateKey", issues, `${pathPrefix}.ssh`),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function parseImagePlainCredentialsConfig(value, issues, pathPrefix) {
|
|
83
|
+
if (value === undefined) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
if (!isObject(value)) {
|
|
87
|
+
issues.push(`${pathPrefix}.plainCredentials must be an object`);
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
username: stringField(value, "username", issues, `${pathPrefix}.plainCredentials`),
|
|
92
|
+
password: stringField(value, "password", issues, `${pathPrefix}.plainCredentials`),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function parseImageGit(value, issues, pathPrefix) {
|
|
96
|
+
if (value === undefined) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
if (!isObject(value)) {
|
|
100
|
+
issues.push(`${pathPrefix}.git must be an object`);
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
const transportValue = value.transport ?? "ssh";
|
|
104
|
+
const transport = transportValue === "ssh" ||
|
|
105
|
+
transportValue === "https" ||
|
|
106
|
+
transportValue === "http"
|
|
107
|
+
? transportValue
|
|
108
|
+
: "ssh";
|
|
109
|
+
if (transport !== transportValue) {
|
|
110
|
+
issues.push(`${pathPrefix}.git.transport must be one of ssh, https, http`);
|
|
111
|
+
}
|
|
112
|
+
const ssh = parseImageSshConfig(value.ssh, issues, `${pathPrefix}.git`);
|
|
113
|
+
const plainCredentials = parseImagePlainCredentialsConfig(value.plainCredentials, issues, `${pathPrefix}.git`);
|
|
114
|
+
if (transport === "ssh" && plainCredentials) {
|
|
115
|
+
issues.push(`${pathPrefix}.git.plainCredentials can only be used with https or http`);
|
|
116
|
+
}
|
|
117
|
+
if (transport !== "ssh" && ssh) {
|
|
118
|
+
issues.push(`${pathPrefix}.git.ssh can only be used with ssh`);
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
transport,
|
|
122
|
+
...(ssh ? { ssh } : {}),
|
|
123
|
+
...(plainCredentials ? { plainCredentials } : {}),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function parseImages(value, issues) {
|
|
127
|
+
if (!Array.isArray(value)) {
|
|
128
|
+
issues.push("images must be an array");
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
return value.map((image, index) => {
|
|
132
|
+
const pathPrefix = `images[${index}]`;
|
|
133
|
+
if (!isObject(image)) {
|
|
134
|
+
issues.push(`${pathPrefix} must be an object`);
|
|
135
|
+
return {
|
|
136
|
+
id: "",
|
|
137
|
+
imageName: "",
|
|
138
|
+
active: false,
|
|
139
|
+
mcp: { loadScript: "" },
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
id: stringField(image, "id", issues, pathPrefix),
|
|
144
|
+
imageName: stringField(image, "imageName", issues, pathPrefix),
|
|
145
|
+
active: booleanField(image, "active", issues, pathPrefix),
|
|
146
|
+
mcp: parseImageMcp(image.mcp, issues, pathPrefix),
|
|
147
|
+
git: parseImageGit(image.git, issues, pathPrefix),
|
|
148
|
+
};
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function collectDuplicates(values, label, issues) {
|
|
152
|
+
const seen = new Set();
|
|
153
|
+
for (const value of values) {
|
|
154
|
+
if (!value) {
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
if (seen.has(value)) {
|
|
158
|
+
issues.push(`${label} must be unique: ${value}`);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
seen.add(value);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function collectDuplicatePorts(images, issues) {
|
|
166
|
+
const seen = new Set();
|
|
167
|
+
for (const image of images) {
|
|
168
|
+
const port = image.mcp.port;
|
|
169
|
+
if (!port) {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
if (seen.has(port)) {
|
|
173
|
+
issues.push(`image MCP ports must be unique: ${port}`);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
seen.add(port);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
export function parseProjectConfig(value) {
|
|
181
|
+
const issues = [];
|
|
182
|
+
if (!isObject(value)) {
|
|
183
|
+
throw new ProjectConfigError("Invalid Plexus project config", [
|
|
184
|
+
"config must be an object",
|
|
185
|
+
]);
|
|
186
|
+
}
|
|
187
|
+
const config = {
|
|
188
|
+
name: stringField(value, "name", issues, "config"),
|
|
189
|
+
kanban: parseKanban(value.kanban, issues),
|
|
190
|
+
images: parseImages(value.images, issues),
|
|
191
|
+
};
|
|
192
|
+
collectDuplicates(config.images.map((image) => image.id), "image ids", issues);
|
|
193
|
+
collectDuplicates(config.images.map((image) => image.imageName), "image names", issues);
|
|
194
|
+
collectDuplicatePorts(config.images, issues);
|
|
195
|
+
if (issues.length > 0) {
|
|
196
|
+
throw new ProjectConfigError("Invalid Plexus project config", issues);
|
|
197
|
+
}
|
|
198
|
+
return config;
|
|
199
|
+
}
|
|
200
|
+
export function projectConfigPath(projectRoot) {
|
|
201
|
+
return joinPathLike(projectRoot, plexusProjectConfigFileName);
|
|
202
|
+
}
|
|
203
|
+
export function loadProjectConfig(projectRoot) {
|
|
204
|
+
const filePath = projectConfigPath(projectRoot);
|
|
205
|
+
const raw = fs.readFileSync(filePath, "utf8");
|
|
206
|
+
return parseProjectConfig(JSON.parse(raw));
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=projectConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../src/projectConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { rescueImage, type ImageRescueEntrySelection, type ImageRescueOperation, type ImageRescueRepositoryAction, type ImageRescueResult } from "./imageRescue.js";
|
|
2
|
+
import { closeProject, type ProjectCloseResult } from "./projectClose.js";
|
|
3
|
+
import { openProject, type ProjectOpenResult } from "./projectOpen.js";
|
|
4
|
+
import { type ProjectState } from "./projectState.js";
|
|
5
|
+
export interface ProjectLifecycleRouteReference {
|
|
6
|
+
projectId?: string;
|
|
7
|
+
workspaceId?: string;
|
|
8
|
+
targetId?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ProjectLifecycleRouteRegistration {
|
|
11
|
+
projectRoot: string;
|
|
12
|
+
statePath: string;
|
|
13
|
+
state: ProjectState;
|
|
14
|
+
}
|
|
15
|
+
export interface ProjectLifecycleRouteRegistry {
|
|
16
|
+
registerProjectRoute(input: ProjectLifecycleRouteRegistration): Promise<unknown> | unknown;
|
|
17
|
+
unregisterProjectRoute(input: ProjectLifecycleRouteReference): Promise<unknown> | unknown;
|
|
18
|
+
getRouteStatus?(input: ProjectLifecycleRouteReference & {
|
|
19
|
+
refreshHealth?: boolean;
|
|
20
|
+
}): Promise<unknown> | unknown;
|
|
21
|
+
}
|
|
22
|
+
export interface ProjectLifecycleImageToolCaller {
|
|
23
|
+
callImageTool(reference: ProjectLifecycleRouteReference, imageId: string, toolName: string, argumentsValue: Record<string, unknown>): Promise<unknown>;
|
|
24
|
+
}
|
|
25
|
+
export interface HttpGatewayRouteRegistryOptions {
|
|
26
|
+
url?: string;
|
|
27
|
+
host?: string;
|
|
28
|
+
port?: number;
|
|
29
|
+
path?: string;
|
|
30
|
+
timeoutMs?: number;
|
|
31
|
+
fetch?: typeof fetch;
|
|
32
|
+
}
|
|
33
|
+
export interface ProjectLifecycleOptions {
|
|
34
|
+
routeRegistry?: ProjectLifecycleRouteRegistry;
|
|
35
|
+
imageToolCaller?: ProjectLifecycleImageToolCaller;
|
|
36
|
+
projectOpen?: typeof openProject;
|
|
37
|
+
projectClose?: typeof closeProject;
|
|
38
|
+
imageRescue?: typeof rescueImage;
|
|
39
|
+
}
|
|
40
|
+
export interface ProjectOpenToolInput {
|
|
41
|
+
projectPath: string;
|
|
42
|
+
stateRoot?: string;
|
|
43
|
+
workspaceId?: string;
|
|
44
|
+
targetId?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface ProjectCloseToolInput {
|
|
47
|
+
projectPath: string;
|
|
48
|
+
stateRoot?: string;
|
|
49
|
+
workspaceId?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface ProjectStatusToolInput extends ProjectLifecycleRouteReference {
|
|
52
|
+
projectPath?: string;
|
|
53
|
+
stateRoot?: string;
|
|
54
|
+
refreshHealth?: boolean;
|
|
55
|
+
}
|
|
56
|
+
export interface RescueImageToolInput extends ProjectStatusToolInput {
|
|
57
|
+
operation: ImageRescueOperation;
|
|
58
|
+
sourceImageId: string;
|
|
59
|
+
targetImageId?: string;
|
|
60
|
+
targetImageName?: string;
|
|
61
|
+
targetTemplateName?: string;
|
|
62
|
+
targetTemplateCategory?: string;
|
|
63
|
+
targetMcpPort?: number;
|
|
64
|
+
sourceHistoryDirectoryPath?: string;
|
|
65
|
+
historyFilePath?: string;
|
|
66
|
+
selection?: ImageRescueEntrySelection;
|
|
67
|
+
exclude?: ImageRescueEntrySelection;
|
|
68
|
+
codeChangesOnly?: boolean;
|
|
69
|
+
includeEntryCounts?: boolean;
|
|
70
|
+
loadRepositories?: boolean;
|
|
71
|
+
repositoryActions?: ImageRescueRepositoryAction[];
|
|
72
|
+
confirm?: boolean;
|
|
73
|
+
}
|
|
74
|
+
export interface ProjectLifecycleStatus {
|
|
75
|
+
projectRoot?: string;
|
|
76
|
+
statePath?: string;
|
|
77
|
+
state?: ProjectState;
|
|
78
|
+
route?: unknown;
|
|
79
|
+
}
|
|
80
|
+
export interface ProjectLifecycleToolResult<T = unknown> {
|
|
81
|
+
ok: boolean;
|
|
82
|
+
data?: T;
|
|
83
|
+
error?: string;
|
|
84
|
+
}
|
|
85
|
+
export declare class HttpGatewayRouteRegistry implements ProjectLifecycleRouteRegistry {
|
|
86
|
+
private readonly url;
|
|
87
|
+
private readonly timeoutMs;
|
|
88
|
+
private readonly fetchFn;
|
|
89
|
+
constructor(options?: HttpGatewayRouteRegistryOptions);
|
|
90
|
+
registerProjectRoute(input: ProjectLifecycleRouteRegistration): Promise<unknown>;
|
|
91
|
+
unregisterProjectRoute(input: ProjectLifecycleRouteReference): Promise<unknown>;
|
|
92
|
+
getRouteStatus(input: ProjectLifecycleRouteReference & {
|
|
93
|
+
refreshHealth?: boolean;
|
|
94
|
+
}): Promise<unknown>;
|
|
95
|
+
private callTool;
|
|
96
|
+
}
|
|
97
|
+
export declare class PlexusProjectLifecycle {
|
|
98
|
+
private readonly routeRegistry?;
|
|
99
|
+
private readonly imageToolCaller?;
|
|
100
|
+
private readonly projectOpen;
|
|
101
|
+
private readonly projectClose;
|
|
102
|
+
private readonly imageRescue;
|
|
103
|
+
constructor(options?: ProjectLifecycleOptions);
|
|
104
|
+
open(input: ProjectOpenToolInput): Promise<ProjectLifecycleToolResult<ProjectOpenResult>>;
|
|
105
|
+
close(input: ProjectCloseToolInput): Promise<ProjectLifecycleToolResult<ProjectCloseResult>>;
|
|
106
|
+
status(input: ProjectStatusToolInput): Promise<ProjectLifecycleToolResult<ProjectLifecycleStatus | ProjectLifecycleStatus[]>>;
|
|
107
|
+
rescueImage(input: RescueImageToolInput): Promise<ProjectLifecycleToolResult<ImageRescueResult>>;
|
|
108
|
+
handleTool(name: string, inputValue: unknown): Promise<ProjectLifecycleToolResult>;
|
|
109
|
+
private statusFromProjectPath;
|
|
110
|
+
private getRouteStatus;
|
|
111
|
+
private registerRoute;
|
|
112
|
+
private unregisterRoute;
|
|
113
|
+
}
|
|
114
|
+
export declare function createProjectLifecycleFromEnvironment(env?: NodeJS.ProcessEnv): PlexusProjectLifecycle;
|
|
115
|
+
//# sourceMappingURL=projectLifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectLifecycle.d.ts","sourceRoot":"","sources":["../src/projectLifecycle.ts"],"names":[],"mappings":"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"}
|