feat: add remote-first education work lake
This commit is contained in:
parent
ac9d051778
commit
333cd222c5
43 changed files with 923 additions and 74 deletions
|
|
@ -11,12 +11,12 @@ describe('aiAgents helpers', () => {
|
|||
expect(normalizeStoredAiAgent('claude_code')).toBe('claude_code')
|
||||
expect(normalizeStoredAiAgent('codex')).toBe('codex')
|
||||
expect(normalizeStoredAiAgent('copilot')).toBe('copilot')
|
||||
expect(normalizeStoredAiAgent('opencode')).toBe('opencode')
|
||||
expect(normalizeStoredAiAgent('pi')).toBe('pi')
|
||||
expect(normalizeStoredAiAgent('antigravity')).toBe('antigravity')
|
||||
expect(normalizeStoredAiAgent('gemini')).toBe('antigravity')
|
||||
expect(normalizeStoredAiAgent('kiro')).toBe('kiro')
|
||||
expect(normalizeStoredAiAgent('hermes')).toBe('hermes')
|
||||
expect(normalizeStoredAiAgent('opencode')).toBeNull()
|
||||
expect(normalizeStoredAiAgent('pi')).toBeNull()
|
||||
expect(normalizeStoredAiAgent('antigravity')).toBeNull()
|
||||
expect(normalizeStoredAiAgent('gemini')).toBeNull()
|
||||
expect(normalizeStoredAiAgent('kiro')).toBeNull()
|
||||
expect(normalizeStoredAiAgent('hermes')).toBeNull()
|
||||
expect(normalizeStoredAiAgent('cursor')).toBeNull()
|
||||
})
|
||||
|
||||
|
|
@ -40,29 +40,25 @@ describe('aiAgents helpers', () => {
|
|||
expect(statuses.claude_code).toEqual({ status: 'installed', version: '1.0.20' })
|
||||
expect(statuses.codex).toEqual({ status: 'missing', version: null })
|
||||
expect(statuses.copilot).toEqual({ status: 'installed', version: '1.0.58' })
|
||||
expect(statuses.opencode).toEqual({ status: 'installed', version: '0.3.1' })
|
||||
expect(statuses.pi).toEqual({ status: 'installed', version: '0.70.2' })
|
||||
expect(statuses.antigravity).toEqual({ status: 'installed', version: 'Antigravity CLI 1.0.0' })
|
||||
expect(statuses.kiro).toEqual({ status: 'installed', version: '0.12.0' })
|
||||
expect(statuses.hermes).toEqual({ status: 'installed', version: 'Hermes Agent 0.16.0' })
|
||||
expect(statuses.opencode).toBeUndefined()
|
||||
expect(statuses.pi).toBeUndefined()
|
||||
expect(statuses.antigravity).toBeUndefined()
|
||||
expect(statuses.kiro).toBeUndefined()
|
||||
expect(statuses.hermes).toBeUndefined()
|
||||
})
|
||||
|
||||
it('normalizes legacy Gemini status payloads to Antigravity', () => {
|
||||
it('does not expose legacy Gemini status payloads', () => {
|
||||
const statuses = normalizeAiAgentsStatus({
|
||||
gemini: { installed: true, version: '0.5.1' },
|
||||
})
|
||||
|
||||
expect(statuses.antigravity).toEqual({ status: 'installed', version: '0.5.1' })
|
||||
expect(statuses.antigravity).toBeUndefined()
|
||||
})
|
||||
|
||||
it('cycles through the supported agents', () => {
|
||||
expect(getNextAiAgentId('claude_code')).toBe('codex')
|
||||
expect(getNextAiAgentId('codex')).toBe('copilot')
|
||||
expect(getNextAiAgentId('copilot')).toBe('opencode')
|
||||
expect(getNextAiAgentId('opencode')).toBe('pi')
|
||||
expect(getNextAiAgentId('pi')).toBe('antigravity')
|
||||
expect(getNextAiAgentId('antigravity')).toBe('kiro')
|
||||
expect(getNextAiAgentId('kiro')).toBe('hermes')
|
||||
expect(getNextAiAgentId('hermes')).toBe('claude_code')
|
||||
expect(getNextAiAgentId('copilot')).toBe('claude_code')
|
||||
expect(getNextAiAgentId('opencode')).toBe('claude_code')
|
||||
})
|
||||
})
|
||||
|
|
|
|||
|
|
@ -40,37 +40,40 @@ export const AI_AGENT_DEFINITIONS: readonly AiAgentDefinition[] = [
|
|||
shortLabel: 'Copilot',
|
||||
installUrl: 'https://docs.github.com/en/copilot/how-tos/copilot-cli/set-up-copilot-cli/install-copilot-cli',
|
||||
},
|
||||
{
|
||||
] as const
|
||||
|
||||
const LEGACY_AI_AGENT_DEFINITIONS: Partial<Record<AiAgentId, AiAgentDefinition>> = {
|
||||
opencode: {
|
||||
id: 'opencode',
|
||||
label: 'OpenCode',
|
||||
shortLabel: 'OpenCode',
|
||||
installUrl: 'https://opencode.ai/docs/',
|
||||
},
|
||||
{
|
||||
pi: {
|
||||
id: 'pi',
|
||||
label: 'Pi',
|
||||
shortLabel: 'Pi',
|
||||
installUrl: 'https://pi.dev',
|
||||
},
|
||||
{
|
||||
antigravity: {
|
||||
id: 'antigravity',
|
||||
label: 'Antigravity CLI',
|
||||
label: 'Antigravity',
|
||||
shortLabel: 'Antigravity',
|
||||
installUrl: 'https://antigravity.google/docs/cli/install',
|
||||
},
|
||||
{
|
||||
kiro: {
|
||||
id: 'kiro',
|
||||
label: 'Kiro',
|
||||
shortLabel: 'Kiro',
|
||||
installUrl: 'https://kiro.dev/docs/cli',
|
||||
},
|
||||
{
|
||||
hermes: {
|
||||
id: 'hermes',
|
||||
label: 'Hermes Agent',
|
||||
shortLabel: 'Hermes',
|
||||
installUrl: 'https://hermes-agent.nousresearch.com/docs/getting-started/quickstart',
|
||||
},
|
||||
] as const
|
||||
}
|
||||
|
||||
export function createAiAgentAvailability(status: AiAgentStatus = 'checking', version: string | null = null): AiAgentAvailability {
|
||||
return { status, version }
|
||||
|
|
@ -94,7 +97,6 @@ export function createMissingAiAgentsStatus(): AiAgentsStatus {
|
|||
}
|
||||
|
||||
export function normalizeStoredAiAgent(value: string | null | undefined): AiAgentId | null {
|
||||
if (value === 'gemini') return 'antigravity'
|
||||
if (AI_AGENT_DEFINITIONS.some((definition) => definition.id === value)) return value as AiAgentId
|
||||
return null
|
||||
}
|
||||
|
|
@ -104,7 +106,9 @@ export function resolveDefaultAiAgent(value: string | null | undefined): AiAgent
|
|||
}
|
||||
|
||||
export function getAiAgentDefinition(agent: AiAgentId): AiAgentDefinition {
|
||||
return AI_AGENT_DEFINITIONS.find((definition) => definition.id === agent) ?? AI_AGENT_DEFINITIONS[0]
|
||||
return AI_AGENT_DEFINITIONS.find((definition) => definition.id === agent)
|
||||
?? LEGACY_AI_AGENT_DEFINITIONS[agent]
|
||||
?? AI_AGENT_DEFINITIONS[0]
|
||||
}
|
||||
|
||||
function normalizeAvailability(agent: { installed?: boolean | null; version?: string | null } | null | undefined): AiAgentAvailability {
|
||||
|
|
@ -116,7 +120,7 @@ function normalizeAvailability(agent: { installed?: boolean | null; version?: st
|
|||
}
|
||||
|
||||
function payloadForAgent(payload: AiAgentsStatusPayload | null | undefined, agent: AiAgentId) {
|
||||
return agent === 'antigravity' ? payload?.antigravity ?? payload?.gemini : payload?.[agent]
|
||||
return payload?.[agent]
|
||||
}
|
||||
|
||||
export function normalizeAiAgentsStatus(payload: AiAgentsStatusPayload | null | undefined): AiAgentsStatus {
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ describe('ai target provider contract', () => {
|
|||
})
|
||||
})
|
||||
|
||||
it('accepts legacy agent ids saved in the default target field', () => {
|
||||
it('falls back safely when the default target contains a hidden legacy agent', () => {
|
||||
const target = resolveAiTarget({
|
||||
default_ai_agent: 'claude_code',
|
||||
default_ai_target: 'kiro',
|
||||
|
|
@ -67,12 +67,12 @@ describe('ai target provider contract', () => {
|
|||
|
||||
expect(target).toMatchObject({
|
||||
kind: 'agent',
|
||||
agent: 'kiro',
|
||||
id: 'agent:kiro',
|
||||
agent: 'claude_code',
|
||||
id: 'agent:claude_code',
|
||||
})
|
||||
})
|
||||
|
||||
it('uses the legacy default agent when a saved agent target is stale', () => {
|
||||
it('falls back safely when the saved legacy default agent is no longer selectable', () => {
|
||||
const target = resolveAiTarget({
|
||||
default_ai_agent: 'kiro',
|
||||
default_ai_target: 'agent:claude_code',
|
||||
|
|
@ -80,8 +80,8 @@ describe('ai target provider contract', () => {
|
|||
|
||||
expect(target).toMatchObject({
|
||||
kind: 'agent',
|
||||
agent: 'kiro',
|
||||
id: 'agent:kiro',
|
||||
agent: 'claude_code',
|
||||
id: 'agent:claude_code',
|
||||
})
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,46 @@
|
|||
import { describe, expect, it } from 'vitest'
|
||||
import {
|
||||
educationMetricsFromSheet,
|
||||
isEducationWorkLakePath,
|
||||
routeEducationInstruction,
|
||||
} from './educationWorkLake'
|
||||
|
||||
describe('routeEducationInstruction', () => {
|
||||
it.each([
|
||||
['整理一下这个表格里面的数据', 'sheet'],
|
||||
['对比一下并做一个对比图', 'chart'],
|
||||
['把结果做成仪表盘', 'dashboard'],
|
||||
['起草一份教研文档', 'document'],
|
||||
['找一下课程知识库', 'knowledge'],
|
||||
] as const)('routes %s to %s', (instruction, expectedSurface) => {
|
||||
expect(routeEducationInstruction(instruction).surface).toBe(expectedSurface)
|
||||
})
|
||||
|
||||
it('returns a stable safe fallback without claiming execution', () => {
|
||||
expect(routeEducationInstruction('帮我看看')).toMatchObject({
|
||||
surface: 'knowledge',
|
||||
capabilityId: 'HL-MOD-KNOWLEDGE-001',
|
||||
reason: 'safe-fallback',
|
||||
})
|
||||
})
|
||||
|
||||
it('prioritizes dashboards over their underlying chart keyword', () => {
|
||||
expect(routeEducationInstruction('把对比图放进仪表盘')).toMatchObject({
|
||||
surface: 'dashboard',
|
||||
capabilityId: 'HL-MOD-DASHBOARD-001',
|
||||
})
|
||||
})
|
||||
|
||||
it('projects numeric spreadsheet rows into chart metrics', () => {
|
||||
expect(educationMetricsFromSheet('---\n_display: sheet\n---\n班级,平均分\n一班,86\n二班,91\n备注,待补')).toEqual([
|
||||
{ label: '一班', value: 86 },
|
||||
{ label: '二班', value: 91 },
|
||||
])
|
||||
})
|
||||
|
||||
it('recognizes the server-hosted education entry without matching similar words', () => {
|
||||
expect(isEducationWorkLakePath('/jd/education/')).toBe(true)
|
||||
expect(isEducationWorkLakePath('/jd/education/assets/app.js')).toBe(true)
|
||||
expect(isEducationWorkLakePath('/jd/educational/')).toBe(false)
|
||||
})
|
||||
})
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
export const EDUCATION_SURFACES = [
|
||||
'document',
|
||||
'sheet',
|
||||
'chart',
|
||||
'dashboard',
|
||||
'knowledge',
|
||||
] as const
|
||||
|
||||
export type EducationSurface = typeof EDUCATION_SURFACES[number]
|
||||
|
||||
export type EducationInstructionRoute = {
|
||||
capabilityId: string
|
||||
reason: 'keyword-match' | 'safe-fallback'
|
||||
surface: EducationSurface
|
||||
}
|
||||
|
||||
export type EducationMetric = {
|
||||
label: string
|
||||
value: number
|
||||
}
|
||||
|
||||
const ROUTES: ReadonlyArray<{
|
||||
capabilityId: string
|
||||
keywords: readonly string[]
|
||||
surface: EducationSurface
|
||||
}> = [
|
||||
{
|
||||
capabilityId: 'HL-MOD-DASHBOARD-001',
|
||||
keywords: ['仪表盘', '看板', 'dashboard'],
|
||||
surface: 'dashboard',
|
||||
},
|
||||
{
|
||||
capabilityId: 'HL-MOD-CHART-001',
|
||||
keywords: ['对比图', '图表', '柱状图', '折线图', 'chart'],
|
||||
surface: 'chart',
|
||||
},
|
||||
{
|
||||
capabilityId: 'HL-MOD-SHEET-001',
|
||||
keywords: ['表格', '数据', '计算', '统计', 'sheet', 'spreadsheet'],
|
||||
surface: 'sheet',
|
||||
},
|
||||
{
|
||||
capabilityId: 'HL-MOD-DOC-001',
|
||||
keywords: ['文档', '教案', '报告', '总结', '起草', 'document'],
|
||||
surface: 'document',
|
||||
},
|
||||
{
|
||||
capabilityId: 'HL-MOD-KNOWLEDGE-001',
|
||||
keywords: ['知识库', '课程', '资料', '搜索', '找', 'knowledge'],
|
||||
surface: 'knowledge',
|
||||
},
|
||||
]
|
||||
|
||||
export function routeEducationInstruction(instruction: string): EducationInstructionRoute {
|
||||
const normalizedInstruction = instruction.trim().toLocaleLowerCase()
|
||||
const route = ROUTES.find((candidate) =>
|
||||
candidate.keywords.some((keyword) => normalizedInstruction.includes(keyword)))
|
||||
|
||||
if (route) {
|
||||
return {
|
||||
capabilityId: route.capabilityId,
|
||||
reason: 'keyword-match',
|
||||
surface: route.surface,
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
capabilityId: 'HL-MOD-KNOWLEDGE-001',
|
||||
reason: 'safe-fallback',
|
||||
surface: 'knowledge',
|
||||
}
|
||||
}
|
||||
|
||||
export function educationMetricsFromSheet(content: string): EducationMetric[] {
|
||||
const body = content.includes('---')
|
||||
? content.split('---').slice(2).join('---')
|
||||
: content
|
||||
|
||||
return body
|
||||
.trim()
|
||||
.split(/\r?\n/)
|
||||
.slice(1)
|
||||
.map((row) => {
|
||||
const [label = '', value = ''] = row.split(',')
|
||||
return { label: label.trim(), value: Number(value.trim()) }
|
||||
})
|
||||
.filter((metric) => metric.label.length > 0 && Number.isFinite(metric.value))
|
||||
}
|
||||
|
||||
export function isEducationWorkLakePath(pathname: string): boolean {
|
||||
return pathname.split('/').filter(Boolean).includes('education')
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ export const GUANGHU_CHANNEL_ROUTES = [
|
|||
'eternal-lake-heart',
|
||||
'light-lake',
|
||||
'heartbeat-core',
|
||||
'education-work-lake',
|
||||
'love-core',
|
||||
'servers',
|
||||
] as const
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1000,6 +1000,20 @@
|
|||
"locale.ukUA": "Ukrainian",
|
||||
"locale.svSE": "Swedish",
|
||||
"locale.skSK": "Slovak",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content",
|
||||
"hololake.home.ariaLabel": "HoloLake Era world entry",
|
||||
"hololake.home.eyebrow": "Guanghu Language World · Fifth Domain",
|
||||
"hololake.home.lead": "Language-personality-driven operating system",
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1000,6 +1000,20 @@
|
|||
"locale.ukUA": "乌克兰语",
|
||||
"locale.svSE": "瑞典语",
|
||||
"locale.skSK": "斯洛伐克语",
|
||||
"education.title": "教育工作湖",
|
||||
"education.description": "人格体通过语言指令调出并编辑文档、表格、对比图、仪表盘与知识,所有呈现在用户设备完成。",
|
||||
"education.hostingState": "临时隔离承载",
|
||||
"education.instructionLabel": "告诉人格体你要处理什么",
|
||||
"education.instructionPlaceholder": "例如:整理这个表格,并生成一个对比仪表盘",
|
||||
"education.runInstruction": "运行指令",
|
||||
"education.openedInsideApp": "已在应用内打开",
|
||||
"education.surfaceNavigation": "教育工作区界面",
|
||||
"education.document": "文档",
|
||||
"education.sheet": "表格",
|
||||
"education.chart": "对比图",
|
||||
"education.dashboard": "仪表盘",
|
||||
"education.knowledge": "知识",
|
||||
"education.documentLabel": "教研文档内容",
|
||||
"hololake.home.ariaLabel": "HoloLake Era 世界入口",
|
||||
"hololake.home.eyebrow": "光湖语言世界 · 第五域",
|
||||
"hololake.home.lead": "语言人格驱动操作系统",
|
||||
|
|
|
|||
|
|
@ -1121,5 +1121,19 @@
|
|||
"hololake.login.errorTitle": "The world entrance did not open",
|
||||
"hololake.login.retry": "Try again",
|
||||
"hololake.login.privacy": "HoloLake never receives or stores your mailbox address. The Fifth Domain controller resolves the bound Guanghu number.",
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready"
|
||||
"hololake.login.nodeReady": "Fifth Domain world entrance ready",
|
||||
"education.title": "Education Work Lake",
|
||||
"education.description": "A client-rendered workspace where the persona can open and edit documents, spreadsheets, charts, dashboards, and knowledge through language instructions.",
|
||||
"education.hostingState": "Temporary isolated hosting",
|
||||
"education.instructionLabel": "Tell the persona what you want to work on",
|
||||
"education.instructionPlaceholder": "For example: organize this spreadsheet and create a comparison dashboard",
|
||||
"education.runInstruction": "Run instruction",
|
||||
"education.openedInsideApp": "Opened inside the app",
|
||||
"education.surfaceNavigation": "Education workspace surfaces",
|
||||
"education.document": "Document",
|
||||
"education.sheet": "Spreadsheet",
|
||||
"education.chart": "Chart",
|
||||
"education.dashboard": "Dashboard",
|
||||
"education.knowledge": "Knowledge",
|
||||
"education.documentLabel": "Education document content"
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue