@extentos/mcp-server 0.0.94 → 0.1.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.
Files changed (43) hide show
  1. package/dist/tools/data/capabilities.d.ts +49 -0
  2. package/dist/tools/data/capabilities.d.ts.map +1 -1
  3. package/dist/tools/data/capabilities.js +37 -0
  4. package/dist/tools/data/capabilities.js.map +1 -1
  5. package/dist/tools/data/capabilityPatterns.d.ts.map +1 -1
  6. package/dist/tools/data/capabilityPatterns.js +499 -6
  7. package/dist/tools/data/capabilityPatterns.js.map +1 -1
  8. package/dist/tools/data/codeExamples.d.ts.map +1 -1
  9. package/dist/tools/data/codeExamples.js +916 -2
  10. package/dist/tools/data/codeExamples.js.map +1 -1
  11. package/dist/tools/data/version.d.ts +12 -0
  12. package/dist/tools/data/version.d.ts.map +1 -1
  13. package/dist/tools/data/version.js +17 -0
  14. package/dist/tools/data/version.js.map +1 -1
  15. package/dist/tools/definitions.d.ts.map +1 -1
  16. package/dist/tools/definitions.js +63 -3
  17. package/dist/tools/definitions.js.map +1 -1
  18. package/dist/tools/docs/index.d.ts.map +1 -1
  19. package/dist/tools/docs/index.js +115 -4
  20. package/dist/tools/docs/index.js.map +1 -1
  21. package/dist/tools/handlers/assertToolCalled.d.ts +3 -0
  22. package/dist/tools/handlers/assertToolCalled.d.ts.map +1 -0
  23. package/dist/tools/handlers/assertToolCalled.js +208 -0
  24. package/dist/tools/handlers/assertToolCalled.js.map +1 -0
  25. package/dist/tools/handlers/generateConnectionModule.js +21 -2
  26. package/dist/tools/handlers/generateConnectionModule.js.map +1 -1
  27. package/dist/tools/handlers/getCredentialGuide.d.ts.map +1 -1
  28. package/dist/tools/handlers/getCredentialGuide.js +33 -6
  29. package/dist/tools/handlers/getCredentialGuide.js.map +1 -1
  30. package/dist/tools/handlers/getProductionChecklist.d.ts.map +1 -1
  31. package/dist/tools/handlers/getProductionChecklist.js +52 -1
  32. package/dist/tools/handlers/getProductionChecklist.js.map +1 -1
  33. package/dist/tools/handlers/injectAssistantUtterance.d.ts +3 -0
  34. package/dist/tools/handlers/injectAssistantUtterance.d.ts.map +1 -0
  35. package/dist/tools/handlers/injectAssistantUtterance.js +378 -0
  36. package/dist/tools/handlers/injectAssistantUtterance.js.map +1 -0
  37. package/dist/tools/handlers/validateIntegration.d.ts.map +1 -1
  38. package/dist/tools/handlers/validateIntegration.js +67 -0
  39. package/dist/tools/handlers/validateIntegration.js.map +1 -1
  40. package/dist/tools/registry.d.ts.map +1 -1
  41. package/dist/tools/registry.js +4 -0
  42. package/dist/tools/registry.js.map +1 -1
  43. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"getProductionChecklist.js","sourceRoot":"","sources":["../../../src/tools/handlers/getProductionChecklist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getProductionChecklist.js","sourceRoot":"","sources":["../../../src/tools/handlers/getProductionChecklist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type McpContent } from "../response.js";
2
+ export declare function handleInjectAssistantUtterance(raw: unknown): Promise<McpContent>;
3
+ //# sourceMappingURL=injectAssistantUtterance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectAssistantUtterance.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/injectAssistantUtterance.ts"],"names":[],"mappings":"AAyCA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAsN5E,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,UAAU,CAAC,CAmOrB"}
@@ -0,0 +1,378 @@
1
+ // injectAssistantUtterance — Phase 4 S1.W.7.
2
+ //
3
+ // Drive an assistant turn from outside the live session — used by
4
+ // agent-driven E2E tests of the Phase 4 glasses.assistant.start surface.
5
+ // Mirrors injectTranscript's pattern (frame travels through the same
6
+ // sim-hub path; the library routes it to the active assistant session).
7
+ //
8
+ // v1 paths (per synthesis #16, partially scoped down for Sprint 1):
9
+ // - text: deterministic path. v1 wire-routing reuses the existing
10
+ // stt_transcript frame the Rust core already knows about (Phase 4
11
+ // plan § machine-split: NO Rust changes). MockAssistantProvider
12
+ // subscribes to audio.transcriptions() Flow and routes Finals to
13
+ // its dispatcher. Sub-millisecond. No API cost.
14
+ // - audioWavBase64: real-provider audio path — DEFERRED to v1.1.
15
+ // Implementing this needs either a new inbound frame type (Rust
16
+ // core change) or a separate audio-chunk injection endpoint;
17
+ // either is out of Sprint 1 scope. Handler rejects with
18
+ // not_implemented for now.
19
+ //
20
+ // autoWake (added 2026-05-27): the silence-timeout sleep transition
21
+ // (Elizabeth ships `sleepAfterSilence(30.seconds)`) means a multi-step
22
+ // agent test where the agent does ANYTHING between injects — screencap,
23
+ // event-log scan, debug — can transition the session Dormant. The next
24
+ // inject then lands in the library but injectUserTurn silently drops
25
+ // (connectionRef is null). Tests appear to "succeed" with no tool call
26
+ // + the agent has no proactive signal.
27
+ //
28
+ // Fix: default `autoWake: true`. Before the inject, peek at the event
29
+ // log; if no live "session is active" signal, pre-inject the wake phrase
30
+ // as a manual_trigger STT frame (exactly what the dev's voice.onPhrase
31
+ // wake handler matches today) + wait for `assistant.session_started`
32
+ // cursor-anchored to "now." Then dispatch the real assistant_inject.
33
+ // Already-active sessions skip the pre-wake entirely; the cost is one
34
+ // extra events query per inject (~50-100ms), not a wasted ~3s wake cycle.
35
+ //
36
+ // USE for agent-driven end-to-end tests of glasses.assistant.start
37
+ // (e.g. createSimulatorSession → injectAssistantUtterance({ text:
38
+ // "take a picture" }) → assertToolCalled({ name: "take_picture" })).
39
+ // DON'T USE for capability discovery (use getPlatformInfo) or static
40
+ // validation (use validateIntegration).
41
+ import { okResponse, errorResponse } from "../response.js";
42
+ import { backendFetch } from "../util/backendClient.js";
43
+ // Wake-phrase default + tuning. "hey elizabeth" matches the canonical
44
+ // dogfood pattern; agents testing apps with a different wake phrase pass
45
+ // `wakePhrase` explicitly. Timing budget: a fresh OpenAI Realtime WS
46
+ // handshake + session.update typically completes in 1.5-2.5s on a healthy
47
+ // connection; 6s gives us ~3x headroom before reporting timeout.
48
+ const DEFAULT_WAKE_PHRASE = "hey elizabeth";
49
+ const WAKE_TIMEOUT_MS = 6_000;
50
+ const WAKE_POLL_MS = 200;
51
+ const STATE_LOOKBACK_LIMIT = 200;
52
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
53
+ /**
54
+ * Read the most recent events and infer the assistant session's current
55
+ * state from its lifecycle trail. Scans newest-first:
56
+ * - `assistant.went_dormant` → dormant
57
+ * - `assistant.session_ended` → ended
58
+ * - any other `assistant.*` (except → active (an active session is
59
+ * `assistant.error`, which can fire producing events)
60
+ * in any state)
61
+ * - nothing assistant-related found → unknown
62
+ *
63
+ * The "active" signal includes assistant_spoke / tool_called / user_spoke
64
+ * / reconnected — they're emitted only by an active session, so seeing
65
+ * one newer than the most recent dormant/ended marker means the session
66
+ * is live RIGHT NOW (or was as of that event; the agent's next inject
67
+ * will land on a live connection unless silence-timeout fires in the
68
+ * intervening sub-second).
69
+ */
70
+ async function detectAssistantState(sessionId) {
71
+ const params = new URLSearchParams();
72
+ params.set("filter", "all");
73
+ params.set("limit", String(STATE_LOOKBACK_LIMIT));
74
+ const res = await backendFetch(`/api/sessions/${encodeURIComponent(sessionId)}/events?${params.toString()}`);
75
+ if (!res.ok || !res.data)
76
+ return "unknown";
77
+ const events = res.data.events ?? [];
78
+ // Backend returns chronological (oldest→newest) in no-cursor mode; walk
79
+ // from the end to find the most-recent lifecycle signal.
80
+ for (let i = events.length - 1; i >= 0; i--) {
81
+ const t = events[i].type;
82
+ if (t === "assistant.went_dormant")
83
+ return "dormant";
84
+ if (t === "assistant.session_ended")
85
+ return "ended";
86
+ if (typeof t === "string" &&
87
+ t.startsWith("assistant.") &&
88
+ t !== "assistant.error") {
89
+ return "active";
90
+ }
91
+ }
92
+ return "unknown";
93
+ }
94
+ /**
95
+ * Pre-inject the wake phrase as a manual_trigger STT frame, then wait for
96
+ * the next `assistant.session_started` event (cursor-anchored to "now"
97
+ * before the wake POST, so a stale session_started from a prior wake
98
+ * doesn't false-positive).
99
+ *
100
+ * Returns ok:true once session_started arrives, ok:false on timeout or
101
+ * delivery failure. The caller chooses whether to proceed — see the
102
+ * autoWake block in the handler for the policy (proceed-with-visibility).
103
+ */
104
+ async function preWake(sessionId, wakePhrase, timeoutMs) {
105
+ // Anchor cursor BEFORE the wake POST so the readiness poll only matches
106
+ // session_started events that fire AFTER this point. Same pattern as
107
+ // assertToolCalled's cursor anchor (fix b87388d).
108
+ let cursor;
109
+ {
110
+ const anchorParams = new URLSearchParams();
111
+ anchorParams.set("filter", "all");
112
+ anchorParams.set("limit", "1");
113
+ const anchorRes = await backendFetch(`/api/sessions/${encodeURIComponent(sessionId)}/events?${anchorParams.toString()}`);
114
+ if (anchorRes.ok && anchorRes.data) {
115
+ cursor = anchorRes.data.cursor ?? undefined;
116
+ }
117
+ // Anchor failure isn't fatal — we accept a small staleness risk and
118
+ // proceed; the wake POST below is the real signal.
119
+ }
120
+ const startedAt = Date.now();
121
+ // Send the wake phrase as a manual_trigger STT frame. Routes through
122
+ // BrowserSimTransport → VoiceClient → onPhrase handler → session.wake().
123
+ // Filtered OUT by OpenAiAssistantProvider's inject subscription (source
124
+ // != "assistant_inject"), so it doesn't leak into the model's
125
+ // conversation history.
126
+ const wakeRes = await backendFetch(`/api/sessions/${encodeURIComponent(sessionId)}/inject`, {
127
+ method: "POST",
128
+ body: {
129
+ type: "stt_transcript",
130
+ text: wakePhrase,
131
+ isFinal: true,
132
+ confidence: 0.99,
133
+ source: "manual_trigger",
134
+ },
135
+ });
136
+ if (!wakeRes.ok || !wakeRes.data || wakeRes.data.delivered !== true) {
137
+ return {
138
+ ok: false,
139
+ waitedMs: Date.now() - startedAt,
140
+ deliveryFailure: wakeRes.data?.reason ??
141
+ wakeRes.errorText ??
142
+ `wake POST failed (HTTP ${wakeRes.status})`,
143
+ };
144
+ }
145
+ const deadline = startedAt + timeoutMs;
146
+ while (Date.now() < deadline) {
147
+ const params = new URLSearchParams();
148
+ params.set("filter", "all");
149
+ params.set("limit", "200");
150
+ if (cursor)
151
+ params.set("cursor", cursor);
152
+ const res = await backendFetch(`/api/sessions/${encodeURIComponent(sessionId)}/events?${params.toString()}`);
153
+ if (res.ok && res.data) {
154
+ const events = res.data.events ?? [];
155
+ for (const ev of events) {
156
+ if (ev.type === "assistant.session_started") {
157
+ return { ok: true, waitedMs: Date.now() - startedAt };
158
+ }
159
+ }
160
+ cursor = res.data.cursor ?? cursor;
161
+ }
162
+ await sleep(Math.min(WAKE_POLL_MS, Math.max(0, deadline - Date.now())));
163
+ }
164
+ return {
165
+ ok: false,
166
+ waitedMs: Date.now() - startedAt,
167
+ reason: `no assistant.session_started observed within ${timeoutMs}ms`,
168
+ };
169
+ }
170
+ export async function handleInjectAssistantUtterance(raw) {
171
+ if (!raw || typeof raw !== "object") {
172
+ return errorResponse({
173
+ code: "invalid_arguments",
174
+ message: "injectAssistantUtterance requires { sessionId, text? | audioWavBase64? }.",
175
+ fixHint: 'Pass { sessionId: "sim_...", text: "take a picture" }. For real-provider audio injection, pass audioWavBase64 instead — a base64-encoded WAV file the library decodes + feeds through the active provider.',
176
+ retryable: false,
177
+ });
178
+ }
179
+ const o = raw;
180
+ if (typeof o.sessionId !== "string" || !o.sessionId.trim()) {
181
+ return errorResponse({
182
+ code: "invalid_arguments",
183
+ message: "sessionId (string) is required.",
184
+ fixHint: "Pass the sessionId returned by createSimulatorSession.",
185
+ retryable: false,
186
+ });
187
+ }
188
+ const text = typeof o.text === "string" ? o.text : undefined;
189
+ const audioWavBase64 = typeof o.audioWavBase64 === "string" ? o.audioWavBase64 : undefined;
190
+ // Enforce exactly-one-of in the handler (the JSON Schema can't express
191
+ // top-level oneOf per the assertNoForbiddenTopLevelKeywords lock).
192
+ if (text == null && audioWavBase64 == null) {
193
+ return errorResponse({
194
+ code: "invalid_arguments",
195
+ message: "Either text or audioWavBase64 is required.",
196
+ fixHint: 'Pass text: "take a picture" for the Mock provider path (fast, deterministic, free), or audioWavBase64: "..." for the real-provider audio path.',
197
+ retryable: false,
198
+ });
199
+ }
200
+ if (text != null && audioWavBase64 != null) {
201
+ return errorResponse({
202
+ code: "invalid_arguments",
203
+ message: "Pass either text or audioWavBase64 — not both.",
204
+ fixHint: "Pick the path: text for Mock-provider intent matching, audioWavBase64 for real-provider audio.",
205
+ retryable: false,
206
+ });
207
+ }
208
+ if (text != null && text.length === 0) {
209
+ return errorResponse({
210
+ code: "invalid_arguments",
211
+ message: "text must be non-empty.",
212
+ fixHint: 'Pass text: "take a picture" (or any utterance the model should hear).',
213
+ retryable: false,
214
+ });
215
+ }
216
+ // autoWake config. Default true — the common multi-step-test gotcha is
217
+ // a session that auto-slept between injects (Elizabeth ships
218
+ // sleepAfterSilence(30s)); pre-waking when dormant turns the inject from
219
+ // silently-dropped into landed. wakePhrase default matches the canonical
220
+ // dogfood pattern; agents testing apps with a different phrase pass it
221
+ // explicitly.
222
+ const autoWake = o.autoWake !== false;
223
+ let wakePhrase;
224
+ if (typeof o.wakePhrase === "string") {
225
+ if (o.wakePhrase.length === 0) {
226
+ return errorResponse({
227
+ code: "invalid_arguments",
228
+ message: "wakePhrase must be non-empty when provided.",
229
+ fixHint: 'Pass wakePhrase: "hey elizabeth" (or your app\'s wake phrase as registered via glasses.voice.onPhrase), or omit it to use the default "hey elizabeth", or set autoWake:false to skip the pre-wake entirely.',
230
+ retryable: false,
231
+ });
232
+ }
233
+ wakePhrase = o.wakePhrase;
234
+ }
235
+ else {
236
+ wakePhrase = DEFAULT_WAKE_PHRASE;
237
+ }
238
+ // v1 wire-routing: text path reuses the existing stt_transcript frame
239
+ // so we don't need to teach the Rust core a new inbound frame type
240
+ // (Phase 4 plan § machine-split: NO Rust changes). The library shell's
241
+ // MockAssistantProvider subscribes to audio.transcriptions() and routes
242
+ // Finals to its injectUtterance dispatcher. Tagged with
243
+ // source: "assistant_inject" so the backend ws-hub renders these as
244
+ // assistant injects rather than mic injects in the event log.
245
+ //
246
+ // audioWavBase64 path: deferred to v1.1 — needs a frame-type extension
247
+ // or a separate audio-chunk injection endpoint. Surfaces the 'not yet
248
+ // supported' error in the handler below.
249
+ if (audioWavBase64 != null) {
250
+ return errorResponse({
251
+ code: "not_implemented",
252
+ message: "audioWavBase64 path is not yet implemented in v1 (deferred to v1.1).",
253
+ fixHint: "Use the text: path for now — the MockAssistantProvider matches against tool descriptions deterministically. For real-provider validation, run the OpenAi provider session with a real mic source (sim browser tab mic, or real glasses).",
254
+ retryable: false,
255
+ });
256
+ }
257
+ // autoWake — peek at lifecycle, pre-wake if not already Active. Done
258
+ // BEFORE the inject so a dormant session is brought up cleanly + the
259
+ // assistant_inject lands on an open WS. See the file-top comment for
260
+ // why this defaults true.
261
+ let autoWakeReport = { enabled: false };
262
+ if (autoWake) {
263
+ const detectedState = await detectAssistantState(o.sessionId);
264
+ if (detectedState === "active") {
265
+ // Already up — skip the wake-phrase round-trip + just inject.
266
+ autoWakeReport = {
267
+ enabled: true,
268
+ action: "skipped_active",
269
+ detectedState,
270
+ };
271
+ }
272
+ else {
273
+ // dormant / ended / unknown — pre-wake. "ended" sessions can still
274
+ // sometimes be re-woken if the customer's wake handler calls
275
+ // assistant.start() (vs session.wake()); we attempt anyway and let
276
+ // the readiness wait surface the truth.
277
+ const wakeResult = await preWake(o.sessionId, wakePhrase, WAKE_TIMEOUT_MS);
278
+ if (wakeResult.ok) {
279
+ autoWakeReport = {
280
+ enabled: true,
281
+ action: "pre_waked",
282
+ wakePhrase,
283
+ detectedState,
284
+ waitedMs: wakeResult.waitedMs,
285
+ };
286
+ }
287
+ else if (wakeResult.deliveryFailure) {
288
+ autoWakeReport = {
289
+ enabled: true,
290
+ action: "pre_wake_delivery_failed",
291
+ wakePhrase,
292
+ detectedState,
293
+ reason: wakeResult.deliveryFailure,
294
+ };
295
+ }
296
+ else {
297
+ autoWakeReport = {
298
+ enabled: true,
299
+ action: "pre_wake_timeout",
300
+ wakePhrase,
301
+ detectedState,
302
+ waitedMs: wakeResult.waitedMs,
303
+ reason: wakeResult.reason ?? "unknown",
304
+ };
305
+ }
306
+ }
307
+ }
308
+ const payload = {
309
+ type: "stt_transcript",
310
+ text: text,
311
+ isFinal: true,
312
+ confidence: 0.99,
313
+ source: "assistant_inject",
314
+ };
315
+ const res = await backendFetch(`/api/sessions/${encodeURIComponent(o.sessionId)}/inject`, {
316
+ method: "POST",
317
+ body: payload,
318
+ });
319
+ if (res.status === 404) {
320
+ return errorResponse({
321
+ code: "session_not_found",
322
+ message: `No session found with id ${JSON.stringify(o.sessionId)}.`,
323
+ fixHint: "Call createSimulatorSession to start a new session.",
324
+ retryable: false,
325
+ });
326
+ }
327
+ if (res.status === 409) {
328
+ const body = res.data;
329
+ return errorResponse({
330
+ code: "app_not_attached",
331
+ message: body?.message ??
332
+ "Inject not delivered: the session exists but no app role is currently attached.",
333
+ fixHint: "Start your app (build + run on the emulator/device) so the WebSocket attaches, then retry. Confirm with getSimulatorStatus — connectedRoles.app should be present. Also verify glasses.assistant.start { ... } has been called in your app — the inject routes to the active assistant session.",
334
+ retryable: true,
335
+ });
336
+ }
337
+ if (!res.ok || !res.data || res.data.delivered !== true) {
338
+ return errorResponse({
339
+ code: "backend_unreachable",
340
+ message: `Backend /api/sessions/${o.sessionId}/inject failed: ${res.errorText ?? `HTTP ${res.status}`}.`,
341
+ fixHint: "Ensure the Extentos backend is reachable.",
342
+ retryable: true,
343
+ });
344
+ }
345
+ let wakeSummary = "";
346
+ if (autoWakeReport.enabled) {
347
+ switch (autoWakeReport.action) {
348
+ case "skipped_active":
349
+ wakeSummary =
350
+ ` autoWake: session already Active (lifecycle scan detected "${autoWakeReport.detectedState}"), pre-wake skipped.`;
351
+ break;
352
+ case "pre_waked":
353
+ wakeSummary =
354
+ ` autoWake: pre-waked via "${autoWakeReport.wakePhrase}" (was ${autoWakeReport.detectedState}, session_started ${autoWakeReport.waitedMs}ms after wake POST).`;
355
+ break;
356
+ case "pre_wake_timeout":
357
+ wakeSummary =
358
+ ` autoWake: pre-wake timed out (was ${autoWakeReport.detectedState}, ${autoWakeReport.reason}). Inject proceeded anyway; if it dropped, check that "${autoWakeReport.wakePhrase}" is registered via glasses.voice.onPhrase in the app and that glasses.assistant.start { ... } has been called.`;
359
+ break;
360
+ case "pre_wake_delivery_failed":
361
+ wakeSummary =
362
+ ` autoWake: pre-wake POST failed (${autoWakeReport.reason}). Inject proceeded anyway.`;
363
+ break;
364
+ }
365
+ }
366
+ return okResponse({
367
+ sessionId: o.sessionId,
368
+ delivered: true,
369
+ mode: "text",
370
+ autoWake: autoWakeReport,
371
+ frame: res.data.frame ?? payload,
372
+ summary: `Injected utterance "${text.slice(0, 60)}${text.length > 60 ? "…" : ""}" into ${o.sessionId}.` +
373
+ wakeSummary +
374
+ ` Follow up with assertToolCalled({ sessionId, name: "..." }) to verify the expected tool fired, ` +
375
+ `or getEventLog(types: ["assistant.tool_called","assistant.assistant_spoke"]) to see the full event trace.`,
376
+ });
377
+ }
378
+ //# sourceMappingURL=injectAssistantUtterance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injectAssistantUtterance.js","sourceRoot":"","sources":["../../../src/tools/handlers/injectAssistantUtterance.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateIntegration.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/validateIntegration.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA0B7D,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAiWlE"}
1
+ {"version":3,"file":"validateIntegration.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/validateIntegration.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA0B7D,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CA0WlE"}
@@ -331,6 +331,15 @@ export function handleValidateIntegration(raw) {
331
331
  const uiCheck = checkUiArtifact(projectPath, platform, manifest);
332
332
  if (uiCheck)
333
333
  checks.push(uiCheck);
334
+ // Phase 4 — assistant_integration_advisory (S2.W.8). Detects whether the
335
+ // app uses the canonical Phase 4 `glasses.assistant.start` surface, flags
336
+ // legacy Phase 3 `glasses.conversation.*` / `glasses.ai.complete` calls
337
+ // with v2.0.0-removal warnings, and notes when both coexist (the v1.4.0
338
+ // migration window). Soft-severity — info when only Phase 4 is used;
339
+ // warn when Phase 3 is still present.
340
+ const phase4Check = checkAssistantIntegration(projectPath, platform);
341
+ if (phase4Check)
342
+ checks.push(phase4Check);
334
343
  // agp_version_supported + gradle_version_supported (Android only).
335
344
  // F-R4-8: read the project's actual AGP/Gradle versions, compare against
336
345
  // the manifest's recorded minimums (or VERSION_INFO if the manifest
@@ -587,6 +596,64 @@ function checkBootstrap(projectPath, generatedFiles, platform) {
587
596
  details: `Bootstrap calls ${expectedCreate}…). SDK is wired.`,
588
597
  };
589
598
  }
599
+ // Phase 4 — assistant_integration_advisory (S2.W.8). Light source scan
600
+ // to surface Phase 3 / Phase 4 usage. Three observable states:
601
+ // - Phase 4 only (assistant.start present, conversation.* + ai.complete
602
+ // absent) → info, "✓ Phase 4 canonical surface in use"
603
+ // - Phase 3 still present (conversation.* or ai.complete found) → warn,
604
+ // "Phase 3 conversation runtime is DEPRECATED in v1.4.0 and removed
605
+ // in v2.0.0; migrate to glasses.assistant.start"
606
+ // - Both coexist → info, "Mixed Phase 3 + Phase 4 — migration in progress,
607
+ // complete before v2.0.0"
608
+ // - Neither (no voice AI wired) → null (no check emitted; not all apps
609
+ // use voice AI)
610
+ //
611
+ // Detection by string scan, not AST — fine for an advisory check.
612
+ function checkAssistantIntegration(projectPath, platform) {
613
+ // Source needles for Phase 4 and Phase 3 voice surfaces.
614
+ const phase4Needle = "assistant.start"; // glasses.assistant.start { ... }
615
+ const phase3Needles = ["conversation.onWake", "conversation.start", "ai.complete"];
616
+ let usesPhase4 = false;
617
+ let usesPhase3 = false;
618
+ for (const root of candidateSourceRoots(projectPath, platform)) {
619
+ if (!existsSync(root))
620
+ continue;
621
+ const text = readProjectText(root);
622
+ if (text.includes(phase4Needle))
623
+ usesPhase4 = true;
624
+ if (phase3Needles.some((n) => text.includes(n)))
625
+ usesPhase3 = true;
626
+ if (usesPhase4 && usesPhase3)
627
+ break;
628
+ }
629
+ // No voice-AI surface detected — not every app uses voice; emit nothing.
630
+ if (!usesPhase4 && !usesPhase3)
631
+ return null;
632
+ if (usesPhase4 && !usesPhase3) {
633
+ return {
634
+ name: "assistant_integration_advisory",
635
+ passed: true,
636
+ severity: "info",
637
+ details: "✓ Phase 4 canonical voice-AI surface (`glasses.assistant.start`) detected; no deprecated Phase 3 conversation runtime references found.",
638
+ };
639
+ }
640
+ if (!usesPhase4 && usesPhase3) {
641
+ return {
642
+ name: "assistant_integration_advisory",
643
+ passed: false,
644
+ severity: "warn",
645
+ details: "Phase 3 conversation runtime detected (`glasses.conversation.*` or `glasses.ai.complete`). These APIs are DEPRECATED in v1.4.0 and REMOVED in v2.0.0. Migrate to `glasses.assistant.start { tool(name, description) { body } }` — customer code typically drops ~60% LoC.",
646
+ fix: "Read `docs/migration/phase-3-to-phase-4.md` (also available via `searchDocs(topic: 'assistant_runtime')`). Migrate each `onWake { while(true) { listen() ... } }` block to `assistant.start(provider) { tool(...) { ... } }`. Migrate each `glasses.ai.complete(prompt)` call to OpenAI SDK direct (walkthrough C). Same BYOK key; rename `glasses.ai.setOpenaiApiKey` → `glasses.assistant.setOpenaiApiKey`.",
647
+ };
648
+ }
649
+ // Both present — migration in progress.
650
+ return {
651
+ name: "assistant_integration_advisory",
652
+ passed: true,
653
+ severity: "info",
654
+ details: "Mixed Phase 3 + Phase 4 voice-AI surfaces detected. v1.4.0 deprecation window — both coexist. Complete the Phase 3 → Phase 4 migration before v2.0.0 (3-month deprecation window from v1.4.0 ship date). See `docs/migration/phase-3-to-phase-4.md`.",
655
+ };
656
+ }
590
657
  function checkUiArtifact(projectPath, platform, manifest) {
591
658
  const uiSymbols = ["ExtentosConnectionPage", "ExtentosTheme", "rememberExtentosState", "ExtentosState"];
592
659
  let anyUsage = false;