@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.
Files changed (134) hide show
  1. package/abhinav2203-codeflow-canvas-0.1.0.tgz +0 -0
  2. package/dist/bin/cli.d.ts +3 -0
  3. package/dist/bin/cli.d.ts.map +1 -0
  4. package/dist/bin/cli.js +84 -0
  5. package/dist/bin/cli.js.map +1 -0
  6. package/dist/components/blueprint-workbench.d.ts +2 -0
  7. package/dist/components/blueprint-workbench.d.ts.map +1 -0
  8. package/dist/components/blueprint-workbench.js +144 -0
  9. package/dist/components/blueprint-workbench.js.map +1 -0
  10. package/dist/components/code-diff-editor.d.ts +12 -0
  11. package/dist/components/code-diff-editor.d.ts.map +1 -0
  12. package/dist/components/code-diff-editor.js +39 -0
  13. package/dist/components/code-diff-editor.js.map +1 -0
  14. package/dist/components/code-editor.d.ts +25 -0
  15. package/dist/components/code-editor.d.ts.map +1 -0
  16. package/dist/components/code-editor.js +264 -0
  17. package/dist/components/code-editor.js.map +1 -0
  18. package/dist/components/file-tabs.d.ts +5 -0
  19. package/dist/components/file-tabs.d.ts.map +1 -0
  20. package/dist/components/file-tabs.js +164 -0
  21. package/dist/components/file-tabs.js.map +1 -0
  22. package/dist/components/file-tree.d.ts +7 -0
  23. package/dist/components/file-tree.d.ts.map +1 -0
  24. package/dist/components/file-tree.js +176 -0
  25. package/dist/components/file-tree.js.map +1 -0
  26. package/dist/components/graph-canvas.d.ts +25 -0
  27. package/dist/components/graph-canvas.d.ts.map +1 -0
  28. package/dist/components/graph-canvas.js +224 -0
  29. package/dist/components/graph-canvas.js.map +1 -0
  30. package/dist/components/ide-layout.d.ts +10 -0
  31. package/dist/components/ide-layout.d.ts.map +1 -0
  32. package/dist/components/ide-layout.js +40 -0
  33. package/dist/components/ide-layout.js.map +1 -0
  34. package/dist/components/ide-workbench.d.ts +4 -0
  35. package/dist/components/ide-workbench.d.ts.map +1 -0
  36. package/dist/components/ide-workbench.js +6 -0
  37. package/dist/components/ide-workbench.js.map +1 -0
  38. package/dist/components/index.d.ts +13 -0
  39. package/dist/components/index.d.ts.map +1 -0
  40. package/dist/components/index.js +13 -0
  41. package/dist/components/index.js.map +1 -0
  42. package/dist/components/monaco-setup.d.ts +4 -0
  43. package/dist/components/monaco-setup.d.ts.map +1 -0
  44. package/dist/components/monaco-setup.js +34 -0
  45. package/dist/components/monaco-setup.js.map +1 -0
  46. package/dist/components/opencode-settings.d.ts +8 -0
  47. package/dist/components/opencode-settings.d.ts.map +1 -0
  48. package/dist/components/opencode-settings.js +33 -0
  49. package/dist/components/opencode-settings.js.map +1 -0
  50. package/dist/components/policy-workbench.d.ts +2 -0
  51. package/dist/components/policy-workbench.d.ts.map +1 -0
  52. package/dist/components/policy-workbench.js +102 -0
  53. package/dist/components/policy-workbench.js.map +1 -0
  54. package/dist/components/ts-language-service.d.ts +14 -0
  55. package/dist/components/ts-language-service.d.ts.map +1 -0
  56. package/dist/components/ts-language-service.js +123 -0
  57. package/dist/components/ts-language-service.js.map +1 -0
  58. package/dist/index.d.ts +23 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +22 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/lib/browser/storage.d.ts +16 -0
  63. package/dist/lib/browser/storage.d.ts.map +1 -0
  64. package/dist/lib/browser/storage.js +18 -0
  65. package/dist/lib/browser/storage.js.map +1 -0
  66. package/dist/lib/edit.d.ts +14 -0
  67. package/dist/lib/edit.d.ts.map +1 -0
  68. package/dist/lib/edit.js +57 -0
  69. package/dist/lib/edit.js.map +1 -0
  70. package/dist/lib/flow-view.d.ts +80 -0
  71. package/dist/lib/flow-view.d.ts.map +1 -0
  72. package/dist/lib/flow-view.js +850 -0
  73. package/dist/lib/flow-view.js.map +1 -0
  74. package/dist/lib/heatmap.d.ts +28 -0
  75. package/dist/lib/heatmap.d.ts.map +1 -0
  76. package/dist/lib/heatmap.js +61 -0
  77. package/dist/lib/heatmap.js.map +1 -0
  78. package/dist/lib/index.d.ts +9 -0
  79. package/dist/lib/index.d.ts.map +1 -0
  80. package/dist/lib/index.js +6 -0
  81. package/dist/lib/index.js.map +1 -0
  82. package/dist/lib/node-navigation.d.ts +36 -0
  83. package/dist/lib/node-navigation.d.ts.map +1 -0
  84. package/dist/lib/node-navigation.js +52 -0
  85. package/dist/lib/node-navigation.js.map +1 -0
  86. package/dist/lib/traces.d.ts +3 -0
  87. package/dist/lib/traces.d.ts.map +1 -0
  88. package/dist/lib/traces.js +64 -0
  89. package/dist/lib/traces.js.map +1 -0
  90. package/dist/lib/types.d.ts +57 -0
  91. package/dist/lib/types.d.ts.map +1 -0
  92. package/dist/lib/types.js +7 -0
  93. package/dist/lib/types.js.map +1 -0
  94. package/dist/store/blueprint-store.d.ts +35 -0
  95. package/dist/store/blueprint-store.d.ts.map +1 -0
  96. package/dist/store/blueprint-store.js +79 -0
  97. package/dist/store/blueprint-store.js.map +1 -0
  98. package/dist/store/index.d.ts +3 -0
  99. package/dist/store/index.d.ts.map +1 -0
  100. package/dist/store/index.js +2 -0
  101. package/dist/store/index.js.map +1 -0
  102. package/package.json +52 -0
  103. package/scripts/wrap-cli.mjs +15 -0
  104. package/src/bin/cli.ts +128 -0
  105. package/src/components/blueprint-workbench.tsx +305 -0
  106. package/src/components/code-diff-editor.tsx +80 -0
  107. package/src/components/code-editor.tsx +389 -0
  108. package/src/components/file-tabs.tsx +288 -0
  109. package/src/components/file-tree.tsx +301 -0
  110. package/src/components/graph-canvas.tsx +404 -0
  111. package/src/components/ide-layout.tsx +104 -0
  112. package/src/components/ide-workbench.tsx +5 -0
  113. package/src/components/index.ts +12 -0
  114. package/src/components/monaco-setup.ts +67 -0
  115. package/src/components/opencode-settings.tsx +82 -0
  116. package/src/components/policy-workbench.tsx +233 -0
  117. package/src/components/ts-language-service.ts +170 -0
  118. package/src/index.ts +54 -0
  119. package/src/lib/browser/storage.ts +19 -0
  120. package/src/lib/edit.ts +74 -0
  121. package/src/lib/flow-view.ts +1176 -0
  122. package/src/lib/heatmap.ts +103 -0
  123. package/src/lib/index.ts +41 -0
  124. package/src/lib/node-navigation.ts +76 -0
  125. package/src/lib/traces.ts +79 -0
  126. package/src/lib/types.ts +79 -0
  127. package/src/store/blueprint-store.ts +136 -0
  128. package/src/store/index.ts +2 -0
  129. package/test-fixtures/minimal-blueprint.json +34 -0
  130. package/test-fixtures/sample-blueprint.json +184 -0
  131. package/tsconfig.build.json +9 -0
  132. package/tsconfig.json +22 -0
  133. package/tsconfig.tsbuildinfo +1 -0
  134. 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,4 @@
1
+ export declare function IdeWorkbench({ children }: {
2
+ children?: React.ReactNode;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=ide-workbench.d.ts.map
@@ -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,6 @@
1
+ "use client";
2
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
3
+ export function IdeWorkbench({ children }) {
4
+ return _jsx(_Fragment, { children: children });
5
+ }
6
+ //# sourceMappingURL=ide-workbench.js.map
@@ -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,4 @@
1
+ import type * as Monaco from "monaco-editor";
2
+ export declare function prepareMonaco(monaco: typeof Monaco): void;
3
+ export declare function toMonacoPath(filePath: string): string;
4
+ //# sourceMappingURL=monaco-setup.d.ts.map
@@ -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,2 @@
1
+ export declare function PolicyWorkbench(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=policy-workbench.d.ts.map
@@ -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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"}