@xenosystem/agent-conversation 0.1.108 → 0.1.110

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 (35) hide show
  1. package/dist/components/agent/AgentView.d.ts.map +1 -1
  2. package/dist/components/agent/AgentView.js +78 -3
  3. package/dist/components/agent/AgentView.js.map +1 -1
  4. package/dist/components/agent/composer/Composer.d.ts +1 -1
  5. package/dist/components/agent/composer/PermissionPanel.d.ts +16 -0
  6. package/dist/components/agent/composer/PermissionPanel.d.ts.map +1 -0
  7. package/dist/components/agent/composer/PermissionPanel.js +69 -0
  8. package/dist/components/agent/composer/PermissionPanel.js.map +1 -0
  9. package/dist/components/agent/composer/QuestionPanel.d.ts +29 -0
  10. package/dist/components/agent/composer/QuestionPanel.d.ts.map +1 -0
  11. package/dist/components/agent/composer/QuestionPanel.js +168 -0
  12. package/dist/components/agent/composer/QuestionPanel.js.map +1 -0
  13. package/dist/components/agent/composer/QueuePanel.d.ts +21 -0
  14. package/dist/components/agent/composer/QueuePanel.d.ts.map +1 -0
  15. package/dist/components/agent/composer/QueuePanel.js +169 -0
  16. package/dist/components/agent/composer/QueuePanel.js.map +1 -0
  17. package/dist/components/agent/transcript/Transcript.d.ts.map +1 -1
  18. package/dist/components/agent/transcript/Transcript.js +26 -9
  19. package/dist/components/agent/transcript/Transcript.js.map +1 -1
  20. package/dist/components/agent/transcript/stepModel.d.ts.map +1 -1
  21. package/dist/components/agent/transcript/stepModel.js +26 -23
  22. package/dist/components/agent/transcript/stepModel.js.map +1 -1
  23. package/dist/components/agent/transcript/turnModel.d.ts.map +1 -1
  24. package/dist/components/agent/transcript/turnModel.js +1 -0
  25. package/dist/components/agent/transcript/turnModel.js.map +1 -1
  26. package/dist/stores/agentChatStore.d.ts +14 -0
  27. package/dist/stores/agentChatStore.d.ts.map +1 -1
  28. package/dist/stores/agentChatStore.js +68 -4
  29. package/dist/stores/agentChatStore.js.map +1 -1
  30. package/package.json +5 -5
  31. package/src/composer.css +12 -4
  32. package/src/question.css +245 -0
  33. package/src/queue.css +123 -0
  34. package/src/styles.css +2 -0
  35. package/src/transcript.css +93 -4
@@ -151,7 +151,7 @@ export declare function useFoldPick(open: boolean, options: {
151
151
  * element mounted and hidden so it can RISE in and SINK out; unmounting it makes it blink away,
152
152
  * and `.xa-sink` in the stylesheet had nothing to set it.
153
153
  */
154
- export declare function usePresence(present: boolean): "hidden" | "shown" | "rise" | "sink";
154
+ export declare function usePresence(present: boolean): "shown" | "hidden" | "rise" | "sink";
155
155
  export declare function PermChip({ value, open, onToggle, onPick, disabled, present }: {
156
156
  value: PermPosture;
157
157
  open: boolean;
@@ -0,0 +1,16 @@
1
+ import type { StepAsk } from '../transcript/stepModel.js';
2
+ export declare function PermissionPanel({ ask, onAllow, onAllowAlways, onDeny, onDenyAlways, canAnswer, busy }: {
3
+ ask: StepAsk;
4
+ onAllow: () => void;
5
+ onAllowAlways?: () => void;
6
+ onDeny: () => void;
7
+ onDenyAlways?: () => void;
8
+ /** False on a surface that cannot answer the agent; the buttons say why instead of doing nothing. */
9
+ canAnswer?: boolean;
10
+ busy?: boolean;
11
+ }): import("react").JSX.Element;
12
+ /** The permission as the transcript keeps it: one line — what was asked, and the answer. */
13
+ export declare function PermissionRecord({ ask }: {
14
+ ask: StepAsk;
15
+ }): import("react").JSX.Element;
16
+ //# sourceMappingURL=PermissionPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PermissionPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/agent/composer/PermissionPanel.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AASzD,wBAAgB,eAAe,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,SAAgB,EAAE,IAAY,EAAE,EAAE;IACrH,GAAG,EAAE,OAAO,CAAA;IACZ,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAA;IAC1B,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,qGAAqG;IACrG,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf,+BA0DA;AAED,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,+BAWzD"}
@@ -0,0 +1,69 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * A permission the agent is waiting on, docked on the composer — the same slot and the same card as the agent's
4
+ * question (QuestionPanel), so everything that needs the person's answer is in one place: right above the box.
5
+ * Owner, 2026-10-16. The words come from the step model (`deriveStepRow` → `StepAsk`), so the card says exactly
6
+ * what the transcript's record says.
7
+ *
8
+ * The answer is a choice between three things, said plainly: allow it this once, refuse it, or remember the
9
+ * answer. Remembering is offered only when the agent supplied a rule to remember (ACP's allow-/reject-always
10
+ * options, or a folder grant). Keys belong to the panel: ↵ allows, Ctrl+. refuses, A / R remember, Esc folds.
11
+ */
12
+ import { useEffect, useRef, useState } from 'react';
13
+ import { glyphDeclaration } from '../transcript/glyphs.js';
14
+ import { XenoElement } from '@xenosystem/elements-react';
15
+ // the transcript's glyph, at the panel's size (Transcript.tsx `Glyph` — not imported, the transcript imports this file)
16
+ const Glyph = ({ name }) => _jsx(XenoElement, { decl: glyphDeclaration(name), size: 14, strokeWidth: 2.25, "aria-hidden": "true" });
17
+ const Chevron = () => _jsx("svg", { "aria-hidden": "true", width: "14", height: "14", viewBox: "0 0 14 14", children: _jsx("path", { d: "M3.5 5.25 7 8.75l3.5-3.5", fill: "none", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "square" }) });
18
+ export function PermissionPanel({ ask, onAllow, onAllowAlways, onDeny, onDenyAlways, canAnswer = true, busy = false }) {
19
+ const [folded, setFolded] = useState(false);
20
+ const panelRef = useRef(null);
21
+ const id = ask.permission?.permissionId ?? ask.title;
22
+ useEffect(() => { setFolded(false); }, [id]);
23
+ useEffect(() => { if (!folded)
24
+ panelRef.current?.focus({ preventScroll: true }); }, [folded, id]);
25
+ const glyph = ask.kind === 'grant' ? (ask.subject === 'app' ? 'app-window' : ask.subject === 'folder' ? 'folder' : 'lock') : ask.kind === 'approve' ? 'terminal' : 'lock';
26
+ const disabled = busy || !canAnswer;
27
+ const why = canAnswer ? undefined : 'This surface cannot answer the agent';
28
+ const onKeyDown = (event) => {
29
+ if (event.key === 'Escape') {
30
+ event.preventDefault();
31
+ event.stopPropagation();
32
+ setFolded(true);
33
+ return;
34
+ }
35
+ if (disabled)
36
+ return;
37
+ if ((event.ctrlKey || event.metaKey) && event.key === '.') {
38
+ event.preventDefault();
39
+ onDeny();
40
+ return;
41
+ }
42
+ if (event.ctrlKey || event.metaKey || event.altKey)
43
+ return;
44
+ if (event.key === 'Enter' && event.target.tagName !== 'BUTTON') {
45
+ event.preventDefault();
46
+ onAllow();
47
+ return;
48
+ }
49
+ if (event.key.toLowerCase() === 'a' && onAllowAlways) {
50
+ event.preventDefault();
51
+ onAllowAlways();
52
+ return;
53
+ }
54
+ if (event.key.toLowerCase() === 'r' && onDenyAlways) {
55
+ event.preventDefault();
56
+ onDenyAlways();
57
+ }
58
+ };
59
+ if (folded) {
60
+ return (_jsx("div", { className: "xa-q xa-perm", "data-agent-permission": "", "data-folded": "true", children: _jsxs("button", { type: "button", className: "xa-q-bar", onClick: () => setFolded(false), "aria-expanded": "false", children: [_jsx("span", { className: "xa-q-sq", "aria-hidden": "true" }), _jsx("b", { children: "Needs your OK" }), _jsx("span", { className: "xa-q-bar-q", children: ask.title }), _jsx("span", { className: "xa-q-bar-open", children: "Review" })] }) }));
61
+ }
62
+ return (_jsxs("div", { ref: panelRef, className: "xa-q xa-perm", "data-agent-permission": "", tabIndex: -1, role: "group", "aria-label": ask.title, onKeyDown: onKeyDown, children: [_jsxs("div", { className: "xa-q-head", children: [_jsx("span", { className: "xa-q-mark xa-perm-ic", "aria-hidden": "true", children: _jsx(Glyph, { name: glyph }) }), _jsxs("div", { className: "xa-q-text", children: [ask.title, _jsxs("small", { children: [ask.what, ask.whatScope ? ` · ${ask.whatScope}` : '', ask.scope ? ` · ${ask.scope}` : ''] })] }), _jsx("button", { type: "button", className: "xa-q-fold", onClick: () => setFolded(true), "aria-label": "Fold away", title: "Fold away (Esc)", children: _jsx(Chevron, {}) })] }), ask.body && (ask.bodyMono ? _jsx("pre", { className: "xa-perm-body xa-mono", children: ask.body }) : _jsx("div", { className: "xa-perm-note", children: ask.body })), _jsxs("div", { className: "xa-q-foot", children: [(onAllowAlways || onDenyAlways) && (_jsxs("span", { className: "xa-perm-always", children: [onAllowAlways && _jsxs("button", { type: "button", className: "xa-q-addwhy", onClick: onAllowAlways, disabled: disabled, title: why, children: [_jsx("kbd", { children: "A" }), "Always allow"] }), onDenyAlways && _jsxs("button", { type: "button", className: "xa-q-addwhy", onClick: onDenyAlways, disabled: disabled, title: why, children: [_jsx("kbd", { children: "R" }), "Always refuse"] })] })), _jsxs("span", { className: "xa-q-keys", children: [_jsx("kbd", { children: "Enter" }), " ", ask.mainLabel.toLowerCase(), " \u00B7 ", _jsx("kbd", { children: "Ctrl" }), _jsx("kbd", { children: "." }), " refuse"] }), _jsx("button", { type: "button", className: "xa-q-btn", "data-variant": "ghost", onClick: onDeny, disabled: disabled, title: why, children: "Refuse" }), _jsx("button", { type: "button", className: "xa-q-btn", "data-variant": "primary", onClick: onAllow, disabled: disabled, title: why, children: ask.mainLabel })] })] }));
63
+ }
64
+ /** The permission as the transcript keeps it: one line — what was asked, and the answer. */
65
+ export function PermissionRecord({ ask }) {
66
+ const answer = ask.status === 'pending' ? 'Waiting for your OK' : ask.status === 'yes' ? 'Allowed' : ask.status === 'no' ? 'Refused' : 'Cancelled';
67
+ return (_jsx("div", { className: "xa-q-rec", "data-open": "false", "data-pending": ask.status === 'pending' ? 'true' : undefined, "data-tone": ask.status, "data-agent-permission-record": "", children: _jsxs("div", { className: "xa-q-rec-line", children: [_jsx("span", { className: "xa-q-sq", "aria-hidden": "true" }), _jsx("span", { className: "xa-q-rec-q", children: ask.title }), _jsx("span", { className: "xa-q-rec-a", children: answer })] }) }));
68
+ }
69
+ //# sourceMappingURL=PermissionPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PermissionPanel.js","sourceRoot":"","sources":["../../../../src/components/agent/composer/PermissionPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { AskUserRequestInfo } from '../../../stores/agentChatStore.js';
2
+ export declare const optionLetter: (index: number) => string;
3
+ /**
4
+ * The answer an option choice becomes: one line per chosen option, lettered as the panel showed it, then the
5
+ * reason on its own line — the platform chat's form, so a model reads the same answer from either surface.
6
+ */
7
+ export declare function formatAnswer(options: readonly string[], picked: readonly number[], reason?: string): string;
8
+ /** Which options an answer chose: exact `<letter>. <option>` lines only, so a typed reply never reads as a pick. */
9
+ export declare function readPicked(options: readonly string[], answer: string | undefined, selectedOption?: string): number[];
10
+ export declare function QuestionPanel({ ask, multiple, onAnswer, onSkip, busy, error }: {
11
+ ask: AskUserRequestInfo;
12
+ /** "Select all that apply" — when the agent asked for several. */
13
+ multiple?: boolean;
14
+ /** Send the answer text; `selectedOption` names the single option when exactly one was chosen. */
15
+ onAnswer: (answer: string, selectedOption?: string) => void;
16
+ onSkip: () => void;
17
+ busy?: boolean;
18
+ error?: string | null;
19
+ }): import("react").JSX.Element;
20
+ /** The question as the transcript keeps it: one line — the question and the answer — that expands on click. */
21
+ export declare function QuestionRecord({ ask }: {
22
+ ask: AskUserRequestInfo;
23
+ }): import("react").JSX.Element;
24
+ /** What an answered question chose, as a step's opened detail: the options as rows, the picked ones marked. */
25
+ export declare function questionAnswerText(ask: AskUserRequestInfo): string;
26
+ export declare function QuestionDetail({ ask }: {
27
+ ask: AskUserRequestInfo;
28
+ }): import("react").JSX.Element;
29
+ //# sourceMappingURL=QuestionPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuestionPanel.d.ts","sourceRoot":"","sources":["../../../../src/components/agent/composer/QuestionPanel.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAE3E,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAAyC,CAAA;AAEtF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,SAAK,GAAG,MAAM,CAOvG;AAED,oHAAoH;AACpH,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAWpH;AAKD,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,QAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAY,EAAE,KAAK,EAAE,EAAE;IAC9F,GAAG,EAAE,kBAAkB,CAAA;IACvB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kGAAkG;IAClG,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3D,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,+BAiHA;AAED,+GAA+G;AAC/G,wBAAgB,cAAc,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,kBAAkB,CAAA;CAAE,+BAoClE;AAED,+GAA+G;AAC/G,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAOlE;AAED,wBAAgB,cAAc,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,EAAE,kBAAkB,CAAA;CAAE,+BAoBlE"}
@@ -0,0 +1,168 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * The agent's question, docked on the composer — the card above the input while the agent waits for an
4
+ * answer, the way the XENO platform chat asks (xeno-platform `ChatQuestionPanel`, approved there 2026-10-02).
5
+ * Owner, 2026-10-16: the Agent interface asks the same way.
6
+ *
7
+ * It replaces the inline "Wants to know" card for a PENDING question; the transcript keeps a one-line
8
+ * record (`QuestionRecord`) that expands to show the options and the choice. Permission asks (grant,
9
+ * approve, plan) stay where they are: they are about the step they gate, in the rail.
10
+ *
11
+ * Keys belong to the PANEL (a listener on it, not on the document), so typing in the composer never picks
12
+ * an option: ↑/↓ move (single choice selects as it moves, the radio-group rule; select-all moves a highlight
13
+ * and Space toggles), A–F / 1–6 jump, Enter sends, Esc folds — it never skips.
14
+ */
15
+ import { useEffect, useRef, useState } from 'react';
16
+ export const optionLetter = (index) => String.fromCharCode(65 + index);
17
+ /**
18
+ * The answer an option choice becomes: one line per chosen option, lettered as the panel showed it, then the
19
+ * reason on its own line — the platform chat's form, so a model reads the same answer from either surface.
20
+ */
21
+ export function formatAnswer(options, picked, reason = '') {
22
+ const lines = [...new Set(picked)]
23
+ .filter((i) => Number.isInteger(i) && i >= 0 && i < options.length)
24
+ .sort((a, b) => a - b)
25
+ .map((i) => `${optionLetter(i)}. ${options[i]}`);
26
+ const why = reason.replace(/\s+/g, ' ').trim();
27
+ return why ? `${lines.join('\n')}\n\nWhy: ${why}` : lines.join('\n');
28
+ }
29
+ /** Which options an answer chose: exact `<letter>. <option>` lines only, so a typed reply never reads as a pick. */
30
+ export function readPicked(options, answer, selectedOption) {
31
+ if (selectedOption) {
32
+ const i = options.indexOf(selectedOption);
33
+ if (i >= 0)
34
+ return [i];
35
+ }
36
+ const out = [];
37
+ for (const line of String(answer ?? '').split('\n')) {
38
+ const m = /^([A-F])\. (.*)$/.exec(line.trim());
39
+ if (!m)
40
+ continue;
41
+ const i = m[1].charCodeAt(0) - 65;
42
+ if (options[i] === m[2])
43
+ out.push(i);
44
+ }
45
+ if (!out.length) {
46
+ const i = options.indexOf(String(answer ?? '').trim());
47
+ if (i >= 0)
48
+ out.push(i);
49
+ }
50
+ return out;
51
+ }
52
+ const Chevron = () => _jsx("svg", { "aria-hidden": "true", width: "14", height: "14", viewBox: "0 0 14 14", children: _jsx("path", { d: "M3.5 5.25 7 8.75l3.5-3.5", fill: "none", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "square" }) });
53
+ const Plus = () => _jsx("svg", { "aria-hidden": "true", width: "13", height: "13", viewBox: "0 0 13 13", children: _jsx("path", { d: "M6.5 2.5v8M2.5 6.5h8", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "square" }) });
54
+ export function QuestionPanel({ ask, multiple = false, onAnswer, onSkip, busy = false, error }) {
55
+ const options = ask.options ?? [];
56
+ const [picked, setPicked] = useState([]);
57
+ const [active, setActive] = useState(-1);
58
+ const [folded, setFolded] = useState(false);
59
+ const [showWhy, setShowWhy] = useState(false);
60
+ const [reason, setReason] = useState('');
61
+ const [draft, setDraft] = useState('');
62
+ const panelRef = useRef(null);
63
+ const whyRef = useRef(null);
64
+ const listRef = useRef(null);
65
+ const free = options.length === 0;
66
+ // A new question starts clean and takes focus, so its keys work without a click.
67
+ useEffect(() => { setPicked([]); setActive(-1); setFolded(false); setShowWhy(false); setReason(''); setDraft(''); }, [ask.askUserId]);
68
+ useEffect(() => { if (!folded)
69
+ panelRef.current?.focus({ preventScroll: true }); }, [folded, ask.askUserId]);
70
+ useEffect(() => { if (showWhy)
71
+ whyRef.current?.focus(); }, [showWhy]);
72
+ const toggle = (index) => setPicked((prev) => (multiple ? (prev.includes(index) ? prev.filter((i) => i !== index) : [...prev, index].sort((a, b) => a - b)) : [index]));
73
+ const moveTo = (index) => {
74
+ setActive(index);
75
+ if (!multiple)
76
+ setPicked([index]);
77
+ listRef.current?.querySelector(`[data-index="${index}"]`)?.scrollIntoView({ block: 'nearest' });
78
+ };
79
+ const canSend = free ? !!draft.trim() : picked.length > 0;
80
+ const submit = () => {
81
+ if (busy || !canSend)
82
+ return;
83
+ if (free) {
84
+ onAnswer(draft.trim());
85
+ return;
86
+ }
87
+ onAnswer(formatAnswer(options, picked, reason), picked.length === 1 && !reason.trim() ? options[picked[0]] : undefined);
88
+ };
89
+ const onKeyDown = (event) => {
90
+ const target = event.target;
91
+ if (event.key === 'Escape') {
92
+ event.preventDefault();
93
+ event.stopPropagation();
94
+ setFolded(true);
95
+ return;
96
+ }
97
+ if (target === whyRef.current || target.tagName === 'INPUT') {
98
+ if (event.key === 'Enter' && !event.shiftKey) {
99
+ event.preventDefault();
100
+ submit();
101
+ }
102
+ return;
103
+ }
104
+ const n = options.length;
105
+ if (n && (event.key === 'ArrowDown' || event.key === 'ArrowUp' || event.key === 'Home' || event.key === 'End')) {
106
+ event.preventDefault();
107
+ const from = active >= 0 ? active : (picked.length ? picked[picked.length - 1] : -1);
108
+ moveTo(event.key === 'Home' ? 0 : event.key === 'End' ? n - 1 : event.key === 'ArrowDown' ? (from + 1 + n) % n : (from <= 0 ? n - 1 : from - 1));
109
+ return;
110
+ }
111
+ if (event.key === ' ' && multiple && active >= 0 && target.tagName !== 'BUTTON') {
112
+ event.preventDefault();
113
+ toggle(active);
114
+ return;
115
+ }
116
+ if (event.ctrlKey || event.metaKey || event.altKey)
117
+ return;
118
+ const key = event.key.toLowerCase();
119
+ const letter = 'abcdef'.indexOf(key), digit = '123456'.indexOf(key);
120
+ const index = letter !== -1 ? letter : digit;
121
+ if (index !== -1 && index < n) {
122
+ event.preventDefault();
123
+ setActive(index);
124
+ toggle(index);
125
+ return;
126
+ }
127
+ if (event.key === 'Enter' && target === panelRef.current) {
128
+ event.preventDefault();
129
+ submit();
130
+ }
131
+ };
132
+ if (folded) {
133
+ return (_jsx("div", { className: "xa-q", "data-agent-question": "", "data-folded": "true", children: _jsxs("button", { type: "button", className: "xa-q-bar", onClick: () => setFolded(false), "aria-expanded": "false", children: [_jsx("span", { className: "xa-q-sq", "aria-hidden": "true" }), _jsx("b", { children: "Question" }), _jsx("span", { className: "xa-q-bar-q", children: ask.question }), _jsx("span", { className: "xa-q-bar-open", children: "Answer" })] }) }));
134
+ }
135
+ const labelId = `xa-q-${ask.askUserId}`;
136
+ return (_jsxs("div", { ref: panelRef, className: "xa-q", "data-agent-question": "", tabIndex: -1, role: "group", "aria-labelledby": labelId, onKeyDown: onKeyDown, children: [_jsxs("div", { className: "xa-q-head", children: [_jsx("span", { className: "xa-q-mark", "aria-hidden": "true", children: _jsx("span", { className: "xa-q-sq" }) }), _jsxs("div", { className: "xa-q-text", id: labelId, children: [ask.question, multiple && _jsx("small", { children: "Select all that apply" }), ask.context && _jsx("small", { children: ask.context })] }), _jsx("button", { type: "button", className: "xa-q-fold", onClick: () => setFolded(true), "aria-label": "Fold the question away", title: "Fold away (Esc)", children: _jsx(Chevron, {}) })] }), free ? (_jsx("div", { className: "xa-q-why", children: _jsx("input", { value: draft, onChange: (event) => setDraft(event.target.value), "aria-label": "Your answer", placeholder: "Your answer", autoFocus: true }) })) : (_jsx("ul", { ref: listRef, className: "xa-q-list", role: multiple ? 'group' : 'radiogroup', "aria-labelledby": labelId, children: options.map((option, index) => (_jsx("li", { children: _jsxs("button", { type: "button", className: "xa-q-opt", role: multiple ? 'checkbox' : 'radio', "aria-checked": picked.includes(index), "data-active": active === index ? 'true' : undefined, "data-multi": multiple ? 'true' : undefined, "data-index": index, onClick: () => { setActive(index); toggle(index); }, children: [_jsx("span", { className: "xa-q-key", children: _jsx("span", { className: "xa-q-keyc", children: optionLetter(index) }) }), _jsx("span", { className: "xa-q-opt-text", children: option })] }) }, index))) })), error && _jsx("div", { className: "xa-q-error", role: "alert", children: error }), _jsxs("div", { className: "xa-q-foot", children: [!free && (showWhy
137
+ ? _jsxs("span", { className: "xa-q-whyslot", children: [_jsx("span", { className: "xa-q-whyplus", "aria-hidden": "true", children: _jsx(Plus, {}) }), _jsx("textarea", { ref: whyRef, rows: 1, className: "xa-q-whyin", value: reason, "aria-label": "Your reasoning", placeholder: "Why? The agent will use your reasoning", onChange: (event) => { setReason(event.target.value); const el = event.target; el.style.height = '28px'; el.style.height = `${Math.min(Math.max(el.scrollHeight + 2 > 30 ? el.scrollHeight + 2 : 28, 28), 96)}px`; }, onBlur: () => { if (!reason.trim())
138
+ setShowWhy(false); } })] })
139
+ : _jsxs("button", { type: "button", className: "xa-q-addwhy", onClick: () => setShowWhy(true), children: [_jsx(Plus, {}), "Add your reasoning"] })), _jsx("span", { className: "xa-q-keys", children: free ? _jsxs(_Fragment, { children: [_jsx("kbd", { children: "Enter" }), " send"] }) : _jsxs(_Fragment, { children: [_jsx("kbd", { children: "\u2191" }), _jsx("kbd", { children: "\u2193" }), " move", multiple ? _jsxs(_Fragment, { children: [" \u00B7 ", _jsx("kbd", { children: "Space" }), " toggle"] }) : null, " \u00B7 ", _jsx("kbd", { children: "Enter" }), " send"] }) }), _jsx("button", { type: "button", className: "xa-q-btn", "data-variant": "ghost", onClick: onSkip, disabled: busy, children: "Skip" }), _jsx("button", { type: "button", className: "xa-q-btn", "data-variant": "primary", onClick: submit, disabled: busy || !canSend, children: "Answer" })] })] }));
140
+ }
141
+ /** The question as the transcript keeps it: one line — the question and the answer — that expands on click. */
142
+ export function QuestionRecord({ ask }) {
143
+ const [open, setOpen] = useState(false);
144
+ const options = ask.options ?? [];
145
+ const picked = ask.status === 'answered' ? readPicked(options, ask.answer, ask.selectedOption) : [];
146
+ const why = /\n\nWhy: (.*)$/s.exec(ask.answer ?? '')?.[1];
147
+ const answer = ask.status === 'pending' ? 'Waiting for your answer'
148
+ : ask.status === 'cancelled' ? 'Skipped'
149
+ : picked.length ? picked.map((i) => `${optionLetter(i)}. ${options[i]}`).join(', ')
150
+ : (ask.answer ?? '').trim() || 'Answered';
151
+ return (_jsxs("div", { className: "xa-q-rec", "data-open": open ? 'true' : 'false', "data-pending": ask.status === 'pending' ? 'true' : undefined, "data-agent-question-record": "", children: [_jsxs("button", { type: "button", className: "xa-q-rec-line", "aria-expanded": open, onClick: () => setOpen((v) => !v), children: [_jsx("span", { className: "xa-q-sq", "aria-hidden": "true" }), _jsx("span", { className: "xa-q-rec-q", children: ask.question }), _jsx("span", { className: "xa-q-rec-a", children: answer }), _jsx("span", { className: "xa-q-rec-chev", children: _jsx(Chevron, {}) })] }), open && (_jsxs("div", { className: "xa-q-rec-body", children: [_jsx("div", { className: "xa-q-rec-qq", children: ask.question }), options.length > 0 && (_jsx("ol", { children: options.map((option, index) => (_jsxs("li", { "data-picked": picked.includes(index) ? 'true' : 'false', children: [_jsx("span", { className: "xa-q-key", children: _jsx("span", { className: "xa-q-keyc", children: optionLetter(index) }) }), _jsx("span", { children: option })] }, index))) })), !picked.length && ask.status === 'answered' && _jsx("div", { className: "xa-q-rec-why", children: (ask.answer ?? '').trim() }), why && _jsxs("div", { className: "xa-q-rec-why", children: [_jsx("span", { children: "Your reasoning:" }), " ", why] })] }))] }));
152
+ }
153
+ /** What an answered question chose, as a step's opened detail: the options as rows, the picked ones marked. */
154
+ export function questionAnswerText(ask) {
155
+ const options = ask.options ?? [];
156
+ const picked = ask.status === 'answered' ? readPicked(options, ask.answer, ask.selectedOption) : [];
157
+ return ask.status === 'pending' ? 'Waiting for your answer'
158
+ : ask.status === 'cancelled' ? 'Skipped'
159
+ : picked.length ? picked.map((i) => `${optionLetter(i)}. ${options[i]}`).join(', ')
160
+ : (ask.answer ?? '').trim() || 'Answered';
161
+ }
162
+ export function QuestionDetail({ ask }) {
163
+ const options = ask.options ?? [];
164
+ const picked = ask.status === 'answered' ? readPicked(options, ask.answer, ask.selectedOption) : [];
165
+ const why = /\n\nWhy: (.*)$/s.exec(ask.answer ?? '')?.[1];
166
+ return (_jsxs("div", { className: "xa-detail xa-q-rec-body", "data-agent-question-detail": "", children: [options.length > 0 && (_jsx("ol", { children: options.map((option, index) => (_jsxs("li", { "data-picked": picked.includes(index) ? 'true' : 'false', children: [_jsx("span", { className: "xa-q-key", children: _jsx("span", { className: "xa-q-keyc", children: optionLetter(index) }) }), _jsx("span", { children: option })] }, index))) })), !picked.length && ask.status === 'answered' && _jsx("div", { className: "xa-q-rec-why", children: (ask.answer ?? '').trim() }), why && _jsxs("div", { className: "xa-q-rec-why", children: [_jsx("span", { children: "Your reasoning:" }), " ", why] })] }));
167
+ }
168
+ //# sourceMappingURL=QuestionPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuestionPanel.js","sourceRoot":"","sources":["../../../../src/components/agent/composer/QuestionPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export declare const QUEUE_EDIT_GRACE_SECONDS = 15;
2
+ export interface QueueItem {
3
+ id: string;
4
+ content: string;
5
+ attachments?: {
6
+ id: string;
7
+ name: string;
8
+ }[];
9
+ }
10
+ export declare function QueuePanel({ items, waiting, onRemove, onMove, onSaveText, onRemoveAttachment, onHoldChange }: {
11
+ items: QueueItem[];
12
+ /** Why nothing is being sent right now. */
13
+ waiting: 'reply' | 'question' | 'ready';
14
+ onRemove: (id: string) => void;
15
+ onMove: (id: string, toIndex: number) => void;
16
+ onSaveText: (id: string, text: string) => void;
17
+ onRemoveAttachment?: (id: string, attachmentId: string) => void;
18
+ /** True while a message is being edited or the list rearranged. */
19
+ onHoldChange: (held: boolean) => void;
20
+ }): import("react").JSX.Element | null;
21
+ //# sourceMappingURL=QueuePanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueuePanel.d.ts","sourceRoot":"","sources":["../../../../src/components/agent/composer/QueuePanel.tsx"],"names":[],"mappings":"AAYA,eAAO,MAAM,wBAAwB,KAAK,CAAA;AAE1C,MAAM,WAAW,SAAS;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE;AAcxG,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,EAAE;IAC7G,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,2CAA2C;IAC3C,OAAO,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAA;IACvC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9C,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/D,mEAAmE;IACnE,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACtC,sCAsLA"}
@@ -0,0 +1,169 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * The queue — messages typed while the agent works, in a card above the composer, the way the XENO platform
4
+ * chat queues (xeno-platform `ChatQueue`, approved there 2026-09-30). Owner, 2026-10-16: the Agent interface
5
+ * queues the same way.
6
+ *
7
+ * Each message can be edited in place (Enter saves, Shift+Enter adds a line, Esc discards; leaving the box
8
+ * starts a short countdown, then the edit resets), dragged by its square to a new position, or removed. While
9
+ * a message is being edited or the list rearranged, the queue HOLDS (the store's `queueHeld`), so nothing is
10
+ * sent from under the person; it also waits while the agent's question is open.
11
+ */
12
+ import { useCallback, useEffect, useRef, useState } from 'react';
13
+ export const QUEUE_EDIT_GRACE_SECONDS = 15;
14
+ const Grip = () => (_jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: [_jsx("rect", { x: "7.8", y: "4.8", width: "2.4", height: "2.4" }), _jsx("rect", { x: "13.8", y: "4.8", width: "2.4", height: "2.4" }), _jsx("rect", { x: "7.8", y: "10.8", width: "2.4", height: "2.4" }), _jsx("rect", { x: "13.8", y: "10.8", width: "2.4", height: "2.4" }), _jsx("rect", { x: "7.8", y: "16.8", width: "2.4", height: "2.4" }), _jsx("rect", { x: "13.8", y: "16.8", width: "2.4", height: "2.4" })] }));
15
+ const Stack = () => _jsx("svg", { "aria-hidden": "true", width: "15", height: "15", viewBox: "0 0 16 16", children: _jsx("path", { d: "M2.5 5.5 8 3l5.5 2.5L8 8z M2.5 8.5 8 11l5.5-2.5 M2.5 11.5 8 14l5.5-2.5", fill: "none", stroke: "currentColor", strokeWidth: "1.2", strokeLinejoin: "round" }) });
16
+ const Chevron = () => _jsx("svg", { "aria-hidden": "true", width: "15", height: "15", viewBox: "0 0 14 14", children: _jsx("path", { d: "M3.5 5.25 7 8.75l3.5-3.5", fill: "none", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "square" }) });
17
+ const Pencil = () => _jsx("svg", { "aria-hidden": "true", width: "14", height: "14", viewBox: "0 0 16 16", children: _jsx("path", { d: "M10.5 3 13 5.5 6 12.5H3.5V10z", fill: "none", stroke: "currentColor", strokeWidth: "1.3", strokeLinejoin: "round" }) });
18
+ const Check = () => _jsx("svg", { "aria-hidden": "true", width: "14", height: "14", viewBox: "0 0 16 16", children: _jsx("path", { d: "M3.5 8.5 6.5 11.5 12.5 4.5", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "square" }) });
19
+ const Cross = ({ size = 14 }) => _jsx("svg", { "aria-hidden": "true", width: size, height: size, viewBox: "0 0 16 16", children: _jsx("path", { d: "M4 4l8 8M12 4l-8 8", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "square" }) });
20
+ export function QueuePanel({ items, waiting, onRemove, onMove, onSaveText, onRemoveAttachment, onHoldChange }) {
21
+ const [expanded, setExpanded] = useState(true);
22
+ const [editingId, setEditingId] = useState(null);
23
+ const [editText, setEditText] = useState('');
24
+ const [graceLeft, setGraceLeft] = useState(0);
25
+ const [dragging, setDragging] = useState(false);
26
+ const graceTimer = useRef(null);
27
+ const editBox = useRef(null);
28
+ const listRef = useRef(null);
29
+ const held = editingId !== null || dragging;
30
+ const holdRef = useRef(onHoldChange);
31
+ holdRef.current = onHoldChange;
32
+ useEffect(() => { holdRef.current(held); }, [held]);
33
+ useEffect(() => () => { if (graceTimer.current)
34
+ clearInterval(graceTimer.current); holdRef.current(false); }, []);
35
+ const clearGrace = () => { if (graceTimer.current) {
36
+ clearInterval(graceTimer.current);
37
+ graceTimer.current = null;
38
+ } setGraceLeft(0); };
39
+ const endEdit = () => { clearGrace(); setEditingId(null); setEditText(''); };
40
+ // A message that was sent (or removed) while being edited ends the edit.
41
+ useEffect(() => { if (editingId && !items.some((m) => m.id === editingId))
42
+ endEdit(); }, [items, editingId]); // eslint-disable-line react-hooks/exhaustive-deps
43
+ const autoGrow = (box) => { if (!box)
44
+ return; box.style.height = 'auto'; box.style.height = `${box.scrollHeight}px`; };
45
+ useEffect(() => {
46
+ if (!editingId)
47
+ return;
48
+ const box = editBox.current;
49
+ if (box) {
50
+ box.focus();
51
+ box.setSelectionRange(box.value.length, box.value.length);
52
+ autoGrow(box);
53
+ }
54
+ }, [editingId]);
55
+ const beginEdit = (id) => {
56
+ const it = items.find((m) => m.id === id);
57
+ if (!it)
58
+ return;
59
+ clearGrace();
60
+ setExpanded(true);
61
+ setEditingId(id);
62
+ setEditText(it.content);
63
+ };
64
+ const commitEdit = () => { if (editingId)
65
+ onSaveText(editingId, editText); endEdit(); };
66
+ const startGrace = () => {
67
+ if (!editingId || graceTimer.current)
68
+ return;
69
+ setGraceLeft(QUEUE_EDIT_GRACE_SECONDS);
70
+ graceTimer.current = setInterval(() => {
71
+ setGraceLeft((left) => { if (left <= 1) {
72
+ clearGrace();
73
+ setEditingId(null);
74
+ setEditText('');
75
+ return 0;
76
+ } return left - 1; });
77
+ }, 1000);
78
+ };
79
+ // Drag to reorder: the square is the handle. The lifted row follows the pointer; its neighbours shift to show
80
+ // where it will land; release commits ONE move.
81
+ const lift = useCallback((event, from) => {
82
+ if (editingId || items.length < 2)
83
+ return;
84
+ const list = listRef.current;
85
+ if (!list)
86
+ return;
87
+ event.preventDefault();
88
+ const rows = Array.from(list.querySelectorAll('[data-queue-item]'));
89
+ const rects = rows.map((r) => r.getBoundingClientRect());
90
+ const advance = rects.length > 1 ? rects[1].top - rects[0].top : rects[0].height;
91
+ const row = rows[from];
92
+ const startY = event.clientY;
93
+ let to = from;
94
+ setDragging(true);
95
+ row.dataset.lifted = 'true';
96
+ try {
97
+ event.currentTarget.setPointerCapture(event.pointerId);
98
+ }
99
+ catch { /* capture is a nicety */ }
100
+ const move = (ev) => {
101
+ const dy = ev.clientY - startY;
102
+ row.style.transform = `translateY(${dy}px) scale(1.015)`;
103
+ const center = rects[from].top + rects[from].height / 2 + dy;
104
+ let t = from;
105
+ rects.forEach((r, i) => {
106
+ if (i === from)
107
+ return;
108
+ const c = r.top + r.height / 2;
109
+ if (i > from && center > c)
110
+ t = Math.max(t, i);
111
+ if (i < from && center < c)
112
+ t = Math.min(t, i);
113
+ });
114
+ if (t !== to) {
115
+ to = t;
116
+ rows.forEach((r, i) => {
117
+ if (r === row)
118
+ return;
119
+ let shift = 0;
120
+ if (to > from && i > from && i <= to)
121
+ shift = -advance;
122
+ else if (to < from && i < from && i >= to)
123
+ shift = advance;
124
+ r.style.transform = shift ? `translateY(${shift}px)` : '';
125
+ });
126
+ }
127
+ };
128
+ const up = () => {
129
+ document.removeEventListener('pointermove', move);
130
+ document.removeEventListener('pointerup', up);
131
+ rows.forEach((r) => { r.style.transform = ''; delete r.dataset.lifted; });
132
+ setDragging(false);
133
+ if (to !== from)
134
+ onMove(items[from].id, to);
135
+ };
136
+ document.addEventListener('pointermove', move);
137
+ document.addEventListener('pointerup', up);
138
+ }, [editingId, items, onMove]);
139
+ if (items.length === 0)
140
+ return null;
141
+ const single = items.length === 1;
142
+ const grace = graceLeft > 0;
143
+ const note = grace ? 'Unsaved edit — save to keep it, or it resets'
144
+ : dragging ? 'Rearranging — release to resume'
145
+ : editingId ? 'Paused while you edit — sends when you’re done'
146
+ : waiting === 'question' ? 'Waiting for your answer to the question'
147
+ : !expanded ? (single ? items[0].content : `Next: ${items[0].content}`)
148
+ : waiting === 'reply' ? 'Sends automatically after this reply' : 'Sending next';
149
+ const count = grace ? `resets in ${graceLeft}s` : held ? 'held' : `1 of ${items.length}`;
150
+ return (_jsxs("div", { className: "xa-queue", "data-agent-queue": "", "data-expanded": expanded ? 'true' : 'false', "data-held": held ? 'true' : 'false', "data-grace": grace ? 'true' : 'false', children: [_jsxs("button", { type: "button", className: "xa-queue-bar", onClick: () => { endEdit(); setExpanded((v) => !v); }, "aria-expanded": expanded, "aria-label": expanded ? 'Collapse queued messages' : 'Expand queued messages', children: [_jsx("span", { className: "xa-queue-ico", children: _jsx(Stack, {}) }), !single && _jsxs(_Fragment, { children: [_jsx("span", { className: "xa-queue-title", children: "Queued" }), _jsx("span", { className: "xa-queue-vr", "aria-hidden": "true" })] }), held && _jsx("span", { className: "xa-queue-hold", "aria-hidden": "true", title: "Sending paused" }), _jsx("span", { className: "xa-queue-note", children: note }), (!single || held) && _jsx("span", { className: "xa-queue-count", children: count }), _jsx("span", { className: "xa-queue-chev", children: _jsx(Chevron, {}) })] }), _jsx("div", { className: "xa-queue-wrap", children: _jsx("div", { className: "xa-queue-inner", children: _jsx("ul", { className: "xa-queue-list", ref: listRef, "aria-label": "Queued messages", children: items.map((it, i) => {
151
+ const isNext = i === 0;
152
+ const isEditing = editingId === it.id;
153
+ const files = it.attachments ?? [];
154
+ return (_jsxs("li", { className: "xa-queue-item", "data-queue-item": "", "data-next": isNext ? 'true' : 'false', "data-editing": isEditing ? 'true' : undefined, children: [_jsxs("span", { className: "xa-queue-mark", "data-queue-handle": "", title: items.length > 1 ? 'Drag to reorder' : undefined, onPointerDown: (e) => lift(e, i), style: { touchAction: 'none' }, children: [_jsx("span", { className: "xa-queue-sq", "aria-hidden": "true" }), _jsx("span", { className: "xa-queue-grip", children: _jsx(Grip, {}) })] }), _jsx("span", { className: "xa-queue-main", children: isEditing ? (_jsxs(_Fragment, { children: [_jsx("textarea", { ref: editBox, className: "xa-queue-edit", rows: 1, value: editText, "aria-label": "Edit queued message", onChange: (e) => { setEditText(e.target.value); autoGrow(e.target); }, onFocus: clearGrace, onBlur: startGrace, onKeyDown: (e) => {
155
+ if (e.key === 'Enter' && !e.shiftKey) {
156
+ e.preventDefault();
157
+ commitEdit();
158
+ }
159
+ if (e.key === 'Escape') {
160
+ e.preventDefault();
161
+ e.stopPropagation();
162
+ endEdit();
163
+ }
164
+ } }), files.length > 0 && (_jsx("span", { className: "xa-queue-atts", children: files.map((f) => (_jsxs("span", { className: "xa-queue-att xa-edit", title: f.name, children: [_jsx("span", { children: f.name }), onRemoveAttachment && (_jsx("button", { type: "button", className: "xa-queue-att-x", "aria-label": `Remove ${f.name}`, onMouseDown: (e) => e.preventDefault(), onClick: () => onRemoveAttachment(it.id, f.id), children: _jsx(Cross, { size: 9 }) }))] }, f.id))) }))] })) : (_jsxs("span", { className: "xa-queue-text", "data-queue-text": "", role: "button", tabIndex: 0, title: "Click to edit", onClick: () => beginEdit(it.id), onKeyDown: (e) => { if (e.key === 'Enter')
165
+ beginEdit(it.id); }, children: [it.content, files.length > 0 && _jsx("span", { className: "xa-queue-att", title: files.map((f) => f.name).join(', '), children: _jsx("span", { children: files.length === 1 ? files[0].name : `${files.length} images` }) })] })) }), _jsxs("span", { className: "xa-queue-right", children: [_jsx("span", { className: "xa-queue-tag", children: !single && (isNext ? _jsx("span", { className: "xa-queue-next", children: "Next" }) : _jsx("span", { className: "xa-queue-n", children: i + 1 })) }), _jsxs("span", { className: "xa-queue-acts", children: [isEditing ? (_jsx("button", { type: "button", className: "xa-queue-b xa-save", "aria-label": "Save changes", title: "Save changes", onMouseDown: (e) => e.preventDefault(), onClick: commitEdit, children: _jsx(Check, {}) })) : (_jsx("button", { type: "button", className: "xa-queue-b", "aria-label": "Edit message", title: "Edit", onClick: () => beginEdit(it.id), children: _jsx(Pencil, {}) })), _jsx("button", { type: "button", className: "xa-queue-b xa-del", "aria-label": "Remove from queue", title: "Remove", onMouseDown: (e) => e.preventDefault(), onClick: () => { if (isEditing)
166
+ endEdit(); onRemove(it.id); }, children: _jsx(Cross, {}) })] })] })] }, it.id));
167
+ }) }) }) })] }));
168
+ }
169
+ //# sourceMappingURL=QueuePanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueuePanel.js","sourceRoot":"","sources":["../../../../src/components/agent/composer/QueuePanel.tsx"],"names":[],"mappings":"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"}