@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.
Files changed (73) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +164 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config.d.ts +15 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +62 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/imageRescue.d.ts +136 -0
  10. package/dist/imageRescue.d.ts.map +1 -0
  11. package/dist/imageRescue.js +686 -0
  12. package/dist/imageRescue.js.map +1 -0
  13. package/dist/index.d.ts +16 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +16 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/pathStyle.d.ts +10 -0
  18. package/dist/pathStyle.d.ts.map +1 -0
  19. package/dist/pathStyle.js +33 -0
  20. package/dist/pathStyle.js.map +1 -0
  21. package/dist/pharoLauncherMcpClient.d.ts +12 -0
  22. package/dist/pharoLauncherMcpClient.d.ts.map +1 -0
  23. package/dist/pharoLauncherMcpClient.js +74 -0
  24. package/dist/pharoLauncherMcpClient.js.map +1 -0
  25. package/dist/pharoMcpHealth.d.ts +22 -0
  26. package/dist/pharoMcpHealth.d.ts.map +1 -0
  27. package/dist/pharoMcpHealth.js +80 -0
  28. package/dist/pharoMcpHealth.js.map +1 -0
  29. package/dist/projectClose.d.ts +28 -0
  30. package/dist/projectClose.d.ts.map +1 -0
  31. package/dist/projectClose.js +93 -0
  32. package/dist/projectClose.js.map +1 -0
  33. package/dist/projectConfig.d.ts +44 -0
  34. package/dist/projectConfig.d.ts.map +1 -0
  35. package/dist/projectConfig.js +208 -0
  36. package/dist/projectConfig.js.map +1 -0
  37. package/dist/projectLifecycle.d.ts +115 -0
  38. package/dist/projectLifecycle.d.ts.map +1 -0
  39. package/dist/projectLifecycle.js +495 -0
  40. package/dist/projectLifecycle.js.map +1 -0
  41. package/dist/projectOpen.d.ts +49 -0
  42. package/dist/projectOpen.d.ts.map +1 -0
  43. package/dist/projectOpen.js +218 -0
  44. package/dist/projectOpen.js.map +1 -0
  45. package/dist/projectStartupScript.d.ts +56 -0
  46. package/dist/projectStartupScript.d.ts.map +1 -0
  47. package/dist/projectStartupScript.js +150 -0
  48. package/dist/projectStartupScript.js.map +1 -0
  49. package/dist/projectState.d.ts +128 -0
  50. package/dist/projectState.d.ts.map +1 -0
  51. package/dist/projectState.js +192 -0
  52. package/dist/projectState.js.map +1 -0
  53. package/dist/scopedPharoLauncherServer.d.ts +87 -0
  54. package/dist/scopedPharoLauncherServer.d.ts.map +1 -0
  55. package/dist/scopedPharoLauncherServer.js +186 -0
  56. package/dist/scopedPharoLauncherServer.js.map +1 -0
  57. package/dist/scopedProjectContext.d.ts +93 -0
  58. package/dist/scopedProjectContext.d.ts.map +1 -0
  59. package/dist/scopedProjectContext.js +181 -0
  60. package/dist/scopedProjectContext.js.map +1 -0
  61. package/dist/server.d.ts +42 -0
  62. package/dist/server.d.ts.map +1 -0
  63. package/dist/server.js +133 -0
  64. package/dist/server.js.map +1 -0
  65. package/dist/target.d.ts +19 -0
  66. package/dist/target.d.ts.map +1 -0
  67. package/dist/target.js +2 -0
  68. package/dist/target.js.map +1 -0
  69. package/dist/workspaceMcpConfig.d.ts +42 -0
  70. package/dist/workspaceMcpConfig.d.ts.map +1 -0
  71. package/dist/workspaceMcpConfig.js +79 -0
  72. package/dist/workspaceMcpConfig.js.map +1 -0
  73. package/package.json +37 -0
@@ -0,0 +1,495 @@
1
+ import path from "node:path";
2
+ import { rescueImage, } from "./imageRescue.js";
3
+ import { loadProjectConfig } from "./projectConfig.js";
4
+ import { closeProject } from "./projectClose.js";
5
+ import { openProject } from "./projectOpen.js";
6
+ import { defaultWorkspaceId, loadProjectState, projectStatePathForConfig, sanitizeRuntimeId, } from "./projectState.js";
7
+ class ProjectLifecycleInputError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = "ProjectLifecycleInputError";
11
+ }
12
+ }
13
+ function isObject(value) {
14
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
15
+ }
16
+ function requireString(input, key) {
17
+ const value = input[key];
18
+ if (typeof value !== "string" || value.length === 0) {
19
+ throw new ProjectLifecycleInputError(`${key} is required`);
20
+ }
21
+ return value;
22
+ }
23
+ function optionalString(input, key) {
24
+ const value = input[key];
25
+ if (value === undefined) {
26
+ return undefined;
27
+ }
28
+ if (typeof value !== "string" || value.length === 0) {
29
+ throw new ProjectLifecycleInputError(`${key} must be a non-empty string`);
30
+ }
31
+ return value;
32
+ }
33
+ function optionalBoolean(input, key) {
34
+ const value = input[key];
35
+ if (value === undefined) {
36
+ return false;
37
+ }
38
+ if (typeof value !== "boolean") {
39
+ throw new ProjectLifecycleInputError(`${key} must be a boolean`);
40
+ }
41
+ return value;
42
+ }
43
+ function optionalBooleanValue(input, key) {
44
+ const value = input[key];
45
+ if (value === undefined) {
46
+ return undefined;
47
+ }
48
+ if (typeof value !== "boolean") {
49
+ throw new ProjectLifecycleInputError(`${key} must be a boolean`);
50
+ }
51
+ return value;
52
+ }
53
+ function optionalNumber(input, key) {
54
+ const value = input[key];
55
+ if (value === undefined) {
56
+ return undefined;
57
+ }
58
+ if (typeof value !== "number" || !Number.isInteger(value)) {
59
+ throw new ProjectLifecycleInputError(`${key} must be an integer`);
60
+ }
61
+ return value;
62
+ }
63
+ function optionalObject(input, key) {
64
+ const value = input[key];
65
+ if (value === undefined) {
66
+ return {};
67
+ }
68
+ if (!isObject(value)) {
69
+ throw new ProjectLifecycleInputError(`${key} must be an object`);
70
+ }
71
+ return value;
72
+ }
73
+ function numberArray(value, key) {
74
+ if (value === undefined) {
75
+ return undefined;
76
+ }
77
+ if (!Array.isArray(value) || !value.every(Number.isInteger)) {
78
+ throw new ProjectLifecycleInputError(`${key} must be an array of integers`);
79
+ }
80
+ return value;
81
+ }
82
+ function stringArray(value, key) {
83
+ if (value === undefined) {
84
+ return undefined;
85
+ }
86
+ if (!Array.isArray(value) ||
87
+ !value.every((item) => typeof item === "string" && item.length > 0)) {
88
+ throw new ProjectLifecycleInputError(`${key} must be an array of non-empty strings`);
89
+ }
90
+ return value;
91
+ }
92
+ function optionalEntrySelection(input, key) {
93
+ const value = input[key];
94
+ if (value === undefined) {
95
+ return undefined;
96
+ }
97
+ if (!isObject(value)) {
98
+ throw new ProjectLifecycleInputError(`${key} must be an object`);
99
+ }
100
+ return {
101
+ indexes: numberArray(value.indexes, `${key}.indexes`),
102
+ entryReferences: stringArray(value.entryReferences, `${key}.entryReferences`),
103
+ startIndex: optionalNumber(value, "startIndex"),
104
+ endIndex: optionalNumber(value, "endIndex"),
105
+ latestCount: optionalNumber(value, "latestCount"),
106
+ };
107
+ }
108
+ function optionalRepositoryActions(input, key) {
109
+ const value = input[key];
110
+ if (value === undefined) {
111
+ return undefined;
112
+ }
113
+ if (!Array.isArray(value)) {
114
+ throw new ProjectLifecycleInputError(`${key} must be an array`);
115
+ }
116
+ return value.map((item, index) => {
117
+ if (!isObject(item)) {
118
+ throw new ProjectLifecycleInputError(`${key}[${index}] must be an object`);
119
+ }
120
+ const toolName = item.toolName;
121
+ if (toolName !== undefined &&
122
+ toolName !== "load_repository" &&
123
+ toolName !== "edit_repository") {
124
+ throw new ProjectLifecycleInputError(`${key}[${index}].toolName must be load_repository or edit_repository`);
125
+ }
126
+ return {
127
+ label: optionalString(item, "label"),
128
+ toolName: toolName,
129
+ arguments: optionalObject(item, "arguments"),
130
+ };
131
+ });
132
+ }
133
+ function requireRescueOperation(input) {
134
+ const value = input.operation;
135
+ if (value === "snapshotSource" ||
136
+ value === "plan" ||
137
+ value === "prepareTarget" ||
138
+ value === "applyPlan") {
139
+ return value;
140
+ }
141
+ throw new ProjectLifecycleInputError("operation must be snapshotSource, plan, prepareTarget, or applyPlan");
142
+ }
143
+ function objectInput(input) {
144
+ if (!isObject(input)) {
145
+ return {};
146
+ }
147
+ return input;
148
+ }
149
+ function result(data) {
150
+ return { ok: true, data };
151
+ }
152
+ function failure(error) {
153
+ return {
154
+ ok: false,
155
+ error: error instanceof Error ? error.message : String(error),
156
+ };
157
+ }
158
+ function unwrapToolLikeResult(value) {
159
+ if (isObject(value) && typeof value.ok === "boolean") {
160
+ if (value.ok === false) {
161
+ throw new Error(typeof value.error === "string" ? value.error : "Tool call failed");
162
+ }
163
+ return value.data;
164
+ }
165
+ return value;
166
+ }
167
+ function textContent(value) {
168
+ if (!isObject(value) || !Array.isArray(value.content)) {
169
+ return undefined;
170
+ }
171
+ const item = value.content.find((candidate) => isObject(candidate) &&
172
+ candidate.type === "text" &&
173
+ typeof candidate.text === "string");
174
+ return item?.text;
175
+ }
176
+ function decodeMcpToolResult(value) {
177
+ const text = textContent(value);
178
+ if (text === undefined) {
179
+ return value;
180
+ }
181
+ try {
182
+ return JSON.parse(text);
183
+ }
184
+ catch {
185
+ return value;
186
+ }
187
+ }
188
+ function lifecycleReferenceFromInput(input) {
189
+ return {
190
+ projectId: input.projectId,
191
+ workspaceId: input.workspaceId,
192
+ targetId: input.targetId,
193
+ };
194
+ }
195
+ function lifecycleStatusFromRoute(route) {
196
+ if (!isObject(route)) {
197
+ return { route };
198
+ }
199
+ const statePath = typeof route.statePath === "string" ? route.statePath : undefined;
200
+ return {
201
+ projectRoot: typeof route.projectRoot === "string" ? route.projectRoot : undefined,
202
+ statePath,
203
+ state: statePath ? loadProjectState(statePath) : undefined,
204
+ route,
205
+ };
206
+ }
207
+ export class HttpGatewayRouteRegistry {
208
+ url;
209
+ timeoutMs;
210
+ fetchFn;
211
+ constructor(options = {}) {
212
+ const host = options.host ?? "127.0.0.1";
213
+ const port = options.port ?? 7331;
214
+ const mcpPath = options.path ?? "/mcp";
215
+ this.url = options.url ?? `http://${host}:${port}${mcpPath}`;
216
+ this.timeoutMs = options.timeoutMs ?? 10_000;
217
+ this.fetchFn = options.fetch ?? fetch;
218
+ }
219
+ registerProjectRoute(input) {
220
+ return this.callTool("plexus_gateway_register_target", input);
221
+ }
222
+ unregisterProjectRoute(input) {
223
+ return this.callTool("plexus_gateway_unregister_target", input);
224
+ }
225
+ getRouteStatus(input) {
226
+ return this.callTool("plexus_gateway_status", input);
227
+ }
228
+ async callTool(name, argumentsValue) {
229
+ const controller = new AbortController();
230
+ const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
231
+ try {
232
+ const response = await this.fetchFn(this.url, {
233
+ method: "POST",
234
+ headers: {
235
+ accept: "application/json, text/event-stream",
236
+ "content-type": "application/json",
237
+ },
238
+ body: JSON.stringify({
239
+ jsonrpc: "2.0",
240
+ id: `plexus-core-${Date.now()}`,
241
+ method: "tools/call",
242
+ params: {
243
+ name,
244
+ arguments: argumentsValue,
245
+ },
246
+ }),
247
+ signal: controller.signal,
248
+ });
249
+ if (!response.ok) {
250
+ throw new Error(`Gateway MCP request failed with HTTP ${response.status}`);
251
+ }
252
+ const payload = (await response.json());
253
+ if (!isObject(payload)) {
254
+ throw new Error("Gateway MCP response was not a JSON object");
255
+ }
256
+ if ("error" in payload) {
257
+ throw new Error(JSON.stringify(payload.error));
258
+ }
259
+ return unwrapToolLikeResult(decodeMcpToolResult(payload.result));
260
+ }
261
+ finally {
262
+ clearTimeout(timeout);
263
+ }
264
+ }
265
+ }
266
+ export class PlexusProjectLifecycle {
267
+ routeRegistry;
268
+ imageToolCaller;
269
+ projectOpen;
270
+ projectClose;
271
+ imageRescue;
272
+ constructor(options = {}) {
273
+ this.routeRegistry = options.routeRegistry;
274
+ this.imageToolCaller = options.imageToolCaller;
275
+ this.projectOpen = options.projectOpen ?? openProject;
276
+ this.projectClose = options.projectClose ?? closeProject;
277
+ this.imageRescue = options.imageRescue ?? rescueImage;
278
+ }
279
+ async open(input) {
280
+ try {
281
+ const openResult = await this.projectOpen({
282
+ projectRoot: input.projectPath,
283
+ stateRoot: input.stateRoot,
284
+ workspaceId: input.workspaceId,
285
+ targetId: input.targetId,
286
+ });
287
+ await this.registerRoute({
288
+ projectRoot: openResult.projectRoot,
289
+ statePath: openResult.statePath,
290
+ state: openResult.state,
291
+ });
292
+ return result(openResult);
293
+ }
294
+ catch (error) {
295
+ return failure(error);
296
+ }
297
+ }
298
+ async close(input) {
299
+ try {
300
+ const closeResult = await this.projectClose({
301
+ projectRoot: input.projectPath,
302
+ stateRoot: input.stateRoot,
303
+ workspaceId: input.workspaceId,
304
+ });
305
+ if (closeResult.state) {
306
+ await this.unregisterRoute({ targetId: closeResult.state.targetId });
307
+ }
308
+ else {
309
+ const projectRoot = path.resolve(input.projectPath);
310
+ const config = loadProjectConfig(projectRoot);
311
+ const workspaceId = input.workspaceId
312
+ ? sanitizeRuntimeId(input.workspaceId)
313
+ : defaultWorkspaceId(projectRoot);
314
+ await this.unregisterRoute({
315
+ projectId: config.kanban.projectId,
316
+ workspaceId,
317
+ });
318
+ }
319
+ return result(closeResult);
320
+ }
321
+ catch (error) {
322
+ return failure(error);
323
+ }
324
+ }
325
+ async status(input) {
326
+ try {
327
+ if (input.projectPath) {
328
+ return result(await this.statusFromProjectPath({
329
+ ...input,
330
+ projectPath: input.projectPath,
331
+ }));
332
+ }
333
+ if (!this.routeRegistry?.getRouteStatus) {
334
+ throw new ProjectLifecycleInputError("projectPath is required when no gateway route registry is configured");
335
+ }
336
+ const routeStatus = unwrapToolLikeResult(await this.routeRegistry.getRouteStatus({
337
+ ...lifecycleReferenceFromInput(input),
338
+ refreshHealth: input.refreshHealth,
339
+ }));
340
+ const routes = Array.isArray(routeStatus) ? routeStatus : [routeStatus];
341
+ const statuses = routes.map(lifecycleStatusFromRoute);
342
+ return result(Array.isArray(routeStatus) ? statuses : statuses[0]);
343
+ }
344
+ catch (error) {
345
+ return failure(error);
346
+ }
347
+ }
348
+ async rescueImage(input) {
349
+ try {
350
+ const imageToolCaller = this.imageToolCaller;
351
+ const options = {
352
+ ...input,
353
+ projectRoot: input.projectPath ?? "",
354
+ imageMcpClient: imageToolCaller
355
+ ? {
356
+ callTool: async (image, toolName, argumentsValue) => imageToolCaller.callImageTool(lifecycleReferenceFromInput(input), image.id, toolName, argumentsValue),
357
+ }
358
+ : undefined,
359
+ };
360
+ if (!options.projectRoot) {
361
+ throw new ProjectLifecycleInputError("projectPath is required for image rescue");
362
+ }
363
+ const rescueResult = await this.imageRescue(options);
364
+ if (rescueResult.state) {
365
+ await this.registerRoute({
366
+ projectRoot: rescueResult.projectRoot,
367
+ statePath: rescueResult.statePath,
368
+ state: rescueResult.state,
369
+ });
370
+ }
371
+ return result(rescueResult);
372
+ }
373
+ catch (error) {
374
+ return failure(error);
375
+ }
376
+ }
377
+ async handleTool(name, inputValue) {
378
+ try {
379
+ const input = objectInput(inputValue);
380
+ switch (name) {
381
+ case "plexus_project_open":
382
+ return this.open({
383
+ projectPath: requireString(input, "projectPath"),
384
+ stateRoot: optionalString(input, "stateRoot"),
385
+ workspaceId: optionalString(input, "workspaceId"),
386
+ targetId: optionalString(input, "targetId"),
387
+ });
388
+ case "plexus_project_close":
389
+ return this.close({
390
+ projectPath: requireString(input, "projectPath"),
391
+ stateRoot: optionalString(input, "stateRoot"),
392
+ workspaceId: optionalString(input, "workspaceId"),
393
+ });
394
+ case "plexus_project_status":
395
+ return this.status({
396
+ projectPath: optionalString(input, "projectPath"),
397
+ projectId: optionalString(input, "projectId"),
398
+ workspaceId: optionalString(input, "workspaceId"),
399
+ targetId: optionalString(input, "targetId"),
400
+ stateRoot: optionalString(input, "stateRoot"),
401
+ refreshHealth: optionalBoolean(input, "refreshHealth"),
402
+ });
403
+ case "plexus_rescue_image":
404
+ return this.rescueImage({
405
+ projectPath: requireString(input, "projectPath"),
406
+ projectId: optionalString(input, "projectId"),
407
+ workspaceId: optionalString(input, "workspaceId"),
408
+ targetId: optionalString(input, "targetId"),
409
+ stateRoot: optionalString(input, "stateRoot"),
410
+ operation: requireRescueOperation(input),
411
+ sourceImageId: requireString(input, "sourceImageId"),
412
+ targetImageId: optionalString(input, "targetImageId"),
413
+ targetImageName: optionalString(input, "targetImageName"),
414
+ targetTemplateName: optionalString(input, "targetTemplateName"),
415
+ targetTemplateCategory: optionalString(input, "targetTemplateCategory"),
416
+ targetMcpPort: optionalNumber(input, "targetMcpPort"),
417
+ sourceHistoryDirectoryPath: optionalString(input, "sourceHistoryDirectoryPath"),
418
+ historyFilePath: optionalString(input, "historyFilePath"),
419
+ selection: optionalEntrySelection(input, "selection"),
420
+ exclude: optionalEntrySelection(input, "exclude"),
421
+ codeChangesOnly: optionalBooleanValue(input, "codeChangesOnly"),
422
+ includeEntryCounts: optionalBooleanValue(input, "includeEntryCounts"),
423
+ loadRepositories: optionalBooleanValue(input, "loadRepositories"),
424
+ repositoryActions: optionalRepositoryActions(input, "repositoryActions"),
425
+ confirm: optionalBooleanValue(input, "confirm"),
426
+ });
427
+ default:
428
+ return {
429
+ ok: false,
430
+ error: `Unknown tool: ${name}`,
431
+ };
432
+ }
433
+ }
434
+ catch (error) {
435
+ return failure(error);
436
+ }
437
+ }
438
+ async statusFromProjectPath(input) {
439
+ const projectRoot = path.resolve(input.projectPath);
440
+ const config = loadProjectConfig(projectRoot);
441
+ const workspaceId = input.workspaceId
442
+ ? sanitizeRuntimeId(input.workspaceId)
443
+ : defaultWorkspaceId(projectRoot);
444
+ const statePath = projectStatePathForConfig({
445
+ projectRoot,
446
+ config,
447
+ workspaceId,
448
+ stateRoot: input.stateRoot,
449
+ });
450
+ const state = loadProjectState(statePath);
451
+ const route = state
452
+ ? await this.getRouteStatus({
453
+ targetId: state.targetId,
454
+ refreshHealth: input.refreshHealth,
455
+ })
456
+ : undefined;
457
+ return {
458
+ projectRoot,
459
+ statePath,
460
+ state,
461
+ ...(route ? { route } : {}),
462
+ };
463
+ }
464
+ async getRouteStatus(input) {
465
+ if (!this.routeRegistry?.getRouteStatus) {
466
+ return undefined;
467
+ }
468
+ return unwrapToolLikeResult(await this.routeRegistry.getRouteStatus(input));
469
+ }
470
+ async registerRoute(input) {
471
+ if (!this.routeRegistry) {
472
+ return;
473
+ }
474
+ unwrapToolLikeResult(await this.routeRegistry.registerProjectRoute(input));
475
+ }
476
+ async unregisterRoute(input) {
477
+ if (!this.routeRegistry) {
478
+ return;
479
+ }
480
+ unwrapToolLikeResult(await this.routeRegistry.unregisterProjectRoute(input));
481
+ }
482
+ }
483
+ export function createProjectLifecycleFromEnvironment(env = process.env) {
484
+ const routeRegistry = env.PLEXUS_GATEWAY_MCP_URL || env.PLEXUS_GATEWAY_PORT
485
+ ? new HttpGatewayRouteRegistry({
486
+ url: env.PLEXUS_GATEWAY_MCP_URL,
487
+ host: env.PLEXUS_GATEWAY_HOST,
488
+ port: env.PLEXUS_GATEWAY_PORT
489
+ ? Number(env.PLEXUS_GATEWAY_PORT)
490
+ : undefined,
491
+ })
492
+ : undefined;
493
+ return new PlexusProjectLifecycle({ routeRegistry });
494
+ }
495
+ //# sourceMappingURL=projectLifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectLifecycle.js","sourceRoot":"","sources":["../src/projectLifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { type PharoLauncherMcpToolClient } from "./pharoLauncherMcpClient.js";
2
+ import { type PharoMcpHealthClient } from "./pharoMcpHealth.js";
3
+ import { type ProjectPortRange, type ProjectState } from "./projectState.js";
4
+ export interface LauncherCommandResult<T = unknown> {
5
+ ok: boolean;
6
+ data?: T;
7
+ }
8
+ export interface LauncherProcess {
9
+ pid: number;
10
+ imageName?: string;
11
+ imagePath?: string;
12
+ commandLine: string;
13
+ }
14
+ export interface ProjectOpenPollOptions {
15
+ intervalMs?: number;
16
+ processTimeoutMs?: number;
17
+ healthTimeoutMs?: number;
18
+ }
19
+ export interface ProjectOpenOptions {
20
+ projectRoot: string;
21
+ stateRoot?: string;
22
+ workspaceId?: string;
23
+ targetId?: string;
24
+ imageIds?: string[];
25
+ pharoLauncherMcpClient?: PharoLauncherMcpToolClient;
26
+ healthClient?: PharoMcpHealthClient;
27
+ portRange?: ProjectPortRange;
28
+ now?: () => Date;
29
+ poll?: ProjectOpenPollOptions;
30
+ sleep?: (durationMs: number) => Promise<void>;
31
+ }
32
+ export interface ProjectOpenFailure {
33
+ imageId: string;
34
+ imageName: string;
35
+ message: string;
36
+ }
37
+ export interface ProjectOpenResult {
38
+ ok: boolean;
39
+ projectRoot: string;
40
+ statePath: string;
41
+ state: ProjectState;
42
+ failures: ProjectOpenFailure[];
43
+ }
44
+ export declare class ProjectOpenError extends Error {
45
+ readonly result: ProjectOpenResult;
46
+ constructor(message: string, result: ProjectOpenResult);
47
+ }
48
+ export declare function openProject(options: ProjectOpenOptions): Promise<ProjectOpenResult>;
49
+ //# sourceMappingURL=projectOpen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectOpen.d.ts","sourceRoot":"","sources":["../src/projectOpen.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EASL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,qBAAqB,CAAC,CAAC,GAAG,OAAO;IAChD,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,CAAC,CAAC;CACV;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,sBAAsB,CAAC,EAAE,0BAA0B,CAAC;IACpD,YAAY,CAAC,EAAE,oBAAoB,CAAC;IACpC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;CAChC;AAED,qBAAa,gBAAiB,SAAQ,KAAK;aAGvB,MAAM,EAAE,iBAAiB;gBADzC,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,iBAAiB;CAK5C;AA0MD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CA8H5B"}