@axiom-lattice/gateway 8.3.0 → 9.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.
- package/dist/{A2AAuthService-7UGQ7GMW.mjs → A2AAuthService-UKN53ZGP.mjs} +2 -2
- package/dist/{a2a-BHBLACJV.mjs → a2a-YLKZE5JG.mjs} +7 -5
- package/dist/{a2a-standard-VL5I7B4W.mjs → a2a-standard-MD7WNDTP.mjs} +79 -127
- package/dist/a2a-standard-MD7WNDTP.mjs.map +1 -0
- package/dist/chunk-A7YNAU5L.mjs +377 -0
- package/dist/chunk-A7YNAU5L.mjs.map +1 -0
- package/dist/{chunk-3XIIQ6EK.mjs → chunk-BOPNXTMO.mjs} +66 -5
- package/dist/chunk-BOPNXTMO.mjs.map +1 -0
- package/dist/{chunk-L6MBEEII.mjs → chunk-JGQURU44.mjs} +24 -6
- package/dist/chunk-JGQURU44.mjs.map +1 -0
- package/dist/{chunk-GPHOYR3X.mjs → chunk-LCM4OQTI.mjs} +30 -1
- package/dist/chunk-LCM4OQTI.mjs.map +1 -0
- package/dist/{chunk-HVIKCUOF.mjs → chunk-MFWTGNQR.mjs} +74 -5
- package/dist/chunk-MFWTGNQR.mjs.map +1 -0
- package/dist/chunk-NYYSBNDG.mjs +575 -0
- package/dist/chunk-NYYSBNDG.mjs.map +1 -0
- package/dist/{chunk-W3YH4S6G.mjs → chunk-SIMEG2JT.mjs} +19 -2
- package/dist/chunk-SIMEG2JT.mjs.map +1 -0
- package/dist/chunk-T2HIWZGP.mjs +580 -0
- package/dist/chunk-T2HIWZGP.mjs.map +1 -0
- package/dist/chunk-Y7OVVPVU.mjs +13 -0
- package/dist/chunk-Y7OVVPVU.mjs.map +1 -0
- package/dist/{chunk-GL7RV5L3.mjs → chunk-YR32MWEJ.mjs} +36 -73
- package/dist/chunk-YR32MWEJ.mjs.map +1 -0
- package/dist/embed/{embed-page-AgentDetailSideApp-7YTMN643.js → embed-page-AgentDetailSideApp-6RYNHS5F.js} +1 -1
- package/dist/embed/{embed-page-AgentDetailSideApp-O6G4NJ7I.css → embed-page-AgentDetailSideApp-JMJOOC4V.css} +1 -1
- package/dist/embed/{embed-page-AgentGovernanceWorkbench-SFZNVMUH.css → embed-page-AgentGovernanceWorkbench-3T3ZFJI5.css} +1 -1
- package/dist/embed/embed-page-AgentGovernanceWorkbench-UAPXF3SZ.js +1 -0
- package/dist/embed/{embed-page-LangfuseDashboard-BEOJDMWF.js → embed-page-LangfuseDashboard-ZYGZNW7P.js} +1 -1
- package/dist/embed/{embed-page-MessageGraph-N2DXVMEK.js → embed-page-MessageGraph-S2P3WACC.js} +1 -1
- package/dist/embed/{embed-page-TopologyRuntimeView-CWOXLVFW.css → embed-page-MessageGraph-UDC6GQA5.css} +1 -1
- package/dist/embed/{embed-page-ReactChart-3QDZX2WG.js → embed-page-ReactChart-I3UZVE4Z.js} +1 -1
- package/dist/embed/{embed-page-ReactChart-MXGF35OQ.css → embed-page-ReactChart-URBKYQYE.css} +1 -1
- package/dist/embed/{embed-page-SkillFlow-3X24ILKU.js → embed-page-SkillFlow-JMIJ46FX.js} +1 -1
- package/dist/embed/{embed-page-TasksSideApp-MYIRJWFM.js → embed-page-TasksSideApp-IVFEFLSH.js} +1 -1
- package/dist/embed/{embed-page-TasksSideApp-HV6DKQ26.css → embed-page-TasksSideApp-TTCP4ENP.css} +1 -1
- package/dist/embed/{embed-page-ThreadMaintenancePanel-V327PV5R.js → embed-page-ThreadMaintenancePanel-KQPPAEWJ.js} +1 -1
- package/dist/embed/{embed-page-WorkflowAutomationView-YQFB3CTV.css → embed-page-TopologyRuntimeView-S4AMB4RI.css} +1 -1
- package/dist/embed/{embed-page-TopologyRuntimeView-3O6VJUZR.js → embed-page-TopologyRuntimeView-XCFQ23HF.js} +1 -1
- package/dist/embed/{embed-page-MessageGraph-UT2TCPSO.css → embed-page-WorkflowAutomationView-FWVCQ3YM.css} +1 -1
- package/dist/embed/embed-page-WorkflowAutomationView-UTKCKP75.js +3 -0
- package/dist/embed/embed-page-chunk-5X4MNQAW.js +242 -0
- package/dist/embed/{embed-page-chunk-PMOGSY6W.js → embed-page-chunk-77CQOFKU.js} +1 -1
- package/dist/embed/{embed-page-chunk-PROZXFWS.js → embed-page-chunk-7VDAOX3D.js} +1 -1
- package/dist/embed/{embed-page-chunk-BSRASK7V.js → embed-page-chunk-MD4U4DHC.js} +5 -5
- package/dist/embed/embed-page-chunk-RANB2CUO.js +3 -0
- package/dist/embed/{embed-page-chunk-IELKCYQX.js → embed-page-chunk-RVIS6CKE.js} +1 -1
- package/dist/embed/embed-page-chunk-SEOTZ4Q7.js +6829 -0
- package/dist/embed/{embed-page-chunk-ASEIOK7X.js → embed-page-chunk-TCVPYXPL.js} +2 -2
- package/dist/embed/embed-page-chunk-WHGU76CU.js +211 -0
- package/dist/embed/{embed-page-chunk-WGEXK773.js → embed-page-chunk-ZZFTCBM6.js} +1 -1
- package/dist/embed/embed-page-en-4HSTKY4Q.js +1 -0
- package/dist/embed/{embed-page-en-XJYWUJEL.js → embed-page-en-DNDGCPMA.js} +1 -1
- package/dist/embed/embed-page-en-H5NOZEKE.js +1 -0
- package/dist/embed/embed-page-en-MIVBTEEL.js +1 -0
- package/dist/embed/{embed-page-en-HDSVQ4O6.js → embed-page-en-QJRX2NQE.js} +1 -1
- package/dist/embed/{embed-page-zh-6EBUEFKP.js → embed-page-zh-2H4EB3F3.js} +1 -1
- package/dist/embed/embed-page-zh-4C2K3RH2.js +1 -0
- package/dist/embed/embed-page-zh-7PJNJJZY.js +1 -0
- package/dist/embed/{embed-page-zh-IR652A6J.js → embed-page-zh-HTEHFCSL.js} +1 -1
- package/dist/embed/embed-page-zh-UZ4GPIU7.js +1 -0
- package/dist/embed/embed-page.css +1 -1
- package/dist/embed/embed-page.js +1 -1
- package/dist/embed/mcp-app-page.js +61 -0
- package/dist/index.d.mts +29 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +3574 -2349
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +327 -1049
- package/dist/index.mjs.map +1 -1
- package/dist/mcp-app-shares-SHPBJQXS.mjs +300 -0
- package/dist/mcp-app-shares-SHPBJQXS.mjs.map +1 -0
- package/dist/mcp-apps-QVUK6UBA.mjs +26 -0
- package/dist/{open-7ED27I5B.mjs → open-27ZPLBIW.mjs} +101 -18
- package/dist/open-27ZPLBIW.mjs.map +1 -0
- package/dist/{open-catalog-SZQ435AY.mjs → open-catalog-NVGP6SQP.mjs} +38 -7
- package/dist/open-catalog-NVGP6SQP.mjs.map +1 -0
- package/dist/{open-exposure-I3DN2X4E.mjs → open-exposure-HGYT5VFC.mjs} +8 -9
- package/dist/open-exposure-HGYT5VFC.mjs.map +1 -0
- package/dist/{open-files-V3R2BFTV.mjs → open-files-JPB2NBL6.mjs} +4 -4
- package/dist/{open-session-2Y7XJJW2.mjs → open-session-CLZT3HVG.mjs} +5 -5
- package/dist/open-session-CLZT3HVG.mjs.map +1 -0
- package/dist/openLattice-D5YTSZBY.mjs +28 -0
- package/dist/{registerExposedPlugins-6GCOE64C.mjs → registerExposedPlugins-2JGXSMAL.mjs} +4 -3
- package/dist/{resources-DAU5ZIPB.mjs → resources-YD5DOPGD.mjs} +83 -3
- package/dist/resources-YD5DOPGD.mjs.map +1 -0
- package/dist/{sandboxOpenCredentialProvider-AT227D4N.mjs → sandboxOpenCredentialProvider-RTYOYRCT.mjs} +19 -14
- package/dist/sandboxOpenCredentialProvider-RTYOYRCT.mjs.map +1 -0
- package/package.json +10 -8
- package/dist/a2a-standard-VL5I7B4W.mjs.map +0 -1
- package/dist/chunk-3XIIQ6EK.mjs.map +0 -1
- package/dist/chunk-GL7RV5L3.mjs.map +0 -1
- package/dist/chunk-GPHOYR3X.mjs.map +0 -1
- package/dist/chunk-GXZFO3VU.mjs +0 -42
- package/dist/chunk-GXZFO3VU.mjs.map +0 -1
- package/dist/chunk-HVIKCUOF.mjs.map +0 -1
- package/dist/chunk-HYYLYIMH.mjs +0 -230
- package/dist/chunk-HYYLYIMH.mjs.map +0 -1
- package/dist/chunk-L6MBEEII.mjs.map +0 -1
- package/dist/chunk-W3YH4S6G.mjs.map +0 -1
- package/dist/embed/embed-page-AgentGovernanceWorkbench-YWJ4ZLEV.js +0 -1
- package/dist/embed/embed-page-WorkflowAutomationView-YHOS4WQR.js +0 -3
- package/dist/embed/embed-page-chunk-4XKCMM5C.js +0 -211
- package/dist/embed/embed-page-chunk-IBRMWDHE.js +0 -6835
- package/dist/embed/embed-page-chunk-JTL73EBV.js +0 -3
- package/dist/embed/embed-page-chunk-YMVKQQXJ.js +0 -242
- package/dist/embed/embed-page-en-E35GE7TA.js +0 -1
- package/dist/embed/embed-page-en-GLT2HEZZ.js +0 -1
- package/dist/embed/embed-page-en-JOTELYAL.js +0 -1
- package/dist/embed/embed-page-zh-BPO6ZSJM.js +0 -1
- package/dist/embed/embed-page-zh-XMEJPDMF.js +0 -1
- package/dist/embed/embed-page-zh-ZLK3GLM3.js +0 -1
- package/dist/open-7ED27I5B.mjs.map +0 -1
- package/dist/open-catalog-SZQ435AY.mjs.map +0 -1
- package/dist/open-exposure-I3DN2X4E.mjs.map +0 -1
- package/dist/open-session-2Y7XJJW2.mjs.map +0 -1
- package/dist/openLattice-Q6M5S6CY.mjs +0 -18
- package/dist/openRateLimiter-XEOL3A5G.mjs +0 -8
- package/dist/resources-DAU5ZIPB.mjs.map +0 -1
- package/dist/sandboxOpenCredentialProvider-AT227D4N.mjs.map +0 -1
- /package/dist/{A2AAuthService-7UGQ7GMW.mjs.map → A2AAuthService-UKN53ZGP.mjs.map} +0 -0
- /package/dist/{a2a-BHBLACJV.mjs.map → a2a-YLKZE5JG.mjs.map} +0 -0
- /package/dist/{openLattice-Q6M5S6CY.mjs.map → mcp-apps-QVUK6UBA.mjs.map} +0 -0
- /package/dist/{open-files-V3R2BFTV.mjs.map → open-files-JPB2NBL6.mjs.map} +0 -0
- /package/dist/{openRateLimiter-XEOL3A5G.mjs.map → openLattice-D5YTSZBY.mjs.map} +0 -0
- /package/dist/{registerExposedPlugins-6GCOE64C.mjs.map → registerExposedPlugins-2JGXSMAL.mjs.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./embed-page-chunk-QBTAJ2YI.js";var n={"chatConfig.field.name":"Name","chatConfig.field.description":"Description","chatConfig.field.displayName":"Display Name","chatConfig.field.connectionKey":"Connection Key","chatConfig.field.host":"Host","chatConfig.field.port":"Port","chatConfig.field.username":"Username","chatConfig.field.password":"Password","chatConfig.field.serverUrl":"Server URL","chatConfig.field.apiKey":"API Key","chatConfig.field.optionalDescription":"Optional description","chatConfig.config.updated":"Configuration updated","chatConfig.config.created":"Configuration created","chatConfig.config.deleted":"Configuration deleted","chatConfig.config.deleteFailed":"Failed to delete configuration","chatConfig.config.saveFailed":"Failed to save configuration","chatConfig.config.missingId":"Cannot delete: configuration id is missing","chatConfig.agentType.executor":"Executor","chatConfig.agentType.orchestrator":"Orchestrator","chatConfig.agentType.workflow":"Workflow","chatConfig.agentType.a2aRemote":"A2A Remote","chatConfig.keyValue.key":"Key","chatConfig.keyValue.value":"Value","chatConfig.keyValue.add":"Add","chatConfig.keyValue.removeEntry":"Remove entry","chatConfig.connectionList.empty":'No "{{type}}" connections',"chatConfig.connectionList.selectAll":"Select All","chatConfig.connectionList.deselectAll":"Deselect All","chatConfig.connectionList.clear":"Clear","chatConfig.connectionsHub.title":"Plugins","chatConfig.connectionsHub.tab.all":"All ({{count}})","chatConfig.connectionsHub.tab.connections":"Connections ({{count}})","chatConfig.connectionsHub.tab.tools":"Tools ({{count}})","chatConfig.connectionsHub.empty.connections.title":"No connection plugins","chatConfig.connectionsHub.empty.connections.description":"No plugins with connection management registered","chatConfig.connectionsHub.empty.tools.title":"No tool plugins","chatConfig.connectionsHub.empty.tools.description":"No tool-only plugins registered","chatConfig.connectionsHub.empty.all.title":"No plugins","chatConfig.connectionsHub.empty.all.description":"No plugins registered","chatConfig.connectionsHub.capability.test":"test","chatConfig.connectionsHub.capability.discover":"discover","chatConfig.connectionsHub.capability.connection":"connection","chatConfig.connectionsHub.capability.tool":"tool","chatConfig.subAgentInherit.hint":"Choose how to handle each sub-agent from the parent:","chatConfig.subAgentInherit.clone":"Clone as new","chatConfig.subAgentInherit.reuse":"Reuse","chatConfig.subAgentInherit.cloneKeyPlaceholder":"Enter key for the cloned agent","chatConfig.project.create.title":"New Project","chatConfig.project.field.name":"Project name","chatConfig.project.field.namePlaceholder":"Enter project name","chatConfig.project.validation.nameRequired":"Please enter a project name","chatConfig.project.validation.nameMax":"Project name must be less than 50 characters","chatConfig.project.field.visibility":"Visibility","chatConfig.project.kind.business":"Business","chatConfig.project.kind.business.description":"Only invited members can see it.","chatConfig.project.kind.public":"Public","chatConfig.project.kind.public.description":"Visible to everyone in this workspace.","chatConfig.project.field.description":"Description (optional)","chatConfig.project.field.descriptionPlaceholder":"Enter project description","chatConfig.workflow.create.title":"New Workflow","chatConfig.workflow.create.titleProcessing":"New Processing Workflow","chatConfig.workflow.field.purpose":"Purpose","chatConfig.workflow.field.purposePlaceholder":"Describe what this workflow should do. Name and key will be generated automatically.","chatConfig.workflow.validation.purposeRequired":"Please describe the workflow purpose","chatConfig.workflow.middleware.topologyName":"Topology","chatConfig.workflow.middleware.topologyDescription":"Workflow topology","chatConfig.skill.create.title":"Create New Skill","chatConfig.skill.edit.title":"Edit Skill","chatConfig.skill.created":"Skill created successfully","chatConfig.skill.updated":"Skill updated successfully","chatConfig.skill.createFailed":"Failed to create skill","chatConfig.skill.updateFailed":"Failed to update skill","chatConfig.skill.createError":"An error occurred while creating the skill","chatConfig.skill.updateError":"An error occurred while updating the skill","chatConfig.skill.field.name":"Name","chatConfig.skill.field.description":"Description","chatConfig.skill.field.license":"License","chatConfig.skill.field.compatibility":"Compatibility","chatConfig.skill.field.metadata":"Metadata","chatConfig.skill.field.content":"Content","chatConfig.skill.placeholder.description":"Description","chatConfig.skill.placeholder.license":"License","chatConfig.skill.placeholder.compatibility":"Compatibility","chatConfig.skill.placeholder.content":"Content","chatConfig.skill.validation.nameRequired":"Please enter skill name","chatConfig.skill.validation.namePattern":"Name must be lowercase alphanumeric with single hyphens (e.g., 'my-skill')","chatConfig.skill.validation.nameLength":"Name must be 1-64 characters","chatConfig.skill.validation.descriptionRequired":"Please enter skill description","chatConfig.skill.metadata.add":"Add","chatConfig.skill.metadata.empty":"No metadata yet. Use Add to create one.","chatConfig.skill.metadata.row":"Meta {{index}}","chatConfig.skill.action.save":"Save Changes","chatConfig.skill.action.create":"Create Skill","chatConfig.skillPicker.title":"Skills","chatConfig.skillPicker.selectTitle":"Select Skills","chatConfig.skillPicker.empty":"No skills available","chatConfig.databasePicker.title":"Database","chatConfig.databasePicker.selectTitle":"Select Database","chatConfig.databasePicker.empty":"No databases available","chatConfig.channelInstall.title":"Channel Installations","chatConfig.channelInstall.add":"Add Installation","chatConfig.channelInstall.editTitle":"Edit Installation","chatConfig.channelInstall.addTitle":"Add Installation","chatConfig.channelInstall.empty.title":"No channel installations","chatConfig.channelInstall.empty.description":'Click "Add Installation" to create one',"chatConfig.channelInstall.unsupported":"Unsupported channel configuration UI","chatConfig.channelInstall.loadFailed":"Failed to load channel installations","chatConfig.channelInstall.deleted":"Installation deleted","chatConfig.channelInstall.deleteFailed":"Failed to delete installation","chatConfig.channelInstall.updated":"Installation updated","chatConfig.channelInstall.updateFailed":"Failed to update installation","chatConfig.channelInstall.created":"Installation created","chatConfig.channelInstall.createFailed":"Failed to create installation","chatConfig.channelInstall.delete.title":"Delete Channel Installation","chatConfig.channelInstall.delete.description":'Are you sure you want to delete "{{name}}"?',"chatConfig.channelInstall.field.channel":"Channel","chatConfig.channelInstall.field.name":"Name","chatConfig.channelInstall.field.appId":"App ID","chatConfig.channelInstall.field.appSecret":"App Secret","chatConfig.channelInstall.field.verificationToken":"Verification Token","chatConfig.channelInstall.field.encryptKey":"Encrypt Key","chatConfig.channelInstall.validation.appIdRequired":"App ID is required","chatConfig.channelInstall.validation.appSecretRequired":"App Secret is required","chatConfig.connection.loadFailed":"Failed to load connections","chatConfig.connection.testPassed":"Connection test passed: {{message}}","chatConfig.connection.testFailed":"Connection test failed","chatConfig.connection.testError":"Failed to test connection","chatConfig.connection.missingKey":"Cannot delete: connection key is missing","chatConfig.connection.deleted":"Connection deleted","chatConfig.connection.deleteFailed":"Failed to delete connection","chatConfig.connection.noSchema.title":"No connection schema defined","chatConfig.connection.noSchema.description":"This plugin type does not support connection management","chatConfig.connection.action.test":"Test","chatConfig.connection.status.online":"Online","chatConfig.connection.status.offline":"Offline","chatConfig.connection.updated":"Updated {{date}}","chatConfig.connection.add":"Add Connection","chatConfig.connection.empty.title":"No connections configured","chatConfig.connection.empty.description":'Click "Add Connection" to create one',"chatConfig.connection.delete.title":"Delete Connection","chatConfig.connection.delete.confirm":'Delete "{{name}}"?',"chatConfig.connectionForm.testRequestFailed":"Test request failed","chatConfig.connectionForm.keyRequired":"Connection key is required","chatConfig.connectionForm.updated":"Connection updated","chatConfig.connectionForm.created":"Connection created","chatConfig.connectionForm.saveFailed":"Failed to save connection","chatConfig.connectionForm.selectPlaceholder":"Select {{title}}","chatConfig.connectionForm.enterPlaceholder":"Enter {{title}}","chatConfig.connectionForm.step.details":"Connection Details","chatConfig.connectionForm.step.verify":"Verify","chatConfig.connectionForm.editTitle":"Edit {{type}} Connection","chatConfig.connectionForm.addTitle":"Add {{type}} Connection","chatConfig.connectionForm.save":"Save Changes","chatConfig.connectionForm.finish":"Finish","chatConfig.connectionForm.testing":"Testing connection...","chatConfig.connectionForm.availableResources":"Available Resources","chatConfig.connectionForm.selectedCount":" ({{count}} selected)","chatConfig.connectionForm.retryTest":"Retry Test","chatConfig.database.title":"Database Connections","chatConfig.database.loadFailed":"Failed to load database configurations","chatConfig.database.testSuccess":"Successfully connected to {{host}} ({{latency}}ms)","chatConfig.database.connectionFailed":"Connection failed: {{error}}","chatConfig.database.empty.title":"No database configurations","chatConfig.database.keyAndId":"Key: {{key}} | ID: {{id}}","chatConfig.database.connectionStringMode":"Connection String Mode","chatConfig.database.testing":"Testing...","chatConfig.database.editTitle":"Edit Database Configuration","chatConfig.database.addTitle":"Add Database Configuration","chatConfig.database.field.type":"Database Type","chatConfig.database.field.connectionString":"Connection String","chatConfig.database.priorityMode":"Priority Mode","chatConfig.database.note.important":"Important:","chatConfig.database.note.whenProvided":"When connection string is provided, it takes","chatConfig.database.note.priorityOver":"priority over","chatConfig.database.note.suffix":"all individual connection parameters below. The backend implements the same priority logic.","chatConfig.database.field.individualParams":"Individual Connection Parameters","chatConfig.database.ignoredWhenString":"Ignored when connection string is set","chatConfig.database.field.name":"Database Name","chatConfig.database.delete.title":"Delete Database Configuration","chatConfig.database.delete.description":'Are you sure you want to delete "{{name}}"?',"chatConfig.metrics.title":"Metrics Server Connections","chatConfig.metrics.loadFailed":"Failed to load metrics configurations","chatConfig.metrics.testSuccess":"Successfully connected to {{serverUrl}} ({{latency}}ms)","chatConfig.metrics.empty.title":"No metrics configurations","chatConfig.metrics.delete.title":"Delete Metrics Configuration","chatConfig.metrics.step.basic":"Basic Info","chatConfig.metrics.step.dataSources":"Select Data Sources","chatConfig.metrics.serverUrlRequired":"Please enter the server URL","chatConfig.metrics.fetchDataSourcesFailed":"Failed to fetch data sources","chatConfig.metrics.editTitle":"Edit Metrics Configuration","chatConfig.metrics.addTitle":"Add Metrics Configuration","chatConfig.metrics.field.serverType":"Server Type","chatConfig.metrics.field.authentication":"Authentication","chatConfig.metrics.optional":"Optional","chatConfig.metrics.placeholder.apiKey":"Optional API key for authentication","chatConfig.metrics.placeholder.username":"Optional username for basic auth","chatConfig.metrics.placeholder.password":"Optional password for basic auth","chatConfig.metrics.fetchingDataSources":"Fetching data sources...","chatConfig.metrics.field.dataSources":"Data Sources","chatConfig.metrics.selectedCount":"Selected: {{count}}","chatConfig.metrics.connected":"Connected","chatConfig.metrics.metricsAvailable":"{{count}} metrics available","chatConfig.metrics.loadingMetrics":"Loading metrics...","chatConfig.metrics.loadMetricsFailed":"Failed to load metrics","chatConfig.metrics.selectDataSourceHint":"Click a data source on the left to view its metrics","chatConfig.metrics.previous":"Previous","chatConfig.metrics.save":"Save Changes","chatConfig.metrics.type.semantic":"Semantic","chatConfig.metricsDataSource.select":"Select Data Source","chatConfig.metricsDataSource.noneAvailable":"No data sources available","chatConfig.metricsDataSource.title":"Select Metrics Data Source","chatConfig.metricsDataSource.empty":"No Metrics Data Sources Available","chatConfig.metricsDataSource.disconnected":"Disconnected","chatConfig.metricsDataSource.selected":"Selected","chatConfig.mcp.title":"MCP Server Connections","chatConfig.mcp.loadFailed":"Failed to load MCP server configurations","chatConfig.mcp.testSuccess":"Successfully connected ({{latency}}ms)","chatConfig.mcp.disconnected":"{{name}} disconnected","chatConfig.mcp.connected":"{{name}} connected","chatConfig.mcp.connectFailed":"Failed to connect","chatConfig.mcp.toggleFailed":"Failed to toggle connection","chatConfig.mcp.action.test":"Test Connection","chatConfig.mcp.toolsCount":"{{count}} tools","chatConfig.mcp.empty.title":"No MCP server configurations","chatConfig.mcp.delete.title":"Delete MCP Server Configuration","chatConfig.mcp.step.connection":"Connection","chatConfig.mcp.step.tools":"Select Tools","chatConfig.mcp.commandRequired":"Please enter the command for stdio transport","chatConfig.mcp.urlRequired":"Please enter the URL for HTTP/SSE transport","chatConfig.mcp.fetchToolsFailed":"Failed to fetch tools","chatConfig.mcp.fetchToolsError":"Failed to fetch tools from MCP server","chatConfig.mcp.editTitle":"Edit MCP Server Configuration","chatConfig.mcp.addTitle":"Add MCP Server Configuration","chatConfig.mcp.field.transport":"Transport Type","chatConfig.mcp.transport.stdio":"STDIO (Command)","chatConfig.mcp.transport.http":"HTTP","chatConfig.mcp.transport.sse":"SSE (Server-Sent Events)","chatConfig.mcp.field.command":"Command","chatConfig.mcp.field.args":"Arguments (one per line)","chatConfig.mcp.field.env":"Environment Variables","chatConfig.mcp.envHint":"Passed to the server process (e.g. API tokens). Values are stored encrypted.","chatConfig.mcp.addVariable":"Add Variable","chatConfig.mcp.sseDeprecated":"SSE is deprecated by the MCP specification \u2014 prefer Streamable HTTP (HTTP) for new servers.","chatConfig.mcp.field.headers":"Headers","chatConfig.mcp.headersHint":"Sent with every request (e.g. Authorization for authentication). Values are stored encrypted.","chatConfig.mcp.addHeader":"Add Header","chatConfig.mcp.advanced":"Advanced Options","chatConfig.mcp.field.timeout":"Timeout (ms)","chatConfig.mcp.field.retryAttempts":"Retry Attempts","chatConfig.mcp.connecting":"Connecting to MCP server and fetching tools...","chatConfig.mcp.noTools":"No tools available. Please check your connection settings.","chatConfig.mcp.availableTools":"Available Tools","chatConfig.mcp.selectedTools":"Selected: {{selected}} / {{total}}","chatConfig.mcp.parameters":"Parameters: {{list}}","chatConfig.mcp.previous":"Previous","chatConfig.mcp.save":"Save Changes","chatConfig.midForm.selectAll":"Select All","chatConfig.midForm.clear":"Clear","chatConfig.midForm.selectedOfTotal":"{{selected}} / {{total}} selected","chatConfig.midForm.tools":"Tools","chatConfig.midForm.skills.title":"Skill Library","chatConfig.midForm.skills.search":"Search skills\u2026","chatConfig.midForm.skills.empty":"No skills available","chatConfig.midForm.databases.title":"Databases","chatConfig.midForm.databases.search":"Search databases\u2026","chatConfig.midForm.databases.empty":"No databases available","chatConfig.midForm.metrics.title":"Metrics Servers","chatConfig.midForm.metrics.search":"Search servers\u2026","chatConfig.midForm.metrics.empty":"No servers available","chatConfig.midForm.collections.title":"Collections","chatConfig.midForm.collections.search":"Search collections\u2026","chatConfig.midForm.collections.empty":"No collections available","chatConfig.midForm.topology.title":"Dependencies","chatConfig.midForm.topology.edges":"{{count}} edges","chatConfig.midForm.topology.empty":"No dependencies defined yet","chatConfig.midForm.topology.addTitle":"Add Dependency","chatConfig.midForm.topology.fromPlaceholder":"Source Agent ID","chatConfig.midForm.topology.toPlaceholder":"Target Agent ID","chatConfig.midForm.topology.purposePlaceholder":"Purpose (e.g. classify invoice fields)","chatConfig.midForm.topology.addEdge":"Add Edge","chatConfig.midForm.connections.title":"Connections","chatConfig.midForm.section.config":"Config","chatConfig.midForm.section.resources":"Resources Permission","chatConfig.midForm.section.tools":"Tools Permission","chatConfig.midForm.enabled":"Enabled","chatConfig.midForm.disabled":"Disabled","chatConfig.midForm.scope.global":"Global","chatConfig.midForm.scope.agent":"Agent","chatConfig.midForm.scope.project":"Project","chatConfig.agentModal.title":"Configure Agent","chatConfig.agentModal.tab.basic":"Basic","chatConfig.agentModal.tab.tools":"Tools","chatConfig.agentModal.tab.skills":"Skills","chatConfig.agentModal.tab.subAgents":"Sub-Agents","chatConfig.agentModal.field.agentType":"Agent Type","chatConfig.agentModal.field.systemPrompt":"System Prompt","chatConfig.agentModal.systemPromptPlaceholder":"Enter the system prompt for this agent...","chatConfig.agentModal.systemPromptHint":"Define the agent's behavior, capabilities, and constraints","chatConfig.agentModal.selectedOfTotal":"{{selected}} of {{total}} selected","chatConfig.agentModal.selectAll":"Select All","chatConfig.agentModal.deselectAll":"Deselect All","chatConfig.agentModal.noTools":"No tools available","chatConfig.agentModal.noSkills":"No skills available","chatConfig.agentModal.noOtherAgents":"No other agents available","chatConfig.agentModal.approve":"Approve","chatConfig.agentModal.noDescription":"No description","chatConfig.agentModal.hierarchy":"Agent Hierarchy","chatConfig.agentModal.currentAgent":"Current Agent","chatConfig.agentModal.currentTag":"Current","chatConfig.agentModal.type.react":"React","chatConfig.agentModal.type.deepAgent":"Deep Agent","chatConfig.agentModal.type.workflow":"Workflow","chatConfig.agentModal.toolsCount":"{{count}} tools","chatConfig.agentModal.skillsCount":"{{count}} skills","chatConfig.agentModal.subAgentsCount":"{{count}} sub-agents","chatConfig.agentModal.structureTree":"Structure Tree","chatConfig.agentModal.tip":"Tip","chatConfig.agentModal.tipBody":"Deep Agent type allows you to delegate tasks to sub-agents. Select agents from the Sub-Agents tab to build your hierarchy.","chatConfig.agentModal.changesHint":"Changes will update the agent configuration","chatConfig.agentModal.saveConfiguration":"Save Configuration","chatConfig.agentPanel.category.data":"Data & Knowledge","chatConfig.agentPanel.category.execution":"Execution & Interaction","chatConfig.agentPanel.category.workflow":"Workflow & Orchestration","chatConfig.agentPanel.category.assistant":"Assistant & Evaluation","chatConfig.agentPanel.category.other":"Other","chatConfig.agentPanel.nav.basic":"Basic Info","chatConfig.agentPanel.nav.prompt":"System Prompt","chatConfig.agentPanel.nav.tools":"Common Tools","chatConfig.agentPanel.nav.capabilities":"Capabilities","chatConfig.agentPanel.nav.subAgents":"Sub-Agents","chatConfig.agentPanel.navAriaLabel":"Agent configuration sections","chatConfig.agentPanel.basic.title":"Basic Info","chatConfig.agentPanel.basic.desc":"Core identity and behavior of this agent","chatConfig.agentPanel.field.name":"Name","chatConfig.agentPanel.field.agentType":"Agent Type","chatConfig.agentPanel.field.description":"Description","chatConfig.agentPanel.validation.nameRequired":"Please enter agent name","chatConfig.agentPanel.validation.descriptionRequired":"Please enter agent description","chatConfig.agentPanel.placeholder.name":"Enter agent name\u2026","chatConfig.agentPanel.placeholder.description":"Enter agent description\u2026","chatConfig.agentPanel.typeDesc.react":"Executor: Executes tasks directly using tools. Best for single-step operations like search, code execution, and data retrieval.","chatConfig.agentPanel.typeDesc.deepAgent":"Orchestrator: Maintains a todo list to plan and delegate tasks to sub-agents. Best for structured multi-step workflows.","chatConfig.agentPanel.typeDesc.processing":"Workflow: Delegates to sub-agents in a predefined topology order. Best for deterministic multi-step processes.","chatConfig.agentPanel.prompt.title":"System Prompt","chatConfig.agentPanel.prompt.desc":"Define the agent's behavior, capabilities, and constraints","chatConfig.agentPanel.prompt.expand":"Expand","chatConfig.agentPanel.prompt.placeholder":"Enter the system prompt for this agent\u2026","chatConfig.agentPanel.prompt.chars":"{{count}} chars","chatConfig.agentPanel.tools.title":"Common Tools","chatConfig.agentPanel.tools.desc":"Choose the tools this agent can call directly","chatConfig.agentPanel.tools.search":"Search tools\u2026","chatConfig.agentPanel.tools.selected":"Selected {{selected}} / {{total}}","chatConfig.agentPanel.subAgents.title":"Sub-Agents","chatConfig.agentPanel.subAgents.desc":"Choose sub-agents this agent can delegate to","chatConfig.agentPanel.subAgents.search":"Search sub-agents\u2026","chatConfig.agentPanel.subAgents.selected":"Selected {{selected}} / {{total}}","chatConfig.agentPanel.noTools":"No tools available","chatConfig.agentPanel.noCapabilities":"No capabilities available","chatConfig.agentPanel.noOtherAgents":"No other agents available","chatConfig.agentPanel.noMatching":"No matching results","chatConfig.agentPanel.selectAll":"Select All","chatConfig.agentPanel.clear":"Clear","chatConfig.agentPanel.approve":"Approve","chatConfig.agentPanel.noDescription":"No description","chatConfig.agentPanel.configWorkbench":"Config Workbench","chatConfig.agentPanel.deleteAgent":"Delete Agent","chatConfig.agentPanel.loadingConfig":"Loading agent configuration...","chatConfig.agentPanel.footer.saveHint":"Changes will be saved to this agent","chatConfig.agentPanel.footer.viewing":"Viewing agent configuration","chatConfig.agentPanel.done":"Done","chatConfig.agentPanel.delete.title":"Delete Agent","chatConfig.agentPanel.delete.confirmPrefix":"Are you sure you want to delete","chatConfig.agentPanel.delete.confirmSuffix":"? This action cannot be undone.","chatConfig.agentPanel.deleteFailed":"Failed to delete agent","chatConfig.createAssistant.title":"Create New Agent","chatConfig.createAssistant.createExtend":"Create (Extend)","chatConfig.createAssistant.startLearning":"Start Learning","chatConfig.createAssistant.parentAgent":"Parent Agent","chatConfig.createAssistant.inheritHint":"Fields left unchanged will be inherited from the parent agent.","chatConfig.createAssistant.learnHint":"Describe what the agent should do.","chatConfig.createAssistant.learnGoalPlaceholder":"e.g. Handle price disputes using the price protection policy","chatConfig.createAssistant.referenceFiles":"Reference Files","chatConfig.createAssistant.referenceFilesHint":"Optional \u2014 uploaded to the shared training workspace and attached to the learning round; the architect reads them as round material.","chatConfig.createAssistant.field.key":"Key (ID)","chatConfig.createAssistant.keyPlaceholder":"e.g., my_agent","chatConfig.createAssistant.field.name":"Name","chatConfig.createAssistant.namePlaceholder":"e.g., My Agent","chatConfig.createAssistant.field.description":"Description","chatConfig.createAssistant.field.agentType":"Agent Type","chatConfig.createAssistant.field.connectionMode":"Connection Mode","chatConfig.createAssistant.mode.remoteUrl":"Remote URL","chatConfig.createAssistant.mode.localManaged":"Local Managed","chatConfig.createAssistant.field.template":"Template","chatConfig.createAssistant.templatePlaceholder":"Choose a template...","chatConfig.createAssistant.noTemplates":'No templates. Use "Custom Command" below.',"chatConfig.createAssistant.customCommand":"+ Custom Command","chatConfig.createAssistant.hideCustomCommand":"- Hide Custom Command","chatConfig.createAssistant.field.executable":"Executable","chatConfig.createAssistant.executablePlaceholder":"e.g. node, opencode, /usr/local/bin/my-server","chatConfig.createAssistant.field.arguments":"Arguments","chatConfig.createAssistant.argumentsPlaceholder":"e.g. --serve --port 4301","chatConfig.createAssistant.field.workingDirectory":"Working directory","chatConfig.createAssistant.workingDirectoryPlaceholder":"e.g. /Users/me/project","chatConfig.createAssistant.field.agentCardUrl":"Agent Card URL","chatConfig.createAssistant.field.apiKeyOptional":"API Key (optional)","chatConfig.createAssistant.apiKeyPlaceholder":"API key for authentication","chatConfig.createAssistant.field.timeout":"Timeout (ms)","chatConfig.createAssistant.field.systemPrompt":"System Prompt","chatConfig.createAssistant.field.systemPromptInherit":"System Prompt (leave unchanged to inherit from parent)","chatConfig.createAssistant.systemPromptInheritPlaceholder":"Leave empty to inherit parent's prompt, or enter a new prompt to override...","chatConfig.createAssistant.systemPromptPlaceholder":"Enter the system prompt for this agent...","chatConfig.createAssistant.subAgents":"Sub-Agents","chatConfig.createAssistant.descriptionPlaceholder":"Enter a description for this agent...","chatConfig.createAssistant.typeDesc.react":"Executor: Directly executes tasks using tools. Best for single-step operations like search, code execution, and data retrieval.","chatConfig.createAssistant.typeDesc.deepAgent":"Orchestrator: Manages a sequential todo list to plan and assign todo items to sub-agents. Best for structured multi-step workflows.","chatConfig.createAssistant.typeDesc.processing":"Workflow: Enforces a fixed workflow topology by delegating to sub-agents in a predefined order. Best for deterministic multi-step processes with validated delegation paths.","chatConfig.createAssistant.typeDesc.a2aRemote":"A2A Remote: Delegates to an external A2A-compatible agent server. Use for local CLI tools (Claude Code, Codex, OpenCode) or remote agents.","chatConfig.createAssistant.validation.keyRequired":"Please enter a unique key","chatConfig.createAssistant.validation.keyPattern":"Key must start with a letter and contain only letters, numbers, underscores, or hyphens","chatConfig.createAssistant.validation.nameRequired":"Please enter a name","chatConfig.createAssistant.validation.descriptionRequired":"Please enter a description","chatConfig.createAssistant.validation.systemPromptRequired":"Please enter a system prompt","chatConfig.createAssistant.validation.urlRequired":"Please enter the A2A server URL","chatConfig.createAssistant.validation.executableRequired":"Executable is required","chatConfig.createAssistant.a2aUrlWarning":"Please enter an A2A server URL first","chatConfig.createAssistant.connectedTo":'Connected to "{{name}}"',"chatConfig.createAssistant.connectionFailed":"Connection failed","chatConfig.createAssistant.connectionTestFailed":"Connection test failed","chatConfig.createAssistant.trainingGoalRequired":"Please describe the training goal","chatConfig.createAssistant.noTrainingProject":"No shared training project available","chatConfig.createAssistant.agentCreated":"Agent created \u2014 architect started building","chatConfig.createAssistant.createdByExtending":'Agent created by extending "{{name}}"',"chatConfig.createAssistant.created":"Agent created successfully","chatConfig.createAssistant.createFailed":"Failed to create agent","chatConfig.createAssistant.createError":"An error occurred while creating the agent","chatConfig.createAssistant.requiredFields":"Please complete the required fields: {{fields}}","chatConfig.createAssistant.requiredFieldsGeneric":"Please complete the required fields","chatConfig.createAssistant.noParentAgent":"No parent agent selected","chatConfig.createAssistant.agentCreateFailed":"Failed to create agent","chatConfig.createAssistant.cloneFetchFailed":'Failed to fetch sub-agent "{{key}}" for cloning',"chatConfig.createAssistant.cloneFailed":'Failed to clone sub-agent "{{key}}"',"chatConfig.createAssistant.cloneKeyRequired":'Please provide a key for the cloned sub-agent "{{key}}"',"chatConfig.createAssistant.cloneKeyInvalid":'Invalid key "{{key}}" for cloned sub-agent "{{originalKey}}". Key must start with a letter and contain only letters, numbers, underscores, or hyphens.',"chatConfig.parentAgent.selectPlaceholder":"Select a parent agent to extend...","chatConfig.settings.defaultConnectionName":"Default","chatConfig.settings.serverNamePlaceholder":"e.g., Production Server","chatConfig.settings.title":"Settings","chatConfig.settings.menu.environment":"Environment Variables","chatConfig.settings.menu.models":"Model Configuration","chatConfig.settings.menu.environment.desc":"Manage environment variables for the gateway server","chatConfig.settings.menu.models.desc":"Configure the gateway-wide default model registry","chatConfig.settings.saveConfiguration":"Save Configuration","chatConfig.settings.addServer":"Add Server","chatConfig.settings.addNewServer":"Add New Server","chatConfig.settings.serverName":"Server Name","chatConfig.settings.serverNameHint":"Optional: Leave empty to use URL as name","chatConfig.settings.serverUrl":"Server URL *","chatConfig.settings.serverUrlHint":"Enter the full URL of the gateway server","chatConfig.settings.apiKey":"API Key","chatConfig.settings.apiKeyPlaceholder":"Optional: Enter API key for authentication","chatConfig.settings.apiKeyHint":"Optional: API key for server authentication","chatConfig.settings.pleaseEnterServerUrl":"Please enter a server URL","chatConfig.settings.serverAdded":"Server added successfully","chatConfig.settings.serverDeleted":"Server deleted","chatConfig.settings.connectFirst":"Please connect to a server first","chatConfig.settings.loadConfigFailed":"Failed to load current configuration","chatConfig.settings.saveFailed":"Failed to save configuration","chatConfig.settings.restartWarning":"Configuration saved. Please restart the server for {{services}} to take effect.","chatConfig.settings.savedApplied":"Configuration saved and applied successfully","chatConfig.settings.modelSaved":"Model configuration saved and registered successfully","chatConfig.settings.modelSaveFailed":"Failed to save model configuration","chatConfig.settings.alert.title":"Configuration Effect","chatConfig.settings.alert.immediate":"Immediately effective:","chatConfig.settings.alert.restart":"Requires restart:","chatConfig.settings.alert.restartDetail":"PORT (server must be restarted to change port)","chatConfig.settings.envHint":"Configure environment variables in .env format (key=value). One variable per line. Leave password fields empty to keep current values.","chatConfig.settings.modelsHint":"Configure model lattices. Each model will be registered with the provided key and can be used by agents.","chatConfig.settings.model":"Model {{index}}","chatConfig.settings.remove":"Remove","chatConfig.settings.field.key":"Key *","chatConfig.settings.field.keyHint":"Unique identifier for this model","chatConfig.settings.field.provider":"Provider *","chatConfig.settings.field.modelName":"Model Name *","chatConfig.settings.field.apiKeyHintStored":"A key is stored on the server and is never sent back. Leave blank to keep it, or type a new one to replace it.","chatConfig.settings.field.apiKeyHintNew":"API key for the model provider. Leave empty to use environment variable.","chatConfig.settings.apiKeyPlaceholderConfigured":"Configured \u2014 leave blank to keep","chatConfig.settings.apiKeyPlaceholderNew":"Enter your API key","chatConfig.settings.field.baseUrl":"Base URL","chatConfig.settings.field.baseUrlHint":"Optional custom base URL for the API","chatConfig.settings.field.streaming":"Enable Streaming","chatConfig.settings.field.maxTokens":"Max Tokens","chatConfig.settings.field.temperature":"Temperature","chatConfig.settings.addModel":"+ Add Model","chatConfig.settings.connecting":"Connecting...","chatConfig.settings.connectingTo":"Connecting to {{url}}","chatConfig.settings.notConnected":"Not Connected","chatConfig.settings.connectFailedDetail":"Failed to connect to {{url}}. Please check the server URL and try again.","chatConfig.settings.clickReconnect":'Click "Reconnect" to connect to {{url}}',"chatConfig.settings.reconnect":"Reconnect","chatConfig.settings.error.serverError":"Server returned an error","chatConfig.settings.error.timeout":"Connection timeout","chatConfig.settings.error.connectFailed":"Failed to connect to server","chatConfig.paChannel.title":"Connect Channels","chatConfig.paChannel.channels":"Channels","chatConfig.paChannel.noChannels":"No channels yet","chatConfig.paChannel.connect":"Connect","chatConfig.paChannel.selectHint":"Select a channel from the left or add a new one","chatConfig.paChannel.chooseType":"Choose Channel Type","chatConfig.paChannel.editChannel":"Edit Channel","chatConfig.paChannel.newChannel":"New {{channel}}","chatConfig.paChannel.channel.lark":"Feishu","chatConfig.paChannel.channel.wechat":"WeChat","chatConfig.paChannel.channel.wecom":"WeCom","chatConfig.paChannel.wechatBot":"WeChat Bot","chatConfig.paChannel.feishuBot":"Feishu Bot","chatConfig.paChannel.wecomBot":"WeCom Bot","chatConfig.paChannel.field.botId":"Bot ID","chatConfig.paChannel.field.secret":"Secret","chatConfig.paChannel.placeholder.botId":"Bot ID from the WeCom admin console","chatConfig.paChannel.placeholder.secret":"Long-connection Secret from the WeCom admin console","chatConfig.paChannel.wecomConnectHint":"Uses the smart-bot long-connection (API) mode \u2014 no public callback URL; the gateway maintains the connection.","chatConfig.paChannel.validation.botIdRequired":"Bot ID is required","chatConfig.paChannel.validation.secretRequired":"Secret is required","chatConfig.paChannel.field.channelType":"Channel Type","chatConfig.paChannel.field.displayName":"Display Name","chatConfig.paChannel.field.appId":"App ID","chatConfig.paChannel.field.appSecret":"App Secret","chatConfig.paChannel.field.verificationToken":"Verification Token","chatConfig.paChannel.field.encryptKey":"Encrypt Key","chatConfig.paChannel.field.botToken":"Bot Token","chatConfig.paChannel.field.uin":"UIN","chatConfig.paChannel.enabled":"Enabled","chatConfig.paChannel.listenerActive":"Listener service is active","chatConfig.paChannel.listenerStopped":"Listener service is stopped","chatConfig.paChannel.anyoneCanMessage":"Anyone can message","chatConfig.paChannel.anyoneCanMessageHint":"When enabled, anyone with access to this channel can chat with your assistant","chatConfig.paChannel.whoCanChat":"Who can chat","chatConfig.paChannel.whoCanChatHint":"Only people you add here can message your assistant","chatConfig.paChannel.noContacts":"No contacts added yet","chatConfig.paChannel.addContact":"Add Contact","chatConfig.paChannel.add":"Add","chatConfig.paChannel.required":"Required","chatConfig.paChannel.placeholder.wechatOpenId":"WeChat Open ID","chatConfig.paChannel.placeholder.feishuOpenId":"Feishu Open ID","chatConfig.paChannel.placeholder.wecomUserId":"WeCom User ID","chatConfig.paChannel.placeholder.displayName":"Display name (optional)","chatConfig.paChannel.placeholder.appSecret":"Your app secret","chatConfig.paChannel.placeholder.optional":"Optional","chatConfig.paChannel.placeholder.botToken":"Auto-filled after QR scan","chatConfig.paChannel.placeholder.uin":"Auto-filled from QR login","chatConfig.paChannel.addBindingHint":"Once saved, come back here to add the people you'd like to chat with.","chatConfig.paChannel.removeChannel":"Remove this channel?","chatConfig.paChannel.removeChannelDesc":"All bindings for this installation will also be lost.","chatConfig.paChannel.save":"Save","chatConfig.paChannel.bindingAdded":"Binding added","chatConfig.paChannel.bindingAddFailed":"Failed to add binding","chatConfig.paChannel.bindingRemoved":"Binding removed","chatConfig.paChannel.bindingRemoveFailed":"Failed to remove binding","chatConfig.paChannel.bindingsLoadFailed":"Failed to load bindings","chatConfig.paChannel.installationsLoadFailed":"Failed to load channel installations","chatConfig.paChannel.channelEnabled":"Channel enabled","chatConfig.paChannel.channelDisabled":"Channel disabled","chatConfig.paChannel.toggleFailed":"Failed to toggle channel","chatConfig.paChannel.installationUpdated":"Installation updated","chatConfig.paChannel.installationUpdateFailed":"Failed to update installation","chatConfig.paChannel.installationCreated":"Installation created","chatConfig.paChannel.installationCreateFailed":"Failed to create installation","chatConfig.paChannel.installationSaveFailed":"Failed to save installation","chatConfig.paChannel.installationDeleted":"Installation deleted","chatConfig.paChannel.installationDeleteFailed":"Failed to delete installation","chatConfig.paChannel.addUsersHint":"Now add users who can access this channel","chatConfig.paChannel.validation.appIdRequired":"App ID is required","chatConfig.paChannel.validation.appSecretRequired":"App Secret is required","chatConfig.paChannel.validation.botTokenRequired":"Bot Token is required","chatConfig.paChannel.qr.hint":"Scan the QR code with WeChat to get a bot token","chatConfig.paChannel.qr.get":"Get QR Code","chatConfig.paChannel.qr.generating":"Generating QR code...","chatConfig.paChannel.qr.scan":"Scan with WeChat","chatConfig.paChannel.qr.scanned":"Scanned! Confirm on your phone...","chatConfig.paChannel.qr.expiresIn":"Expires in {{time}}","chatConfig.paChannel.qr.expired":"QR code expired","chatConfig.paChannel.qr.refreshStatus":"Refresh Status","chatConfig.paChannel.qr.loginConfirmed":"Login confirmed!","chatConfig.paChannel.qr.tokenFilled":"Bot token has been filled automatically","chatConfig.paChannel.qr.expiredGetNew":"QR code expired. Get a new one.","chatConfig.paChannel.qr.retry":"Retry","chatConfig.paChannel.qr.loadFailed":"Failed to load QR code","chatConfig.paChannel.qr.getFailed":"Failed to get QR code","chatConfig.paChannel.qr.statusFailed":"Failed to check QR status"},a={messages:n};export{a as default,n as messages};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./embed-page-chunk-QBTAJ2YI.js";var e={"mcpapp.fallbackTitle":"MCP App","mcpapp.openInSideApp":"Open in side app","mcpapp.unavailable":"MCP App unavailable","mcpapp.unavailableDescription":"MCP Apps require the gateway sandbox to be served from a different origin than the console.","mcpapp.failedToLoad":"MCP App failed to load: {{error}}","mcpapp.resourceLoadFailed":"Failed to load MCP app resource","mcpapp.toolResultAlt":"tool result","mcpapp.test.badge":"Plugin test","mcpapp.test.input":"Test input","mcpapp.test.result":"Result","mcpapp.test.data":"Data","mcpapp.test.ui":"UI"},t={messages:e};export{t as default,e as messages};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./embed-page-chunk-QBTAJ2YI.js";var t={"chat.empty.createConversationFirst":"Please create a conversation first","chat.empty.question":"Ready to turn data into insightful charts in seconds?","chat.empty.welcomePrefix":"Hey","chat.empty.userFallback":"there","chat.sender.attachments":"Attachments","chat.sender.uploadFile":"Upload File","chat.sender.rootDirectory":"Root Directory","chat.sender.filesUploading":"Files are still uploading...","chat.sender.uploadFailed":"{{name}} file upload failed.{{reason}}","chat.sender.fileTooLarge":"File must be smaller than {{max}}MB! {{name}} is too large.","chat.sender.thinking":"{{frame}} Thinking...","chat.sender.messagesWaiting":"{{count}} messages waiting...","chat.sender.placeholder":"Type / to see available skills, or @ to reference files","chat.sender.moreMatches":"...and {{count}} more \u2014 keep typing to narrow","chat.error.streamError":"Stream error","chat.error.hitlResponseRejected":"The agent did not accept this response. Please retry.","chat.error.interruptNotFound":"Unable to resolve the pending interrupt. Please retry.","chat.stop.superseded":"Response interrupted by a new message.","chat.stop.stopped":"Response stopped.","chat.layout.toggleMenu":"Toggle menu","chat.layout.closeDetail":"Close detail panel","chat.layout.closeTools":"Close tool panel","chat.menu.branding":"Menu","chat.menu.expandSidebar":"Expand sidebar","chat.menu.collapseSidebar":"Collapse sidebar","chat.menu.newThread":"New Thread","chat.agent.fallbackName":"Agent","chat.agent.selectTitle":"Select Agent","chat.agent.empty":"No agents available","chat.agent.search":"Search agents","chat.agent.noResults":"No matching agents","chat.agent.onboardingTitle":"Agent switching moved here","chat.agent.onboardingDescription":"Click this agent item to switch agents.","chat.agent.onboardingGotIt":"Got it","chat.model.label":"Model","chat.model.placeholder":"Model","chat.model.empty":"No models available","chat.budget.hint":"Run effort budget","chat.budget.turns":"~{{count}} turns","chat.budget.current":"Run effort: {{level}}","chat.budget.low":"Low","chat.budget.lowDescription":"Light task","chat.budget.medium":"Medium","chat.budget.mediumDescription":"Standard task","chat.budget.high":"High","chat.budget.highDescription":"Multi-step task","chat.budget.max":"Max","chat.budget.maxDescription":"Long task","chat.workspace.selectPlaceholder":"Workspace","chat.workspace.selectTitle":"Select Workspace","chat.project.selectPlaceholder":"Project","chat.project.selectTitle":"Select Project","chat.project.empty":"No projects","chat.project.nameRequired":"Project name is required","chat.project.nameTooLong":"Name must be {{max}} characters or less","chat.project.selectWorkspaceFirst":"Please select a workspace first","chat.project.created":'Project "{{name}}" created',"chat.project.createFailed":"Failed to create project","chat.project.createTitle":"Create New Project","chat.project.namePlaceholder":"Enter project name","chat.thread.create":"Create New Conversation","chat.thread.createFailed":"Failed to create new thread","chat.thread.history":"Conversation History","chat.thread.refreshHistory":"Refresh Conversation History","chat.thread.searchPlaceholder":"Search conversations\u2026","chat.thread.sortName":"Name","chat.thread.sortUpdated":"Updated","chat.thread.sortCreated":"Created","chat.thread.sortAscending":"Ascending","chat.thread.sortDescending":"Descending","chat.thread.loading":"Loading conversations...","chat.thread.noMatch":'No conversations match "{{query}}"',"chat.thread.empty":"No conversations yet","chat.thread.nameLabel":"Conversation name","chat.thread.status.idle":"Idle","chat.thread.status.busy":"Working","chat.thread.status.interrupted":"Interrupted","chat.thread.status.error":"Error","chat.thread.saveName":"Save name","chat.thread.cancelRename":"Cancel rename","chat.thread.rename":"Rename conversation","chat.thread.renamed":"Conversation renamed","chat.thread.renameFailed":"Failed to rename conversation","chat.thread.delete":"Delete conversation","chat.thread.deleteTitle":"Delete Conversation","chat.thread.deleteConfirm":"Are you sure you want to delete this conversation? This action cannot be undone.","chat.thread.deleted":"Conversation deleted","chat.thread.deleteFailed":"Failed to delete conversation","chat.pin.pin":"Pin to Menu","chat.pin.unpin":"Unpin from Menu","chat.pin.pinTitle":"Pin to Menu","chat.pin.enterName":"Please enter a menu name","chat.pin.pinned":"Pinned to menu","chat.pin.unpinned":"Unpinned from menu","chat.pin.pinFailed":"Failed to pin to menu","chat.pin.unpinFailed":"Failed to unpin from menu","chat.pin.namePlaceholder":"Menu name (required)","chat.pin.groupPlaceholder":"Group (optional, select or type new)","chat.sideApp.unnamed":"Unnamed","chat.sideApp.allTabs":"All tabs","chat.sideApp.close":"Close","chat.sideApp.empty":"Select an app to start","chat.sideApp.componentNotFound":"Component view not found","chat.todo.title":"Todos","chat.todo.noTasks":"No tasks","chat.todo.inProgress":"{{count}} in progress","chat.todo.completed":"{{count}} completed","chat.todo.progressTooltip":"{{completed}} / {{total}} tasks completed","chat.task.title":"Tasks","chat.task.noTasks":"No tasks","chat.task.inProgress":"{{count}} in progress","chat.task.completed":"{{count}} completed","chat.task.progressTooltip":"{{completed}} / {{total}} tasks completed","chat.customMenu.invalid":"Invalid menu item","chat.customMenu.empty":"(empty)","chat.customMenu.htmlPage":"Custom HTML Page","chat.customMenu.componentNotFound":'Component "{{name}}" not found',"chat.customMenu.invalidMcpApp":"Invalid MCP App menu item","chat.customMenu.unknownType":"Unknown content type: {{type}}","chat.customMenu.fileFallback":"File","chat.file.changed":"File Changed","chat.file.explorer":"File Explorer","chat.file.count":"{{count}} files","chat.copilot.agentBuilder":"Agent Builder","chat.copilot.viewing":"Viewing: {{name}}","chat.copilot.close":"Close copilot","chat.copilot.selectWorkflow":"Select a workflow to start","chat.environment.title":"Environment","chat.environment.tools":"Tools","chat.environment.capabilities":"Capabilities","chat.environment.subAgents":"Sub-agents","chat.environment.runtime":"Runtime","chat.environment.model":"Model: {{model}}","chat.environment.db":"DB: {{db}}","chat.environment.skills":"Skills: {{skills}}","chat.environment.channels":"Channels","chat.environment.noChannels":"No channels configured","chat.viewToggle.chat":"Chat","chat.viewToggle.graph":"Execution","chat.viewToggle.aria":"Switch view","chat.trace.backToCurrent":"Back to current","chat.trace.collapseOlder":"Collapse older","chat.trace.expandAll":"Expand all","chat.trace.parallelBadge":"Parallel \xD7{{count}}","chat.trace.jumpToChat":"Chat","chat.trace.phase.understand":"Understand & plan","chat.trace.phase.act":"Execute","chat.trace.phase.delegate":"Delegate","chat.trace.phase.answer":"Answer","chat.trace.phase.earlier":"Earlier","chat.trace.node.human":"User","chat.trace.summary.steps":"{{count}} steps","chat.trace.summary.steps_one":"{{count}} step","chat.trace.summary.steps_other":"{{count}} steps","chat.menu.history":"History","chat.error.resumeStreamError":"Resume stream error","chat.error.copySucceeded":"Error details copied","chat.error.copyFailed":"Failed to copy","chat.error.sectionFallback":"this section","chat.error.renderFailed":"Failed to render {{label}}","chat.error.details":"Error details","chat.error.copyDetails":"Copy Details","chat.error.boundary.sidebar":"Sidebar","chat.error.boundary.chatPanel":"Chat panel","chat.error.boundary.detailPanel":"Detail panel","chat.error.boundary.toolsPanel":"Tools panel","chat.error.boundary.thread":"Thread","chat.error.boundary.chatShell":"Chat shell","chat.agent.defaultName":"AI Assistant","chat.file.toggleDirectory":"Toggle file directory","chat.conversation.creating":"Creating conversation...","chat.tools.loading":"Loading tools...","chat.skills.loading":"Loading skills...","chat.schedule.none":"No schedules","chat.schedule.scheduledCount":"{{count}} scheduled","chat.schedule.totalCount":"{{count}} total","chat.topology.outgoing":"{{count}} out","chat.topology.incoming":"{{count}} in","chat.config.executableRequired":"Choose a template or enter a custom executable","chat.voice.unavailable":"Voice input unavailable: No STT model configured","chat.voice.transcribing":"Transcribing...","chat.voice.retryHint":"Transcription failed, tap to retry","chat.voice.rerecordHint":"Tap to re-record","chat.voice.stopRecordingAuto":"Stop recording ({{seconds}}s, {{segments}} segments transcribed)","chat.voice.stopRecording":"Stop recording ({{seconds}}s)","chat.voice.start":"Start voice input","chat.voice.noModel":"No STT model configured","chat.voice.uploading":"Uploading...","chat.voice.modeAuto":"Auto","chat.voice.modeManual":"Manual","chat.voice.segments":"{{count}} segments","chat.voice.segments_one":"{{count}} segment","chat.voice.segments_other":"{{count}} segments","chat.voice.recordingStatus":"{{mode}} mode, recording {{time}}{{chunks}} \u2014 tap to stop","chat.voice.errNotSupported":"Voice input not supported. Use Chrome, Edge, or Safari.","chat.voice.errFormatNotSupported":"Audio recording format not supported in this browser.","chat.voice.errRecordingFailed":"Recording failed, please try again.","chat.voice.errRecordInitFailed":"Recording initialization failed.","chat.voice.errMicPermission":"Please allow microphone access in browser settings","chat.voice.errMicAccess":"Cannot access microphone","chat.voice.errStopTimeout":"Stop recording timed out","chat.voice.errTranscribeFailed":"Transcription failed","chat.voice.errRetryFailed":"Retry failed","chat.analysis.quickTitle":"Quick Analysis","chat.analysis.categoriesTitle":"Analysis Categories","chat.analysis.viewMore":"View more analysis options","chat.analysis.category.sales":"Sales Analysis","chat.analysis.category.financial":"Financial Analysis","chat.analysis.category.operations":"Operations Analysis","chat.analysis.sales.comprehensive.label":"Comprehensive Sales Analysis","chat.analysis.sales.comprehensive.description":"Analyze sales revenue by specified dimensions with trend analysis and growth opportunities","chat.analysis.sales.performance.label":"Sales Performance Analysis","chat.analysis.sales.performance.description":"Aggregate omni-channel sales, evaluate performance achievement rate, and compare with historical growth","chat.analysis.sales.topCustomers.label":"Top Customer Analysis","chat.analysis.sales.topCustomers.description":"Identify top 10% customers by sales volume, analyze their purchase preferences and churn risks","chat.analysis.sales.trend.label":"Sales Trend Analysis","chat.analysis.sales.trend.description":"Analyze sales peaks and troughs through time series, forecast sales trends for the next quarter","chat.analysis.sales.repPerformance.label":"Sales Representative Performance","chat.analysis.sales.repPerformance.description":"Quantitatively evaluate conversion rates, average order value, and contract fulfillment efficiency of each sales representative","chat.analysis.sales.regional.label":"Regional Sales Comparison","chat.analysis.sales.regional.description":"Compare sales penetration across different geographic regions, identify markets with abnormal performance","chat.analysis.sales.productVolume.label":"Product Volume Analysis","chat.analysis.sales.productVolume.description":"Count sales quantities of each SKU, identify best-selling products and slow-moving inventory","chat.analysis.financial.grossMargin.label":"Product Line Gross Margin Analysis","chat.analysis.financial.grossMargin.description":"Compare gross margin levels across product lines, identify high-margin contributors and loss-making businesses","chat.analysis.financial.customerProfitability.label":"Customer Profitability Analysis","chat.analysis.financial.customerProfitability.description":"Analyze net profit contribution by different customer dimensions, identify core high-quality customers and high-service-cost customers","chat.analysis.financial.monthlyReport.label":"Monthly Financial Report","chat.analysis.financial.monthlyReport.description":"Based on this month's accounting data, automatically generate income statement, balance sheet, and cash flow statement summaries","chat.analysis.financial.ratio.label":"Financial Ratio Analysis","chat.analysis.financial.ratio.description":"Calculate and analyze key indicators such as current ratio, debt-to-asset ratio, and ROE to assess company financial health","chat.analysis.financial.cashflow.label":"Cash Flow Analysis","chat.analysis.financial.cashflow.description":"Track cash flows from operating, investing, and financing activities, analyze reasons for changes in net cash flow","chat.analysis.financial.costStructure.label":"Cost Structure Analysis","chat.analysis.financial.costStructure.description":"Break down direct costs and indirect expenses of products or services, identify core drivers affecting total costs","chat.analysis.operations.supplierEvaluation.label":"Supplier Performance Evaluation","chat.analysis.operations.supplierEvaluation.description":"Based on delivery quality, response speed, and price competitiveness, conduct comprehensive rating of core suppliers","chat.analysis.operations.inventoryTurnover.label":"Inventory Turnover Analysis","chat.analysis.operations.inventoryTurnover.description":"Calculate inventory turnover rate and days, identify slow-moving inventory materials to release capital","chat.analysis.operations.deliveryOntime.label":"On-Time Delivery Analysis","chat.analysis.operations.deliveryOntime.description":"Count order lead time from placement to delivery, analyze core links causing delayed deliveries","chat.analysis.operations.procurementCost.label":"Procurement Cost Analysis","chat.analysis.operations.procurementCost.description":"Monitor raw material procurement price fluctuations, analyze impact of procurement premiums or savings on profit","chat.analysis.operations.productionEfficiency.label":"Production Efficiency Analysis","chat.analysis.operations.productionEfficiency.description":"Calculate Overall Equipment Effectiveness (OEE) or per capita output, identify efficiency bottlenecks on production lines","chat.analysis.operations.orderFulfillment.label":"Order Fulfillment Analysis","chat.analysis.operations.orderFulfillment.description":"Analyze the full process from order receipt to final delivery, optimize order processing response time","chat.skillCategory.businessAnalysis":"Business Analysis","chat.skillCategory.codeGeneration":"Code Generation","chat.skillCategory.documentProcessing":"Document Processing","chat.skillCategory.dataAnalysis":"Data Analysis","chat.skillCategory.toolOperations":"Tool Operations","chat.skillCategory.general":"General Skills","chat.skillCategory.global":"Global Skills","chat.skillCategory.viewMore":"View more skill categories","chat.skillCategory.quickActions":"\u2728 Quick actions","chat.threadMaintenance.button":"Thread maintenance","chat.threadMaintenance.title":"Thread Maintenance","chat.threadMaintenance.missingContext":"No thread or assistant selected.","chat.threadMaintenance.loadFailed":"Failed to load thread maintenance data.","chat.threadMaintenance.copy":"Copy thread","chat.threadMaintenance.copySuccess":"Copied to thread {{id}}.","chat.threadMaintenance.switchToCopy":"Switch to copy","chat.threadMaintenance.copyFailed":"Failed to copy the thread.","chat.threadMaintenance.status":"Status","chat.threadMaintenance.pendingMessages":"Pending messages","chat.threadMaintenance.storage":"Storage","chat.threadMaintenance.checkpoints":"Checkpoints","chat.threadMaintenance.channelValues":"Channel values","chat.threadMaintenance.pendingWrites":"Pending writes","chat.threadMaintenance.interrupts":"Pending interrupts","chat.threadMaintenance.noInterrupts":"No pending interrupts.","chat.threadMaintenance.history":"Recent checkpoints","chat.threadMaintenance.noHistory":"No checkpoints","chat.threadMaintenance.checkpointId":"Checkpoint","chat.threadMaintenance.checkpointTime":"Created","chat.threadMaintenance.unknown":"Unknown","chat.threadMaintenance.viewState":"View state","chat.threadMaintenance.stateTitle":"Checkpoint state","chat.threadMaintenance.stateFailed":"Failed to load checkpoint state.","chat.threadMaintenance.loadingState":"Loading state\u2026","chat.threadMaintenance.pruneDelete":"Delete thread","chat.threadMaintenance.pruneDeleteTitle":"Delete thread","chat.threadMaintenance.pruneDeleteConfirm":"Delete this thread and its checkpoints?","chat.threadMaintenance.pruneKeepLatest":"Keep latest","chat.threadMaintenance.pruneKeepTitle":"Prune checkpoints","chat.threadMaintenance.pruneKeepConfirm":"Keep the latest {{count}} checkpoints?","chat.threadMaintenance.pruneFailed":"Thread maintenance failed.","chat.threadMaintenance.keepLabel":"Checkpoints to keep","chat.threadMaintenance.statusLoadFailed":"Failed to load thread status.","chat.threadMaintenance.storageLoadFailed":"Storage accounting is unavailable.","chat.threadMaintenance.historyLoadFailed":"Failed to load thread history.","chat.threadMaintenance.runs":"Runs","chat.threadMaintenance.noRuns":"No runs","chat.threadMaintenance.runStatus":"Status","chat.threadMaintenance.runId":"Run ID","chat.threadMaintenance.runCreated":"Created","chat.threadMaintenance.runOwner":"Owner / attempts","chat.threadMaintenance.interruptRun":"Interrupt","chat.threadMaintenance.rollbackRun":"Rollback","chat.threadMaintenance.interruptRunConfirm":"Interrupt this run?","chat.threadMaintenance.rollbackRunConfirm":"Roll back this run?","chat.threadMaintenance.runCancelFailed":"Failed to cancel the run.","chat.threadMaintenance.runsLoadFailed":"Failed to load runs.","chat.thread.createOptions.menuLabel":"Create with options\u2026","chat.thread.createOptions.open":"More create options","chat.thread.createOptions.title":"Create Thread with Options","chat.thread.createOptions.ttlLabel":"TTL (minutes)","chat.thread.createOptions.ttlPlaceholder":"No TTL","chat.thread.createOptions.ttlHint":"Empty or 0 means no expiry.","chat.thread.createOptions.superstepsLabel":"Supersteps JSON","chat.thread.createOptions.superstepsPlaceholder":'[{"updates":[{"values":{"messages":[]}}]}]',"chat.thread.createOptions.invalidSupersteps":"Supersteps must be an array of updates with object values.","chat.thread.createOptions.createFailed":"Failed to create thread.","chat.run.status.pending":"Queued","chat.run.status.running":"Running","chat.run.status.awaitingInput":"Waiting for your confirmation","chat.run.status.interrupted":"Interrupted","chat.run.status.timeout":"Timed out","chat.run.status.error":"Run failed","chat.run.elapsed":"{{seconds}}s","chat.run.cancel":"Cancel","chat.run.cancelFailed":"Failed to cancel. Try again.","chat.run.dismiss":"Dismiss","chat.run.error.quota":"This tenant is at capacity. Try again shortly.","chat.run.error.rejected":"This conversation is already running. Wait for the current reply.","chat.run.error.rollbackInProgress":"A rollback is still in progress. Try again shortly.","chat.run.error.unavailable":"The run queue is temporarily unavailable. Try again shortly.","chat.run.error.notFound":"This run no longer exists.","chat.run.error.joinTimeout":"The run is still in progress.","chat.run.error.affinity":"The run moved to another replica. Reconnect and try again.","chat.run.error.network":"Network connection failed. Check your connection and try again.","chat.run.error.stateIncompatible":"The runtime state is incompatible. Start a new conversation.","chat.run.error.generic":"The run failed. Try again later.","chat.messageRail.label":"Your messages","chat.messageRail.jump":"Jump to your message: {{preview}}","chat.run.status.queued":"{{count}} queued","chat.queue.count":"{{count}} queued","chat.queue.queued":"Queued message","chat.queue.cancel":"Remove queued message","chat.queue.cancelFailed":"Could not remove the queued message"},n={messages:t};export{n as default,t as messages};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./embed-page-chunk-QBTAJ2YI.js";var t={"chat.empty.createConversationFirst":"\u8BF7\u5148\u521B\u5EFA\u4E00\u4E2A\u5BF9\u8BDD","chat.empty.question":"\u51C6\u5907\u597D\u51E0\u79D2\u5185\u628A\u6570\u636E\u53D8\u6210\u6709\u6D1E\u5BDF\u529B\u7684\u56FE\u8868\u4E86\u5417\uFF1F","chat.empty.welcomePrefix":"\u4F60\u597D","chat.empty.userFallback":"\u670B\u53CB","chat.sender.attachments":"\u9644\u4EF6","chat.sender.uploadFile":"\u4E0A\u4F20\u6587\u4EF6","chat.sender.rootDirectory":"\u6839\u76EE\u5F55","chat.sender.filesUploading":"\u6587\u4EF6\u4ECD\u5728\u4E0A\u4F20\u4E2D\u2026","chat.sender.uploadFailed":"{{name}} \u6587\u4EF6\u4E0A\u4F20\u5931\u8D25\u3002{{reason}}","chat.sender.fileTooLarge":"\u6587\u4EF6\u5FC5\u987B\u5C0F\u4E8E {{max}}MB\uFF01{{name}} \u8FC7\u5927\u3002","chat.sender.thinking":"{{frame}} \u601D\u8003\u4E2D\u2026","chat.sender.messagesWaiting":"{{count}} \u6761\u6D88\u606F\u7B49\u5F85\u4E2D\u2026","chat.sender.placeholder":"\u8F93\u5165 / \u67E5\u770B\u53EF\u7528\u6280\u80FD\uFF0C\u6216\u8F93\u5165 @ \u5F15\u7528\u6587\u4EF6","chat.sender.moreMatches":"\u2026\u8FD8\u6709 {{count}} \u4E2A\u5339\u914D\u9879 \u2014 \u7EE7\u7EED\u8F93\u5165\u4EE5\u7F29\u5C0F\u8303\u56F4","chat.error.streamError":"\u6D41\u5F0F\u4F20\u8F93\u9519\u8BEF","chat.error.hitlResponseRejected":"\u667A\u80FD\u4F53\u672A\u63A5\u53D7\u8BE5\u54CD\u5E94\uFF0C\u8BF7\u91CD\u8BD5\u3002","chat.error.interruptNotFound":"\u65E0\u6CD5\u89E3\u6790\u5F85\u5904\u7406\u7684\u4E2D\u65AD\uFF0C\u8BF7\u91CD\u8BD5\u3002","chat.stop.superseded":"\u54CD\u5E94\u5DF2\u88AB\u65B0\u6D88\u606F\u6253\u65AD\u3002","chat.stop.stopped":"\u54CD\u5E94\u5DF2\u505C\u6B62\u3002","chat.layout.toggleMenu":"\u5207\u6362\u83DC\u5355","chat.layout.closeDetail":"\u5173\u95ED\u8BE6\u60C5\u9762\u677F","chat.layout.closeTools":"\u5173\u95ED\u5DE5\u5177\u9762\u677F","chat.menu.branding":"\u83DC\u5355","chat.menu.expandSidebar":"\u5C55\u5F00\u4FA7\u8FB9\u680F","chat.menu.collapseSidebar":"\u6536\u8D77\u4FA7\u8FB9\u680F","chat.menu.newThread":"\u65B0\u5EFA\u4F1A\u8BDD","chat.agent.fallbackName":"\u667A\u80FD\u4F53","chat.agent.selectTitle":"\u9009\u62E9\u667A\u80FD\u4F53","chat.agent.empty":"\u6682\u65E0\u53EF\u7528\u667A\u80FD\u4F53","chat.agent.search":"\u641C\u7D22\u667A\u80FD\u4F53","chat.agent.noResults":"\u6CA1\u6709\u5339\u914D\u7684\u667A\u80FD\u4F53","chat.agent.onboardingTitle":"Agent \u5207\u6362\u8FC1\u79FB\u5230\u8FD9\u91CC","chat.agent.onboardingDescription":"\u70B9\u51FB\u8FD9\u4E2A Agent \u9879\u5373\u53EF\u5207\u6362 Agent\u3002","chat.agent.onboardingGotIt":"\u77E5\u9053\u4E86","chat.model.label":"\u6A21\u578B","chat.model.placeholder":"\u6A21\u578B","chat.model.empty":"\u6682\u65E0\u53EF\u7528\u6A21\u578B","chat.budget.hint":"\u672C\u8F6E\u6267\u884C\u9884\u7B97","chat.budget.turns":"\u7EA6 {{count}} \u8F6E","chat.budget.current":"\u672C\u8F6E\u6267\u884C\u9884\u7B97\uFF1A{{level}}","chat.budget.low":"\u5C0F","chat.budget.lowDescription":"\u8F7B\u91CF\u4EFB\u52A1","chat.budget.medium":"\u4E2D","chat.budget.mediumDescription":"\u5E38\u89C4\u4EFB\u52A1","chat.budget.high":"\u9AD8","chat.budget.highDescription":"\u591A\u6B65\u9AA4\u4EFB\u52A1","chat.budget.max":"\u6700\u5927","chat.budget.maxDescription":"\u957F\u4EFB\u52A1","chat.workspace.selectPlaceholder":"\u5DE5\u4F5C\u533A","chat.workspace.selectTitle":"\u9009\u62E9\u5DE5\u4F5C\u533A","chat.project.selectPlaceholder":"\u9879\u76EE","chat.project.selectTitle":"\u9009\u62E9\u9879\u76EE","chat.project.empty":"\u6682\u65E0\u9879\u76EE","chat.project.nameRequired":"\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0","chat.project.nameTooLong":"\u540D\u79F0\u4E0D\u5F97\u8D85\u8FC7 {{max}} \u4E2A\u5B57\u7B26","chat.project.selectWorkspaceFirst":"\u8BF7\u5148\u9009\u62E9\u4E00\u4E2A\u5DE5\u4F5C\u533A","chat.project.created":"\u9879\u76EE\u300C{{name}}\u300D\u5DF2\u521B\u5EFA","chat.project.createFailed":"\u521B\u5EFA\u9879\u76EE\u5931\u8D25","chat.project.createTitle":"\u65B0\u5EFA\u9879\u76EE","chat.project.namePlaceholder":"\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0","chat.thread.create":"\u65B0\u5EFA\u5BF9\u8BDD","chat.thread.createFailed":"\u65B0\u5EFA\u4F1A\u8BDD\u5931\u8D25","chat.thread.history":"\u5386\u53F2\u5BF9\u8BDD","chat.thread.refreshHistory":"\u5237\u65B0\u5386\u53F2\u5BF9\u8BDD","chat.thread.searchPlaceholder":"\u641C\u7D22\u5BF9\u8BDD\u2026","chat.thread.sortName":"\u540D\u79F0","chat.thread.sortUpdated":"\u66F4\u65B0\u65F6\u95F4","chat.thread.sortCreated":"\u521B\u5EFA\u65F6\u95F4","chat.thread.sortAscending":"\u5347\u5E8F","chat.thread.sortDescending":"\u964D\u5E8F","chat.thread.loading":"\u6B63\u5728\u52A0\u8F7D\u5BF9\u8BDD\u2026","chat.thread.noMatch":"\u6CA1\u6709\u4E0E\u300C{{query}}\u300D\u5339\u914D\u7684\u5BF9\u8BDD","chat.thread.empty":"\u6682\u65E0\u5BF9\u8BDD","chat.thread.nameLabel":"\u5BF9\u8BDD\u540D\u79F0","chat.thread.status.idle":"\u7A7A\u95F2","chat.thread.status.busy":"\u8FD0\u884C\u4E2D","chat.thread.status.interrupted":"\u5DF2\u4E2D\u65AD","chat.thread.status.error":"\u9519\u8BEF","chat.thread.saveName":"\u4FDD\u5B58\u540D\u79F0","chat.thread.cancelRename":"\u53D6\u6D88\u91CD\u547D\u540D","chat.thread.rename":"\u91CD\u547D\u540D\u5BF9\u8BDD","chat.thread.renamed":"\u5BF9\u8BDD\u5DF2\u91CD\u547D\u540D","chat.thread.renameFailed":"\u91CD\u547D\u540D\u5BF9\u8BDD\u5931\u8D25","chat.thread.delete":"\u5220\u9664\u5BF9\u8BDD","chat.thread.deleteTitle":"\u5220\u9664\u5BF9\u8BDD","chat.thread.deleteConfirm":"\u786E\u5B9A\u8981\u5220\u9664\u8BE5\u5BF9\u8BDD\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002","chat.thread.deleted":"\u5BF9\u8BDD\u5DF2\u5220\u9664","chat.thread.deleteFailed":"\u5220\u9664\u5BF9\u8BDD\u5931\u8D25","chat.pin.pin":"\u56FA\u5B9A\u5230\u83DC\u5355","chat.pin.unpin":"\u4ECE\u83DC\u5355\u53D6\u6D88\u56FA\u5B9A","chat.pin.pinTitle":"\u56FA\u5B9A\u5230\u83DC\u5355","chat.pin.enterName":"\u8BF7\u8F93\u5165\u83DC\u5355\u540D\u79F0","chat.pin.pinned":"\u5DF2\u56FA\u5B9A\u5230\u83DC\u5355","chat.pin.unpinned":"\u5DF2\u4ECE\u83DC\u5355\u53D6\u6D88\u56FA\u5B9A","chat.pin.pinFailed":"\u56FA\u5B9A\u5230\u83DC\u5355\u5931\u8D25","chat.pin.unpinFailed":"\u4ECE\u83DC\u5355\u53D6\u6D88\u56FA\u5B9A\u5931\u8D25","chat.pin.namePlaceholder":"\u83DC\u5355\u540D\u79F0\uFF08\u5FC5\u586B\uFF09","chat.pin.groupPlaceholder":"\u5206\u7EC4\uFF08\u53EF\u9009\uFF0C\u53EF\u9009\u62E9\u6216\u8F93\u5165\u65B0\u5206\u7EC4\uFF09","chat.sideApp.unnamed":"\u672A\u547D\u540D","chat.sideApp.allTabs":"\u6240\u6709\u6807\u7B7E\u9875","chat.sideApp.close":"\u5173\u95ED","chat.sideApp.empty":"\u9009\u62E9\u4E00\u4E2A\u5E94\u7528\u5F00\u59CB\u4F7F\u7528","chat.sideApp.componentNotFound":"\u672A\u627E\u5230\u7EC4\u4EF6\u89C6\u56FE","chat.todo.title":"\u5F85\u529E","chat.todo.noTasks":"\u6682\u65E0\u4EFB\u52A1","chat.todo.inProgress":"{{count}} \u9879\u8FDB\u884C\u4E2D","chat.todo.completed":"\u5DF2\u5B8C\u6210 {{count}} \u9879","chat.todo.progressTooltip":"\u5DF2\u5B8C\u6210 {{completed}} / {{total}} \u9879\u4EFB\u52A1","chat.task.title":"\u4EFB\u52A1","chat.task.noTasks":"\u6682\u65E0\u4EFB\u52A1","chat.task.inProgress":"{{count}} \u9879\u8FDB\u884C\u4E2D","chat.task.completed":"\u5DF2\u5B8C\u6210 {{count}} \u9879","chat.task.progressTooltip":"\u5DF2\u5B8C\u6210 {{completed}} / {{total}} \u9879\u4EFB\u52A1","chat.customMenu.invalid":"\u65E0\u6548\u7684\u83DC\u5355\u9879","chat.customMenu.empty":"\uFF08\u7A7A\uFF09","chat.customMenu.htmlPage":"\u81EA\u5B9A\u4E49 HTML \u9875\u9762","chat.customMenu.componentNotFound":"\u672A\u627E\u5230\u7EC4\u4EF6\u300C{{name}}\u300D","chat.customMenu.invalidMcpApp":"\u65E0\u6548\u7684 MCP \u5E94\u7528\u83DC\u5355\u9879","chat.customMenu.unknownType":"\u672A\u77E5\u7684\u5185\u5BB9\u7C7B\u578B\uFF1A{{type}}","chat.customMenu.fileFallback":"\u6587\u4EF6","chat.file.changed":"\u6587\u4EF6\u5DF2\u53D8\u66F4","chat.file.explorer":"\u6587\u4EF6\u6D4F\u89C8\u5668","chat.file.count":"{{count}} \u4E2A\u6587\u4EF6","chat.copilot.agentBuilder":"\u667A\u80FD\u4F53\u6784\u5EFA\u5668","chat.copilot.viewing":"\u6B63\u5728\u67E5\u770B\uFF1A{{name}}","chat.copilot.close":"\u5173\u95ED\u526F\u9A7E\u9A76","chat.copilot.selectWorkflow":"\u9009\u62E9\u4E00\u4E2A\u5DE5\u4F5C\u6D41\u5F00\u59CB","chat.environment.title":"\u8FD0\u884C\u73AF\u5883","chat.environment.tools":"\u5DE5\u5177","chat.environment.capabilities":"\u80FD\u529B","chat.environment.subAgents":"\u5B50\u667A\u80FD\u4F53","chat.environment.runtime":"\u8FD0\u884C\u65F6","chat.environment.model":"\u6A21\u578B\uFF1A{{model}}","chat.environment.db":"\u6570\u636E\u5E93\uFF1A{{db}}","chat.environment.skills":"\u6280\u80FD\uFF1A{{skills}}","chat.environment.channels":"\u6E20\u9053","chat.environment.noChannels":"\u672A\u914D\u7F6E\u6E20\u9053","chat.viewToggle.chat":"\u5BF9\u8BDD","chat.viewToggle.graph":"\u6267\u884C\u8FC7\u7A0B","chat.viewToggle.aria":"\u89C6\u56FE\u5207\u6362","chat.trace.backToCurrent":"\u56DE\u5230\u5F53\u524D","chat.trace.collapseOlder":"\u6536\u8D77\u66F4\u65E9","chat.trace.expandAll":"\u5C55\u5F00\u5168\u90E8","chat.trace.parallelBadge":"\u5E76\u53D1 \xD7{{count}}","chat.trace.jumpToChat":"\u5BF9\u8BDD","chat.trace.phase.understand":"\u7406\u89E3\u4E0E\u89C4\u5212","chat.trace.phase.act":"\u6267\u884C","chat.trace.phase.delegate":"\u59D4\u6D3E","chat.trace.phase.answer":"\u56DE\u7B54","chat.trace.phase.earlier":"\u66F4\u65E9","chat.trace.node.human":"\u7528\u6237","chat.trace.summary.steps":"{{count}} \u4E2A\u6B65\u9AA4","chat.trace.summary.steps_one":"{{count}} \u4E2A\u6B65\u9AA4","chat.trace.summary.steps_other":"{{count}} \u4E2A\u6B65\u9AA4","chat.menu.history":"\u5386\u53F2","chat.error.resumeStreamError":"\u6062\u590D\u6D41\u5F0F\u4F20\u8F93\u9519\u8BEF","chat.error.copySucceeded":"\u5DF2\u590D\u5236\u9519\u8BEF\u8BE6\u60C5","chat.error.copyFailed":"\u590D\u5236\u5931\u8D25","chat.error.sectionFallback":"\u6B64\u533A\u57DF","chat.error.renderFailed":"\u6E32\u67D3 {{label}} \u5931\u8D25","chat.error.details":"\u9519\u8BEF\u8BE6\u60C5","chat.error.copyDetails":"\u590D\u5236\u8BE6\u60C5","chat.error.boundary.sidebar":"\u4FA7\u8FB9\u680F","chat.error.boundary.chatPanel":"\u5BF9\u8BDD\u9762\u677F","chat.error.boundary.detailPanel":"\u8BE6\u60C5\u9762\u677F","chat.error.boundary.toolsPanel":"\u5DE5\u5177\u9762\u677F","chat.error.boundary.thread":"\u4F1A\u8BDD","chat.error.boundary.chatShell":"\u5BF9\u8BDD\u5916\u58F3","chat.agent.defaultName":"AI \u52A9\u624B","chat.file.toggleDirectory":"\u5207\u6362\u6587\u4EF6\u76EE\u5F55","chat.conversation.creating":"\u6B63\u5728\u521B\u5EFA\u5BF9\u8BDD\u2026","chat.tools.loading":"\u6B63\u5728\u52A0\u8F7D\u5DE5\u5177\u2026","chat.skills.loading":"\u6B63\u5728\u52A0\u8F7D\u6280\u80FD\u2026","chat.schedule.none":"\u6682\u65E0\u5B9A\u65F6\u4EFB\u52A1","chat.schedule.scheduledCount":"\u5DF2\u5B89\u6392 {{count}} \u9879","chat.schedule.totalCount":"\u5171 {{count}} \u9879","chat.topology.outgoing":"{{count}} \u51FA","chat.topology.incoming":"{{count}} \u5165","chat.config.executableRequired":"\u8BF7\u9009\u62E9\u4E00\u4E2A\u6A21\u677F\u6216\u8F93\u5165\u81EA\u5B9A\u4E49\u53EF\u6267\u884C\u6587\u4EF6","chat.voice.unavailable":"\u8BED\u97F3\u8F93\u5165\u4E0D\u53EF\u7528\uFF1A\u672A\u914D\u7F6E STT \u6A21\u578B","chat.voice.transcribing":"\u8F6C\u5F55\u4E2D\u2026","chat.voice.retryHint":"\u8F6C\u5F55\u5931\u8D25\uFF0C\u70B9\u51FB\u91CD\u8BD5","chat.voice.rerecordHint":"\u70B9\u51FB\u91CD\u65B0\u5F55\u5236","chat.voice.stopRecordingAuto":"\u505C\u6B62\u5F55\u5236\uFF08{{seconds}} \u79D2\uFF0C\u5DF2\u8F6C\u5F55 {{segments}} \u6BB5\uFF09","chat.voice.stopRecording":"\u505C\u6B62\u5F55\u5236\uFF08{{seconds}} \u79D2\uFF09","chat.voice.start":"\u5F00\u59CB\u8BED\u97F3\u8F93\u5165","chat.voice.noModel":"\u672A\u914D\u7F6E STT \u6A21\u578B","chat.voice.uploading":"\u4E0A\u4F20\u4E2D\u2026","chat.voice.modeAuto":"\u81EA\u52A8","chat.voice.modeManual":"\u624B\u52A8","chat.voice.segments":"{{count}} \u6BB5","chat.voice.segments_one":"{{count}} \u6BB5","chat.voice.segments_other":"{{count}} \u6BB5","chat.voice.recordingStatus":"{{mode}}\u6A21\u5F0F\uFF0C\u5F55\u5236\u4E2D {{time}}{{chunks}} \u2014 \u70B9\u51FB\u505C\u6B62","chat.voice.errNotSupported":"\u4E0D\u652F\u6301\u8BED\u97F3\u8F93\u5165\uFF0C\u8BF7\u4F7F\u7528 Chrome\u3001Edge \u6216 Safari\u3002","chat.voice.errFormatNotSupported":"\u6B64\u6D4F\u89C8\u5668\u4E0D\u652F\u6301\u8BE5\u97F3\u9891\u5F55\u5236\u683C\u5F0F\u3002","chat.voice.errRecordingFailed":"\u5F55\u5236\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002","chat.voice.errRecordInitFailed":"\u5F55\u5236\u521D\u59CB\u5316\u5931\u8D25\u3002","chat.voice.errMicPermission":"\u8BF7\u5728\u6D4F\u89C8\u5668\u8BBE\u7F6E\u4E2D\u5141\u8BB8\u9EA6\u514B\u98CE\u6743\u9650","chat.voice.errMicAccess":"\u65E0\u6CD5\u8BBF\u95EE\u9EA6\u514B\u98CE","chat.voice.errStopTimeout":"\u505C\u6B62\u5F55\u5236\u8D85\u65F6","chat.voice.errTranscribeFailed":"\u8F6C\u5F55\u5931\u8D25","chat.voice.errRetryFailed":"\u91CD\u8BD5\u5931\u8D25","chat.analysis.quickTitle":"\u5FEB\u901F\u5206\u6790","chat.analysis.categoriesTitle":"\u5206\u6790\u7C7B\u522B","chat.analysis.viewMore":"\u67E5\u770B\u66F4\u591A\u5206\u6790\u9009\u9879","chat.analysis.category.sales":"\u9500\u552E\u5206\u6790","chat.analysis.category.financial":"\u8D22\u52A1\u5206\u6790","chat.analysis.category.operations":"\u8FD0\u8425\u5206\u6790","chat.analysis.sales.comprehensive.label":"\u7EFC\u5408\u9500\u552E\u5206\u6790","chat.analysis.sales.comprehensive.description":"\u6309\u6307\u5B9A\u7EF4\u5EA6\u5206\u6790\u9500\u552E\u6536\u5165\uFF0C\u5E76\u8FDB\u884C\u8D8B\u52BF\u5206\u6790\u4E0E\u589E\u957F\u673A\u4F1A\u8BC6\u522B","chat.analysis.sales.performance.label":"\u9500\u552E\u4E1A\u7EE9\u5206\u6790","chat.analysis.sales.performance.description":"\u6C47\u603B\u5168\u6E20\u9053\u9500\u552E\u989D\uFF0C\u8BC4\u4F30\u4E1A\u7EE9\u8FBE\u6210\u7387\uFF0C\u5E76\u4E0E\u5386\u53F2\u589E\u957F\u5BF9\u6BD4","chat.analysis.sales.topCustomers.label":"\u5927\u5BA2\u6237\u5206\u6790","chat.analysis.sales.topCustomers.description":"\u8BC6\u522B\u9500\u552E\u989D\u524D 10% \u7684\u5BA2\u6237\uFF0C\u5206\u6790\u5176\u8D2D\u4E70\u504F\u597D\u4E0E\u6D41\u5931\u98CE\u9669","chat.analysis.sales.trend.label":"\u9500\u552E\u8D8B\u52BF\u5206\u6790","chat.analysis.sales.trend.description":"\u901A\u8FC7\u65F6\u95F4\u5E8F\u5217\u5206\u6790\u9500\u552E\u5CF0\u8C37\uFF0C\u9884\u6D4B\u4E0B\u4E00\u5B63\u5EA6\u9500\u552E\u8D8B\u52BF","chat.analysis.sales.repPerformance.label":"\u9500\u552E\u4EBA\u5458\u4E1A\u7EE9","chat.analysis.sales.repPerformance.description":"\u91CF\u5316\u8BC4\u4F30\u6BCF\u4F4D\u9500\u552E\u4EBA\u5458\u7684\u8F6C\u5316\u7387\u3001\u5BA2\u5355\u4EF7\u4E0E\u5408\u540C\u5C65\u7EA6\u6548\u7387","chat.analysis.sales.regional.label":"\u533A\u57DF\u9500\u552E\u5BF9\u6BD4","chat.analysis.sales.regional.description":"\u5BF9\u6BD4\u4E0D\u540C\u5730\u7406\u533A\u57DF\u7684\u9500\u552E\u6E17\u900F\u7387\uFF0C\u8BC6\u522B\u8868\u73B0\u5F02\u5E38\u7684\u5E02\u573A","chat.analysis.sales.productVolume.label":"\u5546\u54C1\u9500\u91CF\u5206\u6790","chat.analysis.sales.productVolume.description":"\u7EDF\u8BA1\u5404 SKU \u7684\u9500\u91CF\uFF0C\u8BC6\u522B\u7545\u9500\u5546\u54C1\u4E0E\u6EDE\u9500\u5E93\u5B58","chat.analysis.financial.grossMargin.label":"\u4EA7\u54C1\u7EBF\u6BDB\u5229\u5206\u6790","chat.analysis.financial.grossMargin.description":"\u5BF9\u6BD4\u5404\u4EA7\u54C1\u7EBF\u7684\u6BDB\u5229\u6C34\u5E73\uFF0C\u8BC6\u522B\u9AD8\u6BDB\u5229\u8D21\u732E\u4E0E\u4E8F\u635F\u4E1A\u52A1","chat.analysis.financial.customerProfitability.label":"\u5BA2\u6237\u76C8\u5229\u5206\u6790","chat.analysis.financial.customerProfitability.description":"\u6309\u4E0D\u540C\u5BA2\u6237\u7EF4\u5EA6\u5206\u6790\u51C0\u5229\u6DA6\u8D21\u732E\uFF0C\u8BC6\u522B\u6838\u5FC3\u4F18\u8D28\u5BA2\u6237\u4E0E\u9AD8\u670D\u52A1\u6210\u672C\u5BA2\u6237","chat.analysis.financial.monthlyReport.label":"\u6708\u5EA6\u8D22\u52A1\u62A5\u544A","chat.analysis.financial.monthlyReport.description":"\u57FA\u4E8E\u672C\u6708\u6838\u7B97\u6570\u636E\uFF0C\u81EA\u52A8\u751F\u6210\u5229\u6DA6\u8868\u3001\u8D44\u4EA7\u8D1F\u503A\u8868\u4E0E\u73B0\u91D1\u6D41\u91CF\u8868\u6458\u8981","chat.analysis.financial.ratio.label":"\u8D22\u52A1\u6BD4\u7387\u5206\u6790","chat.analysis.financial.ratio.description":"\u8BA1\u7B97\u5E76\u5206\u6790\u6D41\u52A8\u6BD4\u7387\u3001\u8D44\u4EA7\u8D1F\u503A\u7387\u3001ROE \u7B49\u5173\u952E\u6307\u6807\uFF0C\u8BC4\u4F30\u516C\u53F8\u8D22\u52A1\u5065\u5EB7\u5EA6","chat.analysis.financial.cashflow.label":"\u73B0\u91D1\u6D41\u5206\u6790","chat.analysis.financial.cashflow.description":"\u8FFD\u8E2A\u7ECF\u8425\u3001\u6295\u8D44\u4E0E\u7B79\u8D44\u6D3B\u52A8\u73B0\u91D1\u6D41\uFF0C\u5206\u6790\u51C0\u73B0\u91D1\u6D41\u53D8\u52A8\u7684\u539F\u56E0\u4E0E\u8D8B\u52BF","chat.analysis.financial.costStructure.label":"\u6210\u672C\u7ED3\u6784\u5206\u6790","chat.analysis.financial.costStructure.description":"\u62C6\u89E3\u4EA7\u54C1\u6216\u670D\u52A1\u7684\u76F4\u63A5\u6210\u672C\u4E0E\u95F4\u63A5\u8D39\u7528\uFF0C\u8BC6\u522B\u5F71\u54CD\u603B\u6210\u672C\u7684\u6838\u5FC3\u9A71\u52A8\u56E0\u7D20","chat.analysis.operations.supplierEvaluation.label":"\u4F9B\u5E94\u5546\u7EE9\u6548\u8BC4\u4F30","chat.analysis.operations.supplierEvaluation.description":"\u57FA\u4E8E\u4EA4\u4ED8\u8D28\u91CF\u3001\u54CD\u5E94\u901F\u5EA6\u4E0E\u4EF7\u683C\u7ADE\u4E89\u529B\uFF0C\u5BF9\u6838\u5FC3\u4F9B\u5E94\u5546\u8FDB\u884C\u7EFC\u5408\u8BC4\u7EA7","chat.analysis.operations.inventoryTurnover.label":"\u5E93\u5B58\u5468\u8F6C\u5206\u6790","chat.analysis.operations.inventoryTurnover.description":"\u8BA1\u7B97\u5E93\u5B58\u5468\u8F6C\u7387\u4E0E\u5468\u8F6C\u5929\u6570\uFF0C\u8BC6\u522B\u5446\u6EDE\u5E93\u5B58\u7269\u6599\u4EE5\u91CA\u653E\u8D44\u91D1","chat.analysis.operations.deliveryOntime.label":"\u51C6\u65F6\u4EA4\u4ED8\u5206\u6790","chat.analysis.operations.deliveryOntime.description":"\u7EDF\u8BA1\u8BA2\u5355\u4ECE\u4E0B\u5355\u5230\u4EA4\u4ED8\u7684\u5468\u671F\uFF0C\u5206\u6790\u5BFC\u81F4\u5EF6\u8FDF\u4EA4\u4ED8\u7684\u6838\u5FC3\u73AF\u8282","chat.analysis.operations.procurementCost.label":"\u91C7\u8D2D\u6210\u672C\u5206\u6790","chat.analysis.operations.procurementCost.description":"\u76D1\u63A7\u539F\u6750\u6599\u91C7\u8D2D\u4EF7\u683C\u6CE2\u52A8\uFF0C\u5206\u6790\u91C7\u8D2D\u6EA2\u4EF7\u6216\u8282\u7EA6\u5BF9\u5229\u6DA6\u7684\u5F71\u54CD","chat.analysis.operations.productionEfficiency.label":"\u751F\u4EA7\u6548\u7387\u5206\u6790","chat.analysis.operations.productionEfficiency.description":"\u8BA1\u7B97\u8BBE\u5907\u7EFC\u5408\u6548\u7387\uFF08OEE\uFF09\u6216\u4EBA\u5747\u4EA7\u51FA\uFF0C\u8BC6\u522B\u4EA7\u7EBF\u6548\u7387\u74F6\u9888","chat.analysis.operations.orderFulfillment.label":"\u8BA2\u5355\u5C65\u7EA6\u5206\u6790","chat.analysis.operations.orderFulfillment.description":"\u5206\u6790\u4ECE\u63A5\u5355\u5230\u6700\u7EC8\u4EA4\u4ED8\u7684\u5168\u6D41\u7A0B\uFF0C\u4F18\u5316\u8BA2\u5355\u5904\u7406\u54CD\u5E94\u65F6\u95F4","chat.skillCategory.businessAnalysis":"\u4E1A\u52A1\u5206\u6790","chat.skillCategory.codeGeneration":"\u4EE3\u7801\u751F\u6210","chat.skillCategory.documentProcessing":"\u6587\u6863\u5904\u7406","chat.skillCategory.dataAnalysis":"\u6570\u636E\u5206\u6790","chat.skillCategory.toolOperations":"\u5DE5\u5177\u64CD\u4F5C","chat.skillCategory.general":"\u901A\u7528\u6280\u80FD","chat.skillCategory.global":"\u5168\u5C40\u6280\u80FD","chat.skillCategory.viewMore":"\u67E5\u770B\u66F4\u591A\u6280\u80FD\u5206\u7C7B","chat.skillCategory.quickActions":"\u2728 \u5FEB\u6377\u64CD\u4F5C","chat.threadMaintenance.button":"\u7EBF\u7A0B\u7EF4\u62A4","chat.threadMaintenance.title":"\u7EBF\u7A0B\u7EF4\u62A4","chat.threadMaintenance.missingContext":"\u672A\u9009\u62E9\u7EBF\u7A0B\u6216 Agent\u3002","chat.threadMaintenance.loadFailed":"\u52A0\u8F7D\u7EBF\u7A0B\u7EF4\u62A4\u6570\u636E\u5931\u8D25\u3002","chat.threadMaintenance.copy":"\u590D\u5236\u7EBF\u7A0B","chat.threadMaintenance.copySuccess":"\u5DF2\u590D\u5236\u5230\u7EBF\u7A0B {{id}}\u3002","chat.threadMaintenance.switchToCopy":"\u5207\u6362\u5230\u526F\u672C","chat.threadMaintenance.copyFailed":"\u590D\u5236\u7EBF\u7A0B\u5931\u8D25\u3002","chat.threadMaintenance.status":"\u72B6\u6001","chat.threadMaintenance.pendingMessages":"\u5F85\u5904\u7406\u6D88\u606F","chat.threadMaintenance.storage":"\u5B58\u50A8","chat.threadMaintenance.checkpoints":"\u68C0\u67E5\u70B9","chat.threadMaintenance.channelValues":"\u901A\u9053\u503C","chat.threadMaintenance.pendingWrites":"\u5F85\u5199\u5165","chat.threadMaintenance.interrupts":"\u5F85\u5904\u7406\u4E2D\u65AD","chat.threadMaintenance.noInterrupts":"\u6682\u65E0\u5F85\u5904\u7406\u4E2D\u65AD\u3002","chat.threadMaintenance.history":"\u6700\u8FD1\u68C0\u67E5\u70B9","chat.threadMaintenance.noHistory":"\u6682\u65E0\u68C0\u67E5\u70B9","chat.threadMaintenance.checkpointId":"\u68C0\u67E5\u70B9","chat.threadMaintenance.checkpointTime":"\u521B\u5EFA\u65F6\u95F4","chat.threadMaintenance.unknown":"\u672A\u77E5","chat.threadMaintenance.viewState":"\u67E5\u770B\u72B6\u6001","chat.threadMaintenance.stateTitle":"\u68C0\u67E5\u70B9\u72B6\u6001","chat.threadMaintenance.stateFailed":"\u52A0\u8F7D\u68C0\u67E5\u70B9\u72B6\u6001\u5931\u8D25\u3002","chat.threadMaintenance.loadingState":"\u6B63\u5728\u52A0\u8F7D\u72B6\u6001\u2026","chat.threadMaintenance.pruneDelete":"\u5220\u9664\u7EBF\u7A0B","chat.threadMaintenance.pruneDeleteTitle":"\u5220\u9664\u7EBF\u7A0B","chat.threadMaintenance.pruneDeleteConfirm":"\u5220\u9664\u6B64\u7EBF\u7A0B\u53CA\u5176\u68C0\u67E5\u70B9\uFF1F","chat.threadMaintenance.pruneKeepLatest":"\u4FDD\u7559\u6700\u65B0","chat.threadMaintenance.pruneKeepTitle":"\u6E05\u7406\u68C0\u67E5\u70B9","chat.threadMaintenance.pruneKeepConfirm":"\u4FDD\u7559\u6700\u65B0 {{count}} \u4E2A\u68C0\u67E5\u70B9\uFF1F","chat.threadMaintenance.pruneFailed":"\u7EBF\u7A0B\u7EF4\u62A4\u5931\u8D25\u3002","chat.threadMaintenance.keepLabel":"\u4FDD\u7559\u68C0\u67E5\u70B9\u6570\u91CF","chat.threadMaintenance.statusLoadFailed":"\u52A0\u8F7D\u7EBF\u7A0B\u72B6\u6001\u5931\u8D25\u3002","chat.threadMaintenance.storageLoadFailed":"\u5B58\u50A8\u7EDF\u8BA1\u4E0D\u53EF\u7528\u3002","chat.threadMaintenance.historyLoadFailed":"\u52A0\u8F7D\u7EBF\u7A0B\u5386\u53F2\u5931\u8D25\u3002","chat.threadMaintenance.runs":"\u8FD0\u884C\u8BB0\u5F55","chat.threadMaintenance.noRuns":"\u6682\u65E0\u8FD0\u884C\u8BB0\u5F55","chat.threadMaintenance.runStatus":"\u72B6\u6001","chat.threadMaintenance.runId":"\u8FD0\u884C ID","chat.threadMaintenance.runCreated":"\u521B\u5EFA\u65F6\u95F4","chat.threadMaintenance.runOwner":"\u6267\u884C\u8005 / \u5C1D\u8BD5\u6B21\u6570","chat.threadMaintenance.interruptRun":"\u4E2D\u65AD","chat.threadMaintenance.rollbackRun":"\u56DE\u6EDA","chat.threadMaintenance.interruptRunConfirm":"\u4E2D\u65AD\u6B64\u6B21\u8FD0\u884C\uFF1F","chat.threadMaintenance.rollbackRunConfirm":"\u56DE\u6EDA\u6B64\u6B21\u8FD0\u884C\uFF1F","chat.threadMaintenance.runCancelFailed":"\u53D6\u6D88\u8FD0\u884C\u5931\u8D25\u3002","chat.threadMaintenance.runsLoadFailed":"\u52A0\u8F7D\u8FD0\u884C\u8BB0\u5F55\u5931\u8D25\u3002","chat.thread.createOptions.menuLabel":"\u5E26\u9009\u9879\u521B\u5EFA\u2026","chat.thread.createOptions.open":"\u66F4\u591A\u521B\u5EFA\u9009\u9879","chat.thread.createOptions.title":"\u5E26\u9009\u9879\u521B\u5EFA\u7EBF\u7A0B","chat.thread.createOptions.ttlLabel":"TTL\uFF08\u5206\u949F\uFF09","chat.thread.createOptions.ttlPlaceholder":"\u65E0 TTL","chat.thread.createOptions.ttlHint":"\u7559\u7A7A\u6216 0 \u8868\u793A\u6C38\u4E0D\u8FC7\u671F\u3002","chat.thread.createOptions.superstepsLabel":"Supersteps JSON","chat.thread.createOptions.superstepsPlaceholder":'[{"updates":[{"values":{"messages":[]}}]}]',"chat.thread.createOptions.invalidSupersteps":"Supersteps \u5FC5\u987B\u662F\u5305\u542B updates \u548C\u5BF9\u8C61 values \u7684\u6570\u7EC4\u3002","chat.thread.createOptions.createFailed":"\u521B\u5EFA\u7EBF\u7A0B\u5931\u8D25\u3002","chat.run.status.pending":"\u6392\u961F\u4E2D","chat.run.status.running":"\u8FD0\u884C\u4E2D","chat.run.status.awaitingInput":"\u7B49\u5F85\u4F60\u7684\u786E\u8BA4","chat.run.status.interrupted":"\u5DF2\u4E2D\u65AD","chat.run.status.timeout":"\u6267\u884C\u8D85\u65F6","chat.run.status.error":"\u6267\u884C\u5931\u8D25","chat.run.elapsed":"{{seconds}} \u79D2","chat.run.cancel":"\u53D6\u6D88","chat.run.cancelFailed":"\u53D6\u6D88\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002","chat.run.dismiss":"\u5173\u95ED","chat.run.error.quota":"\u5F53\u524D\u79DF\u6237\u5E76\u53D1\u5DF2\u6EE1\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002","chat.run.error.rejected":"\u8BE5\u5BF9\u8BDD\u6B63\u5728\u6267\u884C\uFF0C\u8BF7\u7B49\u5F85\u5F53\u524D\u56DE\u590D\u5B8C\u6210\u3002","chat.run.error.rollbackInProgress":"\u6B63\u5728\u56DE\u6EDA\u4E0A\u4E00\u6761\u6267\u884C\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002","chat.run.error.unavailable":"\u6267\u884C\u961F\u5217\u6682\u4E0D\u53EF\u7528\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002","chat.run.error.notFound":"\u6267\u884C\u8BB0\u5F55\u5DF2\u4E0D\u5B58\u5728\u3002","chat.run.error.joinTimeout":"\u6267\u884C\u4ECD\u5728\u8FDB\u884C\u4E2D\u3002","chat.run.error.affinity":"\u6267\u884C\u5DF2\u5207\u6362\u5230\u5176\u4ED6\u526F\u672C\uFF0C\u8BF7\u91CD\u65B0\u8FDE\u63A5\u3002","chat.run.error.network":"\u7F51\u7EDC\u8FDE\u63A5\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u7F51\u7EDC\u540E\u91CD\u8BD5\u3002","chat.run.error.stateIncompatible":"\u8FD0\u884C\u65F6\u72B6\u6001\u4E0D\u517C\u5BB9\uFF0C\u8BF7\u65B0\u5EFA\u5BF9\u8BDD\u91CD\u8BD5\u3002","chat.run.error.generic":"\u6267\u884C\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002","chat.messageRail.label":"\u4F60\u7684\u6D88\u606F","chat.messageRail.jump":"\u8DF3\u8F6C\u5230\u4F60\u7684\u6D88\u606F\uFF1A{{preview}}","chat.run.status.queued":"{{count}} \u6761\u6392\u961F","chat.queue.count":"{{count}} \u6761\u6392\u961F","chat.queue.queued":"\u6392\u961F\u4E2D\u7684\u6D88\u606F","chat.queue.cancel":"\u79FB\u9664\u6392\u961F\u6D88\u606F","chat.queue.cancelFailed":"\u79FB\u9664\u6392\u961F\u6D88\u606F\u5931\u8D25"},c={messages:t};export{c as default,t as messages};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./embed-page-chunk-QBTAJ2YI.js";var e={"mcpapp.fallbackTitle":"MCP App","mcpapp.openInSideApp":"\u5728\u4FA7\u680F\u4E2D\u6253\u5F00","mcpapp.unavailable":"MCP App \u4E0D\u53EF\u7528","mcpapp.unavailableDescription":"MCP App \u8981\u6C42\u7F51\u5173\u6C99\u7BB1\u4E0E\u63A7\u5236\u53F0\u7531\u4E0D\u540C\u6E90\uFF08origin\uFF09\u63D0\u4F9B\u670D\u52A1\u3002","mcpapp.failedToLoad":"MCP App \u52A0\u8F7D\u5931\u8D25\uFF1A{{error}}","mcpapp.resourceLoadFailed":"\u52A0\u8F7D MCP App \u8D44\u6E90\u5931\u8D25","mcpapp.toolResultAlt":"\u5DE5\u5177\u6267\u884C\u7ED3\u679C","mcpapp.test.badge":"\u63D2\u4EF6\u6D4B\u8BD5","mcpapp.test.input":"\u6D4B\u8BD5\u8F93\u5165","mcpapp.test.result":"\u6D4B\u8BD5\u7ED3\u679C","mcpapp.test.data":"Data","mcpapp.test.ui":"UI"},t={messages:e};export{t as default,e as messages};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./embed-page-chunk-QBTAJ2YI.js";var n={"chatConfig.field.name":"\u540D\u79F0","chatConfig.field.description":"\u63CF\u8FF0","chatConfig.field.displayName":"\u663E\u793A\u540D\u79F0","chatConfig.field.connectionKey":"\u8FDE\u63A5 Key","chatConfig.field.host":"\u4E3B\u673A","chatConfig.field.port":"\u7AEF\u53E3","chatConfig.field.username":"\u7528\u6237\u540D","chatConfig.field.password":"\u5BC6\u7801","chatConfig.field.serverUrl":"\u670D\u52A1\u5668 URL","chatConfig.field.apiKey":"API Key","chatConfig.field.optionalDescription":"\u53EF\u9009\u63CF\u8FF0","chatConfig.config.updated":"\u914D\u7F6E\u5DF2\u66F4\u65B0","chatConfig.config.created":"\u914D\u7F6E\u5DF2\u521B\u5EFA","chatConfig.config.deleted":"\u914D\u7F6E\u5DF2\u5220\u9664","chatConfig.config.deleteFailed":"\u5220\u9664\u914D\u7F6E\u5931\u8D25","chatConfig.config.saveFailed":"\u4FDD\u5B58\u914D\u7F6E\u5931\u8D25","chatConfig.config.missingId":"\u65E0\u6CD5\u5220\u9664\uFF1A\u7F3A\u5C11\u914D\u7F6E id","chatConfig.agentType.executor":"\u6267\u884C\u5668","chatConfig.agentType.orchestrator":"\u7F16\u6392\u5668","chatConfig.agentType.workflow":"\u5DE5\u4F5C\u6D41","chatConfig.agentType.a2aRemote":"A2A \u8FDC\u7A0B","chatConfig.keyValue.key":"\u952E","chatConfig.keyValue.value":"\u503C","chatConfig.keyValue.add":"\u6DFB\u52A0","chatConfig.keyValue.removeEntry":"\u79FB\u9664\u6761\u76EE","chatConfig.connectionList.empty":"\u6CA1\u6709\u201C{{type}}\u201D\u8FDE\u63A5","chatConfig.connectionList.selectAll":"\u5168\u9009","chatConfig.connectionList.deselectAll":"\u53D6\u6D88\u5168\u9009","chatConfig.connectionList.clear":"\u6E05\u7A7A","chatConfig.connectionsHub.title":"\u63D2\u4EF6","chatConfig.connectionsHub.tab.all":"\u5168\u90E8\uFF08{{count}}\uFF09","chatConfig.connectionsHub.tab.connections":"\u8FDE\u63A5\uFF08{{count}}\uFF09","chatConfig.connectionsHub.tab.tools":"\u5DE5\u5177\uFF08{{count}}\uFF09","chatConfig.connectionsHub.empty.connections.title":"\u6CA1\u6709\u8FDE\u63A5\u7C7B\u63D2\u4EF6","chatConfig.connectionsHub.empty.connections.description":"\u6CA1\u6709\u6CE8\u518C\u652F\u6301\u8FDE\u63A5\u7BA1\u7406\u7684\u63D2\u4EF6","chatConfig.connectionsHub.empty.tools.title":"\u6CA1\u6709\u5DE5\u5177\u7C7B\u63D2\u4EF6","chatConfig.connectionsHub.empty.tools.description":"\u6CA1\u6709\u6CE8\u518C\u7EAF\u5DE5\u5177\u7C7B\u63D2\u4EF6","chatConfig.connectionsHub.empty.all.title":"\u6CA1\u6709\u63D2\u4EF6","chatConfig.connectionsHub.empty.all.description":"\u6CA1\u6709\u6CE8\u518C\u4EFB\u4F55\u63D2\u4EF6","chatConfig.connectionsHub.capability.test":"\u6D4B\u8BD5","chatConfig.connectionsHub.capability.discover":"\u53D1\u73B0","chatConfig.connectionsHub.capability.connection":"\u8FDE\u63A5","chatConfig.connectionsHub.capability.tool":"\u5DE5\u5177","chatConfig.subAgentInherit.hint":"\u9009\u62E9\u5982\u4F55\u5904\u7406\u6765\u81EA\u7236\u667A\u80FD\u4F53\u7684\u6BCF\u4E2A\u5B50\u667A\u80FD\u4F53\uFF1A","chatConfig.subAgentInherit.clone":"\u514B\u9686\u4E3A\u65B0\u667A\u80FD\u4F53","chatConfig.subAgentInherit.reuse":"\u590D\u7528","chatConfig.subAgentInherit.cloneKeyPlaceholder":"\u8F93\u5165\u514B\u9686\u667A\u80FD\u4F53\u7684 key","chatConfig.project.create.title":"\u65B0\u5EFA\u9879\u76EE","chatConfig.project.field.name":"\u9879\u76EE\u540D\u79F0","chatConfig.project.field.namePlaceholder":"\u8F93\u5165\u9879\u76EE\u540D\u79F0","chatConfig.project.validation.nameRequired":"\u8BF7\u8F93\u5165\u9879\u76EE\u540D\u79F0","chatConfig.project.validation.nameMax":"\u9879\u76EE\u540D\u79F0\u4E0D\u80FD\u8D85\u8FC7 50 \u4E2A\u5B57\u7B26","chatConfig.project.field.visibility":"\u53EF\u89C1\u6027","chatConfig.project.kind.business":"\u4E1A\u52A1","chatConfig.project.kind.business.description":"\u4EC5\u53D7\u9080\u6210\u5458\u53EF\u89C1\u3002","chatConfig.project.kind.public":"\u516C\u5F00","chatConfig.project.kind.public.description":"\u672C\u5DE5\u4F5C\u533A\u5185\u6240\u6709\u4EBA\u53EF\u89C1\u3002","chatConfig.project.field.description":"\u63CF\u8FF0\uFF08\u53EF\u9009\uFF09","chatConfig.project.field.descriptionPlaceholder":"\u8F93\u5165\u9879\u76EE\u63CF\u8FF0","chatConfig.workflow.create.title":"\u65B0\u5EFA\u5DE5\u4F5C\u6D41","chatConfig.workflow.create.titleProcessing":"\u65B0\u5EFA\u5904\u7406\u5DE5\u4F5C\u6D41","chatConfig.workflow.field.purpose":"\u7528\u9014","chatConfig.workflow.field.purposePlaceholder":"\u63CF\u8FF0\u8FD9\u4E2A\u5DE5\u4F5C\u6D41\u8981\u505A\u4EC0\u4E48\u3002\u540D\u79F0\u548C key \u4F1A\u81EA\u52A8\u751F\u6210\u3002","chatConfig.workflow.validation.purposeRequired":"\u8BF7\u63CF\u8FF0\u5DE5\u4F5C\u6D41\u7684\u7528\u9014","chatConfig.workflow.middleware.topologyName":"\u62D3\u6251","chatConfig.workflow.middleware.topologyDescription":"\u5DE5\u4F5C\u6D41\u62D3\u6251","chatConfig.skill.create.title":"\u65B0\u5EFA\u6280\u80FD","chatConfig.skill.edit.title":"\u7F16\u8F91\u6280\u80FD","chatConfig.skill.created":"\u6280\u80FD\u521B\u5EFA\u6210\u529F","chatConfig.skill.updated":"\u6280\u80FD\u66F4\u65B0\u6210\u529F","chatConfig.skill.createFailed":"\u521B\u5EFA\u6280\u80FD\u5931\u8D25","chatConfig.skill.updateFailed":"\u66F4\u65B0\u6280\u80FD\u5931\u8D25","chatConfig.skill.createError":"\u521B\u5EFA\u6280\u80FD\u65F6\u53D1\u751F\u9519\u8BEF","chatConfig.skill.updateError":"\u66F4\u65B0\u6280\u80FD\u65F6\u53D1\u751F\u9519\u8BEF","chatConfig.skill.field.name":"\u540D\u79F0","chatConfig.skill.field.description":"\u63CF\u8FF0","chatConfig.skill.field.license":"\u8BB8\u53EF\u8BC1","chatConfig.skill.field.compatibility":"\u517C\u5BB9\u6027","chatConfig.skill.field.metadata":"\u5143\u6570\u636E","chatConfig.skill.field.content":"\u5185\u5BB9","chatConfig.skill.placeholder.description":"\u63CF\u8FF0","chatConfig.skill.placeholder.license":"\u8BB8\u53EF\u8BC1","chatConfig.skill.placeholder.compatibility":"\u517C\u5BB9\u6027","chatConfig.skill.placeholder.content":"\u5185\u5BB9","chatConfig.skill.validation.nameRequired":"\u8BF7\u8F93\u5165\u6280\u80FD\u540D\u79F0","chatConfig.skill.validation.namePattern":"\u540D\u79F0\u5FC5\u987B\u4E3A\u5C0F\u5199\u5B57\u6BCD\u6570\u5B57\uFF0C\u5E76\u4F7F\u7528\u5355\u4E2A\u8FDE\u5B57\u7B26\u5206\u9694\uFF08\u4F8B\u5982 'my-skill'\uFF09","chatConfig.skill.validation.nameLength":"\u540D\u79F0\u957F\u5EA6\u5FC5\u987B\u4E3A 1-64 \u4E2A\u5B57\u7B26","chatConfig.skill.validation.descriptionRequired":"\u8BF7\u8F93\u5165\u6280\u80FD\u63CF\u8FF0","chatConfig.skill.metadata.add":"\u6DFB\u52A0","chatConfig.skill.metadata.empty":"\u8FD8\u6CA1\u6709\u5143\u6570\u636E\u3002\u4F7F\u7528\u300C\u6DFB\u52A0\u300D\u521B\u5EFA\u4E00\u6761\u3002","chatConfig.skill.metadata.row":"\u5143\u6570\u636E {{index}}","chatConfig.skill.action.save":"\u4FDD\u5B58\u4FEE\u6539","chatConfig.skill.action.create":"\u521B\u5EFA\u6280\u80FD","chatConfig.skillPicker.title":"\u6280\u80FD","chatConfig.skillPicker.selectTitle":"\u9009\u62E9\u6280\u80FD","chatConfig.skillPicker.empty":"\u6682\u65E0\u53EF\u7528\u6280\u80FD","chatConfig.databasePicker.title":"\u6570\u636E\u5E93","chatConfig.databasePicker.selectTitle":"\u9009\u62E9\u6570\u636E\u5E93","chatConfig.databasePicker.empty":"\u6682\u65E0\u53EF\u7528\u6570\u636E\u5E93","chatConfig.channelInstall.title":"\u6E20\u9053\u63A5\u5165","chatConfig.channelInstall.add":"\u6DFB\u52A0\u63A5\u5165","chatConfig.channelInstall.editTitle":"\u7F16\u8F91\u63A5\u5165","chatConfig.channelInstall.addTitle":"\u6DFB\u52A0\u63A5\u5165","chatConfig.channelInstall.empty.title":"\u6682\u65E0\u6E20\u9053\u63A5\u5165","chatConfig.channelInstall.empty.description":"\u70B9\u51FB\u300C\u6DFB\u52A0\u63A5\u5165\u300D\u521B\u5EFA\u4E00\u4E2A","chatConfig.channelInstall.unsupported":"\u6682\u4E0D\u652F\u6301\u8BE5\u6E20\u9053\u7684\u914D\u7F6E\u754C\u9762","chatConfig.channelInstall.loadFailed":"\u52A0\u8F7D\u6E20\u9053\u63A5\u5165\u5931\u8D25","chatConfig.channelInstall.deleted":"\u63A5\u5165\u5DF2\u5220\u9664","chatConfig.channelInstall.deleteFailed":"\u5220\u9664\u63A5\u5165\u5931\u8D25","chatConfig.channelInstall.updated":"\u63A5\u5165\u5DF2\u66F4\u65B0","chatConfig.channelInstall.updateFailed":"\u66F4\u65B0\u63A5\u5165\u5931\u8D25","chatConfig.channelInstall.created":"\u63A5\u5165\u5DF2\u521B\u5EFA","chatConfig.channelInstall.createFailed":"\u521B\u5EFA\u63A5\u5165\u5931\u8D25","chatConfig.channelInstall.delete.title":"\u5220\u9664\u6E20\u9053\u63A5\u5165","chatConfig.channelInstall.delete.description":"\u786E\u5B9A\u8981\u5220\u9664\u300C{{name}}\u300D\u5417\uFF1F","chatConfig.channelInstall.field.channel":"\u6E20\u9053","chatConfig.channelInstall.field.name":"\u540D\u79F0","chatConfig.channelInstall.field.appId":"App ID","chatConfig.channelInstall.field.appSecret":"App Secret","chatConfig.channelInstall.field.verificationToken":"Verification Token","chatConfig.channelInstall.field.encryptKey":"Encrypt Key","chatConfig.channelInstall.validation.appIdRequired":"App ID \u4E3A\u5FC5\u586B\u9879","chatConfig.channelInstall.validation.appSecretRequired":"App Secret \u4E3A\u5FC5\u586B\u9879","chatConfig.connection.loadFailed":"\u52A0\u8F7D\u8FDE\u63A5\u5931\u8D25","chatConfig.connection.testPassed":"\u8FDE\u63A5\u6D4B\u8BD5\u901A\u8FC7\uFF1A{{message}}","chatConfig.connection.testFailed":"\u8FDE\u63A5\u6D4B\u8BD5\u5931\u8D25","chatConfig.connection.testError":"\u6D4B\u8BD5\u8FDE\u63A5\u5931\u8D25","chatConfig.connection.missingKey":"\u65E0\u6CD5\u5220\u9664\uFF1A\u7F3A\u5C11\u8FDE\u63A5 key","chatConfig.connection.deleted":"\u8FDE\u63A5\u5DF2\u5220\u9664","chatConfig.connection.deleteFailed":"\u5220\u9664\u8FDE\u63A5\u5931\u8D25","chatConfig.connection.noSchema.title":"\u672A\u5B9A\u4E49\u8FDE\u63A5\u7ED3\u6784","chatConfig.connection.noSchema.description":"\u8BE5\u63D2\u4EF6\u7C7B\u578B\u4E0D\u652F\u6301\u8FDE\u63A5\u7BA1\u7406","chatConfig.connection.action.test":"\u6D4B\u8BD5","chatConfig.connection.status.online":"\u5728\u7EBF","chatConfig.connection.status.offline":"\u79BB\u7EBF","chatConfig.connection.updated":"\u66F4\u65B0\u4E8E {{date}}","chatConfig.connection.add":"\u6DFB\u52A0\u8FDE\u63A5","chatConfig.connection.empty.title":"\u5C1A\u672A\u914D\u7F6E\u8FDE\u63A5","chatConfig.connection.empty.description":"\u70B9\u51FB\u300C\u6DFB\u52A0\u8FDE\u63A5\u300D\u521B\u5EFA\u4E00\u4E2A","chatConfig.connection.delete.title":"\u5220\u9664\u8FDE\u63A5","chatConfig.connection.delete.confirm":"\u5220\u9664\u300C{{name}}\u300D\uFF1F","chatConfig.connectionForm.testRequestFailed":"\u6D4B\u8BD5\u8BF7\u6C42\u5931\u8D25","chatConfig.connectionForm.keyRequired":"\u8FDE\u63A5 key \u4E3A\u5FC5\u586B\u9879","chatConfig.connectionForm.updated":"\u8FDE\u63A5\u5DF2\u66F4\u65B0","chatConfig.connectionForm.created":"\u8FDE\u63A5\u5DF2\u521B\u5EFA","chatConfig.connectionForm.saveFailed":"\u4FDD\u5B58\u8FDE\u63A5\u5931\u8D25","chatConfig.connectionForm.selectPlaceholder":"\u9009\u62E9{{title}}","chatConfig.connectionForm.enterPlaceholder":"\u8F93\u5165{{title}}","chatConfig.connectionForm.step.details":"\u8FDE\u63A5\u8BE6\u60C5","chatConfig.connectionForm.step.verify":"\u9A8C\u8BC1","chatConfig.connectionForm.editTitle":"\u7F16\u8F91 {{type}} \u8FDE\u63A5","chatConfig.connectionForm.addTitle":"\u6DFB\u52A0 {{type}} \u8FDE\u63A5","chatConfig.connectionForm.save":"\u4FDD\u5B58\u4FEE\u6539","chatConfig.connectionForm.finish":"\u5B8C\u6210","chatConfig.connectionForm.testing":"\u6B63\u5728\u6D4B\u8BD5\u8FDE\u63A5\u2026\u2026","chatConfig.connectionForm.availableResources":"\u53EF\u7528\u8D44\u6E90","chatConfig.connectionForm.selectedCount":"\uFF08\u5DF2\u9009 {{count}} \u9879\uFF09","chatConfig.connectionForm.retryTest":"\u91CD\u65B0\u6D4B\u8BD5","chatConfig.database.title":"\u6570\u636E\u5E93\u8FDE\u63A5","chatConfig.database.loadFailed":"\u52A0\u8F7D\u6570\u636E\u5E93\u914D\u7F6E\u5931\u8D25","chatConfig.database.testSuccess":"\u5DF2\u6210\u529F\u8FDE\u63A5\u5230 {{host}}\uFF08{{latency}}ms\uFF09","chatConfig.database.connectionFailed":"\u8FDE\u63A5\u5931\u8D25\uFF1A{{error}}","chatConfig.database.empty.title":"\u6682\u65E0\u6570\u636E\u5E93\u914D\u7F6E","chatConfig.database.keyAndId":"Key\uFF1A{{key}} | ID\uFF1A{{id}}","chatConfig.database.connectionStringMode":"\u8FDE\u63A5\u4E32\u6A21\u5F0F","chatConfig.database.testing":"\u6D4B\u8BD5\u4E2D\u2026\u2026","chatConfig.database.editTitle":"\u7F16\u8F91\u6570\u636E\u5E93\u914D\u7F6E","chatConfig.database.addTitle":"\u6DFB\u52A0\u6570\u636E\u5E93\u914D\u7F6E","chatConfig.database.field.type":"\u6570\u636E\u5E93\u7C7B\u578B","chatConfig.database.field.connectionString":"\u8FDE\u63A5\u4E32","chatConfig.database.priorityMode":"\u4F18\u5148\u6A21\u5F0F","chatConfig.database.note.important":"\u91CD\u8981\uFF1A","chatConfig.database.note.whenProvided":"\u63D0\u4F9B\u8FDE\u63A5\u4E32\u65F6\uFF0C\u5B83\u4F1A","chatConfig.database.note.priorityOver":"\u4F18\u5148\u4E8E","chatConfig.database.note.suffix":"\u4E0B\u65B9\u6240\u6709\u5355\u72EC\u8FDE\u63A5\u53C2\u6570\u3002\u540E\u7AEF\u91C7\u7528\u76F8\u540C\u7684\u4F18\u5148\u7EA7\u903B\u8F91\u3002","chatConfig.database.field.individualParams":"\u5355\u72EC\u8FDE\u63A5\u53C2\u6570","chatConfig.database.ignoredWhenString":"\u8BBE\u7F6E\u8FDE\u63A5\u4E32\u540E\u8BE5\u9879\u4F1A\u88AB\u5FFD\u7565","chatConfig.database.field.name":"\u6570\u636E\u5E93\u540D\u79F0","chatConfig.database.delete.title":"\u5220\u9664\u6570\u636E\u5E93\u914D\u7F6E","chatConfig.database.delete.description":"\u786E\u5B9A\u8981\u5220\u9664\u300C{{name}}\u300D\u5417\uFF1F","chatConfig.metrics.title":"\u6307\u6807\u670D\u52A1\u5668\u8FDE\u63A5","chatConfig.metrics.loadFailed":"\u52A0\u8F7D\u6307\u6807\u914D\u7F6E\u5931\u8D25","chatConfig.metrics.testSuccess":"\u5DF2\u6210\u529F\u8FDE\u63A5\u5230 {{serverUrl}}\uFF08{{latency}}ms\uFF09","chatConfig.metrics.empty.title":"\u6682\u65E0\u6307\u6807\u914D\u7F6E","chatConfig.metrics.delete.title":"\u5220\u9664\u6307\u6807\u914D\u7F6E","chatConfig.metrics.step.basic":"\u57FA\u672C\u4FE1\u606F","chatConfig.metrics.step.dataSources":"\u9009\u62E9\u6570\u636E\u6E90","chatConfig.metrics.serverUrlRequired":"\u8BF7\u8F93\u5165\u670D\u52A1\u5668 URL","chatConfig.metrics.fetchDataSourcesFailed":"\u83B7\u53D6\u6570\u636E\u6E90\u5931\u8D25","chatConfig.metrics.editTitle":"\u7F16\u8F91\u6307\u6807\u914D\u7F6E","chatConfig.metrics.addTitle":"\u6DFB\u52A0\u6307\u6807\u914D\u7F6E","chatConfig.metrics.field.serverType":"\u670D\u52A1\u5668\u7C7B\u578B","chatConfig.metrics.field.authentication":"\u8BA4\u8BC1","chatConfig.metrics.optional":"\u53EF\u9009","chatConfig.metrics.placeholder.apiKey":"\u7528\u4E8E\u8BA4\u8BC1\u7684\u53EF\u9009 API Key","chatConfig.metrics.placeholder.username":"\u7528\u4E8E\u57FA\u672C\u8BA4\u8BC1\u7684\u53EF\u9009\u7528\u6237\u540D","chatConfig.metrics.placeholder.password":"\u7528\u4E8E\u57FA\u672C\u8BA4\u8BC1\u7684\u53EF\u9009\u5BC6\u7801","chatConfig.metrics.fetchingDataSources":"\u6B63\u5728\u83B7\u53D6\u6570\u636E\u6E90\u2026\u2026","chatConfig.metrics.field.dataSources":"\u6570\u636E\u6E90","chatConfig.metrics.selectedCount":"\u5DF2\u9009\uFF1A{{count}}","chatConfig.metrics.connected":"\u5DF2\u8FDE\u63A5","chatConfig.metrics.metricsAvailable":"\u5171 {{count}} \u4E2A\u6307\u6807\u53EF\u7528","chatConfig.metrics.loadingMetrics":"\u6B63\u5728\u52A0\u8F7D\u6307\u6807\u2026\u2026","chatConfig.metrics.loadMetricsFailed":"\u52A0\u8F7D\u6307\u6807\u5931\u8D25","chatConfig.metrics.selectDataSourceHint":"\u70B9\u51FB\u5DE6\u4FA7\u7684\u6570\u636E\u6E90\u67E5\u770B\u5176\u6307\u6807","chatConfig.metrics.previous":"\u4E0A\u4E00\u6B65","chatConfig.metrics.save":"\u4FDD\u5B58\u4FEE\u6539","chatConfig.metrics.type.semantic":"\u8BED\u4E49","chatConfig.metricsDataSource.select":"\u9009\u62E9\u6570\u636E\u6E90","chatConfig.metricsDataSource.noneAvailable":"\u6682\u65E0\u53EF\u7528\u6570\u636E\u6E90","chatConfig.metricsDataSource.title":"\u9009\u62E9\u6307\u6807\u6570\u636E\u6E90","chatConfig.metricsDataSource.empty":"\u6682\u65E0\u6307\u6807\u6570\u636E\u6E90","chatConfig.metricsDataSource.disconnected":"\u672A\u8FDE\u63A5","chatConfig.metricsDataSource.selected":"\u5DF2\u9009","chatConfig.mcp.title":"MCP \u670D\u52A1\u5668\u8FDE\u63A5","chatConfig.mcp.loadFailed":"\u52A0\u8F7D MCP \u670D\u52A1\u5668\u914D\u7F6E\u5931\u8D25","chatConfig.mcp.testSuccess":"\u5DF2\u6210\u529F\u8FDE\u63A5\uFF08{{latency}}ms\uFF09","chatConfig.mcp.disconnected":"{{name}} \u5DF2\u65AD\u5F00\u8FDE\u63A5","chatConfig.mcp.connected":"{{name}} \u5DF2\u8FDE\u63A5","chatConfig.mcp.connectFailed":"\u8FDE\u63A5\u5931\u8D25","chatConfig.mcp.toggleFailed":"\u5207\u6362\u8FDE\u63A5\u72B6\u6001\u5931\u8D25","chatConfig.mcp.action.test":"\u6D4B\u8BD5\u8FDE\u63A5","chatConfig.mcp.toolsCount":"{{count}} \u4E2A\u5DE5\u5177","chatConfig.mcp.empty.title":"\u6682\u65E0 MCP \u670D\u52A1\u5668\u914D\u7F6E","chatConfig.mcp.delete.title":"\u5220\u9664 MCP \u670D\u52A1\u5668\u914D\u7F6E","chatConfig.mcp.step.connection":"\u8FDE\u63A5","chatConfig.mcp.step.tools":"\u9009\u62E9\u5DE5\u5177","chatConfig.mcp.commandRequired":"\u8BF7\u8F93\u5165 stdio \u4F20\u8F93\u65B9\u5F0F\u6240\u9700\u7684\u547D\u4EE4","chatConfig.mcp.urlRequired":"\u8BF7\u8F93\u5165 HTTP/SSE \u4F20\u8F93\u65B9\u5F0F\u6240\u9700\u7684 URL","chatConfig.mcp.fetchToolsFailed":"\u83B7\u53D6\u5DE5\u5177\u5931\u8D25","chatConfig.mcp.fetchToolsError":"\u4ECE MCP \u670D\u52A1\u5668\u83B7\u53D6\u5DE5\u5177\u5931\u8D25","chatConfig.mcp.editTitle":"\u7F16\u8F91 MCP \u670D\u52A1\u5668\u914D\u7F6E","chatConfig.mcp.addTitle":"\u6DFB\u52A0 MCP \u670D\u52A1\u5668\u914D\u7F6E","chatConfig.mcp.field.transport":"\u4F20\u8F93\u7C7B\u578B","chatConfig.mcp.transport.stdio":"STDIO\uFF08\u547D\u4EE4\uFF09","chatConfig.mcp.transport.http":"HTTP","chatConfig.mcp.transport.sse":"SSE\uFF08Server-Sent Events\uFF09","chatConfig.mcp.field.command":"\u547D\u4EE4","chatConfig.mcp.field.args":"\u53C2\u6570\uFF08\u6BCF\u884C\u4E00\u4E2A\uFF09","chatConfig.mcp.field.env":"\u73AF\u5883\u53D8\u91CF","chatConfig.mcp.envHint":"\u4F20\u5165\u670D\u52A1\u5668\u8FDB\u7A0B\uFF08\u4F8B\u5982 API \u4EE4\u724C\uFF09\u3002\u503C\u4F1A\u52A0\u5BC6\u5B58\u50A8\u3002","chatConfig.mcp.addVariable":"\u6DFB\u52A0\u53D8\u91CF","chatConfig.mcp.sseDeprecated":"MCP \u89C4\u8303\u5DF2\u5E9F\u5F03 SSE \u2014\u2014 \u65B0\u670D\u52A1\u5668\u5EFA\u8BAE\u4F7F\u7528 Streamable HTTP\uFF08HTTP\uFF09\u3002","chatConfig.mcp.field.headers":"\u8BF7\u6C42\u5934","chatConfig.mcp.headersHint":"\u968F\u6BCF\u4E2A\u8BF7\u6C42\u53D1\u9001\uFF08\u4F8B\u5982\u7528\u4E8E\u8BA4\u8BC1\u7684 Authorization\uFF09\u3002\u503C\u4F1A\u52A0\u5BC6\u5B58\u50A8\u3002","chatConfig.mcp.addHeader":"\u6DFB\u52A0\u8BF7\u6C42\u5934","chatConfig.mcp.advanced":"\u9AD8\u7EA7\u9009\u9879","chatConfig.mcp.field.timeout":"\u8D85\u65F6\u65F6\u95F4\uFF08ms\uFF09","chatConfig.mcp.field.retryAttempts":"\u91CD\u8BD5\u6B21\u6570","chatConfig.mcp.connecting":"\u6B63\u5728\u8FDE\u63A5 MCP \u670D\u52A1\u5668\u5E76\u83B7\u53D6\u5DE5\u5177\u2026\u2026","chatConfig.mcp.noTools":"\u6682\u65E0\u53EF\u7528\u5DE5\u5177\u3002\u8BF7\u68C0\u67E5\u4F60\u7684\u8FDE\u63A5\u8BBE\u7F6E\u3002","chatConfig.mcp.availableTools":"\u53EF\u7528\u5DE5\u5177","chatConfig.mcp.selectedTools":"\u5DF2\u9009\uFF1A{{selected}} / {{total}}","chatConfig.mcp.parameters":"\u53C2\u6570\uFF1A{{list}}","chatConfig.mcp.previous":"\u4E0A\u4E00\u6B65","chatConfig.mcp.save":"\u4FDD\u5B58\u4FEE\u6539","chatConfig.midForm.selectAll":"\u5168\u9009","chatConfig.midForm.clear":"\u6E05\u7A7A","chatConfig.midForm.selectedOfTotal":"\u5DF2\u9009 {{selected}} / {{total}}","chatConfig.midForm.tools":"\u5DE5\u5177","chatConfig.midForm.skills.title":"\u6280\u80FD\u5E93","chatConfig.midForm.skills.search":"\u641C\u7D22\u6280\u80FD\u2026\u2026","chatConfig.midForm.skills.empty":"\u6682\u65E0\u53EF\u7528\u6280\u80FD","chatConfig.midForm.databases.title":"\u6570\u636E\u5E93","chatConfig.midForm.databases.search":"\u641C\u7D22\u6570\u636E\u5E93\u2026\u2026","chatConfig.midForm.databases.empty":"\u6682\u65E0\u53EF\u7528\u6570\u636E\u5E93","chatConfig.midForm.metrics.title":"\u6307\u6807\u670D\u52A1\u5668","chatConfig.midForm.metrics.search":"\u641C\u7D22\u670D\u52A1\u5668\u2026\u2026","chatConfig.midForm.metrics.empty":"\u6682\u65E0\u53EF\u7528\u670D\u52A1\u5668","chatConfig.midForm.collections.title":"\u96C6\u5408","chatConfig.midForm.collections.search":"\u641C\u7D22\u96C6\u5408\u2026\u2026","chatConfig.midForm.collections.empty":"\u6682\u65E0\u53EF\u7528\u96C6\u5408","chatConfig.midForm.topology.title":"\u4F9D\u8D56\u5173\u7CFB","chatConfig.midForm.topology.edges":"{{count}} \u6761\u8FB9","chatConfig.midForm.topology.empty":"\u5C1A\u672A\u5B9A\u4E49\u4F9D\u8D56\u5173\u7CFB","chatConfig.midForm.topology.addTitle":"\u6DFB\u52A0\u4F9D\u8D56","chatConfig.midForm.topology.fromPlaceholder":"\u6E90\u667A\u80FD\u4F53 ID","chatConfig.midForm.topology.toPlaceholder":"\u76EE\u6807\u667A\u80FD\u4F53 ID","chatConfig.midForm.topology.purposePlaceholder":"\u7528\u9014\uFF08\u4F8B\u5982\uFF1A\u5F52\u7C7B\u53D1\u7968\u5B57\u6BB5\uFF09","chatConfig.midForm.topology.addEdge":"\u6DFB\u52A0\u8FB9","chatConfig.midForm.connections.title":"\u8FDE\u63A5","chatConfig.midForm.section.config":"\u914D\u7F6E","chatConfig.midForm.section.resources":"\u8D44\u6E90\u6388\u6743","chatConfig.midForm.section.tools":"\u5DE5\u5177\u6388\u6743","chatConfig.midForm.enabled":"\u5DF2\u542F\u7528","chatConfig.midForm.disabled":"\u5DF2\u7981\u7528","chatConfig.midForm.scope.global":"\u5168\u5C40","chatConfig.midForm.scope.agent":"\u667A\u80FD\u4F53","chatConfig.midForm.scope.project":"\u9879\u76EE","chatConfig.agentModal.title":"\u914D\u7F6E\u667A\u80FD\u4F53","chatConfig.agentModal.tab.basic":"\u57FA\u672C","chatConfig.agentModal.tab.tools":"\u5DE5\u5177","chatConfig.agentModal.tab.skills":"\u6280\u80FD","chatConfig.agentModal.tab.subAgents":"\u5B50\u667A\u80FD\u4F53","chatConfig.agentModal.field.agentType":"\u667A\u80FD\u4F53\u7C7B\u578B","chatConfig.agentModal.field.systemPrompt":"\u7CFB\u7EDF\u63D0\u793A\u8BCD","chatConfig.agentModal.systemPromptPlaceholder":"\u8F93\u5165\u8BE5\u667A\u80FD\u4F53\u7684\u7CFB\u7EDF\u63D0\u793A\u8BCD\u2026\u2026","chatConfig.agentModal.systemPromptHint":"\u5B9A\u4E49\u667A\u80FD\u4F53\u7684\u884C\u4E3A\u3001\u80FD\u529B\u548C\u7EA6\u675F","chatConfig.agentModal.selectedOfTotal":"\u5DF2\u9009 {{selected}} / {{total}}","chatConfig.agentModal.selectAll":"\u5168\u9009","chatConfig.agentModal.deselectAll":"\u53D6\u6D88\u5168\u9009","chatConfig.agentModal.noTools":"\u6682\u65E0\u53EF\u7528\u5DE5\u5177","chatConfig.agentModal.noSkills":"\u6682\u65E0\u53EF\u7528\u6280\u80FD","chatConfig.agentModal.noOtherAgents":"\u6682\u65E0\u5176\u4ED6\u667A\u80FD\u4F53","chatConfig.agentModal.approve":"\u5BA1\u6279","chatConfig.agentModal.noDescription":"\u6682\u65E0\u63CF\u8FF0","chatConfig.agentModal.hierarchy":"\u667A\u80FD\u4F53\u5C42\u7EA7","chatConfig.agentModal.currentAgent":"\u5F53\u524D\u667A\u80FD\u4F53","chatConfig.agentModal.currentTag":"\u5F53\u524D","chatConfig.agentModal.type.react":"React","chatConfig.agentModal.type.deepAgent":"Deep Agent","chatConfig.agentModal.type.workflow":"\u5DE5\u4F5C\u6D41","chatConfig.agentModal.toolsCount":"{{count}} \u4E2A\u5DE5\u5177","chatConfig.agentModal.skillsCount":"{{count}} \u4E2A\u6280\u80FD","chatConfig.agentModal.subAgentsCount":"{{count}} \u4E2A\u5B50\u667A\u80FD\u4F53","chatConfig.agentModal.structureTree":"\u7ED3\u6784\u6811","chatConfig.agentModal.tip":"\u63D0\u793A","chatConfig.agentModal.tipBody":"Deep Agent \u7C7B\u578B\u5141\u8BB8\u4F60\u628A\u4EFB\u52A1\u59D4\u6D3E\u7ED9\u5B50\u667A\u80FD\u4F53\u3002\u5728\u300C\u5B50\u667A\u80FD\u4F53\u300D\u6807\u7B7E\u9875\u4E2D\u9009\u62E9\u667A\u80FD\u4F53\u6765\u6784\u5EFA\u5C42\u7EA7\u3002","chatConfig.agentModal.changesHint":"\u4FEE\u6539\u5C06\u66F4\u65B0\u667A\u80FD\u4F53\u914D\u7F6E","chatConfig.agentModal.saveConfiguration":"\u4FDD\u5B58\u914D\u7F6E","chatConfig.agentPanel.category.data":"\u6570\u636E\u4E0E\u77E5\u8BC6","chatConfig.agentPanel.category.execution":"\u6267\u884C\u4E0E\u4EA4\u4E92","chatConfig.agentPanel.category.workflow":"\u5DE5\u4F5C\u6D41\u4E0E\u7F16\u6392","chatConfig.agentPanel.category.assistant":"\u52A9\u624B\u4E0E\u8BC4\u6D4B","chatConfig.agentPanel.category.other":"\u5176\u4ED6","chatConfig.agentPanel.nav.basic":"\u57FA\u672C\u4FE1\u606F","chatConfig.agentPanel.nav.prompt":"\u7CFB\u7EDF\u63D0\u793A\u8BCD","chatConfig.agentPanel.nav.tools":"\u5E38\u7528\u5DE5\u5177","chatConfig.agentPanel.nav.capabilities":"\u80FD\u529B","chatConfig.agentPanel.nav.subAgents":"\u5B50\u667A\u80FD\u4F53","chatConfig.agentPanel.navAriaLabel":"\u667A\u80FD\u4F53\u914D\u7F6E\u5206\u533A","chatConfig.agentPanel.basic.title":"\u57FA\u672C\u4FE1\u606F","chatConfig.agentPanel.basic.desc":"\u8BE5\u667A\u80FD\u4F53\u7684\u6838\u5FC3\u8EAB\u4EFD\u4E0E\u884C\u4E3A","chatConfig.agentPanel.field.name":"\u540D\u79F0","chatConfig.agentPanel.field.agentType":"\u667A\u80FD\u4F53\u7C7B\u578B","chatConfig.agentPanel.field.description":"\u63CF\u8FF0","chatConfig.agentPanel.validation.nameRequired":"\u8BF7\u8F93\u5165\u667A\u80FD\u4F53\u540D\u79F0","chatConfig.agentPanel.validation.descriptionRequired":"\u8BF7\u8F93\u5165\u667A\u80FD\u4F53\u63CF\u8FF0","chatConfig.agentPanel.placeholder.name":"\u8F93\u5165\u667A\u80FD\u4F53\u540D\u79F0\u2026\u2026","chatConfig.agentPanel.placeholder.description":"\u8F93\u5165\u667A\u80FD\u4F53\u63CF\u8FF0\u2026\u2026","chatConfig.agentPanel.typeDesc.react":"\u6267\u884C\u5668\uFF1A\u76F4\u63A5\u4F7F\u7528\u5DE5\u5177\u6267\u884C\u4EFB\u52A1\u3002\u9002\u7528\u4E8E\u641C\u7D22\u3001\u4EE3\u7801\u6267\u884C\u3001\u6570\u636E\u68C0\u7D22\u7B49\u5355\u6B65\u64CD\u4F5C\u3002","chatConfig.agentPanel.typeDesc.deepAgent":"\u7F16\u6392\u5668\uFF1A\u7EF4\u62A4\u4E00\u4EFD\u5F85\u529E\u6E05\u5355\u6765\u89C4\u5212\u5E76\u628A\u4EFB\u52A1\u5206\u6D3E\u7ED9\u5B50\u667A\u80FD\u4F53\u3002\u9002\u7528\u4E8E\u7ED3\u6784\u5316\u7684\u591A\u6B65\u5DE5\u4F5C\u6D41\u3002","chatConfig.agentPanel.typeDesc.processing":"\u5DE5\u4F5C\u6D41\uFF1A\u6309\u9884\u5B9A\u4E49\u7684\u62D3\u6251\u987A\u5E8F\u59D4\u6D3E\u7ED9\u5B50\u667A\u80FD\u4F53\u3002\u9002\u7528\u4E8E\u786E\u5B9A\u6027\u7684\u591A\u6B65\u6D41\u7A0B\u3002","chatConfig.agentPanel.prompt.title":"\u7CFB\u7EDF\u63D0\u793A\u8BCD","chatConfig.agentPanel.prompt.desc":"\u5B9A\u4E49\u667A\u80FD\u4F53\u7684\u884C\u4E3A\u3001\u80FD\u529B\u548C\u7EA6\u675F","chatConfig.agentPanel.prompt.expand":"\u5C55\u5F00","chatConfig.agentPanel.prompt.placeholder":"\u8F93\u5165\u8BE5\u667A\u80FD\u4F53\u7684\u7CFB\u7EDF\u63D0\u793A\u8BCD\u2026\u2026","chatConfig.agentPanel.prompt.chars":"{{count}} \u4E2A\u5B57\u7B26","chatConfig.agentPanel.tools.title":"\u5E38\u7528\u5DE5\u5177","chatConfig.agentPanel.tools.desc":"\u9009\u62E9\u8BE5\u667A\u80FD\u4F53\u53EF\u4EE5\u76F4\u63A5\u8C03\u7528\u7684\u5DE5\u5177","chatConfig.agentPanel.tools.search":"\u641C\u7D22\u5DE5\u5177\u2026\u2026","chatConfig.agentPanel.tools.selected":"\u5DF2\u9009 {{selected}} / {{total}}","chatConfig.agentPanel.subAgents.title":"\u5B50\u667A\u80FD\u4F53","chatConfig.agentPanel.subAgents.desc":"\u9009\u62E9\u8BE5\u667A\u80FD\u4F53\u53EF\u4EE5\u59D4\u6D3E\u7684\u5B50\u667A\u80FD\u4F53","chatConfig.agentPanel.subAgents.search":"\u641C\u7D22\u5B50\u667A\u80FD\u4F53\u2026\u2026","chatConfig.agentPanel.subAgents.selected":"\u5DF2\u9009 {{selected}} / {{total}}","chatConfig.agentPanel.noTools":"\u6682\u65E0\u53EF\u7528\u5DE5\u5177","chatConfig.agentPanel.noCapabilities":"\u6682\u65E0\u53EF\u7528\u80FD\u529B","chatConfig.agentPanel.noOtherAgents":"\u6682\u65E0\u5176\u4ED6\u667A\u80FD\u4F53","chatConfig.agentPanel.noMatching":"\u6CA1\u6709\u5339\u914D\u7ED3\u679C","chatConfig.agentPanel.selectAll":"\u5168\u9009","chatConfig.agentPanel.clear":"\u6E05\u7A7A","chatConfig.agentPanel.approve":"\u5BA1\u6279","chatConfig.agentPanel.noDescription":"\u6682\u65E0\u63CF\u8FF0","chatConfig.agentPanel.configWorkbench":"\u914D\u7F6E\u5DE5\u4F5C\u53F0","chatConfig.agentPanel.deleteAgent":"\u5220\u9664\u667A\u80FD\u4F53","chatConfig.agentPanel.loadingConfig":"\u6B63\u5728\u52A0\u8F7D\u667A\u80FD\u4F53\u914D\u7F6E\u2026\u2026","chatConfig.agentPanel.footer.saveHint":"\u4FEE\u6539\u4F1A\u4FDD\u5B58\u5230\u8BE5\u667A\u80FD\u4F53","chatConfig.agentPanel.footer.viewing":"\u6B63\u5728\u67E5\u770B\u667A\u80FD\u4F53\u914D\u7F6E","chatConfig.agentPanel.done":"\u5B8C\u6210","chatConfig.agentPanel.delete.title":"\u5220\u9664\u667A\u80FD\u4F53","chatConfig.agentPanel.delete.confirmPrefix":"\u786E\u5B9A\u8981\u5220\u9664","chatConfig.agentPanel.delete.confirmSuffix":"\u5417\uFF1F\u6B64\u64CD\u4F5C\u65E0\u6CD5\u64A4\u9500\u3002","chatConfig.agentPanel.deleteFailed":"\u5220\u9664\u667A\u80FD\u4F53\u5931\u8D25","chatConfig.createAssistant.title":"\u65B0\u5EFA\u667A\u80FD\u4F53","chatConfig.createAssistant.createExtend":"\u521B\u5EFA\uFF08\u6269\u5C55\uFF09","chatConfig.createAssistant.startLearning":"\u5F00\u59CB\u5B66\u4E60","chatConfig.createAssistant.parentAgent":"\u7236\u667A\u80FD\u4F53","chatConfig.createAssistant.inheritHint":"\u672A\u4FEE\u6539\u7684\u5B57\u6BB5\u5C06\u7EE7\u627F\u81EA\u7236\u667A\u80FD\u4F53\u3002","chatConfig.createAssistant.learnHint":"\u63CF\u8FF0\u8BE5\u667A\u80FD\u4F53\u5E94\u8BE5\u505A\u4EC0\u4E48\u3002","chatConfig.createAssistant.learnGoalPlaceholder":"\u4F8B\u5982\uFF1A\u4F9D\u636E\u4EF7\u683C\u4FDD\u62A4\u653F\u7B56\u5904\u7406\u4EF7\u683C\u7EA0\u7EB7","chatConfig.createAssistant.referenceFiles":"\u53C2\u8003\u6587\u4EF6","chatConfig.createAssistant.referenceFilesHint":"\u53EF\u9009 \u2014\u2014 \u4F1A\u4E0A\u4F20\u5230\u5171\u4EAB\u8BAD\u7EC3\u5DE5\u4F5C\u533A\u5E76\u9644\u52A0\u5230\u672C\u8F6E\u5B66\u4E60\uFF1B\u67B6\u6784\u5E08\u4F1A\u5C06\u5176\u4F5C\u4E3A\u672C\u8F6E\u6750\u6599\u8BFB\u53D6\u3002","chatConfig.createAssistant.field.key":"Key\uFF08ID\uFF09","chatConfig.createAssistant.keyPlaceholder":"\u4F8B\u5982\uFF1Amy_agent","chatConfig.createAssistant.field.name":"\u540D\u79F0","chatConfig.createAssistant.namePlaceholder":"\u4F8B\u5982\uFF1A\u6211\u7684\u667A\u80FD\u4F53","chatConfig.createAssistant.field.description":"\u63CF\u8FF0","chatConfig.createAssistant.field.agentType":"\u667A\u80FD\u4F53\u7C7B\u578B","chatConfig.createAssistant.field.connectionMode":"\u8FDE\u63A5\u65B9\u5F0F","chatConfig.createAssistant.mode.remoteUrl":"\u8FDC\u7A0B URL","chatConfig.createAssistant.mode.localManaged":"\u672C\u5730\u6258\u7BA1","chatConfig.createAssistant.field.template":"\u6A21\u677F","chatConfig.createAssistant.templatePlaceholder":"\u9009\u62E9\u4E00\u4E2A\u6A21\u677F\u2026\u2026","chatConfig.createAssistant.noTemplates":"\u6682\u65E0\u6A21\u677F\u3002\u8BF7\u4F7F\u7528\u4E0B\u65B9\u7684\u300C\u81EA\u5B9A\u4E49\u547D\u4EE4\u300D\u3002","chatConfig.createAssistant.customCommand":"+ \u81EA\u5B9A\u4E49\u547D\u4EE4","chatConfig.createAssistant.hideCustomCommand":"- \u9690\u85CF\u81EA\u5B9A\u4E49\u547D\u4EE4","chatConfig.createAssistant.field.executable":"\u53EF\u6267\u884C\u6587\u4EF6","chatConfig.createAssistant.executablePlaceholder":"\u4F8B\u5982\uFF1Anode\u3001opencode\u3001/usr/local/bin/my-server","chatConfig.createAssistant.field.arguments":"\u53C2\u6570","chatConfig.createAssistant.argumentsPlaceholder":"\u4F8B\u5982\uFF1A--serve --port 4301","chatConfig.createAssistant.field.workingDirectory":"\u5DE5\u4F5C\u76EE\u5F55","chatConfig.createAssistant.workingDirectoryPlaceholder":"\u4F8B\u5982\uFF1A/Users/me/project","chatConfig.createAssistant.field.agentCardUrl":"Agent Card URL","chatConfig.createAssistant.field.apiKeyOptional":"API Key\uFF08\u53EF\u9009\uFF09","chatConfig.createAssistant.apiKeyPlaceholder":"\u7528\u4E8E\u8BA4\u8BC1\u7684 API key","chatConfig.createAssistant.field.timeout":"\u8D85\u65F6\u65F6\u95F4\uFF08ms\uFF09","chatConfig.createAssistant.field.systemPrompt":"\u7CFB\u7EDF\u63D0\u793A\u8BCD","chatConfig.createAssistant.field.systemPromptInherit":"\u7CFB\u7EDF\u63D0\u793A\u8BCD\uFF08\u4FDD\u6301\u4E0D\u53D8\u5219\u7EE7\u627F\u81EA\u7236\u667A\u80FD\u4F53\uFF09","chatConfig.createAssistant.systemPromptInheritPlaceholder":"\u7559\u7A7A\u5219\u7EE7\u627F\u7236\u667A\u80FD\u4F53\u7684\u63D0\u793A\u8BCD\uFF0C\u6216\u8F93\u5165\u65B0\u63D0\u793A\u8BCD\u4EE5\u8986\u76D6\u2026\u2026","chatConfig.createAssistant.systemPromptPlaceholder":"\u8F93\u5165\u8BE5\u667A\u80FD\u4F53\u7684\u7CFB\u7EDF\u63D0\u793A\u8BCD\u2026\u2026","chatConfig.createAssistant.subAgents":"\u5B50\u667A\u80FD\u4F53","chatConfig.createAssistant.descriptionPlaceholder":"\u8F93\u5165\u8BE5\u667A\u80FD\u4F53\u7684\u63CF\u8FF0\u2026\u2026","chatConfig.createAssistant.typeDesc.react":"\u6267\u884C\u5668\uFF1A\u76F4\u63A5\u4F7F\u7528\u5DE5\u5177\u6267\u884C\u4EFB\u52A1\u3002\u9002\u7528\u4E8E\u641C\u7D22\u3001\u4EE3\u7801\u6267\u884C\u3001\u6570\u636E\u68C0\u7D22\u7B49\u5355\u6B65\u64CD\u4F5C\u3002","chatConfig.createAssistant.typeDesc.deepAgent":"\u7F16\u6392\u5668\uFF1A\u7EF4\u62A4\u4E00\u4EFD\u987A\u5E8F\u5F85\u529E\u6E05\u5355\u6765\u89C4\u5212\u5E76\u628A\u5F85\u529E\u9879\u5206\u6D3E\u7ED9\u5B50\u667A\u80FD\u4F53\u3002\u9002\u7528\u4E8E\u7ED3\u6784\u5316\u7684\u591A\u6B65\u5DE5\u4F5C\u6D41\u3002","chatConfig.createAssistant.typeDesc.processing":"\u5DE5\u4F5C\u6D41\uFF1A\u6309\u9884\u5B9A\u4E49\u987A\u5E8F\u59D4\u6D3E\u7ED9\u5B50\u667A\u80FD\u4F53\uFF0C\u4ECE\u800C\u5F3A\u5236\u56FA\u5B9A\u7684\u5DE5\u4F5C\u6D41\u62D3\u6251\u3002\u9002\u7528\u4E8E\u6709\u6821\u9A8C\u59D4\u6D3E\u8DEF\u5F84\u7684\u786E\u5B9A\u6027\u591A\u6B65\u6D41\u7A0B\u3002","chatConfig.createAssistant.typeDesc.a2aRemote":"A2A \u8FDC\u7A0B\uFF1A\u59D4\u6D3E\u7ED9\u5916\u90E8\u7684 A2A \u517C\u5BB9\u667A\u80FD\u4F53\u670D\u52A1\u5668\u3002\u9002\u7528\u4E8E\u672C\u5730 CLI \u5DE5\u5177\uFF08Claude Code\u3001Codex\u3001OpenCode\uFF09\u6216\u8FDC\u7A0B\u667A\u80FD\u4F53\u3002","chatConfig.createAssistant.validation.keyRequired":"\u8BF7\u8F93\u5165\u552F\u4E00\u7684 key","chatConfig.createAssistant.validation.keyPattern":"Key \u5FC5\u987B\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4E14\u53EA\u80FD\u5305\u542B\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\u6216\u8FDE\u5B57\u7B26","chatConfig.createAssistant.validation.nameRequired":"\u8BF7\u8F93\u5165\u540D\u79F0","chatConfig.createAssistant.validation.descriptionRequired":"\u8BF7\u8F93\u5165\u63CF\u8FF0","chatConfig.createAssistant.validation.systemPromptRequired":"\u8BF7\u8F93\u5165\u7CFB\u7EDF\u63D0\u793A\u8BCD","chatConfig.createAssistant.validation.urlRequired":"\u8BF7\u8F93\u5165 A2A \u670D\u52A1\u5668 URL","chatConfig.createAssistant.validation.executableRequired":"\u53EF\u6267\u884C\u6587\u4EF6\u4E3A\u5FC5\u586B\u9879","chatConfig.createAssistant.a2aUrlWarning":"\u8BF7\u5148\u8F93\u5165 A2A \u670D\u52A1\u5668 URL","chatConfig.createAssistant.connectedTo":"\u5DF2\u8FDE\u63A5\u5230\u300C{{name}}\u300D","chatConfig.createAssistant.connectionFailed":"\u8FDE\u63A5\u5931\u8D25","chatConfig.createAssistant.connectionTestFailed":"\u8FDE\u63A5\u6D4B\u8BD5\u5931\u8D25","chatConfig.createAssistant.trainingGoalRequired":"\u8BF7\u63CF\u8FF0\u8BAD\u7EC3\u76EE\u6807","chatConfig.createAssistant.noTrainingProject":"\u6682\u65E0\u5171\u4EAB\u8BAD\u7EC3\u9879\u76EE","chatConfig.createAssistant.agentCreated":"\u667A\u80FD\u4F53\u5DF2\u521B\u5EFA \u2014\u2014 \u67B6\u6784\u5E08\u5F00\u59CB\u6784\u5EFA","chatConfig.createAssistant.createdByExtending":"\u5DF2\u901A\u8FC7\u6269\u5C55\u300C{{name}}\u300D\u521B\u5EFA\u667A\u80FD\u4F53","chatConfig.createAssistant.created":"\u667A\u80FD\u4F53\u521B\u5EFA\u6210\u529F","chatConfig.createAssistant.createFailed":"\u521B\u5EFA\u667A\u80FD\u4F53\u5931\u8D25","chatConfig.createAssistant.createError":"\u521B\u5EFA\u667A\u80FD\u4F53\u65F6\u53D1\u751F\u9519\u8BEF","chatConfig.createAssistant.requiredFields":"\u8BF7\u586B\u5199\u5FC5\u586B\u5B57\u6BB5\uFF1A{{fields}}","chatConfig.createAssistant.requiredFieldsGeneric":"\u8BF7\u586B\u5199\u5FC5\u586B\u5B57\u6BB5","chatConfig.createAssistant.noParentAgent":"\u672A\u9009\u62E9\u7236\u667A\u80FD\u4F53","chatConfig.createAssistant.agentCreateFailed":"\u521B\u5EFA\u667A\u80FD\u4F53\u5931\u8D25","chatConfig.createAssistant.cloneFetchFailed":"\u83B7\u53D6\u7528\u4E8E\u514B\u9686\u7684\u5B50\u667A\u80FD\u4F53\u300C{{key}}\u300D\u5931\u8D25","chatConfig.createAssistant.cloneFailed":"\u514B\u9686\u5B50\u667A\u80FD\u4F53\u300C{{key}}\u300D\u5931\u8D25","chatConfig.createAssistant.cloneKeyRequired":"\u8BF7\u4E3A\u514B\u9686\u7684\u5B50\u667A\u80FD\u4F53\u300C{{key}}\u300D\u63D0\u4F9B\u4E00\u4E2A key","chatConfig.createAssistant.cloneKeyInvalid":"\u514B\u9686\u7684\u5B50\u667A\u80FD\u4F53\u300C{{originalKey}}\u300D\u7684 key\u300C{{key}}\u300D\u65E0\u6548\u3002Key \u5FC5\u987B\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4E14\u53EA\u80FD\u5305\u542B\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u4E0B\u5212\u7EBF\u6216\u8FDE\u5B57\u7B26\u3002","chatConfig.parentAgent.selectPlaceholder":"\u9009\u62E9\u8981\u6269\u5C55\u7684\u7236\u667A\u80FD\u4F53...","chatConfig.settings.defaultConnectionName":"\u9ED8\u8BA4","chatConfig.settings.serverNamePlaceholder":"\u4F8B\u5982\uFF1A\u751F\u4EA7\u670D\u52A1\u5668","chatConfig.settings.title":"\u8BBE\u7F6E","chatConfig.settings.menu.environment":"\u73AF\u5883\u53D8\u91CF","chatConfig.settings.menu.models":"\u6A21\u578B\u914D\u7F6E","chatConfig.settings.menu.environment.desc":"\u7BA1\u7406\u7F51\u5173\u670D\u52A1\u5668\u7684\u73AF\u5883\u53D8\u91CF","chatConfig.settings.menu.models.desc":"\u914D\u7F6E\u7F51\u5173\u7EA7\u9ED8\u8BA4\u6A21\u578B\u6CE8\u518C\u8868","chatConfig.settings.saveConfiguration":"\u4FDD\u5B58\u914D\u7F6E","chatConfig.settings.addServer":"\u6DFB\u52A0\u670D\u52A1\u5668","chatConfig.settings.addNewServer":"\u6DFB\u52A0\u65B0\u670D\u52A1\u5668","chatConfig.settings.serverName":"\u670D\u52A1\u5668\u540D\u79F0","chatConfig.settings.serverNameHint":"\u53EF\u9009\uFF1A\u7559\u7A7A\u5219\u4F7F\u7528 URL \u4F5C\u4E3A\u540D\u79F0","chatConfig.settings.serverUrl":"\u670D\u52A1\u5668 URL *","chatConfig.settings.serverUrlHint":"\u8F93\u5165\u7F51\u5173\u670D\u52A1\u5668\u7684\u5B8C\u6574 URL","chatConfig.settings.apiKey":"API Key","chatConfig.settings.apiKeyPlaceholder":"\u53EF\u9009\uFF1A\u8F93\u5165\u7528\u4E8E\u8BA4\u8BC1\u7684 API Key","chatConfig.settings.apiKeyHint":"\u53EF\u9009\uFF1A\u7528\u4E8E\u670D\u52A1\u5668\u8BA4\u8BC1\u7684 API Key","chatConfig.settings.pleaseEnterServerUrl":"\u8BF7\u8F93\u5165\u670D\u52A1\u5668 URL","chatConfig.settings.serverAdded":"\u670D\u52A1\u5668\u6DFB\u52A0\u6210\u529F","chatConfig.settings.serverDeleted":"\u670D\u52A1\u5668\u5DF2\u5220\u9664","chatConfig.settings.connectFirst":"\u8BF7\u5148\u8FDE\u63A5\u4E00\u4E2A\u670D\u52A1\u5668","chatConfig.settings.loadConfigFailed":"\u52A0\u8F7D\u5F53\u524D\u914D\u7F6E\u5931\u8D25","chatConfig.settings.saveFailed":"\u4FDD\u5B58\u914D\u7F6E\u5931\u8D25","chatConfig.settings.restartWarning":"\u914D\u7F6E\u5DF2\u4FDD\u5B58\u3002\u8BF7\u91CD\u542F\u670D\u52A1\u5668\u4F7F {{services}} \u751F\u6548\u3002","chatConfig.settings.savedApplied":"\u914D\u7F6E\u5DF2\u4FDD\u5B58\u5E76\u751F\u6548","chatConfig.settings.modelSaved":"\u6A21\u578B\u914D\u7F6E\u5DF2\u4FDD\u5B58\u5E76\u6CE8\u518C\u6210\u529F","chatConfig.settings.modelSaveFailed":"\u4FDD\u5B58\u6A21\u578B\u914D\u7F6E\u5931\u8D25","chatConfig.settings.alert.title":"\u914D\u7F6E\u751F\u6548\u65B9\u5F0F","chatConfig.settings.alert.immediate":"\u7ACB\u5373\u751F\u6548\uFF1A","chatConfig.settings.alert.restart":"\u9700\u8981\u91CD\u542F\uFF1A","chatConfig.settings.alert.restartDetail":"PORT\uFF08\u4FEE\u6539\u7AEF\u53E3\u5FC5\u987B\u91CD\u542F\u670D\u52A1\u5668\uFF09","chatConfig.settings.envHint":"\u4EE5 .env \u683C\u5F0F\uFF08key=value\uFF09\u914D\u7F6E\u73AF\u5883\u53D8\u91CF\uFF0C\u6BCF\u884C\u4E00\u4E2A\u53D8\u91CF\u3002\u5BC6\u7801\u5B57\u6BB5\u7559\u7A7A\u5219\u4FDD\u6301\u5F53\u524D\u503C\u3002","chatConfig.settings.modelsHint":"\u914D\u7F6E\u6A21\u578B\u6CE8\u518C\u8868\u3002\u6BCF\u4E2A\u6A21\u578B\u5C06\u4F7F\u7528\u63D0\u4F9B\u7684 key \u6CE8\u518C\uFF0C\u53EF\u4F9B\u667A\u80FD\u4F53\u4F7F\u7528\u3002","chatConfig.settings.model":"\u6A21\u578B {{index}}","chatConfig.settings.remove":"\u79FB\u9664","chatConfig.settings.field.key":"Key *","chatConfig.settings.field.keyHint":"\u8BE5\u6A21\u578B\u7684\u552F\u4E00\u6807\u8BC6\u7B26","chatConfig.settings.field.provider":"\u63D0\u4F9B\u5546 *","chatConfig.settings.field.modelName":"\u6A21\u578B\u540D\u79F0 *","chatConfig.settings.field.apiKeyHintStored":"\u670D\u52A1\u5668\u4E0A\u5DF2\u5B58\u50A8\u4E00\u4E2A key\uFF0C\u4E14\u4E0D\u4F1A\u56DE\u4F20\u3002\u7559\u7A7A\u5219\u4FDD\u7559\uFF0C\u6216\u8F93\u5165\u65B0 key \u66FF\u6362\u5B83\u3002","chatConfig.settings.field.apiKeyHintNew":"\u6A21\u578B\u63D0\u4F9B\u5546\u7684 API Key\u3002\u7559\u7A7A\u5219\u4F7F\u7528\u73AF\u5883\u53D8\u91CF\u3002","chatConfig.settings.apiKeyPlaceholderConfigured":"\u5DF2\u914D\u7F6E \u2014\u2014 \u7559\u7A7A\u5219\u4FDD\u6301\u4E0D\u53D8","chatConfig.settings.apiKeyPlaceholderNew":"\u8F93\u5165\u4F60\u7684 API Key","chatConfig.settings.field.baseUrl":"Base URL","chatConfig.settings.field.baseUrlHint":"\u53EF\u9009\uFF1AAPI \u7684\u81EA\u5B9A\u4E49 Base URL","chatConfig.settings.field.streaming":"\u542F\u7528\u6D41\u5F0F\u8F93\u51FA","chatConfig.settings.field.maxTokens":"\u6700\u5927 Token \u6570","chatConfig.settings.field.temperature":"\u6E29\u5EA6","chatConfig.settings.addModel":"+ \u6DFB\u52A0\u6A21\u578B","chatConfig.settings.connecting":"\u8FDE\u63A5\u4E2D\u2026\u2026","chatConfig.settings.connectingTo":"\u6B63\u5728\u8FDE\u63A5\u5230 {{url}}","chatConfig.settings.notConnected":"\u672A\u8FDE\u63A5","chatConfig.settings.connectFailedDetail":"\u8FDE\u63A5 {{url}} \u5931\u8D25\u3002\u8BF7\u68C0\u67E5\u670D\u52A1\u5668 URL \u540E\u91CD\u8BD5\u3002","chatConfig.settings.clickReconnect":"\u70B9\u51FB\u300C\u91CD\u65B0\u8FDE\u63A5\u300D\u4EE5\u8FDE\u63A5\u5230 {{url}}","chatConfig.settings.reconnect":"\u91CD\u65B0\u8FDE\u63A5","chatConfig.settings.error.serverError":"\u670D\u52A1\u5668\u8FD4\u56DE\u9519\u8BEF","chatConfig.settings.error.timeout":"\u8FDE\u63A5\u8D85\u65F6","chatConfig.settings.error.connectFailed":"\u8FDE\u63A5\u670D\u52A1\u5668\u5931\u8D25","chatConfig.paChannel.title":"\u8FDE\u63A5\u6E20\u9053","chatConfig.paChannel.channels":"\u6E20\u9053","chatConfig.paChannel.noChannels":"\u6682\u65E0\u6E20\u9053","chatConfig.paChannel.connect":"\u8FDE\u63A5","chatConfig.paChannel.selectHint":"\u4ECE\u5DE6\u4FA7\u9009\u62E9\u4E00\u4E2A\u6E20\u9053\uFF0C\u6216\u6DFB\u52A0\u65B0\u6E20\u9053","chatConfig.paChannel.chooseType":"\u9009\u62E9\u6E20\u9053\u7C7B\u578B","chatConfig.paChannel.editChannel":"\u7F16\u8F91\u6E20\u9053","chatConfig.paChannel.newChannel":"\u65B0\u5EFA{{channel}}","chatConfig.paChannel.channel.lark":"\u98DE\u4E66","chatConfig.paChannel.channel.wechat":"\u5FAE\u4FE1","chatConfig.paChannel.channel.wecom":"\u4F01\u4E1A\u5FAE\u4FE1","chatConfig.paChannel.wechatBot":"\u5FAE\u4FE1\u673A\u5668\u4EBA","chatConfig.paChannel.feishuBot":"\u98DE\u4E66\u673A\u5668\u4EBA","chatConfig.paChannel.wecomBot":"\u4F01\u4E1A\u5FAE\u4FE1\u673A\u5668\u4EBA","chatConfig.paChannel.field.botId":"\u673A\u5668\u4EBA Bot ID","chatConfig.paChannel.field.secret":"\u957F\u8FDE\u63A5 Secret","chatConfig.paChannel.placeholder.botId":"\u4F01\u4E1A\u5FAE\u4FE1\u540E\u53F0\u83B7\u53D6\u7684 Bot ID","chatConfig.paChannel.placeholder.secret":"\u4F01\u4E1A\u5FAE\u4FE1\u540E\u53F0\u83B7\u53D6\u7684\u957F\u8FDE\u63A5 Secret","chatConfig.paChannel.wecomConnectHint":"\u4F7F\u7528\u300C\u667A\u80FD\u673A\u5668\u4EBA\u300D\u7684\u957F\u8FDE\u63A5\uFF08API\uFF09\u6A21\u5F0F\uFF0C\u65E0\u9700\u516C\u7F51\u56DE\u8C03\u5730\u5740\uFF1B\u5F00\u542F\u540E\u7531\u7F51\u5173\u7EF4\u62A4\u957F\u8FDE\u63A5\u3002","chatConfig.paChannel.validation.botIdRequired":"Bot ID \u4E3A\u5FC5\u586B\u9879","chatConfig.paChannel.validation.secretRequired":"Secret \u4E3A\u5FC5\u586B\u9879","chatConfig.paChannel.field.channelType":"\u6E20\u9053\u7C7B\u578B","chatConfig.paChannel.field.displayName":"\u663E\u793A\u540D\u79F0","chatConfig.paChannel.field.appId":"App ID","chatConfig.paChannel.field.appSecret":"App Secret","chatConfig.paChannel.field.verificationToken":"Verification Token","chatConfig.paChannel.field.encryptKey":"Encrypt Key","chatConfig.paChannel.field.botToken":"Bot Token","chatConfig.paChannel.field.uin":"UIN","chatConfig.paChannel.enabled":"\u5DF2\u542F\u7528","chatConfig.paChannel.listenerActive":"\u76D1\u542C\u670D\u52A1\u8FD0\u884C\u4E2D","chatConfig.paChannel.listenerStopped":"\u76D1\u542C\u670D\u52A1\u5DF2\u505C\u6B62","chatConfig.paChannel.anyoneCanMessage":"\u4EFB\u4F55\u4EBA\u90FD\u53EF\u4EE5\u53D1\u6D88\u606F","chatConfig.paChannel.anyoneCanMessageHint":"\u542F\u7528\u540E\uFF0C\u4EFB\u4F55\u80FD\u8BBF\u95EE\u8BE5\u6E20\u9053\u7684\u4EBA\u90FD\u53EF\u4EE5\u4E0E\u4F60\u7684\u52A9\u624B\u5BF9\u8BDD","chatConfig.paChannel.whoCanChat":"\u8C01\u53EF\u4EE5\u5BF9\u8BDD","chatConfig.paChannel.whoCanChatHint":"\u53EA\u6709\u4F60\u5728\u8FD9\u91CC\u6DFB\u52A0\u7684\u4EBA\u624D\u80FD\u7ED9\u4F60\u7684\u52A9\u624B\u53D1\u6D88\u606F","chatConfig.paChannel.noContacts":"\u5C1A\u672A\u6DFB\u52A0\u8054\u7CFB\u4EBA","chatConfig.paChannel.addContact":"\u6DFB\u52A0\u8054\u7CFB\u4EBA","chatConfig.paChannel.add":"\u6DFB\u52A0","chatConfig.paChannel.required":"\u5FC5\u586B","chatConfig.paChannel.placeholder.wechatOpenId":"\u5FAE\u4FE1 Open ID","chatConfig.paChannel.placeholder.feishuOpenId":"\u98DE\u4E66 Open ID","chatConfig.paChannel.placeholder.wecomUserId":"\u4F01\u4E1A\u5FAE\u4FE1 UserID","chatConfig.paChannel.placeholder.displayName":"\u663E\u793A\u540D\u79F0\uFF08\u53EF\u9009\uFF09","chatConfig.paChannel.placeholder.appSecret":"\u4F60\u7684 app secret","chatConfig.paChannel.placeholder.optional":"\u53EF\u9009","chatConfig.paChannel.placeholder.botToken":"\u626B\u7801\u540E\u81EA\u52A8\u586B\u5145","chatConfig.paChannel.placeholder.uin":"\u626B\u7801\u767B\u5F55\u540E\u81EA\u52A8\u586B\u5145","chatConfig.paChannel.addBindingHint":"\u4FDD\u5B58\u540E\u56DE\u5230\u8FD9\u91CC\u6DFB\u52A0\u4F60\u60F3\u5BF9\u8BDD\u7684\u4EBA\u3002","chatConfig.paChannel.removeChannel":"\u79FB\u9664\u8BE5\u6E20\u9053\uFF1F","chatConfig.paChannel.removeChannelDesc":"\u8BE5\u63A5\u5165\u7684\u6240\u6709\u7ED1\u5B9A\u4E5F\u4F1A\u4E00\u5E76\u4E22\u5931\u3002","chatConfig.paChannel.save":"\u4FDD\u5B58","chatConfig.paChannel.bindingAdded":"\u7ED1\u5B9A\u5DF2\u6DFB\u52A0","chatConfig.paChannel.bindingAddFailed":"\u6DFB\u52A0\u7ED1\u5B9A\u5931\u8D25","chatConfig.paChannel.bindingRemoved":"\u7ED1\u5B9A\u5DF2\u79FB\u9664","chatConfig.paChannel.bindingRemoveFailed":"\u79FB\u9664\u7ED1\u5B9A\u5931\u8D25","chatConfig.paChannel.bindingsLoadFailed":"\u52A0\u8F7D\u7ED1\u5B9A\u5931\u8D25","chatConfig.paChannel.installationsLoadFailed":"\u52A0\u8F7D\u6E20\u9053\u63A5\u5165\u5931\u8D25","chatConfig.paChannel.channelEnabled":"\u6E20\u9053\u5DF2\u542F\u7528","chatConfig.paChannel.channelDisabled":"\u6E20\u9053\u5DF2\u7981\u7528","chatConfig.paChannel.toggleFailed":"\u5207\u6362\u6E20\u9053\u72B6\u6001\u5931\u8D25","chatConfig.paChannel.installationUpdated":"\u63A5\u5165\u5DF2\u66F4\u65B0","chatConfig.paChannel.installationUpdateFailed":"\u66F4\u65B0\u63A5\u5165\u5931\u8D25","chatConfig.paChannel.installationCreated":"\u63A5\u5165\u5DF2\u521B\u5EFA","chatConfig.paChannel.installationCreateFailed":"\u521B\u5EFA\u63A5\u5165\u5931\u8D25","chatConfig.paChannel.installationSaveFailed":"\u4FDD\u5B58\u63A5\u5165\u5931\u8D25","chatConfig.paChannel.installationDeleted":"\u63A5\u5165\u5DF2\u5220\u9664","chatConfig.paChannel.installationDeleteFailed":"\u5220\u9664\u63A5\u5165\u5931\u8D25","chatConfig.paChannel.addUsersHint":"\u73B0\u5728\u6DFB\u52A0\u53EF\u4EE5\u8BBF\u95EE\u8BE5\u6E20\u9053\u7684\u7528\u6237","chatConfig.paChannel.validation.appIdRequired":"App ID \u4E3A\u5FC5\u586B\u9879","chatConfig.paChannel.validation.appSecretRequired":"App Secret \u4E3A\u5FC5\u586B\u9879","chatConfig.paChannel.validation.botTokenRequired":"Bot Token \u4E3A\u5FC5\u586B\u9879","chatConfig.paChannel.qr.hint":"\u7528\u5FAE\u4FE1\u626B\u63CF\u4E8C\u7EF4\u7801\u4EE5\u83B7\u53D6 Bot Token","chatConfig.paChannel.qr.get":"\u83B7\u53D6\u4E8C\u7EF4\u7801","chatConfig.paChannel.qr.generating":"\u6B63\u5728\u751F\u6210\u4E8C\u7EF4\u7801\u2026\u2026","chatConfig.paChannel.qr.scan":"\u7528\u5FAE\u4FE1\u626B\u7801","chatConfig.paChannel.qr.scanned":"\u5DF2\u626B\u63CF\uFF01\u8BF7\u5728\u624B\u673A\u4E0A\u786E\u8BA4\u2026\u2026","chatConfig.paChannel.qr.expiresIn":"{{time}} \u540E\u8FC7\u671F","chatConfig.paChannel.qr.expired":"\u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F","chatConfig.paChannel.qr.refreshStatus":"\u5237\u65B0\u72B6\u6001","chatConfig.paChannel.qr.loginConfirmed":"\u767B\u5F55\u5DF2\u786E\u8BA4\uFF01","chatConfig.paChannel.qr.tokenFilled":"Bot Token \u5DF2\u81EA\u52A8\u586B\u5145","chatConfig.paChannel.qr.expiredGetNew":"\u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F\u3002\u8BF7\u91CD\u65B0\u83B7\u53D6\u3002","chatConfig.paChannel.qr.retry":"\u91CD\u8BD5","chatConfig.paChannel.qr.loadFailed":"\u52A0\u8F7D\u4E8C\u7EF4\u7801\u5931\u8D25","chatConfig.paChannel.qr.getFailed":"\u83B7\u53D6\u4E8C\u7EF4\u7801\u5931\u8D25","chatConfig.paChannel.qr.statusFailed":"\u67E5\u8BE2\u4E8C\u7EF4\u7801\u72B6\u6001\u5931\u8D25"},a={messages:n};export{a as default,n as messages};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/open.ts","../src/services/open/openMcpServer.ts"],"sourcesContent":["/**\n * Open API surface routes: GET/POST/DELETE /open/mcp.\n *\n * The route is a thin shell — credential resolution (OpenAuthService),\n * catalog filtering and invocation (OpenLattice), and stateless MCP server\n * construction live in services/open/*. The transport writes the response\n * itself, so the reply is hijacked (same precedent as the Project Room SSE\n * route).\n */\n\nimport type { FastifyInstance, FastifyReply, FastifyRequest } from \"fastify\";\nimport { getReplicaId, getStoreLattice } from \"@axiom-lattice/core\";\nimport { REPLICA_HEADER, type A2AApiKeyStore, type OpenAuditStore, type OpenGrant, type ProjectStore } from \"@axiom-lattice/protocols\";\nimport { OpenCredentialService } from \"../services/open/openCredentialService\";\nimport { OpenAuditService } from \"../services/open/openAuditService\";\nimport { OpenRateLimiter } from \"../services/open/openRateLimiter\";\nimport type { OpenCredential } from \"../services/open/openCredentialService\";\nimport {\n openLattice,\n ActionNotFoundError,\n GrantDeniedError,\n ValidationError,\n} from \"../services/open/openLattice\";\nimport { buildSessionServer } from \"../services/open/openMcpServer\";\nimport { collectExposedPluginUiResources } from \"../services/open/registerExposedPlugins\";\nimport {\n buildTenantOpenPlugins,\n mergeOpenCatalog,\n type TenantOpenPlugins,\n} from \"../services/open/tenantOpenPlugins\";\n\nexport interface OpenRouteDeps {\n openAuth?: OpenCredentialService;\n grantsSource?: (ctx: OpenCredential) => OpenGrant[];\n audit?: OpenAuditService;\n rateLimiter?: OpenRateLimiter;\n /**\n * Test seam: build the credential's tenant sandbox plugin bundle. Defaults to\n * {@link buildTenantOpenPlugins} with the global catalog's tool names reserved\n * so a tenant tool can never shadow a global/built-in one.\n */\n tenantPlugins?: (\n tenantId: string,\n grants: OpenGrant[],\n reservedToolNames: ReadonlySet<string>,\n ) => Promise<TenantOpenPlugins>;\n}\n\nfunction extractBearer(request: FastifyRequest): string | undefined {\n const header = request.headers.authorization;\n if (!header?.startsWith(\"Bearer \")) return undefined;\n return header.slice(\"Bearer \".length).trim() || undefined;\n}\n\n/**\n * Degraded tenant plugin bundle used when the sandbox catalog cannot be read.\n *\n * A catalog read failure must not 500 the session: the MCP server still builds\n * and serves the global tools. `invoke` is unreachable through normal routing\n * (`hasTool` is always false, so calls route to OpenLattice) but returns an\n * error result if it is ever reached.\n */\nfunction emptyTenantPlugins(): TenantOpenPlugins {\n return {\n tools: [],\n uiResources: new Map(),\n hasTool: () => false,\n degraded: true,\n invoke: async (toolName) => ({\n content: [\n { type: \"text\", text: `Tenant plugin catalog unavailable for ${toolName}` },\n ],\n isError: true,\n }),\n };\n}\n\n/** JSON-RPC error codes used on the Open surface. */\nconst RPC_ERROR = {\n GRANT_DENIED: -32001,\n ACTION_NOT_FOUND: -32002,\n VALIDATION_FAILED: -32003,\n EXECUTION_ERROR: -32004,\n RATE_LIMITED: -32005,\n} as const;\n\nexport function registerOpenRoutes(\n app: FastifyInstance,\n deps: OpenRouteDeps = {},\n): void {\n const openAuth =\n deps.openAuth ??\n new OpenCredentialService(\n getStoreLattice(\"default\", \"a2aApiKey\").store as A2AApiKeyStore,\n getStoreLattice(\"default\", \"project\").store as ProjectStore,\n );\n const grantsSource =\n deps.grantsSource ?? ((ctx: OpenCredential) => ctx.grants);\n const audit =\n deps.audit ??\n (() => {\n try {\n const store = getStoreLattice(\"default\", \"openAudit\").store as OpenAuditStore;\n return new OpenAuditService(store);\n } catch {\n return undefined;\n }\n })();\n\n const rateLimiter = deps.rateLimiter ?? new OpenRateLimiter();\n\n const markReplica = (reply: FastifyReply): void => {\n const replica = getReplicaId();\n reply.header(REPLICA_HEADER, replica);\n reply.raw.setHeader(REPLICA_HEADER, replica);\n };\n\n const buildServerFor = async (\n context: OpenCredential,\n log: FastifyRequest[\"log\"],\n ) => {\n const grants = grantsSource(context);\n const catalog = await openLattice.catalogFor(grants, { tenantId: context.tenantId });\n // Tenant sandbox plugins are volume-resident and outside the OpenLattice\n // registry; merge their grant-filtered tools/UI alongside the globals.\n // Global/built-in tool names are reserved so a tenant plugin of the same\n // type (kb/sandbox/agent) can neither crash `registerTool` with a duplicate\n // nor capture the invoke routing for a global tool.\n const globalToolNames = new Set(catalog.map((t) => t.toolName));\n const buildTenant =\n deps.tenantPlugins ??\n ((tenantId, tenantGrants, reservedToolNames) =>\n buildTenantOpenPlugins(tenantId, tenantGrants, { reservedToolNames }));\n let tenant: TenantOpenPlugins;\n try {\n tenant = await buildTenant(context.tenantId, grants, globalToolNames);\n if (tenant.degraded) {\n // The catalog's common failure mode is a diagnostic, not a throw\n // (`ensureLoaded` returns error-level diagnostics). Surface it and\n // serve global tools only.\n log.warn(\n { tenantId: context.tenantId },\n \"open mcp: tenant plugin catalog degraded; serving global tools only\",\n );\n }\n } catch (error) {\n // Sandbox catalogs are volume-resident and can be transiently\n // unavailable; degrade to globals-only rather than failing the whole\n // session so external hosts can still connect. `err` keeps the stack.\n log.warn(\n { tenantId: context.tenantId, err: error },\n \"open mcp: tenant plugin catalog unavailable; serving global tools only\",\n );\n tenant = emptyTenantPlugins();\n }\n const mergedCatalog = mergeOpenCatalog(catalog, tenant.tools);\n const uiResources = new Map([\n ...collectExposedPluginUiResources(grants),\n ...tenant.uiResources,\n ]);\n const built = await buildSessionServer({\n credential: { credentialId: context.credentialId, kind: context.kind },\n grants,\n catalog: mergedCatalog,\n uiResources,\n invoke: async (toolName, args) => {\n const startedAt = Date.now();\n const sep = toolName.indexOf(\"_\");\n const auditDomain = sep > 0 ? toolName.slice(0, sep) : toolName;\n const auditAction = sep > 0 ? toolName.slice(sep + 1) : \"\";\n\n const decision = rateLimiter.check(context.credentialId, auditDomain);\n if (!decision.allowed) {\n await audit?.record({\n tenantId: context.tenantId,\n credentialId: context.credentialId,\n credentialKind: context.kind,\n projectId: context.projectId,\n domain: auditDomain,\n action: auditAction,\n args,\n status: \"error\",\n errorCode: \"RATE_LIMITED\",\n durationMs: Date.now() - startedAt,\n });\n throw Object.assign(\n new Error(\n `RATE_LIMITED: retry after ${decision.retryAfterMs ?? 1000}ms`,\n ),\n { rpcCode: RPC_ERROR.RATE_LIMITED },\n );\n }\n\n try {\n const isTenantRoute = tenant.hasTool(toolName) && !globalToolNames.has(toolName);\n const runConfig: Record<string, unknown> = {\n sandboxName: context.sandboxName,\n credentialId: context.credentialId,\n depth: context.depth,\n };\n const result = isTenantRoute\n ? await tenant.invoke(toolName, args, {\n tenantId: context.tenantId,\n projectId: context.projectId,\n workspaceId: context.workspaceId,\n runConfig,\n })\n : await openLattice.invoke(\n grants,\n {\n tenantId: context.tenantId,\n projectId: context.projectId,\n workspaceId: context.workspaceId,\n runConfig,\n },\n toolName,\n args,\n );\n await audit?.record({\n tenantId: context.tenantId,\n credentialId: context.credentialId,\n credentialKind: context.kind,\n projectId: context.projectId,\n domain: auditDomain,\n action: auditAction,\n args,\n status: result.isError ? \"error\" : \"ok\",\n ...(result.isError ? { errorCode: \"EXECUTION_ERROR\" } : {}),\n durationMs: Date.now() - startedAt,\n });\n return result;\n } catch (err) {\n const code =\n err instanceof GrantDeniedError\n ? RPC_ERROR.GRANT_DENIED\n : err instanceof ActionNotFoundError\n ? RPC_ERROR.ACTION_NOT_FOUND\n : err instanceof ValidationError\n ? RPC_ERROR.VALIDATION_FAILED\n : RPC_ERROR.EXECUTION_ERROR;\n await audit?.record({\n tenantId: context.tenantId,\n credentialId: context.credentialId,\n credentialKind: context.kind,\n projectId: context.projectId,\n domain: auditDomain,\n action: auditAction,\n args,\n status: \"error\",\n errorCode:\n err instanceof GrantDeniedError\n ? \"GRANT_DENIED\"\n : err instanceof ActionNotFoundError\n ? \"ACTION_NOT_FOUND\"\n : err instanceof ValidationError\n ? \"VALIDATION_FAILED\"\n : \"EXECUTION_ERROR\",\n durationMs: Date.now() - startedAt,\n });\n throw Object.assign(\n new Error(err instanceof Error ? err.message : String(err)),\n { rpcCode: code },\n );\n }\n },\n });\n return built;\n };\n\n const handleOpenMcpPost = async (\n request: FastifyRequest,\n reply: FastifyReply,\n ) => {\n markReplica(reply);\n const context = await openAuth.resolve(extractBearer(request));\n if (!context) {\n return reply.status(401).send({ error: \"AUTH_FAILED\" });\n }\n\n const built = await buildServerFor(context, request.log);\n await built.server.connect(built.transport);\n reply.hijack();\n const close = (): void => {\n void built.transport.close().catch(() => undefined);\n void built.server.close().catch(() => undefined);\n };\n reply.raw.once(\"close\", close);\n await built.transport.handleRequest(request.raw, reply.raw, request.body);\n };\n\n const methodNotAllowed = async (\n _request: FastifyRequest,\n reply: FastifyReply,\n ) => {\n reply.header(\"Allow\", \"POST\");\n return reply.status(405).send({ error: \"METHOD_NOT_ALLOWED\" });\n };\n\n app.post(\"/open/mcp\", handleOpenMcpPost);\n // Canonical MCP surface aliases the unified Open MCP server.\n app.post(\"/mcp\", handleOpenMcpPost);\n app.post(\"/mcp/\", handleOpenMcpPost);\n app.get(\"/mcp\", methodNotAllowed);\n app.get(\"/mcp/\", methodNotAllowed);\n\n // Stateless Streamable HTTP has no server→client GET stream or session\n // DELETE. A 404 is not a recognized \"not supported\" signal: the official\n // client transport tolerates 405 (`Allow` set) and continues.\n app.get(\"/open/mcp\", methodNotAllowed);\n app.get(\"/open/mcp/\", methodNotAllowed);\n app.delete(\"/open/mcp\", methodNotAllowed);\n app.delete(\"/mcp\", methodNotAllowed);\n app.delete(\"/mcp/\", methodNotAllowed);\n\n}\n","/**\n * Builds a stateless MCP server instance whose tool list is the\n * credential-filtered OpenLattice catalog. A fresh instance is built per HTTP\n * request so no server/session state is shared between replicas.\n *\n * The transport uses `sessionIdGenerator: undefined`: it never issues\n * `Mcp-Session-Id`, and every request is self-contained. Credential-scoped\n * tool lists therefore stay per-request without a session registry.\n *\n * Every tool executor routes through the OpenLattice invoke kernel, so\n * authorization is re-checked on each invocation (default-deny, live grants).\n */\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport type { McpUiCsp, OpenGrant } from \"@axiom-lattice/protocols\";\nimport type { OpenToolDescriptor } from \"./openLattice\";\n\nexport const OPEN_MCP_SERVER_INFO = {\n name: \"axiom-open\",\n version: \"0.1.0\",\n} as const;\n\n/**\n * A `ui://` HTML resource served by the session. `read` is invoked per\n * `resources/read`, so the caller can fetch plugin UI lazily.\n */\nexport interface OpenUiResource {\n /** MIME for the resource; defaults to \"text/html;profile=mcp-app\". */\n mimeType?: string;\n csp?: McpUiCsp;\n read: () => Promise<{ html: string; csp?: McpUiCsp }>;\n}\n\nexport interface BuiltSession {\n server: McpServer;\n transport: StreamableHTTPServerTransport;\n tools: OpenToolDescriptor[];\n}\n\n/**\n * Builds (but does not connect) a stateless MCP server. The caller MUST\n * connect it to a transport (`await built.server.connect(built.transport)`)\n * before handling a request — otherwise the transport has no onmessage\n * handler and the request is swallowed. Deferring connect is what lets tests\n * attach the server to an `InMemoryTransport`.\n */\nexport async function buildSessionServer(options: {\n credential: { credentialId: string; kind: string };\n grants: OpenGrant[];\n catalog: OpenToolDescriptor[];\n invoke: (\n toolName: string,\n args: unknown,\n ) => Promise<{\n content: Array<{ type: \"text\"; text: string }>;\n isError?: boolean;\n }>;\n uiResources?: Map<string, OpenUiResource>;\n}): Promise<BuiltSession> {\n const { catalog, invoke, uiResources } = options;\n const server = new McpServer(OPEN_MCP_SERVER_INFO, {\n capabilities: {\n // The SDK has no `extensions` field; MCP App hosts discover the UI\n // extension through `experimental`.\n experimental: { \"io.modelcontextprotocol/ui\": {} },\n },\n });\n for (const tool of catalog) {\n server.registerTool(\n tool.toolName,\n {\n description: tool.description,\n inputSchema: tool.schema,\n annotations: {\n readOnlyHint: tool.annotations.readOnlyHint,\n destructiveHint: tool.annotations.destructiveHint,\n },\n ...(tool.ui ? { _meta: { ui: { resourceUri: tool.ui.resourceUri } } } : {}),\n },\n async (args: unknown) => {\n const result = await invoke(tool.toolName, args);\n return { content: result.content, isError: result.isError };\n },\n );\n }\n for (const [uri, res] of uiResources ?? []) {\n const mimeType = res.mimeType ?? \"text/html;profile=mcp-app\";\n server.registerResource(\n `mcp-app:${uri}`,\n uri,\n {\n mimeType,\n ...(res.csp ? { _meta: { ui: { csp: res.csp } } } : {}),\n },\n async (u) => {\n const { html, csp } = await res.read();\n return {\n contents: [\n {\n uri: u.href,\n mimeType,\n text: html,\n ...(csp ? { _meta: { ui: { csp } } } : {}),\n },\n ],\n };\n },\n );\n }\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: undefined,\n enableJsonResponse: true,\n });\n return { server, transport, tools: catalog };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/open-catalog.ts","../src/services/open/openCatalogService.ts"],"sourcesContent":["/**\n * Open capability catalog endpoint (console-session guarded): returns the\n * grantable capabilities for the caller's tenant, driving the key picker.\n */\n\nimport type { FastifyInstance, FastifyReply, FastifyRequest } from \"fastify\";\nimport { getStoreLattice } from \"@axiom-lattice/core\";\nimport type { AssistantStore } from \"@axiom-lattice/protocols\";\nimport { OpenCatalogService } from \"../services/open/openCatalogService\";\n\ninterface RequestWithUser extends FastifyRequest {\n user?: { id: string; tenantId?: string };\n}\n\nfunction tenantIdOf(request: FastifyRequest): string | undefined {\n return (request as RequestWithUser).user?.tenantId;\n}\n\nexport function registerOpenCatalogRoutes(app: FastifyInstance): void {\n app.get(\"/api/open/catalog\", async (request: FastifyRequest, reply: FastifyReply) => {\n const tenantId = tenantIdOf(request);\n if (!tenantId) {\n return reply.status(401).send({ success: false, error: \"Unauthorized\" });\n }\n const assistantStore = getStoreLattice(\"default\", \"assistant\")\n .store as AssistantStore;\n const service = new OpenCatalogService(assistantStore);\n const catalog = await service.buildForTenant(tenantId);\n return reply.status(200).send({ success: true, data: catalog });\n });\n}\n","/**\n * OpenCatalogService — assembles the tenant-scoped grantable capability\n * catalog for the key-management picker: registry domains (built-in + plugin)\n * plus per-tenant agent instances and tenant sandbox plugin domains.\n */\n\nimport { getSandboxPluginCatalog } from \"@axiom-lattice/core\";\nimport type {\n AssistantStore,\n OpenCatalog,\n OpenCatalogDomain,\n OpenCatalogItem,\n Plugin,\n} from \"@axiom-lattice/protocols\";\nimport { OpenLattice, openLattice } from \"./openLattice\";\n\n/** Reads the tenant's sandbox plugins; injectable for tests. */\nexport type TenantPluginLister = (tenantId: string) => Promise<Plugin[]>;\n\n/**\n * Default tenant plugin source: the process-wide sandbox plugin catalog.\n * A missing/unconfigured sandbox degrades to an empty list.\n */\nasync function defaultListTenantPlugins(tenantId: string): Promise<Plugin[]> {\n return (await getSandboxPluginCatalog().ensureLoaded(tenantId)).plugins;\n}\n\nexport class OpenCatalogService {\n constructor(\n private readonly assistantStore: AssistantStore,\n private readonly lattice: OpenLattice = openLattice,\n private readonly listTenantPlugins: TenantPluginLister = defaultListTenantPlugins,\n ) {}\n\n async buildForTenant(tenantId: string): Promise<OpenCatalog> {\n const domains = this.lattice.describeCatalog();\n const enriched: OpenCatalogDomain[] = [];\n for (const domain of domains) {\n if (domain.domain === \"agent\" && domain.itemKind === \"instance\") {\n let items: OpenCatalogDomain[\"items\"] = [];\n try {\n const assistants = await this.assistantStore.getAllAssistants(tenantId);\n items = assistants.map((a) => ({\n id: a.id,\n toolName: `invoke_${a.id}`,\n label: a.name || a.id,\n }));\n } catch {\n items = [];\n }\n enriched.push({ ...domain, items });\n } else {\n enriched.push(domain);\n }\n }\n\n // Tenant sandbox plugins live in per-tenant volumes and are not part of the\n // OpenLattice registry, so without this the console picker could never grant\n // their domains. Global domains win on collision (consistent with\n // `mergeOpenCatalog`).\n const knownDomains = new Set(domains.map((d) => d.domain));\n let plugins: Plugin[] = [];\n try {\n plugins = await this.listTenantPlugins(tenantId);\n } catch {\n plugins = [];\n }\n for (const plugin of plugins) {\n const type = plugin.meta.type;\n if (knownDomains.has(type)) continue;\n knownDomains.add(type);\n const items: OpenCatalogItem[] = (plugin.meta.tools ?? [])\n .filter((t) => t.expose)\n .map((t) => ({\n id: t.name,\n toolName: `${type}_${t.name}`,\n label: t.name,\n description: t.description,\n }));\n enriched.push({\n domain: type,\n label: plugin.meta.name,\n source: \"plugin\",\n scopeKind: \"tenant\",\n itemKind: \"action\",\n items,\n });\n }\n return { domains: enriched };\n }\n}\n"],"mappings":";;;;;;AAMA,SAAS,uBAAuB;;;ACAhC,SAAS,+BAA+B;AAiBxC,eAAe,yBAAyB,UAAqC;AAC3E,UAAQ,MAAM,wBAAwB,EAAE,aAAa,QAAQ,GAAG;AAClE;AAEO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YACmB,gBACA,UAAuB,aACvB,oBAAwC,0BACzD;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAEH,MAAM,eAAe,UAAwC;AAC3D,UAAM,UAAU,KAAK,QAAQ,gBAAgB;AAC7C,UAAM,WAAgC,CAAC;AACvC,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,WAAW,WAAW,OAAO,aAAa,YAAY;AAC/D,YAAI,QAAoC,CAAC;AACzC,YAAI;AACF,gBAAM,aAAa,MAAM,KAAK,eAAe,iBAAiB,QAAQ;AACtE,kBAAQ,WAAW,IAAI,CAAC,OAAO;AAAA,YAC7B,IAAI,EAAE;AAAA,YACN,UAAU,UAAU,EAAE,EAAE;AAAA,YACxB,OAAO,EAAE,QAAQ,EAAE;AAAA,UACrB,EAAE;AAAA,QACJ,QAAQ;AACN,kBAAQ,CAAC;AAAA,QACX;AACA,iBAAS,KAAK,EAAE,GAAG,QAAQ,MAAM,CAAC;AAAA,MACpC,OAAO;AACL,iBAAS,KAAK,MAAM;AAAA,MACtB;AAAA,IACF;AAMA,UAAM,eAAe,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AACzD,QAAI,UAAoB,CAAC;AACzB,QAAI;AACF,gBAAU,MAAM,KAAK,kBAAkB,QAAQ;AAAA,IACjD,QAAQ;AACN,gBAAU,CAAC;AAAA,IACb;AACA,eAAW,UAAU,SAAS;AAC5B,YAAM,OAAO,OAAO,KAAK;AACzB,UAAI,aAAa,IAAI,IAAI,EAAG;AAC5B,mBAAa,IAAI,IAAI;AACrB,YAAM,SAA4B,OAAO,KAAK,SAAS,CAAC,GACrD,OAAO,CAAC,MAAM,EAAE,MAAM,EACtB,IAAI,CAAC,OAAO;AAAA,QACX,IAAI,EAAE;AAAA,QACN,UAAU,GAAG,IAAI,IAAI,EAAE,IAAI;AAAA,QAC3B,OAAO,EAAE;AAAA,QACT,aAAa,EAAE;AAAA,MACjB,EAAE;AACJ,eAAS,KAAK;AAAA,QACZ,QAAQ;AAAA,QACR,OAAO,OAAO,KAAK;AAAA,QACnB,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,UAAU;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AACA,WAAO,EAAE,SAAS,SAAS;AAAA,EAC7B;AACF;;;AD5EA,SAAS,WAAW,SAA6C;AAC/D,SAAQ,QAA4B,MAAM;AAC5C;AAEO,SAAS,0BAA0B,KAA4B;AACpE,MAAI,IAAI,qBAAqB,OAAO,SAAyB,UAAwB;AACnF,UAAM,WAAW,WAAW,OAAO;AACnC,QAAI,CAAC,UAAU;AACb,aAAO,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,OAAO,OAAO,eAAe,CAAC;AAAA,IACzE;AACA,UAAM,iBAAiB,gBAAgB,WAAW,WAAW,EAC1D;AACH,UAAM,UAAU,IAAI,mBAAmB,cAAc;AACrD,UAAM,UAAU,MAAM,QAAQ,eAAe,QAAQ;AACrD,WAAO,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,MAAM,MAAM,QAAQ,CAAC;AAAA,EAChE,CAAC;AACH;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/open-exposure.ts"],"sourcesContent":["/**\n * Key exposure endpoint: what a given API key exposes to external callers —\n * the MCP tools (per grants) and the A2A agent cards (for granted agents).\n * Console-session guarded and tenant-scoped.\n */\n\nimport type { FastifyInstance, FastifyReply, FastifyRequest } from \"fastify\";\nimport { getStoreLattice } from \"@axiom-lattice/core\";\nimport type {\n A2AApiKeyStore,\n AssistantStore,\n OpenGrant,\n} from \"@axiom-lattice/protocols\";\nimport { effectiveGrants } from \"@axiom-lattice/protocols\";\nimport {\n openLattice,\n type OpenToolDescriptor,\n} from \"../services/open/openLattice\";\nimport {\n buildTenantOpenPlugins,\n mergeOpenCatalog,\n type TenantOpenPluginDeps,\n} from \"../services/open/tenantOpenPlugins\";\nimport { buildAgentCardForAssistant } from \"../services/a2a/A2AAgentCardBuilder\";\n\ninterface RequestWithUser extends FastifyRequest {\n user?: { id: string; tenantId?: string };\n}\n\n/** Overridable seams for the exposure route (tests / embedding). */\nexport interface OpenExposureDeps {\n /** Tenant sandbox plugin catalog seams; defaults to the live sandbox catalog. */\n tenantPluginDeps?: TenantOpenPluginDeps;\n}\n\nexport function registerOpenExposureRoutes(\n app: FastifyInstance,\n deps: OpenExposureDeps = {},\n): void {\n app.get<{ Params: { id: string } }>(\n \"/api/keys/:id/exposure\",\n async (\n request: FastifyRequest<{ Params: { id: string } }>,\n reply: FastifyReply,\n ) => {\n const tenantId = (request as RequestWithUser).user?.tenantId;\n if (!tenantId) {\n return reply.status(401).send({ success: false, error: \"Unauthorized\" });\n }\n\n const keyStore = getStoreLattice(\"default\", \"a2aApiKey\")\n .store as A2AApiKeyStore;\n const record = await keyStore.findById(request.params.id);\n if (!record || record.tenantId !== tenantId) {\n return reply.status(404).send({ success: false, error: \"Key not found\" });\n }\n\n const grants: OpenGrant[] = effectiveGrants(record);\n // Include the port: request.hostname strips it, request.headers.host keeps it.\n const forwardedHost = request.headers[\"x-forwarded-host\"];\n const host =\n (Array.isArray(forwardedHost) ? forwardedHost[0] : forwardedHost) ??\n (Array.isArray(request.headers.host) ? request.headers.host[0] : request.headers.host) ??\n request.hostname;\n const baseUrl = `${request.protocol}://${host}`;\n\n // MCP surface: the credential-filtered tool catalog.\n const globalCatalog = await openLattice.catalogFor(grants, { tenantId });\n\n // Tenant sandbox plugins live in per-tenant volumes, outside the\n // OpenLattice registry, so the globals are merged with the credential's\n // grant-filtered tenant tools (global wins) to mirror the actual Open MCP\n // session. A missing/unavailable sandbox catalog degrades to globals.\n let tenantTools: OpenToolDescriptor[] = [];\n let tenantCatalogDegraded = false;\n try {\n const tenant = await buildTenantOpenPlugins(tenantId, grants, {\n ...deps.tenantPluginDeps,\n reservedToolNames: new Set(globalCatalog.map((t) => t.toolName)),\n });\n tenantTools = tenant.tools;\n tenantCatalogDegraded = tenant.degraded;\n } catch (error) {\n tenantCatalogDegraded = true;\n request.log.warn(\n { tenantId, err: error },\n \"key exposure: tenant plugin catalog unavailable\",\n );\n }\n\n const tools = mergeOpenCatalog(globalCatalog, tenantTools).map((t) => ({\n domain: t.domain,\n toolName: t.toolName,\n description: t.description,\n annotations: t.annotations,\n hasUi: Boolean(t.ui),\n }));\n\n // A2A surface: one card per granted agent.\n const agentGrant = grants.find((g) => g.domain === \"agent\");\n const assistantStore = getStoreLattice(\"default\", \"assistant\")\n .store as AssistantStore;\n let pushNotifications = false;\n try {\n pushNotifications = Boolean(getStoreLattice(\"default\", \"store\").store);\n } catch {\n pushNotifications = false;\n }\n const agents: Array<{\n assistantId: string;\n cardUrl: string;\n jsonrpcUrl: string;\n v1CardUrl: string;\n v1JsonrpcUrl: string;\n card: unknown;\n }> = [];\n for (const assistantId of agentGrant?.items ?? []) {\n const assistant = await assistantStore.getAssistantById(\n tenantId,\n assistantId,\n );\n if (!assistant) continue;\n agents.push({\n assistantId,\n cardUrl: `${baseUrl}/api/a2a/agents/${assistantId}/.well-known/agent-card.json`,\n jsonrpcUrl: `${baseUrl}/api/a2a/agents/${assistantId}/jsonrpc`,\n v1CardUrl: `${baseUrl}/a2a/v1/${assistantId}/.well-known/agent-card.json`,\n v1JsonrpcUrl: `${baseUrl}/a2a/v1/${assistantId}`,\n card: buildAgentCardForAssistant({\n assistant,\n baseUrl,\n pushNotifications,\n }),\n });\n }\n\n return reply.status(200).send({\n success: true,\n data: {\n tenantId,\n projectId: record.projectId,\n grants,\n mcp: {\n endpoint: `${baseUrl}/open/mcp`,\n tools,\n // Surfaced so the console can distinguish \"no tenant tools granted\"\n // from \"tenant catalog unreadable\"; the live Open session degrades\n // to globals-only either way.\n tenantCatalogDegraded,\n },\n a2a: { agents },\n },\n });\n },\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/routes/open-session.ts"],"sourcesContent":["/**\n * Open session exchange: downgrades a share token into a short-lived browser\n * token scoped to the platform browser whitelist. The share link is the key;\n * grants come from the whitelist (V1: kb read-only), not the caller.\n */\n\nimport type { FastifyInstance, FastifyReply, FastifyRequest } from \"fastify\";\nimport { getStoreLattice } from \"@axiom-lattice/core\";\nimport type { SharedResourceStore } from \"@axiom-lattice/protocols\";\nimport { signOpenToken } from \"../services/open/openToken\";\nimport { BROWSER_GRANTS } from \"../services/open/previewToken\";\nimport type { OpenToolDescriptor } from \"../services/open/openLattice\";\nimport { openLattice } from \"../services/open/openLattice\";\n\nexport function registerOpenSessionRoutes(app: FastifyInstance): void {\n app.post(\n \"/open/session\",\n async (request: FastifyRequest, reply: FastifyReply) => {\n const body = (request.body ?? {}) as { shareToken?: string };\n const shareToken = body.shareToken;\n if (typeof shareToken !== \"string\" || shareToken.length === 0) {\n return reply.status(400).send({ error: \"SHARE_TOKEN_REQUIRED\" });\n }\n\n const store = getStoreLattice(\"default\", \"sharedResource\")\n .store as SharedResourceStore;\n const record = await store.findByToken(shareToken);\n if (!record || record.revoked) {\n return reply.status(404).send({ error: \"SHARE_NOT_FOUND\" });\n }\n if (record.expiresAt && new Date(record.expiresAt) < new Date()) {\n return reply.status(410).send({ error: \"SHARE_EXPIRED\" });\n }\n\n const grants = BROWSER_GRANTS;\n const browserToken = signOpenToken({\n kind: \"browser_token\",\n tenantId: record.tenantId,\n projectId: record.projectId,\n shareId: record.token,\n grants,\n });\n\n const actions: OpenToolDescriptor[] = await openLattice.catalogFor(grants, { tenantId: record.tenantId });\n\n return reply.status(200).send({\n browserToken,\n expiresAt: Date.now() + 15 * 60 * 1000,\n actions: actions.map((a) => a.toolName),\n });\n },\n );\n}\n"],"mappings":";;;;;;;;;;;;;AASA;AAFA,SAAS,uBAAuB;AAOzB,SAAS,0BAA0B,KAA4B;AACpE,MAAI;AAAA,IACF;AAAA,IACA,OAAO,SAAyB,UAAwB;AACtD,YAAM,OAAQ,QAAQ,QAAQ,CAAC;AAC/B,YAAM,aAAa,KAAK;AACxB,UAAI,OAAO,eAAe,YAAY,WAAW,WAAW,GAAG;AAC7D,eAAO,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,uBAAuB,CAAC;AAAA,MACjE;AAEA,YAAM,QAAQ,gBAAgB,WAAW,gBAAgB,EACtD;AACH,YAAM,SAAS,MAAM,MAAM,YAAY,UAAU;AACjD,UAAI,CAAC,UAAU,OAAO,SAAS;AAC7B,eAAO,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,kBAAkB,CAAC;AAAA,MAC5D;AACA,UAAI,OAAO,aAAa,IAAI,KAAK,OAAO,SAAS,IAAI,oBAAI,KAAK,GAAG;AAC/D,eAAO,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,OAAO,gBAAgB,CAAC;AAAA,MAC1D;AAEA,YAAM,SAAS;AACf,YAAM,eAAe,cAAc;AAAA,QACjC,MAAM;AAAA,QACN,UAAU,OAAO;AAAA,QACjB,WAAW,OAAO;AAAA,QAClB,SAAS,OAAO;AAAA,QAChB;AAAA,MACF,CAAC;AAED,YAAM,UAAgC,MAAM,YAAY,WAAW,QAAQ,EAAE,UAAU,OAAO,SAAS,CAAC;AAExG,aAAO,MAAM,OAAO,GAAG,EAAE,KAAK;AAAA,QAC5B;AAAA,QACA,WAAW,KAAK,IAAI,IAAI,KAAK,KAAK;AAAA,QAClC,SAAS,QAAQ,IAAI,CAAC,MAAM,EAAE,QAAQ;AAAA,MACxC,CAAC;AAAA,IACH;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ActionNotFoundError,
|
|
3
|
-
GrantDeniedError,
|
|
4
|
-
OpenLattice,
|
|
5
|
-
ValidationError,
|
|
6
|
-
grantCovers,
|
|
7
|
-
openLattice
|
|
8
|
-
} from "./chunk-HVIKCUOF.mjs";
|
|
9
|
-
import "./chunk-NFEGQTCC.mjs";
|
|
10
|
-
export {
|
|
11
|
-
ActionNotFoundError,
|
|
12
|
-
GrantDeniedError,
|
|
13
|
-
OpenLattice,
|
|
14
|
-
ValidationError,
|
|
15
|
-
grantCovers,
|
|
16
|
-
openLattice
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=openLattice-Q6M5S6CY.mjs.map
|