@design.estate/dees-catalog 3.90.1 → 3.92.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.
- package/dist_bundle/bundle.js +10399 -4790
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-appui/dees-appui/dees-appui.js +5 -4
- package/dist_ts_web/elements/00group-appui/dees-appui-profiledropdown/dees-appui-profiledropdown.js +6 -7
- package/dist_ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.js +4 -6
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.d.ts +7 -1
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.demo.js +16 -2
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.js +65 -25
- package/dist_ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.js +1 -1
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/codebox.diff.d.ts +69 -0
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/codebox.diff.js +342 -0
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.d.ts +48 -3
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.demo.js +128 -39
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.js +663 -190
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-dataview/dees-dataview-codebox/index.js +2 -1
- package/dist_ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.d.ts +3 -0
- package/dist_ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.js +48 -30
- package/dist_ts_web/elements/00group-dataview/dees-grouped-list/dees-grouped-list.js +1 -1
- package/dist_ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.js +1 -2
- package/dist_ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-keys.js +1 -1
- package/dist_ts_web/elements/00group-dataview/dees-table/styles.js +1 -1
- package/dist_ts_web/elements/00group-feedback/dees-progressbar/dees-progressbar.js +9 -9
- package/dist_ts_web/elements/00group-form/dees-form-submit/dees-form-submit.d.ts +1 -1
- package/dist_ts_web/elements/00group-form/dees-form-submit/dees-form-submit.js +1 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.d.ts +55 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.js +183 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.js +412 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.d.ts +65 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.js +55 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.js +589 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.d.ts +21 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.demo.js +41 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.js +215 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-content-blocks/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.d.ts +58 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.demo.js +126 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.js +551 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.d.ts +50 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.demo.js +101 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +424 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.d.ts +27 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.demo.js +46 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.js +282 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.d.ts +24 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.demo.js +32 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.js +241 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.d.ts +28 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.js +56 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +279 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-list/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.d.ts +30 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.demo.js +35 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.js +235 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-status/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.d.ts +27 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.demo.js +41 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.js +258 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.d.ts +35 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.demo.js +162 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +368 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/index.d.ts +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/index.js +3 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/renderers.d.ts +5 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/renderers.js +183 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.d.ts +19 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.demo.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.demo.js +25 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.js +148 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/index.d.ts +1 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-usage/index.js +2 -0
- package/dist_ts_web/elements/00group-harness/harness.demodata.d.ts +22 -0
- package/dist_ts_web/elements/00group-harness/harness.demodata.js +94 -0
- package/dist_ts_web/elements/00group-harness/harness.helpers.d.ts +37 -0
- package/dist_ts_web/elements/00group-harness/harness.helpers.js +221 -0
- package/dist_ts_web/elements/00group-harness/harness.markdown.d.ts +25 -0
- package/dist_ts_web/elements/00group-harness/harness.markdown.js +147 -0
- package/dist_ts_web/elements/00group-harness/harness.styles.d.ts +9 -0
- package/dist_ts_web/elements/00group-harness/harness.styles.js +94 -0
- package/dist_ts_web/elements/00group-harness/index.d.ts +18 -0
- package/dist_ts_web/elements/00group-harness/index.js +22 -0
- package/dist_ts_web/elements/00group-harness/interfaces.d.ts +210 -0
- package/dist_ts_web/elements/00group-harness/interfaces.js +11 -0
- package/dist_ts_web/elements/00group-harness/toolregistry.d.ts +76 -0
- package/dist_ts_web/elements/00group-harness/toolregistry.js +210 -0
- package/dist_ts_web/elements/00group-input/dees-input-code/dees-input-code.js +30 -18
- package/dist_ts_web/elements/00group-input/dees-input-datepicker/datepicker-popup.js +73 -46
- package/dist_ts_web/elements/00group-input/dees-input-datepicker/styles.js +15 -16
- package/dist_ts_web/elements/00group-input/dees-input-list/dees-input-list.js +2 -4
- package/dist_ts_web/elements/00group-input/dees-input-tags/dees-input-tags.js +36 -15
- package/dist_ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.js +5 -4
- package/dist_ts_web/elements/00group-input/dees-input-wysiwyg/blocks/text/code.block.js +10 -89
- package/dist_ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.js +12 -8
- package/dist_ts_web/elements/00group-layout/dees-chips/dees-chips.js +1 -1
- package/dist_ts_web/elements/00group-layout/dees-pagination/dees-pagination.js +27 -12
- package/dist_ts_web/elements/00group-layout/dees-settings/dees-settings.js +1 -1
- package/dist_ts_web/elements/00group-layout/dees-stepper/dees-stepper.js +14 -18
- package/dist_ts_web/elements/00group-overlay/dees-contextmenu/dees-contextmenu.js +6 -7
- package/dist_ts_web/elements/00group-overlay/dees-modal/dees-modal.js +6 -21
- package/dist_ts_web/elements/00group-overlay/dees-windowlayer/dees-windowlayer.d.ts +2 -1
- package/dist_ts_web/elements/00group-overlay/dees-windowlayer/dees-windowlayer.js +10 -4
- package/dist_ts_web/elements/00group-simple/dees-shopping-productcard/dees-shopping-productcard.js +1 -1
- package/dist_ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.js +9 -8
- package/dist_ts_web/elements/00group-workspace/dees-workspace/dees-workspace.js +1 -1
- package/dist_ts_web/elements/00group-workspace/dees-workspace-filetree/dees-workspace-filetree.js +3 -4
- package/dist_ts_web/elements/00group-workspace/dees-workspace-markdownoutlet/dees-workspace-markdownoutlet.js +8 -78
- package/dist_ts_web/elements/00syntax.d.ts +28 -0
- package/dist_ts_web/elements/00syntax.js +98 -0
- package/dist_ts_web/elements/00theme.js +26 -14
- package/dist_ts_web/elements/index.d.ts +1 -0
- package/dist_ts_web/elements/index.js +2 -1
- package/dist_watch/bundle.js +233948 -0
- package/dist_watch/bundle.js.map +7 -0
- package/dist_watch/index.html +28 -0
- package/package.json +2 -2
- package/readme.hints.md +7 -1
- package/readme.md +116 -9
- package/readme.playbook.md +10 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-appui/dees-appui/dees-appui.ts +4 -3
- package/ts_web/elements/00group-appui/dees-appui-profiledropdown/dees-appui-profiledropdown.ts +5 -6
- package/ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.ts +3 -5
- package/ts_web/elements/00group-button/dees-button/dees-button.demo.ts +15 -1
- package/ts_web/elements/00group-button/dees-button/dees-button.ts +59 -24
- package/ts_web/elements/00group-chart/dees-chart-log/dees-chart-log.ts +1 -1
- package/ts_web/elements/00group-dataview/dees-dataview-codebox/codebox.diff.ts +401 -0
- package/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.demo.ts +132 -38
- package/ts_web/elements/00group-dataview/dees-dataview-codebox/dees-dataview-codebox.ts +649 -187
- package/ts_web/elements/00group-dataview/dees-dataview-codebox/index.ts +1 -0
- package/ts_web/elements/00group-dataview/dees-dataview-statusobject/dees-dataview-statusobject.ts +45 -30
- package/ts_web/elements/00group-dataview/dees-grouped-list/dees-grouped-list.ts +1 -1
- package/ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.ts +0 -1
- package/ts_web/elements/00group-dataview/dees-storage-browser/dees-storage-keys.ts +1 -1
- package/ts_web/elements/00group-dataview/dees-table/styles.ts +1 -1
- package/ts_web/elements/00group-feedback/dees-progressbar/dees-progressbar.ts +9 -9
- package/ts_web/elements/00group-form/dees-form-submit/dees-form-submit.ts +1 -1
- package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.ts +193 -0
- package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.ts +301 -0
- package/ts_web/elements/00group-harness/dees-harness-chat/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.ts +56 -0
- package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.ts +514 -0
- package/ts_web/elements/00group-harness/dees-harness-composer/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.demo.ts +44 -0
- package/ts_web/elements/00group-harness/dees-harness-content-blocks/dees-harness-content-blocks.ts +172 -0
- package/ts_web/elements/00group-harness/dees-harness-content-blocks/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.demo.ts +129 -0
- package/ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.ts +498 -0
- package/ts_web/elements/00group-harness/dees-harness-message/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.demo.ts +105 -0
- package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +342 -0
- package/ts_web/elements/00group-harness/dees-harness-message-list/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.demo.ts +47 -0
- package/ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.ts +225 -0
- package/ts_web/elements/00group-harness/dees-harness-permission-card/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.demo.ts +32 -0
- package/ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.ts +195 -0
- package/ts_web/elements/00group-harness/dees-harness-reasoning/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.demo.ts +59 -0
- package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +222 -0
- package/ts_web/elements/00group-harness/dees-harness-session-list/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.demo.ts +35 -0
- package/ts_web/elements/00group-harness/dees-harness-status/dees-harness-status.ts +187 -0
- package/ts_web/elements/00group-harness/dees-harness-status/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.demo.ts +43 -0
- package/ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.ts +206 -0
- package/ts_web/elements/00group-harness/dees-harness-todos/index.ts +1 -0
- package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.demo.ts +166 -0
- package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +315 -0
- package/ts_web/elements/00group-harness/dees-harness-tool-card/index.ts +2 -0
- package/ts_web/elements/00group-harness/dees-harness-tool-card/renderers.ts +205 -0
- package/ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.demo.ts +25 -0
- package/ts_web/elements/00group-harness/dees-harness-usage/dees-harness-usage.ts +96 -0
- package/ts_web/elements/00group-harness/dees-harness-usage/index.ts +1 -0
- package/ts_web/elements/00group-harness/harness.demodata.ts +113 -0
- package/ts_web/elements/00group-harness/harness.helpers.ts +227 -0
- package/ts_web/elements/00group-harness/harness.markdown.ts +151 -0
- package/ts_web/elements/00group-harness/harness.styles.ts +96 -0
- package/ts_web/elements/00group-harness/index.ts +22 -0
- package/ts_web/elements/00group-harness/interfaces.ts +203 -0
- package/ts_web/elements/00group-harness/toolregistry.ts +264 -0
- package/ts_web/elements/00group-input/dees-input-code/dees-input-code.ts +29 -17
- package/ts_web/elements/00group-input/dees-input-datepicker/datepicker-popup.ts +72 -45
- package/ts_web/elements/00group-input/dees-input-datepicker/styles.ts +14 -15
- package/ts_web/elements/00group-input/dees-input-list/dees-input-list.ts +1 -3
- package/ts_web/elements/00group-input/dees-input-tags/dees-input-tags.ts +35 -14
- package/ts_web/elements/00group-input/dees-input-toggle/dees-input-toggle.ts +4 -3
- package/ts_web/elements/00group-input/dees-input-wysiwyg/blocks/text/code.block.ts +9 -88
- package/ts_web/elements/00group-input/dees-input-wysiwyg/dees-input-wysiwyg.ts +11 -7
- package/ts_web/elements/00group-layout/dees-chips/dees-chips.ts +1 -1
- package/ts_web/elements/00group-layout/dees-pagination/dees-pagination.ts +26 -11
- package/ts_web/elements/00group-layout/dees-settings/dees-settings.ts +1 -1
- package/ts_web/elements/00group-layout/dees-stepper/dees-stepper.ts +13 -17
- package/ts_web/elements/00group-overlay/dees-contextmenu/dees-contextmenu.ts +5 -6
- package/ts_web/elements/00group-overlay/dees-modal/dees-modal.ts +5 -20
- package/ts_web/elements/00group-overlay/dees-windowlayer/dees-windowlayer.ts +10 -3
- package/ts_web/elements/00group-simple/dees-shopping-productcard/dees-shopping-productcard.ts +1 -1
- package/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts +8 -7
- package/ts_web/elements/00group-workspace/dees-workspace/dees-workspace.ts +1 -1
- package/ts_web/elements/00group-workspace/dees-workspace-filetree/dees-workspace-filetree.ts +2 -3
- package/ts_web/elements/00group-workspace/dees-workspace-markdownoutlet/dees-workspace-markdownoutlet.ts +7 -77
- package/ts_web/elements/00syntax.ts +124 -0
- package/ts_web/elements/00theme.ts +25 -13
- package/ts_web/elements/index.ts +1 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalized data contract for the harness (agentic chat) component group.
|
|
3
|
+
*
|
|
4
|
+
* Producers vary widely — smartagent callbacks, IDE runtime wire models,
|
|
5
|
+
* OpenCode-style part arrays, raw MCP results — so these interfaces define
|
|
6
|
+
* the ONE shape the components render. Consumers adapt their runtime's
|
|
7
|
+
* events into these types; everything here is plain data (no DOM, no
|
|
8
|
+
* framework types) so adapters can live anywhere.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// ---------------------------------------------------------------- messages
|
|
12
|
+
|
|
13
|
+
export type THarnessRole = 'user' | 'assistant' | 'system' | 'tool';
|
|
14
|
+
|
|
15
|
+
export interface IHarnessReasoningPart {
|
|
16
|
+
id: string;
|
|
17
|
+
text: string;
|
|
18
|
+
/** epoch ms; adapters convert wire ISO strings */
|
|
19
|
+
startedAt?: number;
|
|
20
|
+
/** undefined while the model is still thinking */
|
|
21
|
+
endedAt?: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface IHarnessAttachment {
|
|
25
|
+
id: string;
|
|
26
|
+
name: string;
|
|
27
|
+
mediaType: string;
|
|
28
|
+
/** bytes */
|
|
29
|
+
size: number;
|
|
30
|
+
kind: 'image' | 'text' | 'binary';
|
|
31
|
+
/** base64 payload for images and binary previews */
|
|
32
|
+
dataBase64?: string;
|
|
33
|
+
/** inline payload for text attachments */
|
|
34
|
+
text?: string;
|
|
35
|
+
truncated?: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface IHarnessUsage {
|
|
39
|
+
inputTokens?: number;
|
|
40
|
+
outputTokens?: number;
|
|
41
|
+
totalTokens?: number;
|
|
42
|
+
cacheReadTokens?: number;
|
|
43
|
+
cacheWriteTokens?: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface IHarnessMessage {
|
|
47
|
+
/** stable id — used as the keyed-repeat key; never reuse across messages */
|
|
48
|
+
id: string;
|
|
49
|
+
role: THarnessRole;
|
|
50
|
+
text: string;
|
|
51
|
+
/** epoch ms */
|
|
52
|
+
createdAt: number;
|
|
53
|
+
updatedAt?: number;
|
|
54
|
+
/** gates the streaming cursor and markdown parse throttling */
|
|
55
|
+
streaming?: boolean;
|
|
56
|
+
/** defaults to role === 'assistant' when undefined */
|
|
57
|
+
markdown?: boolean;
|
|
58
|
+
reasoning?: IHarnessReasoningPart[];
|
|
59
|
+
attachments?: IHarnessAttachment[];
|
|
60
|
+
/** role 'tool' messages render as a tool card */
|
|
61
|
+
toolCall?: IHarnessToolCall;
|
|
62
|
+
usage?: IHarnessUsage;
|
|
63
|
+
error?: string;
|
|
64
|
+
/** consumer passthrough; never interpreted by the components */
|
|
65
|
+
meta?: Record<string, unknown>;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// -------------------------------------------------------------- tool calls
|
|
69
|
+
|
|
70
|
+
export type THarnessToolStatus = 'pending' | 'running' | 'completed' | 'error';
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* MCP-aligned content blocks (mirrors @modelcontextprotocol/sdk
|
|
74
|
+
* CallToolResult.content entries) so tool results keep their structure
|
|
75
|
+
* instead of being string-flattened.
|
|
76
|
+
*/
|
|
77
|
+
export type THarnessContentBlock =
|
|
78
|
+
| { type: 'text'; text: string }
|
|
79
|
+
| { type: 'image'; data: string; mimeType: string }
|
|
80
|
+
| { type: 'audio'; data: string; mimeType: string }
|
|
81
|
+
| { type: 'resource'; resource: { uri: string; mimeType?: string; text?: string; blob?: string } }
|
|
82
|
+
| {
|
|
83
|
+
type: 'resource_link';
|
|
84
|
+
uri: string;
|
|
85
|
+
name: string;
|
|
86
|
+
title?: string;
|
|
87
|
+
description?: string;
|
|
88
|
+
mimeType?: string;
|
|
89
|
+
size?: number;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export interface IHarnessMcpAnnotations {
|
|
93
|
+
title?: string;
|
|
94
|
+
readOnlyHint?: boolean;
|
|
95
|
+
destructiveHint?: boolean;
|
|
96
|
+
idempotentHint?: boolean;
|
|
97
|
+
openWorldHint?: boolean;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export interface IHarnessMcpMeta {
|
|
101
|
+
serverName: string;
|
|
102
|
+
/** un-namespaced tool name (the part after `server__`) */
|
|
103
|
+
toolName: string;
|
|
104
|
+
annotations?: IHarnessMcpAnnotations;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Tool calls are deliberately generic-plus-kind rather than a closed
|
|
109
|
+
* discriminated union: the set of tools is open (arbitrary MCP servers,
|
|
110
|
+
* app-specific tools), so classification happens at render time through the
|
|
111
|
+
* tool registry. `kind` is an optional explicit override.
|
|
112
|
+
*/
|
|
113
|
+
export interface IHarnessToolCall {
|
|
114
|
+
id: string;
|
|
115
|
+
/** raw tool name as invoked, including `server__tool` MCP namespacing */
|
|
116
|
+
name: string;
|
|
117
|
+
kind?: string;
|
|
118
|
+
status: THarnessToolStatus;
|
|
119
|
+
input?: unknown;
|
|
120
|
+
output?: unknown;
|
|
121
|
+
/** MCP CallToolResult.content, rendered structurally when present */
|
|
122
|
+
contentBlocks?: THarnessContentBlock[];
|
|
123
|
+
/** MCP CallToolResult.structuredContent */
|
|
124
|
+
structuredContent?: unknown;
|
|
125
|
+
/** MCP CallToolResult.isError */
|
|
126
|
+
isError?: boolean;
|
|
127
|
+
errorText?: string;
|
|
128
|
+
mcp?: IHarnessMcpMeta;
|
|
129
|
+
/** epoch ms */
|
|
130
|
+
startedAt?: number;
|
|
131
|
+
finishedAt?: number;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// ------------------------------------------------------------- permissions
|
|
135
|
+
|
|
136
|
+
export interface IHarnessPermissionRequest {
|
|
137
|
+
id: string;
|
|
138
|
+
sessionId?: string;
|
|
139
|
+
/** epoch ms */
|
|
140
|
+
createdAt?: number;
|
|
141
|
+
title: string;
|
|
142
|
+
/** open set; well-known values today: write | delete | shell | browser */
|
|
143
|
+
type: string;
|
|
144
|
+
metadata?: Record<string, unknown>;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export type THarnessPermissionResponse = 'once' | 'always' | 'reject';
|
|
148
|
+
|
|
149
|
+
export interface IHarnessPermissionResponseDetail {
|
|
150
|
+
requestId: string;
|
|
151
|
+
response: THarnessPermissionResponse;
|
|
152
|
+
remember: boolean;
|
|
153
|
+
request: IHarnessPermissionRequest;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// ------------------------------------------------------- sessions & status
|
|
157
|
+
|
|
158
|
+
export interface IHarnessSessionMeta {
|
|
159
|
+
id: string;
|
|
160
|
+
title: string;
|
|
161
|
+
createdAt?: number;
|
|
162
|
+
updatedAt?: number;
|
|
163
|
+
messageCount?: number;
|
|
164
|
+
preview?: string;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export type THarnessTodoStatus = 'pending' | 'in_progress' | 'completed';
|
|
168
|
+
|
|
169
|
+
export interface IHarnessTodoItem {
|
|
170
|
+
id?: string;
|
|
171
|
+
content: string;
|
|
172
|
+
status: THarnessTodoStatus;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export interface IHarnessStatus {
|
|
176
|
+
type: 'idle' | 'busy' | 'error';
|
|
177
|
+
message?: string;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// ---------------------------------------------------------------- composer
|
|
181
|
+
|
|
182
|
+
export interface IHarnessComposerSendDetail {
|
|
183
|
+
text: string;
|
|
184
|
+
attachments: IHarnessAttachment[];
|
|
185
|
+
model?: string;
|
|
186
|
+
reasoningEffort?: string;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// --------------------------------------------------------------- streaming
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Incremental updates for the `applyDelta()` fast path. Deltas mutate the
|
|
193
|
+
* message object already held in `.messages` (so a later full property
|
|
194
|
+
* re-assignment is idempotent) and re-render only the affected message
|
|
195
|
+
* element.
|
|
196
|
+
*/
|
|
197
|
+
export type THarnessStreamDelta =
|
|
198
|
+
| { type: 'text'; messageId: string; delta: string }
|
|
199
|
+
| { type: 'reasoning-start'; messageId: string; partId: string; startedAt?: number }
|
|
200
|
+
| { type: 'reasoning'; messageId: string; partId: string; delta: string }
|
|
201
|
+
| { type: 'reasoning-end'; messageId: string; partId: string; endedAt?: number }
|
|
202
|
+
| { type: 'tool-update'; messageId: string; tool: Partial<IHarnessToolCall> & { id: string } }
|
|
203
|
+
| { type: 'message-end'; messageId: string; usage?: IHarnessUsage; error?: string };
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import type { TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
import type { IHarnessToolCall, THarnessContentBlock } from './interfaces.js';
|
|
3
|
+
import { harnessIsRecord, harnessSummaryLine } from './harness.helpers.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Render helpers handed to tool body renderers. Implemented by
|
|
7
|
+
* dees-harness-tool-card (which owns the templates); typed here so custom
|
|
8
|
+
* descriptors can be authored against a stable surface.
|
|
9
|
+
*/
|
|
10
|
+
export interface IHarnessToolRenderHelpers {
|
|
11
|
+
/** highlighted code block (dees-dataview-codebox) with optional filename */
|
|
12
|
+
codeBlock(code: string, language?: string, filename?: string): TemplateResult;
|
|
13
|
+
/** before/after diff (dees-dataview-codebox diff mode) */
|
|
14
|
+
diffBlock(before: string, after: string, options?: { language?: string; filename?: string; view?: 'inline' | 'split' }): TemplateResult;
|
|
15
|
+
/** plain monospace block with truncation + expand */
|
|
16
|
+
monoBlock(text: string, options?: { maxChars?: number; tone?: 'default' | 'error' }): TemplateResult;
|
|
17
|
+
/** two-column key/value summary */
|
|
18
|
+
keyValues(pairs: Array<[string, string]>): TemplateResult;
|
|
19
|
+
/** MCP content blocks (dees-harness-content-blocks) */
|
|
20
|
+
contentBlocks(blocks: THarnessContentBlock[]): TemplateResult;
|
|
21
|
+
/** constrained inline image from base64 */
|
|
22
|
+
image(dataBase64: string, mimeType: string, alt?: string): TemplateResult;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface IHarnessToolDescriptor {
|
|
26
|
+
/** stable kind id, e.g. 'terminal', 'file-read', 'mcp', 'unknown' */
|
|
27
|
+
kind: string;
|
|
28
|
+
/** exact raw-name matches (fast path); lowercased on registration */
|
|
29
|
+
names?: string[];
|
|
30
|
+
/** fallback matcher when no name matched */
|
|
31
|
+
match?: (call: IHarnessToolCall) => boolean;
|
|
32
|
+
label: string | ((call: IHarnessToolCall) => string);
|
|
33
|
+
/** lucide icon spec, e.g. 'lucide:Terminal' */
|
|
34
|
+
icon: string;
|
|
35
|
+
subtitle?: (call: IHarnessToolCall) => string;
|
|
36
|
+
/**
|
|
37
|
+
* Custom body renderer. Built-in kinds leave this unset — the tool card
|
|
38
|
+
* ships body templates for them — so descriptors stay DOM-free unless a
|
|
39
|
+
* consumer wants a bespoke body.
|
|
40
|
+
*/
|
|
41
|
+
renderBody?: (call: IHarnessToolCall, helpers: IHarnessToolRenderHelpers) => TemplateResult;
|
|
42
|
+
defaultExpanded?: boolean | ((call: IHarnessToolCall) => boolean);
|
|
43
|
+
/** styles the card with a destructive accent regardless of status */
|
|
44
|
+
destructive?: boolean;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Splits smartagent's MCP namespacing convention `server__tool`. */
|
|
48
|
+
export const parseMcpName = (
|
|
49
|
+
rawName: string,
|
|
50
|
+
): { serverName: string; toolName: string } | undefined => {
|
|
51
|
+
const separatorIndex = rawName.indexOf('__');
|
|
52
|
+
if (separatorIndex <= 0 || separatorIndex >= rawName.length - 2) return undefined;
|
|
53
|
+
return {
|
|
54
|
+
serverName: rawName.slice(0, separatorIndex),
|
|
55
|
+
toolName: rawName.slice(separatorIndex + 2),
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const inputField = (call: IHarnessToolCall, key: string): string => {
|
|
60
|
+
return harnessIsRecord(call.input) && typeof call.input[key] === 'string'
|
|
61
|
+
? (call.input[key] as string)
|
|
62
|
+
: '';
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const inputAny = (call: IHarnessToolCall, key: string): unknown => {
|
|
66
|
+
return harnessIsRecord(call.input) ? call.input[key] : undefined;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const filePathOf = (call: IHarnessToolCall): string =>
|
|
70
|
+
inputField(call, 'path') || inputField(call, 'filePath') || inputField(call, 'file');
|
|
71
|
+
|
|
72
|
+
const defaultDescriptors: IHarnessToolDescriptor[] = [
|
|
73
|
+
{
|
|
74
|
+
kind: 'terminal',
|
|
75
|
+
names: ['run_command', 'bash', 'shell', 'exec'],
|
|
76
|
+
label: 'Shell',
|
|
77
|
+
icon: 'lucide:Terminal',
|
|
78
|
+
subtitle: (call) => {
|
|
79
|
+
const command = inputField(call, 'command');
|
|
80
|
+
const cwd = inputField(call, 'cwd') || inputField(call, 'workdir');
|
|
81
|
+
return command ? `${command}${cwd ? ` — in ${cwd}` : ''}` : harnessSummaryLine(call.input);
|
|
82
|
+
},
|
|
83
|
+
defaultExpanded: true,
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
kind: 'file-read',
|
|
87
|
+
names: ['read_file', 'read'],
|
|
88
|
+
label: 'Read',
|
|
89
|
+
icon: 'lucide:FileText',
|
|
90
|
+
subtitle: (call) => {
|
|
91
|
+
const path = filePathOf(call);
|
|
92
|
+
const startLine = inputAny(call, 'startLine');
|
|
93
|
+
const endLine = inputAny(call, 'endLine');
|
|
94
|
+
const range = startLine || endLine ? `:${startLine ?? ''}-${endLine ?? ''}` : '';
|
|
95
|
+
return path ? `${path}${range}` : harnessSummaryLine(call.input);
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
kind: 'file-write',
|
|
100
|
+
names: ['write_file', 'write', 'edit', 'edit_file', 'apply_patch', 'patch'],
|
|
101
|
+
label: 'Write',
|
|
102
|
+
icon: 'lucide:FilePen',
|
|
103
|
+
subtitle: (call) => filePathOf(call) || harnessSummaryLine(call.input),
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
kind: 'file-delete',
|
|
107
|
+
names: ['delete_file', 'delete', 'remove_file'],
|
|
108
|
+
label: 'Delete',
|
|
109
|
+
icon: 'lucide:Trash2',
|
|
110
|
+
subtitle: (call) => filePathOf(call) || harnessSummaryLine(call.input),
|
|
111
|
+
destructive: true,
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
kind: 'dir-list',
|
|
115
|
+
names: ['list_directory', 'list', 'ls'],
|
|
116
|
+
label: 'List',
|
|
117
|
+
icon: 'lucide:FolderOpen',
|
|
118
|
+
subtitle: (call) => {
|
|
119
|
+
const path = filePathOf(call) || '.';
|
|
120
|
+
return inputAny(call, 'recursive') ? `${path} (recursive)` : path;
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
kind: 'browser',
|
|
125
|
+
names: ['browser'],
|
|
126
|
+
label: 'Browser',
|
|
127
|
+
icon: 'lucide:Globe',
|
|
128
|
+
subtitle: (call) => {
|
|
129
|
+
const action = inputField(call, 'action') || 'snapshot';
|
|
130
|
+
const target = inputField(call, 'url') || inputField(call, 'selector');
|
|
131
|
+
return `${action}${target ? ` ${target}` : ''}`;
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
kind: 'http',
|
|
136
|
+
names: ['http_get', 'http_post', 'webfetch', 'fetch'],
|
|
137
|
+
label: (call) => (call.name === 'http_post' ? 'HTTP POST' : call.name === 'http_get' ? 'HTTP GET' : 'Fetch'),
|
|
138
|
+
icon: 'lucide:ArrowDownUp',
|
|
139
|
+
subtitle: (call) => inputField(call, 'url') || harnessSummaryLine(call.input),
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
kind: 'json',
|
|
143
|
+
names: ['json_validate', 'json_transform'],
|
|
144
|
+
label: (call) => (call.name === 'json_transform' ? 'JSON Transform' : 'JSON Validate'),
|
|
145
|
+
icon: 'lucide:Braces',
|
|
146
|
+
subtitle: (call) => {
|
|
147
|
+
const source = inputField(call, 'jsonString');
|
|
148
|
+
return source ? (source.length > 60 ? `${source.slice(0, 60)}…` : source) : harnessSummaryLine(call.input);
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
kind: 'search',
|
|
153
|
+
names: ['grep', 'glob', 'websearch', 'search'],
|
|
154
|
+
label: 'Search',
|
|
155
|
+
icon: 'lucide:Search',
|
|
156
|
+
subtitle: (call) =>
|
|
157
|
+
inputField(call, 'pattern') || inputField(call, 'query') || filePathOf(call) || harnessSummaryLine(call.input),
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
kind: 'subtask',
|
|
161
|
+
names: ['task', 'subagent'],
|
|
162
|
+
label: 'Subagent',
|
|
163
|
+
icon: 'lucide:Bot',
|
|
164
|
+
subtitle: (call) => inputField(call, 'description') || inputField(call, 'prompt') || harnessSummaryLine(call.input),
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
kind: 'todo',
|
|
168
|
+
names: ['todowrite', 'todo_write', 'todoread'],
|
|
169
|
+
label: 'Todos',
|
|
170
|
+
icon: 'lucide:ListTodo',
|
|
171
|
+
subtitle: (call) => {
|
|
172
|
+
const todos = inputAny(call, 'todos');
|
|
173
|
+
return Array.isArray(todos) ? `${todos.length} todos` : harnessSummaryLine(call.input);
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
kind: 'mcp',
|
|
178
|
+
label: (call) => call.mcp?.annotations?.title || call.mcp?.toolName || parseMcpName(call.name)?.toolName || call.name,
|
|
179
|
+
icon: 'lucide:Plug',
|
|
180
|
+
match: (call) => Boolean(call.mcp) || Boolean(parseMcpName(call.name)),
|
|
181
|
+
subtitle: (call) => harnessSummaryLine(call.input),
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
kind: 'unknown',
|
|
185
|
+
label: (call) => call.name || 'Tool',
|
|
186
|
+
icon: 'lucide:Wrench',
|
|
187
|
+
subtitle: (call) => harnessSummaryLine(call.input),
|
|
188
|
+
},
|
|
189
|
+
];
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Maps raw tool calls to render descriptors. A pre-seeded singleton covers
|
|
193
|
+
* the built-in and MCP conventions; apps register custom tools once at boot
|
|
194
|
+
* (`DeesHarnessToolRegistry.default.register(...)`) or hand an isolated
|
|
195
|
+
* `fork()` to individual elements via their `.toolRegistry` property.
|
|
196
|
+
*/
|
|
197
|
+
export class DeesHarnessToolRegistry {
|
|
198
|
+
public static readonly default: DeesHarnessToolRegistry = new DeesHarnessToolRegistry(defaultDescriptors);
|
|
199
|
+
|
|
200
|
+
private descriptors: IHarnessToolDescriptor[] = [];
|
|
201
|
+
private byName = new Map<string, IHarnessToolDescriptor>();
|
|
202
|
+
private byKind = new Map<string, IHarnessToolDescriptor>();
|
|
203
|
+
|
|
204
|
+
constructor(seedDescriptors: IHarnessToolDescriptor[] = []) {
|
|
205
|
+
for (const descriptor of seedDescriptors) {
|
|
206
|
+
this.register(descriptor);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** Registers (or replaces, by kind) a descriptor. Later wins on names. */
|
|
211
|
+
public register(descriptor: IHarnessToolDescriptor): this {
|
|
212
|
+
const existing = this.byKind.get(descriptor.kind);
|
|
213
|
+
if (existing) {
|
|
214
|
+
this.descriptors = this.descriptors.filter((candidate) => candidate !== existing);
|
|
215
|
+
for (const [name, mapped] of this.byName) {
|
|
216
|
+
if (mapped === existing) this.byName.delete(name);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
this.byKind.set(descriptor.kind, descriptor);
|
|
220
|
+
this.descriptors.push(descriptor);
|
|
221
|
+
for (const name of descriptor.names ?? []) {
|
|
222
|
+
this.byName.set(name.toLowerCase(), descriptor);
|
|
223
|
+
}
|
|
224
|
+
return this;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
public unregister(kind: string): this {
|
|
228
|
+
const existing = this.byKind.get(kind);
|
|
229
|
+
if (!existing) return this;
|
|
230
|
+
this.byKind.delete(kind);
|
|
231
|
+
this.descriptors = this.descriptors.filter((candidate) => candidate !== existing);
|
|
232
|
+
for (const [name, mapped] of this.byName) {
|
|
233
|
+
if (mapped === existing) this.byName.delete(name);
|
|
234
|
+
}
|
|
235
|
+
return this;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
public descriptorForKind(kind: string): IHarnessToolDescriptor | undefined {
|
|
239
|
+
return this.byKind.get(kind);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** Never returns undefined — falls back to the 'unknown' descriptor. */
|
|
243
|
+
public resolve(call: IHarnessToolCall): IHarnessToolDescriptor {
|
|
244
|
+
if (call.kind) {
|
|
245
|
+
const explicit = this.byKind.get(call.kind);
|
|
246
|
+
if (explicit) return explicit;
|
|
247
|
+
}
|
|
248
|
+
const named = this.byName.get(String(call.name || '').toLowerCase());
|
|
249
|
+
if (named) return named;
|
|
250
|
+
for (const descriptor of this.descriptors) {
|
|
251
|
+
if (descriptor.match?.(call)) return descriptor;
|
|
252
|
+
}
|
|
253
|
+
return this.byKind.get('unknown') ?? defaultDescriptors[defaultDescriptors.length - 1];
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
public resolveKind(name: string): string {
|
|
257
|
+
return this.resolve({ id: '', name, status: 'completed' }).kind;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/** Isolated copy for demos, tests, or per-pane toolsets. */
|
|
261
|
+
public fork(): DeesHarnessToolRegistry {
|
|
262
|
+
return new DeesHarnessToolRegistry(this.descriptors.map((descriptor) => ({ ...descriptor })));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
@@ -150,10 +150,13 @@ export class DeesInputCode extends DeesInputBase<string> {
|
|
|
150
150
|
font-weight: 500;
|
|
151
151
|
background: var(--dees-color-bg-primary);
|
|
152
152
|
border: 1px solid var(--dees-color-border-default);
|
|
153
|
-
border-radius:
|
|
153
|
+
border-radius: var(--dees-radius-md);
|
|
154
154
|
cursor: pointer;
|
|
155
155
|
color: var(--dees-color-text-secondary);
|
|
156
|
-
transition:
|
|
156
|
+
transition:
|
|
157
|
+
background-color var(--dees-transition-fast) var(--dees-ease-standard),
|
|
158
|
+
color var(--dees-transition-fast) var(--dees-ease-standard),
|
|
159
|
+
border-color var(--dees-transition-fast) var(--dees-ease-standard);
|
|
157
160
|
}
|
|
158
161
|
|
|
159
162
|
.language-button:hover {
|
|
@@ -167,8 +170,8 @@ export class DeesInputCode extends DeesInputBase<string> {
|
|
|
167
170
|
margin-top: 4px;
|
|
168
171
|
background: var(--dees-color-bg-primary);
|
|
169
172
|
border: 1px solid var(--dees-color-border-default);
|
|
170
|
-
border-radius:
|
|
171
|
-
box-shadow:
|
|
173
|
+
border-radius: var(--dees-radius-lg);
|
|
174
|
+
box-shadow: var(--dees-shadow-lg);
|
|
172
175
|
z-index: 100;
|
|
173
176
|
max-height: 250px;
|
|
174
177
|
overflow-y: auto;
|
|
@@ -180,7 +183,7 @@ export class DeesInputCode extends DeesInputBase<string> {
|
|
|
180
183
|
font-size: 12px;
|
|
181
184
|
cursor: pointer;
|
|
182
185
|
color: var(--dees-color-text-secondary);
|
|
183
|
-
transition: background
|
|
186
|
+
transition: background-color var(--dees-transition-fast) var(--dees-ease-standard);
|
|
184
187
|
}
|
|
185
188
|
|
|
186
189
|
.language-option:hover {
|
|
@@ -199,10 +202,13 @@ export class DeesInputCode extends DeesInputBase<string> {
|
|
|
199
202
|
height: 32px;
|
|
200
203
|
background: transparent;
|
|
201
204
|
border: none;
|
|
202
|
-
border-radius:
|
|
205
|
+
border-radius: var(--dees-radius-md);
|
|
203
206
|
cursor: pointer;
|
|
204
207
|
color: var(--dees-color-text-muted);
|
|
205
|
-
transition:
|
|
208
|
+
transition:
|
|
209
|
+
background-color var(--dees-transition-fast) var(--dees-ease-standard),
|
|
210
|
+
color var(--dees-transition-fast) var(--dees-ease-standard),
|
|
211
|
+
border-color var(--dees-transition-fast) var(--dees-ease-standard);
|
|
206
212
|
}
|
|
207
213
|
|
|
208
214
|
.toolbar-button:hover {
|
|
@@ -216,7 +222,7 @@ export class DeesInputCode extends DeesInputBase<string> {
|
|
|
216
222
|
}
|
|
217
223
|
|
|
218
224
|
.toolbar-button.success {
|
|
219
|
-
color:
|
|
225
|
+
color: var(--dees-color-text-success);
|
|
220
226
|
}
|
|
221
227
|
|
|
222
228
|
.editor-wrapper {
|
|
@@ -582,10 +588,13 @@ export class DeesInputCode extends DeesInputBase<string> {
|
|
|
582
588
|
font-weight: 500;
|
|
583
589
|
background: var(--dees-color-bg-primary);
|
|
584
590
|
border: 1px solid var(--dees-color-border-default);
|
|
585
|
-
border-radius:
|
|
591
|
+
border-radius: var(--dees-radius-md);
|
|
586
592
|
cursor: pointer;
|
|
587
593
|
color: var(--dees-color-text-primary);
|
|
588
|
-
transition:
|
|
594
|
+
transition:
|
|
595
|
+
background-color var(--dees-transition-fast) var(--dees-ease-standard),
|
|
596
|
+
color var(--dees-transition-fast) var(--dees-ease-standard),
|
|
597
|
+
border-color var(--dees-transition-fast) var(--dees-ease-standard);
|
|
589
598
|
}
|
|
590
599
|
.modal-toolbar .language-button:hover {
|
|
591
600
|
background: var(--dees-color-badge-default-bg);
|
|
@@ -595,10 +604,10 @@ export class DeesInputCode extends DeesInputBase<string> {
|
|
|
595
604
|
top: 100%;
|
|
596
605
|
left: 0;
|
|
597
606
|
margin-top: 4px;
|
|
598
|
-
background: var(--dees-color-
|
|
607
|
+
background: var(--dees-color-bg-primary);
|
|
599
608
|
border: 1px solid var(--dees-color-border-default);
|
|
600
|
-
border-radius:
|
|
601
|
-
box-shadow:
|
|
609
|
+
border-radius: var(--dees-radius-lg);
|
|
610
|
+
box-shadow: var(--dees-shadow-lg);
|
|
602
611
|
z-index: 100;
|
|
603
612
|
max-height: 250px;
|
|
604
613
|
overflow-y: auto;
|
|
@@ -610,7 +619,7 @@ export class DeesInputCode extends DeesInputBase<string> {
|
|
|
610
619
|
font-size: 12px;
|
|
611
620
|
cursor: pointer;
|
|
612
621
|
color: var(--dees-color-text-primary);
|
|
613
|
-
transition: background
|
|
622
|
+
transition: background-color var(--dees-transition-fast) var(--dees-ease-standard);
|
|
614
623
|
}
|
|
615
624
|
.modal-toolbar .language-option:hover {
|
|
616
625
|
background: var(--dees-color-badge-default-bg);
|
|
@@ -626,10 +635,13 @@ export class DeesInputCode extends DeesInputBase<string> {
|
|
|
626
635
|
height: 32px;
|
|
627
636
|
background: transparent;
|
|
628
637
|
border: none;
|
|
629
|
-
border-radius:
|
|
638
|
+
border-radius: var(--dees-radius-md);
|
|
630
639
|
cursor: pointer;
|
|
631
640
|
color: var(--dees-color-text-muted);
|
|
632
|
-
transition:
|
|
641
|
+
transition:
|
|
642
|
+
background-color var(--dees-transition-fast) var(--dees-ease-standard),
|
|
643
|
+
color var(--dees-transition-fast) var(--dees-ease-standard),
|
|
644
|
+
border-color var(--dees-transition-fast) var(--dees-ease-standard);
|
|
633
645
|
}
|
|
634
646
|
.modal-toolbar .toolbar-button:hover {
|
|
635
647
|
background: var(--dees-color-border-default);
|
|
@@ -640,7 +652,7 @@ export class DeesInputCode extends DeesInputBase<string> {
|
|
|
640
652
|
color: var(--dees-color-text-primary);
|
|
641
653
|
}
|
|
642
654
|
.modal-toolbar .toolbar-button.success {
|
|
643
|
-
color:
|
|
655
|
+
color: var(--dees-color-text-success);
|
|
644
656
|
}
|
|
645
657
|
.modal-toolbar .toolbar-divider {
|
|
646
658
|
width: 1px;
|