refactor: Update variable syntax to support agent context markers

Extend variable pattern matching to support both `#` and `@` markers,
with `@` specifically used for agent context variables. Update regex
patterns, text processing logic, and add sub-graph persistence for agent
variable handling.
This commit is contained in:
zhsama
2026-01-13 16:40:34 +08:00
parent 9b961fb41e
commit ddbbddbd14
10 changed files with 155 additions and 89 deletions

View File

@ -38,13 +38,16 @@ export const getInputVars = (text: string): ValueSelector[] => {
if (!text || typeof text !== 'string')
return []
const allVars = text.match(/\{\{#([^#]*)#\}\}/g)
const allVars = text.match(/\{\{[@#]([^@#]*)[@#]\}\}/g)
if (allVars && allVars?.length > 0) {
// {{#context#}}, {{#query#}} is not input vars
const inputVars = allVars
.filter(item => item.includes('.'))
.map((item) => {
const valueSelector = item.replace('{{#', '').replace('#}}', '').split('.')
const valueSelector = item
.replace(/^\{\{[@#]/, '')
.replace(/[@#]\}\}$/, '')
.split('.')
if (valueSelector[1] === 'sys' && /^\d+$/.test(valueSelector[0]))
return valueSelector.slice(1)

View File

@ -2,6 +2,7 @@ import type { LexicalNode, NodeKey, SerializedLexicalNode } from 'lexical'
import type { GetVarType, WorkflowVariableBlockType } from '../../types'
import type { Var } from '@/app/components/workflow/types'
import { DecoratorNode } from 'lexical'
import { BlockEnum } from '@/app/components/workflow/types'
import WorkflowVariableBlockComponent from './component'
export type WorkflowNodesMap = WorkflowVariableBlockType['workflowNodesMap']
@ -120,7 +121,11 @@ export class WorkflowVariableBlockNode extends DecoratorNode<React.JSX.Element>
}
getTextContent(): string {
return `{{#${this.getVariables().join('.')}#}}`
const variables = this.getVariables()
const node = this.getWorkflowNodesMap()?.[variables[0]]
const isAgentContextVariable = node?.type === BlockEnum.Agent && variables[variables.length - 1] === 'context'
const marker = isAgentContextVariable ? '@' : '#'
return `{{${marker}${variables.join('.')}${marker}}}`
}
}
export function $createWorkflowVariableBlockNode(variables: string[], workflowNodesMap: WorkflowNodesMap, getVarType?: GetVarType, environmentVariables?: Var[], conversationVariables?: Var[], ragVariables?: Var[]): WorkflowVariableBlockNode {