105 lines
2.4 KiB
TypeScript
105 lines
2.4 KiB
TypeScript
|
|
import { ref } from 'vue'
|
|||
|
|
import { defineStore } from 'pinia'
|
|||
|
|
import { v4 as uuidv4 } from 'uuid'
|
|||
|
|
|
|||
|
|
import { store } from '../index'
|
|||
|
|
import { useStorage } from '@vueuse/core'
|
|||
|
|
|
|||
|
|
|
|||
|
|
export interface Agent {
|
|||
|
|
Name: string
|
|||
|
|
Profile: string
|
|||
|
|
Icon: string
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
type HslColorVector = [number, number, number]
|
|||
|
|
|
|||
|
|
export interface IRichText {
|
|||
|
|
template: string;
|
|||
|
|
data: Record<string, {
|
|||
|
|
text: string;
|
|||
|
|
style?: Record<string, string>
|
|||
|
|
color?: HslColorVector
|
|||
|
|
}>;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export interface TaskProcess {
|
|||
|
|
ActionType: string
|
|||
|
|
AgentName: string
|
|||
|
|
Description: string
|
|||
|
|
ID: string
|
|||
|
|
ImportantInput: string[]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export interface IRawStepTask {
|
|||
|
|
Id?: string
|
|||
|
|
StepName?: string
|
|||
|
|
TaskContent?: string
|
|||
|
|
InputObject_List?: string[]
|
|||
|
|
OutputObject?: string
|
|||
|
|
AgentSelection?: string[]
|
|||
|
|
Collaboration_Brief_FrontEnd: IRichText
|
|||
|
|
TaskProcess: TaskProcess[]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export interface IRawPlanResponse {
|
|||
|
|
'Initial Input Object'?: string[] | string
|
|||
|
|
'General Goal'?: string
|
|||
|
|
'Collaboration Process'?: IRawStepTask[]
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export const useAgentsStore = defineStore('counter', () => {
|
|||
|
|
const agents = useStorage<Agent[]>('agents', [])
|
|||
|
|
function setAgents(agent: Agent[]) {
|
|||
|
|
agents.value = agent
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 任务搜索的内容
|
|||
|
|
const searchValue = useStorage<string>('agent-search-value', '')
|
|||
|
|
function setSearchValue(value: string) {
|
|||
|
|
searchValue.value = value
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 当前的展示的任务流程
|
|||
|
|
const currentTask = ref<IRawStepTask>()
|
|||
|
|
function setCurrentTask(task: IRawStepTask) {
|
|||
|
|
currentTask.value = task
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const agentRawPlan = ref<{ data?: IRawPlanResponse; loading?: boolean }>({ loading: false })
|
|||
|
|
|
|||
|
|
function setAgentRawPlan(plan: { data?: IRawPlanResponse; loading?: boolean }) {
|
|||
|
|
if (plan.data) {
|
|||
|
|
plan.data['Collaboration Process'] = plan.data['Collaboration Process']?.map(item => ({
|
|||
|
|
...item,
|
|||
|
|
Id: uuidv4(),
|
|||
|
|
}))
|
|||
|
|
}
|
|||
|
|
agentRawPlan.value = {
|
|||
|
|
...agentRawPlan.value,
|
|||
|
|
...plan,
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
agents,
|
|||
|
|
setAgents,
|
|||
|
|
searchValue,
|
|||
|
|
setSearchValue,
|
|||
|
|
currentTask,
|
|||
|
|
setCurrentTask,
|
|||
|
|
agentRawPlan,
|
|||
|
|
setAgentRawPlan
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 用于在组件外部(如在Pinia Store 中)使用 Pinia 提供的 store 实例。
|
|||
|
|
* 官方文档解释了如何在组件外部使用 Pinia Store:
|
|||
|
|
* https://pinia.vuejs.org/core-concepts/outside-component-usage.html#using-a-store-outside-of-a-component
|
|||
|
|
*/
|
|||
|
|
export function useAgentsStoreHook() {
|
|||
|
|
return useAgentsStore(store)
|
|||
|
|
}
|