@tai42/studio-sdk 30.0.0 → 31.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/README.md +98 -10
  2. package/dist/components/agent-picker.d.ts +1 -1
  3. package/dist/components/agent-picker.d.ts.map +1 -1
  4. package/dist/components/agent-picker.js +1 -0
  5. package/dist/components/agent-picker.js.map +1 -1
  6. package/dist/components/channel-picker.d.ts +1 -1
  7. package/dist/components/channel-picker.d.ts.map +1 -1
  8. package/dist/components/channel-picker.js +1 -0
  9. package/dist/components/channel-picker.js.map +1 -1
  10. package/dist/components/combo-draft-editor.d.ts +31 -0
  11. package/dist/components/combo-draft-editor.d.ts.map +1 -0
  12. package/dist/components/combo-draft-editor.js +16 -0
  13. package/dist/components/combo-draft-editor.js.map +1 -0
  14. package/dist/components/committed-combo-list.d.ts +17 -0
  15. package/dist/components/committed-combo-list.d.ts.map +1 -0
  16. package/dist/components/{extension-combo-parts.js → committed-combo-list.js} +2 -22
  17. package/dist/components/committed-combo-list.js.map +1 -0
  18. package/dist/components/components.css +53 -0
  19. package/dist/components/explorer-body.d.ts +1 -0
  20. package/dist/components/explorer-body.d.ts.map +1 -1
  21. package/dist/components/explorer-body.js +6 -4
  22. package/dist/components/explorer-body.js.map +1 -1
  23. package/dist/components/explorer-view.d.ts +16 -7
  24. package/dist/components/explorer-view.d.ts.map +1 -1
  25. package/dist/components/explorer-view.js +27 -13
  26. package/dist/components/explorer-view.js.map +1 -1
  27. package/dist/components/extension-combo-builder.d.ts +4 -4
  28. package/dist/components/extension-combo-builder.js +3 -2
  29. package/dist/components/extension-combo-builder.js.map +1 -1
  30. package/dist/components/extension-config-editor.js.map +1 -1
  31. package/dist/components/field.d.ts +6 -0
  32. package/dist/components/field.d.ts.map +1 -1
  33. package/dist/components/field.js +15 -2
  34. package/dist/components/field.js.map +1 -1
  35. package/dist/components/folder-actions.d.ts +51 -0
  36. package/dist/components/folder-actions.d.ts.map +1 -0
  37. package/dist/components/folder-actions.js +173 -0
  38. package/dist/components/folder-actions.js.map +1 -0
  39. package/dist/components/folder-filing.d.ts +32 -0
  40. package/dist/components/folder-filing.d.ts.map +1 -0
  41. package/dist/components/folder-filing.js +51 -0
  42. package/dist/components/folder-filing.js.map +1 -0
  43. package/dist/components/folder-nav.d.ts +9 -4
  44. package/dist/components/folder-nav.d.ts.map +1 -1
  45. package/dist/components/folder-nav.js +18 -22
  46. package/dist/components/folder-nav.js.map +1 -1
  47. package/dist/components/folder-occupancy.d.ts +27 -0
  48. package/dist/components/folder-occupancy.d.ts.map +1 -0
  49. package/dist/components/folder-occupancy.js +54 -0
  50. package/dist/components/folder-occupancy.js.map +1 -0
  51. package/dist/components/named-list-picker.d.ts +5 -3
  52. package/dist/components/named-list-picker.d.ts.map +1 -1
  53. package/dist/components/named-list-picker.js +7 -7
  54. package/dist/components/named-list-picker.js.map +1 -1
  55. package/dist/components/primitives.d.ts +2 -1
  56. package/dist/components/primitives.d.ts.map +1 -1
  57. package/dist/components/primitives.js +2 -1
  58. package/dist/components/primitives.js.map +1 -1
  59. package/dist/components/searchable-select-model.d.ts +40 -0
  60. package/dist/components/searchable-select-model.d.ts.map +1 -0
  61. package/dist/components/searchable-select-model.js +69 -0
  62. package/dist/components/searchable-select-model.js.map +1 -0
  63. package/dist/components/searchable-select.d.ts +38 -0
  64. package/dist/components/searchable-select.d.ts.map +1 -0
  65. package/dist/components/searchable-select.js +200 -0
  66. package/dist/components/searchable-select.js.map +1 -0
  67. package/dist/components/selected-tool-badges.d.ts +13 -0
  68. package/dist/components/selected-tool-badges.d.ts.map +1 -0
  69. package/dist/components/selected-tool-badges.js +14 -0
  70. package/dist/components/selected-tool-badges.js.map +1 -0
  71. package/dist/components/subject-section.d.ts.map +1 -1
  72. package/dist/components/subject-section.js +2 -2
  73. package/dist/components/subject-section.js.map +1 -1
  74. package/dist/components/table.d.ts +7 -1
  75. package/dist/components/table.d.ts.map +1 -1
  76. package/dist/components/table.js +2 -2
  77. package/dist/components/table.js.map +1 -1
  78. package/dist/components/tag-filter-field.d.ts +11 -0
  79. package/dist/components/tag-filter-field.d.ts.map +1 -0
  80. package/dist/components/tag-filter-field.js +15 -0
  81. package/dist/components/tag-filter-field.js.map +1 -0
  82. package/dist/components/tool-meta-access.d.ts +28 -0
  83. package/dist/components/tool-meta-access.d.ts.map +1 -0
  84. package/dist/components/tool-meta-access.js +65 -0
  85. package/dist/components/tool-meta-access.js.map +1 -0
  86. package/dist/components/tool-name-entry.d.ts +26 -0
  87. package/dist/components/tool-name-entry.d.ts.map +1 -0
  88. package/dist/components/tool-name-entry.js +43 -0
  89. package/dist/components/tool-name-entry.js.map +1 -0
  90. package/dist/components/tool-picker.d.ts +24 -19
  91. package/dist/components/tool-picker.d.ts.map +1 -1
  92. package/dist/components/tool-picker.js +55 -35
  93. package/dist/components/tool-picker.js.map +1 -1
  94. package/dist/components/tool-select.d.ts +26 -0
  95. package/dist/components/tool-select.d.ts.map +1 -0
  96. package/dist/components/tool-select.js +82 -0
  97. package/dist/components/tool-select.js.map +1 -0
  98. package/dist/extension-combos.d.ts +6 -1
  99. package/dist/extension-combos.d.ts.map +1 -1
  100. package/dist/extension-combos.js +8 -0
  101. package/dist/extension-combos.js.map +1 -1
  102. package/dist/hooks/useApi.d.ts +1 -0
  103. package/dist/hooks/useApi.d.ts.map +1 -1
  104. package/dist/hooks/useSystemKinds.d.ts +27 -12
  105. package/dist/hooks/useSystemKinds.d.ts.map +1 -1
  106. package/dist/hooks/useSystemKinds.js +56 -16
  107. package/dist/hooks/useSystemKinds.js.map +1 -1
  108. package/dist/index.d.ts +51 -49
  109. package/dist/index.d.ts.map +1 -1
  110. package/dist/index.js +34 -26
  111. package/dist/index.js.map +1 -1
  112. package/dist/marketplace-install/use-mount-install.d.ts +6 -6
  113. package/dist/plugin/version.d.ts +1 -1
  114. package/dist/plugin/version.js +1 -1
  115. package/dist/schema-editor/SchemaEditor.d.ts +7 -2
  116. package/dist/schema-editor/SchemaEditor.d.ts.map +1 -1
  117. package/dist/schema-editor/SchemaEditor.js +1 -1
  118. package/dist/schema-editor/SchemaEditor.js.map +1 -1
  119. package/dist/schema-editor/index.d.ts +2 -2
  120. package/dist/schema-editor/index.d.ts.map +1 -1
  121. package/dist/schema-form/array-field.d.ts.map +1 -1
  122. package/dist/schema-form/array-field.js +6 -2
  123. package/dist/schema-form/array-field.js.map +1 -1
  124. package/dist/schema-form/classify.d.ts +4 -1
  125. package/dist/schema-form/classify.d.ts.map +1 -1
  126. package/dist/schema-form/classify.js +36 -15
  127. package/dist/schema-form/classify.js.map +1 -1
  128. package/dist/schema-form/collapsed-object-field.d.ts +20 -0
  129. package/dist/schema-form/collapsed-object-field.d.ts.map +1 -0
  130. package/dist/schema-form/collapsed-object-field.js +14 -0
  131. package/dist/schema-form/collapsed-object-field.js.map +1 -0
  132. package/dist/schema-form/context.d.ts +27 -1
  133. package/dist/schema-form/context.d.ts.map +1 -1
  134. package/dist/schema-form/context.js +14 -0
  135. package/dist/schema-form/context.js.map +1 -1
  136. package/dist/schema-form/default-value.d.ts +21 -6
  137. package/dist/schema-form/default-value.d.ts.map +1 -1
  138. package/dist/schema-form/default-value.js +74 -15
  139. package/dist/schema-form/default-value.js.map +1 -1
  140. package/dist/schema-form/expression-field.d.ts +48 -0
  141. package/dist/schema-form/expression-field.d.ts.map +1 -0
  142. package/dist/schema-form/expression-field.js +88 -0
  143. package/dist/schema-form/expression-field.js.map +1 -0
  144. package/dist/schema-form/field-model.d.ts +23 -4
  145. package/dist/schema-form/field-model.d.ts.map +1 -1
  146. package/dist/schema-form/field-node.d.ts.map +1 -1
  147. package/dist/schema-form/field-node.js +16 -3
  148. package/dist/schema-form/field-node.js.map +1 -1
  149. package/dist/schema-form/index.d.ts +3 -3
  150. package/dist/schema-form/index.d.ts.map +1 -1
  151. package/dist/schema-form/index.js +2 -2
  152. package/dist/schema-form/index.js.map +1 -1
  153. package/dist/schema-form/object-fields.d.ts +6 -3
  154. package/dist/schema-form/object-fields.d.ts.map +1 -1
  155. package/dist/schema-form/object-fields.js +14 -3
  156. package/dist/schema-form/object-fields.js.map +1 -1
  157. package/dist/schema-form/record-field.d.ts.map +1 -1
  158. package/dist/schema-form/record-field.js +6 -2
  159. package/dist/schema-form/record-field.js.map +1 -1
  160. package/dist/schema-form/seeding-action.d.ts +15 -0
  161. package/dist/schema-form/seeding-action.d.ts.map +1 -0
  162. package/dist/schema-form/seeding-action.js +35 -0
  163. package/dist/schema-form/seeding-action.js.map +1 -0
  164. package/dist/schema-form/string-annotations.d.ts +22 -8
  165. package/dist/schema-form/string-annotations.d.ts.map +1 -1
  166. package/dist/schema-form/string-annotations.js +39 -14
  167. package/dist/schema-form/string-annotations.js.map +1 -1
  168. package/dist/schema-form/string-field.js +2 -84
  169. package/dist/schema-form/string-field.js.map +1 -1
  170. package/dist/schema-form/templated-field.d.ts +13 -0
  171. package/dist/schema-form/templated-field.d.ts.map +1 -0
  172. package/dist/schema-form/templated-field.js +43 -0
  173. package/dist/schema-form/templated-field.js.map +1 -0
  174. package/dist/schema-form/union-field.d.ts.map +1 -1
  175. package/dist/schema-form/union-field.js +6 -2
  176. package/dist/schema-form/union-field.js.map +1 -1
  177. package/dist/schema-form/union.d.ts +4 -4
  178. package/dist/schema-form/union.d.ts.map +1 -1
  179. package/dist/schema-form/union.js +8 -1
  180. package/dist/schema-form/union.js.map +1 -1
  181. package/dist/schema-form/validate.d.ts.map +1 -1
  182. package/dist/schema-form/validate.js +28 -0
  183. package/dist/schema-form/validate.js.map +1 -1
  184. package/dist/search-match.d.ts +29 -0
  185. package/dist/search-match.d.ts.map +1 -0
  186. package/dist/search-match.js +38 -0
  187. package/dist/search-match.js.map +1 -0
  188. package/dist/tool-organization.d.ts +15 -0
  189. package/dist/tool-organization.d.ts.map +1 -0
  190. package/dist/tool-organization.js +6 -0
  191. package/dist/tool-organization.js.map +1 -0
  192. package/package.json +3 -2
  193. package/src/components/agent-picker.tsx +2 -1
  194. package/src/components/channel-picker.tsx +2 -1
  195. package/src/components/combo-draft-editor.tsx +96 -0
  196. package/src/components/{extension-combo-parts.tsx → committed-combo-list.tsx} +4 -105
  197. package/src/components/components.css +53 -0
  198. package/src/components/explorer-body.tsx +29 -5
  199. package/src/components/explorer-view.tsx +48 -17
  200. package/src/components/extension-combo-builder.tsx +10 -10
  201. package/src/components/extension-config-editor.tsx +3 -3
  202. package/src/components/field.tsx +18 -2
  203. package/src/components/folder-actions.tsx +341 -0
  204. package/src/components/folder-filing.tsx +109 -0
  205. package/src/components/folder-nav.tsx +26 -10
  206. package/src/components/folder-occupancy.ts +83 -0
  207. package/src/components/named-list-picker.tsx +11 -7
  208. package/src/components/primitives.tsx +2 -1
  209. package/src/components/searchable-select-model.ts +105 -0
  210. package/src/components/searchable-select.tsx +432 -0
  211. package/src/components/selected-tool-badges.tsx +41 -0
  212. package/src/components/subject-section.tsx +3 -2
  213. package/src/components/table.tsx +12 -2
  214. package/src/components/tag-filter-field.tsx +37 -0
  215. package/src/components/tool-meta-access.tsx +101 -0
  216. package/src/components/tool-name-entry.tsx +77 -0
  217. package/src/components/tool-picker.tsx +87 -52
  218. package/src/components/tool-select.tsx +136 -0
  219. package/src/extension-combos.ts +15 -1
  220. package/src/hooks/useSystemKinds.tsx +77 -17
  221. package/src/index.ts +98 -94
  222. package/src/plugin/version.ts +1 -1
  223. package/src/schema-editor/SchemaEditor.tsx +9 -3
  224. package/src/schema-editor/index.ts +2 -2
  225. package/src/schema-form/array-field.tsx +10 -2
  226. package/src/schema-form/classify.ts +41 -15
  227. package/src/schema-form/collapsed-object-field.tsx +56 -0
  228. package/src/schema-form/context.ts +33 -1
  229. package/src/schema-form/default-value.ts +89 -15
  230. package/src/schema-form/expression-field.tsx +162 -0
  231. package/src/schema-form/field-model.ts +27 -4
  232. package/src/schema-form/field-node.tsx +41 -2
  233. package/src/schema-form/index.ts +3 -2
  234. package/src/schema-form/object-fields.tsx +11 -4
  235. package/src/schema-form/record-field.tsx +10 -2
  236. package/src/schema-form/seeding-action.ts +44 -0
  237. package/src/schema-form/string-annotations.ts +40 -14
  238. package/src/schema-form/string-field.tsx +2 -147
  239. package/src/schema-form/templated-field.tsx +124 -0
  240. package/src/schema-form/union-field.tsx +11 -2
  241. package/src/schema-form/union.ts +12 -5
  242. package/src/schema-form/validate.ts +28 -0
  243. package/src/search-match.ts +41 -0
  244. package/src/tool-organization.ts +34 -0
  245. package/dist/components/extension-combo-parts.d.ts +0 -46
  246. package/dist/components/extension-combo-parts.d.ts.map +0 -1
  247. package/dist/components/extension-combo-parts.js.map +0 -1
  248. package/dist/components/tool-picker-parts.d.ts +0 -43
  249. package/dist/components/tool-picker-parts.d.ts.map +0 -1
  250. package/dist/components/tool-picker-parts.js +0 -89
  251. package/dist/components/tool-picker-parts.js.map +0 -1
  252. package/src/components/tool-picker-parts.tsx +0 -195
@@ -1,43 +0,0 @@
1
- /**
2
- * The pieces of `ToolPicker`: the tool `Select` itself (grouped or flat), the tag
3
- * filter field, and the selected tool's capability badges. The picker owns the
4
- * state and composes these; the option-label and grouping helpers live here too.
5
- */
6
- import type { ReactNode } from 'react';
7
- import { type SelectOption } from './select';
8
- /** The shared informational note every badge surface carries: declared, never enforced. */
9
- export declare const BADGES_NOTE = "Declared capability labels \u2014 informational only. They describe what the tool touches; the server never enforces them.";
10
- export declare const ALL_TAGS = "__all_tags__";
11
- interface ToolSelectProps {
12
- readonly tagsByTool: Readonly<Record<string, readonly string[]>> | undefined;
13
- readonly filtered: readonly string[];
14
- readonly value: string | null;
15
- readonly onChange: (toolName: string) => void;
16
- readonly placeholder: string;
17
- readonly ariaLabel: string | undefined;
18
- readonly disabled: boolean | undefined;
19
- readonly displayNames: Readonly<Record<string, string>> | undefined;
20
- readonly agentToolNames: ReadonlySet<string> | undefined;
21
- /** An option drawn ahead of the list's own (a stored value the list does not carry). */
22
- readonly leading: SelectOption | undefined;
23
- readonly ariaDescribedBy: string | undefined;
24
- }
25
- /** The tool select: grouped by tag when `tagsByTool` is present, else a flat list.
26
- * Either branch is a `Select`, which claims the enclosing `Field`'s control id. */
27
- export declare function ToolSelect({ tagsByTool, filtered, value, onChange, placeholder, ariaLabel, disabled, displayNames, agentToolNames, leading, ariaDescribedBy, }: ToolSelectProps): ReactNode;
28
- /** The tag filter: an "All tags" sentinel plus one option per distinct tag. */
29
- export declare function TagFilterField({ allTags, tagFilter, onTagFilterChange, disabled, }: {
30
- readonly allTags: readonly string[];
31
- readonly tagFilter: string;
32
- readonly onTagFilterChange: (value: string) => void;
33
- readonly disabled: boolean | undefined;
34
- }): ReactNode;
35
- /** The selected tool's DECLARED capability badges, read-only and informational.
36
- * Renders nothing unless the selected tool carries badges. */
37
- export declare function SelectedToolBadges({ value, badgesByTool, idPrefix, }: {
38
- readonly value: string | null;
39
- readonly badgesByTool: Readonly<Record<string, readonly string[]>> | undefined;
40
- readonly idPrefix: string;
41
- }): ReactNode;
42
- export {};
43
- //# sourceMappingURL=tool-picker-parts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-picker-parts.d.ts","sourceRoot":"","sources":["../../src/components/tool-picker-parts.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAGvE,2FAA2F;AAC3F,eAAO,MAAM,WAAW,+HACiG,CAAC;AAO1H,eAAO,MAAM,QAAQ,iBAAiB,CAAC;AAkDvC,UAAU,eAAe;IACvB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAC7E,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACpE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACzD,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED;oFACoF;AACpF,wBAAgB,UAAU,CAAC,EACzB,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,OAAO,EACP,eAAe,GAChB,EAAE,eAAe,GAAG,SAAS,CAmC7B;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CACxC,GAAG,SAAS,CAcZ;AAED;+DAC+D;AAC/D,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,YAAY,EACZ,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,GAAG,SAAS,CAmBZ"}
@@ -1,89 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { toolDisplayLabel } from '../hooks/useToolDisplayNames';
3
- import { Badge } from './badge';
4
- import { Field } from './field';
5
- import { Select } from './select';
6
- import { Tooltip } from './tooltip';
7
- /** The shared informational note every badge surface carries: declared, never enforced. */
8
- export const BADGES_NOTE = 'Declared capability labels — informational only. They describe what the tool touches; the server never enforces them.';
9
- const NO_DISPLAY_NAMES = {};
10
- const UNTAGGED = 'Untagged';
11
- // Radix `Select.Item` forbids an empty-string value, so the "no filter" choice
12
- // uses a sentinel rather than ''. A tool literally tagged this string would just
13
- // never be filtered out — harmless for a UI convenience whose authority is the server.
14
- export const ALL_TAGS = '__all_tags__';
15
- /** The group a tool sorts into: its alphabetically-first tag, else "Untagged". */
16
- function groupFor(name, tagsByTool) {
17
- const tags = [...(tagsByTool[name] ?? [])].sort((a, b) => a.localeCompare(b));
18
- return tags[0] ?? UNTAGGED;
19
- }
20
- /**
21
- * The option label: `Display Name (raw)` when a distinct non-empty display name maps
22
- * the name, else the bare name; either way suffixed " (agent)" for an agent run tool.
23
- */
24
- function optionLabel(name, displayNames, agentToolNames) {
25
- const base = toolDisplayLabel(displayNames ?? NO_DISPLAY_NAMES, name);
26
- return agentToolNames?.has(name) === true ? `${base} (agent)` : base;
27
- }
28
- /** Build the grouped option clusters (sorted group labels, "Untagged" last). */
29
- function buildGroups(names, tagsByTool, displayNames, agentToolNames) {
30
- const byGroup = new Map();
31
- for (const name of names) {
32
- const group = groupFor(name, tagsByTool);
33
- const bucket = byGroup.get(group) ?? [];
34
- bucket.push(name);
35
- byGroup.set(group, bucket);
36
- }
37
- return [...byGroup.entries()]
38
- .sort(([a], [b]) => {
39
- if (a === UNTAGGED)
40
- return 1;
41
- if (b === UNTAGGED)
42
- return -1;
43
- return a.localeCompare(b);
44
- })
45
- .map(([label, groupNames]) => ({
46
- label,
47
- options: groupNames.map((name) => ({
48
- value: name,
49
- label: optionLabel(name, displayNames, agentToolNames),
50
- })),
51
- }));
52
- }
53
- /** The tool select: grouped by tag when `tagsByTool` is present, else a flat list.
54
- * Either branch is a `Select`, which claims the enclosing `Field`'s control id. */
55
- export function ToolSelect({ tagsByTool, filtered, value, onChange, placeholder, ariaLabel, disabled, displayNames, agentToolNames, leading, ariaDescribedBy, }) {
56
- if (tagsByTool !== undefined) {
57
- const groups = buildGroups(filtered, tagsByTool, displayNames, agentToolNames);
58
- return (_jsx(Select, { groups: leading === undefined ? groups : [{ label: leading.label, options: [leading] }, ...groups], value: value ?? '', onValueChange: onChange, placeholder: placeholder, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, disabled: disabled }));
59
- }
60
- const options = filtered.map((name) => ({
61
- value: name,
62
- label: optionLabel(name, displayNames, agentToolNames),
63
- }));
64
- return (_jsx(Select
65
- // Keep Radix controlled even when the caller's value is null: `''` matches no
66
- // item (placeholder still shows) and avoids the uncontrolled→controlled warning
67
- // a subsequent selection would otherwise trigger.
68
- , {
69
- // Keep Radix controlled even when the caller's value is null: `''` matches no
70
- // item (placeholder still shows) and avoids the uncontrolled→controlled warning
71
- // a subsequent selection would otherwise trigger.
72
- options: leading === undefined ? options : [leading, ...options], value: value ?? '', onValueChange: onChange, placeholder: placeholder, "aria-label": ariaLabel, "aria-describedby": ariaDescribedBy, disabled: disabled }));
73
- }
74
- /** The tag filter: an "All tags" sentinel plus one option per distinct tag. */
75
- export function TagFilterField({ allTags, tagFilter, onTagFilterChange, disabled, }) {
76
- return (_jsx(Field, { label: "Filter by tag", children: _jsx(Select, { options: [
77
- { value: ALL_TAGS, label: 'All tags' },
78
- ...allTags.map((tag) => ({ value: tag, label: tag })),
79
- ], value: tagFilter, onValueChange: onTagFilterChange, disabled: disabled }) }));
80
- }
81
- /** The selected tool's DECLARED capability badges, read-only and informational.
82
- * Renders nothing unless the selected tool carries badges. */
83
- export function SelectedToolBadges({ value, badgesByTool, idPrefix, }) {
84
- if (value === null || badgesByTool === undefined || (badgesByTool[value]?.length ?? 0) === 0) {
85
- return null;
86
- }
87
- return (_jsx(Tooltip, { content: BADGES_NOTE, children: _jsx("span", { className: "tai-row", "data-testid": `${idPrefix}-badges`, style: { gap: 'var(--tai-space-1)' }, children: (badgesByTool[value] ?? []).map((badge) => (_jsx(Badge, { variant: "neutral", children: badge }, badge))) }) }));
88
- }
89
- //# sourceMappingURL=tool-picker-parts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-picker-parts.js","sourceRoot":"","sources":["../../src/components/tool-picker-parts.tsx"],"names":[],"mappings":"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"}
@@ -1,195 +0,0 @@
1
- /**
2
- * The pieces of `ToolPicker`: the tool `Select` itself (grouped or flat), the tag
3
- * filter field, and the selected tool's capability badges. The picker owns the
4
- * state and composes these; the option-label and grouping helpers live here too.
5
- */
6
- import type { ReactNode } from 'react';
7
-
8
- import { toolDisplayLabel } from '../hooks/useToolDisplayNames';
9
- import { Badge } from './badge';
10
- import { Field } from './field';
11
- import { Select, type SelectGroup, type SelectOption } from './select';
12
- import { Tooltip } from './tooltip';
13
-
14
- /** The shared informational note every badge surface carries: declared, never enforced. */
15
- export const BADGES_NOTE =
16
- 'Declared capability labels — informational only. They describe what the tool touches; the server never enforces them.';
17
-
18
- const NO_DISPLAY_NAMES: Readonly<Record<string, string>> = {};
19
- const UNTAGGED = 'Untagged';
20
- // Radix `Select.Item` forbids an empty-string value, so the "no filter" choice
21
- // uses a sentinel rather than ''. A tool literally tagged this string would just
22
- // never be filtered out — harmless for a UI convenience whose authority is the server.
23
- export const ALL_TAGS = '__all_tags__';
24
-
25
- /** The group a tool sorts into: its alphabetically-first tag, else "Untagged". */
26
- function groupFor(name: string, tagsByTool: Readonly<Record<string, readonly string[]>>): string {
27
- const tags = [...(tagsByTool[name] ?? [])].sort((a, b) => a.localeCompare(b));
28
- return tags[0] ?? UNTAGGED;
29
- }
30
-
31
- /**
32
- * The option label: `Display Name (raw)` when a distinct non-empty display name maps
33
- * the name, else the bare name; either way suffixed " (agent)" for an agent run tool.
34
- */
35
- function optionLabel(
36
- name: string,
37
- displayNames: Readonly<Record<string, string>> | undefined,
38
- agentToolNames: ReadonlySet<string> | undefined,
39
- ): string {
40
- const base = toolDisplayLabel(displayNames ?? NO_DISPLAY_NAMES, name);
41
- return agentToolNames?.has(name) === true ? `${base} (agent)` : base;
42
- }
43
-
44
- /** Build the grouped option clusters (sorted group labels, "Untagged" last). */
45
- function buildGroups(
46
- names: readonly string[],
47
- tagsByTool: Readonly<Record<string, readonly string[]>>,
48
- displayNames: Readonly<Record<string, string>> | undefined,
49
- agentToolNames: ReadonlySet<string> | undefined,
50
- ): SelectGroup[] {
51
- const byGroup = new Map<string, string[]>();
52
- for (const name of names) {
53
- const group = groupFor(name, tagsByTool);
54
- const bucket = byGroup.get(group) ?? [];
55
- bucket.push(name);
56
- byGroup.set(group, bucket);
57
- }
58
- return [...byGroup.entries()]
59
- .sort(([a], [b]) => {
60
- if (a === UNTAGGED) return 1;
61
- if (b === UNTAGGED) return -1;
62
- return a.localeCompare(b);
63
- })
64
- .map(([label, groupNames]) => ({
65
- label,
66
- options: groupNames.map((name) => ({
67
- value: name,
68
- label: optionLabel(name, displayNames, agentToolNames),
69
- })),
70
- }));
71
- }
72
-
73
- interface ToolSelectProps {
74
- readonly tagsByTool: Readonly<Record<string, readonly string[]>> | undefined;
75
- readonly filtered: readonly string[];
76
- readonly value: string | null;
77
- readonly onChange: (toolName: string) => void;
78
- readonly placeholder: string;
79
- readonly ariaLabel: string | undefined;
80
- readonly disabled: boolean | undefined;
81
- readonly displayNames: Readonly<Record<string, string>> | undefined;
82
- readonly agentToolNames: ReadonlySet<string> | undefined;
83
- /** An option drawn ahead of the list's own (a stored value the list does not carry). */
84
- readonly leading: SelectOption | undefined;
85
- readonly ariaDescribedBy: string | undefined;
86
- }
87
-
88
- /** The tool select: grouped by tag when `tagsByTool` is present, else a flat list.
89
- * Either branch is a `Select`, which claims the enclosing `Field`'s control id. */
90
- export function ToolSelect({
91
- tagsByTool,
92
- filtered,
93
- value,
94
- onChange,
95
- placeholder,
96
- ariaLabel,
97
- disabled,
98
- displayNames,
99
- agentToolNames,
100
- leading,
101
- ariaDescribedBy,
102
- }: ToolSelectProps): ReactNode {
103
- if (tagsByTool !== undefined) {
104
- const groups = buildGroups(filtered, tagsByTool, displayNames, agentToolNames);
105
- return (
106
- <Select
107
- groups={
108
- leading === undefined ? groups : [{ label: leading.label, options: [leading] }, ...groups]
109
- }
110
- value={value ?? ''}
111
- onValueChange={onChange}
112
- placeholder={placeholder}
113
- aria-label={ariaLabel}
114
- aria-describedby={ariaDescribedBy}
115
- disabled={disabled}
116
- />
117
- );
118
- }
119
- const options = filtered.map((name) => ({
120
- value: name,
121
- label: optionLabel(name, displayNames, agentToolNames),
122
- }));
123
- return (
124
- <Select
125
- // Keep Radix controlled even when the caller's value is null: `''` matches no
126
- // item (placeholder still shows) and avoids the uncontrolled→controlled warning
127
- // a subsequent selection would otherwise trigger.
128
- options={leading === undefined ? options : [leading, ...options]}
129
- value={value ?? ''}
130
- onValueChange={onChange}
131
- placeholder={placeholder}
132
- aria-label={ariaLabel}
133
- aria-describedby={ariaDescribedBy}
134
- disabled={disabled}
135
- />
136
- );
137
- }
138
-
139
- /** The tag filter: an "All tags" sentinel plus one option per distinct tag. */
140
- export function TagFilterField({
141
- allTags,
142
- tagFilter,
143
- onTagFilterChange,
144
- disabled,
145
- }: {
146
- readonly allTags: readonly string[];
147
- readonly tagFilter: string;
148
- readonly onTagFilterChange: (value: string) => void;
149
- readonly disabled: boolean | undefined;
150
- }): ReactNode {
151
- return (
152
- <Field label="Filter by tag">
153
- <Select
154
- options={[
155
- { value: ALL_TAGS, label: 'All tags' },
156
- ...allTags.map((tag) => ({ value: tag, label: tag })),
157
- ]}
158
- value={tagFilter}
159
- onValueChange={onTagFilterChange}
160
- disabled={disabled}
161
- />
162
- </Field>
163
- );
164
- }
165
-
166
- /** The selected tool's DECLARED capability badges, read-only and informational.
167
- * Renders nothing unless the selected tool carries badges. */
168
- export function SelectedToolBadges({
169
- value,
170
- badgesByTool,
171
- idPrefix,
172
- }: {
173
- readonly value: string | null;
174
- readonly badgesByTool: Readonly<Record<string, readonly string[]>> | undefined;
175
- readonly idPrefix: string;
176
- }): ReactNode {
177
- if (value === null || badgesByTool === undefined || (badgesByTool[value]?.length ?? 0) === 0) {
178
- return null;
179
- }
180
- return (
181
- <Tooltip content={BADGES_NOTE}>
182
- <span
183
- className="tai-row"
184
- data-testid={`${idPrefix}-badges`}
185
- style={{ gap: 'var(--tai-space-1)' }}
186
- >
187
- {(badgesByTool[value] ?? []).map((badge) => (
188
- <Badge key={badge} variant="neutral">
189
- {badge}
190
- </Badge>
191
- ))}
192
- </span>
193
- </Tooltip>
194
- );
195
- }