@abhinav2203/codeflow-canvas 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/abhinav2203-codeflow-canvas-0.1.0.tgz +0 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +84 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/components/blueprint-workbench.d.ts +2 -0
- package/dist/components/blueprint-workbench.d.ts.map +1 -0
- package/dist/components/blueprint-workbench.js +144 -0
- package/dist/components/blueprint-workbench.js.map +1 -0
- package/dist/components/code-diff-editor.d.ts +12 -0
- package/dist/components/code-diff-editor.d.ts.map +1 -0
- package/dist/components/code-diff-editor.js +39 -0
- package/dist/components/code-diff-editor.js.map +1 -0
- package/dist/components/code-editor.d.ts +25 -0
- package/dist/components/code-editor.d.ts.map +1 -0
- package/dist/components/code-editor.js +264 -0
- package/dist/components/code-editor.js.map +1 -0
- package/dist/components/file-tabs.d.ts +5 -0
- package/dist/components/file-tabs.d.ts.map +1 -0
- package/dist/components/file-tabs.js +164 -0
- package/dist/components/file-tabs.js.map +1 -0
- package/dist/components/file-tree.d.ts +7 -0
- package/dist/components/file-tree.d.ts.map +1 -0
- package/dist/components/file-tree.js +176 -0
- package/dist/components/file-tree.js.map +1 -0
- package/dist/components/graph-canvas.d.ts +25 -0
- package/dist/components/graph-canvas.d.ts.map +1 -0
- package/dist/components/graph-canvas.js +224 -0
- package/dist/components/graph-canvas.js.map +1 -0
- package/dist/components/ide-layout.d.ts +10 -0
- package/dist/components/ide-layout.d.ts.map +1 -0
- package/dist/components/ide-layout.js +40 -0
- package/dist/components/ide-layout.js.map +1 -0
- package/dist/components/ide-workbench.d.ts +4 -0
- package/dist/components/ide-workbench.d.ts.map +1 -0
- package/dist/components/ide-workbench.js +6 -0
- package/dist/components/ide-workbench.js.map +1 -0
- package/dist/components/index.d.ts +13 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +13 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/monaco-setup.d.ts +4 -0
- package/dist/components/monaco-setup.d.ts.map +1 -0
- package/dist/components/monaco-setup.js +34 -0
- package/dist/components/monaco-setup.js.map +1 -0
- package/dist/components/opencode-settings.d.ts +8 -0
- package/dist/components/opencode-settings.d.ts.map +1 -0
- package/dist/components/opencode-settings.js +33 -0
- package/dist/components/opencode-settings.js.map +1 -0
- package/dist/components/policy-workbench.d.ts +2 -0
- package/dist/components/policy-workbench.d.ts.map +1 -0
- package/dist/components/policy-workbench.js +102 -0
- package/dist/components/policy-workbench.js.map +1 -0
- package/dist/components/ts-language-service.d.ts +14 -0
- package/dist/components/ts-language-service.d.ts.map +1 -0
- package/dist/components/ts-language-service.js +123 -0
- package/dist/components/ts-language-service.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/browser/storage.d.ts +16 -0
- package/dist/lib/browser/storage.d.ts.map +1 -0
- package/dist/lib/browser/storage.js +18 -0
- package/dist/lib/browser/storage.js.map +1 -0
- package/dist/lib/edit.d.ts +14 -0
- package/dist/lib/edit.d.ts.map +1 -0
- package/dist/lib/edit.js +57 -0
- package/dist/lib/edit.js.map +1 -0
- package/dist/lib/flow-view.d.ts +80 -0
- package/dist/lib/flow-view.d.ts.map +1 -0
- package/dist/lib/flow-view.js +850 -0
- package/dist/lib/flow-view.js.map +1 -0
- package/dist/lib/heatmap.d.ts +28 -0
- package/dist/lib/heatmap.d.ts.map +1 -0
- package/dist/lib/heatmap.js +61 -0
- package/dist/lib/heatmap.js.map +1 -0
- package/dist/lib/index.d.ts +9 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +6 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/node-navigation.d.ts +36 -0
- package/dist/lib/node-navigation.d.ts.map +1 -0
- package/dist/lib/node-navigation.js +52 -0
- package/dist/lib/node-navigation.js.map +1 -0
- package/dist/lib/traces.d.ts +3 -0
- package/dist/lib/traces.d.ts.map +1 -0
- package/dist/lib/traces.js +64 -0
- package/dist/lib/traces.js.map +1 -0
- package/dist/lib/types.d.ts +57 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +7 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/store/blueprint-store.d.ts +35 -0
- package/dist/store/blueprint-store.d.ts.map +1 -0
- package/dist/store/blueprint-store.js +79 -0
- package/dist/store/blueprint-store.js.map +1 -0
- package/dist/store/index.d.ts +3 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +2 -0
- package/dist/store/index.js.map +1 -0
- package/package.json +52 -0
- package/scripts/wrap-cli.mjs +15 -0
- package/src/bin/cli.ts +128 -0
- package/src/components/blueprint-workbench.tsx +305 -0
- package/src/components/code-diff-editor.tsx +80 -0
- package/src/components/code-editor.tsx +389 -0
- package/src/components/file-tabs.tsx +288 -0
- package/src/components/file-tree.tsx +301 -0
- package/src/components/graph-canvas.tsx +404 -0
- package/src/components/ide-layout.tsx +104 -0
- package/src/components/ide-workbench.tsx +5 -0
- package/src/components/index.ts +12 -0
- package/src/components/monaco-setup.ts +67 -0
- package/src/components/opencode-settings.tsx +82 -0
- package/src/components/policy-workbench.tsx +233 -0
- package/src/components/ts-language-service.ts +170 -0
- package/src/index.ts +54 -0
- package/src/lib/browser/storage.ts +19 -0
- package/src/lib/edit.ts +74 -0
- package/src/lib/flow-view.ts +1176 -0
- package/src/lib/heatmap.ts +103 -0
- package/src/lib/index.ts +41 -0
- package/src/lib/node-navigation.ts +76 -0
- package/src/lib/traces.ts +79 -0
- package/src/lib/types.ts +79 -0
- package/src/store/blueprint-store.ts +136 -0
- package/src/store/index.ts +2 -0
- package/test-fixtures/minimal-blueprint.json +34 -0
- package/test-fixtures/sample-blueprint.json +184 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.json +22 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/vitest.config.ts +9 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { memo, useEffect } from "react";
|
|
4
|
+
import { Background, Controls, Handle, MarkerType, MiniMap, Position, ReactFlow, ReactFlowProvider, useReactFlow } from "@xyflow/react";
|
|
5
|
+
import { buildExecutionProjection, buildFlowEdges, buildFlowNodes, buildGhostFlowNodes } from "../lib/flow-view.js";
|
|
6
|
+
const TRACE_STATUS_LABEL = {
|
|
7
|
+
idle: "Ready",
|
|
8
|
+
success: "Synced",
|
|
9
|
+
warning: "Deploying",
|
|
10
|
+
error: "Invalid"
|
|
11
|
+
};
|
|
12
|
+
const EXECUTION_STATUS_LABEL = {
|
|
13
|
+
idle: "Idle",
|
|
14
|
+
running: "Running",
|
|
15
|
+
pending: "Pending",
|
|
16
|
+
passed: "Passed",
|
|
17
|
+
failed: "Failed",
|
|
18
|
+
blocked: "Blocked",
|
|
19
|
+
skipped: "Skipped",
|
|
20
|
+
warning: "Warning"
|
|
21
|
+
};
|
|
22
|
+
const EXECUTION_STATUS_TONE = {
|
|
23
|
+
running: "#2563eb",
|
|
24
|
+
pending: "#64748b",
|
|
25
|
+
passed: "#15803d",
|
|
26
|
+
failed: "#dc2626",
|
|
27
|
+
blocked: "#d97706",
|
|
28
|
+
skipped: "#64748b",
|
|
29
|
+
warning: "#c2410c"
|
|
30
|
+
};
|
|
31
|
+
const HEALTH_STATUS_LABEL = {
|
|
32
|
+
neutral: "Stable",
|
|
33
|
+
aligned: "Aligned",
|
|
34
|
+
drift: "Drift",
|
|
35
|
+
heal: "Heal",
|
|
36
|
+
ghost: "Ghost"
|
|
37
|
+
};
|
|
38
|
+
const mergeClassNames = (...classNames) => classNames.filter(Boolean).join(" ").trim();
|
|
39
|
+
const getExecutionTone = (status) => {
|
|
40
|
+
if (!status || status === "idle") {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
return EXECUTION_STATUS_TONE[status];
|
|
44
|
+
};
|
|
45
|
+
const resolveExecutionFromNode = (node, projection, graph) => {
|
|
46
|
+
if (node.data.execution && node.data.execution.status !== "idle") {
|
|
47
|
+
return node.data.execution;
|
|
48
|
+
}
|
|
49
|
+
if (!projection) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
if (node.data.drilldownNodeId && projection.nodeStates[node.data.drilldownNodeId]?.status) {
|
|
53
|
+
return projection.nodeStates[node.data.drilldownNodeId];
|
|
54
|
+
}
|
|
55
|
+
if (projection.nodeStates[node.id]?.status) {
|
|
56
|
+
return projection.nodeStates[node.id];
|
|
57
|
+
}
|
|
58
|
+
if (node.id.startsWith("detail:root:")) {
|
|
59
|
+
const rootNodeId = node.id.slice("detail:root:".length);
|
|
60
|
+
return projection.nodeStates[rootNodeId];
|
|
61
|
+
}
|
|
62
|
+
if (node.id.startsWith("detail:blueprint:")) {
|
|
63
|
+
const blueprintNodeId = node.id.slice("detail:blueprint:".length);
|
|
64
|
+
return projection.nodeStates[blueprintNodeId];
|
|
65
|
+
}
|
|
66
|
+
if (node.id.startsWith("detail:method:") && graph) {
|
|
67
|
+
const suffix = node.id.slice("detail:method:".length);
|
|
68
|
+
const lastSeparator = suffix.lastIndexOf(":");
|
|
69
|
+
const rootNodeId = lastSeparator >= 0 ? suffix.slice(0, lastSeparator) : suffix;
|
|
70
|
+
return projection.nodeStates[rootNodeId];
|
|
71
|
+
}
|
|
72
|
+
return undefined;
|
|
73
|
+
};
|
|
74
|
+
const PolicyNode = memo(function PolicyNode({ data, selected }) {
|
|
75
|
+
const executionStatus = data.execution?.status ?? "idle";
|
|
76
|
+
const executionTone = getExecutionTone(executionStatus);
|
|
77
|
+
return (_jsxs(_Fragment, { children: [_jsx(Handle, { className: "policy-node-handle", position: Position.Left, type: "target" }), _jsxs("div", { className: [
|
|
78
|
+
"policy-node-card",
|
|
79
|
+
`policy-node-${data.traceStatus}`,
|
|
80
|
+
`policy-node-health-${data.healthState}`,
|
|
81
|
+
executionStatus !== "idle" ? `policy-node-execution-${executionStatus}` : "",
|
|
82
|
+
data.isActiveBatch ? "is-batch-focus" : "",
|
|
83
|
+
data.isGhost ? "is-ghost" : "",
|
|
84
|
+
selected ? "is-selected" : ""
|
|
85
|
+
]
|
|
86
|
+
.filter(Boolean)
|
|
87
|
+
.join(" "), children: [_jsxs("div", { className: "policy-node-topline", children: [_jsx("span", { className: "policy-node-kind", children: data.kind }), _jsxs("div", { className: "policy-node-pills", children: [data.isActiveBatch ? _jsx("span", { className: "policy-node-badge policy-node-badge-batch", children: "Batch focus" }) : null, _jsx("span", { className: "policy-node-badge policy-node-badge-health", children: HEALTH_STATUS_LABEL[data.healthState] }), executionStatus !== "idle" ? (_jsx("span", { className: `policy-node-badge policy-node-badge-execution policy-node-badge-execution-${executionStatus}`, style: executionTone ? { borderColor: executionTone, color: executionTone } : undefined, children: EXECUTION_STATUS_LABEL[executionStatus] })) : null, _jsx("span", { className: "policy-node-status", children: TRACE_STATUS_LABEL[data.traceStatus] })] })] }), _jsx("h3", { children: data.label }), _jsx("p", { children: data.summary || "Select this node to inspect its policy contract, runtime, and generated implementation." }), data.execution?.message ? _jsx("p", { className: "policy-node-execution-message", children: data.execution.message }) : null, _jsxs("div", { className: "policy-node-footer", children: [_jsx("span", { children: data.drilldownNodeId ? "Double-click for internals" : "Click to inspect" }), data.selected ? _jsx("span", { children: "Focused" }) : null] })] }), _jsx(Handle, { className: "policy-node-handle", position: Position.Right, type: "source" })] }));
|
|
88
|
+
});
|
|
89
|
+
const nodeTypes = {
|
|
90
|
+
policyNode: PolicyNode
|
|
91
|
+
};
|
|
92
|
+
function GraphViewportSync({ edgeCount, nodeCount }) {
|
|
93
|
+
const { fitView } = useReactFlow();
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (!nodeCount) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const frameId = window.requestAnimationFrame(() => {
|
|
99
|
+
void fitView({ duration: 220, padding: 0.18 });
|
|
100
|
+
});
|
|
101
|
+
return () => window.cancelAnimationFrame(frameId);
|
|
102
|
+
}, [edgeCount, fitView, nodeCount]);
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
export function GraphCanvas({ graph, selectedNodeId, onSelect, nodes, edges, onNodeDoubleClick, emptyMessage, ghostNodes, onGhostNodeClick, heatmapData, activeNodeIds, driftedNodeIds, executionResult, detailMode = false, theme = "light" }) {
|
|
106
|
+
const executionProjection = graph ? buildExecutionProjection(graph, executionResult) : null;
|
|
107
|
+
const baseFlowNodes = nodes ??
|
|
108
|
+
(graph
|
|
109
|
+
? buildFlowNodes(graph, selectedNodeId ?? undefined, heatmapData, activeNodeIds, driftedNodeIds, executionResult)
|
|
110
|
+
: []);
|
|
111
|
+
const typedBaseFlowNodes = baseFlowNodes.map((node) => {
|
|
112
|
+
const execution = executionProjection ? resolveExecutionFromNode(node, executionProjection, graph) : undefined;
|
|
113
|
+
return {
|
|
114
|
+
...node,
|
|
115
|
+
type: node.type ?? "policyNode",
|
|
116
|
+
data: execution
|
|
117
|
+
? {
|
|
118
|
+
...node.data,
|
|
119
|
+
execution: node.data.execution ?? execution
|
|
120
|
+
}
|
|
121
|
+
: node.data
|
|
122
|
+
};
|
|
123
|
+
});
|
|
124
|
+
const ghostFlowNodes = ghostNodes && ghostNodes.length > 0 ? buildGhostFlowNodes(ghostNodes, typedBaseFlowNodes) : [];
|
|
125
|
+
const flowNodes = [...typedBaseFlowNodes, ...ghostFlowNodes];
|
|
126
|
+
const flowEdges = edges ?? (graph ? buildFlowEdges(graph, activeNodeIds, executionResult) : []);
|
|
127
|
+
const nodeMap = new Map(flowNodes.map((node) => [node.id, node]));
|
|
128
|
+
const decoratedFlowEdges = flowEdges.map((edge) => {
|
|
129
|
+
const execution = executionProjection?.edgeStates[edge.id];
|
|
130
|
+
const sourceNode = nodeMap.get(edge.source);
|
|
131
|
+
const targetNode = nodeMap.get(edge.target);
|
|
132
|
+
const inferredStatus = execution?.status && execution.status !== "idle"
|
|
133
|
+
? execution.status
|
|
134
|
+
: sourceNode?.data.execution?.status === "failed" || targetNode?.data.execution?.status === "failed"
|
|
135
|
+
? "failed"
|
|
136
|
+
: sourceNode?.data.execution?.status === "blocked" || targetNode?.data.execution?.status === "blocked"
|
|
137
|
+
? "blocked"
|
|
138
|
+
: sourceNode?.data.execution?.status === "running" || targetNode?.data.execution?.status === "running"
|
|
139
|
+
? "running"
|
|
140
|
+
: sourceNode?.data.execution?.status === "warning" || targetNode?.data.execution?.status === "warning"
|
|
141
|
+
? "warning"
|
|
142
|
+
: sourceNode?.data.execution?.status === "passed" && targetNode?.data.execution?.status === "passed"
|
|
143
|
+
? "passed"
|
|
144
|
+
: sourceNode?.data.execution?.status === "skipped" || targetNode?.data.execution?.status === "skipped"
|
|
145
|
+
? "skipped"
|
|
146
|
+
: undefined;
|
|
147
|
+
if (!inferredStatus) {
|
|
148
|
+
return edge;
|
|
149
|
+
}
|
|
150
|
+
const executionTone = getExecutionTone(inferredStatus);
|
|
151
|
+
return {
|
|
152
|
+
...edge,
|
|
153
|
+
className: mergeClassNames(edge.className, `edge-flow-${inferredStatus}`),
|
|
154
|
+
animated: edge.animated || inferredStatus === "running",
|
|
155
|
+
style: {
|
|
156
|
+
...edge.style,
|
|
157
|
+
stroke: executionTone ?? edge.style?.stroke,
|
|
158
|
+
strokeDasharray: inferredStatus === "blocked"
|
|
159
|
+
? "6 5"
|
|
160
|
+
: inferredStatus === "running"
|
|
161
|
+
? "4 4"
|
|
162
|
+
: inferredStatus === "warning"
|
|
163
|
+
? "8 4"
|
|
164
|
+
: inferredStatus === "skipped"
|
|
165
|
+
? "10 6"
|
|
166
|
+
: edge.style?.strokeDasharray
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
});
|
|
170
|
+
if (!graph && flowNodes.length === 0) {
|
|
171
|
+
return (_jsx("div", { className: "canvas-empty", children: _jsx("p", { children: emptyMessage ?? "Build a blueprint from an AI prompt, PRD text, or a JavaScript/TypeScript repo." }) }));
|
|
172
|
+
}
|
|
173
|
+
const handleNodeClick = (_, node) => {
|
|
174
|
+
if (node.data.ghost && onGhostNodeClick) {
|
|
175
|
+
const ghost = ghostNodes?.find((g) => g.id === node.id);
|
|
176
|
+
if (ghost) {
|
|
177
|
+
onGhostNodeClick(ghost);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
onSelect(node.id);
|
|
182
|
+
};
|
|
183
|
+
return (_jsx(ReactFlowProvider, { children: _jsx("div", { className: `canvas-shell ${detailMode ? "canvas-shell-detail" : ""}`, children: _jsxs(ReactFlow, { fitView: true, fitViewOptions: { padding: 0.18 }, minZoom: 0.35, maxZoom: 1.8, nodes: flowNodes, edges: decoratedFlowEdges, nodeTypes: nodeTypes, className: "graph-flow", defaultEdgeOptions: {
|
|
184
|
+
markerEnd: {
|
|
185
|
+
type: MarkerType.ArrowClosed,
|
|
186
|
+
color: theme === "dark" ? "#6fe0d8" : "#15786f"
|
|
187
|
+
}
|
|
188
|
+
}, onNodeClick: handleNodeClick, onNodeDoubleClick: (_, node) => onNodeDoubleClick?.(node.id), children: [_jsx(GraphViewportSync, { edgeCount: decoratedFlowEdges.length, nodeCount: flowNodes.length }), _jsx(MiniMap, { pannable: true, zoomable: true, nodeBorderRadius: 10, maskColor: theme === "dark" ? "rgba(5, 10, 20, 0.76)" : "rgba(255, 255, 255, 0.75)", nodeColor: (node) => {
|
|
189
|
+
const data = node.data;
|
|
190
|
+
const executionColor = getExecutionTone(data?.execution?.status);
|
|
191
|
+
if (executionColor) {
|
|
192
|
+
return executionColor;
|
|
193
|
+
}
|
|
194
|
+
if (data?.isActiveBatch) {
|
|
195
|
+
return theme === "dark" ? "#67e2db" : "#15786f";
|
|
196
|
+
}
|
|
197
|
+
switch (data?.healthState) {
|
|
198
|
+
case "aligned":
|
|
199
|
+
return theme === "dark" ? "#4ade80" : "#15803d";
|
|
200
|
+
case "drift":
|
|
201
|
+
return theme === "dark" ? "#fbbf24" : "#c67a00";
|
|
202
|
+
case "heal":
|
|
203
|
+
return theme === "dark" ? "#fb7185" : "#cf3b57";
|
|
204
|
+
case "ghost":
|
|
205
|
+
return theme === "dark" ? "#64748b" : "#94a3b8";
|
|
206
|
+
default:
|
|
207
|
+
return theme === "dark" ? "#27456c" : "#d7e7fc";
|
|
208
|
+
}
|
|
209
|
+
}, nodeStrokeColor: (node) => {
|
|
210
|
+
const data = node.data;
|
|
211
|
+
const executionColor = getExecutionTone(data?.execution?.status);
|
|
212
|
+
if (executionColor) {
|
|
213
|
+
return executionColor;
|
|
214
|
+
}
|
|
215
|
+
return data?.isActiveBatch
|
|
216
|
+
? theme === "dark"
|
|
217
|
+
? "#a7fff8"
|
|
218
|
+
: "#0f766e"
|
|
219
|
+
: theme === "dark"
|
|
220
|
+
? "rgba(167, 194, 236, 0.45)"
|
|
221
|
+
: "rgba(44, 66, 101, 0.22)";
|
|
222
|
+
}, nodeStrokeWidth: 2 }), _jsx(Controls, {}), _jsx(Background, { color: theme === "dark" ? "rgba(138, 173, 222, 0.12)" : "rgba(26, 42, 67, 0.08)", gap: 24, size: 1.2 })] }) }) }));
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=graph-canvas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-canvas.js","sourceRoot":"","sources":["../../src/components/graph-canvas.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type IdeLayoutProps = {
|
|
2
|
+
explorer: React.ReactNode;
|
|
3
|
+
mainContent: React.ReactNode;
|
|
4
|
+
bottomPanel?: React.ReactNode;
|
|
5
|
+
floatingGraphContent?: React.ReactNode;
|
|
6
|
+
rightSidebar?: React.ReactNode;
|
|
7
|
+
};
|
|
8
|
+
export declare function IdeLayout({ explorer, mainContent, bottomPanel, floatingGraphContent, rightSidebar }: IdeLayoutProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=ide-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ide-layout.d.ts","sourceRoot":"","sources":["../../src/components/ide-layout.tsx"],"names":[],"mappings":"AAoBA,KAAK,cAAc,GAAG;IACpB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAChC,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,YAAY,EACb,EAAE,cAAc,2CAqEhB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useMemo } from "react";
|
|
4
|
+
import { Rnd } from "react-rnd";
|
|
5
|
+
import { useBlueprintStore } from "../store/blueprint-store.js";
|
|
6
|
+
function getDefaultFloatingGraphBounds() {
|
|
7
|
+
if (typeof window === "undefined") {
|
|
8
|
+
return { x: 48, y: 48, width: 420, height: 320 };
|
|
9
|
+
}
|
|
10
|
+
const width = Math.max(360, Math.round(window.innerWidth * 0.3));
|
|
11
|
+
const height = Math.max(260, Math.round(window.innerHeight * 0.35));
|
|
12
|
+
const x = Math.max(24, window.innerWidth - width - 40);
|
|
13
|
+
const y = Math.max(24, window.innerHeight - height - 120);
|
|
14
|
+
return { x, y, width, height };
|
|
15
|
+
}
|
|
16
|
+
export function IdeLayout({ explorer, mainContent, bottomPanel, floatingGraphContent, rightSidebar }) {
|
|
17
|
+
const { activeFile, floatingGraph, setFloatingGraph } = useBlueprintStore();
|
|
18
|
+
const resolvedFloatingGraph = useMemo(() => {
|
|
19
|
+
const defaults = getDefaultFloatingGraphBounds();
|
|
20
|
+
return {
|
|
21
|
+
x: floatingGraph.x || defaults.x,
|
|
22
|
+
y: floatingGraph.y || defaults.y,
|
|
23
|
+
width: floatingGraph.width || defaults.width,
|
|
24
|
+
height: floatingGraph.height || defaults.height
|
|
25
|
+
};
|
|
26
|
+
}, [floatingGraph.height, floatingGraph.width, floatingGraph.x, floatingGraph.y]);
|
|
27
|
+
const handleDragStop = useCallback((_event, data) => {
|
|
28
|
+
setFloatingGraph({ x: data.x, y: data.y });
|
|
29
|
+
}, [setFloatingGraph]);
|
|
30
|
+
const handleResizeStop = useCallback((_event, _direction, ref, _delta, position) => {
|
|
31
|
+
setFloatingGraph({
|
|
32
|
+
x: position.x,
|
|
33
|
+
y: position.y,
|
|
34
|
+
width: parseInt(ref.style.width, 10),
|
|
35
|
+
height: parseInt(ref.style.height, 10)
|
|
36
|
+
});
|
|
37
|
+
}, [setFloatingGraph]);
|
|
38
|
+
return (_jsxs("div", { className: "ide-layout-shell", children: [_jsxs("aside", { className: "ide-left-sidebar", children: [_jsx("div", { className: "ide-pane-header", children: "Explorer" }), _jsx("div", { className: "ide-pane-body", children: explorer })] }), _jsxs("div", { className: "ide-main-stack", children: [_jsxs("main", { className: "ide-main-area", children: [mainContent, activeFile && floatingGraph.visible && floatingGraphContent ? (_jsxs(Rnd, { bounds: "parent", className: "ide-floating-graph", dragHandleClassName: "ide-floating-graph-header", minHeight: 220, minWidth: 320, onDragStop: handleDragStop, onResizeStop: handleResizeStop, position: { x: resolvedFloatingGraph.x, y: resolvedFloatingGraph.y }, size: { width: resolvedFloatingGraph.width, height: resolvedFloatingGraph.height }, children: [_jsxs("div", { className: "ide-floating-graph-header", children: [_jsx("span", { children: "Live Graph" }), _jsx("span", { children: "Drag to reposition" })] }), _jsx("div", { className: "ide-floating-graph-body", children: floatingGraphContent })] })) : null] }), _jsx("section", { className: "ide-bottom-panel", children: bottomPanel })] }), _jsxs("aside", { className: "ide-right-sidebar", children: [_jsx("div", { className: "ide-pane-header", children: "Agent" }), _jsx("div", { className: "ide-pane-body", children: rightSidebar ?? _jsx("div", { className: "ide-agent-slot" }) })] })] }));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=ide-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ide-layout.js","sourceRoot":"","sources":["../../src/components/ide-layout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ide-workbench.d.ts","sourceRoot":"","sources":["../../src/components/ide-workbench.tsx"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAExE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ide-workbench.js","sourceRoot":"","sources":["../../src/components/ide-workbench.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAkC;IACvE,OAAO,4BAAG,QAAQ,GAAI,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { IdeLayout } from "./ide-layout.js";
|
|
2
|
+
export { FileTree } from "./file-tree.js";
|
|
3
|
+
export { FileTabs } from "./file-tabs.js";
|
|
4
|
+
export { GraphCanvas } from "./graph-canvas.js";
|
|
5
|
+
export { CodeEditor } from "./code-editor.js";
|
|
6
|
+
export { CodeDiffEditor } from "./code-diff-editor.js";
|
|
7
|
+
export { BlueprintWorkbench } from "./blueprint-workbench.js";
|
|
8
|
+
export { PolicyWorkbench } from "./policy-workbench.js";
|
|
9
|
+
export { IdeWorkbench } from "./ide-workbench.js";
|
|
10
|
+
export { OpencodeSettings } from "./opencode-settings.js";
|
|
11
|
+
export { prepareMonaco, toMonacoPath } from "./monaco-setup.js";
|
|
12
|
+
export { TypeScriptLanguageService, getTypeScriptLanguageService } from "./ts-language-service.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { IdeLayout } from "./ide-layout.js";
|
|
2
|
+
export { FileTree } from "./file-tree.js";
|
|
3
|
+
export { FileTabs } from "./file-tabs.js";
|
|
4
|
+
export { GraphCanvas } from "./graph-canvas.js";
|
|
5
|
+
export { CodeEditor } from "./code-editor.js";
|
|
6
|
+
export { CodeDiffEditor } from "./code-diff-editor.js";
|
|
7
|
+
export { BlueprintWorkbench } from "./blueprint-workbench.js";
|
|
8
|
+
export { PolicyWorkbench } from "./policy-workbench.js";
|
|
9
|
+
export { IdeWorkbench } from "./ide-workbench.js";
|
|
10
|
+
export { OpencodeSettings } from "./opencode-settings.js";
|
|
11
|
+
export { prepareMonaco, toMonacoPath } from "./monaco-setup.js";
|
|
12
|
+
export { TypeScriptLanguageService, getTypeScriptLanguageService } from "./ts-language-service.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monaco-setup.d.ts","sourceRoot":"","sources":["../../src/components/monaco-setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAc7C,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,MAAM,GAAG,IAAI,CA2CzD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOrD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { getTypeScriptLanguageService } from "./ts-language-service.js";
|
|
2
|
+
let workersConfigured = false;
|
|
3
|
+
export function prepareMonaco(monaco) {
|
|
4
|
+
if (!workersConfigured) {
|
|
5
|
+
const monacoGlobal = globalThis;
|
|
6
|
+
monacoGlobal.MonacoEnvironment = {
|
|
7
|
+
getWorker(_workerId, label) {
|
|
8
|
+
if (label === "typescript" || label === "javascript") {
|
|
9
|
+
return new Worker(new URL("monaco-editor/esm/vs/language/typescript/ts.worker.js", import.meta.url), { type: "module" });
|
|
10
|
+
}
|
|
11
|
+
if (label === "json") {
|
|
12
|
+
return new Worker(new URL("monaco-editor/esm/vs/language/json/json.worker.js", import.meta.url), { type: "module" });
|
|
13
|
+
}
|
|
14
|
+
if (label === "css" || label === "scss" || label === "less") {
|
|
15
|
+
return new Worker(new URL("monaco-editor/esm/vs/language/css/css.worker.js", import.meta.url), { type: "module" });
|
|
16
|
+
}
|
|
17
|
+
if (label === "html" || label === "handlebars" || label === "razor") {
|
|
18
|
+
return new Worker(new URL("monaco-editor/esm/vs/language/html/html.worker.js", import.meta.url), { type: "module" });
|
|
19
|
+
}
|
|
20
|
+
return new Worker(new URL("monaco-editor/esm/vs/editor/editor.worker.js", import.meta.url), { type: "module" });
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
workersConfigured = true;
|
|
24
|
+
}
|
|
25
|
+
getTypeScriptLanguageService(monaco).configureDefaults();
|
|
26
|
+
}
|
|
27
|
+
export function toMonacoPath(filePath) {
|
|
28
|
+
if (filePath.startsWith("file://")) {
|
|
29
|
+
return filePath;
|
|
30
|
+
}
|
|
31
|
+
const normalized = filePath.replace(/\\/g, "/").replace(/^\/+/, "");
|
|
32
|
+
return `file:///${normalized}`;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=monaco-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monaco-setup.js","sourceRoot":"","sources":["../../src/components/monaco-setup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAUxE,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG,UAA0B,CAAC;QAChD,YAAY,CAAC,iBAAiB,GAAG;YAC/B,SAAS,CAAC,SAAS,EAAE,KAAK;gBACxB,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;oBACrD,OAAO,IAAI,MAAM,CACf,IAAI,GAAG,CAAC,uDAAuD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACjF,EAAE,IAAI,EAAE,QAAQ,EAAE,CACnB,CAAC;gBACJ,CAAC;gBAED,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;oBACrB,OAAO,IAAI,MAAM,CACf,IAAI,GAAG,CAAC,mDAAmD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAC7E,EAAE,IAAI,EAAE,QAAQ,EAAE,CACnB,CAAC;gBACJ,CAAC;gBAED,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;oBAC5D,OAAO,IAAI,MAAM,CACf,IAAI,GAAG,CAAC,iDAAiD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAC3E,EAAE,IAAI,EAAE,QAAQ,EAAE,CACnB,CAAC;gBACJ,CAAC;gBAED,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;oBACpE,OAAO,IAAI,MAAM,CACf,IAAI,GAAG,CAAC,mDAAmD,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAC7E,EAAE,IAAI,EAAE,QAAQ,EAAE,CACnB,CAAC;gBACJ,CAAC;gBAED,OAAO,IAAI,MAAM,CACf,IAAI,GAAG,CAAC,8CAA8C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EACxE,EAAE,IAAI,EAAE,QAAQ,EAAE,CACnB,CAAC;YACJ,CAAC;SACF,CAAC;QACF,iBAAiB,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,4BAA4B,CAAC,MAAM,CAAC,CAAC,iBAAiB,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpE,OAAO,WAAW,UAAU,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { OpencodeServerInfo } from "../lib/types.js";
|
|
2
|
+
type Props = {
|
|
3
|
+
onClose?: () => void;
|
|
4
|
+
onStatusChange?: (status: OpencodeServerInfo) => void;
|
|
5
|
+
};
|
|
6
|
+
export declare function OpencodeSettings({ onClose, onStatusChange }: Props): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=opencode-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-settings.d.ts","sourceRoot":"","sources":["../../src/components/opencode-settings.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAgB5E,KAAK,KAAK,GAAG;IACX,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACvD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,KAAK,2CAyDlE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
const PROVIDERS = [
|
|
5
|
+
{ id: "anthropic", label: "Anthropic (Claude)" },
|
|
6
|
+
{ id: "openai", label: "OpenAI (GPT)" },
|
|
7
|
+
{ id: "google", label: "Google (Gemini)" },
|
|
8
|
+
{ id: "azure", label: "Azure OpenAI" },
|
|
9
|
+
{ id: "groq", label: "Groq" },
|
|
10
|
+
{ id: "mistral", label: "Mistral" },
|
|
11
|
+
{ id: "cohere", label: "Cohere" },
|
|
12
|
+
{ id: "perplexity", label: "Perplexity" },
|
|
13
|
+
{ id: "openrouter", label: "OpenRouter" },
|
|
14
|
+
{ id: "bedrock", label: "AWS Bedrock" },
|
|
15
|
+
{ id: "local", label: "Local Model" },
|
|
16
|
+
];
|
|
17
|
+
export function OpencodeSettings({ onClose, onStatusChange }) {
|
|
18
|
+
const [provider, setProvider] = useState("anthropic");
|
|
19
|
+
const [apiKey, setApiKey] = useState("");
|
|
20
|
+
const [model, setModel] = useState("");
|
|
21
|
+
const [baseUrl, setBaseUrl] = useState("");
|
|
22
|
+
const [serverStatus, setServerStatus] = useState({ status: "stopped" });
|
|
23
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
24
|
+
const [error, setError] = useState(null);
|
|
25
|
+
return (_jsxs("div", { className: "opencode-settings", children: [_jsxs("div", { className: "opencode-settings-header", children: [_jsx("h3", { children: "OpenCode Agent Settings" }), onClose && (_jsx("button", { onClick: onClose, type: "button", className: "close-btn", children: "\u00D7" }))] }), _jsxs("div", { className: "server-status-bar", children: [_jsx("span", { className: `status-indicator status-${serverStatus.status}` }), _jsx("span", { className: "status-text", children: serverStatus.status === "running"
|
|
26
|
+
? `Connected (${serverStatus.url})`
|
|
27
|
+
: serverStatus.status === "starting"
|
|
28
|
+
? "Starting..."
|
|
29
|
+
: serverStatus.status === "error"
|
|
30
|
+
? `Error: ${serverStatus.error}`
|
|
31
|
+
: "Not connected" })] }), error && _jsx("div", { className: "error-message", children: error }), _jsxs("label", { className: "field", children: [_jsx("span", { children: "AI Provider" }), _jsx("select", { value: provider, onChange: (e) => setProvider(e.target.value), children: PROVIDERS.map((p) => (_jsx("option", { value: p.id, children: p.label }, p.id))) })] }), _jsxs("label", { className: "field", children: [_jsx("span", { children: "API Key" }), _jsx("input", { type: "password", value: apiKey, onChange: (e) => setApiKey(e.target.value), placeholder: `Enter your ${PROVIDERS.find((p) => p.id === provider)?.label || provider} API key` })] })] }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=opencode-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"opencode-settings.js","sourceRoot":"","sources":["../../src/components/opencode-settings.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-workbench.d.ts","sourceRoot":"","sources":["../../src/components/policy-workbench.tsx"],"names":[],"mappings":"AAgHA,wBAAgB,eAAe,4CAwH9B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useMemo, useRef, useState } from "react";
|
|
4
|
+
import { GraphCanvas } from "./graph-canvas.js";
|
|
5
|
+
import { buildDetailFlow } from "../lib/flow-view.js";
|
|
6
|
+
import { computeHeatmap } from "../lib/heatmap.js";
|
|
7
|
+
const POLICY_CANVAS_PROMPT = `Act as an Enterprise Mobility Architect. Using the Google STITCH MCP server, design a secure Engineering Department device profile.
|
|
8
|
+
|
|
9
|
+
Create nodes for a managed Chrome browser policy enabling developer tools while disabling insecure extensions.
|
|
10
|
+
Add a node for a corporate VPN configuration.
|
|
11
|
+
Wire these to a Fleet: Engineering-Laptops group node.
|
|
12
|
+
Verify the STITCH contract before sync: every policy needs a valid version ID and the VPN policy needs its certificate reference.
|
|
13
|
+
If a policy node drifts from schema, mark it Invalid, highlight it in red, and suggest a Heal fix based on the latest Google management API spec.`;
|
|
14
|
+
const maskApiKey = (value) => {
|
|
15
|
+
const trimmed = value.trim();
|
|
16
|
+
if (trimmed.length <= 8) {
|
|
17
|
+
return trimmed;
|
|
18
|
+
}
|
|
19
|
+
return `${trimmed.slice(0, 4)}...${trimmed.slice(-4)}`;
|
|
20
|
+
};
|
|
21
|
+
export function PolicyWorkbench() {
|
|
22
|
+
const MIN_OBSERVABILITY_INTERVAL_SECS = 2;
|
|
23
|
+
const [projectName, setProjectName] = useState("CodeFlow Workspace");
|
|
24
|
+
const [repoPath, setRepoPath] = useState("");
|
|
25
|
+
const [prdText, setPrdText] = useState("");
|
|
26
|
+
const [aiPrompt, setAiPrompt] = useState("");
|
|
27
|
+
const [nvidiaApiKey, setNvidiaApiKey] = useState("");
|
|
28
|
+
const [mode, setMode] = useState("essential");
|
|
29
|
+
const [outputDir, setOutputDir] = useState("");
|
|
30
|
+
const [traceInput, setTraceInput] = useState("");
|
|
31
|
+
const [runInput, setRunInput] = useState("{}");
|
|
32
|
+
const [graph, setGraph] = useState(null);
|
|
33
|
+
const [selectedNodeId, setSelectedNodeId] = useState(null);
|
|
34
|
+
const [error, setError] = useState(null);
|
|
35
|
+
const [busyLabel, setBusyLabel] = useState(null);
|
|
36
|
+
const [exportResult, setExportResult] = useState(null);
|
|
37
|
+
const [runPlan, setRunPlan] = useState(null);
|
|
38
|
+
const [riskReport, setRiskReport] = useState(null);
|
|
39
|
+
const [session, setSession] = useState(null);
|
|
40
|
+
const [pendingApproval, setPendingApproval] = useState(null);
|
|
41
|
+
const [executionResult, setExecutionResult] = useState(null);
|
|
42
|
+
const [latestLogs, setLatestLogs] = useState([]);
|
|
43
|
+
const [latestSpans, setLatestSpans] = useState([]);
|
|
44
|
+
const [conflictReport, setConflictReport] = useState(null);
|
|
45
|
+
const [newNodeName, setNewNodeName] = useState("");
|
|
46
|
+
const [newNodeKind, setNewNodeKind] = useState("function");
|
|
47
|
+
const [edgeFrom, setEdgeFrom] = useState("");
|
|
48
|
+
const [edgeTo, setEdgeTo] = useState("");
|
|
49
|
+
const [edgeKind, setEdgeKind] = useState("calls");
|
|
50
|
+
const [useAI, setUseAI] = useState(true);
|
|
51
|
+
const [drilldownStack, setDrilldownStack] = useState([]);
|
|
52
|
+
const [selectedDetailNodeId, setSelectedDetailNodeId] = useState(null);
|
|
53
|
+
const [codeDrafts, setCodeDrafts] = useState({});
|
|
54
|
+
const [suggestionInstruction, setSuggestionInstruction] = useState("");
|
|
55
|
+
const [codeSuggestion, setCodeSuggestion] = useState(null);
|
|
56
|
+
const [liveCompletionsEnabled, setLiveCompletionsEnabled] = useState(true);
|
|
57
|
+
const [serverApiKeyConfigured, setServerApiKeyConfigured] = useState(false);
|
|
58
|
+
const [apiKeyStatusLoaded, setApiKeyStatusLoaded] = useState(false);
|
|
59
|
+
const [statusTitle, setStatusTitle] = useState("Ready to build");
|
|
60
|
+
const [statusDetail, setStatusDetail] = useState("Enter a project description or repo input, then build a blueprint.");
|
|
61
|
+
const [statusTone, setStatusTone] = useState("info");
|
|
62
|
+
const [showSettings, setShowSettings] = useState(false);
|
|
63
|
+
const [showPromptPanel, setShowPromptPanel] = useState(true);
|
|
64
|
+
const [showEditPanel, setShowEditPanel] = useState(false);
|
|
65
|
+
const [showInspector, setShowInspector] = useState(false);
|
|
66
|
+
const [showAnalysisPanel, setShowAnalysisPanel] = useState(false);
|
|
67
|
+
const [showObservabilityPanel, setShowObservabilityPanel] = useState(false);
|
|
68
|
+
const [showPolicyLayerPanel, setShowPolicyLayerPanel] = useState(false);
|
|
69
|
+
const [themePreference, setThemePreference] = useState("system");
|
|
70
|
+
const [systemTheme, setSystemTheme] = useState("light");
|
|
71
|
+
const [autoObservability, setAutoObservability] = useState(false);
|
|
72
|
+
const [observabilityIntervalSecs, setObservabilityIntervalSecs] = useState(5);
|
|
73
|
+
const autoObsRef = useRef(autoObservability);
|
|
74
|
+
autoObsRef.current = autoObservability;
|
|
75
|
+
const [autoImplementNodes, setAutoImplementNodes] = useState(false);
|
|
76
|
+
const [cycleReport, setCycleReport] = useState(null);
|
|
77
|
+
const [smellReport, setSmellReport] = useState(null);
|
|
78
|
+
const [graphMetrics, setGraphMetrics] = useState(null);
|
|
79
|
+
const [mermaidDiagram, setMermaidDiagram] = useState(null);
|
|
80
|
+
const resolvedTheme = themePreference === "system" ? systemTheme : themePreference;
|
|
81
|
+
const topbarRef = useRef(null);
|
|
82
|
+
const [floatingPanelTop, setFloatingPanelTop] = useState(112);
|
|
83
|
+
const selectedNode = graph?.nodes.find((node) => node.id === selectedNodeId) ?? null;
|
|
84
|
+
const drilldownNodeId = drilldownStack.at(-1) ?? null;
|
|
85
|
+
const drilldownRootNode = graph?.nodes.find((node) => node.id === drilldownNodeId) ?? null;
|
|
86
|
+
const detailFlow = graph && drilldownNodeId
|
|
87
|
+
? buildDetailFlow(graph, drilldownNodeId, selectedDetailNodeId ?? undefined)
|
|
88
|
+
: null;
|
|
89
|
+
const heatmapData = useMemo(() => graph &&
|
|
90
|
+
graph.nodes.some((node) => node.traceState && node.traceState.count > 0)
|
|
91
|
+
? computeHeatmap(graph)
|
|
92
|
+
: undefined, [graph]);
|
|
93
|
+
const canStartImplementation = false;
|
|
94
|
+
const canStartIntegration = false;
|
|
95
|
+
const canImplementActiveNode = false;
|
|
96
|
+
const canRunActiveNode = false;
|
|
97
|
+
const canRunIntegration = false;
|
|
98
|
+
const isBusy = Boolean(busyLabel);
|
|
99
|
+
const isBuilding = busyLabel === "Building blueprint";
|
|
100
|
+
return (_jsxs("div", { className: "workbench-shell", "data-theme": resolvedTheme, children: [_jsx("header", { className: `workbench-topbar ${graph ? "workbench-topbar-compact" : ""}`, ref: topbarRef, children: _jsx("div", { className: "topbar-start", children: _jsxs("div", { className: "brand-lockup", children: [_jsx("p", { className: "brand-eyebrow", children: "CodeFlow" }), _jsx("h1", { children: "Policy Canvas" }), _jsx("p", { className: "brand-caption", children: "Graph-native architecture, compliance, and deployment control." })] }) }) }), _jsx("main", { className: "policy-layout focus-layout", children: _jsx("section", { className: "workbench-main focus-main", children: _jsx("section", { className: "graph-panel full-graph focus-graph", children: _jsx(GraphCanvas, { graph: graph, selectedNodeId: drilldownRootNode ? selectedDetailNodeId : selectedNodeId, nodes: detailFlow?.nodes, edges: detailFlow?.edges, onSelect: (nodeId) => setSelectedNodeId(nodeId), heatmapData: drilldownRootNode ? undefined : heatmapData, theme: resolvedTheme }) }) }) })] }));
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=policy-workbench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-workbench.js","sourceRoot":"","sources":["../../src/components/policy-workbench.tsx"],"names":[],"mappings":"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"}
|