dsh-agent-office 4.6.1 → 4.6.2
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/lib/client.js +87 -25
- package/lib/index.js +16 -1
- package/lib/panel.html +152 -152
- package/lib/state.js +34 -0
- package/package.json +1 -1
- package/panel-src/assets/exp-uneven.png +0 -0
- package/panel-src/main.js +3 -1
package/lib/state.js
CHANGED
|
@@ -337,6 +337,40 @@ export async function fetchWeather(options = {}) {
|
|
|
337
337
|
}
|
|
338
338
|
}
|
|
339
339
|
|
|
340
|
+
/** 城市名 → 坐标;用于定位不可用时的天气回退。 */
|
|
341
|
+
const geocodeCache = new Map()
|
|
342
|
+
export async function fetchGeocode(options = {}) {
|
|
343
|
+
const name = String(options.name ?? '').trim()
|
|
344
|
+
if (!name) return { ok: false, error: '请输入城市名' }
|
|
345
|
+
if (name.length > 80) return { ok: false, error: '城市名过长' }
|
|
346
|
+
const cached = geocodeCache.get(name)
|
|
347
|
+
if (cached && Date.now() - cached.at < 24 * 3600 * 1000) return cached.payload
|
|
348
|
+
const url = `https://geocoding-api.open-meteo.com/v1/search?name=${encodeURIComponent(name)}&count=1&language=zh&format=json`
|
|
349
|
+
try {
|
|
350
|
+
const response = await fetch(url, { signal: AbortSignal.timeout(10_000) })
|
|
351
|
+
if (!response.ok) throw new Error('geocode HTTP ' + response.status)
|
|
352
|
+
const body = await response.json()
|
|
353
|
+
const hit = body?.results?.[0]
|
|
354
|
+
if (!hit) {
|
|
355
|
+
const payload = { ok: false, error: '没有找到这个城市,换个写法试试' }
|
|
356
|
+
geocodeCache.set(name, { at: Date.now(), payload })
|
|
357
|
+
return payload
|
|
358
|
+
}
|
|
359
|
+
const payload = {
|
|
360
|
+
ok: true,
|
|
361
|
+
name: hit.name,
|
|
362
|
+
admin1: hit.admin1 ?? '',
|
|
363
|
+
country: hit.country ?? '',
|
|
364
|
+
lat: Number(hit.latitude),
|
|
365
|
+
lon: Number(hit.longitude),
|
|
366
|
+
}
|
|
367
|
+
geocodeCache.set(name, { at: Date.now(), payload })
|
|
368
|
+
return payload
|
|
369
|
+
} catch (error) {
|
|
370
|
+
return { ok: false, error: '城市查询失败:' + String(error?.message ?? error) }
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
340
374
|
export function createNightShiftStore(options = {}) {
|
|
341
375
|
const sessionsDir = options.sessionsDir ?? join(process.env.DSH_HOME || join(homedir(), '.dsh'), 'sessions')
|
|
342
376
|
const maxAgents = Number(options.maxAgents ?? 8)
|
package/package.json
CHANGED
|
Binary file
|
package/panel-src/main.js
CHANGED
|
@@ -14,6 +14,7 @@ import faceSurprised from './assets/exp-surprised.png'
|
|
|
14
14
|
import faceThinking from './assets/exp-thinking.png'
|
|
15
15
|
import faceLoved from './assets/exp-loved.png'
|
|
16
16
|
import faceSlits from './assets/exp-slits.png'
|
|
17
|
+
import faceUneven from './assets/exp-uneven.png'
|
|
17
18
|
|
|
18
19
|
const API = '/agent-office/api/state'
|
|
19
20
|
const FLOOR_GAP = 4.0
|
|
@@ -358,6 +359,7 @@ const FACE_SRC = {
|
|
|
358
359
|
thinking: faceThinking,
|
|
359
360
|
loved: faceLoved,
|
|
360
361
|
slits: faceSlits,
|
|
362
|
+
uneven: faceUneven,
|
|
361
363
|
}
|
|
362
364
|
const faceTextures = {}
|
|
363
365
|
const faceLoader = new THREE.TextureLoader()
|
|
@@ -371,7 +373,7 @@ const GLASS_KEY = 'agent-office-ui-opacity'
|
|
|
371
373
|
let customFaceTexture = null
|
|
372
374
|
let customFaceData = ''
|
|
373
375
|
const FACE_FOR_STATUS = {
|
|
374
|
-
working: '
|
|
376
|
+
working: 'uneven',
|
|
375
377
|
need_me: 'surprised',
|
|
376
378
|
stuck: 'dizzy',
|
|
377
379
|
done: 'loved',
|