@acpus/tui 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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +7 -0
  3. package/dist/agentTranscript.d.ts +33 -0
  4. package/dist/agentTranscript.d.ts.map +1 -0
  5. package/dist/agentTranscript.js +238 -0
  6. package/dist/agentTranscript.js.map +1 -0
  7. package/dist/components/App.d.ts +28 -0
  8. package/dist/components/App.d.ts.map +1 -0
  9. package/dist/components/App.js +516 -0
  10. package/dist/components/App.js.map +1 -0
  11. package/dist/components/DetailsPane.d.ts +65 -0
  12. package/dist/components/DetailsPane.d.ts.map +1 -0
  13. package/dist/components/DetailsPane.js +290 -0
  14. package/dist/components/DetailsPane.js.map +1 -0
  15. package/dist/components/Footer.d.ts +12 -0
  16. package/dist/components/Footer.d.ts.map +1 -0
  17. package/dist/components/Footer.js +34 -0
  18. package/dist/components/Footer.js.map +1 -0
  19. package/dist/components/GraphPane.d.ts +31 -0
  20. package/dist/components/GraphPane.d.ts.map +1 -0
  21. package/dist/components/GraphPane.js +35 -0
  22. package/dist/components/GraphPane.js.map +1 -0
  23. package/dist/components/RunPicker.d.ts +17 -0
  24. package/dist/components/RunPicker.d.ts.map +1 -0
  25. package/dist/components/RunPicker.js +53 -0
  26. package/dist/components/RunPicker.js.map +1 -0
  27. package/dist/components/StatusOverview.d.ts +20 -0
  28. package/dist/components/StatusOverview.d.ts.map +1 -0
  29. package/dist/components/StatusOverview.js +19 -0
  30. package/dist/components/StatusOverview.js.map +1 -0
  31. package/dist/controls.d.ts +15 -0
  32. package/dist/controls.d.ts.map +1 -0
  33. package/dist/controls.js +68 -0
  34. package/dist/controls.js.map +1 -0
  35. package/dist/index.d.ts +11 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +33 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/model.d.ts +130 -0
  40. package/dist/model.d.ts.map +1 -0
  41. package/dist/model.js +429 -0
  42. package/dist/model.js.map +1 -0
  43. package/dist/osc52.d.ts +3 -0
  44. package/dist/osc52.d.ts.map +1 -0
  45. package/dist/osc52.js +8 -0
  46. package/dist/osc52.js.map +1 -0
  47. package/dist/poller.d.ts +24 -0
  48. package/dist/poller.d.ts.map +1 -0
  49. package/dist/poller.js +58 -0
  50. package/dist/poller.js.map +1 -0
  51. package/dist/theme.d.ts +37 -0
  52. package/dist/theme.d.ts.map +1 -0
  53. package/dist/theme.js +68 -0
  54. package/dist/theme.js.map +1 -0
  55. package/dist/ui/inkui/JSONViewer.d.ts +37 -0
  56. package/dist/ui/inkui/JSONViewer.d.ts.map +1 -0
  57. package/dist/ui/inkui/JSONViewer.js +121 -0
  58. package/dist/ui/inkui/JSONViewer.js.map +1 -0
  59. package/dist/ui/inkui/KeyHint.d.ts +11 -0
  60. package/dist/ui/inkui/KeyHint.d.ts.map +1 -0
  61. package/dist/ui/inkui/KeyHint.js +7 -0
  62. package/dist/ui/inkui/KeyHint.js.map +1 -0
  63. package/dist/ui/inkui/Markdown.d.ts +9 -0
  64. package/dist/ui/inkui/Markdown.d.ts.map +1 -0
  65. package/dist/ui/inkui/Markdown.js +80 -0
  66. package/dist/ui/inkui/Markdown.js.map +1 -0
  67. package/dist/ui/inkui/ScrollArea.d.ts +29 -0
  68. package/dist/ui/inkui/ScrollArea.d.ts.map +1 -0
  69. package/dist/ui/inkui/ScrollArea.js +38 -0
  70. package/dist/ui/inkui/ScrollArea.js.map +1 -0
  71. package/dist/ui/inkui/Spinner.d.ts +19 -0
  72. package/dist/ui/inkui/Spinner.d.ts.map +1 -0
  73. package/dist/ui/inkui/Spinner.js +36 -0
  74. package/dist/ui/inkui/Spinner.js.map +1 -0
  75. package/dist/ui/inkui/Tabs.d.ts +14 -0
  76. package/dist/ui/inkui/Tabs.d.ts.map +1 -0
  77. package/dist/ui/inkui/Tabs.js +15 -0
  78. package/dist/ui/inkui/Tabs.js.map +1 -0
  79. package/dist/ui/inkui/index.d.ts +8 -0
  80. package/dist/ui/inkui/index.d.ts.map +1 -0
  81. package/dist/ui/inkui/index.js +8 -0
  82. package/dist/ui/inkui/index.js.map +1 -0
  83. package/dist/ui/inkui/theme.d.ts +20 -0
  84. package/dist/ui/inkui/theme.d.ts.map +1 -0
  85. package/dist/ui/inkui/theme.js +51 -0
  86. package/dist/ui/inkui/theme.js.map +1 -0
  87. package/dist/useTerminalSize.d.ts +20 -0
  88. package/dist/useTerminalSize.d.ts.map +1 -0
  89. package/dist/useTerminalSize.js +34 -0
  90. package/dist/useTerminalSize.js.map +1 -0
  91. package/package.json +65 -0
@@ -0,0 +1,20 @@
1
+ export interface InkUiTheme {
2
+ colors: {
3
+ primary: string;
4
+ secondary: string;
5
+ success: string;
6
+ warning: string;
7
+ error: string;
8
+ info: string;
9
+ muted: string;
10
+ text: string;
11
+ textInverse: string;
12
+ border: string;
13
+ focus: string;
14
+ selection: string;
15
+ };
16
+ }
17
+ export declare const acpusInkUiTheme: InkUiTheme;
18
+ export declare function clampInline(s: string, width: number): string;
19
+ export declare function wrapText(s: string, width: number): string[];
20
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/ui/inkui/theme.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,eAAO,MAAM,eAAe,EAAE,UAe7B,CAAC;AAEF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CA0B3D"}
@@ -0,0 +1,51 @@
1
+ export const acpusInkUiTheme = {
2
+ colors: {
3
+ primary: "cyan",
4
+ secondary: "magenta",
5
+ success: "green",
6
+ warning: "yellow",
7
+ error: "red",
8
+ info: "blue",
9
+ muted: "gray",
10
+ text: "white",
11
+ textInverse: "black",
12
+ border: "gray",
13
+ focus: "cyan",
14
+ selection: "cyan"
15
+ }
16
+ };
17
+ export function clampInline(s, width) {
18
+ if (width <= 0)
19
+ return "";
20
+ return s.length > width ? s.slice(0, Math.max(0, width - 1)) + "…" : s;
21
+ }
22
+ export function wrapText(s, width) {
23
+ const cols = Math.max(1, width);
24
+ if (s.length === 0)
25
+ return [""];
26
+ const lines = [];
27
+ for (const sourceLine of s.split("\n")) {
28
+ let rest = sourceLine;
29
+ if (rest.length === 0) {
30
+ lines.push("");
31
+ continue;
32
+ }
33
+ while (rest.length > cols) {
34
+ const window = rest.slice(0, cols + 1);
35
+ const slash = window.lastIndexOf("/");
36
+ const space = window.lastIndexOf(" ");
37
+ const breakAt = Math.max(slash, space);
38
+ if (breakAt > Math.floor(cols * 0.4)) {
39
+ lines.push(rest.slice(0, breakAt + 1));
40
+ rest = rest.slice(breakAt + 1);
41
+ }
42
+ else {
43
+ lines.push(rest.slice(0, cols));
44
+ rest = rest.slice(cols);
45
+ }
46
+ }
47
+ lines.push(rest);
48
+ }
49
+ return lines;
50
+ }
51
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/ui/inkui/theme.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,eAAe,GAAe;IACzC,MAAM,EAAE;QACN,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,OAAO;QACpB,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,MAAM;QACb,SAAS,EAAE,MAAM;KAClB;CACF,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,CAAS,EAAE,KAAa;IAClD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1B,OAAO,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,KAAa;IAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,UAAU,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,IAAI,GAAG,UAAU,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACvC,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBACrC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAChC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,20 @@
1
+ export interface TerminalSize {
2
+ columns: number;
3
+ rows: number;
4
+ }
5
+ /**
6
+ * Track the terminal size and update on resize. Ink can only erase a previous
7
+ * frame when the frame fits within the terminal height; if a frame is taller
8
+ * than the screen the old frame scrolls up and lingers. Components use this to
9
+ * clip themselves to the available height.
10
+ */
11
+ export declare function useTerminalSize(): TerminalSize;
12
+ /**
13
+ * Compute a scrolling window [start, end) of `size` items that keeps the
14
+ * selected index visible (roughly centered).
15
+ */
16
+ export declare function windowSlice(total: number, selected: number, size: number): {
17
+ start: number;
18
+ end: number;
19
+ };
20
+ //# sourceMappingURL=useTerminalSize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTerminalSize.d.ts","sourceRoot":"","sources":["../src/useTerminalSize.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAgB9C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAKzG"}
@@ -0,0 +1,34 @@
1
+ import { useEffect, useState } from "react";
2
+ /**
3
+ * Track the terminal size and update on resize. Ink can only erase a previous
4
+ * frame when the frame fits within the terminal height; if a frame is taller
5
+ * than the screen the old frame scrolls up and lingers. Components use this to
6
+ * clip themselves to the available height.
7
+ */
8
+ export function useTerminalSize() {
9
+ const read = () => ({
10
+ columns: process.stdout.columns || 80,
11
+ rows: process.stdout.rows || 24
12
+ });
13
+ const [size, setSize] = useState(read);
14
+ useEffect(() => {
15
+ const onResize = () => setSize(read());
16
+ process.stdout.on("resize", onResize);
17
+ return () => {
18
+ process.stdout.off("resize", onResize);
19
+ };
20
+ }, []);
21
+ return size;
22
+ }
23
+ /**
24
+ * Compute a scrolling window [start, end) of `size` items that keeps the
25
+ * selected index visible (roughly centered).
26
+ */
27
+ export function windowSlice(total, selected, size) {
28
+ if (size <= 0 || total <= size)
29
+ return { start: 0, end: total };
30
+ let start = selected - Math.floor(size / 2);
31
+ start = Math.max(0, Math.min(start, total - size));
32
+ return { start, end: start + size };
33
+ }
34
+ //# sourceMappingURL=useTerminalSize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTerminalSize.js","sourceRoot":"","sources":["../src/useTerminalSize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAO5C;;;;;GAKG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,IAAI,GAAG,GAAiB,EAAE,CAAC,CAAC;QAChC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE;QACrC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;KAChC,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtC,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,QAAgB,EAAE,IAAY;IACvE,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAChE,IAAI,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAC5C,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IACnD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,CAAC;AACtC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@acpus/tui",
3
+ "version": "0.1.0",
4
+ "description": "Terminal visualizer for Acpus workflow runs",
5
+ "keywords": [
6
+ "acp",
7
+ "workflow",
8
+ "terminal",
9
+ "tui",
10
+ "orchestrator"
11
+ ],
12
+ "license": "MIT",
13
+ "author": "kkkyran",
14
+ "homepage": "https://github.com/kelvinschen/acpus#readme",
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/kelvinschen/acpus.git",
18
+ "directory": "packages/tui"
19
+ },
20
+ "bugs": {
21
+ "url": "https://github.com/kelvinschen/acpus/issues"
22
+ },
23
+ "type": "module",
24
+ "engines": {
25
+ "node": ">=22"
26
+ },
27
+ "exports": {
28
+ ".": {
29
+ "development": "./src/index.tsx",
30
+ "types": "./dist/index.d.ts",
31
+ "default": "./dist/index.js"
32
+ },
33
+ "./agent-transcript": {
34
+ "development": "./src/agentTranscript.ts",
35
+ "types": "./dist/agentTranscript.d.ts",
36
+ "default": "./dist/agentTranscript.js"
37
+ }
38
+ },
39
+ "main": "./dist/index.js",
40
+ "types": "./dist/index.d.ts",
41
+ "files": [
42
+ "dist",
43
+ "README.md",
44
+ "LICENSE"
45
+ ],
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "dependencies": {
50
+ "ink": "^6.8.0",
51
+ "react": "^19.2.7",
52
+ "tokenx": "^1.3.0",
53
+ "@acpus/core": "0.1.0",
54
+ "@acpus/runtime": "0.1.0"
55
+ },
56
+ "devDependencies": {
57
+ "@types/node": "^22.15.30",
58
+ "@types/react": "^19.2.17"
59
+ },
60
+ "scripts": {
61
+ "build": "tsc -p tsconfig.json",
62
+ "typecheck": "tsc -p tsconfig.json --noEmit",
63
+ "clean": "rm -rf dist"
64
+ }
65
+ }