@gotcos/glasses-server 6.39.0 → 6.39.1

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 CHANGED
@@ -1,3 +1,16 @@
1
+ ## 6.39.1
2
+
3
+ Durable jobs now remember they ran on Ollama.
4
+
5
+ FIXED: 6.39.0 allowed `provider: 'ollama'` in the durable-job types and the
6
+ runtime stamped it, but the journal sanitizer (`safeLinkage`) and the replay
7
+ reader (`applyLinkage`) both stripped it -- so a live or replayed Ollama job
8
+ came back providerless and the phone could never acknowledge which engine
9
+ answered. Both now persist `ollama` and `ollamaRunId`; unknown providers still
10
+ strip. Pinned by journal round-trip tests, mutation-verified.
11
+
12
+ No other changes; pairs with COS Glasses 6.8.436 and COS Control 0.5.74.
13
+
1
14
  ## 6.39.0
2
15
 
3
16
  Ollama is a fourth G2 picker, hidden unless a local daemon answers.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gotcos/glasses-server",
3
- "version": "6.39.0",
3
+ "version": "6.39.1",
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": {
@@ -550,11 +550,11 @@ export class QueryJobStore {
550
550
  }
551
551
 
552
552
  private applyLinkage(snapshot: QueryJobSnapshot, raw: Record<string, unknown>): void {
553
- const provider = raw.provider === 'claude' || raw.provider === 'codex' || raw.provider === 'cursor'
553
+ const provider = raw.provider === 'claude' || raw.provider === 'codex' || raw.provider === 'cursor' || raw.provider === 'ollama'
554
554
  ? raw.provider
555
555
  : undefined
556
556
  if (provider) snapshot.provider = provider
557
- const fields = ['resolvedModel', 'cliSessionId', 'claudeRunId', 'codexRunId', 'codexThreadId', 'cursorRunId'] as const
557
+ const fields = ['resolvedModel', 'cliSessionId', 'claudeRunId', 'codexRunId', 'codexThreadId', 'cursorRunId', 'ollamaRunId'] as const
558
558
  for (const field of fields) {
559
559
  const value = safeOptional(raw[field])
560
560
  if (value) snapshot[field] = value
@@ -886,7 +886,11 @@ export class QueryJobStore {
886
886
 
887
887
  private safeLinkage(linkage: QueryJobProviderLinkage): QueryJobProviderLinkage {
888
888
  return {
889
- ...(linkage.provider === 'claude' || linkage.provider === 'codex' || linkage.provider === 'cursor'
889
+ // 'ollama' joined this allowlist in 6.39.1. The 6.39.0 types allowed it and
890
+ // query-job-runtime stamped it, but this sanitizer silently dropped it on
891
+ // persist -- so phone acknowledgement of a live or replayed Ollama job could
892
+ // never see its provider. Unknown providers still strip.
893
+ ...(linkage.provider === 'claude' || linkage.provider === 'codex' || linkage.provider === 'cursor' || linkage.provider === 'ollama'
890
894
  ? { provider: linkage.provider }
891
895
  : {}),
892
896
  ...(safeOptional(linkage.resolvedModel, 64) ? { resolvedModel: safeOptional(linkage.resolvedModel, 64) } : {}),
@@ -895,6 +899,7 @@ export class QueryJobStore {
895
899
  ...(safeOptional(linkage.codexRunId) ? { codexRunId: safeOptional(linkage.codexRunId) } : {}),
896
900
  ...(safeOptional(linkage.codexThreadId) ? { codexThreadId: safeOptional(linkage.codexThreadId) } : {}),
897
901
  ...(safeOptional(linkage.cursorRunId) ? { cursorRunId: safeOptional(linkage.cursorRunId) } : {}),
902
+ ...(safeOptional(linkage.ollamaRunId) ? { ollamaRunId: safeOptional(linkage.ollamaRunId) } : {}),
898
903
  }
899
904
  }
900
905