@planweave-ai/runtime 0.1.0 → 0.1.1
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/autoRun/executors.d.ts.map +1 -1
- package/dist/autoRun/executors.js +7 -3
- package/dist/autoRun/executors.js.map +1 -1
- package/dist/desktop/canvasApi.d.ts.map +1 -1
- package/dist/desktop/canvasApi.js +133 -0
- package/dist/desktop/canvasApi.js.map +1 -1
- package/dist/desktop/canvasGraphApi.d.ts +6 -0
- package/dist/desktop/canvasGraphApi.d.ts.map +1 -0
- package/dist/desktop/canvasGraphApi.js +143 -0
- package/dist/desktop/canvasGraphApi.js.map +1 -0
- package/dist/desktop/graph/editModel.d.ts.map +1 -1
- package/dist/desktop/graph/editModel.js +29 -90
- package/dist/desktop/graph/editModel.js.map +1 -1
- package/dist/desktop/graph/projectCanvasAggregation.d.ts +11 -1
- package/dist/desktop/graph/projectCanvasAggregation.d.ts.map +1 -1
- package/dist/desktop/graph/projectCanvasAggregation.js +53 -11
- package/dist/desktop/graph/projectCanvasAggregation.js.map +1 -1
- package/dist/desktop/graph/todoModel.d.ts.map +1 -1
- package/dist/desktop/graph/todoModel.js +84 -24
- package/dist/desktop/graph/todoModel.js.map +1 -1
- package/dist/desktop/index.d.ts +1 -0
- package/dist/desktop/index.d.ts.map +1 -1
- package/dist/desktop/index.js +1 -0
- package/dist/desktop/index.js.map +1 -1
- package/dist/desktop/projectApi.d.ts.map +1 -1
- package/dist/desktop/projectApi.js +5 -1
- package/dist/desktop/projectApi.js.map +1 -1
- package/dist/desktop/runApi.d.ts.map +1 -1
- package/dist/desktop/runApi.js +6 -2
- package/dist/desktop/runApi.js.map +1 -1
- package/dist/desktop/types/bridgeTypes.d.ts +5 -1
- package/dist/desktop/types/bridgeTypes.d.ts.map +1 -1
- package/dist/desktop/types/graphTypes.d.ts +41 -0
- package/dist/desktop/types/graphTypes.d.ts.map +1 -1
- package/dist/graph/fieldEditMutation.d.ts +33 -0
- package/dist/graph/fieldEditMutation.d.ts.map +1 -0
- package/dist/graph/fieldEditMutation.js +157 -0
- package/dist/graph/fieldEditMutation.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/initWorkspace.d.ts +1 -0
- package/dist/initWorkspace.d.ts.map +1 -1
- package/dist/initWorkspace.js +3 -0
- package/dist/initWorkspace.js.map +1 -1
- package/dist/package/manifestEdit.d.ts.map +1 -1
- package/dist/package/manifestEdit.js +37 -191
- package/dist/package/manifestEdit.js.map +1 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +17 -2
- package/dist/paths.js.map +1 -1
- package/dist/projectGraph/compileProjectGraph.d.ts +3 -0
- package/dist/projectGraph/compileProjectGraph.d.ts.map +1 -0
- package/dist/projectGraph/compileProjectGraph.js +184 -0
- package/dist/projectGraph/compileProjectGraph.js.map +1 -0
- package/dist/projectGraph/graphAlgorithms.d.ts +4 -0
- package/dist/projectGraph/graphAlgorithms.d.ts.map +1 -0
- package/dist/projectGraph/graphAlgorithms.js +63 -0
- package/dist/projectGraph/graphAlgorithms.js.map +1 -0
- package/dist/projectGraph/index.d.ts +11 -0
- package/dist/projectGraph/index.d.ts.map +1 -0
- package/dist/projectGraph/index.js +9 -0
- package/dist/projectGraph/index.js.map +1 -0
- package/dist/projectGraph/loadProjectGraph.d.ts +7 -0
- package/dist/projectGraph/loadProjectGraph.d.ts.map +1 -0
- package/dist/projectGraph/loadProjectGraph.js +102 -0
- package/dist/projectGraph/loadProjectGraph.js.map +1 -0
- package/dist/projectGraph/materializeProjectGraph.d.ts +9 -0
- package/dist/projectGraph/materializeProjectGraph.d.ts.map +1 -0
- package/dist/projectGraph/materializeProjectGraph.js +35 -0
- package/dist/projectGraph/materializeProjectGraph.js.map +1 -0
- package/dist/projectGraph/migration.d.ts +6 -0
- package/dist/projectGraph/migration.d.ts.map +1 -0
- package/dist/projectGraph/migration.js +41 -0
- package/dist/projectGraph/migration.js.map +1 -0
- package/dist/projectGraph/projectGraphKeys.d.ts +6 -0
- package/dist/projectGraph/projectGraphKeys.d.ts.map +1 -0
- package/dist/projectGraph/projectGraphKeys.js +20 -0
- package/dist/projectGraph/projectGraphKeys.js.map +1 -0
- package/dist/projectGraph/projectGraphWorkspace.d.ts +5 -0
- package/dist/projectGraph/projectGraphWorkspace.d.ts.map +1 -0
- package/dist/projectGraph/projectGraphWorkspace.js +38 -0
- package/dist/projectGraph/projectGraphWorkspace.js.map +1 -0
- package/dist/projectGraph/runtimeAggregation.d.ts +30 -0
- package/dist/projectGraph/runtimeAggregation.d.ts.map +1 -0
- package/dist/projectGraph/runtimeAggregation.js +128 -0
- package/dist/projectGraph/runtimeAggregation.js.map +1 -0
- package/dist/projectGraph/schema.d.ts +35 -0
- package/dist/projectGraph/schema.d.ts.map +1 -0
- package/dist/projectGraph/schema.js +46 -0
- package/dist/projectGraph/schema.js.map +1 -0
- package/dist/projectGraph/types.d.ts +68 -0
- package/dist/projectGraph/types.d.ts.map +1 -0
- package/dist/projectGraph/types.js +4 -0
- package/dist/projectGraph/types.js.map +1 -0
- package/dist/taskManager/canvasCommandScope.d.ts +7 -0
- package/dist/taskManager/canvasCommandScope.d.ts.map +1 -0
- package/dist/taskManager/canvasCommandScope.js +34 -0
- package/dist/taskManager/canvasCommandScope.js.map +1 -0
- package/dist/taskManager/claimBlockDispatch.d.ts +7 -0
- package/dist/taskManager/claimBlockDispatch.d.ts.map +1 -0
- package/dist/taskManager/claimBlockDispatch.js +36 -0
- package/dist/taskManager/claimBlockDispatch.js.map +1 -0
- package/dist/taskManager/claimHints.d.ts +4 -0
- package/dist/taskManager/claimHints.d.ts.map +1 -0
- package/dist/taskManager/claimHints.js +86 -0
- package/dist/taskManager/claimHints.js.map +1 -0
- package/dist/taskManager/claimReadiness.d.ts +39 -0
- package/dist/taskManager/claimReadiness.d.ts.map +1 -0
- package/dist/taskManager/claimReadiness.js +102 -0
- package/dist/taskManager/claimReadiness.js.map +1 -0
- package/dist/taskManager/claimReadinessRules.d.ts +9 -0
- package/dist/taskManager/claimReadinessRules.d.ts.map +1 -0
- package/dist/taskManager/claimReadinessRules.js +47 -0
- package/dist/taskManager/claimReadinessRules.js.map +1 -0
- package/dist/taskManager/claimScheduler.d.ts.map +1 -1
- package/dist/taskManager/claimScheduler.js +36 -121
- package/dist/taskManager/claimScheduler.js.map +1 -1
- package/dist/taskManager/executionStatus.d.ts +3 -28
- package/dist/taskManager/executionStatus.d.ts.map +1 -1
- package/dist/taskManager/executionStatus.js +11 -107
- package/dist/taskManager/executionStatus.js.map +1 -1
- package/dist/taskManager/executorApi.d.ts.map +1 -1
- package/dist/taskManager/executorApi.js +12 -13
- package/dist/taskManager/executorApi.js.map +1 -1
- package/dist/taskManager/projectCanvasContext.d.ts +8 -0
- package/dist/taskManager/projectCanvasContext.d.ts.map +1 -0
- package/dist/taskManager/projectCanvasContext.js +66 -0
- package/dist/taskManager/projectCanvasContext.js.map +1 -0
- package/dist/taskManager/projectGraphClaimGuard.d.ts +6 -0
- package/dist/taskManager/projectGraphClaimGuard.d.ts.map +1 -0
- package/dist/taskManager/projectGraphClaimGuard.js +30 -0
- package/dist/taskManager/projectGraphClaimGuard.js.map +1 -0
- package/dist/taskManager/promptRenderer.d.ts +1 -1
- package/dist/taskManager/promptRenderer.d.ts.map +1 -1
- package/dist/taskManager/promptRenderer.js +16 -2
- package/dist/taskManager/promptRenderer.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validatePackage.d.ts.map +1 -1
- package/dist/validatePackage.js +35 -8
- package/dist/validatePackage.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { compileProjectGraph } from "./compileProjectGraph.js";
|
|
2
|
+
export { parseProjectTaskRefKey, projectCanvasEdgeKey, projectCrossTaskEdgeKey, projectTaskRefKey } from "./projectGraphKeys.js";
|
|
3
|
+
export { loadProjectGraph, loadProjectGraphForWorkspace, projectGraphPath, writeProjectGraph } from "./loadProjectGraph.js";
|
|
4
|
+
export { materializeProjectGraph } from "./materializeProjectGraph.js";
|
|
5
|
+
export { defaultCanvasProjectGraph, projectGraphFromLegacyRegistry } from "./migration.js";
|
|
6
|
+
export { projectGraphManifestSchema, projectGraphManifestSchema as projectGraphSchema } from "./schema.js";
|
|
7
|
+
export { projectCanvasWorkspace, resolveProjectCanvasWorkspace } from "./projectGraphWorkspace.js";
|
|
8
|
+
export { projectGraphEdgeTypes, projectGraphNodeTypes, projectGraphNodeTypes as projectGraphCanvasNodeTypes, supportedProjectGraphVersion, supportedProjectGraphVersion as projectGraphVersion } from "./types.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/projectGraph/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACjI,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC5H,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,0BAA0B,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AACnG,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,IAAI,2BAA2B,EACpD,4BAA4B,EAC5B,4BAA4B,IAAI,mBAAmB,EACpD,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ProjectWorkspace } from "../types.js";
|
|
2
|
+
import type { LoadedProjectGraph, ProjectGraphManifest } from "./types.js";
|
|
3
|
+
export declare function projectGraphPath(workspace: ProjectWorkspace): string;
|
|
4
|
+
export declare function loadProjectGraphForWorkspace(workspaceRef: ProjectWorkspace): Promise<LoadedProjectGraph>;
|
|
5
|
+
export declare function loadProjectGraph(projectRoot: string): Promise<LoadedProjectGraph>;
|
|
6
|
+
export declare function writeProjectGraph(workspace: ProjectWorkspace, manifest: ProjectGraphManifest): Promise<ProjectGraphManifest>;
|
|
7
|
+
//# sourceMappingURL=loadProjectGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadProjectGraph.d.ts","sourceRoot":"","sources":["../../src/projectGraph/loadProjectGraph.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAIrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAkB3E,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,gBAAgB,GAAG,MAAM,CAEpE;AA0CD,wBAAsB,4BAA4B,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsC9G;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAEvF;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAIlI"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { access } from "node:fs/promises";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { readJsonFile, writeJsonFile } from "../json.js";
|
|
5
|
+
import { resolveProjectWorkspace } from "../project.js";
|
|
6
|
+
import { normalizeRegistry } from "../desktop/canvasRegistry.js";
|
|
7
|
+
import { defaultCanvasProjectGraph, projectGraphFromLegacyRegistry } from "./migration.js";
|
|
8
|
+
import { projectGraphManifestSchema } from "./schema.js";
|
|
9
|
+
const defaultCanvasId = "default";
|
|
10
|
+
function issue(code, message, path) {
|
|
11
|
+
return { code, message, path };
|
|
12
|
+
}
|
|
13
|
+
async function exists(path) {
|
|
14
|
+
try {
|
|
15
|
+
await access(path, constants.R_OK);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
void error;
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function projectGraphPath(workspace) {
|
|
24
|
+
return join(workspace.workspaceRoot, "project-graph.json");
|
|
25
|
+
}
|
|
26
|
+
function projectGraphWorkspace(workspace) {
|
|
27
|
+
const workspaceRoot = join(workspace.planweaveHome, "projects", workspace.id);
|
|
28
|
+
return {
|
|
29
|
+
...workspace,
|
|
30
|
+
workspaceRoot,
|
|
31
|
+
projectFile: join(workspaceRoot, "project.json"),
|
|
32
|
+
packageDir: join(workspaceRoot, "package"),
|
|
33
|
+
manifestFile: join(workspaceRoot, "package", "manifest.json"),
|
|
34
|
+
stateFile: join(workspaceRoot, "state.json"),
|
|
35
|
+
resultsDir: join(workspaceRoot, "results"),
|
|
36
|
+
projectPromptFile: join(workspaceRoot, "policy", "project-prompt.md")
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
async function manifestTitle(workspace) {
|
|
40
|
+
try {
|
|
41
|
+
const raw = await readJsonFile(workspace.manifestFile);
|
|
42
|
+
if (raw && typeof raw === "object" && !Array.isArray(raw) && "project" in raw) {
|
|
43
|
+
const project = raw.project;
|
|
44
|
+
if (project && typeof project === "object" && !Array.isArray(project) && typeof project.title === "string") {
|
|
45
|
+
return project.title.trim() || "任务画布";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
void error;
|
|
51
|
+
return "任务画布";
|
|
52
|
+
}
|
|
53
|
+
return "任务画布";
|
|
54
|
+
}
|
|
55
|
+
async function defaultProjectGraph(workspace) {
|
|
56
|
+
return defaultCanvasProjectGraph(workspace, await manifestTitle(workspace));
|
|
57
|
+
}
|
|
58
|
+
async function legacyProjectGraph(workspace) {
|
|
59
|
+
const registryFile = join(workspace.workspaceRoot, "desktop", "canvases.json");
|
|
60
|
+
const registry = normalizeRegistry(await readJsonFile(registryFile));
|
|
61
|
+
return projectGraphFromLegacyRegistry(registry);
|
|
62
|
+
}
|
|
63
|
+
export async function loadProjectGraphForWorkspace(workspaceRef) {
|
|
64
|
+
const workspace = projectGraphWorkspace(workspaceRef);
|
|
65
|
+
const path = projectGraphPath(workspace);
|
|
66
|
+
if (await exists(path)) {
|
|
67
|
+
return {
|
|
68
|
+
workspace,
|
|
69
|
+
manifest: projectGraphManifestSchema.parse(await readJsonFile(path)),
|
|
70
|
+
source: "project_graph",
|
|
71
|
+
diagnostics: []
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const registryFile = join(workspace.workspaceRoot, "desktop", "canvases.json");
|
|
75
|
+
if (await exists(registryFile)) {
|
|
76
|
+
return {
|
|
77
|
+
workspace,
|
|
78
|
+
manifest: await legacyProjectGraph(workspace),
|
|
79
|
+
source: "legacy_registry",
|
|
80
|
+
diagnostics: [
|
|
81
|
+
issue("project_graph_missing_legacy_registry_used", "Project graph manifest is missing; derived canvas graph from legacy desktop canvas registry.", "project-graph.json")
|
|
82
|
+
]
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
workspace,
|
|
87
|
+
manifest: await defaultProjectGraph(workspace),
|
|
88
|
+
source: "legacy_default_canvas",
|
|
89
|
+
diagnostics: [
|
|
90
|
+
issue("project_graph_missing_default_canvas_used", "Project graph manifest is missing; derived canvas graph from the default package workspace.", "project-graph.json")
|
|
91
|
+
]
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export async function loadProjectGraph(projectRoot) {
|
|
95
|
+
return loadProjectGraphForWorkspace(await resolveProjectWorkspace(projectRoot));
|
|
96
|
+
}
|
|
97
|
+
export async function writeProjectGraph(workspace, manifest) {
|
|
98
|
+
const parsed = projectGraphManifestSchema.parse(manifest);
|
|
99
|
+
await writeJsonFile(projectGraphPath(workspace), parsed);
|
|
100
|
+
return parsed;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=loadProjectGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadProjectGraph.js","sourceRoot":"","sources":["../../src/projectGraph/loadProjectGraph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProjectGraphSource } from "./types.js";
|
|
2
|
+
export type MaterializeProjectGraphResult = {
|
|
3
|
+
path: string;
|
|
4
|
+
created: boolean;
|
|
5
|
+
source: ProjectGraphSource;
|
|
6
|
+
canvasCount: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function materializeProjectGraph(projectRoot: string): Promise<MaterializeProjectGraphResult>;
|
|
9
|
+
//# sourceMappingURL=materializeProjectGraph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materializeProjectGraph.d.ts","sourceRoot":"","sources":["../../src/projectGraph/materializeProjectGraph.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAWF,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAmBzG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { constants } from "node:fs";
|
|
2
|
+
import { access } from "node:fs/promises";
|
|
3
|
+
import { loadProjectGraph } from "./loadProjectGraph.js";
|
|
4
|
+
import { projectGraphPath, writeProjectGraph } from "./loadProjectGraph.js";
|
|
5
|
+
import { resolveProjectWorkspace } from "../project.js";
|
|
6
|
+
async function assertInitializedWorkspace(projectRoot) {
|
|
7
|
+
const workspace = await resolveProjectWorkspace(projectRoot);
|
|
8
|
+
try {
|
|
9
|
+
await Promise.all([access(workspace.projectFile, constants.R_OK), access(workspace.manifestFile, constants.R_OK), access(workspace.stateFile, constants.R_OK)]);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
throw new Error(`PlanWeave workspace has not been initialized. Run 'planweave init --project-graph --json' first.`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function materializeProjectGraph(projectRoot) {
|
|
16
|
+
await assertInitializedWorkspace(projectRoot);
|
|
17
|
+
const loaded = await loadProjectGraph(projectRoot);
|
|
18
|
+
const path = projectGraphPath(loaded.workspace);
|
|
19
|
+
if (loaded.source === "project_graph") {
|
|
20
|
+
return {
|
|
21
|
+
path,
|
|
22
|
+
created: false,
|
|
23
|
+
source: loaded.source,
|
|
24
|
+
canvasCount: loaded.manifest.canvases.length
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
await writeProjectGraph(loaded.workspace, loaded.manifest);
|
|
28
|
+
return {
|
|
29
|
+
path,
|
|
30
|
+
created: true,
|
|
31
|
+
source: loaded.source,
|
|
32
|
+
canvasCount: loaded.manifest.canvases.length
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=materializeProjectGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materializeProjectGraph.js","sourceRoot":"","sources":["../../src/projectGraph/materializeProjectGraph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAUxD,KAAK,UAAU,0BAA0B,CAAC,WAAmB;IAC3D,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClK,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,kGAAkG,CAAC,CAAC;IACtH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,WAAmB;IAC/D,MAAM,0BAA0B,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;QACtC,OAAO;YACL,IAAI;YACJ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;SAC7C,CAAC;IACJ,CAAC;IACD,MAAM,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM;KAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ProjectWorkspace } from "../types.js";
|
|
2
|
+
import type { TaskCanvasRegistry } from "../desktop/canvasRegistry.js";
|
|
3
|
+
import type { ProjectGraphManifest } from "./types.js";
|
|
4
|
+
export declare function projectGraphFromLegacyRegistry(registry: TaskCanvasRegistry): ProjectGraphManifest;
|
|
5
|
+
export declare function defaultCanvasProjectGraph(workspace: ProjectWorkspace, title: string): ProjectGraphManifest;
|
|
6
|
+
//# sourceMappingURL=migration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../src/projectGraph/migration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAUvD,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,kBAAkB,GAAG,oBAAoB,CAcjG;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAgB1G"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { isAbsolute, relative } from "node:path";
|
|
2
|
+
import { supportedProjectGraphVersion } from "./types.js";
|
|
3
|
+
function toWorkspaceRelative(workspace, path) {
|
|
4
|
+
if (!isAbsolute(path)) {
|
|
5
|
+
return path.split("\\").join("/");
|
|
6
|
+
}
|
|
7
|
+
return relative(workspace.workspaceRoot, path).split("\\").join("/");
|
|
8
|
+
}
|
|
9
|
+
export function projectGraphFromLegacyRegistry(registry) {
|
|
10
|
+
return {
|
|
11
|
+
version: supportedProjectGraphVersion,
|
|
12
|
+
canvases: registry.canvases.map((canvas) => ({
|
|
13
|
+
id: canvas.canvasId,
|
|
14
|
+
type: "canvas",
|
|
15
|
+
title: canvas.name,
|
|
16
|
+
packageDir: canvas.packageDir,
|
|
17
|
+
stateFile: canvas.stateFile,
|
|
18
|
+
resultsDir: canvas.resultsDir
|
|
19
|
+
})),
|
|
20
|
+
edges: [],
|
|
21
|
+
crossTaskEdges: []
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function defaultCanvasProjectGraph(workspace, title) {
|
|
25
|
+
return {
|
|
26
|
+
version: supportedProjectGraphVersion,
|
|
27
|
+
canvases: [
|
|
28
|
+
{
|
|
29
|
+
id: "default",
|
|
30
|
+
type: "canvas",
|
|
31
|
+
title,
|
|
32
|
+
packageDir: toWorkspaceRelative(workspace, workspace.packageDir),
|
|
33
|
+
stateFile: toWorkspaceRelative(workspace, workspace.stateFile),
|
|
34
|
+
resultsDir: toWorkspaceRelative(workspace, workspace.resultsDir)
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
edges: [],
|
|
38
|
+
crossTaskEdges: []
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../../src/projectGraph/migration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIjD,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE1D,SAAS,mBAAmB,CAAC,SAA2B,EAAE,IAAY;IACpE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,QAA4B;IACzE,OAAO;QACL,OAAO,EAAE,4BAA4B;QACrC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC3C,EAAE,EAAE,MAAM,CAAC,QAAQ;YACnB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,MAAM,CAAC,IAAI;YAClB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC,CAAC;QACH,KAAK,EAAE,EAAE;QACT,cAAc,EAAE,EAAE;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAA2B,EAAE,KAAa;IAClF,OAAO;QACL,OAAO,EAAE,4BAA4B;QACrC,QAAQ,EAAE;YACR;gBACE,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,QAAQ;gBACd,KAAK;gBACL,UAAU,EAAE,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC;gBAChE,SAAS,EAAE,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC;gBAC9D,UAAU,EAAE,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,UAAU,CAAC;aACjE;SACF;QACD,KAAK,EAAE,EAAE;QACT,cAAc,EAAE,EAAE;KACnB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ProjectCanvasEdge, ProjectCrossTaskEdge, ProjectTaskRef, ProjectTaskRefString } from "./types.js";
|
|
2
|
+
export declare function projectTaskRefKey(ref: ProjectTaskRef): ProjectTaskRefString;
|
|
3
|
+
export declare function parseProjectTaskRefKey(ref: ProjectTaskRefString): ProjectTaskRef;
|
|
4
|
+
export declare function projectCanvasEdgeKey(edge: ProjectCanvasEdge): string;
|
|
5
|
+
export declare function projectCrossTaskEdgeKey(edge: ProjectCrossTaskEdge): string;
|
|
6
|
+
//# sourceMappingURL=projectGraphKeys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectGraphKeys.d.ts","sourceRoot":"","sources":["../../src/projectGraph/projectGraphKeys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEhH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,GAAG,oBAAoB,CAE3E;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,oBAAoB,GAAG,cAAc,CAShF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAEpE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAE1E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function projectTaskRefKey(ref) {
|
|
2
|
+
return `${ref.canvasId}::${ref.taskId}`;
|
|
3
|
+
}
|
|
4
|
+
export function parseProjectTaskRefKey(ref) {
|
|
5
|
+
const separator = ref.indexOf("::");
|
|
6
|
+
if (separator <= 0 || separator === ref.length - 2) {
|
|
7
|
+
throw new Error(`Invalid project task ref '${ref}'. Expected '<canvas-id>::<task-id>'.`);
|
|
8
|
+
}
|
|
9
|
+
return {
|
|
10
|
+
canvasId: ref.slice(0, separator),
|
|
11
|
+
taskId: ref.slice(separator + 2)
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function projectCanvasEdgeKey(edge) {
|
|
15
|
+
return `${edge.from}\u0000${edge.type}\u0000${edge.to}`;
|
|
16
|
+
}
|
|
17
|
+
export function projectCrossTaskEdgeKey(edge) {
|
|
18
|
+
return `${projectTaskRefKey(edge.from)}\u0000${edge.type}\u0000${projectTaskRefKey(edge.to)}`;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=projectGraphKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectGraphKeys.js","sourceRoot":"","sources":["../../src/projectGraph/projectGraphKeys.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,GAAmB;IACnD,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAyB;IAC9D,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,uCAAuC,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;QACjC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAuB;IAC1D,OAAO,GAAG,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAA0B;IAChE,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,SAAS,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AAChG,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ProjectCanvasNode } from "./types.js";
|
|
2
|
+
import type { ProjectWorkspace } from "../types.js";
|
|
3
|
+
export declare function projectCanvasWorkspace(projectWorkspace: ProjectWorkspace, canvas: ProjectCanvasNode): ProjectWorkspace;
|
|
4
|
+
export declare function resolveProjectCanvasWorkspace(projectRoot: string, canvasId: string): Promise<ProjectWorkspace>;
|
|
5
|
+
//# sourceMappingURL=projectGraphWorkspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectGraphWorkspace.d.ts","sourceRoot":"","sources":["../../src/projectGraph/projectGraphWorkspace.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAepD,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,GAAG,gBAAgB,CAetH;AAED,wBAAsB,6BAA6B,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAOpH"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { dirname, isAbsolute, join, relative, resolve } from "node:path";
|
|
2
|
+
import { loadProjectGraph } from "./loadProjectGraph.js";
|
|
3
|
+
function fromWorkspaceRelative(workspace, path) {
|
|
4
|
+
return isAbsolute(path) ? path : join(workspace.workspaceRoot, path);
|
|
5
|
+
}
|
|
6
|
+
function assertWorkspaceChild(projectWorkspace, path) {
|
|
7
|
+
const workspaceRoot = resolve(projectWorkspace.workspaceRoot);
|
|
8
|
+
const target = resolve(path);
|
|
9
|
+
const relativeTarget = relative(workspaceRoot, target);
|
|
10
|
+
if (!relativeTarget || relativeTarget.startsWith("..") || isAbsolute(relativeTarget)) {
|
|
11
|
+
throw new Error(`Project canvas path '${path}' is outside the PlanWeave workspace.`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function projectCanvasWorkspace(projectWorkspace, canvas) {
|
|
15
|
+
const packageDir = fromWorkspaceRelative(projectWorkspace, canvas.packageDir);
|
|
16
|
+
const stateFile = fromWorkspaceRelative(projectWorkspace, canvas.stateFile);
|
|
17
|
+
const resultsDir = fromWorkspaceRelative(projectWorkspace, canvas.resultsDir);
|
|
18
|
+
assertWorkspaceChild(projectWorkspace, packageDir);
|
|
19
|
+
assertWorkspaceChild(projectWorkspace, stateFile);
|
|
20
|
+
assertWorkspaceChild(projectWorkspace, resultsDir);
|
|
21
|
+
return {
|
|
22
|
+
...projectWorkspace,
|
|
23
|
+
workspaceRoot: canvas.id === "default" ? projectWorkspace.workspaceRoot : dirname(packageDir),
|
|
24
|
+
packageDir,
|
|
25
|
+
manifestFile: join(packageDir, "manifest.json"),
|
|
26
|
+
stateFile,
|
|
27
|
+
resultsDir
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export async function resolveProjectCanvasWorkspace(projectRoot, canvasId) {
|
|
31
|
+
const { workspace, manifest } = await loadProjectGraph(projectRoot);
|
|
32
|
+
const canvas = manifest.canvases.find((candidate) => candidate.id === canvasId);
|
|
33
|
+
if (!canvas) {
|
|
34
|
+
throw new Error(`Project canvas '${canvasId}' does not exist.`);
|
|
35
|
+
}
|
|
36
|
+
return projectCanvasWorkspace(workspace, canvas);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=projectGraphWorkspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectGraphWorkspace.js","sourceRoot":"","sources":["../../src/projectGraph/projectGraphWorkspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIzD,SAAS,qBAAqB,CAAC,SAA2B,EAAE,IAAY;IACtE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,oBAAoB,CAAC,gBAAkC,EAAE,IAAY;IAC5E,MAAM,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,uCAAuC,CAAC,CAAC;IACvF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,gBAAkC,EAAE,MAAyB;IAClG,MAAM,UAAU,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC9E,oBAAoB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACnD,oBAAoB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;IAClD,oBAAoB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACnD,OAAO;QACL,GAAG,gBAAgB;QACnB,aAAa,EAAE,MAAM,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC7F,UAAU;QACV,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC;QAC/C,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,WAAmB,EAAE,QAAgB;IACvF,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IAChF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,mBAAmB,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ProjectWorkspace, TaskStatus, ValidationIssue } from "../types.js";
|
|
2
|
+
import type { CompiledProjectGraph, LoadedProjectGraph, ProjectCanvasNode } from "./types.js";
|
|
3
|
+
export type ProjectCanvasRuntimeSnapshot = {
|
|
4
|
+
taskCount: number;
|
|
5
|
+
taskStatusById: Map<string, TaskStatus>;
|
|
6
|
+
complete: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type ProjectCanvasRuntimeContext = {
|
|
9
|
+
canvasId: string;
|
|
10
|
+
canvasName: string;
|
|
11
|
+
projectCanvas: ProjectCanvasNode;
|
|
12
|
+
runtimeSnapshot: ProjectCanvasRuntimeSnapshot;
|
|
13
|
+
workspace: ProjectWorkspace;
|
|
14
|
+
};
|
|
15
|
+
export type ProjectCanvasRuntimeAggregationContext = {
|
|
16
|
+
loaded: LoadedProjectGraph;
|
|
17
|
+
graph: CompiledProjectGraph;
|
|
18
|
+
orderedCanvasIds: string[];
|
|
19
|
+
canvases: ProjectCanvasRuntimeContext[];
|
|
20
|
+
canvasesById: Map<string, ProjectCanvasRuntimeContext>;
|
|
21
|
+
runtimeSnapshotsByCanvas: Map<string, ProjectCanvasRuntimeSnapshot>;
|
|
22
|
+
notes: string[];
|
|
23
|
+
};
|
|
24
|
+
export declare function projectGraphDiagnosticNote(diagnostic: ValidationIssue): string;
|
|
25
|
+
export declare function projectCanvasExecutionOrder(graph: CompiledProjectGraph): string[];
|
|
26
|
+
export declare function loadProjectCanvasRuntimeAggregation(projectRootOrWorkspace: string | ProjectWorkspace): Promise<ProjectCanvasRuntimeAggregationContext>;
|
|
27
|
+
export declare function projectBlockersForTask(context: ProjectCanvasRuntimeAggregationContext, canvasId: string, taskId: string): string[];
|
|
28
|
+
export declare function projectBlockerReasonForTask(context: ProjectCanvasRuntimeAggregationContext, canvasId: string, taskId: string): string | null;
|
|
29
|
+
export declare function currentProjectCanvasForWorkspace(context: ProjectCanvasRuntimeAggregationContext, workspace: ProjectWorkspace): ProjectCanvasRuntimeContext | null;
|
|
30
|
+
//# sourceMappingURL=runtimeAggregation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeAggregation.d.ts","sourceRoot":"","sources":["../../src/projectGraph/runtimeAggregation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAIjF,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAkB,MAAM,YAAY,CAAC;AAE9G,MAAM,MAAM,4BAA4B,GAAG;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,iBAAiB,CAAC;IACjC,eAAe,EAAE,4BAA4B,CAAC;IAC9C,SAAS,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IACnD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,oBAAoB,CAAC;IAC5B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,2BAA2B,EAAE,CAAC;IACxC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IACvD,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;IACpE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAUF,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,eAAe,GAAG,MAAM,CAE9E;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAyBjF;AAkBD,wBAAsB,mCAAmC,CACvD,sBAAsB,EAAE,MAAM,GAAG,gBAAgB,GAChD,OAAO,CAAC,sCAAsC,CAAC,CA+CjD;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,sCAAsC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAUlI;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,sCAAsC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5I;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,sCAAsC,EAC/C,SAAS,EAAE,gBAAgB,GAC1B,2BAA2B,GAAG,IAAI,CAQpC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { resolve } from "node:path";
|
|
2
|
+
import { compileTaskGraph } from "../graph/compileTaskGraph.js";
|
|
3
|
+
import { loadPackage } from "../package/loadPackage.js";
|
|
4
|
+
import { ensureStateForManifest, readState } from "../state.js";
|
|
5
|
+
import { compileProjectGraph } from "./compileProjectGraph.js";
|
|
6
|
+
import { loadProjectGraph, loadProjectGraphForWorkspace } from "./loadProjectGraph.js";
|
|
7
|
+
import { projectCanvasWorkspace } from "./projectGraphWorkspace.js";
|
|
8
|
+
function emptyRuntimeSnapshot() {
|
|
9
|
+
return {
|
|
10
|
+
taskCount: 0,
|
|
11
|
+
taskStatusById: new Map(),
|
|
12
|
+
complete: false
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export function projectGraphDiagnosticNote(diagnostic) {
|
|
16
|
+
return `${diagnostic.code}${diagnostic.path ? ` [${diagnostic.path}]` : ""}: ${diagnostic.message}`;
|
|
17
|
+
}
|
|
18
|
+
export function projectCanvasExecutionOrder(graph) {
|
|
19
|
+
const visited = new Set();
|
|
20
|
+
const visiting = new Set();
|
|
21
|
+
const ordered = [];
|
|
22
|
+
const visit = (canvasId) => {
|
|
23
|
+
if (visited.has(canvasId)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (visiting.has(canvasId)) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
visiting.add(canvasId);
|
|
30
|
+
for (const dependency of graph.canvasDependenciesByCanvas.get(canvasId) ?? []) {
|
|
31
|
+
visit(dependency);
|
|
32
|
+
}
|
|
33
|
+
visiting.delete(canvasId);
|
|
34
|
+
visited.add(canvasId);
|
|
35
|
+
ordered.push(canvasId);
|
|
36
|
+
};
|
|
37
|
+
for (const canvasId of graph.canvasIdsInOrder) {
|
|
38
|
+
visit(canvasId);
|
|
39
|
+
}
|
|
40
|
+
return ordered;
|
|
41
|
+
}
|
|
42
|
+
function taskRefLabel(ref) {
|
|
43
|
+
return `${ref.canvasId}:${ref.taskId}`;
|
|
44
|
+
}
|
|
45
|
+
async function canvasRuntimeSnapshot(workspace) {
|
|
46
|
+
const { manifest } = await loadPackage(workspace);
|
|
47
|
+
const graph = compileTaskGraph(manifest);
|
|
48
|
+
const state = ensureStateForManifest(manifest, await readState(workspace.stateFile));
|
|
49
|
+
const taskStatusById = new Map(graph.taskNodesInManifestOrder.map((taskId) => [taskId, state.tasks[taskId]?.status ?? "planned"]));
|
|
50
|
+
return {
|
|
51
|
+
taskCount: graph.taskNodesInManifestOrder.length,
|
|
52
|
+
taskStatusById,
|
|
53
|
+
complete: graph.taskNodesInManifestOrder.every((taskId) => state.tasks[taskId]?.status === "implemented")
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export async function loadProjectCanvasRuntimeAggregation(projectRootOrWorkspace) {
|
|
57
|
+
const loaded = typeof projectRootOrWorkspace === "string"
|
|
58
|
+
? await loadProjectGraph(projectRootOrWorkspace)
|
|
59
|
+
: await loadProjectGraphForWorkspace(projectRootOrWorkspace);
|
|
60
|
+
const graph = await compileProjectGraph(loaded);
|
|
61
|
+
const orderedCanvasIds = projectCanvasExecutionOrder(graph);
|
|
62
|
+
const notes = [
|
|
63
|
+
"Project graph dependencies gate ready queues; canvases without upstream blockers may run in parallel.",
|
|
64
|
+
...graph.diagnostics.warnings.map((warning) => `Warning: ${projectGraphDiagnosticNote(warning)}`),
|
|
65
|
+
...graph.diagnostics.errors.map((error) => `Error: ${projectGraphDiagnosticNote(error)}`)
|
|
66
|
+
];
|
|
67
|
+
const canvases = [];
|
|
68
|
+
const canvasesById = new Map();
|
|
69
|
+
const runtimeSnapshotsByCanvas = new Map();
|
|
70
|
+
for (const canvasId of orderedCanvasIds) {
|
|
71
|
+
const projectCanvas = graph.canvasesById.get(canvasId);
|
|
72
|
+
if (!projectCanvas) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
let workspace;
|
|
76
|
+
try {
|
|
77
|
+
workspace = projectCanvasWorkspace(loaded.workspace, projectCanvas);
|
|
78
|
+
}
|
|
79
|
+
catch (caught) {
|
|
80
|
+
notes.push(`Error: ${canvasId}: ${caught instanceof Error ? caught.message : String(caught)}`);
|
|
81
|
+
runtimeSnapshotsByCanvas.set(canvasId, emptyRuntimeSnapshot());
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
let runtimeSnapshot = emptyRuntimeSnapshot();
|
|
85
|
+
try {
|
|
86
|
+
runtimeSnapshot = await canvasRuntimeSnapshot(workspace);
|
|
87
|
+
}
|
|
88
|
+
catch (caught) {
|
|
89
|
+
notes.push(`Error: ${canvasId}: ${caught instanceof Error ? caught.message : String(caught)}`);
|
|
90
|
+
}
|
|
91
|
+
const context = {
|
|
92
|
+
canvasId,
|
|
93
|
+
canvasName: projectCanvas.title,
|
|
94
|
+
projectCanvas,
|
|
95
|
+
runtimeSnapshot,
|
|
96
|
+
workspace
|
|
97
|
+
};
|
|
98
|
+
canvases.push(context);
|
|
99
|
+
canvasesById.set(canvasId, context);
|
|
100
|
+
runtimeSnapshotsByCanvas.set(canvasId, runtimeSnapshot);
|
|
101
|
+
}
|
|
102
|
+
return { loaded, graph, orderedCanvasIds, canvases, canvasesById, runtimeSnapshotsByCanvas, notes };
|
|
103
|
+
}
|
|
104
|
+
export function projectBlockersForTask(context, canvasId, taskId) {
|
|
105
|
+
const canvasBlockers = (context.graph.canvasDependenciesByCanvas.get(canvasId) ?? [])
|
|
106
|
+
.filter((dependencyCanvasId) => !(context.runtimeSnapshotsByCanvas.get(dependencyCanvasId)?.complete ?? false))
|
|
107
|
+
.map((dependencyCanvasId) => `canvas:${dependencyCanvasId}`);
|
|
108
|
+
const taskBlockers = context.graph
|
|
109
|
+
.crossTaskDependencies({ canvasId, taskId })
|
|
110
|
+
.filter((dependency) => dependency.canvasId !== canvasId)
|
|
111
|
+
.filter((dependency) => context.runtimeSnapshotsByCanvas.get(dependency.canvasId)?.taskStatusById.get(dependency.taskId) !== "implemented")
|
|
112
|
+
.map(taskRefLabel);
|
|
113
|
+
return Array.from(new Set([...canvasBlockers, ...taskBlockers]));
|
|
114
|
+
}
|
|
115
|
+
export function projectBlockerReasonForTask(context, canvasId, taskId) {
|
|
116
|
+
const blockers = projectBlockersForTask(context, canvasId, taskId);
|
|
117
|
+
return blockers.length > 0 ? `Project graph blockers are not complete: ${blockers.join(", ")}.` : null;
|
|
118
|
+
}
|
|
119
|
+
export function currentProjectCanvasForWorkspace(context, workspace) {
|
|
120
|
+
for (const canvasId of context.graph.canvasIdsInOrder) {
|
|
121
|
+
const canvas = context.canvasesById.get(canvasId);
|
|
122
|
+
if (canvas && resolve(canvas.workspace.packageDir) === resolve(workspace.packageDir)) {
|
|
123
|
+
return canvas;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=runtimeAggregation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtimeAggregation.js","sourceRoot":"","sources":["../../src/projectGraph/runtimeAggregation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const projectGraphManifestSchema: z.ZodObject<{
|
|
3
|
+
version: z.ZodLiteral<"plan-project/v1">;
|
|
4
|
+
canvases: z.ZodArray<z.ZodObject<{
|
|
5
|
+
id: z.ZodString;
|
|
6
|
+
type: z.ZodLiteral<"canvas">;
|
|
7
|
+
title: z.ZodString;
|
|
8
|
+
description: z.ZodOptional<z.ZodString>;
|
|
9
|
+
packageDir: z.ZodString;
|
|
10
|
+
stateFile: z.ZodString;
|
|
11
|
+
resultsDir: z.ZodString;
|
|
12
|
+
}, z.core.$strict>>;
|
|
13
|
+
edges: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
14
|
+
from: z.ZodString;
|
|
15
|
+
to: z.ZodString;
|
|
16
|
+
type: z.ZodEnum<{
|
|
17
|
+
depends_on: "depends_on";
|
|
18
|
+
}>;
|
|
19
|
+
}, z.core.$strict>>>;
|
|
20
|
+
crossTaskEdges: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
21
|
+
from: z.ZodObject<{
|
|
22
|
+
canvasId: z.ZodString;
|
|
23
|
+
taskId: z.ZodString;
|
|
24
|
+
}, z.core.$strict>;
|
|
25
|
+
to: z.ZodObject<{
|
|
26
|
+
canvasId: z.ZodString;
|
|
27
|
+
taskId: z.ZodString;
|
|
28
|
+
}, z.core.$strict>;
|
|
29
|
+
type: z.ZodEnum<{
|
|
30
|
+
depends_on: "depends_on";
|
|
31
|
+
}>;
|
|
32
|
+
}, z.core.$strict>>>;
|
|
33
|
+
}, z.core.$strict>;
|
|
34
|
+
export type ParsedProjectGraphManifest = z.infer<typeof projectGraphManifestSchema>;
|
|
35
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/projectGraph/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA2CxB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAO5B,CAAC;AAEZ,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { projectGraphEdgeTypes, supportedProjectGraphVersion } from "./types.js";
|
|
3
|
+
const canvasIdSchema = z
|
|
4
|
+
.string()
|
|
5
|
+
.min(1)
|
|
6
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/, "Canvas id must be CLI-safe: start with a letter or number, then use only letters, numbers, dots, underscores, or hyphens.");
|
|
7
|
+
const projectTaskRefSchema = z
|
|
8
|
+
.object({
|
|
9
|
+
canvasId: canvasIdSchema,
|
|
10
|
+
taskId: z.string().min(1)
|
|
11
|
+
})
|
|
12
|
+
.strict();
|
|
13
|
+
const projectCanvasNodeSchema = z
|
|
14
|
+
.object({
|
|
15
|
+
id: canvasIdSchema,
|
|
16
|
+
type: z.literal("canvas"),
|
|
17
|
+
title: z.string().min(1),
|
|
18
|
+
description: z.string().optional(),
|
|
19
|
+
packageDir: z.string().min(1),
|
|
20
|
+
stateFile: z.string().min(1),
|
|
21
|
+
resultsDir: z.string().min(1)
|
|
22
|
+
})
|
|
23
|
+
.strict();
|
|
24
|
+
const projectCanvasEdgeSchema = z
|
|
25
|
+
.object({
|
|
26
|
+
from: canvasIdSchema,
|
|
27
|
+
to: canvasIdSchema,
|
|
28
|
+
type: z.enum(projectGraphEdgeTypes)
|
|
29
|
+
})
|
|
30
|
+
.strict();
|
|
31
|
+
const projectCrossTaskEdgeSchema = z
|
|
32
|
+
.object({
|
|
33
|
+
from: projectTaskRefSchema,
|
|
34
|
+
to: projectTaskRefSchema,
|
|
35
|
+
type: z.enum(projectGraphEdgeTypes)
|
|
36
|
+
})
|
|
37
|
+
.strict();
|
|
38
|
+
export const projectGraphManifestSchema = z
|
|
39
|
+
.object({
|
|
40
|
+
version: z.literal(supportedProjectGraphVersion),
|
|
41
|
+
canvases: z.array(projectCanvasNodeSchema).min(1),
|
|
42
|
+
edges: z.array(projectCanvasEdgeSchema).default([]),
|
|
43
|
+
crossTaskEdges: z.array(projectCrossTaskEdgeSchema).default([])
|
|
44
|
+
})
|
|
45
|
+
.strict();
|
|
46
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/projectGraph/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAEjF,MAAM,cAAc,GAAG,CAAC;KACrB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,KAAK,CAAC,8BAA8B,EAAE,2HAA2H,CAAC,CAAC;AAEtK,MAAM,oBAAoB,GAAG,CAAC;KAC3B,MAAM,CAAC;IACN,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,uBAAuB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,uBAAuB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,IAAI,EAAE,cAAc;IACpB,EAAE,EAAE,cAAc;IAClB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;CACpC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,0BAA0B,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,IAAI,EAAE,oBAAoB;IAC1B,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;CACpC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC;IAChD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACnD,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAChE,CAAC;KACD,MAAM,EAAE,CAAC"}
|