@gotcos/glasses-server 6.43.1 → 6.43.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/CHANGELOG.md CHANGED
@@ -1,17 +1,32 @@
1
+ ## 6.43.2
2
+
3
+ Managed-server updates pass their Claude readiness proof again.
4
+
5
+ - **The proof no longer loads your MCP catalog.** COS Control verifies a
6
+ candidate server by running one real `claude -p --model haiku` query with
7
+ no tools. On Claude Code 2.1.251, `--tools ''` still loads every MCP
8
+ server's tool definitions, and on a Mac with a large fleet that alone was
9
+ about 244,000 tokens against Haiku's 200,000-token window: "Prompt is too
10
+ long", exit 1, zero API time, and the update rolled back to the previous
11
+ server every time (six attempts on 6.43.1). The proof now passes
12
+ `--strict-mcp-config` with an empty MCP config, which keeps it under
13
+ 20,000 tokens and answers in about two seconds. Nothing else changed.
14
+
1
15
  ## 6.43.1
2
16
 
3
17
  Two things the first night of the morning brief taught us, plus the depth
4
18
  behind each source.
5
19
 
6
- - **A running brief no longer collides with your next message.** The brief
7
- reserved #74 at 22:18 and was still running when the phone minted #74 for
8
- the next prompt at 22:25, because `/api/message-counter` only counted
9
- exchanges that had already been projected. Numbers held by admitted,
10
- not-yet-terminal durable jobs (and by the brief's own ledger row, which
11
- exists before the job does) now count toward the ceiling. New
12
- `lib/message-reservations.ts` registry; the job store keeps the number on
13
- its always-in-memory identity so the answer is synchronous and survives a
14
- restart.
20
+ - **A running brief can no longer collide with your next message.** A brief
21
+ holds its number for the minutes it runs, but `/api/message-counter` only
22
+ counted exchanges that had already been projected, so a phone whose counter
23
+ last synced at boot could mint the same number for its next prompt. Numbers
24
+ held by admitted, not-yet-terminal durable jobs (and by the brief's own
25
+ ledger row, which exists before the job does) now count toward the ceiling.
26
+ New `lib/message-reservations.ts` registry; the job store keeps the number
27
+ on its always-in-memory identity so the answer is synchronous and survives
28
+ a restart. (The double #74 reported on 6.9.443 was the companion showing one
29
+ exchange twice; companion 6.9.445 fixes that side.)
15
30
  - **Sources show what is behind them.** `GET /api/morning-brief` now carries
16
31
  `coverage`: one row per source with a state (`ready`, `empty`,
17
32
  `unavailable`, `runtime`) and a summary line such as "2,312 meetings
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gotcos/glasses-server",
3
- "version": "6.43.1",
3
+ "version": "6.43.2",
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": {
@@ -4,9 +4,12 @@
4
4
  // reports, and a durable job carries the number it was minted with until its
5
5
  // terminal projection writes the exchange into the session. Between admission
6
6
  // and projection the number existed nowhere the counter looked, so a second
7
- // producer minted it again: on 2026-09-01 the scheduled morning brief reserved
8
- // #74 at 22:18:40 and the phone handed #74 to "Cross surface" at 22:25:15,
9
- // because its counter only re-syncs at boot and the server said max was 73.
7
+ // producer could mint it again: a running morning brief holds its number for
8
+ // minutes while the phone's counter, which only re-syncs at boot, still sits
9
+ // below it. (The double "#74" seen on 2026-09-01 turned out to be the phone
10
+ // showing ONE exchange twice, a display-bus placeholder plus the hydrated
11
+ // row, fixed in companion 6.9.445. The window this closes is real all the
12
+ // same: the same night's ledger shows the brief holding #74 for 6m35s.)
10
13
  //
11
14
  // Every holder of a not-yet-projected number registers a source here. The
12
15
  // counter route and the brief's own reservation read the union. Sources
@@ -110,12 +110,23 @@ export function runBounded(
110
110
  export const CLAUDE_PROOF_MODEL = 'haiku'
111
111
  export const CLAUDE_PROOF_TIMEOUT_MS = 45_000
112
112
 
113
+ /** No MCP servers for the proof. Claude Code 2.1.251 turns `--tools ''`
114
+ * into "load the whole catalog, expose none of it", and on a Mac with a
115
+ * large MCP fleet that catalog alone was ~244K tokens against Haiku's 200K
116
+ * window: "Prompt is too long", exit 1, zero API time. Six 6.43.1 update
117
+ * attempts rolled back on 2026-09-01/02 before a single request was made.
118
+ * An explicit empty config with --strict-mcp-config keeps the proof under
119
+ * 20K tokens and is what a readiness check should be anyway. */
120
+ export const CLAUDE_PROOF_MCP_CONFIG = '{"mcpServers":{}}'
121
+
113
122
  export function claudeProofArgs(): string[] {
114
123
  return [
115
124
  '-p',
116
125
  '--model', CLAUDE_PROOF_MODEL,
117
126
  '--output-format', 'json',
118
127
  '--permission-mode', 'dontAsk',
128
+ '--strict-mcp-config',
129
+ '--mcp-config', CLAUDE_PROOF_MCP_CONFIG,
119
130
  '--tools', '',
120
131
  '--allowedTools', '',
121
132
  '--system-prompt', PROOF_PROMPT,