Skip to content

Commit 96bf6ef

Browse files
authored
Merge branch 'main' into 6669-wrong-url-and-favicon
2 parents 3519331 + caa8232 commit 96bf6ef

44 files changed

Lines changed: 1317 additions & 308 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/branch-deploy.yaml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ on:
4040
- 'docs/**'
4141

4242
concurrency:
43-
group: ${{ github.workflow }}-${{ github.event.number }}
43+
group: ${{ github.workflow }}-${{ github.event.number || inputs.pr_number }}
4444
cancel-in-progress: false
4545

4646
env:
@@ -89,7 +89,7 @@ jobs:
8989
needs.validate-user.outputs.is_org_member == 'true' &&
9090
github.event_name == 'workflow_dispatch' &&
9191
inputs.driver_k8s_branch != 'main'
92-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
92+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
9393
with:
9494
package_name: driver-k8s
9595
publish_package: true
@@ -106,7 +106,7 @@ jobs:
106106
needs.validate-user.outputs.is_org_member == 'true' &&
107107
github.event_name == 'workflow_dispatch' &&
108108
inputs.nr_project_nodes_branch != 'main'
109-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
109+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
110110
with:
111111
package_name: nr-project-nodes
112112
publish_package: true
@@ -123,7 +123,7 @@ jobs:
123123
needs.validate-user.outputs.is_org_member == 'true' &&
124124
github.event_name == 'workflow_dispatch' &&
125125
inputs.nr_file_nodes_branch != 'main'
126-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
126+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
127127
with:
128128
package_name: nr-file-nodes
129129
publish_package: true
@@ -140,7 +140,7 @@ jobs:
140140
needs.validate-user.outputs.is_org_member == 'true' &&
141141
github.event_name == 'workflow_dispatch' &&
142142
inputs.nr_assistant_branch != 'main'
143-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
143+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
144144
with:
145145
package_name: nr-assistant
146146
publish_package: true
@@ -157,7 +157,7 @@ jobs:
157157
needs.validate-user.outputs.is_org_member == 'true' &&
158158
github.event_name == 'workflow_dispatch' &&
159159
inputs.nr_tables_nodes_branch != 'main'
160-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
160+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
161161
with:
162162
package_name: nr-tables-nodes
163163
publish_package: true
@@ -179,7 +179,7 @@ jobs:
179179
needs.validate-user.outputs.is_org_member == 'true' &&
180180
github.event_name == 'workflow_dispatch' &&
181181
(always() && inputs.nr_launcher_branch != 'main') || needs.publish_nr_project_nodes.result == 'success' || needs.publish_nr_file_nodes.result == 'success' || needs.publish_nr_assistant.result == 'success' || needs.publish_nr_tables_nodes.result == 'success'
182-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
182+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
183183
with:
184184
package_name: flowfuse-nr-launcher
185185
publish_package: true
@@ -203,7 +203,7 @@ jobs:
203203
needs.validate-user.outputs.is_org_member == 'true' &&
204204
github.event_name == 'workflow_dispatch' &&
205205
(always() && needs.publish_nr_launcher.result == 'success')
206-
uses: flowfuse/github-actions-workflows/.github/workflows/build_container_image.yml@v0.47.0
206+
uses: flowfuse/github-actions-workflows/.github/workflows/build_container_image.yml@v0.48.0
207207
with:
208208
image_name: 'node-red'
209209
dockerfile_path: Dockerfile
@@ -247,7 +247,7 @@ jobs:
247247

248248
- name: Configure AWS credentials for ECR interaction
249249
id: aws-config
250-
uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1
250+
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
251251
with:
252252
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ env.AWS_ECR_PUSH_ROLE }}
253253
role-session-name: GithubActionsRoleSession
@@ -386,7 +386,7 @@ jobs:
386386

387387
- name: Configure AWS credentials for ECR interaction
388388
id: aws-config
389-
uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1
389+
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
390390
with:
391391
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ env.AWS_ECR_PUSH_ROLE }}
392392
role-session-name: GithubActionsRoleSession
@@ -406,7 +406,7 @@ jobs:
406406
docker push ${{ steps.aws-config.outputs.aws-account-id }}.dkr.ecr.eu-west-1.amazonaws.com/flowforge/${{ env.tagged_image }}-${{ env.timestamp }}
407407
408408
- name: Configure AWS credentials for EKS interaction
409-
uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1
409+
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
410410
with:
411411
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ env.AWS_EKS_DEPLOY_ROLE }}
412412
role-session-name: GithubActionsRoleSessio
@@ -617,7 +617,7 @@ jobs:
617617
id-token: write
618618
steps:
619619
- name: Configure AWS credentials for EKS interaction
620-
uses: aws-actions/configure-aws-credentials@61815dcd50bd041e203e49132bacad1fd04d2708 # v5.1.1
620+
uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v6.0.0
621621
with:
622622
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ env.AWS_EKS_DEPLOY_ROLE }}
623623
role-session-name: GithubActionsRoleSession

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ jobs:
9797
if: |
9898
needs.check-tests-status.outputs.tests_status == 'success' && github.ref == 'refs/heads/main'
9999
needs: check-tests-status
100-
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.47.0'
100+
uses: 'flowfuse/github-actions-workflows/.github/workflows/publish_node_package.yml@v0.48.0'
101101
with:
102102
package_name: flowfuse
103103
build_package: true

.github/workflows/release-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ jobs:
1818
- run: npm ci
1919
- run: npm run build
2020
# - run: npm run test
21-
- uses: JS-DevTools/npm-publish@4ce4bd0f334d5316473155078da1955d42148494 # v4.1.4
21+
- uses: JS-DevTools/npm-publish@0fd2f4369c5d6bcfcde6091a7c527d810b9b5c3f # v4.1.5
2222
with:
2323
token: ${{ secrets.NPM_PUBLISH_TOKEN }}

.github/workflows/tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ jobs:
140140
- name: Install Dependencies
141141
run: npm ci
142142
- name: Run UI E2E (Cypress) Tests - OS
143-
uses: cypress-io/github-action@0f330ebf0d60f87608ed72f1d6232e5644aa3171 # v7.1.1
143+
uses: cypress-io/github-action@84d178e4bbce871e23f2ffa3085898cde0e4f0ec # v7.1.2
144144
with:
145145
install: false
146146
config-file: config/cypress-os.config.js
@@ -180,7 +180,7 @@ jobs:
180180
- name: Install Dependencies
181181
run: npm ci
182182
- name: Run UI E2E (Cypress) Tests - EE
183-
uses: cypress-io/github-action@0f330ebf0d60f87608ed72f1d6232e5644aa3171 # v7.1.1
183+
uses: cypress-io/github-action@84d178e4bbce871e23f2ffa3085898cde0e4f0ec # v7.1.2
184184
with:
185185
install: false
186186
config-file: config/cypress-ee.config.js

frontend/src/components/ResizeBar.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div class="resize-bar" :class="{horizontal: isHorizontal}" />
2+
<div class="resize-bar" :class="{horizontal: isHorizontal, resizing: isResizing}" />
33
</template>
44

55
<script>
@@ -9,6 +9,10 @@ export default {
99
direction: {
1010
type: String,
1111
default: 'vertical' // vertical || horizontal
12+
},
13+
isResizing: {
14+
type: Boolean,
15+
default: false
1216
}
1317
},
1418
computed: {

frontend/src/components/TextCopier.vue

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<template>
22
<span class="ff-text-copier">
3-
<span v-if="showText" @click="copyPath">
3+
<span v-if="showText" @click.stop="copyPath">
44
<slot name="default">
55
<span class="text">{{ text }}</span>
66
</slot>
77
</span>
8-
<button v-if="hasText" class="ff-icon-button" @click="copyPath">
8+
<button v-if="hasText" class="ff-icon-button" @click.stop="copyPath">
99
<DuplicateIcon v-if="!copied" class="ff-icon" />
1010
<CheckIcon v-else class="ff-icon ff-icon-check" />
1111
</button>
@@ -114,15 +114,15 @@ export default {
114114
border-radius: 4px;
115115
cursor: pointer;
116116
transition: all 0.2s ease;
117-
color: $ff-grey-600;
117+
color: $ff-color--action;
118118
119119
&:hover {
120-
color: $ff-indigo-600;
121-
background-color: $ff-indigo-50;
120+
color: $ff-white;
121+
background-color: $ff-color--highlight;
122122
}
123123
124124
&:active {
125-
background-color: $ff-indigo-100;
125+
background-color: $ff-color--highlight;
126126
}
127127
128128
.ff-icon {

frontend/src/components/expert/ExpertChatInput.vue

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<template>
22
<div ref="resizeTarget" class="ff-expert-input" :style="{height: heightStyle}">
33
<resize-bar
4+
:is-resizing="isInputResizing"
45
direction="horizontal"
56
@mousedown="startResize"
67
/>
@@ -33,7 +34,11 @@
3334

3435
<div class="actions">
3536
<div class="left">
36-
<include-selection-button v-if="hasUserSelection && !isOperatorAgent" />
37+
<context-selector v-if="!isOperatorAgent" />
38+
<div class="context-items-container" @wheel="horizontalScrolling">
39+
<include-context-item v-for="(context, index) in selectedContext" :key="index" :contextItem="context" />
40+
<include-selection-button v-if="hasUserSelection && !isOperatorAgent" />
41+
</div>
3742
</div>
3843

3944
<div class="right">
@@ -61,21 +66,25 @@
6166
</template>
6267

6368
<script>
64-
import { mapGetters } from 'vuex'
69+
import { mapActions, mapGetters } from 'vuex'
6570
6671
import { useResizingHelper } from '../../composables/ResizingHelper.js'
6772
6873
import ResizeBar from '../ResizeBar.vue'
6974
7075
import CapabilitiesSelector from './components/CapabilitiesSelector.vue'
76+
import ContextSelector from './components/ContextSelector.vue'
77+
import IncludeContextItem from './components/IncludeContextItem.vue'
7178
import IncludeSelectionButton from './components/IncludeSelectionButton.vue'
7279
7380
export default {
7481
name: 'ExpertChatInput',
7582
components: {
76-
ResizeBar,
83+
CapabilitiesSelector,
84+
ContextSelector,
85+
IncludeContextItem,
7786
IncludeSelectionButton,
78-
CapabilitiesSelector
87+
ResizeBar
7988
},
8089
props: {
8190
isGenerating: {
@@ -105,12 +114,13 @@ export default {
105114
},
106115
emits: ['send', 'stop', 'start-over'],
107116
setup () {
108-
const { startResize, heightStyle, bindResizer } = useResizingHelper()
117+
const { startResize, heightStyle, bindResizer, isResizing: isInputResizing } = useResizingHelper()
109118
110119
return {
111120
startResize,
112121
bindResizer,
113-
heightStyle
122+
heightStyle,
123+
isInputResizing
114124
}
115125
},
116126
data () {
@@ -121,7 +131,7 @@ export default {
121131
}
122132
},
123133
computed: {
124-
...mapGetters('product/assistant', ['hasUserSelection']),
134+
...mapGetters('product/assistant', ['hasUserSelection', 'getSelectedContext']),
125135
isInputDisabled () {
126136
if (this.isSessionExpired) return true
127137
if (this.isGenerating) return true
@@ -138,6 +148,13 @@ export default {
138148
return this.isOperatorAgent
139149
? 'Tell us what you want to know about'
140150
: 'Tell us what you need help with'
151+
},
152+
selectedContext () {
153+
// for insights mode, return empty array
154+
if (this.isOperatorAgent) {
155+
return []
156+
}
157+
return this.getSelectedContext
141158
}
142159
},
143160
mounted () {
@@ -150,6 +167,7 @@ export default {
150167
})
151168
},
152169
methods: {
170+
...mapActions('product/assistant', ['resetContextSelection']),
153171
handleSend () {
154172
if (!this.canSend) return
155173
@@ -166,6 +184,10 @@ export default {
166184
handleStartOver () {
167185
this.$emit('start-over')
168186
this.inputText = ''
187+
// When in support mode, reset/restore assistant context selection (opt-out by default)
188+
if (!this.isOperatorAgent) {
189+
this.resetContextSelection()
190+
}
169191
},
170192
handleKeydown (event) {
171193
// Enter without Shift = send message
@@ -174,6 +196,12 @@ export default {
174196
this.handleSend()
175197
}
176198
// Shift+Enter = new line (default behavior)
199+
},
200+
horizontalScrolling (event) {
201+
const target = event.currentTarget
202+
if (event.deltaY === 0) return
203+
event.preventDefault()
204+
target.scrollLeft += event.deltaY / 2
177205
}
178206
}
179207
}
@@ -313,10 +341,22 @@ button {
313341
padding: .5rem;
314342
display: flex;
315343
justify-content: space-between;
344+
gap: 0.75rem;
316345
317346
.left {
318347
display: flex;
319348
justify-content: flex-start;
349+
350+
// scroll for overflow of selected chips
351+
overflow: auto;
352+
flex: 1;
353+
.context-items-container {
354+
flex: 1;
355+
overflow-x: auto;
356+
scrollbar-width: none;
357+
display: flex;
358+
gap: 0.5rem;
359+
}
320360
}
321361
322362
.right {

frontend/src/components/expert/components/CapabilitiesSelector.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
:value-key="['instance', 'mcpServerUrl']"
1111
placeholder="Resources"
1212
open-above
13-
:min-options-width="280"
13+
:options-min-width="280"
1414
align-right
1515
>
1616
<template #options="{ options }">

0 commit comments

Comments
 (0)