@gotcos/glasses-server 6.71.5 → 6.71.11
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/.env.example +4 -0
- package/CHANGELOG.md +36 -0
- package/README.md +31 -14
- package/bin/hooks/cos-session-hook +15 -3
- package/docs/test-plan-6.71.10.md +41 -0
- package/docs/test-plan-6.71.11.md +12 -0
- package/docs/test-plan-6.71.5.md +11 -0
- package/docs/test-plan-6.71.7.md +56 -0
- package/docs/test-plan-6.71.8.md +123 -0
- package/docs/test-plan-6.71.9.md +61 -0
- package/package.json +8 -2
- package/server/index.ts +5 -1
- package/server/lib/claude-hooks-installer.ts +1 -0
- package/server/lib/live-cos-ask.ts +36 -25
- package/server/lib/meeting-ask-confidence.ts +2 -2
- package/server/lib/meeting-ask-evidence.ts +76 -0
- package/server/lib/meeting-ask-follow-up.ts +61 -0
- package/server/lib/meeting-ask-followup.ts +27 -0
- package/server/lib/meeting-ask-grounding.ts +57 -0
- package/server/lib/meeting-ask-links.ts +34 -0
- package/server/lib/meeting-ask-runtime.ts +61 -11
- package/server/lib/meeting-ask-web.ts +22 -1
- package/server/lib/meeting-image-ocr.ts +57 -0
- package/server/lib/native/meeting-image-ocr.js +23 -0
- package/server/lib/permission-broker.ts +76 -19
- package/server/lib/work-intake-store.ts +21 -0
- package/server/routes/meeting-ask.ts +2 -2
- package/server/routes/memory.ts +27 -2
- package/server/routes/permission-broker.ts +6 -2
- package/server/routes/work-intake.ts +11 -1
- package/shared/meeting-ask.ts +3 -0
package/.env.example
CHANGED
|
@@ -74,6 +74,10 @@ BIND_HOST=0.0.0.0
|
|
|
74
74
|
# unset / other hold both
|
|
75
75
|
# Keep these here, not only in the LaunchAgent plist: this file survives Update Server.
|
|
76
76
|
# COS_PERMISSION_BROKER=questions
|
|
77
|
+
# 6.71.7: after Reinstall hooks, stamped interactive questions can wait at the desk
|
|
78
|
+
# while their native dialog stays available. Their card appears at the idle threshold
|
|
79
|
+
# and remains until answer/cancel/expiry. Approvals and old hooks keep the prior rules.
|
|
80
|
+
# Per-hook rollback without reinstall: echo 0 > ~/.cos-glasses/hook-ask-hold
|
|
77
81
|
# COS_PERMISSION_BROKER_DESK_IDLE_S=90 # never below 30
|
|
78
82
|
# COS_PERMISSION_BROKER_TIMEOUT_S=110 # clamped to 5..120 (under the hook's 125 s)
|
|
79
83
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,39 @@
|
|
|
1
|
+
## [6.71.11] - 2026-10-12 - Saved-meeting follow-ups and local phone memory search
|
|
2
|
+
|
|
3
|
+
- Reviewed Ask follow-ups retain the canonical meeting, original capture, question, answer and bounded source excerpts. Saves enter Work Review; accepting a task remains explicit. Retries never reopen resolved items.
|
|
4
|
+
- New keyword-only search and detail endpoints stay in the file tier and make no embedding or generation calls. Older endpoints keep their behavior.
|
|
5
|
+
- Requested What to ask returns at most one question and respects settled corrections. Source health remains read-only. Transcription and automatic cue flags remain disabled.
|
|
6
|
+
- Private candidate; phone and signed Control acceptance gates remain required.
|
|
7
|
+
|
|
8
|
+
## 6.71.10 · Concise, grounded meeting updates (candidate)
|
|
9
|
+
|
|
10
|
+
- Prioritize transcript neighborhoods for a speaker named in the question within the existing evidence budget. Accept user account/project clarification as orientation while keeping decisions, figures and deadlines tied to their cited passages.
|
|
11
|
+
- Default to one concise direct answer and a brief qualitative confidence assessment. Keep context-selection notices separate from uncertainty about a cited fact. Report time savings as participant claims; do not guess garbled counts or map names without evidence.
|
|
12
|
+
- Honor public application/documentation requests and legal-term definitions without requiring the word web. Preserve the existing public-word/privacy gates, bounded lookups and tools-off answer runner. Prefer observed primary-source domains for the two bounded page reads. Displayed public links cite their observed URL source; unmatched links are withheld.
|
|
13
|
+
- Includes 6.71.9 image-text support and earlier candidate broker fixes. Compatible with 629; clickable inline citations additionally require companion 630 and the pending Control citation change. Transcription and live-cue canaries stay disabled. Acceptance gates: `docs/test-plan-6.71.10.md`.
|
|
14
|
+
|
|
15
|
+
## 6.71.9 · Phone image text in Meeting Ask (candidate)
|
|
16
|
+
|
|
17
|
+
- Read text from phone screenshots and photos locally with Apple Vision on macOS, matching Control Meeting Ask's image-text path. Preserve table row positions and admit extracted text as revisioned F evidence. No extra model call or cloud OCR is introduced.
|
|
18
|
+
- Check the full extract for credentials before truncation. Bound extraction concurrency/time/output; recheck media lifecycle and file revisions after extraction. Cancellation, removal and maintenance cannot revive image evidence. Saved answers keep their admitted revision.
|
|
19
|
+
- Explain unreadable text and extraction failures. This supports image text, not general photo descriptions or video understanding. Small figures and skewed tables still require confirmation.
|
|
20
|
+
- Includes 6.71.8 grounding and the pending 6.71.7 broker update. Existing 629 companions are compatible. Transcription/live-cue flags stay disabled. Acceptance gates: `docs/test-plan-6.71.9.md`.
|
|
21
|
+
|
|
22
|
+
## 6.71.8 · Grounded Meeting Ask follow-ups (candidate)
|
|
23
|
+
|
|
24
|
+
- Select connected transcript passages so corrections, historical dates, units and hypothetical scenarios stay with their amounts. Broad financial questions retain relevant topics across the recording within the existing evidence budget.
|
|
25
|
+
- Follow-ups recover bounded, server-owned transcript quotations and remove prior request-local citation labels. A later answer cannot lend evidence to an earlier cutoff; changed file revisions are not silently restored. Finalized quotations keep unique citation IDs after recovery.
|
|
26
|
+
- A narrow cash guard withholds hypothetical proceeds presented as current balances, including scenarios split across adjacent audio chunks. Financial summaries distinguish participant reports from verified documents and omit unrelated purchasing boilerplate. No additional model call or automatic web lookup is introduced.
|
|
27
|
+
- Includes the pending 6.71.7 question broker changes and its hook reinstall requirement. Existing companions remain compatible; this server change does not require another EHPK or Control build.
|
|
28
|
+
- Experimental transcription and live-cue flags remain disabled. Candidate replay and release gates: `docs/test-plan-6.71.8.md`. This is not a published release or a claim of general financial fact-checking.
|
|
29
|
+
|
|
30
|
+
## 6.71.7 · Session questions stay answerable when you step away
|
|
31
|
+
|
|
32
|
+
- After Reinstall hooks in COS Control, interactive AskUserQuestion requests from the new hook can stay pending while the native Mac dialog remains available. With an answering client connected, the glasses card appears when the Mac reaches its desk-idle threshold (90 seconds by default), then stays visible until answered, canceled, expired or handed back. First answer wins.
|
|
33
|
+
- A current hold-capable client poll qualifies the new questions without fresh wearer input. No connected client or recent presence still means Mac-only. Approvals, unstamped hooks and background sessions retain their existing rules. Pending questions poll every three seconds; idle polling remains ten seconds.
|
|
34
|
+
- Disable the new hook rule without reinstalling with `echo 0 > ~/.cos-glasses/hook-ask-hold`. Downgrading to 6.71.5 requires Reinstall hooks afterward. Codex may ask to trust the reinstalled hooks.
|
|
35
|
+
- No Control update or app reinstall is required for the question rule. Companion 6.10.629 separately fixes the Meeting Ask status-row layout jump and includes 628. Physical phone/glasses acceptance remains a release gate. All transcription and grounded-cue experiments stay disabled.
|
|
36
|
+
|
|
1
37
|
## 6.71.5 · public-topic meeting fact-checks
|
|
2
38
|
|
|
3
39
|
- Meeting Ask can use recent public-topic passages for fact-checks and cost comparisons after an explicit persisted opt-in. It defaults off; private topics, speaker identities, unrelated passages, files, calendar and memory cannot lend search vocabulary. Older companion builds remain compatible.
|
package/README.md
CHANGED
|
@@ -232,20 +232,16 @@ own) replays rather than repeats.
|
|
|
232
232
|
sub-agents omitted) and `recent_turns_more` to the detail payload, read backward from
|
|
233
233
|
the end of the transcript; without `turns` the payload is unchanged. The glasses use it
|
|
234
234
|
to scroll back through a running session's conversation.
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
The hook posts only after the desk has been idle 90 s; the server holds the request only
|
|
241
|
-
while the desk stays idle and a client that can answer keeps polling, and answers `{}`
|
|
242
|
-
(the Mac's own dialog) to everything else at once. A client that never polls (COS
|
|
243
|
-
Glasses 6.9.511 and earlier, COS Control) changes nothing.
|
|
235
|
+
Session questions (AskUserQuestion) and tool approvals can be answered from the glasses or phone through `POST /api/permission-requests/ask`. That route uses the per-install hook token checked before the body is read; other routes retain API-token authentication.
|
|
236
|
+
|
|
237
|
+
**6.71.7: Reinstall hooks in COS Control after updating.** The new hook stamps interactive questions with `askHold:1`. When an answering client is connected (a qualifying poll in the last 30 seconds), or wearer presence is still recent, COS holds the question while its native Mac dialog stays available. The card appears on the glasses after the Mac is idle for 90 seconds (the configured desk threshold). Once visible, returning to the desk does not remove it mid-read. The first desk or glasses answer wins; a matching completion, cancellation, session end, expired deadline, disconnected hook or maintenance drain clears it. A connected hold-capable app counts without a fresh touch. Without a connected client or recent presence, the question stays Mac-only.
|
|
238
|
+
|
|
239
|
+
The existing away-hold and hook timeout ceilings still apply; a question never outlives its hook. Approvals, unstamped hooks and background/child sessions keep the older desk-idle and presence rules described below. Roll back only the new question rule with `echo 0 > ~/.cos-glasses/hook-ask-hold` (no reinstall). Restore it with `echo 1 > ~/.cos-glasses/hook-ask-hold`. Downgrading the server requires **Reinstall hooks** again. Until reinstalling, Codex/ Cursor desk-cancel can be unavailable; Codex may request hook trust again. No Control release is needed.
|
|
244
240
|
|
|
245
241
|
The client contract (also at `/api/models` `capabilities.sessionQuestions`):
|
|
246
242
|
|
|
247
243
|
- Poll `GET /api/session-questions?client=glasses` (or `client=phone`) with X-Cos-Token
|
|
248
|
-
every `pollIntervalMs` (10,000). Only those two `client` values count as a live
|
|
244
|
+
every `pollIntervalMs` (3,000 while requests are pending; otherwise 10,000). Only those two `client` values count as a live
|
|
249
245
|
answerer; a poll without `client`, or with any other value, is answered but never
|
|
250
246
|
counts. A client quiet for `liveWindowMs` (30,000) hands every held request back,
|
|
251
247
|
except one the away hold holds (6.60.0, below).
|
|
@@ -261,10 +257,10 @@ The client contract (also at `/api/models` `capabilities.sessionQuestions`):
|
|
|
261
257
|
404 `not_found` after a server restart or once a settled item is pruned (10 minutes);
|
|
262
258
|
503 during a maintenance drain, when every held item has already gone back to the Mac.
|
|
263
259
|
|
|
264
|
-
|
|
260
|
+
For approvals and unstamped questions, touching the Mac hands a held request back to its dialog at once; the deadline is 110 s,
|
|
265
261
|
or the away hold's.
|
|
266
262
|
|
|
267
|
-
**The away hold (6.60.0).** A request that starts while you are away (the desk idle 90 s,
|
|
263
|
+
**The older away hold (6.60.0, retained for approvals and unstamped questions).** A request that starts while you are away (the desk idle 90 s,
|
|
268
264
|
the same threshold as above) is held for up to 10 minutes, but only when the glasses or the
|
|
269
265
|
phone that show held questions report that you touched them in the last 30 minutes.
|
|
270
266
|
The client contract (COS Glasses 6.9.563 and later):
|
|
@@ -472,7 +468,7 @@ both), `COS_PERMISSION_BROKER_DESK_IDLE_S` (default 90, never below 30),
|
|
|
472
468
|
`COS_PERMISSION_BROKER_AWAY_HOLD_S` (6.60.0: default 600, clamped to 30 through 600, never
|
|
473
469
|
past the installed hook's wait; `0` turns the away hold off),
|
|
474
470
|
`COS_PERMISSION_BROKER_AWAY_RECENT_CLIENT_S` (6.60.0: default 1800; the away hold applies
|
|
475
|
-
only when a `hold=1` client reported its wearer present within it; under 30 means the 30 s
|
|
471
|
+
for unstamped questions/approvals only when a `hold=1` client reported its wearer present within it; under 30 means the 30 s
|
|
476
472
|
live window),
|
|
477
473
|
`COS_DIARIZER` (6.61.0: default `nemotron`; `embedding` keeps the voiceprint only),
|
|
478
474
|
`COS_NEMOTRON_CLI` and `COS_NEMOTRON_MODELS` (6.61.0: the FluidAudio CLI and its
|
|
@@ -886,7 +882,7 @@ BIND_HOST=0.0.0.0 npm run start:server
|
|
|
886
882
|
phone disconnects; COS Control's maintenance status counts it (`heldJobs`). The phone sends
|
|
887
883
|
one prompt at a time, so anything you ask meanwhile waits on the phone behind it. The
|
|
888
884
|
interrupted run itself is not re-run automatically; retry it if you want it.
|
|
889
|
-
- *Session questions never reach the glasses?*
|
|
885
|
+
- *Session questions never reach the glasses?* For 6.71.7 stamped questions, reinstall hooks, check the kill switch and a connected answering client; the card appears only after the desk-idle threshold. For older hooks the server holds one only when every
|
|
890
886
|
gate passes. `/api/health` `permissionBroker.lastFastPath` names the last reason a
|
|
891
887
|
request went straight to the Mac's dialog: `no_client` (no client could answer: no poll
|
|
892
888
|
with `client=glasses|phone` and without `hold=1` in the last 30 s, no `hold=1` poll in the
|
|
@@ -950,6 +946,19 @@ Meeting Ask includes a qualitative evidence-confidence note. New questions about
|
|
|
950
946
|
|
|
951
947
|
Transcription can mishear names, numbers, negations and speakers. Missing or incomplete words do not prove a refusal or commitment. Calendar and user-confirmed meeting context guide retrieval, without proving what was said. Timestamp and progressive-refinement canaries remain disabled by default; this release does not claim improved raw ASR accuracy or a passed 30-second refinement gate. Existing companion clients remain compatible.
|
|
952
948
|
|
|
949
|
+
### Meeting Ask grounding in server 6.71.8 (candidate)
|
|
950
|
+
|
|
951
|
+
The candidate selects connected transcript passages and recovers bounded original
|
|
952
|
+
quotations for follow-ups. Previous answers' citation labels are removed before
|
|
953
|
+
reasoning so an older label cannot be mistaken for another passage in the new
|
|
954
|
+
selection. Hypothetical cash proceeds are kept separate from current balances,
|
|
955
|
+
including scenarios split across short audio chunks. The guard is deliberately
|
|
956
|
+
narrow: confidence notes and citations do not constitute a financial audit or
|
|
957
|
+
verified tax treatment. Later files enrich a new Ask without rewriting earlier
|
|
958
|
+
answers. Existing companions and COS Control remain compatible; no new EHPK is
|
|
959
|
+
needed for these server changes. Transcription experiments stay disabled. See
|
|
960
|
+
`docs/test-plan-6.71.8.md` for replay, regression and combined release gates.
|
|
961
|
+
|
|
953
962
|
### Public-topic fact-checks in server 6.71.5
|
|
954
963
|
|
|
955
964
|
Meeting Ask supports an explicit `publicTopics` choice in `/api/meeting-ask/config`. It defaults false; companion 6.10.628 exposes the choice in its Model sheet. Enabling it applies to the next Ask on that paired Mac, including COS Control. A bare “fact-check this” can select a public claim from recent transcript quotations. “How much more is that than the average?” retrieves public cost benchmarks using the previously admitted public topic. Summaries and action presets do not send transcript topics to the web.
|
|
@@ -957,3 +966,11 @@ Meeting Ask supports an explicit `publicTopics` choice in `/api/meeting-ask/conf
|
|
|
957
966
|
A tools-off selector proposes the public topic locally through the configured meeting provider. Admission requires selected supporting transcript passages and adjacent ASR fragments, a public category, observed subject words and amounts, and no sensitive details or speaker identity. Generic research terms may be added; unsupported descriptive words are dropped. Only the admitted query reaches web search. Linked pages are untrusted bounded excerpts; answers cite them and state confidence. The selector is semantic, so ambiguous topics are withheld rather than treated as public.
|
|
958
967
|
|
|
959
968
|
The new companion also removes the native-console feedback loop observed during stale bridge errors. Physical iPhone/Even app crash recovery still requires device acceptance. Timestamp/HQ flags remain disabled.
|
|
969
|
+
|
|
970
|
+
### Meeting Ask phone image text (6.71.9 candidate)
|
|
971
|
+
|
|
972
|
+
On macOS, phone screenshots and photos containing text now use local Apple Vision
|
|
973
|
+
OCR, like Control Meeting Ask. Extracted words become cited file evidence.
|
|
974
|
+
Small numbers and tables may be misread; photos without text are not visually
|
|
975
|
+
interpreted. No new EHPK or Control build is required for existing 629 companions.
|
|
976
|
+
[Acceptance plan](docs/test-plan-6.71.9.md). Experimental transcription flags remain off.
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
# COS session hook (glasses-server 6.48.0; Cursor Stop follow-up 6.51.0; halt check 6.53.0; single entry 6.53.3; away hold wait 6.60.0; Codex and Cursor parity 6.62.0). Installed into ~/.claude/settings.json by
|
|
3
3
|
# `--hooks install`; Claude Code runs it with the hook event name as $1 and the event
|
|
4
4
|
# payload on stdin. It spools one JSON file per event into the hook spool and exits 0
|
|
5
|
-
# on every path. Only PermissionRequest ever talks to the server,
|
|
6
|
-
# desk has been idle. Everything else is a file write, so the server being down or
|
|
5
|
+
# on every path. Only PermissionRequest ever talks to the server, for approvals only when the
|
|
6
|
+
# desk has been idle; stamped questions can also wait while the Mac dialog is visible. Everything else is a file write, so the server being down or
|
|
7
7
|
# restarting never delays a Claude session.
|
|
8
8
|
#
|
|
9
9
|
# 6.53.0: PreToolUse is SYNCHRONOUS with no matcher, so the first branch below runs before
|
|
@@ -157,9 +157,19 @@ if [ "$EVENT" = PermissionRequest ]; then
|
|
|
157
157
|
if [ ${#2} -le 4 ] && [ "$2" -ge 20 ] && [ "$2" -le 3600 ]; then WAIT=$2; STAMP_WAIT=",\"hookWaitS\":$2"; fi ;;
|
|
158
158
|
esac
|
|
159
159
|
fi
|
|
160
|
+
# 6.71.x: only a correctly read question from the new script skips the desk fast path.
|
|
161
|
+
# The first tool_name is the payload's own. A failed read keeps the legacy path.
|
|
162
|
+
STAMP_ASK=''
|
|
163
|
+
if [ "$EVENT" = PermissionRequest ] && [ "$(cat "$GH/hook-ask-hold" 2>/dev/null)" != 0 ]; then
|
|
164
|
+
ASK_HEAD=$(head -c 4096 "$T.in")
|
|
165
|
+
case "$ASK_HEAD" in *'"tool_name"'*)
|
|
166
|
+
ASK_TN=${ASK_HEAD#*'"tool_name"'}; ASK_TN=${ASK_TN#"${ASK_TN%%[!:[:space:]]*}"}
|
|
167
|
+
case "$ASK_TN" in '"AskUserQuestion"'*) STAMP_ASK=',"askHold":1' ;; esac ;;
|
|
168
|
+
esac
|
|
169
|
+
fi
|
|
160
170
|
# 6.62.0: the provider, when the command said it (only the Codex command does).
|
|
161
171
|
STAMP_PROV=''; [ -z "$PROV" ] || STAMP_PROV=",\"provider\":\"$PROV\""
|
|
162
|
-
{ printf '{"ts":%s,"ppid":%s,"event":"%s"%s%s,"payload":' "$TS" "$PPID" "$EVENT" "$STAMP_WAIT" "$STAMP_PROV"; cat "$T.in"; printf '}\n'; } > "$T"
|
|
172
|
+
{ printf '{"ts":%s,"ppid":%s,"event":"%s"%s%s%s,"payload":' "$TS" "$PPID" "$EVENT" "$STAMP_WAIT" "$STAMP_PROV" "$STAMP_ASK"; cat "$T.in"; printf '}\n'; } > "$T"
|
|
163
173
|
rm -f "$T.in"
|
|
164
174
|
# 6.51.0, CURSOR ONLY. Cursor runs this hook from ~/.claude/settings.json for its own
|
|
165
175
|
# composers, and submits a Stop hook's {"followup_message":...} as that composer's next
|
|
@@ -193,9 +203,11 @@ cleanup() { rm -f "$T.req"; }
|
|
|
193
203
|
# Desk-active fast path decided HERE (about 30 ms): no HTTP at all when someone is at the
|
|
194
204
|
# keyboard. An unreadable idle time fails the same way: nothing is contacted, the native
|
|
195
205
|
# dialog shows.
|
|
206
|
+
if [ -z "$STAMP_ASK" ]; then
|
|
196
207
|
IDLE_NS=$(ioreg -c IOHIDSystem 2>/dev/null | awk -F'= ' '/HIDIdleTime/{print $2; exit}')
|
|
197
208
|
DESK_S=$(cat "$GH/hook-desk-idle-s" 2>/dev/null || echo 90)
|
|
198
209
|
{ [ -n "$IDLE_NS" ] && [ "$(( ${IDLE_NS%.*} / 1000000000 ))" -ge "$DESK_S" ]; } || { cleanup; exit 0; }
|
|
210
|
+
fi
|
|
199
211
|
TOK=$(cat "$GH/hook-token" 2>/dev/null); [ -n "$TOK" ] || { cleanup; exit 0; } # no token, no request
|
|
200
212
|
PORT=$(cat "$GH/hook-port" 2>/dev/null || echo 3141)
|
|
201
213
|
# 6.60.0 (QA round 1, W7): curl runs as a tracked child, not only inside $(...), and this
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# 6.71.10 candidate — concise grounded Meeting Ask
|
|
2
|
+
|
|
3
|
+
This adds to 6.71.9 image text and the earlier candidate broker/privacy gates.
|
|
4
|
+
It changes answer retrieval, response instructions and link attribution, not transcription.
|
|
5
|
+
|
|
6
|
+
## Release integration
|
|
7
|
+
|
|
8
|
+
- Server: merge `codex/hc-meeting-answers` on top of 6.71.9. Includes the prior image-text and question-broker work; do not replace those changes with an older branch.
|
|
9
|
+
- Phone: merge the 630 citation branch based on the 629 meeting-grounding ledger. Keep 629 as rollback. No package identity, SDK or permission change.
|
|
10
|
+
- Control: merge the separate citation branch into the next Control release alongside other approved work. It does not change the scripts-directory or memory/threads provider selection. That separate work still needs its own canaries.
|
|
11
|
+
- Keep `COS_BATCH_HQ_TIMESTAMPS`, `COS_MEETING_ASK_HQ_EVIDENCE`, `COS_LIVE_CUES_FOUNDATION_DEV`, `COS_LIVE_CUES_GROUNDED_V2` and `COS_LIVE_CUES_RESEARCH` unset/0. Preserve the released progressive-HQ baseline.
|
|
12
|
+
- Candidate packaging and draft PRs do not promote npm latest, the Hub main alias, Control appcast or marketplace state.
|
|
13
|
+
|
|
14
|
+
## Automated checks
|
|
15
|
+
|
|
16
|
+
1. Named-speaker neighborhood selection stays inside the existing evidence budget. History remains server-owned, request-local and cutoff-scoped.
|
|
17
|
+
2. Clarification of an account/project guides retrieval without establishing new amounts, commitments, deadlines or identities.
|
|
18
|
+
3. Public application/link/documentation requests honor the existing public-word and sensitive-detail gates. Primary-source ranking only chooses among observed URLs; retain DNS/address checks and at most two page reads.
|
|
19
|
+
4. Plain and Markdown public links resolve to observed URL sources, not summary cards. Unobserved links are withheld; invented source IDs never acquire targets.
|
|
20
|
+
5. Selected context does not automatically make an explicitly cited fact uncertain; incomplete/unavailable evidence still affects confidence.
|
|
21
|
+
6. Full server suite and TypeScript, companion suite/typecheck/Even contracts, native Control compile and core citation checks. Phone WebKit: repeated T1 IDs in different answers open the owning retained source, never another answer; unknown IDs stay inert.
|
|
22
|
+
7. Replay a private field recording using each original question's transcript cutoff and an isolated journal. No future turns or transcript-based search vocabulary outside existing consent gates. Keep failures, source-read counts, latency and raw outputs in the private release ledger.
|
|
23
|
+
|
|
24
|
+
## Phone / Control field gates
|
|
25
|
+
|
|
26
|
+
Use Claude Sonnet. Old saved answers are retained; submit new questions to test the new server.
|
|
27
|
+
|
|
28
|
+
1. In a saved meeting with several speakers, ask: `Summarize [speaker]'s updates for [account]. Keep it brief.`
|
|
29
|
+
2. Correct it: `I mean [account] managed by [speaker]. Summarize those updates.`
|
|
30
|
+
Pass: accepts the intended account, includes the relevant speaker passages, avoids guessing done/status or attaching a deadline to the wrong feature. Normally <=120 words including confidence.
|
|
31
|
+
3. Tap a T citation within each new answer. Pass: expands the exact retained quote for that answer. Show in transcript works only where its turn still exists; an older answer retains its quote.
|
|
32
|
+
4. Ask a public application/link question naming the public program. Tap W in the answer and open its URL. Pass: direct link, observed URL source, distinguishes search-result-only evidence from a page read; no invented credit amount or annual recurrence.
|
|
33
|
+
5. Ask for the reported method behind a time saving. Pass: describes the method, calls hours a participant report, does not invent a garbled page count or independently verify savings.
|
|
34
|
+
6. Switch Ask/Transcript while polling; scroll up, then open/close source details. Pass: preserved reading position and no new jump. Repeat with the keyboard visible and in landscape. The pre-existing short-viewport composer issue is recorded in the private ledger and must not be called fixed by this release.
|
|
35
|
+
7. Repeat the image-upload and question answer/Esc gates from 6.71.9/6.71.8. Test memory/threads against the same pre-install totals if other provider setup changes are merged.
|
|
36
|
+
|
|
37
|
+
## Promotion / rollback
|
|
38
|
+
|
|
39
|
+
Promote only after the physical phone and Control citation taps, prior image/broker gates and integration checks pass. A replay is evidence of improvement on the sampled recording, not a general guarantee of factual accuracy or phone end-to-end latency. Keep malformed model replies visible as failures; do not add hidden retries to make replay numbers pass.
|
|
40
|
+
|
|
41
|
+
Rollback candidates by restoring the prior packaged server, 629 companion and previous signed Control app. Preserve stored meeting journals and file revisions. If downgrading below the pending broker changes, reinstall hooks as the prior test plan requires.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 6.71.11 candidate gates
|
|
2
|
+
|
|
3
|
+
Use companion 6.10.632 and the matching Control candidate. Experimental flags remain disabled.
|
|
4
|
+
|
|
5
|
+
1. Reopen a saved meeting. Ask a follow-up. Verify its original capture cutoff, a retained citation, and history after restarting Control.
|
|
6
|
+
2. On phone Memory, type at least two characters, tap the matching local record, then return to results. Typing is keyword-only. An older server must refuse the new route rather than run semantic search.
|
|
7
|
+
3. On a completed saved answer choose Save as follow-up. Edit the draft; Cancel writes nothing. Save adds one Work Review item with the original answer and source excerpts. Repeating the save produces the same item. A resolved item stays resolved.
|
|
8
|
+
4. Request What to ask: at most one question with a cited reason. Solo prompts run only when tapped. No automatic cues.
|
|
9
|
+
5. Open Sources and context: actual availability counts and confirmed domain. Checked time is distinct from last sync; unreported sync time is identified.
|
|
10
|
+
6. Regression gates: citation taps, image use, fixed Checking COS height on Ask/Transcript, small viewport composer, offline draft recovery, reconnect, saved history, memory/threads symlink file tier unchanged.
|
|
11
|
+
|
|
12
|
+
Do not promote stable until physical phone/G2 and signed Control gates pass. No claim of improved ASR accuracy is made.
|
package/docs/test-plan-6.71.5.md
CHANGED
|
@@ -34,3 +34,14 @@ During a 10-minute recording, scroll up in Transcript while fresh/refined chunks
|
|
|
34
34
|
## Outstanding physical gate
|
|
35
35
|
|
|
36
36
|
WKWebView probes and the reproduced error-loop negative canary do not establish that the Even host will survive every iPhone/G2 background transition. Public companion promotion requires the device test above. Server and Control can ship independently while the versioned 628 companion remains a private candidate. The frozen 627 artifact and public companion 624 remain available for rollback.
|
|
37
|
+
|
|
38
|
+
## Public release verification — October 11, 2026
|
|
39
|
+
|
|
40
|
+
- Frozen runtime source: `85a3e61`. Full suite: 424 files, 6,562 passed / two existing skips. Typecheck passed; production dependency audit reported zero vulnerabilities.
|
|
41
|
+
- Published `@gotcos/glasses-server@6.71.5` as latest after official npm web/passkey approval. Registry download and integrity verified; fresh-cache npx installation and launcher help passed.
|
|
42
|
+
- Exact tested tarball: 422 files, 3,981,207 bytes; shasum `24c194244a9ee5ac0b8dbc8c95d379d57f77944c`; integrity `sha512-C9ucAmOVYiN4pB+p7gpKkO6ofw/E0PWXqTRPY8ql3J6sV9wSYsTNWzMQPTYXOfr26KIERegmHW+XpO6dMSl4pA==`.
|
|
43
|
+
- Six actual-provider field replays passed. Haiku fact/compare/average: 27.102 / 39.132 / 33.127 seconds; Sonnet: 21.906 / 31.129 / 28.601 seconds. Both fact-checks found the matching article; both comparisons and average follow-ups executed two public searches, provided evidence confidence and calculated cited example comparisons without claiming an established average. These timings measure research-answer completion, not audio refinement.
|
|
44
|
+
- Eight real-provider privacy/topic-selection canaries passed: six private or injected topics produced no public query; two public topics admitted only observed vocabulary. Classification is not a universal privacy guarantee.
|
|
45
|
+
- The unchanged 624 phone/lens renderers displayed all six answers, confidence and linked article sources. The current Hub main alias remains byte-identical to 624; the repository is private and no anonymous Hub download is claimed.
|
|
46
|
+
- Companion 628 strict suite: 6,949 passed / one skip; types and manufacturer contracts passed. Twenty WKWebView cases passed, including four transcript anchors at zero pixel drift. Final timer-failure and bridge-error feedback gates passed. The iPhone/G2 physical transition and audio-continuity gate remains pending; 628 is a private candidate.
|
|
47
|
+
- Control 0.5.285/build338 is signed, notarized, stapled and publicly downloadable; its full source suite and isolated onboarding with public server 6.71.4 passed. The ZIP SHA-256 is `5dd189f9ce9f7b49a404327a8bf5087de814fc765035122b95a8ed1756173696`. A clean-Mac/TCC/updater-swap test is not claimed.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# 6.71.7 / companion 6.10.629 acceptance plan
|
|
2
|
+
|
|
3
|
+
Candidate only. Server base is public 6.71.5; 6.71.6 is reserved by the separate God's Eye session. App base is frozen 628 (5a42294). Control 0.5.285/build338 can manage this update without a new Control build. This plan adds to the 6.71.5/628 meeting and bridge gates; it does not replace them.
|
|
4
|
+
|
|
5
|
+
## Automated evidence
|
|
6
|
+
|
|
7
|
+
- Desktop D1 passed before building: a synchronous 60-second PermissionRequest hook started at 21:32:43 CDT; the native question was visible and Red was accepted at 21:32:59, before the hook ended at 21:33:43. A second question canceled with Esc while its card had focus; the hook received SIGTERM and no process remained. Esc in the chat composer did not cancel the card. Remote Control remains untested.
|
|
8
|
+
- Complete server suite: 6,574 passed / 2 skipped. A final focused installer/broker pass also covers the previous exact script fixture and current reinstall state.
|
|
9
|
+
- New broker tests compare 144 approval/unstamped admission and tick cases to the actual 6.71.5 implementation. Stamped questions cover connected/no-client, active/idle/unknown desk, 90-second visibility latch, timeout ceilings, canceled hooks, session boundaries/Interrupt, child events, background requests, parallel questions and first-answer races. A desk completion may add either string or array answers to its input without changing which question it settles.
|
|
10
|
+
- Eleven isolated guard mutations are killed by their named assertions after a green baseline. Original source bytes are restored and the release checkout is never mutated.
|
|
11
|
+
- Companion status probe measures 20 updates per Ask/Transcript case at 390x844, 320x568 and 390x420, with long content scrolled above the bottom. Composer position, reading height, scroll position and status height must stay within 0.5 px. The private old-CSS control must fail. Standard/full WebKit-strict tests, release typechecks, manufacturer contracts, startup timer quarantine and package asset hashes must pass on final bundles.
|
|
12
|
+
- Receipts/logs: `/Users/ukaoma/cos-release-candidates/glasses-question-answering-2026-10-11/`. Local automated evidence does not prove stability inside the physical Even host.
|
|
13
|
+
|
|
14
|
+
## Phone status canary (629 on the current server)
|
|
15
|
+
|
|
16
|
+
1. Sideload the new **6.10.629** file; preserve 628 for rollback. Start a five-minute G2 recording. Open VIEWS > live meeting > Ask.
|
|
17
|
+
2. Ask: **“Catch me up on this meeting so far.”** Watch Checking COS appear and disappear. The composer and reading area must stay in place. Scroll up through an answer and repeat the question; your position must stay steady.
|
|
18
|
+
3. Switch to Transcript, scroll up, and wait through at least two refreshes. New chunks and COS checks must not move the passage you are reading. Jump to live must still work.
|
|
19
|
+
4. Open the keyboard and repeat in Ask, then hide it. The Ask button remains reachable. Changes caused by opening/closing the keyboard are expected; status polling while it is open must not cause additional movement.
|
|
20
|
+
5. Briefly disconnect the phone's network. Connection notices remain readable, recording status remains honest, and reconnect restores Ask. A long notice/Retry must be accessible within the scrollable status area.
|
|
21
|
+
6. Lock the phone for five minutes, return to Even, and verify G2 capture, transcript continuity, reconnect and no crash. Stop/save, reopen the meeting and check the saved transcript and Ask history. Include the original 628 dead-bridge/background gate; a WebKit layout probe does not qualify host crashes.
|
|
22
|
+
|
|
23
|
+
Pass: no status-related movement, no inaccessible controls, no recording loss/crash, and saved evidence/history retained. Record actual observed results rather than assuming a pass.
|
|
24
|
+
|
|
25
|
+
## Question broker canary (candidate server installed, hooks reinstalled)
|
|
26
|
+
|
|
27
|
+
Install the frozen candidate through the supported Control-managed server path with the retained 6.71.5 generation/tarball available. Do not start an unmanaged second server. Then click **Reinstall hooks** in Control once. A Codex hook-trust prompt, if shown, must be approved by the user. Do not infer that an app upgrade reinstalled server hooks.
|
|
28
|
+
|
|
29
|
+
Use a disposable interactive Claude Desktop Code session and this prompt:
|
|
30
|
+
|
|
31
|
+
> Call AskUserQuestion once with the question "Pick a color" and options Red and Blue, then tell me which I picked.
|
|
32
|
+
|
|
33
|
+
| Test | Action | Required result |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| T1 desk answer | Answer Red immediately at the Mac, with glasses connected | Native dialog remains usable; model reports Red; no card appears later |
|
|
36
|
+
| T2 step away | Ask again and leave the Mac untouched | Card appears after the configured desk-idle threshold (90 s default), within two 3-second polls; answer Blue from glasses; model reports Blue |
|
|
37
|
+
| T3 return to desk | After T2's card appears, return and answer at the Mac | Card stays until the desk answer, then closes within two polls; no late duplicate answer |
|
|
38
|
+
| T4 quiet wearer | Leave glasses connected but untouched for over 30 minutes, then ask and step away | Connected hold polling still qualifies; the card arrives after desk idle |
|
|
39
|
+
| T5 no answerer | Disconnect all answering clients and ensure no recent wearer presence | Question stays Mac-only immediately; no ten-minute orphan hold |
|
|
40
|
+
| T6 race | In separate runs, answer first at desk, then first on glasses; attempt late answer from the other surface | Exactly one model result; late answer ignored/rejected |
|
|
41
|
+
| T7 Esc | Ask at desk, focus the question card, press Esc | Tool/hook stops; no delayed card, stuck request or stray curl process |
|
|
42
|
+
| T8 approval | Request a harmless permission-controlled tool at desk, then while away | Existing approval policy and return-to-desk handback unchanged |
|
|
43
|
+
| T9 reinstall/provider | Check Claude, Codex and Cursor hook status after reinstall | Current scripts; desk-cancel readiness restored; new question routing only where supported |
|
|
44
|
+
| T10 rollback switch | `echo 0 > ~/.cos-glasses/hook-ask-hold`, then ask at desk | Today's immediate desk rule returns; `echo 1 > ~/.cos-glasses/hook-ask-hold` restores the new rule |
|
|
45
|
+
| T11 old companion | Exercise question cards on frozen public 624 and 627/628 | Existing routes/answer shapes still work; no new client-ID rejection |
|
|
46
|
+
| T12 stop/drain | Cancel a held tool; end its session; perform a controlled server drain | Corresponding card closes; no stale resurrection or orphan request |
|
|
47
|
+
|
|
48
|
+
Known copy limitation: an answer at the Mac may close the old companion card with “Handed back to the Mac.” Answer-source provenance/security is deferred; this build does not require a new client identity header from 627/628.
|
|
49
|
+
|
|
50
|
+
## Rollout and rollback
|
|
51
|
+
|
|
52
|
+
All physical rows are pending until witnessed. Do not declare a public release qualified from the local checks alone. Preserve other sessions' worktrees, changes and 6.71.6 reservation. Merge only the tested source branches once all required gates pass; publish a frozen npm tarball and promote the companion/Hub only within explicit release authorization.
|
|
53
|
+
|
|
54
|
+
Cue/transcription experiment flags stay off: `COS_LIVE_CUES_FOUNDATION_DEV`, `COS_LIVE_CUES_GROUNDED_V2`, `COS_LIVE_CUES_RESEARCH`, `COS_BATCH_HQ_TIMESTAMPS`, `COS_MEETING_ASK_HQ_EVIDENCE`. Existing `COS_MEETING_PROGRESSIVE_HQ=1` baseline is retained. There is no claim that the experimental transcription or Haiku cues passed accuracy qualification.
|
|
55
|
+
|
|
56
|
+
To roll back the new question behavior quickly, write `0` to `~/.cos-glasses/hook-ask-hold`. To downgrade the server, reinstall retained 6.71.5 through Control and **Reinstall hooks again** (mandatory: the old package does not recognize the new script SHA). Roll the companion back to the preserved versioned 628 EHPK; the server question rule does not require 629. No Control upgrade is necessary.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Server 6.71.8 candidate: Meeting Ask grounding and citations
|
|
2
|
+
|
|
3
|
+
Includes the pending 6.71.7 interactive-question broker update. This plan adds to
|
|
4
|
+
`test-plan-6.71.7.md` and the 6.71.5 web/privacy acceptance gates; none is replaced.
|
|
5
|
+
The candidate is built in `codex/meeting-grounding`, based on `595ebf4`. Server
|
|
6
|
+
6.71.6 remains reserved for the separate workstream. No public release is implied.
|
|
7
|
+
|
|
8
|
+
## Behavior and boundaries
|
|
9
|
+
|
|
10
|
+
- Select complete neighborhoods within the existing 32,000-character transcript
|
|
11
|
+
budget. Broad money questions retain corrections, dates, units, balance
|
|
12
|
+
statements and conditional setups across the recording. The last-ten-minutes
|
|
13
|
+
contract for What to ask is unchanged.
|
|
14
|
+
- Prior answers remain navigation context. Strip their request-local citation
|
|
15
|
+
tokens; recover at most 16 server-owned transcript quotations within 6,000
|
|
16
|
+
characters of quoted text and metadata. Current admitted wording wins for the
|
|
17
|
+
same turn. Keep the prior four question/answer pairs bounded. Scope by meeting,
|
|
18
|
+
server instance and audio cutoff. Do not restore old file revisions or invent
|
|
19
|
+
a canonical turn target for finalized quotations.
|
|
20
|
+
- Keep current and recovered transcript IDs distinct from finalized quotation
|
|
21
|
+
IDs. Saved answer records remain immutable. Later uploads enrich a new Ask;
|
|
22
|
+
they do not rewrite an earlier answer.
|
|
23
|
+
- A narrow cash backstop prevents cited hypothetical proceeds from becoming
|
|
24
|
+
current balances or a fabricated conflict with a current screenshot. It carries
|
|
25
|
+
scenario wording across nearby short chunks, preserves explicitly separate
|
|
26
|
+
current evidence, and does not use unrelated liability amounts as cash proof.
|
|
27
|
+
This is not general numeric entailment, tax validation or a financial audit.
|
|
28
|
+
- Prompt guidance preserves explicit corrections while keeping final documents
|
|
29
|
+
unverified, distinguishes historical transactions from proposals, avoids
|
|
30
|
+
guessed bill types and unnecessary ordering language, and favors central
|
|
31
|
+
personal-conversation facts. Confidence remains qualitative on every answer.
|
|
32
|
+
- No additional provider call, new dependency, automatic public lookup, ASR
|
|
33
|
+
rewrite, timestamp configuration or background job is introduced.
|
|
34
|
+
|
|
35
|
+
## Automated gates
|
|
36
|
+
|
|
37
|
+
1. Typecheck and the complete server suite on frozen source.
|
|
38
|
+
2. Regression cases: conditional cash, independent current balances, false
|
|
39
|
+
current-versus-future conflicts, split scenario chunks, correction neighborhoods,
|
|
40
|
+
broad financial retrieval, repeated citation labels, future/cross-meeting
|
|
41
|
+
recovery, forged client source metadata, old file revisions and finalized-ID
|
|
42
|
+
collisions. Existing old-client routes, web consent/privacy, canceled requests,
|
|
43
|
+
completed-record immutability and question broker tests must stay green.
|
|
44
|
+
3. Isolated mutation gate: stale labels, cross-meeting/future/file recovery,
|
|
45
|
+
disabled cash guard, fragmented evidence, finalized citation collision and
|
|
46
|
+
loss of scenario context. Require a green baseline and assertion failures for
|
|
47
|
+
all eight mutations. Never mutate the release checkout or live data.
|
|
48
|
+
4. Pack inventory: test files and private recording/replay artifacts are absent;
|
|
49
|
+
the new runtime modules and this plan are present. Verify the frozen tarball
|
|
50
|
+
SHA-256 and a fresh-cache local-tarball CLI help invocation.
|
|
51
|
+
|
|
52
|
+
## Private recording replay
|
|
53
|
+
|
|
54
|
+
Keep the actual recordings, screenshots, request snapshots, provider answers and
|
|
55
|
+
receipts outside this public repository and npm package. Use the original
|
|
56
|
+
question cutoffs: Summary at 20:59.633 and money highlights at 37:53.548. Later
|
|
57
|
+
financial passages and files must not leak backward into these comparisons.
|
|
58
|
+
|
|
59
|
+
Replay the original selected provider with tools, connectors and hooks disabled,
|
|
60
|
+
using isolated data/audit directories and a 30-second cancellation deadline.
|
|
61
|
+
Compare the original field answers, a fresh baseline, and three candidate money
|
|
62
|
+
answers. Also run one candidate summary and a new Ask with the uploaded files.
|
|
63
|
+
Record all failed rounds; do not replace the original negative evidence with
|
|
64
|
+
only a passing scorecard. Inspect actual prose and supporting quotations: a
|
|
65
|
+
citation-membership check alone does not prove that a claim is true.
|
|
66
|
+
|
|
67
|
+
Required observations:
|
|
68
|
+
|
|
69
|
+
- Conditional proceeds stay conditional; present cash is not invented.
|
|
70
|
+
- The explicit bill correction is available and recognized; the final invoice
|
|
71
|
+
remains unverified. A corrected subissue does not settle the entire bill.
|
|
72
|
+
- Earlier reported savings retain an original quote and a current scoped citation.
|
|
73
|
+
- Historical conversions are distinguished from the later stop-converting stance.
|
|
74
|
+
- A file-aware answer cites the current file revision, distinguishes present
|
|
75
|
+
balances from future scenarios, leaves ambiguous OCR labels unresolved, and
|
|
76
|
+
treats nonmatching exact totals as a discrepancy rather than rounding them equal.
|
|
77
|
+
- One provider call and no public/private search per replay; each observed run
|
|
78
|
+
completes within 30 seconds. This small recording replay is not a general
|
|
79
|
+
latency guarantee or a transcription-accuracy qualification.
|
|
80
|
+
|
|
81
|
+
## Field acceptance before the combined public release
|
|
82
|
+
|
|
83
|
+
Use the supported COS Control-managed candidate installation path. Preserve the
|
|
84
|
+
known-good 6.71.5 generation; do not start another server. Reinstall hooks once
|
|
85
|
+
because this candidate includes 6.71.7. Complete the existing phone 629 status
|
|
86
|
+
and question-broker acceptance rows in `test-plan-6.71.7.md`.
|
|
87
|
+
|
|
88
|
+
On a saved meeting, ask:
|
|
89
|
+
|
|
90
|
+
> What are the money highlights so far?
|
|
91
|
+
|
|
92
|
+
Then:
|
|
93
|
+
|
|
94
|
+
> Separate current balances, past transactions, and hypothetical plans. Show what
|
|
95
|
+
> still needs confirmation and cite each source.
|
|
96
|
+
|
|
97
|
+
Attach a document or screenshot, then:
|
|
98
|
+
|
|
99
|
+
> Update the highlights using the new file. Which figures are supported by the
|
|
100
|
+
> file, and which were only discussed as possibilities?
|
|
101
|
+
|
|
102
|
+
Open each citation on both phone and Control. It must show the supporting
|
|
103
|
+
quotation/file revision, not the passage that happened to reuse an older number.
|
|
104
|
+
Repeat while new chunks arrive; prior completed answers remain unchanged. Check
|
|
105
|
+
old 624/627/628 companion compatibility and the existing 629 status stability gate.
|
|
106
|
+
|
|
107
|
+
## Flags, rollout and rollback
|
|
108
|
+
|
|
109
|
+
Keep `COS_BATCH_HQ_TIMESTAMPS`, `COS_MEETING_ASK_HQ_EVIDENCE`,
|
|
110
|
+
`COS_LIVE_CUES_FOUNDATION_DEV`, `COS_LIVE_CUES_GROUNDED_V2` and
|
|
111
|
+
`COS_LIVE_CUES_RESEARCH` disabled. Retain the existing progressive-HQ baseline
|
|
112
|
+
configuration. These changes do not claim better raw transcription.
|
|
113
|
+
|
|
114
|
+
The candidate combines both server updates without altering their other
|
|
115
|
+
worktrees. Merge only tested branches. npm publication, registry integrity,
|
|
116
|
+
clean-cache registry install and marketplace promotion remain separate release
|
|
117
|
+
steps. Assess release notes/docs and current companion/Control compatibility at
|
|
118
|
+
that time. The grounding change needs no new client API or EHPK; frozen 629
|
|
119
|
+
remains the separate phone-status candidate.
|
|
120
|
+
|
|
121
|
+
Rollback: reinstall retained public server 6.71.5 through Control and reinstall
|
|
122
|
+
hooks again. The question-rule off switch from 6.71.7 remains available. Keep the
|
|
123
|
+
previous 628 EHPK and its hash; no completed Ask records are migrated or rewritten.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Server 6.71.9 candidate: phone image text in Meeting Ask
|
|
2
|
+
|
|
3
|
+
Adds to the 6.71.8 grounding, 6.71.7 question-broker and 6.71.5 web/privacy gates.
|
|
4
|
+
Experimental transcription and live-cue flags remain disabled; the released
|
|
5
|
+
progressive HQ baseline remains unchanged. Companion 6.10.629 is compatible;
|
|
6
|
+
no new Control app or EHPK is required for this server addition.
|
|
7
|
+
|
|
8
|
+
## Behavior
|
|
9
|
+
|
|
10
|
+
Phone screenshots and photos containing text are read locally using macOS Apple
|
|
11
|
+
Vision, like COS Control's Meeting Ask image-text companions. Results become
|
|
12
|
+
revisioned file evidence with F citations. OCR rows preserve spatial association;
|
|
13
|
+
small numbers, merged cells and skewed tables remain imperfect. The assistant
|
|
14
|
+
must distinguish the displayed metric from overall strength or preference.
|
|
15
|
+
This is text extraction, not general visual reasoning. Photos without readable
|
|
16
|
+
text and videos are not silently treated as understood. Non-macOS servers return
|
|
17
|
+
an explicit failed extraction. Existing TXT/MD/CSV/JSON/PDF-text behavior stays.
|
|
18
|
+
|
|
19
|
+
Two OCR processes maximum, 10 seconds per image and 20 seconds per attachment
|
|
20
|
+
batch, bounded output and no network/model call for extraction. Credential checks
|
|
21
|
+
cover the whole extract before truncation. Removal, expiry, reservation, changed
|
|
22
|
+
revisions and maintenance admission are rechecked after OCR. Shutdown aborts and
|
|
23
|
+
waits for extraction. Historical answers retain the revision they actually used.
|
|
24
|
+
Re-add an old unsupported image after installing; old answers are never rewritten.
|
|
25
|
+
|
|
26
|
+
## Automated gates
|
|
27
|
+
|
|
28
|
+
- Native Apple Vision replay of the actual uploaded IMG_7299.jpeg.
|
|
29
|
+
- Replay the original "Who is miles top character?" and explicit Crit Value
|
|
30
|
+
question with the original transcript cutoff in an isolated Ask/media store.
|
|
31
|
+
Require completion, Mavuika first, named metric, a resolving F citation,
|
|
32
|
+
qualitative confidence, no unsupported overall-strength conclusion and less
|
|
33
|
+
than 30 seconds including OCR. Searches are disabled in this replay.
|
|
34
|
+
- Credential screen labels, gutters and credentials past the text cap; empty and
|
|
35
|
+
failed OCR; retry; concurrent removal/deletion; maintenance/shutdown cancellation;
|
|
36
|
+
durable F evidence; table rows; output bounds; authenticated HTTP route.
|
|
37
|
+
- Full server suite, TypeScript check, production audit, clean diff and packaged
|
|
38
|
+
native JXA helper. Production publish gates still apply.
|
|
39
|
+
|
|
40
|
+
## Exact phone canary (Claude Sonnet)
|
|
41
|
+
|
|
42
|
+
1. Open the saved test meeting on the phone. Re-add IMG_7299.jpeg with +. Wait for
|
|
43
|
+
the attachment to become readable. Do not submit before upload/read finishes.
|
|
44
|
+
2. Ask: "Using the attached image, who is first in the displayed character table,
|
|
45
|
+
and what metric is shown? Cite the image."
|
|
46
|
+
Pass: Mavuika, Crit Value, an expandable image/file citation, uncertainty about
|
|
47
|
+
any unreadable digits. It must not substitute personality or writing style.
|
|
48
|
+
3. Ask: "Does that prove this is my strongest character overall?"
|
|
49
|
+
Pass: distinguishes the displayed metric from overall strength, with a current
|
|
50
|
+
image citation; no invented damage/build/team assessment.
|
|
51
|
+
4. Attach a clear screenshot of text or a price list. Ask for one exact visible
|
|
52
|
+
item/amount. Check the original and its citation. Then ask a follow-up.
|
|
53
|
+
5. Attach a photo without text. Pass: explicitly no readable text; no invented
|
|
54
|
+
visual description. Upload a synthetic credential screenshot (never a real
|
|
55
|
+
password). Pass: held; credential absent from answer and export.
|
|
56
|
+
6. Check Ask/Transcript, keyboard and background/resume behavior. The image row
|
|
57
|
+
should settle without losing the reading position. Saved history must retain
|
|
58
|
+
answers/citations. Repeat after reopening the saved meeting.
|
|
59
|
+
|
|
60
|
+
Public latest promotion remains gated by phone acceptance and the outstanding
|
|
61
|
+
question-broker / older-client / lifecycle checks from the earlier plans.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gotcos/glasses-server",
|
|
3
|
-
"version": "6.71.
|
|
3
|
+
"version": "6.71.11",
|
|
4
4
|
"description": "COS Glasses: 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": {
|
|
@@ -90,7 +90,13 @@
|
|
|
90
90
|
"docs/test-plan-6.71.2.md",
|
|
91
91
|
"!server/scripts/meeting-evidence-canary.ts",
|
|
92
92
|
"docs/test-plan-6.71.3.md",
|
|
93
|
-
"docs/test-plan-6.71.5.md"
|
|
93
|
+
"docs/test-plan-6.71.5.md",
|
|
94
|
+
"docs/test-plan-6.71.7.md",
|
|
95
|
+
"!server/scripts/question-hold-mutation-gate.mjs",
|
|
96
|
+
"docs/test-plan-6.71.8.md",
|
|
97
|
+
"docs/test-plan-6.71.9.md",
|
|
98
|
+
"docs/test-plan-6.71.10.md",
|
|
99
|
+
"docs/test-plan-6.71.11.md"
|
|
94
100
|
],
|
|
95
101
|
"author": "COS Contributors",
|
|
96
102
|
"license": "MIT",
|
package/server/index.ts
CHANGED
|
@@ -24,7 +24,7 @@ import { agentSessionStreamRouter } from './routes/agent-session-stream.js'
|
|
|
24
24
|
import { createAttachedTurnStream } from './lib/session-stream-producer.js'
|
|
25
25
|
import { claudeSessionsRouter } from './routes/claude-sessions.js'
|
|
26
26
|
import { createSessionHooksRouter } from './routes/session-hooks.js'
|
|
27
|
-
import { cachedHookStatus, claudeDeskRunning, onSessionRowEnded, deskIdleSeconds, deskTurnEndedAt, haltHandedOffTurn, providerHookSeen, registerDrainKickStats, registryIdleAfterStop, sessionHooksEnabled, sessionSignalStore, signalFor, startSessionHooksRuntime } from './lib/session-hooks-runtime.js'
|
|
27
|
+
import { cachedHookStatus, isCosSpawnedPid, registryEntrypointSync, claudeDeskRunning, onSessionRowEnded, deskIdleSeconds, deskTurnEndedAt, haltHandedOffTurn, providerHookSeen, registerDrainKickStats, registryIdleAfterStop, sessionHooksEnabled, sessionSignalStore, signalFor, startSessionHooksRuntime } from './lib/session-hooks-runtime.js'
|
|
28
28
|
import { clearingHaltOnSpawn, writeHaltMarker } from './lib/session-halt.js'
|
|
29
29
|
import { startProviderObserveRefresh } from './lib/provider-observe.js'
|
|
30
30
|
import { appendSessionCancelLedger, cancelHoldUntil as cancelHoldUntilFor, noteThreadCancelled, setDeskCancelReaders, threadCancel } from './lib/session-cancel.js'
|
|
@@ -277,6 +277,10 @@ const permissionBroker = new PermissionBroker({
|
|
|
277
277
|
mode: () => permissionBrokerMode(process.env, sessionHooksEnabled()),
|
|
278
278
|
admissionsOpen: maintenanceAdmissionsOpen,
|
|
279
279
|
lastQuestionsPollAt,
|
|
280
|
+
isBackgroundRequest: body => {
|
|
281
|
+
const b = body as { ppid?: number; payload?: {session_id?: string; agent_id?: unknown} }
|
|
282
|
+
return !!b.payload?.agent_id || isCosSpawnedPid(b.ppid ?? null) || registryEntrypointSync(b.payload?.session_id ?? '') === 'sdk-cli'
|
|
283
|
+
},
|
|
280
284
|
readDeskIdleSeconds: readHidIdleSeconds,
|
|
281
285
|
deskIdleSeconds,
|
|
282
286
|
timeoutMs: () => permissionBrokerTimeoutMs(process.env),
|
|
@@ -396,6 +396,7 @@ export const HALT_CAPABLE_PRIOR_SCRIPT_SHAS: readonly string[] = [
|
|
|
396
396
|
'df54677f79908893509ee87608cfe3f4a53ced03f88f337f16a63741d6b3d547',
|
|
397
397
|
'0e1bbb9816c9475436f89f6326d5504eccc9aa6519ff5e466b949d53a73d8439',
|
|
398
398
|
'1877c90c5359571dfc74c6d03395104a73925868147e8a50cd9d7b4226b1b5ca',
|
|
399
|
+
'0fd4f98801333399625701bdc83ed1a5906bbf18c449d0586daa6b8e58ada7f3',
|
|
399
400
|
]
|
|
400
401
|
|
|
401
402
|
/**
|