@gotcos/glasses-server 6.44.15 → 6.44.16
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/CHANGELOG.md +16 -0
- package/package.json +1 -1
- package/server/lib/cos-operations-meetings.ts +15 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
## 6.44.16
|
|
2
|
+
|
|
3
|
+
A G2 recording keeps its session id when its sidecar only exists in the server's own recordings folder.
|
|
4
|
+
|
|
5
|
+
- Chelsie and Queen, 2026-09-08: "Meetings to review is empty, and it says 3
|
|
6
|
+
recent meetings have no session id." On Miles's Mac the same three-row case
|
|
7
|
+
was three KC-week recordings whose markdown reached the operations tree
|
|
8
|
+
through git while the `.g2-chunks.json` sidecar, which is gitignored there,
|
|
9
|
+
did not; the row lost its session id and Speakers could not open it.
|
|
10
|
+
- `listCosOperationsMeetings` now reads the sidecar from the server's own
|
|
11
|
+
recordings root by the same stem when the copy beside the markdown is
|
|
12
|
+
missing (`recordingsRoot` option, default the data dir). The review lookup
|
|
13
|
+
already resolves a session through the standalone store, so the row opens.
|
|
14
|
+
A meeting with no sidecar anywhere still omits the field rather than
|
|
15
|
+
inventing one.
|
|
16
|
+
|
|
1
17
|
## 6.44.15
|
|
2
18
|
|
|
3
19
|
Voice profiles named after a spoken sentence are repaired at load.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gotcos/glasses-server",
|
|
3
|
-
"version": "6.44.
|
|
3
|
+
"version": "6.44.16",
|
|
4
4
|
"description": "COS Glasses \u2014 self-hosted AI heads-up-display server for Even G2 smart glasses, powered by Claude Code, Codex, Cursor Agent CLI, or local Ollama",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -19,6 +19,7 @@ import { discoveredDomains, domainAbbreviation as deriveAbbr, isSafeDomainName a
|
|
|
19
19
|
import type { MeetingDetail, MeetingMeta } from './meeting-store.js'
|
|
20
20
|
import { MEETING_SOURCE_MAX_BYTES, meetingDayCountsFromNames, meetingListLimit } from './meeting-store.js'
|
|
21
21
|
import { meetingVoiceReview, parseSidecarListHead } from './meeting-voice-review.js'
|
|
22
|
+
import { dataPath } from './data-dir.js'
|
|
22
23
|
|
|
23
24
|
/**
|
|
24
25
|
* The four domains of ONE user's COS. Retained as the documented example layout
|
|
@@ -528,9 +529,12 @@ export function listCosOperationsMeetings(options: {
|
|
|
528
529
|
domain?: string
|
|
529
530
|
month?: string
|
|
530
531
|
day?: string
|
|
532
|
+
/** The server's own recordings root; tests point it at a temp dir. */
|
|
533
|
+
recordingsRoot?: string
|
|
531
534
|
} = {}): CosOperationsMeetingMeta[] {
|
|
532
535
|
const operationsDir = resolveCosOperationsDir()
|
|
533
536
|
if (!operationsDir) return []
|
|
537
|
+
const recordingsRoot = options.recordingsRoot ?? dataPath('recordings')
|
|
534
538
|
|
|
535
539
|
const scoped = Boolean(options.month || options.day)
|
|
536
540
|
const limit = meetingListLimit(options.limit, scoped)
|
|
@@ -569,7 +573,17 @@ export function listCosOperationsMeetings(options: {
|
|
|
569
573
|
meta.recordId = `ops:${domain}:${month}:${file}`
|
|
570
574
|
meta.mutable = true
|
|
571
575
|
meta.canonicalRecord = `operations/${domain}/meetings/${month}/${file}`
|
|
572
|
-
|
|
576
|
+
// The sidecar is gitignored in the operations tree, so a G2 recording
|
|
577
|
+
// whose markdown arrived through git or iCloud (three of Miles's KC-week
|
|
578
|
+
// recordings, 2026-09-08) sits there without one and the row loses its
|
|
579
|
+
// session id, which reads as "cannot be reviewed". The server that saved
|
|
580
|
+
// it still holds the sidecar under its own recordings root by the same
|
|
581
|
+
// stem; read that one when the copy beside the markdown is missing.
|
|
582
|
+
let hints = sidecarListHints(monthDir, file)
|
|
583
|
+
if (!hints.sessionId && recordingsRoot) {
|
|
584
|
+
const fallbackDir = join(recordingsRoot, month)
|
|
585
|
+
if (existsSync(fallbackDir)) hints = sidecarListHints(fallbackDir, file)
|
|
586
|
+
}
|
|
573
587
|
if (hints.sessionId) meta.sessionId = hints.sessionId
|
|
574
588
|
if (hints.speakers.length > 0) {
|
|
575
589
|
meta.voiceReview = meetingVoiceReview(hints.speakers, hints.sessionId)
|