@chances-ai/client 24.0.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 (121) hide show
  1. package/dist/client-core/client.d.ts +145 -0
  2. package/dist/client-core/client.d.ts.map +1 -0
  3. package/dist/client-core/client.js +533 -0
  4. package/dist/client-core/client.js.map +1 -0
  5. package/dist/client-core/index.d.ts +16 -0
  6. package/dist/client-core/index.d.ts.map +1 -0
  7. package/dist/client-core/index.js +15 -0
  8. package/dist/client-core/index.js.map +1 -0
  9. package/dist/client-core/reverse-map.d.ts +66 -0
  10. package/dist/client-core/reverse-map.d.ts.map +1 -0
  11. package/dist/client-core/reverse-map.js +86 -0
  12. package/dist/client-core/reverse-map.js.map +1 -0
  13. package/dist/client-core/store.d.ts +144 -0
  14. package/dist/client-core/store.d.ts.map +1 -0
  15. package/dist/client-core/store.js +36 -0
  16. package/dist/client-core/store.js.map +1 -0
  17. package/dist/client-core/transport.d.ts +53 -0
  18. package/dist/client-core/transport.d.ts.map +1 -0
  19. package/dist/client-core/transport.js +103 -0
  20. package/dist/client-core/transport.js.map +1 -0
  21. package/dist/web-ui/approval-badge.d.ts +17 -0
  22. package/dist/web-ui/approval-badge.d.ts.map +1 -0
  23. package/dist/web-ui/approval-badge.js +24 -0
  24. package/dist/web-ui/approval-badge.js.map +1 -0
  25. package/dist/web-ui/button.d.ts +10 -0
  26. package/dist/web-ui/button.d.ts.map +1 -0
  27. package/dist/web-ui/button.js +16 -0
  28. package/dist/web-ui/button.js.map +1 -0
  29. package/dist/web-ui/code-view.d.ts +6 -0
  30. package/dist/web-ui/code-view.d.ts.map +1 -0
  31. package/dist/web-ui/code-view.js +14 -0
  32. package/dist/web-ui/code-view.js.map +1 -0
  33. package/dist/web-ui/code-viewer.d.ts +11 -0
  34. package/dist/web-ui/code-viewer.d.ts.map +1 -0
  35. package/dist/web-ui/code-viewer.js +55 -0
  36. package/dist/web-ui/code-viewer.js.map +1 -0
  37. package/dist/web-ui/commands.d.ts +23 -0
  38. package/dist/web-ui/commands.d.ts.map +1 -0
  39. package/dist/web-ui/commands.js +26 -0
  40. package/dist/web-ui/commands.js.map +1 -0
  41. package/dist/web-ui/control-panel.d.ts +9 -0
  42. package/dist/web-ui/control-panel.d.ts.map +1 -0
  43. package/dist/web-ui/control-panel.js +70 -0
  44. package/dist/web-ui/control-panel.js.map +1 -0
  45. package/dist/web-ui/diff-view.d.ts +8 -0
  46. package/dist/web-ui/diff-view.d.ts.map +1 -0
  47. package/dist/web-ui/diff-view.js +28 -0
  48. package/dist/web-ui/diff-view.js.map +1 -0
  49. package/dist/web-ui/environment-panel.d.ts +9 -0
  50. package/dist/web-ui/environment-panel.d.ts.map +1 -0
  51. package/dist/web-ui/environment-panel.js +38 -0
  52. package/dist/web-ui/environment-panel.js.map +1 -0
  53. package/dist/web-ui/file-tree.d.ts +9 -0
  54. package/dist/web-ui/file-tree.d.ts.map +1 -0
  55. package/dist/web-ui/file-tree.js +77 -0
  56. package/dist/web-ui/file-tree.js.map +1 -0
  57. package/dist/web-ui/help-view.d.ts +13 -0
  58. package/dist/web-ui/help-view.d.ts.map +1 -0
  59. package/dist/web-ui/help-view.js +15 -0
  60. package/dist/web-ui/help-view.js.map +1 -0
  61. package/dist/web-ui/helpers.d.ts +77 -0
  62. package/dist/web-ui/helpers.d.ts.map +1 -0
  63. package/dist/web-ui/helpers.js +176 -0
  64. package/dist/web-ui/helpers.js.map +1 -0
  65. package/dist/web-ui/hooks.d.ts +7 -0
  66. package/dist/web-ui/hooks.d.ts.map +1 -0
  67. package/dist/web-ui/hooks.js +26 -0
  68. package/dist/web-ui/hooks.js.map +1 -0
  69. package/dist/web-ui/index.d.ts +32 -0
  70. package/dist/web-ui/index.d.ts.map +1 -0
  71. package/dist/web-ui/index.js +38 -0
  72. package/dist/web-ui/index.js.map +1 -0
  73. package/dist/web-ui/markdown.d.ts +12 -0
  74. package/dist/web-ui/markdown.d.ts.map +1 -0
  75. package/dist/web-ui/markdown.js +55 -0
  76. package/dist/web-ui/markdown.js.map +1 -0
  77. package/dist/web-ui/model-picker.d.ts +9 -0
  78. package/dist/web-ui/model-picker.d.ts.map +1 -0
  79. package/dist/web-ui/model-picker.js +119 -0
  80. package/dist/web-ui/model-picker.js.map +1 -0
  81. package/dist/web-ui/permission.d.ts +7 -0
  82. package/dist/web-ui/permission.d.ts.map +1 -0
  83. package/dist/web-ui/permission.js +25 -0
  84. package/dist/web-ui/permission.js.map +1 -0
  85. package/dist/web-ui/primitives.d.ts +59 -0
  86. package/dist/web-ui/primitives.d.ts.map +1 -0
  87. package/dist/web-ui/primitives.js +38 -0
  88. package/dist/web-ui/primitives.js.map +1 -0
  89. package/dist/web-ui/progress.d.ts +28 -0
  90. package/dist/web-ui/progress.d.ts.map +1 -0
  91. package/dist/web-ui/progress.js +45 -0
  92. package/dist/web-ui/progress.js.map +1 -0
  93. package/dist/web-ui/prompt-input.d.ts +15 -0
  94. package/dist/web-ui/prompt-input.d.ts.map +1 -0
  95. package/dist/web-ui/prompt-input.js +129 -0
  96. package/dist/web-ui/prompt-input.js.map +1 -0
  97. package/dist/web-ui/question-view.d.ts +7 -0
  98. package/dist/web-ui/question-view.d.ts.map +1 -0
  99. package/dist/web-ui/question-view.js +60 -0
  100. package/dist/web-ui/question-view.js.map +1 -0
  101. package/dist/web-ui/segments.d.ts +8 -0
  102. package/dist/web-ui/segments.d.ts.map +1 -0
  103. package/dist/web-ui/segments.js +19 -0
  104. package/dist/web-ui/segments.js.map +1 -0
  105. package/dist/web-ui/session-sidebar.d.ts +15 -0
  106. package/dist/web-ui/session-sidebar.d.ts.map +1 -0
  107. package/dist/web-ui/session-sidebar.js +10 -0
  108. package/dist/web-ui/session-sidebar.js.map +1 -0
  109. package/dist/web-ui/status-bar.d.ts +10 -0
  110. package/dist/web-ui/status-bar.d.ts.map +1 -0
  111. package/dist/web-ui/status-bar.js +10 -0
  112. package/dist/web-ui/status-bar.js.map +1 -0
  113. package/dist/web-ui/theme-context.d.ts +13 -0
  114. package/dist/web-ui/theme-context.d.ts.map +1 -0
  115. package/dist/web-ui/theme-context.js +31 -0
  116. package/dist/web-ui/theme-context.js.map +1 -0
  117. package/dist/web-ui/transcript.d.ts +27 -0
  118. package/dist/web-ui/transcript.d.ts.map +1 -0
  119. package/dist/web-ui/transcript.js +56 -0
  120. package/dist/web-ui/transcript.js.map +1 -0
  121. package/package.json +56 -0
@@ -0,0 +1,27 @@
1
+ /**
2
+ * (v17 M1 B3; v22) The chat transcript — the web twin of the TUI's message
3
+ * column. It renders the ui-core `ChatViewModel` `Line[]` (the SAME view-model
4
+ * the terminal uses, reverse-mapped from wire frames by client-core). Each line
5
+ * kind maps to a small presentational row; the tool line reproduces the
6
+ * `⏺ header` + `⎿ branch` structure (result preview + structured diff) from the
7
+ * claude-code visual language (v14 / docs/5.9), now in styled DOM.
8
+ */
9
+ import type { Line } from "@chances-ai/ui-core";
10
+ /**
11
+ * Render every transcript line in order. Lines `[0, committedCount)` are
12
+ * COMMITTED (assistant → Markdown); the live tail `[committedCount, end)` renders
13
+ * assistant text as plain pre-wrap, so half-streamed Markdown never flickers —
14
+ * the same committed/live split the TUI does via `<Static>` (v13/v14). When
15
+ * `committedCount` is omitted (a focused smoke) every line is treated committed.
16
+ */
17
+ export declare function Transcript({ lines, committedCount }: {
18
+ lines: readonly Line[];
19
+ committedCount?: number;
20
+ }): import("react/jsx-runtime").JSX.Element;
21
+ /** One line, dispatched by `kind`. `rich` ⇒ committed (assistant → Markdown);
22
+ * otherwise the live tail (assistant → plain). Exported for focused render smokes. */
23
+ export declare function TranscriptLine({ line, rich }: {
24
+ line: Line;
25
+ rich?: boolean;
26
+ }): import("react/jsx-runtime").JSX.Element;
27
+ //# sourceMappingURL=transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.d.ts","sourceRoot":"","sources":["../../src/web-ui/transcript.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAShD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,2CASxG;AAED;uFACuF;AACvF,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,IAAW,EAAE,EAAE;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,2CAanF"}
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { toolDisplayName } from "@chances-ai/ui-core";
3
+ import { DiffBlock } from "./diff-view.js";
4
+ import { MONO, toolDotColor } from "./helpers.js";
5
+ import { Markdown } from "./markdown.js";
6
+ import { Box, Txt } from "./primitives.js";
7
+ import { CodeSegments } from "./segments.js";
8
+ import { GLYPHS, useUiTheme } from "./theme-context.js";
9
+ /**
10
+ * Render every transcript line in order. Lines `[0, committedCount)` are
11
+ * COMMITTED (assistant → Markdown); the live tail `[committedCount, end)` renders
12
+ * assistant text as plain pre-wrap, so half-streamed Markdown never flickers —
13
+ * the same committed/live split the TUI does via `<Static>` (v13/v14). When
14
+ * `committedCount` is omitted (a focused smoke) every line is treated committed.
15
+ */
16
+ export function Transcript({ lines, committedCount }) {
17
+ const committed = committedCount ?? lines.length;
18
+ return (_jsx(Box, { gap: 6, paddingVertical: 8, children: lines.map((line, i) => (_jsx(TranscriptLine, { line: line, rich: i < committed }, i))) }));
19
+ }
20
+ /** One line, dispatched by `kind`. `rich` ⇒ committed (assistant → Markdown);
21
+ * otherwise the live tail (assistant → plain). Exported for focused render smokes. */
22
+ export function TranscriptLine({ line, rich = true }) {
23
+ switch (line.kind) {
24
+ case "user":
25
+ return _jsx(UserLine, { text: line.text });
26
+ case "assistant":
27
+ return _jsx(AssistantLine, { text: line.text, rich: rich });
28
+ case "tool":
29
+ return _jsx(ToolLine, { line: line });
30
+ case "error":
31
+ return _jsx(PlainLine, { text: line.text, role: "error" });
32
+ case "info":
33
+ return _jsx(PlainLine, { text: line.text, role: "info" });
34
+ }
35
+ }
36
+ function UserLine({ text }) {
37
+ const theme = useUiTheme();
38
+ return (_jsx(Box, { alignSelf: "flex-end", maxWidth: "85%", backgroundColor: theme.userMessageBg, borderRadius: 10, paddingHorizontal: 12, paddingVertical: 8, children: _jsx(Txt, { color: "var(--ch-fg)", style: { whiteSpace: "pre-wrap", overflowWrap: "anywhere" }, children: text }) }));
39
+ }
40
+ function AssistantLine({ text, rich }) {
41
+ // Committed → Markdown; live (still streaming) → plain text (no half-parsed
42
+ // Markdown flicker), matching the TUI's committed/live split.
43
+ if (rich)
44
+ return _jsx(Markdown, { text: text });
45
+ return (_jsx(Txt, { color: "var(--ch-fg)", style: { whiteSpace: "pre-wrap", overflowWrap: "anywhere" }, children: text }));
46
+ }
47
+ function PlainLine({ text, role }) {
48
+ const theme = useUiTheme();
49
+ return (_jsx(Txt, { color: role === "error" ? theme.error : theme.synComment, style: { whiteSpace: "pre-wrap", overflowWrap: "anywhere" }, children: text }));
50
+ }
51
+ function ToolLine({ line }) {
52
+ const theme = useUiTheme();
53
+ const name = toolDisplayName(line.toolName ?? "");
54
+ return (_jsxs(Box, { gap: 2, children: [_jsxs(Box, { flexDirection: "row", gap: 6, alignItems: "baseline", children: [_jsx(Txt, { color: toolDotColor(line, theme), children: GLYPHS.dot }), _jsx(Txt, { color: "var(--ch-fg)", fontWeight: "600", children: name }), line.text ? (_jsx(Txt, { color: theme.synComment, style: { fontFamily: MONO, overflowWrap: "anywhere" }, fontSize: 13, children: line.text })) : null] }), line.diff || line.result ? (_jsxs(Box, { flexDirection: "row", gap: 6, paddingLeft: 4, children: [_jsx(Txt, { color: theme.synComment, children: GLYPHS.branch }), _jsxs(Box, { flex: 1, gap: 2, children: [line.diff ? _jsx(DiffBlock, { diff: line.diff, anchored: line.anchored === true }) : null, line.result ? _jsx(CodeSegments, { code: line.result, fontSize: 12 }) : null] })] })) : null] }));
55
+ }
56
+ //# sourceMappingURL=transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcript.js","sourceRoot":"","sources":["../../src/web-ui/transcript.tsx"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,56 @@
1
+ {
2
+ "name": "@chances-ai/client",
3
+ "version": "24.0.0",
4
+ "type": "module",
5
+ "main": "./dist/client-core/index.js",
6
+ "types": "./dist/client-core/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/client-core/index.d.ts",
10
+ "import": "./dist/client-core/index.js"
11
+ },
12
+ "./react": {
13
+ "types": "./dist/web-ui/index.d.ts",
14
+ "import": "./dist/web-ui/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "dependencies": {
21
+ "@chances-ai/wire": "24.0.0",
22
+ "@chances-ai/runtime": "24.0.0",
23
+ "@chances-ai/ui-core": "24.0.0",
24
+ "zustand": "^5.0.0"
25
+ },
26
+ "peerDependencies": {
27
+ "@heroui/react": "^3.1.0",
28
+ "react": "^19.2",
29
+ "react-dom": "^19.2"
30
+ },
31
+ "peerDependenciesMeta": {
32
+ "@heroui/react": {
33
+ "optional": true
34
+ },
35
+ "react": {
36
+ "optional": true
37
+ },
38
+ "react-dom": {
39
+ "optional": true
40
+ }
41
+ },
42
+ "devDependencies": {
43
+ "@happy-dom/global-registrator": "^20.9.0",
44
+ "@heroui/react": "^3.1.0",
45
+ "@testing-library/dom": "^10.4.1",
46
+ "@testing-library/react": "^16.3.2",
47
+ "@testing-library/user-event": "^14.6.1",
48
+ "react": "^19.2",
49
+ "react-dom": "^19.2"
50
+ },
51
+ "scripts": {
52
+ "build": "tsc -b",
53
+ "check": "tsc -b",
54
+ "test": "bun test src/client-core --timeout 30000 && bun test --preload ./happydom.ts src/web-ui"
55
+ }
56
+ }