Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
commit
03634b1ca3
11340 files changed
+3442369
No files matched your search
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* Mirror of "which chats are mid-turn" to the main process.
|
||||
*
|
||||
* The renderer is the only side that knows a turn is in flight, and the main
|
||||
* process is the only side that can intercept a quit. This module bridges the
|
||||
* two: it publishes a small summary on every membership change, and
|
||||
* `electron/quit-guard.ts` turns that into the confirmation dialog.
|
||||
*
|
||||
* Imported for its side effect from `main.tsx`, alongside `store/translucency`.
|
||||
*/
|
||||
|
||||
import { computed } from 'nanostores'
|
||||
|
||||
import type { HermesActiveWork } from '@/global'
|
||||
import { $sessions } from '@/store/session'
|
||||
import { $workingSessionIds } from '@/store/session-states'
|
||||
|
||||
const $activeWork = computed([$workingSessionIds, $sessions], (workingIds, sessions): HermesActiveWork => {
|
||||
const titleById = new Map(sessions.map(session => [session.id, session.title?.trim() ?? '']))
|
||||
|
||||
return {
|
||||
count: workingIds.length,
|
||||
titles: workingIds.map(id => titleById.get(id) ?? '').filter(Boolean)
|
||||
}
|
||||
})
|
||||
|
||||
if (typeof window !== 'undefined') {
|
||||
// `$sessions` republishes on unrelated churn (previews, heartbeats), so only
|
||||
// send when the summary itself moved — this crosses a process boundary.
|
||||
let lastSent = ''
|
||||
|
||||
$activeWork.subscribe(work => {
|
||||
const next = JSON.stringify(work)
|
||||
|
||||
if (next === lastSent) {
|
||||
return
|
||||
}
|
||||
|
||||
lastSent = next
|
||||
window.hermesDesktop?.setActiveWork?.(work)
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user