@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.
Files changed (117) hide show
  1. package/dist/data-layer/playwright/edit-agent-category-helpers.d.ts +13 -0
  2. package/dist/data-layer/playwright/human-support-tab-helpers.d.ts +2 -2
  3. package/dist/data-layer/playwright/privacy-tab-helpers.d.ts +7 -4
  4. package/dist/data-layer/playwright/spend-limits-helpers.d.ts +7 -4
  5. package/dist/playwright/index.cjs +55 -15
  6. package/dist/playwright/index.cjs.map +1 -1
  7. package/dist/playwright/index.d.ts +16 -10
  8. package/dist/playwright/index.esm.js +55 -15
  9. package/dist/playwright/index.esm.js.map +1 -1
  10. package/dist/playwright/playwright/edit-agent-category-helpers.d.ts +13 -0
  11. package/dist/playwright/playwright/human-support-tab-helpers.d.ts +2 -2
  12. package/dist/playwright/playwright/privacy-tab-helpers.d.ts +7 -4
  13. package/dist/playwright/playwright/spend-limits-helpers.d.ts +7 -4
  14. package/dist/security/playwright/edit-agent-category-helpers.d.ts +13 -0
  15. package/dist/security/playwright/human-support-tab-helpers.d.ts +2 -2
  16. package/dist/security/playwright/privacy-tab-helpers.d.ts +7 -4
  17. package/dist/security/playwright/spend-limits-helpers.d.ts +7 -4
  18. package/dist/web-containers/playwright/edit-agent-category-helpers.d.ts +13 -0
  19. package/dist/web-containers/playwright/human-support-tab-helpers.d.ts +2 -2
  20. package/dist/web-containers/playwright/privacy-tab-helpers.d.ts +7 -4
  21. package/dist/web-containers/playwright/spend-limits-helpers.d.ts +7 -4
  22. package/dist/web-containers/source/admin/tabs/applications/applications-tab.js +5 -2
  23. package/dist/web-containers/source/admin/tabs/applications/applications-tab.js.map +1 -1
  24. package/dist/web-containers/source/applications/applications-tab.js +5 -2
  25. package/dist/web-containers/source/applications/applications-tab.js.map +1 -1
  26. package/dist/web-containers/source/applications-tab.js +5 -2
  27. package/dist/web-containers/source/applications-tab.js.map +1 -1
  28. package/dist/web-containers/source/approvals-mode-button.js +177 -0
  29. package/dist/web-containers/source/approvals-mode-button.js.map +1 -0
  30. package/dist/web-containers/source/chat/chat-host-context.js.map +1 -1
  31. package/dist/web-containers/source/chat/code-permission-card.js +39 -2
  32. package/dist/web-containers/source/chat/code-permission-card.js.map +1 -1
  33. package/dist/web-containers/source/chat-host-context.js.map +1 -1
  34. package/dist/web-containers/source/chat-input-form/approvals-mode-button.js +177 -0
  35. package/dist/web-containers/source/chat-input-form/approvals-mode-button.js.map +1 -0
  36. package/dist/web-containers/source/chat-input-form/composer-canvas-pill.js +30 -0
  37. package/dist/web-containers/source/chat-input-form/composer-canvas-pill.js.map +1 -0
  38. package/dist/web-containers/source/chat-input-form/composer-model-chip.js +23 -0
  39. package/dist/web-containers/source/chat-input-form/composer-model-chip.js.map +1 -0
  40. package/dist/web-containers/source/chat-input-form/composer-plus-menu.js +3 -3
  41. package/dist/web-containers/source/chat-input-form/composer-plus-menu.js.map +1 -1
  42. package/dist/web-containers/source/chat-input-form/composer-tool-row.js +91 -0
  43. package/dist/web-containers/source/chat-input-form/composer-tool-row.js.map +1 -0
  44. package/dist/web-containers/source/chat-input-form/cowork-control.js +7 -4
  45. package/dist/web-containers/source/chat-input-form/cowork-control.js.map +1 -1
  46. package/dist/web-containers/source/chat-input-form.js +8 -30
  47. package/dist/web-containers/source/chat-input-form.js.map +1 -1
  48. package/dist/web-containers/source/code-permission-card.js +39 -2
  49. package/dist/web-containers/source/code-permission-card.js.map +1 -1
  50. package/dist/web-containers/source/components/chat/chat-host-context.js.map +1 -1
  51. package/dist/web-containers/source/components/chat/code-permission-card.js +39 -2
  52. package/dist/web-containers/source/components/chat/code-permission-card.js.map +1 -1
  53. package/dist/web-containers/source/components/chat-input-form/approvals-mode-button.js +177 -0
  54. package/dist/web-containers/source/components/chat-input-form/approvals-mode-button.js.map +1 -0
  55. package/dist/web-containers/source/components/chat-input-form/composer-canvas-pill.js +30 -0
  56. package/dist/web-containers/source/components/chat-input-form/composer-canvas-pill.js.map +1 -0
  57. package/dist/web-containers/source/components/chat-input-form/composer-model-chip.js +23 -0
  58. package/dist/web-containers/source/components/chat-input-form/composer-model-chip.js.map +1 -0
  59. package/dist/web-containers/source/components/chat-input-form/composer-plus-menu.js +3 -3
  60. package/dist/web-containers/source/components/chat-input-form/composer-plus-menu.js.map +1 -1
  61. package/dist/web-containers/source/components/chat-input-form/composer-tool-row.js +91 -0
  62. package/dist/web-containers/source/components/chat-input-form/composer-tool-row.js.map +1 -0
  63. package/dist/web-containers/source/components/chat-input-form/cowork-control.js +7 -4
  64. package/dist/web-containers/source/components/chat-input-form/cowork-control.js.map +1 -1
  65. package/dist/web-containers/source/components/chat-input-form.js +8 -30
  66. package/dist/web-containers/source/components/chat-input-form.js.map +1 -1
  67. package/dist/web-containers/source/components/profile/admin/tabs/applications/applications-tab.js +5 -2
  68. package/dist/web-containers/source/components/profile/admin/tabs/applications/applications-tab.js.map +1 -1
  69. package/dist/web-containers/source/composer-canvas-pill.js +30 -0
  70. package/dist/web-containers/source/composer-canvas-pill.js.map +1 -0
  71. package/dist/web-containers/source/composer-model-chip.js +23 -0
  72. package/dist/web-containers/source/composer-model-chip.js.map +1 -0
  73. package/dist/web-containers/source/composer-plus-menu.js +3 -3
  74. package/dist/web-containers/source/composer-plus-menu.js.map +1 -1
  75. package/dist/web-containers/source/composer-tool-row.js +91 -0
  76. package/dist/web-containers/source/composer-tool-row.js.map +1 -0
  77. package/dist/web-containers/source/cowork-control.js +7 -4
  78. package/dist/web-containers/source/cowork-control.js.map +1 -1
  79. package/dist/web-containers/source/en.json.js +12 -1
  80. package/dist/web-containers/source/en.json.js.map +1 -1
  81. package/dist/web-containers/source/es.json.js +12 -1
  82. package/dist/web-containers/source/es.json.js.map +1 -1
  83. package/dist/web-containers/source/fr.json.js +12 -1
  84. package/dist/web-containers/source/fr.json.js.map +1 -1
  85. package/dist/web-containers/source/i18n/messages/en.json.js +12 -1
  86. package/dist/web-containers/source/i18n/messages/en.json.js.map +1 -1
  87. package/dist/web-containers/source/i18n/messages/es.json.js +12 -1
  88. package/dist/web-containers/source/i18n/messages/es.json.js.map +1 -1
  89. package/dist/web-containers/source/i18n/messages/fr.json.js +12 -1
  90. package/dist/web-containers/source/i18n/messages/fr.json.js.map +1 -1
  91. package/dist/web-containers/source/i18n/messages/zh.json.js +12 -1
  92. package/dist/web-containers/source/i18n/messages/zh.json.js.map +1 -1
  93. package/dist/web-containers/source/labels.js +23 -289
  94. package/dist/web-containers/source/labels.js.map +1 -1
  95. package/dist/web-containers/source/messages/en.json.js +12 -1
  96. package/dist/web-containers/source/messages/en.json.js.map +1 -1
  97. package/dist/web-containers/source/messages/es.json.js +12 -1
  98. package/dist/web-containers/source/messages/es.json.js.map +1 -1
  99. package/dist/web-containers/source/messages/fr.json.js +12 -1
  100. package/dist/web-containers/source/messages/fr.json.js.map +1 -1
  101. package/dist/web-containers/source/messages/zh.json.js +12 -1
  102. package/dist/web-containers/source/messages/zh.json.js.map +1 -1
  103. package/dist/web-containers/source/next/index.js +2 -0
  104. package/dist/web-containers/source/next/index.js.map +1 -1
  105. package/dist/web-containers/source/profile/admin/tabs/applications/applications-tab.js +5 -2
  106. package/dist/web-containers/source/profile/admin/tabs/applications/applications-tab.js.map +1 -1
  107. package/dist/web-containers/source/tabs/applications/applications-tab.js +5 -2
  108. package/dist/web-containers/source/tabs/applications/applications-tab.js.map +1 -1
  109. package/dist/web-containers/source/tsconfig.tsbuildinfo +1 -1
  110. package/dist/web-containers/source/web-containers/tsconfig.tsbuildinfo +1 -1
  111. package/dist/web-containers/source/zh.json.js +12 -1
  112. package/dist/web-containers/source/zh.json.js.map +1 -1
  113. package/dist/web-utils/playwright/edit-agent-category-helpers.d.ts +13 -0
  114. package/dist/web-utils/playwright/human-support-tab-helpers.d.ts +2 -2
  115. package/dist/web-utils/playwright/privacy-tab-helpers.d.ts +7 -4
  116. package/dist/web-utils/playwright/spend-limits-helpers.d.ts +7 -4
  117. 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":";;;;;;AA4PO,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;;;;"}
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":";;;;;;;AA2DA,SAAS,UAAU,GAAA;IACjB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,WAAW,IAAI,MAAM;AAC/D;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,KAAK,GAAwB,EAAE;AACrC,IAAI,OAAO,GAAwB,KAAK;AACxC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc;AACzC,IAAI,SAAS,GAAG,KAAK;AAErB,SAAS,OAAO,CAAC,IAAyB,EAAA;IACxC,OAAO,GAAG,IAAI;IACd,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;AAC3C;AAEA,SAAS,IAAI,CAAC,SAAiB,EAAA;AAC7B,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC;AAC9D,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;AACzE;AAEA,eAAe,cAAc,GAAA;AAC3B,IAAA,IAAI,SAAS,IAAI,CAAC,UAAU,EAAE;QAAE;IAChC,SAAS,GAAG,IAAI;IAChB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,uBAAuB,CAAC;AACxD,IAAA,MAAM,MAAM,CAAoB,6BAA6B,EAAE,CAAC,GAAG,KAAI;AACrE,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE;QAClE,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;AACpC,IAAA,CAAC,CAAC;AACF,IAAA,MAAM,MAAM,CAAyB,8BAA8B,EAAE,CAAC,GAAG,KACvE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAC7B;AACH;AAEA,SAAS,SAAS,CAAC,MAAkB,EAAA;AACnC,IAAA,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;IACvB,KAAK,cAAc,EAAE;AACrB,IAAA,OAAO,MAAK;AACV,QAAA,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;;;;AAI5B,IAAA,CAAC;AACH;AAEA;AACA;;;;AAIG;AACG,SAAU,oBAAoB,CAAC,OAA0B,EAAA;AAC7D,IAAA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC;QAAE;IAC9D,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC;AAChC;AAEA;AACM,SAAU,qBAAqB,CAAC,SAAiB,EAAA;IACrD,IAAI,CAAC,SAAS,CAAC;AACjB;SAEgB,yBAAyB,GAAA;AACvC,IAAA,OAAO,oBAAoB,CACzB,SAAS,EACT,MAAM,OAAO,EACb,MAAM,KAAK,CACZ;AACH;AAEA;;;;;;AAMG;SACa,yBAAyB,GAAA;AACvC,IAAA,MAAM,QAAQ,GAAG,yBAAyB,EAAE;;;IAG5C,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACnE;AAEA;;;;AAIG;SACa,4BAA4B,GAAA;IAC1C,OAAO,GAAG,KAAK;IACf,SAAS,GAAG,KAAK;IACjB,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;AAC3C;AAEA;;;;AAIG;AACH,SAAS,cAAc,CAAC,OAA0B,EAAA;;IAChD,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE;IAC/B,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,SAAS;AAC1C,IAAA,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACvC,QAAA,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;IACrE;AACA,IAAA,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACnC,QAAA,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;IACjE;IACA,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI;QACJ,SAAS,EAAE,KAAK,KAAA,IAAA,IAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,CAAC,KAAK,CAAA,CAAE,GAAG,CAAC,CAAC,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;KACzD;AACH;AAEM,SAAU,mBAAmB,CAAC,EAClC,YAAY,GAIb,EAAA;AACC,IAAA,MAAM,GAAG,GAAG,yBAAyB,EAAE;AACvC,IAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,KAAK,YAAY,CAAC;AACpE,IAAA,MAAM,CAAC,GAAG,QAAQ,EAAE;IAEpB,MAAM,MAAM,GAAG,OAAO,OAA0B,EAAE,QAAuB,KAAI;;;AAG3E,QAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;AACxB,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,YAAA,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB;QACF;AACA,QAAA,IAAI;YACF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,sBAAsB,CAAC;YACvD,MAAM,MAAM,CAAC,6BAA6B,EAAE;gBAC1C,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,QAAQ;AACT,aAAA,CAAC;QACJ;QAAE,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,CAAC,CAAC;QACtD;AACF,IAAA,CAAC;IAED;;;IAGEA,GAAA,CAAA,KAAA,EAAA,EAAA,WAAA,EAAe,QAAQ,iBAAa,uBAAuB,EAAA,QAAA,EACxD,QAAQ,CAAC,MAAM,GAAG,CAAC;;;;;QAKlBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6EAA6E,EAAA,QAAA,EACzF,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,KAAI;;gBACxB,MAAM,IAAI,GAAG,YAAY,CACvB,aAAa,CAAC,SAAS,EAAE,CAAA,EAAA,GAAA,OAAO,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,cAAc,CAAC,OAAO,CAAC,CAAC,EACtE,OAAO,CAAC,UAAU,CACnB;;AAED,gBAAA,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;gBACzD,MAAM,KAAK,GACT,CAAA,EAAA,GAAA,UAAU,CAAC,CAAA,EAAA,GAAA,OAAO,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,IAAK,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;AAChF,gBAAA,QACEC,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sEAAsE,EAAA,QAAA,EAAA,CACnFD,GAAA,CAAC,WAAW,EAAA,EAAC,SAAS,EAAC,gCAAgC,GAAG,EAC1DA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,aAAa,EAAA,QAAA,EAAE,CAAC,CAAC,mCAAmC,CAAC,EAAA,CAAQ,CAAA,EAAA,CACzE,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mDAAmD,YAC/D;kCACG,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM;kCAC5B,UAAU,CAAC,CAAA,EAAA,GAAA,OAAO,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,SAAS,CAAC;AACtC,oCAAA,CAAC,CAAC,2CAA2C,CAAC,EAAA,CAC9C,EACL,KAAK;;;wBAGJA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,4GAA4G,EAAA,QAAA,EACzH,KAAK,EAAA,CACD,CACR,EACDC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAAA,CAKrDD,IAAC,MAAM,EAAA,EACL,IAAI,EAAC,IAAI,EACT,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,gCAAgC,EAC1C,OAAO,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EAAA,QAAA,EAEtD,CAAC,CAAC,mCAAmC,CAAC,GAChC,EAGTA,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,aAAa,EACvB,OAAO,EAAE,MAAM,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAA,QAAA,EAEvD,CAAC,CAAC,kCAAkC,CAAC,GAC/B,CAAA,EAAA,CACL,CAAA,EAAA,EA1CE,OAAO,CAAC,UAAU,CA2CtB;AAEV,YAAA,CAAC,CAAC,EAAA,CACE,CACP,EAAA,CACG;AAEV;;;;"}
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":"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"}
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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"}
@@ -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;;;;"}