@acpus/web 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/LICENSE +21 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/client/api.d.ts +398 -0
  4. package/dist/client/api.d.ts.map +1 -0
  5. package/dist/client/api.js +73 -0
  6. package/dist/client/api.js.map +1 -0
  7. package/dist/client/assets/index-Cn1qpJ2F.css +1 -0
  8. package/dist/client/assets/index-DVV3hISu.js +2 -0
  9. package/dist/client/assets/vendor-B7fc3-WT.js +69 -0
  10. package/dist/client/assets/vendor-icons-BQrCRas_.js +241 -0
  11. package/dist/client/assets/vendor-json-view-B9Z7D9kT.css +1 -0
  12. package/dist/client/assets/vendor-json-view-uYZpLE5K.js +1 -0
  13. package/dist/client/assets/vendor-query-Co8PPx4J.js +1 -0
  14. package/dist/client/assets/vendor-radix-C9JUg2bE.js +1 -0
  15. package/dist/client/assets/vendor-react-BRGuIgbw.js +49 -0
  16. package/dist/client/index.html +26 -0
  17. package/dist/client/lib/utils.d.ts +3 -0
  18. package/dist/client/lib/utils.d.ts.map +1 -0
  19. package/dist/client/lib/utils.js +6 -0
  20. package/dist/client/lib/utils.js.map +1 -0
  21. package/dist/client/main.d.ts +2 -0
  22. package/dist/client/main.d.ts.map +1 -0
  23. package/dist/client/main.js +18 -0
  24. package/dist/client/main.js.map +1 -0
  25. package/dist/client/static-viz.d.ts +8 -0
  26. package/dist/client/static-viz.d.ts.map +1 -0
  27. package/dist/client/static-viz.js +10 -0
  28. package/dist/client/static-viz.js.map +1 -0
  29. package/dist/client/ui/App.d.ts +40 -0
  30. package/dist/client/ui/App.d.ts.map +1 -0
  31. package/dist/client/ui/App.js +742 -0
  32. package/dist/client/ui/App.js.map +1 -0
  33. package/dist/client/ui/RunGraph.d.ts +9 -0
  34. package/dist/client/ui/RunGraph.d.ts.map +1 -0
  35. package/dist/client/ui/RunGraph.js +294 -0
  36. package/dist/client/ui/RunGraph.js.map +1 -0
  37. package/dist/client/ui/StaticGraphApp.d.ts +22 -0
  38. package/dist/client/ui/StaticGraphApp.d.ts.map +1 -0
  39. package/dist/client/ui/StaticGraphApp.js +102 -0
  40. package/dist/client/ui/StaticGraphApp.js.map +1 -0
  41. package/dist/client/ui/Toast.d.ts +16 -0
  42. package/dist/client/ui/Toast.d.ts.map +1 -0
  43. package/dist/client/ui/Toast.js +41 -0
  44. package/dist/client/ui/Toast.js.map +1 -0
  45. package/dist/client/ui/shadcn/alert.d.ts +3 -0
  46. package/dist/client/ui/shadcn/alert.d.ts.map +1 -0
  47. package/dist/client/ui/shadcn/alert.js +6 -0
  48. package/dist/client/ui/shadcn/alert.js.map +1 -0
  49. package/dist/client/ui/shadcn/badge.d.ts +10 -0
  50. package/dist/client/ui/shadcn/badge.d.ts.map +1 -0
  51. package/dist/client/ui/shadcn/badge.js +19 -0
  52. package/dist/client/ui/shadcn/badge.js.map +1 -0
  53. package/dist/client/ui/shadcn/breadcrumb.d.ts +9 -0
  54. package/dist/client/ui/shadcn/breadcrumb.d.ts.map +1 -0
  55. package/dist/client/ui/shadcn/breadcrumb.js +15 -0
  56. package/dist/client/ui/shadcn/breadcrumb.js.map +1 -0
  57. package/dist/client/ui/shadcn/button.d.ts +12 -0
  58. package/dist/client/ui/shadcn/button.d.ts.map +1 -0
  59. package/dist/client/ui/shadcn/button.js +37 -0
  60. package/dist/client/ui/shadcn/button.js.map +1 -0
  61. package/dist/client/ui/shadcn/card.d.ts +6 -0
  62. package/dist/client/ui/shadcn/card.d.ts.map +1 -0
  63. package/dist/client/ui/shadcn/card.js +10 -0
  64. package/dist/client/ui/shadcn/card.js.map +1 -0
  65. package/dist/client/ui/shadcn/dialog.d.ts +11 -0
  66. package/dist/client/ui/shadcn/dialog.d.ts.map +1 -0
  67. package/dist/client/ui/shadcn/dialog.js +15 -0
  68. package/dist/client/ui/shadcn/dialog.js.map +1 -0
  69. package/dist/client/ui/shadcn/input.d.ts +5 -0
  70. package/dist/client/ui/shadcn/input.d.ts.map +1 -0
  71. package/dist/client/ui/shadcn/input.js +6 -0
  72. package/dist/client/ui/shadcn/input.js.map +1 -0
  73. package/dist/client/ui/shadcn/list.d.ts +8 -0
  74. package/dist/client/ui/shadcn/list.d.ts.map +1 -0
  75. package/dist/client/ui/shadcn/list.js +8 -0
  76. package/dist/client/ui/shadcn/list.js.map +1 -0
  77. package/dist/client/ui/shadcn/popover.d.ts +8 -0
  78. package/dist/client/ui/shadcn/popover.d.ts.map +1 -0
  79. package/dist/client/ui/shadcn/popover.js +11 -0
  80. package/dist/client/ui/shadcn/popover.js.map +1 -0
  81. package/dist/client/ui/shadcn/select.d.ts +9 -0
  82. package/dist/client/ui/shadcn/select.d.ts.map +1 -0
  83. package/dist/client/ui/shadcn/select.js +17 -0
  84. package/dist/client/ui/shadcn/select.js.map +1 -0
  85. package/dist/client/ui/shadcn/tabs.d.ts +7 -0
  86. package/dist/client/ui/shadcn/tabs.d.ts.map +1 -0
  87. package/dist/client/ui/shadcn/tabs.js +12 -0
  88. package/dist/client/ui/shadcn/tabs.js.map +1 -0
  89. package/dist/client/ui/shadcn/textarea.d.ts +3 -0
  90. package/dist/client/ui/shadcn/textarea.d.ts.map +1 -0
  91. package/dist/client/ui/shadcn/textarea.js +6 -0
  92. package/dist/client/ui/shadcn/textarea.js.map +1 -0
  93. package/dist/graph-renderer.d.ts +114 -0
  94. package/dist/graph-renderer.d.ts.map +1 -0
  95. package/dist/graph-renderer.js +673 -0
  96. package/dist/graph-renderer.js.map +1 -0
  97. package/dist/index.d.ts +5 -0
  98. package/dist/index.d.ts.map +1 -0
  99. package/dist/index.js +5 -0
  100. package/dist/index.js.map +1 -0
  101. package/dist/runtime-status.d.ts +10 -0
  102. package/dist/runtime-status.d.ts.map +1 -0
  103. package/dist/runtime-status.js +45 -0
  104. package/dist/runtime-status.js.map +1 -0
  105. package/dist/server/app.d.ts +11 -0
  106. package/dist/server/app.d.ts.map +1 -0
  107. package/dist/server/app.js +244 -0
  108. package/dist/server/app.js.map +1 -0
  109. package/dist/server/assets.d.ts +3 -0
  110. package/dist/server/assets.d.ts.map +1 -0
  111. package/dist/server/assets.js +45 -0
  112. package/dist/server/assets.js.map +1 -0
  113. package/dist/server/errors.d.ts +14 -0
  114. package/dist/server/errors.d.ts.map +1 -0
  115. package/dist/server/errors.js +13 -0
  116. package/dist/server/errors.js.map +1 -0
  117. package/dist/server/graph.d.ts +137 -0
  118. package/dist/server/graph.d.ts.map +1 -0
  119. package/dist/server/graph.js +592 -0
  120. package/dist/server/graph.js.map +1 -0
  121. package/dist/server/launcher.d.ts +15 -0
  122. package/dist/server/launcher.d.ts.map +1 -0
  123. package/dist/server/launcher.js +30 -0
  124. package/dist/server/launcher.js.map +1 -0
  125. package/dist/server/node-inspection.d.ts +108 -0
  126. package/dist/server/node-inspection.d.ts.map +1 -0
  127. package/dist/server/node-inspection.js +435 -0
  128. package/dist/server/node-inspection.js.map +1 -0
  129. package/dist/server/security.d.ts +12 -0
  130. package/dist/server/security.d.ts.map +1 -0
  131. package/dist/server/security.js +43 -0
  132. package/dist/server/security.js.map +1 -0
  133. package/dist/server/static-viz-assets.generated.d.ts +3 -0
  134. package/dist/server/static-viz-assets.generated.d.ts.map +1 -0
  135. package/dist/server/static-viz-assets.generated.js +4 -0
  136. package/dist/server/static-viz-assets.generated.js.map +1 -0
  137. package/dist/server/workflows.d.ts +75 -0
  138. package/dist/server/workflows.d.ts.map +1 -0
  139. package/dist/server/workflows.js +205 -0
  140. package/dist/server/workflows.js.map +1 -0
  141. package/package.json +65 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-viz-assets.generated.js","sourceRoot":"","sources":["../../src/server/static-viz-assets.generated.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,CAAC,MAAM,WAAW,GAAG,wp4VAAwp4V,CAAC;AACpr4V,MAAM,CAAC,MAAM,YAAY,GAAG,gy1DAAgy1D,CAAC"}
@@ -0,0 +1,75 @@
1
+ import type { WorkflowIR } from "@acpus/core/ir";
2
+ import { type PreparedWorkflow } from "@acpus/workflow-compiler";
3
+ import { type WebGraph } from "./graph.js";
4
+ export type ProjectWorkflowCatalogEntry = {
5
+ scope: "project";
6
+ name: string;
7
+ packagePath: string;
8
+ entryPath: string;
9
+ status: "available";
10
+ requiresScope: boolean;
11
+ };
12
+ export type WorkflowFileEntry = {
13
+ name: string;
14
+ path: string;
15
+ kind: "directory" | "workflow";
16
+ };
17
+ export type WorkflowVisualizationSource = {
18
+ kind: "catalog";
19
+ name: string;
20
+ } | {
21
+ kind: "file";
22
+ path: string;
23
+ };
24
+ export type WorkflowVisualizationResult = {
25
+ status: "ready";
26
+ graph: WebGraph;
27
+ workflow: {
28
+ name: string;
29
+ description?: string;
30
+ irVersion: number;
31
+ nodeCount: number;
32
+ };
33
+ contract: {
34
+ inputSchema?: WorkflowIR["inputSchema"];
35
+ outputs: WorkflowIR["outputs"];
36
+ };
37
+ diagnostics: WorkflowIR["diagnostics"];
38
+ irDigest: string;
39
+ sourceGraphDigest: string;
40
+ } | {
41
+ status: "failed";
42
+ phase: "check" | "compile" | "validate";
43
+ message: string;
44
+ diagnostics?: WorkflowIR["diagnostics"];
45
+ };
46
+ export declare function listProjectWorkflowCatalog(cwd: string): Promise<ProjectWorkflowCatalogEntry[]>;
47
+ export declare function listWorkflowFiles(cwd: string, dir?: string): Promise<{
48
+ cwd: string;
49
+ dir: string;
50
+ entries: WorkflowFileEntry[];
51
+ }>;
52
+ export declare function visualizeWorkflowSource(cwd: string, source: WorkflowVisualizationSource): Promise<WorkflowVisualizationResult>;
53
+ export declare function workflowVisualizationFromPrepared(prepared: PreparedWorkflow): Extract<WorkflowVisualizationResult, {
54
+ status: "ready";
55
+ }>;
56
+ export type WorkflowVizHtmlOptions = {
57
+ graph: WebGraph;
58
+ title?: string;
59
+ workflow?: Extract<WorkflowVisualizationResult, {
60
+ status: "ready";
61
+ }>["workflow"];
62
+ contract?: Extract<WorkflowVisualizationResult, {
63
+ status: "ready";
64
+ }>["contract"];
65
+ diagnostics?: Extract<WorkflowVisualizationResult, {
66
+ status: "ready";
67
+ }>["diagnostics"];
68
+ irDigest?: string;
69
+ sourceGraphDigest?: string;
70
+ };
71
+ export declare function renderWorkflowVizHtml(options: WorkflowVizHtmlOptions): string;
72
+ export declare function writeWorkflowVizHtml(path: string, html: string, options?: {
73
+ force?: boolean;
74
+ }): Promise<void>;
75
+ //# sourceMappingURL=workflows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/server/workflows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,205 @@
1
+ import { access, mkdir, readdir, readFile, stat, writeFile } from "node:fs/promises";
2
+ import { dirname, extname, join, relative, resolve } from "node:path";
3
+ import { prepareWorkflow, WorkflowPreparationError } from "@acpus/workflow-compiler";
4
+ import { workflowIrToWebGraph } from "./graph.js";
5
+ import { staticVizCss, staticVizJs } from "./static-viz-assets.generated.js";
6
+ export async function listProjectWorkflowCatalog(cwd) {
7
+ const root = join(cwd, ".acpus", "workflows");
8
+ let entries;
9
+ try {
10
+ entries = await readdir(root);
11
+ }
12
+ catch (error) {
13
+ if (isNodeError(error) && error.code === "ENOENT")
14
+ return [];
15
+ throw error;
16
+ }
17
+ const catalog = await Promise.all(entries.map(async (name) => {
18
+ if (!/^[a-z0-9][a-z0-9-]*$/.test(name))
19
+ return undefined;
20
+ const packagePath = join(root, name);
21
+ const entryPath = join(packagePath, "workflow.ts");
22
+ if (!await isFile(entryPath))
23
+ return undefined;
24
+ return {
25
+ scope: "project",
26
+ name,
27
+ packagePath,
28
+ entryPath,
29
+ status: "available",
30
+ requiresScope: false,
31
+ };
32
+ }));
33
+ return catalog.flatMap(entry => entry ? [entry] : []).sort((left, right) => left.name.localeCompare(right.name));
34
+ }
35
+ export async function listWorkflowFiles(cwd, dir = "") {
36
+ const base = resolve(cwd);
37
+ const current = resolveWorkspacePath(base, dir);
38
+ if (!current)
39
+ throw new Error("Path escapes workspace.");
40
+ const currentStat = await stat(current);
41
+ if (!currentStat.isDirectory())
42
+ throw new Error("Path is not a directory.");
43
+ const entries = await Promise.all((await readdir(current, { withFileTypes: true }))
44
+ .filter(entry => !skipEntry(entry.name))
45
+ .map(async (entry) => {
46
+ const absolute = join(current, entry.name);
47
+ const rel = relative(base, absolute);
48
+ if (entry.isDirectory())
49
+ return { name: entry.name, path: rel, kind: "directory" };
50
+ return isWorkflowFile(entry.name) ? { name: entry.name, path: rel, kind: "workflow" } : undefined;
51
+ }));
52
+ return {
53
+ cwd: base,
54
+ dir: relative(base, current),
55
+ entries: entries.flatMap(entry => entry ? [entry] : []).sort((left, right) => left.kind.localeCompare(right.kind) || left.name.localeCompare(right.name)),
56
+ };
57
+ }
58
+ export async function visualizeWorkflowSource(cwd, source) {
59
+ const workflow = source.kind === "catalog"
60
+ ? (await catalogWorkflowPath(cwd, source.name))
61
+ : workspaceWorkflowPath(cwd, source.path);
62
+ if (!workflow) {
63
+ return { status: "failed", phase: "compile", message: "Workflow source was not found." };
64
+ }
65
+ try {
66
+ const prepared = await prepareWorkflow({ cwd, workflow });
67
+ return workflowVisualizationFromPrepared(prepared);
68
+ }
69
+ catch (error) {
70
+ if (error instanceof WorkflowPreparationError) {
71
+ return {
72
+ status: "failed",
73
+ phase: error.failure.phase,
74
+ message: error.failure.message,
75
+ ...("diagnostics" in error.failure ? { diagnostics: error.failure.diagnostics } : {}),
76
+ };
77
+ }
78
+ return { status: "failed", phase: "compile", message: error instanceof Error ? error.message : String(error) };
79
+ }
80
+ }
81
+ export function workflowVisualizationFromPrepared(prepared) {
82
+ return {
83
+ status: "ready",
84
+ graph: workflowIrToWebGraph(prepared.ir),
85
+ workflow: {
86
+ name: prepared.ir.name,
87
+ ...(prepared.ir.description === undefined ? {} : { description: prepared.ir.description }),
88
+ irVersion: prepared.ir.irVersion,
89
+ nodeCount: countNodes(prepared.ir.root),
90
+ },
91
+ contract: {
92
+ ...(prepared.ir.inputSchema === undefined ? {} : { inputSchema: prepared.ir.inputSchema }),
93
+ outputs: prepared.ir.outputs,
94
+ },
95
+ diagnostics: prepared.ir.diagnostics,
96
+ irDigest: prepared.irDigest,
97
+ sourceGraphDigest: prepared.sourceGraphDigest,
98
+ };
99
+ }
100
+ export function renderWorkflowVizHtml(options) {
101
+ const title = options.title ?? options.graph.workflow.name;
102
+ const bundle = {
103
+ title,
104
+ graph: options.graph,
105
+ ...(options.workflow ? { workflow: options.workflow } : {}),
106
+ ...(options.contract ? { contract: options.contract } : {}),
107
+ ...(options.diagnostics ? { diagnostics: options.diagnostics } : {}),
108
+ ...(options.irDigest ? { irDigest: options.irDigest } : {}),
109
+ ...(options.sourceGraphDigest ? { sourceGraphDigest: options.sourceGraphDigest } : {}),
110
+ };
111
+ const bundleJson = JSON.stringify(bundle).replaceAll("</", "<\\/");
112
+ return `<!doctype html>
113
+ <html lang="en">
114
+ <head>
115
+ <meta charset="utf-8">
116
+ <meta name="viewport" content="width=device-width, initial-scale=1">
117
+ <title>${escapeHtml(title)}</title>
118
+ <style>
119
+ ${staticVizCss}
120
+ </style>
121
+ </head>
122
+ <body>
123
+ <div id="root"></div>
124
+ <script>
125
+ window.__ACPUS_WORKFLOW_VIZ__=${bundleJson};
126
+ </script>
127
+ <script>
128
+ ${staticVizJs}
129
+ </script>
130
+ </body>
131
+ </html>
132
+ `;
133
+ }
134
+ export async function writeWorkflowVizHtml(path, html, options = {}) {
135
+ if (!options.force && await exists(path))
136
+ throw new Error(`Output file already exists: ${path}`);
137
+ await mkdir(dirname(path), { recursive: true });
138
+ await writeFile(path, html);
139
+ }
140
+ async function catalogWorkflowPath(cwd, name) {
141
+ return (await listProjectWorkflowCatalog(cwd)).find(entry => entry.name === name)?.entryPath;
142
+ }
143
+ function workspaceWorkflowPath(cwd, path) {
144
+ if (!isWorkflowFile(path))
145
+ return undefined;
146
+ return resolveWorkspacePath(resolve(cwd), path);
147
+ }
148
+ function resolveWorkspacePath(base, path) {
149
+ if (path.startsWith("/") || path.includes("\0"))
150
+ return undefined;
151
+ const resolved = resolve(base, path || ".");
152
+ const rel = relative(base, resolved);
153
+ return rel === "" || (!rel.startsWith("..") && !rel.startsWith("/")) ? resolved : undefined;
154
+ }
155
+ function isWorkflowFile(path) {
156
+ return extname(path) === ".ts" || extname(path) === ".tsx";
157
+ }
158
+ function skipEntry(name) {
159
+ return name === "node_modules"
160
+ || name === ".git"
161
+ || name === "dist"
162
+ || name === "build"
163
+ || name === ".turbo"
164
+ || name === ".next"
165
+ || name === ".local";
166
+ }
167
+ async function isFile(path) {
168
+ try {
169
+ return (await stat(path)).isFile();
170
+ }
171
+ catch {
172
+ return false;
173
+ }
174
+ }
175
+ async function exists(path) {
176
+ try {
177
+ await access(path);
178
+ return true;
179
+ }
180
+ catch {
181
+ return false;
182
+ }
183
+ }
184
+ function countNodes(scope) {
185
+ return scope.nodes.reduce((total, node) => {
186
+ if (node.kind === "if")
187
+ return total + 1 + countNodes(node.then) + (node.else ? countNodes(node.else) : 0);
188
+ if (node.kind === "switch")
189
+ return total + 1 + node.cases.reduce((sum, branch) => sum + countNodes(branch.then), 0) + countNodes(node.default);
190
+ if (node.kind === "parallel")
191
+ return total + 1 + Object.values(node.branches).reduce((sum, branch) => sum + countNodes(branch.scope), 0);
192
+ if (node.kind === "fanout")
193
+ return total + 1 + countNodes(node.do);
194
+ if (node.kind === "loop")
195
+ return total + 1 + countNodes(node.do);
196
+ return total + 1;
197
+ }, 0);
198
+ }
199
+ function escapeHtml(value) {
200
+ return value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;");
201
+ }
202
+ function isNodeError(error) {
203
+ return Boolean(error && typeof error === "object" && "code" in error);
204
+ }
205
+ //# sourceMappingURL=workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/server/workflows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtE,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAyB,MAAM,0BAA0B,CAAC;AAC5G,OAAO,EAAE,oBAAoB,EAAiB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAsC7E,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,GAAW;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC9C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAC7D,MAAM,KAAK,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAC,EAAE;QACzD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAC/C,OAAO;YACL,KAAK,EAAE,SAAkB;YACzB,IAAI;YACJ,WAAW;YACX,SAAS;YACT,MAAM,EAAE,WAAoB;YAC5B,aAAa,EAAE,KAAK;SACrB,CAAC;IACJ,CAAC,CAAC,CAAC,CAAC;IACJ,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACnH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,GAAG,GAAG,EAAE;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAE5E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;SAChF,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACvC,GAAG,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;QACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,WAAW,EAAE;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAoB,EAAE,CAAC;QAC5F,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAmB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7G,CAAC,CAAC,CAAC,CAAC;IACN,OAAO;QACL,GAAG,EAAE,IAAI;QACT,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAC3E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAC3E;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAW,EAAE,MAAmC;IAC5F,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS;QACxC,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;IAC3F,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1D,OAAO,iCAAiC,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;YAC9C,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;gBAC9B,GAAG,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACjH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,QAA0B;IAC1E,OAAO;QACL,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,QAAQ,EAAE;YACR,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI;YACtB,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1F,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,SAAS;YAChC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC;SACxC;QACD,QAAQ,EAAE;YACR,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1F,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO;SAC7B;QACD,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC,WAAW;QACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;KAC9C,CAAC;AACJ,CAAC;AAYD,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC3D,MAAM,MAAM,GAAG;QACb,KAAK;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvF,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnE,OAAO;;;;;SAKA,UAAU,CAAC,KAAK,CAAC;;EAExB,YAAY;;;;;;gCAMkB,UAAU;;;EAGxC,WAAW;;;;CAIZ,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,IAAY,EAAE,UAA+B,EAAE;IACtG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;IACjG,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,IAAY;IAC1D,OAAO,CAAC,MAAM,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,SAAS,CAAC;AAC/F,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW,EAAE,IAAY;IACtD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,IAAY;IACtD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9F,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC;AAC7D,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,KAAK,cAAc;WACzB,IAAI,KAAK,MAAM;WACf,IAAI,KAAK,MAAM;WACf,IAAI,KAAK,OAAO;WAChB,IAAI,KAAK,QAAQ;WACjB,IAAI,KAAK,OAAO;WAChB,IAAI,KAAK,QAAQ,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB;IAC3C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACxC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3G,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/I,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,OAAO,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACzI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,OAAO,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACnH,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC;AACxE,CAAC"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@acpus/web",
3
+ "version": "0.1.0-alpha.0",
4
+ "type": "module",
5
+ "description": "Acpus WebUI — local operator console for run observation and control.",
6
+ "license": "MIT",
7
+ "engines": {
8
+ "node": ">=22.12"
9
+ },
10
+ "exports": {
11
+ ".": {
12
+ "development": "./src/index.ts",
13
+ "types": "./dist/index.d.ts",
14
+ "default": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "dependencies": {
24
+ "@hono/node-server": "^1.17.0",
25
+ "@radix-ui/react-dialog": "^1.1.19",
26
+ "@radix-ui/react-popover": "^1.1.19",
27
+ "@radix-ui/react-select": "^2.3.3",
28
+ "@radix-ui/react-slot": "^1.3.0",
29
+ "@radix-ui/react-tabs": "^1.1.17",
30
+ "@tanstack/react-query": "^5.75.0",
31
+ "class-variance-authority": "^0.7.1",
32
+ "clsx": "^2.1.1",
33
+ "hono": "^4.8.0",
34
+ "lucide-react": "^0.503.0",
35
+ "react": "^19.1.0",
36
+ "react-dom": "^19.1.0",
37
+ "react-json-view-lite": "^2.5.0",
38
+ "react-markdown": "^10.1.0",
39
+ "remark-gfm": "^4.0.1",
40
+ "tailwind-merge": "^3.6.0",
41
+ "@acpus/core": "0.7.0-alpha.0",
42
+ "@acpus/expression": "0.1.0-alpha.0",
43
+ "@acpus/runtime": "0.9.0-alpha.0",
44
+ "@acpus/workflow-compiler": "0.1.0-alpha.0"
45
+ },
46
+ "devDependencies": {
47
+ "@tailwindcss/vite": "^4.1.0",
48
+ "@types/node": "^22.15.30",
49
+ "@types/react": "^19.1.0",
50
+ "@types/react-dom": "^19.1.0",
51
+ "@vitejs/plugin-react": "^4.6.0",
52
+ "tailwindcss": "^4.1.0",
53
+ "vite": "^6.3.0"
54
+ },
55
+ "repository": {
56
+ "type": "git",
57
+ "url": "https://github.com/kelvinschen/acpus"
58
+ },
59
+ "scripts": {
60
+ "build": "node scripts/build.mjs",
61
+ "typecheck": "tsc -p tsconfig.json --noEmit",
62
+ "clean": "rm -rf dist",
63
+ "dev": "vite --config vite.config.ts"
64
+ }
65
+ }