@iblai/iblai-js 2.44.0 → 2.45.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.
- package/dist/data-layer/playwright/edit-agent-category-helpers.d.ts +13 -0
- package/dist/data-layer/playwright/human-support-tab-helpers.d.ts +2 -2
- package/dist/data-layer/playwright/privacy-tab-helpers.d.ts +7 -4
- package/dist/data-layer/playwright/spend-limits-helpers.d.ts +7 -4
- package/dist/playwright/index.cjs +55 -15
- package/dist/playwright/index.cjs.map +1 -1
- package/dist/playwright/index.d.ts +16 -10
- package/dist/playwright/index.esm.js +55 -15
- package/dist/playwright/index.esm.js.map +1 -1
- package/dist/playwright/playwright/edit-agent-category-helpers.d.ts +13 -0
- package/dist/playwright/playwright/human-support-tab-helpers.d.ts +2 -2
- package/dist/playwright/playwright/privacy-tab-helpers.d.ts +7 -4
- package/dist/playwright/playwright/spend-limits-helpers.d.ts +7 -4
- package/dist/security/playwright/edit-agent-category-helpers.d.ts +13 -0
- package/dist/security/playwright/human-support-tab-helpers.d.ts +2 -2
- package/dist/security/playwright/privacy-tab-helpers.d.ts +7 -4
- package/dist/security/playwright/spend-limits-helpers.d.ts +7 -4
- package/dist/web-containers/playwright/edit-agent-category-helpers.d.ts +13 -0
- package/dist/web-containers/playwright/human-support-tab-helpers.d.ts +2 -2
- package/dist/web-containers/playwright/privacy-tab-helpers.d.ts +7 -4
- package/dist/web-containers/playwright/spend-limits-helpers.d.ts +7 -4
- package/dist/web-containers/source/admin/tabs/applications/applications-tab.js +5 -2
- package/dist/web-containers/source/admin/tabs/applications/applications-tab.js.map +1 -1
- package/dist/web-containers/source/applications/applications-tab.js +5 -2
- package/dist/web-containers/source/applications/applications-tab.js.map +1 -1
- package/dist/web-containers/source/applications-tab.js +5 -2
- package/dist/web-containers/source/applications-tab.js.map +1 -1
- package/dist/web-containers/source/approvals-mode-button.js +177 -0
- package/dist/web-containers/source/approvals-mode-button.js.map +1 -0
- package/dist/web-containers/source/chat/chat-host-context.js.map +1 -1
- package/dist/web-containers/source/chat/code-permission-card.js +39 -2
- package/dist/web-containers/source/chat/code-permission-card.js.map +1 -1
- package/dist/web-containers/source/chat-host-context.js.map +1 -1
- package/dist/web-containers/source/chat-input-form/approvals-mode-button.js +177 -0
- package/dist/web-containers/source/chat-input-form/approvals-mode-button.js.map +1 -0
- package/dist/web-containers/source/chat-input-form/composer-canvas-pill.js +30 -0
- package/dist/web-containers/source/chat-input-form/composer-canvas-pill.js.map +1 -0
- package/dist/web-containers/source/chat-input-form/composer-model-chip.js +23 -0
- package/dist/web-containers/source/chat-input-form/composer-model-chip.js.map +1 -0
- package/dist/web-containers/source/chat-input-form/composer-plus-menu.js +3 -3
- package/dist/web-containers/source/chat-input-form/composer-plus-menu.js.map +1 -1
- package/dist/web-containers/source/chat-input-form/composer-tool-row.js +91 -0
- package/dist/web-containers/source/chat-input-form/composer-tool-row.js.map +1 -0
- package/dist/web-containers/source/chat-input-form/cowork-control.js +7 -4
- package/dist/web-containers/source/chat-input-form/cowork-control.js.map +1 -1
- package/dist/web-containers/source/chat-input-form.js +8 -30
- package/dist/web-containers/source/chat-input-form.js.map +1 -1
- package/dist/web-containers/source/code-permission-card.js +39 -2
- package/dist/web-containers/source/code-permission-card.js.map +1 -1
- package/dist/web-containers/source/components/chat/chat-host-context.js.map +1 -1
- package/dist/web-containers/source/components/chat/code-permission-card.js +39 -2
- package/dist/web-containers/source/components/chat/code-permission-card.js.map +1 -1
- package/dist/web-containers/source/components/chat-input-form/approvals-mode-button.js +177 -0
- package/dist/web-containers/source/components/chat-input-form/approvals-mode-button.js.map +1 -0
- package/dist/web-containers/source/components/chat-input-form/composer-canvas-pill.js +30 -0
- package/dist/web-containers/source/components/chat-input-form/composer-canvas-pill.js.map +1 -0
- package/dist/web-containers/source/components/chat-input-form/composer-model-chip.js +23 -0
- package/dist/web-containers/source/components/chat-input-form/composer-model-chip.js.map +1 -0
- package/dist/web-containers/source/components/chat-input-form/composer-plus-menu.js +3 -3
- package/dist/web-containers/source/components/chat-input-form/composer-plus-menu.js.map +1 -1
- package/dist/web-containers/source/components/chat-input-form/composer-tool-row.js +91 -0
- package/dist/web-containers/source/components/chat-input-form/composer-tool-row.js.map +1 -0
- package/dist/web-containers/source/components/chat-input-form/cowork-control.js +7 -4
- package/dist/web-containers/source/components/chat-input-form/cowork-control.js.map +1 -1
- package/dist/web-containers/source/components/chat-input-form.js +8 -30
- package/dist/web-containers/source/components/chat-input-form.js.map +1 -1
- package/dist/web-containers/source/components/profile/admin/tabs/applications/applications-tab.js +5 -2
- package/dist/web-containers/source/components/profile/admin/tabs/applications/applications-tab.js.map +1 -1
- package/dist/web-containers/source/composer-canvas-pill.js +30 -0
- package/dist/web-containers/source/composer-canvas-pill.js.map +1 -0
- package/dist/web-containers/source/composer-model-chip.js +23 -0
- package/dist/web-containers/source/composer-model-chip.js.map +1 -0
- package/dist/web-containers/source/composer-plus-menu.js +3 -3
- package/dist/web-containers/source/composer-plus-menu.js.map +1 -1
- package/dist/web-containers/source/composer-tool-row.js +91 -0
- package/dist/web-containers/source/composer-tool-row.js.map +1 -0
- package/dist/web-containers/source/cowork-control.js +7 -4
- package/dist/web-containers/source/cowork-control.js.map +1 -1
- package/dist/web-containers/source/en.json.js +12 -1
- package/dist/web-containers/source/en.json.js.map +1 -1
- package/dist/web-containers/source/es.json.js +12 -1
- package/dist/web-containers/source/es.json.js.map +1 -1
- package/dist/web-containers/source/fr.json.js +12 -1
- package/dist/web-containers/source/fr.json.js.map +1 -1
- package/dist/web-containers/source/i18n/messages/en.json.js +12 -1
- package/dist/web-containers/source/i18n/messages/en.json.js.map +1 -1
- package/dist/web-containers/source/i18n/messages/es.json.js +12 -1
- package/dist/web-containers/source/i18n/messages/es.json.js.map +1 -1
- package/dist/web-containers/source/i18n/messages/fr.json.js +12 -1
- package/dist/web-containers/source/i18n/messages/fr.json.js.map +1 -1
- package/dist/web-containers/source/i18n/messages/zh.json.js +12 -1
- package/dist/web-containers/source/i18n/messages/zh.json.js.map +1 -1
- package/dist/web-containers/source/labels.js +23 -289
- package/dist/web-containers/source/labels.js.map +1 -1
- package/dist/web-containers/source/messages/en.json.js +12 -1
- package/dist/web-containers/source/messages/en.json.js.map +1 -1
- package/dist/web-containers/source/messages/es.json.js +12 -1
- package/dist/web-containers/source/messages/es.json.js.map +1 -1
- package/dist/web-containers/source/messages/fr.json.js +12 -1
- package/dist/web-containers/source/messages/fr.json.js.map +1 -1
- package/dist/web-containers/source/messages/zh.json.js +12 -1
- package/dist/web-containers/source/messages/zh.json.js.map +1 -1
- package/dist/web-containers/source/next/index.js +2 -0
- package/dist/web-containers/source/next/index.js.map +1 -1
- package/dist/web-containers/source/profile/admin/tabs/applications/applications-tab.js +5 -2
- package/dist/web-containers/source/profile/admin/tabs/applications/applications-tab.js.map +1 -1
- package/dist/web-containers/source/tabs/applications/applications-tab.js +5 -2
- package/dist/web-containers/source/tabs/applications/applications-tab.js.map +1 -1
- package/dist/web-containers/source/tsconfig.tsbuildinfo +1 -1
- package/dist/web-containers/source/web-containers/tsconfig.tsbuildinfo +1 -1
- package/dist/web-containers/source/zh.json.js +12 -1
- package/dist/web-containers/source/zh.json.js.map +1 -1
- package/dist/web-utils/playwright/edit-agent-category-helpers.d.ts +13 -0
- package/dist/web-utils/playwright/human-support-tab-helpers.d.ts +2 -2
- package/dist/web-utils/playwright/privacy-tab-helpers.d.ts +7 -4
- package/dist/web-utils/playwright/spend-limits-helpers.d.ts +7 -4
- package/package.json +5 -5
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useRef, useSyncExternalStore, useEffect } from 'react';
|
|
3
|
+
import { useChatT } from '../chat/chat-host-context.js';
|
|
4
|
+
import { Popover, PopoverTrigger, PopoverContent } from '../ui/popover.js';
|
|
5
|
+
import Zap from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/zap.js';
|
|
6
|
+
import Hand from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/hand.js';
|
|
7
|
+
import Check from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/check.js';
|
|
8
|
+
|
|
9
|
+
const PERMISSION_MODES = ['manual', 'auto'];
|
|
10
|
+
const PERMISSION_MODE_ICONS = {
|
|
11
|
+
manual: Hand,
|
|
12
|
+
auto: Zap,
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* One approval-mode store per call, so each surface that has its own mode
|
|
16
|
+
* (Code today, Cowork later) keeps its own.
|
|
17
|
+
*/
|
|
18
|
+
function createApprovalModeStore() {
|
|
19
|
+
// `picks` and `seeds` count the user's choices and the profile's mode taking
|
|
20
|
+
// effect, so a read that started before either never overwrites it. Seeded to
|
|
21
|
+
// Ask Me, NOT the saved default: until the desktop answers, claiming Automatic
|
|
22
|
+
// would tell a user who chose Ask Me that Code may act unasked.
|
|
23
|
+
let approvalMode = 'manual';
|
|
24
|
+
let picks = 0;
|
|
25
|
+
let seeds = 0;
|
|
26
|
+
// Code pills that currently offer the approvals button. Counted, not flagged:
|
|
27
|
+
// the canvas split mounts a composer, and so a pill, on each side.
|
|
28
|
+
let offers = 0;
|
|
29
|
+
const subscribers = new Set();
|
|
30
|
+
function notifySubscribers() {
|
|
31
|
+
subscribers.forEach((notify) => notify());
|
|
32
|
+
}
|
|
33
|
+
function publish(mode) {
|
|
34
|
+
approvalMode = mode;
|
|
35
|
+
notifySubscribers();
|
|
36
|
+
}
|
|
37
|
+
function subscribe(notify) {
|
|
38
|
+
subscribers.add(notify);
|
|
39
|
+
return () => {
|
|
40
|
+
subscribers.delete(notify);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function useApprovalMode() {
|
|
44
|
+
return useSyncExternalStore(subscribe, () => approvalMode, () => 'manual');
|
|
45
|
+
}
|
|
46
|
+
function useOfferApprovals(offer) {
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!offer)
|
|
49
|
+
return;
|
|
50
|
+
offers += 1;
|
|
51
|
+
notifySubscribers();
|
|
52
|
+
return () => {
|
|
53
|
+
offers -= 1;
|
|
54
|
+
notifySubscribers();
|
|
55
|
+
};
|
|
56
|
+
}, [offer]);
|
|
57
|
+
}
|
|
58
|
+
/** Whether any Code pill on screen offers the approvals button. */
|
|
59
|
+
function useApprovalsOffered() {
|
|
60
|
+
return useSyncExternalStore(subscribe, () => offers > 0, () => false);
|
|
61
|
+
}
|
|
62
|
+
function setApprovalMode(mode) {
|
|
63
|
+
picks += 1;
|
|
64
|
+
publish(mode);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Show a chosen mode at once and save it on the desktop. A failed save puts
|
|
68
|
+
* back the mode the desktop still enforces (a newer pick is kept), reports it,
|
|
69
|
+
* asks `reread` (the mode put back may be the placeholder) and resolves `false`.
|
|
70
|
+
*/
|
|
71
|
+
async function applyApprovalMode(mode, save, onFailure, reread) {
|
|
72
|
+
const previous = approvalMode;
|
|
73
|
+
setApprovalMode(mode);
|
|
74
|
+
try {
|
|
75
|
+
await save(mode);
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (approvalMode === mode) {
|
|
80
|
+
setApprovalMode(previous);
|
|
81
|
+
if (reread)
|
|
82
|
+
void loadApprovalMode(reread);
|
|
83
|
+
}
|
|
84
|
+
onFailure(error);
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Show the mode the desktop has saved. Anything but `"auto"` is Ask Me: an
|
|
90
|
+
* older desktop answers null when nothing was chosen, and one older still has
|
|
91
|
+
* no such command — both ask at every step.
|
|
92
|
+
*/
|
|
93
|
+
async function loadApprovalMode(read) {
|
|
94
|
+
const picksBefore = picks;
|
|
95
|
+
const seedsBefore = seeds;
|
|
96
|
+
const saved = await read().catch(() => null);
|
|
97
|
+
if (picks === picksBefore && seeds === seedsBefore) {
|
|
98
|
+
publish(saved === 'auto' ? 'auto' : 'manual');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Show the mode the desktop reports in force after offering it the profile's
|
|
103
|
+
* copy; only a real answer is shown. Never offered once the user has picked:
|
|
104
|
+
* the desktop may run the seed ahead of that pick's save.
|
|
105
|
+
*/
|
|
106
|
+
async function seedApprovalMode(seed) {
|
|
107
|
+
if (picks > 0)
|
|
108
|
+
return;
|
|
109
|
+
const inForce = await seed().catch(() => undefined);
|
|
110
|
+
if (picks > 0 || (inForce !== 'auto' && inForce !== 'manual'))
|
|
111
|
+
return;
|
|
112
|
+
seeds += 1;
|
|
113
|
+
publish(inForce);
|
|
114
|
+
}
|
|
115
|
+
/** Test support only: the mode outlives every component by design. */
|
|
116
|
+
function resetApprovalModeForTests() {
|
|
117
|
+
picks = 0;
|
|
118
|
+
seeds = 0;
|
|
119
|
+
publish('manual');
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
useApprovalMode,
|
|
123
|
+
setApprovalMode,
|
|
124
|
+
applyApprovalMode,
|
|
125
|
+
loadApprovalMode,
|
|
126
|
+
seedApprovalMode,
|
|
127
|
+
useOfferApprovals,
|
|
128
|
+
useApprovalsOffered,
|
|
129
|
+
resetApprovalModeForTests,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Code's approval mode: an icon that widens to the mode's name and opens the
|
|
134
|
+
* choice. It grows over the tool row, not into it, so the row never re-fits its
|
|
135
|
+
* pills on hover; the delay keeps a passing pointer from widening it.
|
|
136
|
+
*/
|
|
137
|
+
function ApprovalsModeButton({ mode, onChange, labels }) {
|
|
138
|
+
var _a;
|
|
139
|
+
const t = useChatT();
|
|
140
|
+
const [open, setOpen] = useState(false);
|
|
141
|
+
const menuRef = useRef(null);
|
|
142
|
+
const Icon = PERMISSION_MODE_ICONS[mode];
|
|
143
|
+
const name = (m) => {
|
|
144
|
+
var _a, _b;
|
|
145
|
+
return m === 'auto'
|
|
146
|
+
? ((_a = labels === null || labels === void 0 ? void 0 : labels.permissionModeAuto) !== null && _a !== void 0 ? _a : t('chat.chatInputFormApprovalsModeButton.permissionModeAuto'))
|
|
147
|
+
: ((_b = labels === null || labels === void 0 ? void 0 : labels.permissionModeManual) !== null && _b !== void 0 ? _b : t('chat.chatInputFormApprovalsModeButton.permissionModeManual'));
|
|
148
|
+
};
|
|
149
|
+
const hint = (m) => {
|
|
150
|
+
var _a, _b;
|
|
151
|
+
return m === 'auto'
|
|
152
|
+
? ((_a = labels === null || labels === void 0 ? void 0 : labels.permissionModeAutoHint) !== null && _a !== void 0 ? _a : t('chat.chatInputFormApprovalsModeButton.permissionModeAutoHint'))
|
|
153
|
+
: ((_b = labels === null || labels === void 0 ? void 0 : labels.permissionModeManualHint) !== null && _b !== void 0 ? _b : t('chat.chatInputFormApprovalsModeButton.permissionModeManualHint'));
|
|
154
|
+
};
|
|
155
|
+
const heading = (_a = labels === null || labels === void 0 ? void 0 : labels.permissionModeLabel) !== null && _a !== void 0 ? _a : t('chat.chatInputFormApprovalsModeButton.permissionModeLabel');
|
|
156
|
+
const ariaLabel = (labels === null || labels === void 0 ? void 0 : labels.approvalsAria)
|
|
157
|
+
? labels.approvalsAria(name(mode))
|
|
158
|
+
: t('chat.chatInputFormApprovalsModeButton.approvalsAria', { mode: name(mode) });
|
|
159
|
+
return (jsxs(Popover, { open: open, onOpenChange: setOpen, children: [jsx("span", { className: "relative flex h-8 w-8 shrink-0", children: jsx(PopoverTrigger, { asChild: true, children: jsxs("button", { type: "button", "data-testid": "code-approvals-button", "aria-label": ariaLabel, className: "group absolute top-0 right-0 z-10 flex h-8 cursor-pointer items-center rounded-lg border border-transparent px-[7px] text-sm font-medium text-[#38A1E5] transition-colors duration-200 hover:border-[#D0E0FF] hover:bg-[#F5F8FF] hover:delay-150 focus-visible:border-[#D0E0FF] focus-visible:bg-[#F5F8FF] focus-visible:outline-none data-[state=open]:border-[#D0E0FF] data-[state=open]:bg-[#F5F8FF]", children: [jsx(Icon, { className: "size-4 shrink-0", "aria-hidden": "true" }), jsx("span", { className: "max-w-0 overflow-hidden whitespace-nowrap opacity-0 transition-all duration-200 ease-out group-hover:ml-1.5 group-hover:max-w-28 group-hover:opacity-100 group-hover:delay-150 group-focus-visible:ml-1.5 group-focus-visible:max-w-28 group-focus-visible:opacity-100 group-data-[state=open]:ml-1.5 group-data-[state=open]:max-w-28 group-data-[state=open]:opacity-100", children: name(mode) })] }) }) }), jsxs(PopoverContent, { ref: menuRef, side: "top", align: "end", collisionPadding: 8, tabIndex: -1, "aria-label": heading,
|
|
160
|
+
// Radix focuses the first option on open, ringing "Ask Me" whichever
|
|
161
|
+
// mode is on; the menu takes focus instead, so Tab still reaches both.
|
|
162
|
+
onOpenAutoFocus: (event) => {
|
|
163
|
+
var _a;
|
|
164
|
+
event.preventDefault();
|
|
165
|
+
(_a = menuRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
166
|
+
}, className: "w-72 max-w-[calc(100vw-2rem)] rounded-lg border border-gray-200 bg-white p-1.5 shadow-xl outline-none", children: [jsx("div", { className: "px-2 pt-1 pb-1.5 text-xs font-medium text-gray-500", children: heading }), jsx("div", { role: "radiogroup", "aria-label": heading, className: "flex flex-col gap-0.5", children: PERMISSION_MODES.map((m) => {
|
|
167
|
+
const ModeIcon = PERMISSION_MODE_ICONS[m];
|
|
168
|
+
const selected = m === mode;
|
|
169
|
+
return (jsxs("button", { type: "button", role: "radio", "aria-checked": selected, "data-testid": `code-approvals-option-${m}`, onClick: () => {
|
|
170
|
+
onChange(m);
|
|
171
|
+
setOpen(false);
|
|
172
|
+
}, className: `flex w-full cursor-pointer items-start gap-2.5 rounded-md px-2 py-2 text-left transition-colors ${selected ? 'bg-[#F5F8FF]' : 'hover:bg-gray-50'}`, children: [jsx(ModeIcon, { className: `mt-0.5 h-4 w-4 shrink-0 ${selected ? 'text-[#38A1E5]' : 'text-gray-500'}`, "aria-hidden": "true" }), jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [jsx("span", { className: `text-sm font-medium ${selected ? 'text-[#38A1E5]' : 'text-gray-900'}`, children: name(m) }), jsx("span", { className: "text-xs text-gray-500", children: hint(m) })] }), selected && (jsx(Check, { className: "mt-0.5 h-4 w-4 shrink-0 text-[#38A1E5]", "aria-hidden": "true" }))] }, m));
|
|
173
|
+
}) })] })] }));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export { ApprovalsModeButton, PERMISSION_MODES, PERMISSION_MODE_ICONS, createApprovalModeStore };
|
|
177
|
+
//# sourceMappingURL=approvals-mode-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals-mode-button.js","sources":["../../../../../../../src/components/chat-input-form/approvals-mode-button.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-host-context.js","sources":["../../../../../../../src/components/chat/chat-host-context.tsx"],"sourcesContent":[null],"names":["_jsx","ChatMarkdown"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"chat-host-context.js","sources":["../../../../../../../src/components/chat/chat-host-context.tsx"],"sourcesContent":[null],"names":["_jsx","ChatMarkdown"],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useSyncExternalStore } from 'react';
|
|
3
|
-
import { useChatT } from './chat-host-context.js';
|
|
3
|
+
import { useChatT, useChatHost } from './chat-host-context.js';
|
|
4
|
+
import { toast } from 'sonner';
|
|
4
5
|
import { Button } from './ui/button.js';
|
|
5
6
|
import { describeStep, mergeToolCall, safeDetail, stepSentence } from './code-activity.js';
|
|
6
7
|
import ShieldCheck from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/shield-check.js';
|
|
8
|
+
import Zap from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/zap.js';
|
|
7
9
|
|
|
8
10
|
function isTauriApp() {
|
|
9
11
|
return typeof window !== 'undefined' && '__TAURI__' in window;
|
|
@@ -115,10 +117,15 @@ function legacyToolCall(request) {
|
|
|
115
117
|
locations: value === null || value === void 0 ? void 0 : value.split(/\s+/).map((path) => ({ path })),
|
|
116
118
|
};
|
|
117
119
|
}
|
|
120
|
+
// Past this the card's action is allowed without waiting, well before the desktop
|
|
121
|
+
// gives up on it (180s). Not a failure: a live Codex session can take this long.
|
|
122
|
+
const SWITCH_TO_AUTOMATIC_TIMEOUT_MS = 10000;
|
|
118
123
|
function CodePermissionCards({ generationId, }) {
|
|
124
|
+
var _a;
|
|
119
125
|
const all = useCodePermissionRequests();
|
|
120
126
|
const requests = all.filter((r) => r.generation_id === generationId);
|
|
121
127
|
const t = useChatT();
|
|
128
|
+
const onSwitchToAutomatic = (_a = useChatHost().config) === null || _a === void 0 ? void 0 : _a.onSwitchToAutomatic;
|
|
122
129
|
const answer = async (request, optionId) => {
|
|
123
130
|
// Drop it first: the answer is one-way and a second click would resolve an id
|
|
124
131
|
// Rust has already forgotten.
|
|
@@ -138,6 +145,32 @@ function CodePermissionCards({ generationId, }) {
|
|
|
138
145
|
console.error('[code-permission] respond failed', e);
|
|
139
146
|
}
|
|
140
147
|
};
|
|
148
|
+
// Automatic is saved BEFORE this card is answered: in the desktop app saving it
|
|
149
|
+
// answers every waiting card, this one included. The action is allowed whatever the
|
|
150
|
+
// save does — the card is already gone, so nothing else would answer it.
|
|
151
|
+
const switchToAutomatic = onSwitchToAutomatic &&
|
|
152
|
+
(async (request) => {
|
|
153
|
+
drop(request.request_id);
|
|
154
|
+
const saving = new Promise((resolve) => resolve(onSwitchToAutomatic())).then((saved) => {
|
|
155
|
+
if (saved === false)
|
|
156
|
+
toast.error(t('chat.chatCodePermissionCard.switchToAutomaticFailed'));
|
|
157
|
+
}, (e) => {
|
|
158
|
+
console.error('[code-permission] could not switch to Automatic', e);
|
|
159
|
+
toast.error(t('chat.chatCodePermissionCard.switchToAutomaticFailed'));
|
|
160
|
+
});
|
|
161
|
+
let timer;
|
|
162
|
+
await Promise.race([
|
|
163
|
+
saving,
|
|
164
|
+
new Promise((resolve) => {
|
|
165
|
+
timer = setTimeout(() => {
|
|
166
|
+
console.error('[code-permission] switching to Automatic is taking too long');
|
|
167
|
+
resolve();
|
|
168
|
+
}, SWITCH_TO_AUTOMATIC_TIMEOUT_MS);
|
|
169
|
+
}),
|
|
170
|
+
]);
|
|
171
|
+
clearTimeout(timer);
|
|
172
|
+
await answer(request, request.allow_option_id);
|
|
173
|
+
});
|
|
141
174
|
return (
|
|
142
175
|
// Mounted empty for the whole turn, so the first card is a mutation screen
|
|
143
176
|
// readers announce rather than content they never see arrive.
|
|
@@ -152,13 +185,17 @@ function CodePermissionCards({ generationId, }) {
|
|
|
152
185
|
// A Browse run (own responder) keeps its own title; anything else described gets a sentence.
|
|
153
186
|
const named = !request.respond && step.action !== 'other';
|
|
154
187
|
const shown = (_c = safeDetail((_b = request.command) !== null && _b !== void 0 ? _b : undefined)) !== null && _c !== void 0 ? _c : (named ? step.details : undefined);
|
|
188
|
+
// Code prompts only: a Browse run follows Cowork's own Approvals setting,
|
|
189
|
+
// and a prompt with nothing to allow can't be approved.
|
|
190
|
+
const canSwitch = !!switchToAutomatic && !request.respond && !!request.allow_option_id;
|
|
191
|
+
const automaticHintId = `code-permission-automatic-hint-${request.request_id}`;
|
|
155
192
|
return (jsxs("div", { children: [jsxs("div", { className: "flex flex-wrap items-center gap-1.5 text-gray-600 dark:text-gray-300", children: [jsx(ShieldCheck, { className: "h-3 w-3 shrink-0 text-gray-400" }), jsx("span", { className: "font-medium", children: t('chat.chatCodePermissionCard.title') })] }), jsx("div", { className: "mt-0.5 ml-[18px] text-gray-400 dark:text-gray-500", children: named
|
|
156
193
|
? stepSentence(t, step, 'want')
|
|
157
194
|
: safeDetail((_d = request.title) !== null && _d !== void 0 ? _d : undefined) ||
|
|
158
195
|
t('chat.chatCodePermissionCard.unnamedAction') }), shown && (
|
|
159
196
|
// bg-gray-200 is what the bubble already uses for inline code and pre
|
|
160
197
|
// blocks, so the command sits on the same surface as the reply's own.
|
|
161
|
-
jsx("code", { className: "mt-1 ml-[18px] block rounded bg-gray-200 px-1.5 py-1 font-mono break-all whitespace-pre-wrap text-gray-700", children: shown })), jsxs("div", { className: "mt-2 ml-[18px] flex items-center gap-2", children: [jsx(Button, { size: "sm", type: "button", className: "ibl-button-primary h-7 text-xs", onClick: () => answer(request, request.allow_option_id), children: t('chat.chatCodePermissionCard.allow') }), jsx(Button, { variant: "outline", size: "sm", type: "button", className: "h-7 text-xs", onClick: () => answer(request, request.reject_option_id), children: t('chat.chatCodePermissionCard.deny') })] })] }, request.request_id));
|
|
198
|
+
jsx("code", { className: "mt-1 ml-[18px] block rounded bg-gray-200 px-1.5 py-1 font-mono break-all whitespace-pre-wrap text-gray-700", children: shown })), jsxs("div", { className: "mt-2 ml-[18px] flex flex-wrap items-center gap-2", children: [jsx(Button, { size: "sm", type: "button", className: "ibl-button-primary h-7 text-xs", onClick: () => answer(request, request.allow_option_id), children: t('chat.chatCodePermissionCard.allow') }), jsx(Button, { variant: "outline", size: "sm", type: "button", className: "h-7 text-xs", onClick: () => answer(request, request.reject_option_id), children: t('chat.chatCodePermissionCard.deny') }), canSwitch && (jsxs(Button, { variant: "ghost", size: "sm", type: "button", "data-testid": "code-permission-switch-to-automatic", "aria-describedby": automaticHintId, className: "h-7 gap-1 text-xs text-[#38A1E5] hover:bg-[#F5F8FF] hover:text-[#38A1E5]", onClick: () => void (switchToAutomatic === null || switchToAutomatic === void 0 ? void 0 : switchToAutomatic(request)), children: [jsx(Zap, { className: "h-3 w-3", "aria-hidden": "true" }), t('chat.chatCodePermissionCard.switchToAutomatic')] }))] }), canSwitch && (jsx("p", { id: automaticHintId, "data-testid": "code-permission-automatic-hint", className: "mt-1 ml-[18px] text-gray-500 dark:text-gray-400", children: t('chat.chatCodePermissionCard.switchToAutomaticHint') }))] }, request.request_id));
|
|
162
199
|
}) })) }));
|
|
163
200
|
}
|
|
164
201
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-permission-card.js","sources":["../../../../../../../src/components/chat/code-permission-card.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"
|
|
1
|
+
{"version":3,"file":"code-permission-card.js","sources":["../../../../../../../src/components/chat/code-permission-card.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-host-context.js","sources":["../../../../../../../src/components/chat/chat-host-context.tsx"],"sourcesContent":[null],"names":["_jsx","ChatMarkdown"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"chat-host-context.js","sources":["../../../../../../../src/components/chat/chat-host-context.tsx"],"sourcesContent":[null],"names":["_jsx","ChatMarkdown"],"mappings":";;;;;;AAuQO,MAAM,qBAAqB,GAA2B;AAC3D,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,MAAM,EAAE,IAAI;;AAGR,SAAU,mBAAmB,CAAC,QAAuB,EAAA;AACzD,IAAA,MAAM,QAAQ,GAAG,EAAE,GAAG,qBAAqB,EAAE;IAC7C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAA2B,EAAE;QACjE,IAAI,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAG,GAAG,CAAC,MAAK,KAAK;AAAE,YAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK;IACtD;AACA,IAAA,OAAO,QAAQ;AACjB;AAEA,MAAM,YAAY,GAAkB;AAClC,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,QAAQ,EAAE,qBAAqB;AAC/B,IAAA,KAAK,EAAE,EAAE;CACV;AAED,MAAM,eAAe,GAAG,aAAa,CAAuB,IAAI,CAAC;SAEjD,gBAAgB,CAAC,EAC/B,KAAK,EACL,QAAQ,GAIT,EAAA;IACC,OAAOA,GAAA,CAAC,eAAe,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,KAAK,EAAA,QAAA,EAAG,QAAQ,EAAA,CAA4B;AACtF;AAEA;;;;AAIG;SACa,WAAW,GAAA;;AACzB,IAAA,OAAO,MAAA,UAAU,CAAC,eAAe,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,YAAY;AACpD;AAEA;SACgB,cAAc,GAAA;AAC5B,IAAA,OAAO,UAAU,CAAC,eAAe,CAAC,KAAK,IAAI;AAC7C;AAIA;;;;AAIG;SACa,QAAQ,GAAA;AACtB,IAAA,MAAM,CAAC,GAAG,IAAI,EAAE;AAChB,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE;AAChC,IAAA,OAAO,WAAW,CAChB,CAAC,GAAW,EAAE,MAA4B,KAAI;QAC5C,IAAI,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACrC,YAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,MAA6B,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAAE,gBAAA,OAAO,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC;QACxE;AACA,QAAA,OAAO,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC;AACvB,IAAA,CAAC,EACD,CAAC,CAAC,EAAE,MAAM,CAAC,CACZ;AACH;AAEA;;;AAGG;SACa,kBAAkB,GAAA;AAChC,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE;IAChC,MAAM,IAAI,GAAG,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,iBAAiB;AACtC,IAAA,OAAO,WAAW,CAChB,CAAC,OAAsB,EAAE,aAAA,GAAyB,IAAI,KACpD,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,OAAO,EAAE,EACjD,CAAC,IAAI,CAAC,CACP;AACH;AAEA;;;AAGG;SACa,eAAe,GAAA;;AAC7B,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,EAAE;IAChC,OAAO,CAAA,EAAA,GAAA,MAAM,KAAA,IAAA,IAAN,MAAM,KAAA,MAAA,GAAA,MAAA,GAAN,MAAM,CAAE,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAIC,QAAY;AAClD;;;;"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useRef, useSyncExternalStore, useEffect } from 'react';
|
|
3
|
+
import { useChatT } from '../chat/chat-host-context.js';
|
|
4
|
+
import { Popover, PopoverTrigger, PopoverContent } from '../ui/popover.js';
|
|
5
|
+
import Zap from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/zap.js';
|
|
6
|
+
import Hand from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/hand.js';
|
|
7
|
+
import Check from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/check.js';
|
|
8
|
+
|
|
9
|
+
const PERMISSION_MODES = ['manual', 'auto'];
|
|
10
|
+
const PERMISSION_MODE_ICONS = {
|
|
11
|
+
manual: Hand,
|
|
12
|
+
auto: Zap,
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* One approval-mode store per call, so each surface that has its own mode
|
|
16
|
+
* (Code today, Cowork later) keeps its own.
|
|
17
|
+
*/
|
|
18
|
+
function createApprovalModeStore() {
|
|
19
|
+
// `picks` and `seeds` count the user's choices and the profile's mode taking
|
|
20
|
+
// effect, so a read that started before either never overwrites it. Seeded to
|
|
21
|
+
// Ask Me, NOT the saved default: until the desktop answers, claiming Automatic
|
|
22
|
+
// would tell a user who chose Ask Me that Code may act unasked.
|
|
23
|
+
let approvalMode = 'manual';
|
|
24
|
+
let picks = 0;
|
|
25
|
+
let seeds = 0;
|
|
26
|
+
// Code pills that currently offer the approvals button. Counted, not flagged:
|
|
27
|
+
// the canvas split mounts a composer, and so a pill, on each side.
|
|
28
|
+
let offers = 0;
|
|
29
|
+
const subscribers = new Set();
|
|
30
|
+
function notifySubscribers() {
|
|
31
|
+
subscribers.forEach((notify) => notify());
|
|
32
|
+
}
|
|
33
|
+
function publish(mode) {
|
|
34
|
+
approvalMode = mode;
|
|
35
|
+
notifySubscribers();
|
|
36
|
+
}
|
|
37
|
+
function subscribe(notify) {
|
|
38
|
+
subscribers.add(notify);
|
|
39
|
+
return () => {
|
|
40
|
+
subscribers.delete(notify);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function useApprovalMode() {
|
|
44
|
+
return useSyncExternalStore(subscribe, () => approvalMode, () => 'manual');
|
|
45
|
+
}
|
|
46
|
+
function useOfferApprovals(offer) {
|
|
47
|
+
useEffect(() => {
|
|
48
|
+
if (!offer)
|
|
49
|
+
return;
|
|
50
|
+
offers += 1;
|
|
51
|
+
notifySubscribers();
|
|
52
|
+
return () => {
|
|
53
|
+
offers -= 1;
|
|
54
|
+
notifySubscribers();
|
|
55
|
+
};
|
|
56
|
+
}, [offer]);
|
|
57
|
+
}
|
|
58
|
+
/** Whether any Code pill on screen offers the approvals button. */
|
|
59
|
+
function useApprovalsOffered() {
|
|
60
|
+
return useSyncExternalStore(subscribe, () => offers > 0, () => false);
|
|
61
|
+
}
|
|
62
|
+
function setApprovalMode(mode) {
|
|
63
|
+
picks += 1;
|
|
64
|
+
publish(mode);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Show a chosen mode at once and save it on the desktop. A failed save puts
|
|
68
|
+
* back the mode the desktop still enforces (a newer pick is kept), reports it,
|
|
69
|
+
* asks `reread` (the mode put back may be the placeholder) and resolves `false`.
|
|
70
|
+
*/
|
|
71
|
+
async function applyApprovalMode(mode, save, onFailure, reread) {
|
|
72
|
+
const previous = approvalMode;
|
|
73
|
+
setApprovalMode(mode);
|
|
74
|
+
try {
|
|
75
|
+
await save(mode);
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
if (approvalMode === mode) {
|
|
80
|
+
setApprovalMode(previous);
|
|
81
|
+
if (reread)
|
|
82
|
+
void loadApprovalMode(reread);
|
|
83
|
+
}
|
|
84
|
+
onFailure(error);
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Show the mode the desktop has saved. Anything but `"auto"` is Ask Me: an
|
|
90
|
+
* older desktop answers null when nothing was chosen, and one older still has
|
|
91
|
+
* no such command — both ask at every step.
|
|
92
|
+
*/
|
|
93
|
+
async function loadApprovalMode(read) {
|
|
94
|
+
const picksBefore = picks;
|
|
95
|
+
const seedsBefore = seeds;
|
|
96
|
+
const saved = await read().catch(() => null);
|
|
97
|
+
if (picks === picksBefore && seeds === seedsBefore) {
|
|
98
|
+
publish(saved === 'auto' ? 'auto' : 'manual');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Show the mode the desktop reports in force after offering it the profile's
|
|
103
|
+
* copy; only a real answer is shown. Never offered once the user has picked:
|
|
104
|
+
* the desktop may run the seed ahead of that pick's save.
|
|
105
|
+
*/
|
|
106
|
+
async function seedApprovalMode(seed) {
|
|
107
|
+
if (picks > 0)
|
|
108
|
+
return;
|
|
109
|
+
const inForce = await seed().catch(() => undefined);
|
|
110
|
+
if (picks > 0 || (inForce !== 'auto' && inForce !== 'manual'))
|
|
111
|
+
return;
|
|
112
|
+
seeds += 1;
|
|
113
|
+
publish(inForce);
|
|
114
|
+
}
|
|
115
|
+
/** Test support only: the mode outlives every component by design. */
|
|
116
|
+
function resetApprovalModeForTests() {
|
|
117
|
+
picks = 0;
|
|
118
|
+
seeds = 0;
|
|
119
|
+
publish('manual');
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
useApprovalMode,
|
|
123
|
+
setApprovalMode,
|
|
124
|
+
applyApprovalMode,
|
|
125
|
+
loadApprovalMode,
|
|
126
|
+
seedApprovalMode,
|
|
127
|
+
useOfferApprovals,
|
|
128
|
+
useApprovalsOffered,
|
|
129
|
+
resetApprovalModeForTests,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Code's approval mode: an icon that widens to the mode's name and opens the
|
|
134
|
+
* choice. It grows over the tool row, not into it, so the row never re-fits its
|
|
135
|
+
* pills on hover; the delay keeps a passing pointer from widening it.
|
|
136
|
+
*/
|
|
137
|
+
function ApprovalsModeButton({ mode, onChange, labels }) {
|
|
138
|
+
var _a;
|
|
139
|
+
const t = useChatT();
|
|
140
|
+
const [open, setOpen] = useState(false);
|
|
141
|
+
const menuRef = useRef(null);
|
|
142
|
+
const Icon = PERMISSION_MODE_ICONS[mode];
|
|
143
|
+
const name = (m) => {
|
|
144
|
+
var _a, _b;
|
|
145
|
+
return m === 'auto'
|
|
146
|
+
? ((_a = labels === null || labels === void 0 ? void 0 : labels.permissionModeAuto) !== null && _a !== void 0 ? _a : t('chat.chatInputFormApprovalsModeButton.permissionModeAuto'))
|
|
147
|
+
: ((_b = labels === null || labels === void 0 ? void 0 : labels.permissionModeManual) !== null && _b !== void 0 ? _b : t('chat.chatInputFormApprovalsModeButton.permissionModeManual'));
|
|
148
|
+
};
|
|
149
|
+
const hint = (m) => {
|
|
150
|
+
var _a, _b;
|
|
151
|
+
return m === 'auto'
|
|
152
|
+
? ((_a = labels === null || labels === void 0 ? void 0 : labels.permissionModeAutoHint) !== null && _a !== void 0 ? _a : t('chat.chatInputFormApprovalsModeButton.permissionModeAutoHint'))
|
|
153
|
+
: ((_b = labels === null || labels === void 0 ? void 0 : labels.permissionModeManualHint) !== null && _b !== void 0 ? _b : t('chat.chatInputFormApprovalsModeButton.permissionModeManualHint'));
|
|
154
|
+
};
|
|
155
|
+
const heading = (_a = labels === null || labels === void 0 ? void 0 : labels.permissionModeLabel) !== null && _a !== void 0 ? _a : t('chat.chatInputFormApprovalsModeButton.permissionModeLabel');
|
|
156
|
+
const ariaLabel = (labels === null || labels === void 0 ? void 0 : labels.approvalsAria)
|
|
157
|
+
? labels.approvalsAria(name(mode))
|
|
158
|
+
: t('chat.chatInputFormApprovalsModeButton.approvalsAria', { mode: name(mode) });
|
|
159
|
+
return (jsxs(Popover, { open: open, onOpenChange: setOpen, children: [jsx("span", { className: "relative flex h-8 w-8 shrink-0", children: jsx(PopoverTrigger, { asChild: true, children: jsxs("button", { type: "button", "data-testid": "code-approvals-button", "aria-label": ariaLabel, className: "group absolute top-0 right-0 z-10 flex h-8 cursor-pointer items-center rounded-lg border border-transparent px-[7px] text-sm font-medium text-[#38A1E5] transition-colors duration-200 hover:border-[#D0E0FF] hover:bg-[#F5F8FF] hover:delay-150 focus-visible:border-[#D0E0FF] focus-visible:bg-[#F5F8FF] focus-visible:outline-none data-[state=open]:border-[#D0E0FF] data-[state=open]:bg-[#F5F8FF]", children: [jsx(Icon, { className: "size-4 shrink-0", "aria-hidden": "true" }), jsx("span", { className: "max-w-0 overflow-hidden whitespace-nowrap opacity-0 transition-all duration-200 ease-out group-hover:ml-1.5 group-hover:max-w-28 group-hover:opacity-100 group-hover:delay-150 group-focus-visible:ml-1.5 group-focus-visible:max-w-28 group-focus-visible:opacity-100 group-data-[state=open]:ml-1.5 group-data-[state=open]:max-w-28 group-data-[state=open]:opacity-100", children: name(mode) })] }) }) }), jsxs(PopoverContent, { ref: menuRef, side: "top", align: "end", collisionPadding: 8, tabIndex: -1, "aria-label": heading,
|
|
160
|
+
// Radix focuses the first option on open, ringing "Ask Me" whichever
|
|
161
|
+
// mode is on; the menu takes focus instead, so Tab still reaches both.
|
|
162
|
+
onOpenAutoFocus: (event) => {
|
|
163
|
+
var _a;
|
|
164
|
+
event.preventDefault();
|
|
165
|
+
(_a = menuRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
166
|
+
}, className: "w-72 max-w-[calc(100vw-2rem)] rounded-lg border border-gray-200 bg-white p-1.5 shadow-xl outline-none", children: [jsx("div", { className: "px-2 pt-1 pb-1.5 text-xs font-medium text-gray-500", children: heading }), jsx("div", { role: "radiogroup", "aria-label": heading, className: "flex flex-col gap-0.5", children: PERMISSION_MODES.map((m) => {
|
|
167
|
+
const ModeIcon = PERMISSION_MODE_ICONS[m];
|
|
168
|
+
const selected = m === mode;
|
|
169
|
+
return (jsxs("button", { type: "button", role: "radio", "aria-checked": selected, "data-testid": `code-approvals-option-${m}`, onClick: () => {
|
|
170
|
+
onChange(m);
|
|
171
|
+
setOpen(false);
|
|
172
|
+
}, className: `flex w-full cursor-pointer items-start gap-2.5 rounded-md px-2 py-2 text-left transition-colors ${selected ? 'bg-[#F5F8FF]' : 'hover:bg-gray-50'}`, children: [jsx(ModeIcon, { className: `mt-0.5 h-4 w-4 shrink-0 ${selected ? 'text-[#38A1E5]' : 'text-gray-500'}`, "aria-hidden": "true" }), jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [jsx("span", { className: `text-sm font-medium ${selected ? 'text-[#38A1E5]' : 'text-gray-900'}`, children: name(m) }), jsx("span", { className: "text-xs text-gray-500", children: hint(m) })] }), selected && (jsx(Check, { className: "mt-0.5 h-4 w-4 shrink-0 text-[#38A1E5]", "aria-hidden": "true" }))] }, m));
|
|
173
|
+
}) })] })] }));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
export { ApprovalsModeButton, PERMISSION_MODES, PERMISSION_MODE_ICONS, createApprovalModeStore };
|
|
177
|
+
//# sourceMappingURL=approvals-mode-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvals-mode-button.js","sources":["../../../../../../../src/components/chat-input-form/approvals-mode-button.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useChatT } from '../chat/chat-host-context.js';
|
|
3
|
+
import { cn } from '../../lib/utils.js';
|
|
4
|
+
import { CanvasIcon } from '../icons/svg-icons.js';
|
|
5
|
+
import { useComposerToolPill, useComposerToolRowCramped } from './composer-tool-row.js';
|
|
6
|
+
import X from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/x.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The redesigned composer's Canvas pill. On, it reads as an active tool chip
|
|
10
|
+
* (same pill) with a "Turn off Canvas" ×; off, a one-click toggle.
|
|
11
|
+
*/
|
|
12
|
+
function ComposerCanvasPill({ on, disabled, onToggle, }) {
|
|
13
|
+
const t = useChatT();
|
|
14
|
+
const { showName: rowShowsName } = useComposerToolPill(on);
|
|
15
|
+
const cramped = useComposerToolRowCramped();
|
|
16
|
+
const showName = rowShowsName && !cramped;
|
|
17
|
+
const name = t('chat.chatInputFormInsideButtons.canvas');
|
|
18
|
+
return (jsxs("span", { className: cn('flex h-8 min-w-0 items-center overflow-hidden rounded-[10px] border text-sm leading-5 font-medium transition-colors', on
|
|
19
|
+
? 'gap-1.5 border-[#D0E0FF] bg-[#F5F8FF] pr-2 pl-2.5 text-[#38A1E5] hover:bg-[#EAF1FF]'
|
|
20
|
+
: 'border-transparent text-gray-600 hover:bg-gray-100'), "data-testid": "composer-canvas-pill", children: [jsxs("button", { type: "button", disabled: disabled, "aria-pressed": on, onClick: (e) => {
|
|
21
|
+
e.preventDefault();
|
|
22
|
+
onToggle();
|
|
23
|
+
}, title: showName ? undefined : name, className: cn('flex h-full min-w-0 items-center gap-1.5 disabled:cursor-not-allowed disabled:opacity-50', !on && 'px-2'), children: [jsx(CanvasIcon, { className: "h-4 w-4 shrink-0", "aria-hidden": "true" }), jsx("span", { className: cn('truncate', !showName && 'sr-only'), children: name })] }), on && (jsx("button", { type: "button", disabled: disabled, "aria-label": t('chat.chatComposer.turnOff', { name }), "data-testid": "composer-canvas-off", onClick: (e) => {
|
|
24
|
+
e.preventDefault();
|
|
25
|
+
onToggle();
|
|
26
|
+
}, className: "flex h-full shrink-0 items-center disabled:cursor-not-allowed disabled:opacity-50", children: jsx(X, { className: "h-3 w-3", "aria-hidden": "true" }) }))] }));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { ComposerCanvasPill };
|
|
30
|
+
//# sourceMappingURL=composer-canvas-pill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer-canvas-pill.js","sources":["../../../../../../../src/components/chat-input-form/composer-canvas-pill.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;;;AAQA;;;AAGG;AACG,SAAU,kBAAkB,CAAC,EACjC,EAAE,EACF,QAAQ,EACR,QAAQ,GAKT,EAAA;AACC,IAAA,MAAM,CAAC,GAAG,QAAQ,EAAE;IACpB,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAAC,EAAE,CAAC;AAC1D,IAAA,MAAM,OAAO,GAAG,yBAAyB,EAAE;AAC3C,IAAA,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC,OAAO;AACzC,IAAA,MAAM,IAAI,GAAG,CAAC,CAAC,wCAAwC,CAAC;IAExD,QACEA,eACE,SAAS,EAAE,EAAE,CACX,qHAAqH,EACrH;AACE,cAAE;cACA,oDAAoD,CACzD,EAAA,aAAA,EACW,sBAAsB,EAAA,QAAA,EAAA,CAElCA,IAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,kBACJ,EAAE,EAChB,OAAO,EAAE,CAAC,CAAC,KAAI;oBACb,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,QAAQ,EAAE;AACZ,gBAAA,CAAC,EACD,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,EAClC,SAAS,EAAE,EAAE,CACX,0FAA0F,EAC1F,CAAC,EAAE,IAAI,MAAM,CACd,EAAA,QAAA,EAAA,CAEDC,GAAA,CAAC,UAAU,EAAA,EAAC,SAAS,EAAC,kBAAkB,iBAAa,MAAM,EAAA,CAAG,EAC9DA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,IAAI,SAAS,CAAC,YAAG,IAAI,EAAA,CAAQ,CAAA,EAAA,CAC/D,EACR,EAAE,KACDA,gBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,QAAQ,gBACN,CAAC,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,CAAC,EAAA,aAAA,EACxC,qBAAqB,EACjC,OAAO,EAAE,CAAC,CAAC,KAAI;oBACb,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,QAAQ,EAAE;AACZ,gBAAA,CAAC,EACD,SAAS,EAAC,mFAAmF,EAAA,QAAA,EAE7FA,GAAA,CAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,iBAAa,MAAM,EAAA,CAAG,GACrC,CACV,CAAA,EAAA,CACI;AAEX;;;;"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useChatT } from '../chat/chat-host-context.js';
|
|
3
|
+
import { useComposerToolPill } from './composer-tool-row.js';
|
|
4
|
+
import Cpu from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/cpu.js';
|
|
5
|
+
import X from '../../node_modules/.pnpm/lucide-react@0.528.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/x.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* The model picked for this chat, shown only while it isn't the agent's own
|
|
9
|
+
* model, so it counts as a tool pill that is on. Its × goes back to the
|
|
10
|
+
* agent's model.
|
|
11
|
+
*/
|
|
12
|
+
function ComposerModelChip({ label, defaultLabel, onReset, }) {
|
|
13
|
+
const t = useChatT();
|
|
14
|
+
const { showName } = useComposerToolPill(true);
|
|
15
|
+
const backToDefault = t('chat.chatComposer.backToDefaultModel', { model: defaultLabel });
|
|
16
|
+
return (jsxs("span", { className: "flex h-8 min-w-0 items-center gap-1.5 overflow-hidden rounded-[10px] border border-[#D0E0FF] bg-[#F5F8FF] pr-2 pl-2.5 text-sm leading-5 font-medium text-[#38A1E5] transition-colors hover:bg-[#EAF1FF]", "data-testid": "composer-model-chip", title: showName ? undefined : label, children: [jsx(Cpu, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": "true" }), jsx("span", { className: showName ? 'truncate' : 'sr-only', children: label }), jsx("button", { type: "button", "aria-label": backToDefault, title: backToDefault, "data-testid": "composer-model-reset", onClick: (e) => {
|
|
17
|
+
e.preventDefault();
|
|
18
|
+
onReset();
|
|
19
|
+
}, className: "flex h-full shrink-0 items-center", children: jsx(X, { className: "h-3 w-3", "aria-hidden": "true" }) })] }));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { ComposerModelChip };
|
|
23
|
+
//# sourceMappingURL=composer-model-chip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer-model-chip.js","sources":["../../../../../../../src/components/chat-input-form/composer-model-chip.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAMA;;;;AAIG;AACG,SAAU,iBAAiB,CAAC,EAChC,KAAK,EACL,YAAY,EACZ,OAAO,GAKR,EAAA;AACC,IAAA,MAAM,CAAC,GAAG,QAAQ,EAAE;IACpB,MAAM,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC;AAC9C,IAAA,MAAM,aAAa,GAAG,CAAC,CAAC,sCAAsC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;AAExF,IAAA,QACEA,IAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,yMAAyM,EAAA,aAAA,EACvM,qBAAqB,EACjC,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,EAAA,QAAA,EAAA,CAEnCC,GAAA,CAAC,GAAG,EAAA,EAAC,SAAS,EAAC,sBAAsB,EAAA,aAAA,EAAa,MAAM,EAAA,CAAG,EAC3DA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,EAAA,QAAA,EAAG,KAAK,EAAA,CAAQ,EAClEA,gBACE,IAAI,EAAC,QAAQ,EAAA,YAAA,EACD,aAAa,EACzB,KAAK,EAAE,aAAa,EAAA,aAAA,EACR,sBAAsB,EAClC,OAAO,EAAE,CAAC,CAAC,KAAI;oBACb,CAAC,CAAC,cAAc,EAAE;AAClB,oBAAA,OAAO,EAAE;AACX,gBAAA,CAAC,EACD,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAE7CA,IAAC,CAAC,EAAA,EAAC,SAAS,EAAC,SAAS,EAAA,aAAA,EAAa,MAAM,GAAG,EAAA,CACrC,CAAA,EAAA,CACJ;AAEX;;;;"}
|