@tai42/studio-sdk 30.0.1 → 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 (215) 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/components.css +53 -0
  11. package/dist/components/explorer-body.d.ts +1 -0
  12. package/dist/components/explorer-body.d.ts.map +1 -1
  13. package/dist/components/explorer-body.js +6 -4
  14. package/dist/components/explorer-body.js.map +1 -1
  15. package/dist/components/explorer-view.d.ts +16 -7
  16. package/dist/components/explorer-view.d.ts.map +1 -1
  17. package/dist/components/explorer-view.js +27 -13
  18. package/dist/components/explorer-view.js.map +1 -1
  19. package/dist/components/extension-config-editor.js.map +1 -1
  20. package/dist/components/field.d.ts +6 -0
  21. package/dist/components/field.d.ts.map +1 -1
  22. package/dist/components/field.js +15 -2
  23. package/dist/components/field.js.map +1 -1
  24. package/dist/components/folder-actions.d.ts +51 -0
  25. package/dist/components/folder-actions.d.ts.map +1 -0
  26. package/dist/components/folder-actions.js +173 -0
  27. package/dist/components/folder-actions.js.map +1 -0
  28. package/dist/components/folder-filing.d.ts +32 -0
  29. package/dist/components/folder-filing.d.ts.map +1 -0
  30. package/dist/components/folder-filing.js +51 -0
  31. package/dist/components/folder-filing.js.map +1 -0
  32. package/dist/components/folder-nav.d.ts +9 -4
  33. package/dist/components/folder-nav.d.ts.map +1 -1
  34. package/dist/components/folder-nav.js +18 -22
  35. package/dist/components/folder-nav.js.map +1 -1
  36. package/dist/components/folder-occupancy.d.ts +27 -0
  37. package/dist/components/folder-occupancy.d.ts.map +1 -0
  38. package/dist/components/folder-occupancy.js +54 -0
  39. package/dist/components/folder-occupancy.js.map +1 -0
  40. package/dist/components/named-list-picker.d.ts +5 -3
  41. package/dist/components/named-list-picker.d.ts.map +1 -1
  42. package/dist/components/named-list-picker.js +7 -7
  43. package/dist/components/named-list-picker.js.map +1 -1
  44. package/dist/components/primitives.d.ts +2 -1
  45. package/dist/components/primitives.d.ts.map +1 -1
  46. package/dist/components/primitives.js +2 -1
  47. package/dist/components/primitives.js.map +1 -1
  48. package/dist/components/searchable-select-model.d.ts +40 -0
  49. package/dist/components/searchable-select-model.d.ts.map +1 -0
  50. package/dist/components/searchable-select-model.js +69 -0
  51. package/dist/components/searchable-select-model.js.map +1 -0
  52. package/dist/components/searchable-select.d.ts +38 -0
  53. package/dist/components/searchable-select.d.ts.map +1 -0
  54. package/dist/components/searchable-select.js +200 -0
  55. package/dist/components/searchable-select.js.map +1 -0
  56. package/dist/components/subject-section.d.ts.map +1 -1
  57. package/dist/components/subject-section.js +2 -2
  58. package/dist/components/subject-section.js.map +1 -1
  59. package/dist/components/table.d.ts +7 -1
  60. package/dist/components/table.d.ts.map +1 -1
  61. package/dist/components/table.js +2 -2
  62. package/dist/components/table.js.map +1 -1
  63. package/dist/components/tool-meta-access.d.ts +28 -0
  64. package/dist/components/tool-meta-access.d.ts.map +1 -0
  65. package/dist/components/tool-meta-access.js +65 -0
  66. package/dist/components/tool-meta-access.js.map +1 -0
  67. package/dist/components/tool-name-entry.d.ts +26 -0
  68. package/dist/components/tool-name-entry.d.ts.map +1 -0
  69. package/dist/components/tool-name-entry.js +43 -0
  70. package/dist/components/tool-name-entry.js.map +1 -0
  71. package/dist/components/tool-picker.d.ts +23 -18
  72. package/dist/components/tool-picker.d.ts.map +1 -1
  73. package/dist/components/tool-picker.js +51 -33
  74. package/dist/components/tool-picker.js.map +1 -1
  75. package/dist/components/tool-select.d.ts +6 -5
  76. package/dist/components/tool-select.d.ts.map +1 -1
  77. package/dist/components/tool-select.js +31 -14
  78. package/dist/components/tool-select.js.map +1 -1
  79. package/dist/hooks/useApi.d.ts +1 -0
  80. package/dist/hooks/useApi.d.ts.map +1 -1
  81. package/dist/hooks/useSystemKinds.d.ts +27 -12
  82. package/dist/hooks/useSystemKinds.d.ts.map +1 -1
  83. package/dist/hooks/useSystemKinds.js +56 -16
  84. package/dist/hooks/useSystemKinds.js.map +1 -1
  85. package/dist/index.d.ts +51 -49
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +34 -26
  88. package/dist/index.js.map +1 -1
  89. package/dist/marketplace-install/use-mount-install.d.ts +6 -6
  90. package/dist/plugin/version.d.ts +1 -1
  91. package/dist/plugin/version.js +1 -1
  92. package/dist/schema-editor/SchemaEditor.d.ts +7 -2
  93. package/dist/schema-editor/SchemaEditor.d.ts.map +1 -1
  94. package/dist/schema-editor/SchemaEditor.js +1 -1
  95. package/dist/schema-editor/SchemaEditor.js.map +1 -1
  96. package/dist/schema-editor/index.d.ts +2 -2
  97. package/dist/schema-editor/index.d.ts.map +1 -1
  98. package/dist/schema-form/array-field.d.ts.map +1 -1
  99. package/dist/schema-form/array-field.js +6 -2
  100. package/dist/schema-form/array-field.js.map +1 -1
  101. package/dist/schema-form/classify.d.ts +4 -1
  102. package/dist/schema-form/classify.d.ts.map +1 -1
  103. package/dist/schema-form/classify.js +36 -15
  104. package/dist/schema-form/classify.js.map +1 -1
  105. package/dist/schema-form/collapsed-object-field.d.ts +20 -0
  106. package/dist/schema-form/collapsed-object-field.d.ts.map +1 -0
  107. package/dist/schema-form/collapsed-object-field.js +14 -0
  108. package/dist/schema-form/collapsed-object-field.js.map +1 -0
  109. package/dist/schema-form/context.d.ts +27 -1
  110. package/dist/schema-form/context.d.ts.map +1 -1
  111. package/dist/schema-form/context.js +14 -0
  112. package/dist/schema-form/context.js.map +1 -1
  113. package/dist/schema-form/default-value.d.ts +21 -6
  114. package/dist/schema-form/default-value.d.ts.map +1 -1
  115. package/dist/schema-form/default-value.js +74 -15
  116. package/dist/schema-form/default-value.js.map +1 -1
  117. package/dist/schema-form/expression-field.d.ts +48 -0
  118. package/dist/schema-form/expression-field.d.ts.map +1 -0
  119. package/dist/schema-form/expression-field.js +88 -0
  120. package/dist/schema-form/expression-field.js.map +1 -0
  121. package/dist/schema-form/field-model.d.ts +23 -4
  122. package/dist/schema-form/field-model.d.ts.map +1 -1
  123. package/dist/schema-form/field-node.d.ts.map +1 -1
  124. package/dist/schema-form/field-node.js +16 -3
  125. package/dist/schema-form/field-node.js.map +1 -1
  126. package/dist/schema-form/index.d.ts +3 -3
  127. package/dist/schema-form/index.d.ts.map +1 -1
  128. package/dist/schema-form/index.js +2 -2
  129. package/dist/schema-form/index.js.map +1 -1
  130. package/dist/schema-form/object-fields.d.ts +6 -3
  131. package/dist/schema-form/object-fields.d.ts.map +1 -1
  132. package/dist/schema-form/object-fields.js +14 -3
  133. package/dist/schema-form/object-fields.js.map +1 -1
  134. package/dist/schema-form/record-field.d.ts.map +1 -1
  135. package/dist/schema-form/record-field.js +6 -2
  136. package/dist/schema-form/record-field.js.map +1 -1
  137. package/dist/schema-form/seeding-action.d.ts +15 -0
  138. package/dist/schema-form/seeding-action.d.ts.map +1 -0
  139. package/dist/schema-form/seeding-action.js +35 -0
  140. package/dist/schema-form/seeding-action.js.map +1 -0
  141. package/dist/schema-form/string-annotations.d.ts +22 -8
  142. package/dist/schema-form/string-annotations.d.ts.map +1 -1
  143. package/dist/schema-form/string-annotations.js +39 -14
  144. package/dist/schema-form/string-annotations.js.map +1 -1
  145. package/dist/schema-form/string-field.js +2 -84
  146. package/dist/schema-form/string-field.js.map +1 -1
  147. package/dist/schema-form/templated-field.d.ts +13 -0
  148. package/dist/schema-form/templated-field.d.ts.map +1 -0
  149. package/dist/schema-form/templated-field.js +43 -0
  150. package/dist/schema-form/templated-field.js.map +1 -0
  151. package/dist/schema-form/union-field.d.ts.map +1 -1
  152. package/dist/schema-form/union-field.js +6 -2
  153. package/dist/schema-form/union-field.js.map +1 -1
  154. package/dist/schema-form/union.d.ts +4 -4
  155. package/dist/schema-form/union.d.ts.map +1 -1
  156. package/dist/schema-form/union.js +8 -1
  157. package/dist/schema-form/union.js.map +1 -1
  158. package/dist/schema-form/validate.d.ts.map +1 -1
  159. package/dist/schema-form/validate.js +28 -0
  160. package/dist/schema-form/validate.js.map +1 -1
  161. package/dist/search-match.d.ts +29 -0
  162. package/dist/search-match.d.ts.map +1 -0
  163. package/dist/search-match.js +38 -0
  164. package/dist/search-match.js.map +1 -0
  165. package/dist/tool-organization.d.ts +15 -0
  166. package/dist/tool-organization.d.ts.map +1 -0
  167. package/dist/tool-organization.js +6 -0
  168. package/dist/tool-organization.js.map +1 -0
  169. package/package.json +3 -2
  170. package/src/components/agent-picker.tsx +2 -1
  171. package/src/components/channel-picker.tsx +2 -1
  172. package/src/components/components.css +53 -0
  173. package/src/components/explorer-body.tsx +29 -5
  174. package/src/components/explorer-view.tsx +48 -17
  175. package/src/components/extension-config-editor.tsx +3 -3
  176. package/src/components/field.tsx +18 -2
  177. package/src/components/folder-actions.tsx +341 -0
  178. package/src/components/folder-filing.tsx +109 -0
  179. package/src/components/folder-nav.tsx +26 -10
  180. package/src/components/folder-occupancy.ts +83 -0
  181. package/src/components/named-list-picker.tsx +11 -7
  182. package/src/components/primitives.tsx +2 -1
  183. package/src/components/searchable-select-model.ts +105 -0
  184. package/src/components/searchable-select.tsx +432 -0
  185. package/src/components/subject-section.tsx +3 -2
  186. package/src/components/table.tsx +12 -2
  187. package/src/components/tool-meta-access.tsx +101 -0
  188. package/src/components/tool-name-entry.tsx +77 -0
  189. package/src/components/tool-picker.tsx +83 -50
  190. package/src/components/tool-select.tsx +49 -38
  191. package/src/hooks/useSystemKinds.tsx +77 -17
  192. package/src/index.ts +98 -94
  193. package/src/plugin/version.ts +1 -1
  194. package/src/schema-editor/SchemaEditor.tsx +9 -3
  195. package/src/schema-editor/index.ts +2 -2
  196. package/src/schema-form/array-field.tsx +10 -2
  197. package/src/schema-form/classify.ts +41 -15
  198. package/src/schema-form/collapsed-object-field.tsx +56 -0
  199. package/src/schema-form/context.ts +33 -1
  200. package/src/schema-form/default-value.ts +89 -15
  201. package/src/schema-form/expression-field.tsx +162 -0
  202. package/src/schema-form/field-model.ts +27 -4
  203. package/src/schema-form/field-node.tsx +41 -2
  204. package/src/schema-form/index.ts +3 -2
  205. package/src/schema-form/object-fields.tsx +11 -4
  206. package/src/schema-form/record-field.tsx +10 -2
  207. package/src/schema-form/seeding-action.ts +44 -0
  208. package/src/schema-form/string-annotations.ts +40 -14
  209. package/src/schema-form/string-field.tsx +2 -147
  210. package/src/schema-form/templated-field.tsx +124 -0
  211. package/src/schema-form/union-field.tsx +11 -2
  212. package/src/schema-form/union.ts +12 -5
  213. package/src/schema-form/validate.ts +28 -0
  214. package/src/search-match.ts +41 -0
  215. package/src/tool-organization.ts +34 -0
@@ -1 +1 @@
1
- {"version":3,"file":"subject-section.d.ts","sourceRoot":"","sources":["../../src/components/subject-section.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAMjD,4FAA4F;AAC5F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,yFAAyF;AACzF,eAAO,MAAM,0BAA0B,iDAAiD,CAAC;AAEzF;oFACoF;AACpF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,GAChF,mBAAmB,EAAE,CASvB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqB9E;AAED;iFACiF;AACjF,wBAAgB,gBAAgB;;;;;;;;;;;EAO/B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvD,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,kDAAkD;IAClD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,KAAK,EACL,aAAa,EACb,OAAO,EACP,iBAAiB,EACjB,qBAAqB,GACtB,EAAE,mBAAmB,GAAG,SAAS,CA4DjC"}
1
+ {"version":3,"file":"subject-section.d.ts","sourceRoot":"","sources":["../../src/components/subject-section.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAMjD,4FAA4F;AAC5F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,yFAAyF;AACzF,eAAO,MAAM,0BAA0B,iDAAiD,CAAC;AAEzF;oFACoF;AACpF,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS;IAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAAE,GAChF,mBAAmB,EAAE,CASvB;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAqB9E;AAED;iFACiF;AACjF,wBAAgB,gBAAgB;;;;;;;;;;;EAO/B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACvD,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,oDAAoD;IACpD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,kDAAkD;IAClD,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,KAAK,EACL,aAAa,EACb,OAAO,EACP,iBAAiB,EACjB,qBAAqB,GACtB,EAAE,mBAAmB,GAAG,SAAS,CA6DjC"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from 'react';
3
3
  import { Field } from './field';
4
4
  import { TextInput } from './inputs';
5
- import { Select } from './select';
5
+ import { SearchableSelect } from './searchable-select';
6
6
  /** The message a partially-filled subject is refused with (all three fields or none). */
7
7
  export const SUBJECT_INCOMPLETE_MESSAGE = 'A subject needs a target, a kind, and a key.';
8
8
  /** Map the conversation routes read to the target select's options: one option per
@@ -62,7 +62,7 @@ export function SubjectSection({ open, onToggle, target, onTargetChange, kind, o
62
62
  flexDirection: 'column',
63
63
  gap: 'var(--tai-space-3)',
64
64
  marginTop: 'var(--tai-space-3)',
65
- }, children: [_jsx("p", { style: { margin: 0, color: 'var(--tai-color-text-muted)' }, children: caption }), _jsx(Field, { label: "Target", children: _jsx(Select, { value: target, onValueChange: onTargetChange, "aria-label": "Subject target", placeholder: targetPlaceholder, options: targetOptions }) }), _jsx(Field, { label: "Subject kind", description: "The subject family the state declares (e.g. person).", children: _jsx(TextInput, { value: kind, placeholder: "e.g. person", onChange: (event) => {
65
+ }, children: [_jsx("p", { style: { margin: 0, color: 'var(--tai-color-text-muted)' }, children: caption }), _jsx(Field, { label: "Target", children: _jsx(SearchableSelect, { value: target, onValueChange: onTargetChange, "aria-label": "Subject target", placeholder: targetPlaceholder, options: targetOptions, searchLabel: "Search targets" }) }), _jsx(Field, { label: "Subject kind", description: "The subject family the state declares (e.g. person).", children: _jsx(TextInput, { value: kind, placeholder: "e.g. person", onChange: (event) => {
66
66
  onKindChange(event.target.value);
67
67
  } }) }), _jsx(Field, { label: "Subject key", description: subjectKeyDescription, children: _jsx(TextInput, { value: subjectKey, placeholder: "e.g. a-42", onChange: (event) => {
68
68
  onKeyChange(event.target.value);
@@ -1 +1 @@
1
- {"version":3,"file":"subject-section.js","sourceRoot":"","sources":["../../src/components/subject-section.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subject-section.js","sourceRoot":"","sources":["../../src/components/subject-section.tsx"],"names":[],"mappings":"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"}
@@ -8,6 +8,10 @@
8
8
  * A numeric column opts in with `numeric`, which stamps `data-numeric="true"` —
9
9
  * the hook the stylesheet right-aligns on tabular figures so digits line up.
10
10
  *
11
+ * A selected body row opts in with `selected`, which stamps `data-selected="true"` —
12
+ * the hook the stylesheet draws as the one selected-row look every table shares. It
13
+ * is presentation only: the row's own link carries `aria-current` for assistive tech.
14
+ *
11
15
  * Each wrapper FORWARDS a consumer `ref` to the native element it renders — the
12
16
  * attribute spread carries it, the same way it carries every other native prop —
13
17
  * so a caller that has to measure or scroll a cell is not forced back to a raw
@@ -32,8 +36,10 @@ export interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {
32
36
  readonly children?: ReactNode;
33
37
  /** A consumer ref for the `<tr>` itself. */
34
38
  readonly ref?: Ref<HTMLTableRowElement>;
39
+ /** Draw the row as the selected one. */
40
+ readonly selected?: boolean;
35
41
  }
36
- export declare function TR({ children, ...props }: TableRowProps): import("react").JSX.Element;
42
+ export declare function TR({ children, selected, ...props }: TableRowProps): import("react").JSX.Element;
37
43
  /** Right-align a column of digits on tabular figures. */
38
44
  export interface NumericColumnProps {
39
45
  readonly numeric?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/components/table.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAEhG,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACtC;AAED,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BAMlE;AAED,qEAAqE;AACrE,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,uBAAuB,CAAC;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC;CAC7C;AAED,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,+BAE9D;AAED,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,+BAE9D;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,mBAAmB,CAAC;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;CACzC;AAED,wBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,+BAEvD;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAQ,SAAQ,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,kBAAkB;IACzF,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;CAC1C;AAED,wBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAe,EAAE,KAAa,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,+BAMjF;AAED,MAAM,WAAW,OAAQ,SAAQ,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,kBAAkB;IACzF,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;CAC1C;AAED,wBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAe,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,+BAMlE"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/components/table.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAEhG,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;CACtC;AAED,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,+BAMlE;AAED,qEAAqE;AACrE,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,uBAAuB,CAAC;IAChF,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC;CAC7C;AAED,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,+BAE9D;AAED,wBAAgB,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,+BAE9D;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,mBAAmB,CAAC;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACxC,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAgB,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,+BAMzE;AAED,yDAAyD;AACzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,OAAQ,SAAQ,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,kBAAkB;IACzF,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;CAC1C;AAED,wBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAe,EAAE,KAAa,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,+BAMjF;AAED,MAAM,WAAW,OAAQ,SAAQ,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,kBAAkB;IACzF,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;IAC9B,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAC;CAC1C;AAED,wBAAgB,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAe,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,+BAMlE"}
@@ -8,8 +8,8 @@ export function THead({ children, ...props }) {
8
8
  export function TBody({ children, ...props }) {
9
9
  return _jsx("tbody", { ...props, children: children });
10
10
  }
11
- export function TR({ children, ...props }) {
12
- return _jsx("tr", { ...props, children: children });
11
+ export function TR({ children, selected = false, ...props }) {
12
+ return (_jsx("tr", { ...props, "data-selected": selected ? 'true' : undefined, children: children }));
13
13
  }
14
14
  export function TH({ children, numeric = false, scope = 'col', ...props }) {
15
15
  return (_jsx("th", { ...props, scope: scope, "data-numeric": numeric ? 'true' : undefined, children: children }));
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/components/table.tsx"],"names":[],"mappings":";AAuBA,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAc;IACjE,OAAO,CACL,mBAAW,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,SAAS,EAAE,YAC1F,QAAQ,GACH,CACT,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAqB;IAC7D,OAAO,mBAAW,KAAK,YAAG,QAAQ,GAAS,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAqB;IAC7D,OAAO,mBAAW,KAAK,YAAG,QAAQ,GAAS,CAAC;AAC9C,CAAC;AAQD,MAAM,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAiB;IACtD,OAAO,gBAAQ,KAAK,YAAG,QAAQ,GAAM,CAAC;AACxC,CAAC;AAmBD,MAAM,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,KAAK,EAAW;IAChF,OAAO,CACL,gBAAQ,KAAK,EAAE,KAAK,EAAE,KAAK,kBAAgB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YACpE,QAAQ,GACN,CACN,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,EAAW;IACjE,OAAO,CACL,gBAAQ,KAAK,kBAAgB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YACtD,QAAQ,GACN,CACN,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/components/table.tsx"],"names":[],"mappings":";AA2BA,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,EAAc;IACjE,OAAO,CACL,mBAAW,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,SAAS,EAAE,YAC1F,QAAQ,GACH,CACT,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAqB;IAC7D,OAAO,mBAAW,KAAK,YAAG,QAAQ,GAAS,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAqB;IAC7D,OAAO,mBAAW,KAAK,YAAG,QAAQ,GAAS,CAAC;AAC9C,CAAC;AAUD,MAAM,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,KAAK,EAAiB;IACxE,OAAO,CACL,gBAAQ,KAAK,mBAAiB,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YACxD,QAAQ,GACN,CACN,CAAC;AACJ,CAAC;AAmBD,MAAM,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,KAAK,EAAW;IAChF,OAAO,CACL,gBAAQ,KAAK,EAAE,KAAK,EAAE,KAAK,kBAAgB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YACpE,QAAQ,GACN,CACN,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,KAAK,EAAW;IACjE,OAAO,CACL,gBAAQ,KAAK,kBAAgB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,YACtD,QAAQ,GACN,CACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type ReactNode } from 'react';
2
+ /** Which overlay writes the caller may be offered. */
3
+ export interface ToolMetaWriteAccess {
4
+ /** Edit a tool's overlay row — its display name, tags, visibility or folder. */
5
+ readonly editTool: boolean;
6
+ readonly createFolder: boolean;
7
+ readonly renameFolder: boolean;
8
+ readonly moveFolder: boolean;
9
+ readonly deleteFolder: boolean;
10
+ }
11
+ /**
12
+ * The overlay writes the caller may be offered: each one's own route reached by the
13
+ * projection (fail closed until the projection is ready) and the tool_meta store not
14
+ * known OFF.
15
+ */
16
+ export declare function useToolMetaWriteAccess(): ToolMetaWriteAccess;
17
+ /**
18
+ * Hand a failed overlay write here: a not-configured refusal (501
19
+ * `tool-meta-not-configured`) is recorded so every screen withdraws its overlay
20
+ * writes; any other failure is left to the caller, which shows it.
21
+ */
22
+ export declare function useReportToolMetaRefusal(): (error: unknown) => void;
23
+ /** A failed overlay write as its dialog shows it: the muted OFF note with the server's
24
+ * message for a not-configured refusal, an error for anything else. */
25
+ export declare function ToolMetaWriteError({ error }: {
26
+ readonly error: unknown;
27
+ }): ReactNode;
28
+ //# sourceMappingURL=tool-meta-access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-meta-access.d.ts","sourceRoot":"","sources":["../../src/components/tool-meta-access.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,SAAS,EAAe,MAAM,OAAO,CAAC;AA8BpD,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAMD;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,CAc5D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAQnE;AAED;wEACwE;AACxE,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAMpF"}
@@ -0,0 +1,65 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback } from 'react';
3
+ import { errorMessage } from '../errors';
4
+ import { FeatureDisabled, featureDisabledMessage, isFeatureDisabled } from '../feature-disabled';
5
+ import { useCanWrite } from '../hooks/useCapabilities';
6
+ import { useFeatureOff, useReportFeatureOff } from '../hooks/useSystemKinds';
7
+ import { ErrorState } from './primitives';
8
+ /** The kind-status kind of the tool-organization overlay store. */
9
+ const TOOL_META_KIND = 'tool_meta';
10
+ // The overlay write routes. Spelled here because the SDK takes no runtime import of
11
+ // the API client; the `satisfies` pin fails to compile if a route's method or path
12
+ // drifts from the generated route table.
13
+ const TOOL_META_WRITE_ROUTES = {
14
+ editTool: { method: 'PATCH', path: '/api/tool-meta/tools/{tool_name}' },
15
+ createFolder: { method: 'POST', path: '/api/tool-meta/folders' },
16
+ renameFolder: { method: 'POST', path: '/api/tool-meta/folders/{folder_id}/rename' },
17
+ moveFolder: { method: 'POST', path: '/api/tool-meta/folders/{folder_id}/move' },
18
+ deleteFolder: { method: 'DELETE', path: '/api/tool-meta/folders/{folder_id}' },
19
+ };
20
+ function useRouteOpen(route) {
21
+ return useCanWrite(route.path, route.method);
22
+ }
23
+ /**
24
+ * The overlay writes the caller may be offered: each one's own route reached by the
25
+ * projection (fail closed until the projection is ready) and the tool_meta store not
26
+ * known OFF.
27
+ */
28
+ export function useToolMetaWriteAccess() {
29
+ const off = useFeatureOff(TOOL_META_KIND);
30
+ const editTool = useRouteOpen(TOOL_META_WRITE_ROUTES.editTool);
31
+ const createFolder = useRouteOpen(TOOL_META_WRITE_ROUTES.createFolder);
32
+ const renameFolder = useRouteOpen(TOOL_META_WRITE_ROUTES.renameFolder);
33
+ const moveFolder = useRouteOpen(TOOL_META_WRITE_ROUTES.moveFolder);
34
+ const deleteFolder = useRouteOpen(TOOL_META_WRITE_ROUTES.deleteFolder);
35
+ return {
36
+ editTool: editTool && !off,
37
+ createFolder: createFolder && !off,
38
+ renameFolder: renameFolder && !off,
39
+ moveFolder: moveFolder && !off,
40
+ deleteFolder: deleteFolder && !off,
41
+ };
42
+ }
43
+ /**
44
+ * Hand a failed overlay write here: a not-configured refusal (501
45
+ * `tool-meta-not-configured`) is recorded so every screen withdraws its overlay
46
+ * writes; any other failure is left to the caller, which shows it.
47
+ */
48
+ export function useReportToolMetaRefusal() {
49
+ const reportOff = useReportFeatureOff();
50
+ return useCallback((error) => {
51
+ if (isFeatureDisabled(error))
52
+ reportOff(TOOL_META_KIND, featureDisabledMessage(error));
53
+ }, [reportOff]);
54
+ }
55
+ /** A failed overlay write as its dialog shows it: the muted OFF note with the server's
56
+ * message for a not-configured refusal, an error for anything else. */
57
+ export function ToolMetaWriteError({ error }) {
58
+ if (error === null || error === undefined)
59
+ return null;
60
+ if (isFeatureDisabled(error)) {
61
+ return _jsx(FeatureDisabled, { feature: "Tool metadata", message: featureDisabledMessage(error) });
62
+ }
63
+ return _jsx(ErrorState, { message: errorMessage(error) });
64
+ }
65
+ //# sourceMappingURL=tool-meta-access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-meta-access.js","sourceRoot":"","sources":["../../src/components/tool-meta-access.tsx"],"names":[],"mappings":";AAYA,OAAO,EAAkB,WAAW,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,mEAAmE;AACnE,MAAM,cAAc,GAAG,WAAW,CAAC;AAInC,oFAAoF;AACpF,mFAAmF;AACnF,yCAAyC;AACzC,MAAM,sBAAsB,GAAG;IAC7B,QAAQ,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,kCAAkC,EAAE;IACvE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE;IAChE,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,2CAA2C,EAAE;IACnF,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,yCAAyC,EAAE;IAC/E,YAAY,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,oCAAoC,EAAE;CAO/E,CAAC;AAYF,SAAS,YAAY,CAAC,KAAyD;IAC7E,OAAO,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,YAAY,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,YAAY,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,YAAY,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,YAAY,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,YAAY,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACvE,OAAO;QACL,QAAQ,EAAE,QAAQ,IAAI,CAAC,GAAG;QAC1B,YAAY,EAAE,YAAY,IAAI,CAAC,GAAG;QAClC,YAAY,EAAE,YAAY,IAAI,CAAC,GAAG;QAClC,UAAU,EAAE,UAAU,IAAI,CAAC,GAAG;QAC9B,YAAY,EAAE,YAAY,IAAI,CAAC,GAAG;KACnC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB;IACtC,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,OAAO,WAAW,CAChB,CAAC,KAAc,EAAE,EAAE;QACjB,IAAI,iBAAiB,CAAC,KAAK,CAAC;YAAE,SAAS,CAAC,cAAc,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC;IACzF,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;AACJ,CAAC;AAED;wEACwE;AACxE,MAAM,UAAU,kBAAkB,CAAC,EAAE,KAAK,EAA+B;IACvE,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAC,eAAe,IAAC,OAAO,EAAC,eAAe,EAAC,OAAO,EAAE,sBAAsB,CAAC,KAAK,CAAC,GAAI,CAAC;IAC7F,CAAC;IACD,OAAO,KAAC,UAAU,IAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,GAAI,CAAC;AACtD,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * `ToolPicker`'s typed entry: the control it draws when the session may not list tools
3
+ * (the read answered 403). The server checks a named tool on save, so a reader who
4
+ * knows the name can still fill the field; the note under the input says why there is
5
+ * no list.
6
+ *
7
+ * The input holds a draft while the reader types and hands the trimmed name to
8
+ * `onChange` on blur or Enter, so a host that acts on every change (an "add" control
9
+ * that appends each emitted name) receives one whole name, never each keystroke. Enter
10
+ * commits instead of submitting the enclosing form, since the form would otherwise read
11
+ * the value from before the commit. A blank draft emits nothing: the input shows the
12
+ * stored value again.
13
+ */
14
+ import { type ReactNode } from 'react';
15
+ /** The sentence under the typed entry, naming why there is no list and what saving does. */
16
+ export declare const TOOL_LIST_REFUSED_NOTE = "This session cannot list tools, so type the tool's exact name. Saving checks that the deployment serves it.";
17
+ export interface ToolNameEntryProps {
18
+ /** The stored name, or `null` for none. */
19
+ readonly value: string | null;
20
+ readonly onChange: (toolName: string) => void;
21
+ readonly disabled: boolean;
22
+ /** Names the input when no enclosing `Field` labels it; a `Field`'s label wins. */
23
+ readonly ariaLabel: string | undefined;
24
+ }
25
+ export declare function ToolNameEntry({ value, onChange, disabled, ariaLabel, }: ToolNameEntryProps): ReactNode;
26
+ //# sourceMappingURL=tool-name-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-name-entry.d.ts","sourceRoot":"","sources":["../../src/components/tool-name-entry.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAsB,KAAK,SAAS,EAAmB,MAAM,OAAO,CAAC;AAK5E,4FAA4F;AAC5F,eAAO,MAAM,sBAAsB,gHAC4E,CAAC;AAIhH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,GACV,EAAE,kBAAkB,GAAG,SAAS,CAsChC"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * `ToolPicker`'s typed entry: the control it draws when the session may not list tools
4
+ * (the read answered 403). The server checks a named tool on save, so a reader who
5
+ * knows the name can still fill the field; the note under the input says why there is
6
+ * no list.
7
+ *
8
+ * The input holds a draft while the reader types and hands the trimmed name to
9
+ * `onChange` on blur or Enter, so a host that acts on every change (an "add" control
10
+ * that appends each emitted name) receives one whole name, never each keystroke. Enter
11
+ * commits instead of submitting the enclosing form, since the form would otherwise read
12
+ * the value from before the commit. A blank draft emits nothing: the input shows the
13
+ * stored value again.
14
+ */
15
+ import { useId, useState } from 'react';
16
+ import { useFieldControl } from './field';
17
+ import { TextInput } from './inputs';
18
+ /** The sentence under the typed entry, naming why there is no list and what saving does. */
19
+ export const TOOL_LIST_REFUSED_NOTE = "This session cannot list tools, so type the tool's exact name. Saving checks that the deployment serves it.";
20
+ const NOTE_STYLE = { margin: 0, color: 'var(--tai-color-text-muted)' };
21
+ export function ToolNameEntry({ value, onChange, disabled, ariaLabel, }) {
22
+ const noteId = useId();
23
+ const labelled = useFieldControl().id !== undefined;
24
+ const [draft, setDraft] = useState(undefined);
25
+ const commit = () => {
26
+ if (draft === undefined)
27
+ return;
28
+ const name = draft.trim();
29
+ setDraft(undefined);
30
+ if (name !== '' && name !== value)
31
+ onChange(name);
32
+ };
33
+ const onKeyDown = (event) => {
34
+ if (event.key !== 'Enter')
35
+ return;
36
+ event.preventDefault();
37
+ commit();
38
+ };
39
+ return (_jsxs(_Fragment, { children: [_jsx(TextInput, { value: draft ?? value ?? '', onChange: (event) => {
40
+ setDraft(event.target.value);
41
+ }, onBlur: commit, onKeyDown: onKeyDown, disabled: disabled, "aria-label": labelled ? undefined : ariaLabel, "aria-describedby": noteId, autoComplete: "off", spellCheck: false }), _jsx("p", { id: noteId, role: "status", style: NOTE_STYLE, children: TOOL_LIST_REFUSED_NOTE })] }));
42
+ }
43
+ //# sourceMappingURL=tool-name-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-name-entry.js","sourceRoot":"","sources":["../../src/components/tool-name-entry.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAsC,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,4FAA4F;AAC5F,MAAM,CAAC,MAAM,sBAAsB,GACjC,6GAA6G,CAAC;AAEhH,MAAM,UAAU,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,6BAA6B,EAAW,CAAC;AAWhF,MAAM,UAAU,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,GACU;IACnB,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC;IACpD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAElE,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1B,QAAQ,CAAC,SAAS,CAAC,CAAC;QACpB,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,KAAsC,EAAQ,EAAE;QACjE,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO;YAAE,OAAO;QAClC,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,MAAM,EAAE,CAAC;IACX,CAAC,CAAC;IAEF,OAAO,CACL,8BACE,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,IAAI,KAAK,IAAI,EAAE,EAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC,EACD,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,gBACN,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,sBAC1B,MAAM,EACxB,YAAY,EAAC,KAAK,EAClB,UAAU,EAAE,KAAK,GACjB,EACF,YAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,UAAU,YAC3C,sBAAsB,GACrB,IACH,CACJ,CAAC;AACJ,CAAC"}
@@ -1,16 +1,23 @@
1
1
  /**
2
2
  * `ToolPicker` — a controlled single-select over the tool names a host offers, built
3
- * on the DS `Select` so features share one picker instead of each re-implementing
4
- * a listbox (the same reason `SchemaForm` lives in the SDK). It is
3
+ * on the DS `SearchableSelect` so features share one picker instead of each
4
+ * re-implementing a listbox (the same reason `SchemaForm` lives in the SDK). It is
5
5
  * PRESENTATIONAL: the host owns the tool list read and hands it in as `query`, and
6
6
  * owns the selected value; this component fetches nothing.
7
7
  *
8
+ * Opening the picker opens a search box: typing narrows the options to the tools whose
9
+ * label contains the text, ignoring case. The label carries the display name and the
10
+ * raw name, so either finds the tool.
11
+ *
8
12
  * The picker owns its `Field` (with `label`) and draws the read's states in it: pending
9
- * (a disabled `Select` reading "Loading tools…"), error (`ErrorState` with Retry, or the
13
+ * (a disabled select reading "Loading tools…"), error (`ErrorState` with Retry, or the
10
14
  * host's `errorNote` line where the same failure is drawn with Retry elsewhere), refused
11
- * (a 403 with `forbiddenNote` set), and loaded with nothing to offer (the host's
12
- * `emptyNote`, then its `emptyAction`). The host's `error` shows, and the `Field` claims
13
- * its control id, exactly while a `Select` renders.
15
+ * (a 403 where the host sets no `errorNote`: the session may not list tools, so a text
16
+ * input takes the tool's name, with a note saying why there is no list; the server
17
+ * checks the name on save), and loaded with
18
+ * nothing to offer (the host's `emptyNote`, then its `emptyAction`). The host's `error`
19
+ * shows, and the `Field` claims its control id, exactly while a select or the typed
20
+ * entry renders.
14
21
  *
15
22
  * Optional extensions, each inert unless supplied:
16
23
  * - `excludeNames` removes names from the options (e.g. a preset cannot be
@@ -30,8 +37,8 @@
30
37
  * - `displayNames` (from the tool-meta overlay) overlays a human name onto the
31
38
  * LABEL: a mapped option reads `Display Name (raw_name)`, an unmapped name (or a
32
39
  * mapping equal to the raw name) reads the bare raw name. The value stays the raw
33
- * name and grouping/filtering/exclusion key off raw names alone, so a display
34
- * name is purely cosmetic.
40
+ * name and grouping/tag filtering/exclusion key off raw names alone; the display
41
+ * name only labels the option, and so is what the search reads with the raw name.
35
42
  * - `badgesByTool` (native ∪ overlay, from the tool-meta merge) surfaces the
36
43
  * SELECTED tool's DECLARED capability badges as read-only chips beneath the
37
44
  * select. Badges are INFORMATIONAL — the tooltip says so — never a gate, so they
@@ -65,12 +72,11 @@ export interface ToolPickerProps {
65
72
  /** Drawn after `emptyNote` in the empty state (e.g. a link to where tools come from). */
66
73
  readonly emptyAction?: ReactNode;
67
74
  /**
68
- * Drawn in place of the `ErrorState` and the control when the read fails, with no
69
- * Retry: for a host that already draws the same read's failure with Retry elsewhere.
75
+ * Drawn in place of the `ErrorState` and the control when the read fails, a 403
76
+ * included, with no Retry: for a host that already draws the same read's failure
77
+ * elsewhere. Such a host draws no typed entry on a 403.
70
78
  */
71
79
  readonly errorNote?: string;
72
- /** Drawn on a 403 of the read in place of the error state (the no-grant state). */
73
- readonly forbiddenNote?: string;
74
80
  /** Flags a stored value the loaded list does not carry (see the module docs). */
75
81
  readonly unlistedLabel?: string;
76
82
  readonly disabled?: boolean;
@@ -80,13 +86,12 @@ export interface ToolPickerProps {
80
86
  readonly label?: string;
81
87
  /** Handed to the picker's `Field` (with `label`). */
82
88
  readonly description?: string;
83
- /** The host's field error, shown under the control while a `Select` renders (with `label`). */
89
+ /** The host's field error, shown under the control while one renders (with `label`). */
84
90
  readonly error?: string;
85
91
  /**
86
- * Accessible name for the tool listbox when `label` renders none and no
87
- * enclosing `Field` names it. `label` wins where both are given: it names the
88
- * control from visible text, and the `Select` drops a caller name it would
89
- * otherwise override.
92
+ * Accessible name for the control when `label` renders none and no enclosing
93
+ * `Field` names it. `label` wins where both are given: it names the control from
94
+ * visible text, and the control drops a caller name it would otherwise override.
90
95
  */
91
96
  readonly 'aria-label'?: string;
92
97
  /** Names removed from the options (the server remains the authority). */
@@ -109,5 +114,5 @@ export interface ToolPickerProps {
109
114
  */
110
115
  readonly badgesByTool?: Readonly<Record<string, readonly string[]>>;
111
116
  }
112
- export declare function ToolPicker({ query, value, onChange, emptyNote, emptyAction, errorNote, forbiddenNote, unlistedLabel, disabled, placeholder, idPrefix, label, description, error, 'aria-label': ariaLabel, excludeNames, tagsByTool, agentToolNames, displayNames, badgesByTool, }: ToolPickerProps): import("react").JSX.Element;
117
+ export declare function ToolPicker({ query, value, onChange, emptyNote, emptyAction, errorNote, unlistedLabel, disabled, placeholder, idPrefix, label, description, error, 'aria-label': ariaLabel, excludeNames, tagsByTool, agentToolNames, displayNames, badgesByTool, }: ToolPickerProps): import("react").JSX.Element;
113
118
  //# sourceMappingURL=tool-picker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-picker.d.ts","sourceRoot":"","sources":["../../src/components/tool-picker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,OAAO,CAAC;AAWxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAIrD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,sGAAsG;IACtG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,iFAAiF;IACjF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,+FAA+F;IAC/F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,sFAAsF;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAClE,wFAAwF;IACxF,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CACrE;AA6FD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,aAAa,EACb,QAAQ,EACR,WAA8B,EAC9B,QAAwB,EACxB,KAAK,EACL,WAAW,EACX,KAAK,EACL,YAAY,EAAE,SAAS,EACvB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,GACb,EAAE,eAAe,+BAuFjB"}
1
+ {"version":3,"file":"tool-picker.d.ts","sourceRoot":"","sources":["../../src/components/tool-picker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,EAAE,KAAK,SAAS,EAA4B,MAAM,OAAO,CAAC;AAYjE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAIrD;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,sGAAsG;IACtG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,iFAAiF;IACjF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,qDAAqD;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,wFAAwF;IACxF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,sFAAsF;IACtF,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAClE,wFAAwF;IACxF,QAAQ,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CACrE;AA8GD,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAA8B,EAC9B,QAAwB,EACxB,KAAK,EACL,WAAW,EACX,KAAK,EACL,YAAY,EAAE,SAAS,EACvB,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,GACb,EAAE,eAAe,+BAkGjB"}
@@ -1,17 +1,24 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  /**
3
3
  * `ToolPicker` — a controlled single-select over the tool names a host offers, built
4
- * on the DS `Select` so features share one picker instead of each re-implementing
5
- * a listbox (the same reason `SchemaForm` lives in the SDK). It is
4
+ * on the DS `SearchableSelect` so features share one picker instead of each
5
+ * re-implementing a listbox (the same reason `SchemaForm` lives in the SDK). It is
6
6
  * PRESENTATIONAL: the host owns the tool list read and hands it in as `query`, and
7
7
  * owns the selected value; this component fetches nothing.
8
8
  *
9
+ * Opening the picker opens a search box: typing narrows the options to the tools whose
10
+ * label contains the text, ignoring case. The label carries the display name and the
11
+ * raw name, so either finds the tool.
12
+ *
9
13
  * The picker owns its `Field` (with `label`) and draws the read's states in it: pending
10
- * (a disabled `Select` reading "Loading tools…"), error (`ErrorState` with Retry, or the
14
+ * (a disabled select reading "Loading tools…"), error (`ErrorState` with Retry, or the
11
15
  * host's `errorNote` line where the same failure is drawn with Retry elsewhere), refused
12
- * (a 403 with `forbiddenNote` set), and loaded with nothing to offer (the host's
13
- * `emptyNote`, then its `emptyAction`). The host's `error` shows, and the `Field` claims
14
- * its control id, exactly while a `Select` renders.
16
+ * (a 403 where the host sets no `errorNote`: the session may not list tools, so a text
17
+ * input takes the tool's name, with a note saying why there is no list; the server
18
+ * checks the name on save), and loaded with
19
+ * nothing to offer (the host's `emptyNote`, then its `emptyAction`). The host's `error`
20
+ * shows, and the `Field` claims its control id, exactly while a select or the typed
21
+ * entry renders.
15
22
  *
16
23
  * Optional extensions, each inert unless supplied:
17
24
  * - `excludeNames` removes names from the options (e.g. a preset cannot be
@@ -31,8 +38,8 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
31
38
  * - `displayNames` (from the tool-meta overlay) overlays a human name onto the
32
39
  * LABEL: a mapped option reads `Display Name (raw_name)`, an unmapped name (or a
33
40
  * mapping equal to the raw name) reads the bare raw name. The value stays the raw
34
- * name and grouping/filtering/exclusion key off raw names alone, so a display
35
- * name is purely cosmetic.
41
+ * name and grouping/tag filtering/exclusion key off raw names alone; the display
42
+ * name only labels the option, and so is what the search reads with the raw name.
36
43
  * - `badgesByTool` (native ∪ overlay, from the tool-meta merge) surfaces the
37
44
  * SELECTED tool's DECLARED capability badges as read-only chips beneath the
38
45
  * select. Badges are INFORMATIONAL — the tooltip says so — never a gate, so they
@@ -41,13 +48,14 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
41
48
  * SAFETY: a tool name, a tag, a display name, AND a badge are server-supplied, so
42
49
  * every one renders as TEXT (React escapes it) — never an HTML sink. Pinned by a test.
43
50
  */
44
- import { useId, useState } from 'react';
51
+ import { useId, useMemo, useState } from 'react';
45
52
  import { errorMessage, isForbiddenError } from '../errors';
46
53
  import { Badge } from './badge';
47
54
  import { Field } from './field';
48
55
  import { ErrorState } from './primitives';
49
56
  import { SelectedToolBadges } from './selected-tool-badges';
50
57
  import { ALL_TAGS, TagFilterField } from './tag-filter-field';
58
+ import { ToolNameEntry } from './tool-name-entry';
51
59
  import { ToolSelect } from './tool-select';
52
60
  export { BADGES_NOTE } from './selected-tool-badges';
53
61
  const MUTED_LINE = { margin: 0, color: 'var(--tai-color-text-muted)' };
@@ -60,33 +68,42 @@ function phaseOf(refused, failed, unlisted, empty) {
60
68
  return 'unlisted';
61
69
  return empty ? 'empty' : 'select';
62
70
  }
63
- function pickerState(query, value, excludeNames, forbiddenNote, unlistedLabel) {
71
+ /** The loaded names the picker offers: the read's data without `excludeNames`. */
72
+ function availableNames(data, excludeNames) {
64
73
  const excluded = new Set(excludeNames ?? []);
65
- const available = (query.data ?? []).filter((name) => !excluded.has(name));
74
+ return (data ?? []).filter((name) => !excluded.has(name));
75
+ }
76
+ function pickerState(query, available, value, unlistedLabel, errorNote) {
66
77
  const stored = value !== null && value !== '' ? value : null;
67
78
  const loaded = query.isSuccess && !query.isError;
68
79
  const unlisted = unlistedLabel !== undefined && loaded && stored !== null && !available.includes(stored);
69
80
  const empty = loaded && available.length === 0;
70
- const refused = forbiddenNote !== undefined && query.isError && isForbiddenError(query.error);
81
+ // A host with `errorNote` draws the read's failure itself, a 403 included.
82
+ const refused = errorNote === undefined && query.isError && isForbiddenError(query.error);
71
83
  const phase = phaseOf(refused, query.isError, unlisted, empty);
72
- return { phase, available, stored, pending: !loaded && !query.isError, unlisted, empty };
84
+ return { phase, stored, pending: !loaded && !query.isError, unlisted, empty };
73
85
  }
74
86
  /** The distinct tags across `names`, sorted, feeding the filter control. */
75
87
  function tagsAcross(names, tagsByTool) {
76
88
  return [...new Set(names.flatMap((name) => tagsByTool[name] ?? []))].sort((a, b) => a.localeCompare(b));
77
89
  }
78
90
  /** The tag filter's choices, and the available names the chosen tag keeps. */
79
- function tagView(state, tagsByTool, tagFilter) {
91
+ function tagView(available, listed, tagsByTool, tagFilter) {
80
92
  if (tagsByTool === undefined)
81
- return { allTags: [], filtered: state.available };
82
- const listed = !state.pending && state.phase !== 'error' && state.phase !== 'refused';
93
+ return { allTags: [], filtered: available };
83
94
  return {
84
- allTags: listed ? tagsAcross(state.available, tagsByTool) : [],
95
+ allTags: listed ? tagsAcross(available, tagsByTool) : [],
85
96
  filtered: tagFilter === ALL_TAGS
86
- ? state.available
87
- : state.available.filter((name) => (tagsByTool[name] ?? []).includes(tagFilter)),
97
+ ? available
98
+ : available.filter((name) => (tagsByTool[name] ?? []).includes(tagFilter)),
88
99
  };
89
100
  }
101
+ /** The option drawn ahead of the list's own: an unlisted value, flagged with `unlistedLabel`. */
102
+ function leadingOption(phase, stored, unlistedLabel) {
103
+ if (stored === null || phase !== 'unlisted')
104
+ return undefined;
105
+ return { value: stored, label: `${stored} (${unlistedLabel ?? ''})` };
106
+ }
90
107
  function MutedLine({ text }) {
91
108
  return (_jsx("p", { role: "status", style: MUTED_LINE, children: text }));
92
109
  }
@@ -95,29 +112,30 @@ function ReadError({ query }) {
95
112
  query.refetch();
96
113
  } }));
97
114
  }
98
- export function ToolPicker({ query, value, onChange, emptyNote, emptyAction, errorNote, forbiddenNote, unlistedLabel, disabled, placeholder = 'Select a tool…', idPrefix = 'tool-picker', label, description, error, 'aria-label': ariaLabel, excludeNames, tagsByTool, agentToolNames, displayNames, badgesByTool, }) {
115
+ export function ToolPicker({ query, value, onChange, emptyNote, emptyAction, errorNote, unlistedLabel, disabled, placeholder = 'Select a tool…', idPrefix = 'tool-picker', label, description, error, 'aria-label': ariaLabel, excludeNames, tagsByTool, agentToolNames, displayNames, badgesByTool, }) {
99
116
  const [tagFilter, setTagFilter] = useState(ALL_TAGS);
100
117
  const unlistedId = useId();
101
- const state = pickerState(query, value, excludeNames, forbiddenNote, unlistedLabel);
118
+ // Memoised so a host re-render hands the select the same options, and an open
119
+ // list keeps its rows instead of re-indexing every tool.
120
+ const available = useMemo(() => availableNames(query.data, excludeNames), [query.data, excludeNames]);
121
+ const state = pickerState(query, available, value, unlistedLabel, errorNote);
102
122
  const { phase, stored } = state;
103
- const { allTags, filtered } = tagView(state, tagsByTool, tagFilter);
104
- const select = (options, leading) => (_jsx(ToolSelect, { tagsByTool: tagsByTool, filtered: options, value: value, onChange: onChange, placeholder: state.pending ? 'Loading tools…' : placeholder, ariaLabel: ariaLabel, ariaDescribedBy: state.unlisted ? unlistedId : undefined, disabled: disabled === true || state.pending, displayNames: displayNames, agentToolNames: agentToolNames, leading: leading }));
123
+ const listed = !state.pending && phase !== 'error' && phase !== 'refused';
124
+ const { allTags, filtered } = useMemo(() => tagView(available, listed, tagsByTool, tagFilter), [available, listed, tagsByTool, tagFilter]);
125
+ const leading = useMemo(() => leadingOption(phase, stored, unlistedLabel), [phase, stored, unlistedLabel]);
126
+ const select = (options) => (_jsx(ToolSelect, { tagsByTool: tagsByTool, filtered: options, value: value, onChange: onChange, placeholder: state.pending ? 'Loading tools…' : placeholder, ariaLabel: ariaLabel, ariaDescribedBy: state.unlisted ? unlistedId : undefined, disabled: disabled === true || state.pending, displayNames: displayNames, agentToolNames: agentToolNames, leading: leading }));
105
127
  const emptyState = (_jsxs(_Fragment, { children: [_jsx(MutedLine, { text: emptyNote }), emptyAction] }));
106
- // Only a rendered `Select` claims the field's control id; with none the host's
128
+ // Only a rendered control claims the field's control id; with none the host's
107
129
  // error is hidden and the note in its place says why the field is empty.
108
- const selectRenders = phase === 'unlisted' || phase === 'select' || (phase === 'refused' && stored !== null);
130
+ const controlRenders = phase === 'unlisted' || phase === 'select' || phase === 'refused';
109
131
  const contentByPhase = {
110
- // A stored value stays as the sole, unflagged option: without the list the form claims nothing about it.
111
- refused: () => (_jsxs(_Fragment, { children: [stored !== null ? select([], { value: stored, label: stored }) : null, _jsx(MutedLine, { text: forbiddenNote ?? '' })] })),
132
+ refused: () => (_jsx(ToolNameEntry, { value: stored, onChange: onChange, disabled: disabled === true, ariaLabel: ariaLabel })),
112
133
  error: () => errorNote !== undefined ? _jsx(MutedLine, { text: errorNote }) : _jsx(ReadError, { query: query }),
113
- unlisted: () => (_jsxs(_Fragment, { children: [select(filtered, {
114
- value: stored ?? '',
115
- label: `${stored ?? ''} (${unlistedLabel ?? ''})`,
116
- }), state.empty ? emptyState : null, _jsxs("p", { id: unlistedId, className: "tai-field-hint", style: { margin: 0 }, children: [_jsx(Badge, { variant: "warning", children: unlistedLabel }), " ", stored, " is ", unlistedLabel, ". Pick another, or saving is refused."] })] })),
134
+ unlisted: () => (_jsxs(_Fragment, { children: [select(filtered), state.empty ? emptyState : null, _jsxs("p", { id: unlistedId, className: "tai-field-hint", style: { margin: 0 }, children: [_jsx(Badge, { variant: "warning", children: unlistedLabel }), " ", stored, " is ", unlistedLabel, ". Pick another, or saving is refused."] })] })),
117
135
  empty: () => emptyState,
118
- select: () => select(filtered, undefined),
136
+ select: () => select(filtered),
119
137
  };
120
138
  const content = contentByPhase[phase]();
121
- return (_jsxs("div", { "data-testid": idPrefix, className: "tai-stack tai-stack-2", children: [allTags.length > 0 ? (_jsx(TagFilterField, { allTags: allTags, tagFilter: tagFilter, onTagFilterChange: setTagFilter, disabled: disabled })) : null, label !== undefined ? (_jsx(Field, { label: label, description: description, error: selectRenders ? error : undefined, group: !selectRenders, children: content })) : (content), _jsx(SelectedToolBadges, { value: value, badgesByTool: badgesByTool, idPrefix: idPrefix })] }));
139
+ return (_jsxs("div", { "data-testid": idPrefix, className: "tai-stack tai-stack-2", children: [allTags.length > 0 ? (_jsx(TagFilterField, { allTags: allTags, tagFilter: tagFilter, onTagFilterChange: setTagFilter, disabled: disabled })) : null, label !== undefined ? (_jsx(Field, { label: label, description: description, error: controlRenders ? error : undefined, group: !controlRenders, children: content })) : (content), _jsx(SelectedToolBadges, { value: value, badgesByTool: badgesByTool, idPrefix: idPrefix })] }));
122
140
  }
123
141
  //# sourceMappingURL=tool-picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-picker.js","sourceRoot":"","sources":["../../src/components/tool-picker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-picker.js","sourceRoot":"","sources":["../../src/components/tool-picker.tsx"],"names":[],"mappings":"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"}