@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,181 @@
|
|
|
1
|
+
import { loadProjectConfig, } from "./projectConfig.js";
|
|
2
|
+
import { defaultTargetId, defaultWorkspaceId, loadProjectState, projectStatePathForConfig, renderProjectImageName, sanitizeRuntimeId, } from "./projectState.js";
|
|
3
|
+
import { resolvePathLike } from "./pathStyle.js";
|
|
4
|
+
export class ScopedProjectContextError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "ScopedProjectContextError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function allowed(toolName, argumentsValue) {
|
|
11
|
+
return {
|
|
12
|
+
allowed: true,
|
|
13
|
+
toolName,
|
|
14
|
+
arguments: argumentsValue,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function denied(reason) {
|
|
18
|
+
return {
|
|
19
|
+
allowed: false,
|
|
20
|
+
reason,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function cleanupPaths(imageState) {
|
|
24
|
+
return {
|
|
25
|
+
...(imageState?.imagePath ? { imagePath: imageState.imagePath } : {}),
|
|
26
|
+
...(imageState?.imageDirectoryPath
|
|
27
|
+
? { imageDirectoryPath: imageState.imageDirectoryPath }
|
|
28
|
+
: {}),
|
|
29
|
+
...(imageState?.changesPath ? { changesPath: imageState.changesPath } : {}),
|
|
30
|
+
...(imageState?.localDirectoryPath
|
|
31
|
+
? { localDirectoryPath: imageState.localDirectoryPath }
|
|
32
|
+
: {}),
|
|
33
|
+
...(imageState?.ombuDirectoryPath
|
|
34
|
+
? { ombuDirectoryPath: imageState.ombuDirectoryPath }
|
|
35
|
+
: {}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function imageStatus(imageState) {
|
|
39
|
+
return imageState?.status ?? "declared";
|
|
40
|
+
}
|
|
41
|
+
function createAffordance(imageId, imageState) {
|
|
42
|
+
if (imageState) {
|
|
43
|
+
return denied("Image already has runtime state");
|
|
44
|
+
}
|
|
45
|
+
return allowed("pharo_launcher_image_create", { imageId });
|
|
46
|
+
}
|
|
47
|
+
function startAffordance(imageConfig, status) {
|
|
48
|
+
if (!imageConfig.active) {
|
|
49
|
+
return denied("Image is inactive in project config");
|
|
50
|
+
}
|
|
51
|
+
if (status === "running") {
|
|
52
|
+
return denied("Image is already running");
|
|
53
|
+
}
|
|
54
|
+
if (status === "starting") {
|
|
55
|
+
return denied("Image is already starting");
|
|
56
|
+
}
|
|
57
|
+
return allowed("pharo_launcher_image_start", { imageId: imageConfig.id });
|
|
58
|
+
}
|
|
59
|
+
function stopAffordance(imageId, status) {
|
|
60
|
+
if (status !== "running" && status !== "starting") {
|
|
61
|
+
return denied("Image is not running");
|
|
62
|
+
}
|
|
63
|
+
return allowed("pharo_launcher_image_stop", {
|
|
64
|
+
imageId,
|
|
65
|
+
confirm: true,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function lifecycleAffordances(imageConfig, imageState) {
|
|
69
|
+
const status = imageStatus(imageState);
|
|
70
|
+
return {
|
|
71
|
+
create: createAffordance(imageConfig.id, imageState),
|
|
72
|
+
start: startAffordance(imageConfig, status),
|
|
73
|
+
stop: stopAffordance(imageConfig.id, status),
|
|
74
|
+
delete: denied("Deletion is reserved for PLexus workspace cleanup policy, not the agent launcher surface"),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function routeMetadata(scope, imageId) {
|
|
78
|
+
return {
|
|
79
|
+
serverName: "gateway",
|
|
80
|
+
requiredArgument: "imageId",
|
|
81
|
+
imageId,
|
|
82
|
+
routeReference: {
|
|
83
|
+
projectId: scope.projectId,
|
|
84
|
+
workspaceId: scope.workspaceId,
|
|
85
|
+
targetId: scope.targetId,
|
|
86
|
+
},
|
|
87
|
+
imageIdSource: "Read images[].imageId from this scoped context or pharo-launcher image list",
|
|
88
|
+
recordHint: "Store the selected imageId with the scoped project/workspace/target before calling gateway tools",
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function validateProjectState(scope, projectState, imageIds) {
|
|
92
|
+
if (!projectState) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (projectState.projectId !== scope.projectId) {
|
|
96
|
+
throw new ScopedProjectContextError(`Project state projectId ${projectState.projectId} does not match scoped project ${scope.projectId}`);
|
|
97
|
+
}
|
|
98
|
+
if (projectState.workspaceId !== scope.workspaceId) {
|
|
99
|
+
throw new ScopedProjectContextError(`Project state workspaceId ${projectState.workspaceId} does not match scoped workspace ${scope.workspaceId}`);
|
|
100
|
+
}
|
|
101
|
+
if (projectState.targetId !== scope.targetId) {
|
|
102
|
+
throw new ScopedProjectContextError(`Project state targetId ${projectState.targetId} does not match scoped target ${scope.targetId}`);
|
|
103
|
+
}
|
|
104
|
+
for (const image of projectState.images) {
|
|
105
|
+
if (!imageIds.has(image.id)) {
|
|
106
|
+
throw new ScopedProjectContextError(`State image ${image.id} is not declared in project config`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function scopedImageContext(scope, imageConfig, imageState) {
|
|
111
|
+
const launcherImageName = imageState?.imageName ??
|
|
112
|
+
renderProjectImageName(imageConfig.imageName, {
|
|
113
|
+
projectId: scope.projectId,
|
|
114
|
+
projectName: scope.projectName,
|
|
115
|
+
workspaceId: scope.workspaceId,
|
|
116
|
+
targetId: scope.targetId,
|
|
117
|
+
imageId: imageConfig.id,
|
|
118
|
+
});
|
|
119
|
+
return {
|
|
120
|
+
imageId: imageConfig.id,
|
|
121
|
+
launcherImageName,
|
|
122
|
+
active: imageConfig.active,
|
|
123
|
+
status: imageStatus(imageState),
|
|
124
|
+
...(imageState?.assignedPort
|
|
125
|
+
? { assignedPort: imageState.assignedPort }
|
|
126
|
+
: {}),
|
|
127
|
+
...(imageState?.pid ? { pid: imageState.pid } : {}),
|
|
128
|
+
ownership: {
|
|
129
|
+
projectId: scope.projectId,
|
|
130
|
+
workspaceId: scope.workspaceId,
|
|
131
|
+
targetId: scope.targetId,
|
|
132
|
+
owned: true,
|
|
133
|
+
disposable: true,
|
|
134
|
+
},
|
|
135
|
+
affordances: lifecycleAffordances(imageConfig, imageState),
|
|
136
|
+
cleanup: {
|
|
137
|
+
disposable: true,
|
|
138
|
+
statePath: scope.statePath,
|
|
139
|
+
launcherImageName,
|
|
140
|
+
policy: "workspace_cleanup_only",
|
|
141
|
+
paths: cleanupPaths(imageState),
|
|
142
|
+
},
|
|
143
|
+
route: routeMetadata(scope, imageConfig.id),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export function buildScopedProjectContext(options) {
|
|
147
|
+
const projectRoot = resolvePathLike(options.projectRoot);
|
|
148
|
+
const projectConfig = options.projectConfig ?? loadProjectConfig(projectRoot);
|
|
149
|
+
const workspaceId = options.workspaceId
|
|
150
|
+
? sanitizeRuntimeId(options.workspaceId)
|
|
151
|
+
: defaultWorkspaceId(projectRoot);
|
|
152
|
+
const targetId = options.targetId ??
|
|
153
|
+
defaultTargetId(projectConfig.kanban.projectId, workspaceId);
|
|
154
|
+
const stateRoot = options.stateRoot
|
|
155
|
+
? resolvePathLike(options.stateRoot)
|
|
156
|
+
: undefined;
|
|
157
|
+
const statePath = projectStatePathForConfig({
|
|
158
|
+
projectRoot,
|
|
159
|
+
config: projectConfig,
|
|
160
|
+
workspaceId,
|
|
161
|
+
stateRoot,
|
|
162
|
+
});
|
|
163
|
+
const projectState = options.projectState ?? loadProjectState(statePath);
|
|
164
|
+
const scope = {
|
|
165
|
+
projectRoot,
|
|
166
|
+
projectId: projectConfig.kanban.projectId,
|
|
167
|
+
projectName: projectConfig.name,
|
|
168
|
+
workspaceId,
|
|
169
|
+
targetId,
|
|
170
|
+
...(stateRoot ? { stateRoot } : {}),
|
|
171
|
+
statePath,
|
|
172
|
+
};
|
|
173
|
+
const configuredImageIds = new Set(projectConfig.images.map((image) => image.id));
|
|
174
|
+
validateProjectState(scope, projectState, configuredImageIds);
|
|
175
|
+
return {
|
|
176
|
+
schemaVersion: 1,
|
|
177
|
+
scope,
|
|
178
|
+
images: projectConfig.images.map((imageConfig) => scopedImageContext(scope, imageConfig, projectState?.images.find((image) => image.id === imageConfig.id))),
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=scopedProjectContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scopedProjectContext.js","sourceRoot":"","sources":["../src/scopedProjectContext.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import { PlexusProjectLifecycle } from "./projectLifecycle.js";
|
|
3
|
+
export declare const projectLifecycleTools: readonly [{
|
|
4
|
+
readonly name: "plexus_project_open";
|
|
5
|
+
readonly description: "Open a PLexus project: launch active images, update runtime state, and register routes.";
|
|
6
|
+
readonly inputSchema: {
|
|
7
|
+
readonly type: "object";
|
|
8
|
+
readonly properties: Record<string, unknown>;
|
|
9
|
+
readonly required: string[];
|
|
10
|
+
readonly additionalProperties: false;
|
|
11
|
+
};
|
|
12
|
+
}, {
|
|
13
|
+
readonly name: "plexus_project_close";
|
|
14
|
+
readonly description: "Close a PLexus project: stop running images, update runtime state, and unregister routes.";
|
|
15
|
+
readonly inputSchema: {
|
|
16
|
+
readonly type: "object";
|
|
17
|
+
readonly properties: Record<string, unknown>;
|
|
18
|
+
readonly required: string[];
|
|
19
|
+
readonly additionalProperties: false;
|
|
20
|
+
};
|
|
21
|
+
}, {
|
|
22
|
+
readonly name: "plexus_project_status";
|
|
23
|
+
readonly description: "Return PLexus project lifecycle status from runtime state and registered routes.";
|
|
24
|
+
readonly inputSchema: {
|
|
25
|
+
readonly type: "object";
|
|
26
|
+
readonly properties: Record<string, unknown>;
|
|
27
|
+
readonly required: string[];
|
|
28
|
+
readonly additionalProperties: false;
|
|
29
|
+
};
|
|
30
|
+
}, {
|
|
31
|
+
readonly name: "plexus_rescue_image";
|
|
32
|
+
readonly description: "Plan or run rescue of a crashed Pharo image into a new image by recreating launcher state, restoring repositories when possible, and applying selected history entries from the source image ombu files.";
|
|
33
|
+
readonly inputSchema: {
|
|
34
|
+
readonly type: "object";
|
|
35
|
+
readonly properties: Record<string, unknown>;
|
|
36
|
+
readonly required: string[];
|
|
37
|
+
readonly additionalProperties: false;
|
|
38
|
+
};
|
|
39
|
+
}];
|
|
40
|
+
export declare function createProjectLifecycleServer(lifecycle?: PlexusProjectLifecycle): Server;
|
|
41
|
+
export declare function startProjectLifecycleServer(lifecycle?: PlexusProjectLifecycle): Promise<void>;
|
|
42
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAOnE,OAAO,EACL,sBAAsB,EAEvB,MAAM,uBAAuB,CAAC;AAsD/B,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsExB,CAAC;AASX,wBAAgB,4BAA4B,CAC1C,SAAS,yBAA0C,GAClD,MAAM,CA2BR;AAED,wBAAsB,2BAA2B,CAC/C,SAAS,CAAC,EAAE,sBAAsB,GACjC,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
4
|
+
import { createProjectLifecycleFromEnvironment, } from "./projectLifecycle.js";
|
|
5
|
+
const stringSchema = { type: "string", minLength: 1 };
|
|
6
|
+
const optionalStringSchema = { type: "string", minLength: 1 };
|
|
7
|
+
function objectSchema(properties, required = []) {
|
|
8
|
+
return {
|
|
9
|
+
type: "object",
|
|
10
|
+
properties,
|
|
11
|
+
required,
|
|
12
|
+
additionalProperties: false,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const projectReferenceProperties = {
|
|
16
|
+
projectPath: optionalStringSchema,
|
|
17
|
+
projectId: optionalStringSchema,
|
|
18
|
+
workspaceId: optionalStringSchema,
|
|
19
|
+
targetId: optionalStringSchema,
|
|
20
|
+
stateRoot: optionalStringSchema,
|
|
21
|
+
};
|
|
22
|
+
const historyEntrySelectionSchema = objectSchema({
|
|
23
|
+
indexes: {
|
|
24
|
+
type: "array",
|
|
25
|
+
items: { type: "integer" },
|
|
26
|
+
},
|
|
27
|
+
entryReferences: {
|
|
28
|
+
type: "array",
|
|
29
|
+
items: stringSchema,
|
|
30
|
+
},
|
|
31
|
+
startIndex: { type: "integer" },
|
|
32
|
+
endIndex: { type: "integer" },
|
|
33
|
+
latestCount: { type: "integer", minimum: 1 },
|
|
34
|
+
});
|
|
35
|
+
const repositoryActionSchema = objectSchema({
|
|
36
|
+
label: optionalStringSchema,
|
|
37
|
+
toolName: {
|
|
38
|
+
type: "string",
|
|
39
|
+
enum: ["load_repository", "edit_repository"],
|
|
40
|
+
},
|
|
41
|
+
arguments: {
|
|
42
|
+
type: "object",
|
|
43
|
+
additionalProperties: true,
|
|
44
|
+
},
|
|
45
|
+
}, ["arguments"]);
|
|
46
|
+
export const projectLifecycleTools = [
|
|
47
|
+
{
|
|
48
|
+
name: "plexus_project_open",
|
|
49
|
+
description: "Open a PLexus project: launch active images, update runtime state, and register routes.",
|
|
50
|
+
inputSchema: objectSchema({
|
|
51
|
+
projectPath: stringSchema,
|
|
52
|
+
workspaceId: optionalStringSchema,
|
|
53
|
+
targetId: optionalStringSchema,
|
|
54
|
+
stateRoot: optionalStringSchema,
|
|
55
|
+
}, ["projectPath"]),
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: "plexus_project_close",
|
|
59
|
+
description: "Close a PLexus project: stop running images, update runtime state, and unregister routes.",
|
|
60
|
+
inputSchema: objectSchema({
|
|
61
|
+
projectPath: stringSchema,
|
|
62
|
+
workspaceId: optionalStringSchema,
|
|
63
|
+
stateRoot: optionalStringSchema,
|
|
64
|
+
}, ["projectPath"]),
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "plexus_project_status",
|
|
68
|
+
description: "Return PLexus project lifecycle status from runtime state and registered routes.",
|
|
69
|
+
inputSchema: objectSchema({
|
|
70
|
+
...projectReferenceProperties,
|
|
71
|
+
refreshHealth: { type: "boolean" },
|
|
72
|
+
}),
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "plexus_rescue_image",
|
|
76
|
+
description: "Plan or run rescue of a crashed Pharo image into a new image by recreating launcher state, restoring repositories when possible, and applying selected history entries from the source image ombu files.",
|
|
77
|
+
inputSchema: objectSchema({
|
|
78
|
+
...projectReferenceProperties,
|
|
79
|
+
operation: {
|
|
80
|
+
type: "string",
|
|
81
|
+
enum: ["snapshotSource", "plan", "prepareTarget", "applyPlan"],
|
|
82
|
+
},
|
|
83
|
+
sourceImageId: stringSchema,
|
|
84
|
+
targetImageId: optionalStringSchema,
|
|
85
|
+
targetImageName: optionalStringSchema,
|
|
86
|
+
targetTemplateName: optionalStringSchema,
|
|
87
|
+
targetTemplateCategory: optionalStringSchema,
|
|
88
|
+
targetMcpPort: { type: "integer", minimum: 1, maximum: 65_535 },
|
|
89
|
+
sourceHistoryDirectoryPath: optionalStringSchema,
|
|
90
|
+
historyFilePath: optionalStringSchema,
|
|
91
|
+
selection: historyEntrySelectionSchema,
|
|
92
|
+
exclude: historyEntrySelectionSchema,
|
|
93
|
+
codeChangesOnly: { type: "boolean" },
|
|
94
|
+
includeEntryCounts: { type: "boolean" },
|
|
95
|
+
loadRepositories: { type: "boolean" },
|
|
96
|
+
repositoryActions: {
|
|
97
|
+
type: "array",
|
|
98
|
+
items: repositoryActionSchema,
|
|
99
|
+
},
|
|
100
|
+
confirm: { type: "boolean" },
|
|
101
|
+
}, ["projectPath", "operation", "sourceImageId"]),
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
function jsonResult(value, isError = false) {
|
|
105
|
+
return {
|
|
106
|
+
content: [{ type: "text", text: JSON.stringify(value, null, 2) }],
|
|
107
|
+
...(isError ? { isError } : {}),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
export function createProjectLifecycleServer(lifecycle = createProjectLifecycleFromEnvironment()) {
|
|
111
|
+
const server = new Server({
|
|
112
|
+
name: "plexus-core",
|
|
113
|
+
version: "0.1.0",
|
|
114
|
+
}, {
|
|
115
|
+
capabilities: {
|
|
116
|
+
tools: {},
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
120
|
+
tools: projectLifecycleTools,
|
|
121
|
+
}));
|
|
122
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
123
|
+
const result = await lifecycle.handleTool(request.params.name, request.params.arguments ?? {});
|
|
124
|
+
return jsonResult(result, !result.ok);
|
|
125
|
+
});
|
|
126
|
+
return server;
|
|
127
|
+
}
|
|
128
|
+
export async function startProjectLifecycleServer(lifecycle) {
|
|
129
|
+
const server = createProjectLifecycleServer(lifecycle);
|
|
130
|
+
const transport = new StdioServerTransport();
|
|
131
|
+
await server.connect(transport);
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/target.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type TargetStatus = "created" | "starting" | "running" | "stopped" | "stale" | "failed";
|
|
2
|
+
export interface PlexusTarget {
|
|
3
|
+
targetId: string;
|
|
4
|
+
imageName: string;
|
|
5
|
+
imagePath?: string;
|
|
6
|
+
changesPath?: string;
|
|
7
|
+
vmPath?: string;
|
|
8
|
+
worktreePath: string;
|
|
9
|
+
branch: string;
|
|
10
|
+
commit?: string;
|
|
11
|
+
pid?: number;
|
|
12
|
+
port?: number;
|
|
13
|
+
token?: string;
|
|
14
|
+
status: TargetStatus;
|
|
15
|
+
lastHealthCheck?: string;
|
|
16
|
+
createdAt: string;
|
|
17
|
+
updatedAt: string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target.d.ts","sourceRoot":"","sources":["../src/target.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,SAAS,GACT,SAAS,GACT,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
package/dist/target.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"target.js","sourceRoot":"","sources":["../src/target.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import { type ProjectConfig } from "./projectConfig.js";
|
|
3
|
+
import { type PharoMcpContractReference } from "./projectState.js";
|
|
4
|
+
export declare const defaultPharoLauncherMcpServerName = "pharo-launcher";
|
|
5
|
+
export declare const defaultPharoMcpServerName = "gateway";
|
|
6
|
+
export interface WorkspaceMcpServerConfig {
|
|
7
|
+
command: string;
|
|
8
|
+
args: string[];
|
|
9
|
+
env?: Record<string, string>;
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface WorkspaceMcpConfig {
|
|
13
|
+
servers: Record<string, WorkspaceMcpServerConfig>;
|
|
14
|
+
}
|
|
15
|
+
export interface PlexusWorkspaceMcpScope {
|
|
16
|
+
projectRoot: string;
|
|
17
|
+
projectId: string;
|
|
18
|
+
workspaceId: string;
|
|
19
|
+
targetId: string;
|
|
20
|
+
stateRoot?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface BuildPlexusWorkspaceMcpConfigOptions {
|
|
23
|
+
projectRoot: string;
|
|
24
|
+
projectConfig?: ProjectConfig;
|
|
25
|
+
workspaceId?: string;
|
|
26
|
+
targetId?: string;
|
|
27
|
+
stateRoot?: string;
|
|
28
|
+
plexusCommand?: string;
|
|
29
|
+
plexusGatewayCommand?: string;
|
|
30
|
+
pharoTools: readonly Tool[];
|
|
31
|
+
pharoMcpContract?: PharoMcpContractReference;
|
|
32
|
+
pharoLauncherServerName?: string;
|
|
33
|
+
pharoServerName?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function resolvePlexusWorkspaceMcpScope(options: Omit<BuildPlexusWorkspaceMcpConfigOptions, "pharoTools">): PlexusWorkspaceMcpScope;
|
|
36
|
+
export declare function buildPharoLauncherMcpServerConfig(options: BuildPlexusWorkspaceMcpConfigOptions): WorkspaceMcpServerConfig;
|
|
37
|
+
export declare function buildPharoMcpServerConfig(options: BuildPlexusWorkspaceMcpConfigOptions): WorkspaceMcpServerConfig;
|
|
38
|
+
export declare function mergeWorkspaceMcpServers(existingServers: Record<string, WorkspaceMcpServerConfig>, generatedServers: Record<string, WorkspaceMcpServerConfig>): Record<string, WorkspaceMcpServerConfig>;
|
|
39
|
+
export declare function buildPlexusWorkspaceMcpConfig(options: BuildPlexusWorkspaceMcpConfigOptions & {
|
|
40
|
+
existingServers?: Record<string, WorkspaceMcpServerConfig>;
|
|
41
|
+
}): WorkspaceMcpConfig;
|
|
42
|
+
//# sourceMappingURL=workspaceMcpConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceMcpConfig.d.ts","sourceRoot":"","sources":["../src/workspaceMcpConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,iCAAiC,mBAAmB,CAAC;AAClE,eAAO,MAAM,yBAAyB,YAAY,CAAC;AAEnD,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oCAAoC;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,SAAS,IAAI,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,yBAAyB,CAAC;IAC7C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAUD,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,IAAI,CAAC,oCAAoC,EAAE,YAAY,CAAC,GAChE,uBAAuB,CAgBzB;AAaD,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,oCAAoC,GAC5C,wBAAwB,CAW1B;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,oCAAoC,GAC5C,wBAAwB,CAc1B;AAED,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,EACzD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,GACzD,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAK1C;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oCAAoC,GAAG;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;CAC5D,GACA,kBAAkB,CAepB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { resolvePathLike } from "./pathStyle.js";
|
|
2
|
+
import { loadProjectConfig } from "./projectConfig.js";
|
|
3
|
+
import { defaultTargetId, defaultWorkspaceId, } from "./projectState.js";
|
|
4
|
+
export const defaultPharoLauncherMcpServerName = "pharo-launcher";
|
|
5
|
+
export const defaultPharoMcpServerName = "gateway";
|
|
6
|
+
function optionalJsonEnv(value) {
|
|
7
|
+
if (value === undefined) {
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
return JSON.stringify(value);
|
|
11
|
+
}
|
|
12
|
+
export function resolvePlexusWorkspaceMcpScope(options) {
|
|
13
|
+
const projectRoot = resolvePathLike(options.projectRoot);
|
|
14
|
+
const config = options.projectConfig ?? loadProjectConfig(projectRoot);
|
|
15
|
+
const workspaceId = options.workspaceId ?? defaultWorkspaceId(projectRoot);
|
|
16
|
+
const targetId = options.targetId ?? defaultTargetId(config.kanban.projectId, workspaceId);
|
|
17
|
+
return {
|
|
18
|
+
projectRoot,
|
|
19
|
+
projectId: config.kanban.projectId,
|
|
20
|
+
workspaceId,
|
|
21
|
+
targetId,
|
|
22
|
+
...(options.stateRoot
|
|
23
|
+
? { stateRoot: resolvePathLike(options.stateRoot) }
|
|
24
|
+
: {}),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function scopeEnv(scope) {
|
|
28
|
+
return {
|
|
29
|
+
PLEXUS_PROJECT_ROOT: scope.projectRoot,
|
|
30
|
+
PLEXUS_PROJECT_ID: scope.projectId,
|
|
31
|
+
PLEXUS_WORKSPACE_ID: scope.workspaceId,
|
|
32
|
+
VIBE_KANBAN_WORKSPACE_ID: scope.workspaceId,
|
|
33
|
+
PLEXUS_TARGET_ID: scope.targetId,
|
|
34
|
+
...(scope.stateRoot ? { PLEXUS_STATE_ROOT: scope.stateRoot } : {}),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function buildPharoLauncherMcpServerConfig(options) {
|
|
38
|
+
const scope = resolvePlexusWorkspaceMcpScope(options);
|
|
39
|
+
return {
|
|
40
|
+
command: options.plexusCommand ?? "plexus",
|
|
41
|
+
args: ["mcp", "pharo-launcher"],
|
|
42
|
+
env: {
|
|
43
|
+
...scopeEnv(scope),
|
|
44
|
+
PLEXUS_AGENT_MCP_SURFACE: "pharo-launcher",
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export function buildPharoMcpServerConfig(options) {
|
|
49
|
+
const scope = resolvePlexusWorkspaceMcpScope(options);
|
|
50
|
+
const contractJson = optionalJsonEnv(options.pharoMcpContract);
|
|
51
|
+
return {
|
|
52
|
+
command: options.plexusGatewayCommand ?? "plexus-gateway",
|
|
53
|
+
args: ["--stdio"],
|
|
54
|
+
env: {
|
|
55
|
+
...scopeEnv(scope),
|
|
56
|
+
PLEXUS_GATEWAY_SURFACE: "gateway",
|
|
57
|
+
PLEXUS_PHARO_TOOLS_JSON: JSON.stringify(options.pharoTools),
|
|
58
|
+
...(contractJson ? { PLEXUS_PHARO_MCP_CONTRACT_JSON: contractJson } : {}),
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function mergeWorkspaceMcpServers(existingServers, generatedServers) {
|
|
63
|
+
return {
|
|
64
|
+
...existingServers,
|
|
65
|
+
...generatedServers,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
export function buildPlexusWorkspaceMcpConfig(options) {
|
|
69
|
+
const pharoLauncherServerName = options.pharoLauncherServerName ?? defaultPharoLauncherMcpServerName;
|
|
70
|
+
const pharoServerName = options.pharoServerName ?? defaultPharoMcpServerName;
|
|
71
|
+
const generatedServers = {
|
|
72
|
+
[pharoLauncherServerName]: buildPharoLauncherMcpServerConfig(options),
|
|
73
|
+
[pharoServerName]: buildPharoMcpServerConfig(options),
|
|
74
|
+
};
|
|
75
|
+
return {
|
|
76
|
+
servers: mergeWorkspaceMcpServers(options.existingServers ?? {}, generatedServers),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=workspaceMcpConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceMcpConfig.js","sourceRoot":"","sources":["../src/workspaceMcpConfig.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@evref-bl/plexus-core",
|
|
3
|
+
"version": "0.1.0-alpha.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"description": "PLexus project, workspace, and image lifecycle orchestration tools.",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "./dist/index.js",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"bin": {
|
|
14
|
+
"plexus": "dist/cli.js"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"package.json"
|
|
19
|
+
],
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public"
|
|
22
|
+
},
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=24"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc -p tsconfig.json",
|
|
28
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\""
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@evref-bl/pharo-launcher-mcp": "^0.1.1",
|
|
34
|
+
"@modelcontextprotocol/sdk": "^1.29.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {}
|
|
37
|
+
}
|