@pentoshi/clai 1.2.9 → 2.0.1

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 (68) hide show
  1. package/README.md +46 -2
  2. package/dist/agent/context-manager.d.ts +14 -0
  3. package/dist/agent/context-manager.js +61 -0
  4. package/dist/agent/context-manager.js.map +1 -1
  5. package/dist/agent/runner.d.ts +6 -0
  6. package/dist/agent/runner.js +24 -3
  7. package/dist/agent/runner.js.map +1 -1
  8. package/dist/commands/update.js +1 -1
  9. package/dist/index.js +3 -17
  10. package/dist/index.js.map +1 -1
  11. package/dist/modes/agent.d.ts +4 -0
  12. package/dist/modes/agent.js.map +1 -1
  13. package/dist/repl.d.ts +5 -0
  14. package/dist/repl.js +8 -2
  15. package/dist/repl.js.map +1 -1
  16. package/dist/store/history.d.ts +7 -1
  17. package/dist/store/history.js +34 -3
  18. package/dist/store/history.js.map +1 -1
  19. package/dist/tools/registry.d.ts +4 -0
  20. package/dist/tools/registry.js +57 -1
  21. package/dist/tools/registry.js.map +1 -1
  22. package/dist/tools/shell.d.ts +2 -0
  23. package/dist/tools/shell.js +5 -1
  24. package/dist/tools/shell.js.map +1 -1
  25. package/dist/tui/App.d.ts +2 -1
  26. package/dist/tui/App.js +696 -100
  27. package/dist/tui/App.js.map +1 -1
  28. package/dist/tui/components/ConfirmModal.js +2 -2
  29. package/dist/tui/components/ConfirmModal.js.map +1 -1
  30. package/dist/tui/components/Pager.d.ts +6 -5
  31. package/dist/tui/components/Pager.js +17 -26
  32. package/dist/tui/components/Pager.js.map +1 -1
  33. package/dist/tui/components/PickerPanel.d.ts +13 -0
  34. package/dist/tui/components/PickerPanel.js +68 -0
  35. package/dist/tui/components/PickerPanel.js.map +1 -0
  36. package/dist/tui/components/SecretInputPanel.d.ts +6 -0
  37. package/dist/tui/components/SecretInputPanel.js +25 -0
  38. package/dist/tui/components/SecretInputPanel.js.map +1 -0
  39. package/dist/tui/default.d.ts +6 -0
  40. package/dist/tui/default.js +11 -0
  41. package/dist/tui/default.js.map +1 -0
  42. package/dist/tui/hooks/useAgentRunner.d.ts +13 -2
  43. package/dist/tui/hooks/useAgentRunner.js +48 -3
  44. package/dist/tui/hooks/useAgentRunner.js.map +1 -1
  45. package/dist/tui/hooks/useTerminalSize.d.ts +9 -0
  46. package/dist/tui/hooks/useTerminalSize.js +26 -0
  47. package/dist/tui/hooks/useTerminalSize.js.map +1 -0
  48. package/dist/tui/index.js +23 -10
  49. package/dist/tui/index.js.map +1 -1
  50. package/dist/tui/render-lines.d.ts +15 -0
  51. package/dist/tui/render-lines.js +165 -0
  52. package/dist/tui/render-lines.js.map +1 -0
  53. package/dist/tui/state.d.ts +12 -10
  54. package/dist/tui/state.js +83 -57
  55. package/dist/tui/state.js.map +1 -1
  56. package/package.json +1 -1
  57. package/dist/tui/components/Composer.d.ts +0 -6
  58. package/dist/tui/components/Composer.js +0 -122
  59. package/dist/tui/components/Composer.js.map +0 -1
  60. package/dist/tui/components/Header.d.ts +0 -7
  61. package/dist/tui/components/Header.js +0 -6
  62. package/dist/tui/components/Header.js.map +0 -1
  63. package/dist/tui/components/StatusLine.d.ts +0 -7
  64. package/dist/tui/components/StatusLine.js +0 -25
  65. package/dist/tui/components/StatusLine.js.map +0 -1
  66. package/dist/tui/components/items.d.ts +0 -5
  67. package/dist/tui/components/items.js +0 -57
  68. package/dist/tui/components/items.js.map +0 -1
@@ -1,122 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text, useInput } from "ink";
3
- import { useRef, useState } from "react";
4
- import { getSlashCommandSuggestions } from "../../repl.js";
5
- const MAX_SUGGESTIONS = 6;
6
- export function Composer({ busy, disabled, onSubmit }) {
7
- const [value, setValue] = useState("");
8
- const [cursor, setCursor] = useState(0);
9
- const [selected, setSelected] = useState(0);
10
- const history = useRef([]);
11
- const historyIdx = useRef(-1);
12
- const suggestions = value.startsWith("/")
13
- ? getSlashCommandSuggestions(value).slice(0, MAX_SUGGESTIONS)
14
- : [];
15
- const menuOpen = suggestions.length > 0;
16
- const setText = (next, nextCursor) => {
17
- setValue(next);
18
- setCursor(nextCursor ?? next.length);
19
- setSelected(0);
20
- };
21
- const submit = () => {
22
- const text = value.trim();
23
- if (!text)
24
- return;
25
- history.current.push(value);
26
- historyIdx.current = -1;
27
- setValue("");
28
- setCursor(0);
29
- setSelected(0);
30
- onSubmit(text);
31
- };
32
- useInput((input, key) => {
33
- if (disabled)
34
- return;
35
- // Slash menu navigation
36
- if (menuOpen && (key.upArrow || key.downArrow)) {
37
- setSelected((s) => {
38
- const n = suggestions.length;
39
- return key.upArrow ? (s - 1 + n) % n : (s + 1) % n;
40
- });
41
- return;
42
- }
43
- if (menuOpen && key.tab) {
44
- const cmd = suggestions[selected].command + " ";
45
- setText(cmd);
46
- return;
47
- }
48
- if (key.return) {
49
- if (menuOpen) {
50
- // Run the highlighted command directly. Commands that need args are
51
- // reached by typing a space first (which closes the menu).
52
- const cmd = suggestions[selected].command;
53
- history.current.push(cmd);
54
- historyIdx.current = -1;
55
- setValue("");
56
- setCursor(0);
57
- setSelected(0);
58
- onSubmit(cmd);
59
- return;
60
- }
61
- submit();
62
- return;
63
- }
64
- // History (only when menu closed)
65
- if (!menuOpen && key.upArrow) {
66
- if (history.current.length === 0)
67
- return;
68
- const idx = historyIdx.current < 0
69
- ? history.current.length - 1
70
- : Math.max(0, historyIdx.current - 1);
71
- historyIdx.current = idx;
72
- setText(history.current[idx] ?? "");
73
- return;
74
- }
75
- if (!menuOpen && key.downArrow) {
76
- if (historyIdx.current < 0)
77
- return;
78
- const idx = historyIdx.current + 1;
79
- if (idx >= history.current.length) {
80
- historyIdx.current = -1;
81
- setText("");
82
- return;
83
- }
84
- historyIdx.current = idx;
85
- setText(history.current[idx] ?? "");
86
- return;
87
- }
88
- if (key.leftArrow) {
89
- setCursor((c) => Math.max(0, c - 1));
90
- return;
91
- }
92
- if (key.rightArrow) {
93
- setCursor((c) => Math.min(value.length, c + 1));
94
- return;
95
- }
96
- if (key.backspace || key.delete) {
97
- if (cursor === 0)
98
- return;
99
- const next = value.slice(0, cursor - 1) + value.slice(cursor);
100
- setValue(next);
101
- setCursor(cursor - 1);
102
- setSelected(0);
103
- return;
104
- }
105
- if (key.ctrl || key.meta)
106
- return; // handled at app level (abort/quit/toggle)
107
- if (input) {
108
- const next = value.slice(0, cursor) + input + value.slice(cursor);
109
- setValue(next);
110
- setCursor(cursor + input.length);
111
- setSelected(0);
112
- }
113
- }, { isActive: !disabled });
114
- const before = value.slice(0, cursor);
115
- const at = value.slice(cursor, cursor + 1) || " ";
116
- const after = value.slice(cursor + 1);
117
- const placeholder = busy
118
- ? "type to queue a message while clai works…"
119
- : "ask anything · / for commands · esc to cancel · ctrl+c to exit";
120
- return (_jsxs(Box, { flexDirection: "column", children: [menuOpen ? (_jsx(Box, { flexDirection: "column", marginBottom: 1, paddingX: 1, children: suggestions.map((cmd, i) => (_jsxs(Text, { ...(i === selected ? { color: "magenta" } : {}), children: [_jsx(Text, { color: i === selected ? "magenta" : "cyan", children: cmd.command }), cmd.usage ? _jsxs(Text, { dimColor: true, children: [" ", cmd.usage] }) : null, _jsxs(Text, { dimColor: true, children: [" — ", cmd.description] })] }, cmd.command))) })) : null, _jsxs(Box, { borderStyle: "round", borderColor: busy ? "yellow" : "magenta", paddingX: 1, children: [_jsx(Text, { color: busy ? "yellow" : "magenta", children: "❯ " }), value.length === 0 ? (_jsx(Text, { dimColor: true, children: placeholder })) : (_jsxs(Text, { children: [before, _jsx(Text, { inverse: true, children: at }), after] }))] })] }));
121
- }
122
- //# sourceMappingURL=Composer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../../src/tui/components/Composer.tsx"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export interface HeaderProps {
2
- version: string;
3
- provider: string;
4
- model: string;
5
- mode: string;
6
- }
7
- export declare function Header({ version, provider, model, mode }: HeaderProps): import("react").JSX.Element;
@@ -1,6 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- export function Header({ version, provider, model, mode }) {
4
- return (_jsxs(Box, { borderStyle: "round", borderColor: "magenta", paddingX: 1, flexDirection: "row", justifyContent: "space-between", children: [_jsxs(Text, { children: [_jsx(Text, { color: "magenta", children: "\u25CF" }), " ", _jsx(Text, { bold: true, children: "clai" }), " ", _jsxs(Text, { dimColor: true, children: ["v", version] })] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: "mode " }), _jsx(Text, { color: "yellow", children: mode }), _jsx(Text, { dimColor: true, children: " \u00B7 " }), _jsx(Text, { color: "green", children: provider }), _jsx(Text, { dimColor: true, children: " / " }), _jsx(Text, { color: "cyan", children: model })] })] }));
5
- }
6
- //# sourceMappingURL=Header.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/tui/components/Header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAShC,MAAM,UAAU,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAe;IACpE,OAAO,CACL,MAAC,GAAG,IACF,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,SAAS,EACrB,QAAQ,EAAE,CAAC,EACX,aAAa,EAAC,KAAK,EACnB,cAAc,EAAC,eAAe,aAE9B,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,SAAS,uBAAS,OAAC,KAAC,IAAI,IAAC,IAAI,2BAAY,EAAC,GAAG,EACzD,MAAC,IAAI,IAAC,QAAQ,wBAAG,OAAO,IAAQ,IAC3B,EACP,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,QAAQ,4BAAa,EAC3B,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,IAAI,GAAQ,EAClC,KAAC,IAAI,IAAC,QAAQ,iCAAa,EAC3B,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,YAAE,QAAQ,GAAQ,EACrC,KAAC,IAAI,IAAC,QAAQ,0BAAW,EACzB,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,YAAE,KAAK,GAAQ,IAC5B,IACH,CACP,CAAC;AACJ,CAAC"}
@@ -1,7 +0,0 @@
1
- import type { TurnStatus } from "../state.js";
2
- export interface StatusLineProps {
3
- status: TurnStatus;
4
- thinkingPreview: string;
5
- queued: number;
6
- }
7
- export declare function StatusLine({ status, thinkingPreview, queued }: StatusLineProps): import("react").JSX.Element;
@@ -1,25 +0,0 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { useEffect, useState } from "react";
4
- import { useSpinner } from "../hooks/useSpinner.js";
5
- function useElapsed(startedAt) {
6
- const [now, setNow] = useState(Date.now());
7
- useEffect(() => {
8
- if (startedAt === undefined)
9
- return;
10
- const timer = setInterval(() => setNow(Date.now()), 250);
11
- return () => clearInterval(timer);
12
- }, [startedAt]);
13
- if (startedAt === undefined)
14
- return 0;
15
- return Math.max(0, Math.floor((now - startedAt) / 1000));
16
- }
17
- export function StatusLine({ status, thinkingPreview, queued }) {
18
- const spinner = useSpinner(status.running);
19
- const elapsed = useElapsed(status.running ? status.startedAt : undefined);
20
- if (!status.running) {
21
- return (_jsx(Box, { children: _jsxs(Text, { dimColor: true, children: [" ", "ready", queued > 0 ? ` · ${queued} queued` : ""] }) }));
22
- }
23
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsxs(Text, { color: "magenta", children: [" ", spinner, " "] }), _jsx(Text, { color: "yellow", children: status.activity || "working" }), status.step > 0 ? _jsx(Text, { dimColor: true, children: ` · step ${status.step}` }) : null, _jsx(Text, { dimColor: true, children: ` · ${elapsed}s` }), queued > 0 ? _jsx(Text, { dimColor: true, children: ` · ${queued} queued` }) : null, _jsx(Text, { dimColor: true, children: " · esc to cancel" })] }), thinkingPreview ? (_jsxs(Text, { dimColor: true, italic: true, children: [" ", thinkingPreview.slice(-120)] })) : null] }));
24
- }
25
- //# sourceMappingURL=StatusLine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StatusLine.js","sourceRoot":"","sources":["../../../src/tui/components/StatusLine.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQpD,SAAS,UAAU,CAAC,SAA6B;IAC/C,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO;QACpC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAChB,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAmB;IAC7E,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1E,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CACL,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,QAAQ,mBACX,IAAI,WAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,SAAS,CAAC,CAAC,CAAC,EAAE,IAChD,GACH,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,eACF,MAAC,IAAI,IAAC,KAAK,EAAC,SAAS,aAClB,IAAI,EACJ,OAAO,EAAE,GAAG,IACR,EACP,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,MAAM,CAAC,QAAQ,IAAI,SAAS,GAAQ,EACzD,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,aAAa,MAAM,CAAC,IAAI,EAAE,GAAQ,CAAC,CAAC,CAAC,IAAI,EAC5E,KAAC,IAAI,IAAC,QAAQ,kBAAE,QAAQ,OAAO,GAAG,GAAQ,EACzC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,QAAQ,kBAAE,QAAQ,MAAM,SAAS,GAAQ,CAAC,CAAC,CAAC,IAAI,EACpE,KAAC,IAAI,IAAC,QAAQ,kBAAE,oBAAoB,GAAQ,IACxC,EACL,eAAe,CAAC,CAAC,CAAC,CACjB,MAAC,IAAI,IAAC,QAAQ,QAAC,MAAM,mBAClB,MAAM,EACN,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IACvB,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { TranscriptItem } from "../state.js";
2
- export declare function ItemView({ item, thinkingExpanded, }: {
3
- item: TranscriptItem;
4
- thinkingExpanded: boolean;
5
- }): import("react").JSX.Element;
@@ -1,57 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Text } from "ink";
3
- import { renderMarkdown } from "../../ui/markdown.js";
4
- import { renderPlanChecklist } from "../../ui/plan-pane.js";
5
- const TOOL_PREVIEW_LINES = 12;
6
- function UserMessage({ item }) {
7
- return (_jsxs(Box, { marginTop: 1, flexDirection: "row", children: [_jsx(Text, { color: "magenta", children: "❯ " }), _jsx(Text, { children: item.text })] }));
8
- }
9
- function AssistantMessage({ item }) {
10
- const rendered = renderMarkdown(item.text).replace(/\n+$/, "");
11
- return (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { children: rendered }), item.streaming ? _jsx(Text, { color: "magenta", children: "\u258C" }) : null] }));
12
- }
13
- function ThinkingBlock({ item, expanded, }) {
14
- const lines = item.content.trim().split(/\r?\n/);
15
- const preview = expanded ? lines : lines.slice(0, 1);
16
- return (_jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Text, { dimColor: true, italic: true, children: [" ✦ thinking", expanded ? "" : lines.length > 1 ? ` (${lines.length} lines · Ctrl+T)` : ""] }), preview.map((line, i) => (_jsxs(Text, { dimColor: true, children: [" ", line] }, i)))] }));
17
- }
18
- const STATUS_GLYPH = {
19
- running: { glyph: "●", color: "yellow" },
20
- ok: { glyph: "✓", color: "green" },
21
- fail: { glyph: "✗", color: "red" },
22
- blocked: { glyph: "⊘", color: "red" },
23
- };
24
- function ToolCard({ item }) {
25
- const status = STATUS_GLYPH[item.status];
26
- const outputLines = item.output ? item.output.replace(/\n+$/, "").split("\n") : [];
27
- const showLines = item.status === "running"
28
- ? outputLines.slice(-TOOL_PREVIEW_LINES)
29
- : outputLines.slice(0, TOOL_PREVIEW_LINES);
30
- const hidden = outputLines.length - showLines.length;
31
- return (_jsxs(Box, { marginTop: 1, flexDirection: "column", borderStyle: "round", borderColor: status.color, paddingX: 1, children: [_jsxs(Text, { children: [_jsxs(Text, { color: status.color, children: [status.glyph, " "] }), _jsx(Text, { bold: true, color: "cyan", children: item.name }), item.argsDisplay ? _jsxs(Text, { dimColor: true, children: [" ", item.argsDisplay] }) : null, typeof item.exitCode === "number" && item.exitCode !== 0 ? (_jsxs(Text, { color: "red", children: [" (exit ", item.exitCode, ")"] })) : null] }), item.status === "blocked" && item.summary ? (_jsxs(Text, { color: "red", children: [" blocked: ", item.summary] })) : null, showLines.length > 0 ? (_jsxs(Box, { flexDirection: "column", marginTop: hidden > 0 ? 0 : 0, children: [hidden > 0 && item.status !== "running" ? (_jsx(Text, { dimColor: true, children: ` … ${hidden} more line(s)` })) : null, showLines.map((line, i) => (_jsxs(Text, { dimColor: true, children: [" ", line] }, i)))] })) : null] }));
32
- }
33
- function Notice({ item }) {
34
- const color = item.level === "warn" ? "yellow" : "gray";
35
- const glyph = item.level === "warn" ? "⚠" : "ℹ";
36
- return (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: color, dimColor: item.level === "info", children: [" ", glyph, " ", item.text] }) }));
37
- }
38
- function PlanCard({ item }) {
39
- return (_jsx(Box, { marginTop: 1, flexDirection: "column", children: _jsx(Text, { children: renderPlanChecklist(item.plan) }) }));
40
- }
41
- export function ItemView({ item, thinkingExpanded, }) {
42
- switch (item.kind) {
43
- case "user":
44
- return _jsx(UserMessage, { item: item });
45
- case "assistant":
46
- return _jsx(AssistantMessage, { item: item });
47
- case "thinking":
48
- return _jsx(ThinkingBlock, { item: item, expanded: thinkingExpanded });
49
- case "tool":
50
- return _jsx(ToolCard, { item: item });
51
- case "notice":
52
- return _jsx(Notice, { item: item });
53
- case "plan":
54
- return _jsx(PlanCard, { item: item });
55
- }
56
- }
57
- //# sourceMappingURL=items.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"items.js","sourceRoot":"","sources":["../../../src/tui/components/items.tsx"],"names":[],"mappings":"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"}