@extentos/mcp-server 0.10.2 → 0.11.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/README.md +2 -2
- package/dist/generated/schemas.js +1 -1
- package/dist/generated/schemas.js.map +1 -1
- package/dist/tools/data/capabilities.d.ts +4 -1
- package/dist/tools/data/capabilities.d.ts.map +1 -1
- package/dist/tools/data/capabilities.js +15 -11
- package/dist/tools/data/capabilities.js.map +1 -1
- package/dist/tools/data/capabilityPatterns.d.ts.map +1 -1
- package/dist/tools/data/capabilityPatterns.js +13 -10
- package/dist/tools/data/capabilityPatterns.js.map +1 -1
- package/dist/tools/data/codeExamples.d.ts.map +1 -1
- package/dist/tools/data/codeExamples.js +36 -18
- package/dist/tools/data/codeExamples.js.map +1 -1
- package/dist/tools/data/datMigrationMap.js +1 -1
- package/dist/tools/data/datMigrationMap.js.map +1 -1
- package/dist/tools/data/version.js +22 -22
- package/dist/tools/data/version.js.map +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +61 -19
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/docs/index.d.ts.map +1 -1
- package/dist/tools/docs/index.js +23 -24
- package/dist/tools/docs/index.js.map +1 -1
- package/dist/tools/handlers/generateConnectionModule.js +12 -2
- package/dist/tools/handlers/generateConnectionModule.js.map +1 -1
- package/dist/tools/handlers/getEventLog.d.ts.map +1 -1
- package/dist/tools/handlers/getEventLog.js +38 -2
- package/dist/tools/handlers/getEventLog.js.map +1 -1
- package/dist/tools/templates/androidBootstrap.d.ts.map +1 -1
- package/dist/tools/templates/androidBootstrap.js +10 -0
- package/dist/tools/templates/androidBootstrap.js.map +1 -1
- package/dist/tools/templates/iosBootstrap.js +5 -5
- package/package.json +68 -68
|
@@ -443,7 +443,7 @@ final class TranscriptionViewModel: ObservableObject {
|
|
|
443
443
|
explanation: "Subscribe to transcriptions() once at view-model init, append final segments to your state. Compose / SwiftUI re-renders on the StateFlow / @Published update. The library auto-restarts the recognizer between utterances to keep the stream continuous (~100-300ms gap).",
|
|
444
444
|
gotchas: [
|
|
445
445
|
"transcriptions() is gated by listening_mode + audio_capture_enabled + privacy_mode toggles. If transcripts stop arriving unexpectedly, check those — likely listening_mode flipped to 'off' from a UI control.",
|
|
446
|
-
"Mic audio routes over HFP while transcriptions are active; A2DP music playback drops to
|
|
446
|
+
"Mic audio routes over HFP while transcriptions are active; A2DP music playback drops to voice-band HFP mono for the duration. Show a 'listening…' indicator so the user knows why.",
|
|
447
447
|
"Partial transcripts arrive 5-20 per second on a normal-speed utterance. Throttle / debounce in your UI if you render every emission — rendering 200 Compose updates per second is wasteful.",
|
|
448
448
|
],
|
|
449
449
|
relatedFeatures: ["transcription_incremental"],
|
|
@@ -1609,7 +1609,7 @@ The agent reads each \`speak\` event's \`details.text\` — that is what the app
|
|
|
1609
1609
|
const CONVERSATION_AGENT_LOOP = {
|
|
1610
1610
|
pattern: "conversation_agent_loop",
|
|
1611
1611
|
title: "LEGACY Phase 3 conversation runtime (REMOVED on Android in 1.4.0 — historical reference; use assistant_agent_loop)",
|
|
1612
|
-
description: "**LEGACY — REMOVED on Android in 1.4.0 (`glasses.conversation` / `glasses.ai` no longer exist there
|
|
1612
|
+
description: "**LEGACY — REMOVED on Android in 1.4.0 (`glasses.conversation` / `glasses.ai` no longer exist there, and the API never shipped on iOS).** For new voice-assistant work use `assistant_agent_loop` (Phase 4 `glasses.assistant.start { tool(...) { ... } }`). The Phase 4 customer surface drops ~60% LoC vs this pattern, ships zero on-device ML (no ONNX models to bundle), and lets the model decide which tool to call instead of the customer hand-writing `when (turn.text)` keyword routing. This Phase 3 pattern stays in the catalog as historical migration reference only — the snippets do not compile against Android 1.4.0. See `searchDocs(topic:'assistant_runtime')` migration section for the side-by-side Phase 3 → Phase 4 walkthrough. The Phase 3 `glasses.conversation.onWake { listen() / speak() / ai.complete() }` API composes VAD + STT + Smart Turn + TTS + BYOK LLM in the shared Rust core; the agent loop here drives wake + follow-up utterances via `injectTranscript` and asserts symmetric `conversation.*` event pairs.",
|
|
1613
1613
|
code: {
|
|
1614
1614
|
kotlin: `// ── Application bootstrap (do once, typically in Application.onCreate
|
|
1615
1615
|
// after RECORD_AUDIO is granted) ────────────────────────────────────
|
|
@@ -1948,7 +1948,7 @@ import com.extentos.glasses.core.assistant.AssistantProvider
|
|
|
1948
1948
|
import com.extentos.glasses.core.assistant.AssistantSession
|
|
1949
1949
|
import com.extentos.glasses.core.assistant.ToolResult
|
|
1950
1950
|
import com.extentos.glasses.core.assistant.tool
|
|
1951
|
-
import com.extentos.glasses.core.
|
|
1951
|
+
import com.extentos.glasses.core.assistant.orToolError
|
|
1952
1952
|
import kotlinx.coroutines.CoroutineScope
|
|
1953
1953
|
import kotlinx.coroutines.Deferred
|
|
1954
1954
|
import kotlinx.coroutines.Dispatchers
|
|
@@ -2098,7 +2098,7 @@ class StravaAssistantHandler(
|
|
|
2098
2098
|
if (capture == null) return@tool ToolResult.Err("nothing was recording")
|
|
2099
2099
|
glasses.camera.stopVideo()
|
|
2100
2100
|
val result = capture.await()
|
|
2101
|
-
val clip = result.
|
|
2101
|
+
val clip = result.orToolError { return@tool it }
|
|
2102
2102
|
library.add(clip)
|
|
2103
2103
|
ToolResult.Ok("video saved")
|
|
2104
2104
|
}
|
|
@@ -2137,8 +2137,11 @@ class StravaAssistantHandler(
|
|
|
2137
2137
|
// matchers to disambiguate. See getCapabilityGuide(feature:"assistant_vision")
|
|
2138
2138
|
// gotcha about describe-vs-save.
|
|
2139
2139
|
tool("describe_scene", "Describe what the runner is currently looking at without saving the photo. Call for 'what do you see' / 'describe this' / 'tell me about this'.") {
|
|
2140
|
-
|
|
2141
|
-
|
|
2140
|
+
// orToolError: on failure the tool returns the core's canonical,
|
|
2141
|
+
// user-actionable message (e.g. paused → "Tap the right temple…"),
|
|
2142
|
+
// so the assistant can tell the user what to DO — never a bare
|
|
2143
|
+
// "camera failed" the model can't act on.
|
|
2144
|
+
val photo = glasses.camera.capturePhoto().orToolError { return@tool it }
|
|
2142
2145
|
val uri = photo.uri
|
|
2143
2146
|
?: return@tool ToolResult.Err("photo had no uri")
|
|
2144
2147
|
// session is the AssistantSession returned by start();
|
|
@@ -2149,8 +2152,11 @@ class StravaAssistantHandler(
|
|
|
2149
2152
|
ToolResult.Ok("looking")
|
|
2150
2153
|
}
|
|
2151
2154
|
tool("save_photo", "Save a photo to the runner's library WITHOUT describing it. Call for 'save this' / 'capture this' / 'take a picture' / 'remember this view'.") {
|
|
2152
|
-
|
|
2153
|
-
|
|
2155
|
+
// orToolError: on failure the tool returns the core's canonical,
|
|
2156
|
+
// user-actionable message (e.g. paused → "Tap the right temple…"),
|
|
2157
|
+
// so the assistant can tell the user what to DO — never a bare
|
|
2158
|
+
// "camera failed" the model can't act on.
|
|
2159
|
+
val photo = glasses.camera.capturePhoto().orToolError { return@tool it }
|
|
2154
2160
|
val uri = photo.uri
|
|
2155
2161
|
?: return@tool ToolResult.Err("photo had no uri")
|
|
2156
2162
|
val ext = when (Photos.mediaTypeFromUri(uri)) {
|
|
@@ -2175,7 +2181,10 @@ class StravaAssistantHandler(
|
|
|
2175
2181
|
// active conversation. Swap this line for a button onClick,
|
|
2176
2182
|
// a gesture handler, or any other trigger that calls
|
|
2177
2183
|
// session?.wake() — the library doesn't dictate the
|
|
2178
|
-
// mechanism, only the lifecycle.
|
|
2184
|
+
// mechanism, only the lifecycle. NOTE: wake() is a suspend
|
|
2185
|
+
// function. onPhrase's handler block is already a suspend
|
|
2186
|
+
// context, but a plain call site (Compose onClick, a View
|
|
2187
|
+
// listener) must launch it: scope.launch { session?.wake() }.
|
|
2179
2188
|
glasses.voice.onPhrase("hey strava") { session?.wake() }
|
|
2180
2189
|
}
|
|
2181
2190
|
}
|
|
@@ -2308,6 +2317,9 @@ final class StravaAssistantHandler: @unchecked Sendable {
|
|
|
2308
2317
|
// Wake mechanism — canonical pattern uses glasses.voice.onPhrase; the
|
|
2309
2318
|
// session is Dormant until the phrase fires session.wake(). Swap for a
|
|
2310
2319
|
// button tap, gesture, or any trigger that calls session.wake().
|
|
2320
|
+
// NOTE: wake() is async. onPhrase's closure is already an async
|
|
2321
|
+
// context, but a plain call site (a SwiftUI Button action) must
|
|
2322
|
+
// wrap it: Task { try? await session.wake() }.
|
|
2311
2323
|
// (Strong capture is correct: AssistantSession is not class-bound so
|
|
2312
2324
|
// 'weak' won't compile, and the closure holds no 'self' — no cycle.)
|
|
2313
2325
|
self.wakeRegistration = glasses.voice.onPhrase(phrase: "hey strava") { [session] in
|
|
@@ -2468,7 +2480,7 @@ side with this agent loop and watch the panel react.`,
|
|
|
2468
2480
|
"**Tool body runs on Dispatchers.IO (Kotlin) / Swift Task (Swift); suspending camera/storage/HTTP calls are fine.** Per-tool blocking opt-out via `tool(name, desc, blocking = true) { ... }` per synthesis #9 — when true, the model waits silently for the result before speaking. Default is non-blocking (model says \"let me check...\" while the tool runs). Use blocking=true for sub-100ms tools where the filler would be awkward (\"what time is it\" returning in 10 ms).",
|
|
2469
2481
|
"**Managed gateway by default; BYOK via dashboard Credentials.** No OpenAI key in the app — zero config. `start()` opens the realtime WebSocket against the Extentos managed gateway, which holds the key and meters usage. There is no `glasses.assistant.setOpenaiApiKey` on the SDK (it was removed when the assistant moved to gateway-only). To use your own OpenAI key, add it in the dashboard Credentials section; the gateway swaps it in server-side — still metered, still through Extentos. See `getCredentialGuide(service: \"openai\")`.",
|
|
2470
2482
|
"**`glasses.ai.complete` is deprecated in v1.4.0 and removed in v2.0.0.** Use the OpenAI SDK directly for non-voice LLM calls (image description, summarization, etc.). Migration: see `searchDocs(topic:'assistant_runtime')` → migration section walkthrough C.",
|
|
2471
|
-
"**Vision via `session.includeImage(uri, prompt = null)` (v1.4 addition).** Capture a photo, hand the URI to the assistant inside a tool body — the model sees it + speaks about it in its configured voice. URI accepts data: / http(s): / file:// / content://. The image persists in conversation history at the provider, so follow-up questions in the same session work without re-sending. Active-only (throws NotReady otherwise — safe inside a tool body where the session is always Active). Canonical pattern: `tool(\"describe_scene\", \"...\") { val photo = glasses.camera.capturePhoto().
|
|
2483
|
+
"**Vision via `session.includeImage(uri, prompt = null)` (v1.4 addition).** Capture a photo, hand the URI to the assistant inside a tool body — the model sees it + speaks about it in its configured voice. URI accepts data: / http(s): / file:// / content://. The image persists in conversation history at the provider, so follow-up questions in the same session work without re-sending. Active-only (throws NotReady otherwise — safe inside a tool body where the session is always Active). Canonical pattern: `tool(\"describe_scene\", \"...\") { val photo = glasses.camera.capturePhoto().orToolError { return@tool it }; session.includeImage(photo.uri); ToolResult.Ok(\"looking\") }` — `orToolError` (Kotlin `com.extentos.glasses.core.assistant.orToolError`; Swift `try ….orToolError()`) short-circuits the tool with the core's canonical user-actionable message (paused → \"Tap the right temple…\") so the assistant can tell the user what to do; never map capture failures to a bare \"camera failed\". See getCapabilityGuide(feature:\"assistant_vision\") for the prompt-parameter pattern + URI-type gotchas.",
|
|
2472
2484
|
"**Mid-session primitives (iter5 addition).** Four building blocks on `AssistantSession`: `setReasoningEffort(level)` for dynamic effort routing, `updateInstructions(text)` for persona/mode swaps, `cancelSpeak()` for tool-driven interrupts, `conversationHistory(limit)` for forwarding context to a stronger model. All composable with the existing tool surface — write tools that call them in their bodies. Canonical escalation pattern: a `ask_smart_model` tool body reads `session.conversationHistory()`, formats it as context, calls the customer's own GPT-5 (or Anthropic Claude, or Gemini) client, returns the response as `ToolResult.Ok(answer)` — the realtime model then speaks the answer in its configured voice. Active-only (except conversationHistory which is always safe). See getCapabilityGuide(feature:\"assistant_session_runtime\") for the canonical snippet of each.",
|
|
2473
2485
|
],
|
|
2474
2486
|
relatedFeatures: ["assistant_runtime", "assistant_start", "assistant_tool", "assistant_provider_openai", "assistant_vision", "assistant_session_runtime", "audio_chunks", "speak", "capture_photo"],
|
|
@@ -2508,7 +2520,7 @@ import com.extentos.glasses.core.assistant.AssistantProvider
|
|
|
2508
2520
|
import com.extentos.glasses.core.assistant.AssistantSession
|
|
2509
2521
|
import com.extentos.glasses.core.assistant.ToolResult
|
|
2510
2522
|
import com.extentos.glasses.core.assistant.tool
|
|
2511
|
-
import com.extentos.glasses.core.
|
|
2523
|
+
import com.extentos.glasses.core.assistant.orToolError
|
|
2512
2524
|
import android.util.Log
|
|
2513
2525
|
import kotlinx.coroutines.CoroutineScope
|
|
2514
2526
|
import kotlinx.coroutines.Dispatchers
|
|
@@ -2557,8 +2569,11 @@ class NotesAssistant(
|
|
|
2557
2569
|
}
|
|
2558
2570
|
|
|
2559
2571
|
tool("save_photo", "Take a photo and save it to the user's library. Call when the user says 'save this' or 'take a picture'.") {
|
|
2560
|
-
|
|
2561
|
-
|
|
2572
|
+
// orToolError: on failure the tool returns the core's canonical,
|
|
2573
|
+
// user-actionable message (e.g. paused → "Tap the right temple…"),
|
|
2574
|
+
// so the assistant can tell the user what to DO — never a bare
|
|
2575
|
+
// "camera failed" the model can't act on.
|
|
2576
|
+
val photo = glasses.camera.capturePhoto().orToolError { return@tool it }
|
|
2562
2577
|
val uri = photo.uri ?: return@tool ToolResult.Err("no uri")
|
|
2563
2578
|
Log.i(TAG, "save_photo: uri=\${uri.take(60)} \${photo.width}x\${photo.height}")
|
|
2564
2579
|
val dst = File(library.photosDir, "photo-\${System.currentTimeMillis()}.jpg")
|
|
@@ -2569,8 +2584,11 @@ class NotesAssistant(
|
|
|
2569
2584
|
}
|
|
2570
2585
|
|
|
2571
2586
|
tool("describe_scene", "Describe what the user is currently looking at WITHOUT saving the photo. Call for 'what do you see' / 'describe this' / 'tell me about this'.") {
|
|
2572
|
-
|
|
2573
|
-
|
|
2587
|
+
// orToolError: on failure the tool returns the core's canonical,
|
|
2588
|
+
// user-actionable message (e.g. paused → "Tap the right temple…"),
|
|
2589
|
+
// so the assistant can tell the user what to DO — never a bare
|
|
2590
|
+
// "camera failed" the model can't act on.
|
|
2591
|
+
val photo = glasses.camera.capturePhoto().orToolError { return@tool it }
|
|
2574
2592
|
val uri = photo.uri ?: return@tool ToolResult.Err("no uri")
|
|
2575
2593
|
Log.i(TAG, "describe_scene: handing uri to session.includeImage")
|
|
2576
2594
|
session?.includeImage(uri)
|
|
@@ -2641,9 +2659,9 @@ final class NotesAssistant: @unchecked Sendable {
|
|
|
2641
2659
|
}
|
|
2642
2660
|
|
|
2643
2661
|
config.tool("save_photo", description: "Take a photo and save it to the library. Call when the user says 'save this' / 'take a picture'.") {
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
|
|
2662
|
+
// orToolError(): on failure the tool short-circuits with the core's
|
|
2663
|
+
// canonical, user-actionable message (paused → "Tap the right temple…").
|
|
2664
|
+
let photo = try (await self.glasses.camera.capturePhoto()).orToolError()
|
|
2647
2665
|
NSLog("NotesAssistant save_photo: width=\\(photo.width)")
|
|
2648
2666
|
self.library.addPhoto(photo)
|
|
2649
2667
|
return .ok("photo saved")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeExamples.js","sourceRoot":"","sources":["../../../src/tools/data/codeExamples.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,sEAAsE;AACtE,sEAAsE;AACtE,uDAAuD;AACvD,sCAAsC;AACtC,EAAE;AACF,qEAAqE;AACrE,uDAAuD;AACvD,wEAAwE;AACxE,kEAAkE;AAClE,oEAAoE;AACpE,2DAA2D;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAuE5C,MAAM,kBAAkB,GAAgB;IACtC,OAAO,EAAE,oBAAoB;IAC7B,KAAK,EAAE,yFAAyF;IAChG,WAAW,EACT,0zBAA0zB;IAC5zB,IAAI,EAAE;QACJ,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwEV;QACE,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgET;KACC;IACD,WAAW,EACT,ggCAAggC;IAClgC,OAAO,EAAE;QACP,yXAAyX;QACzX,gbAAgb;QAChb,qXAAqX;QACrX,mSAAmS;QACnS,oSAAoS;QACpS,+SAA+S;QAC/S,msBAAmsB;QACnsB,sIAAsI;QACtI,+HAA+H;QAC/H,yKAAyK;QACzK,kyBAAkyB;QAClyB,0UAA0U;KAC3U;IACD,eAAe,EAAE,CAAC,eAAe,EAAE,2BAA2B,EAAE,cAAc,CAAC;CAChF,CAAC;AAEF,MAAM,cAAc,GAAgB;IAClC,OAAO,EAAE,gBAAgB;IACzB,KAAK,EAAE,gDAAgD;IACvD,WAAW,EACT,2bAA2b;IAC7b,IAAI,EAAE;QACJ,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BV;QACE,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCT;KACC;IACD,WAAW,EACT,+ZAA+Z;IACja,OAAO,EAAE;QACP,8IAA8I;QAC9I,6PAA6P;QAC7P,kLAAkL;KACnL;IACD,eAAe,EAAE,CAAC,2BAA2B,CAAC;CAC/C,CAAC;AAEF,MAAM,oBAAoB,GAAgB;IACxC,OAAO,EAAE,sBAAsB;IAC/B,KAAK,EAAE,gDAAgD;IACvD,WAAW,EACT,gfAAgf;IAClf,IAAI,EAAE;QACJ,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DV;QACE,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmDT;KACC;IACD,WAAW,EACT,gWAAgW;IAClW,OAAO,EAAE;QACP,4OAA4O;QAC5O,4KAA4K;QAC5K,yGAAyG;QACzG,iRAAiR;QACjR,iMAAiM;QACjM,gRAAgR;QAChR,shBAAshB;KACvhB;IACD,eAAe,EAAE,CAAC,eAAe,EAAE,eAAe,EAAE,2BAA2B,CAAC;CACjF,CAAC;AAEF,MAAM,qBAAqB,GAAgB;IACzC,OAAO,EAAE,uBAAuB;IAChC,KAAK,EAAE,+CAA+C;IACtD,WAAW,EACT,sdAAsd;IACxd,IAAI,EAAE;QACJ,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA4BU;QAClB,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;yBAyBc;KACtB;IACD,WAAW,EACT,4QAA4Q;IAC9Q,OAAO,EAAE;QACP,gNAAgN;QAChN,
|
|
1
|
+
{"version":3,"file":"codeExamples.js","sourceRoot":"","sources":["../../../src/tools/data/codeExamples.ts"],"names":[],"mappings":"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"}
|
|
@@ -150,7 +150,7 @@ export const DAT_MIGRATION_ENTRIES = [
|
|
|
150
150
|
},
|
|
151
151
|
extentosCall: "glasses.display.show { } / glasses.display.clear() / glasses.display.isAvailable",
|
|
152
152
|
extentosFeature: "display",
|
|
153
|
-
whatChanges: "Build a declarative DisplayNode tree (column/row/text/button/image) instead of managing raw Display config + add/remove. Gate on glasses.display.isAvailable (a no-op on non-display models). Neural-Band select/back gestures route to your onClick/onBack. (
|
|
153
|
+
whatChanges: "Build a declarative DisplayNode tree (column/row/text/button/image) instead of managing raw Display config + add/remove. Gate on glasses.display.isAvailable (a no-op on non-display models). Neural-Band select/back gestures route to your onClick/onBack. (Ships in both SDKs; on-glasses rendering via Meta DAT is live on Android, iOS delivery in progress.)",
|
|
154
154
|
drill: { codeExample: "display_browse_detail" },
|
|
155
155
|
},
|
|
156
156
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datMigrationMap.js","sourceRoot":"","sources":["../../../src/tools/data/datMigrationMap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"datMigrationMap.js","sourceRoot":"","sources":["../../../src/tools/data/datMigrationMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,15 +6,15 @@
|
|
|
6
6
|
// scaffold a project pointing at 1.0.0 (no probe code) while running
|
|
7
7
|
// 0.0.7+ server-side smarts that needed 1.1.x to function.
|
|
8
8
|
//
|
|
9
|
-
// The Android library is published to Maven Central
|
|
10
|
-
// + glasses-ui
|
|
11
|
-
//
|
|
12
|
-
// surface is the Phase 4
|
|
13
|
-
// { tool(...) { ... } }`
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
9
|
+
// The Android library is published to Maven Central (com.extentos:glasses
|
|
10
|
+
// + glasses-ui) and the iOS library as a Swift package from
|
|
11
|
+
// github.com/extentos/swift-glasses — both version in LOCKSTEP (see CLAUDE.md
|
|
12
|
+
// "Library publishing"). The current voice-AI surface is the Phase 4
|
|
13
|
+
// assistant runtime (`glasses.assistant.start(provider) { tool(...) { ... } }`
|
|
14
|
+
// — the model owns wake/turn-taking/intent). The Phase 3 conversation
|
|
15
|
+
// runtime (`glasses.conversation.onWake { listen() / speak() /
|
|
16
|
+
// ai.complete() }`) was REMOVED — it does NOT exist on current Android;
|
|
17
|
+
// do not reference it.
|
|
18
18
|
// Source of truth: android-library/gradle/libs.versions.toml → mwdat (Android;
|
|
19
19
|
// core/camera/display/mockdevice all ride this ref) and the Swift package's
|
|
20
20
|
// MWDAT `from:` floor (iOS). Same drift class as kotlinVersion below
|
|
@@ -31,7 +31,7 @@ export const VERSION_INFO = {
|
|
|
31
31
|
// block (1.4.0-phase4-dogfood via mavenLocal) is retired — pre-release
|
|
32
32
|
// handling in generateConnectionModule / validateIntegration keys on the
|
|
33
33
|
// version-string suffix, not on a field here.
|
|
34
|
-
latestStable: "1.
|
|
34
|
+
latestStable: "1.7.0",
|
|
35
35
|
specVersion: "1.0",
|
|
36
36
|
android: {
|
|
37
37
|
minimumSdk: 31,
|
|
@@ -53,7 +53,7 @@ export const VERSION_INFO = {
|
|
|
53
53
|
kotlinVersion: "2.1.20",
|
|
54
54
|
// Toolchain minimums (F-R4-8 from DOGFOOD_R4). The library's transitive
|
|
55
55
|
// Compose deps determine the floor:
|
|
56
|
-
// - com.extentos:glasses-ui:1.
|
|
56
|
+
// - com.extentos:glasses-ui:1.7.0 brings in androidx.compose.* 1.9.0
|
|
57
57
|
// (via compose-bom 2024.10.00 and direct deps)
|
|
58
58
|
// - Compose 1.9.0 AAR-metadata declares "requires AGP >= 8.6.0"
|
|
59
59
|
// - AGP 8.6+ requires Gradle 8.7+ (Android Gradle Plugin compatibility table)
|
|
@@ -74,8 +74,8 @@ export const VERSION_INFO = {
|
|
|
74
74
|
datSdkVersion: DAT_SDK_VERSION,
|
|
75
75
|
artifacts: {
|
|
76
76
|
android: {
|
|
77
|
-
core: "com.extentos:glasses:1.
|
|
78
|
-
ui: "com.extentos:glasses-ui:1.
|
|
77
|
+
core: "com.extentos:glasses:1.7.0",
|
|
78
|
+
ui: "com.extentos:glasses-ui:1.7.0",
|
|
79
79
|
// glasses-debug is NOT yet a real Android module. iOS has a `GlassesDebug`
|
|
80
80
|
// product in the Swift package (see ios.products below), but the Android
|
|
81
81
|
// equivalent was never scaffolded into `android-library/settings.gradle.kts`
|
|
@@ -88,15 +88,15 @@ export const VERSION_INFO = {
|
|
|
88
88
|
},
|
|
89
89
|
ios: {
|
|
90
90
|
package: "https://github.com/extentos/swift-glasses",
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
version: "
|
|
98
|
-
published:
|
|
99
|
-
versionNote: "iOS Swift package
|
|
91
|
+
// Published in lockstep with the Android line — the Swift package tag
|
|
92
|
+
// and the Maven Central version cut from the same core, so this field
|
|
93
|
+
// must always equal latestStable. set-sdk-version.mjs rewrites it in
|
|
94
|
+
// the same pass as artifacts.android; don't hand-bump one without the
|
|
95
|
+
// other. (Pre-1.7.0 this held an "unpublished" sentinel that
|
|
96
|
+
// generateConnectionModule keyed its local-path interim on.)
|
|
97
|
+
version: "1.7.0",
|
|
98
|
+
published: true,
|
|
99
|
+
versionNote: "iOS Swift package ships from github.com/extentos/swift-glasses, version-locked to the Android release line. Standard SwiftPM ranges resolve it: .package(url: \"https://github.com/extentos/swift-glasses\", from: \"1.7.0\").",
|
|
100
100
|
products: ["GlassesCore", "GlassesUI", "GlassesDebug", "GlassesLifecycle", "GlassesTesting"],
|
|
101
101
|
},
|
|
102
102
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/tools/data/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,0EAA0E;AAC1E,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,qEAAqE;AACrE,2DAA2D;AAC3D,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/tools/data/version.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,0EAA0E;AAC1E,uEAAuE;AACvE,qEAAqE;AACrE,oEAAoE;AACpE,qEAAqE;AACrE,2DAA2D;AAC3D,EAAE;AACF,0EAA0E;AAC1E,4DAA4D;AAC5D,8EAA8E;AAC9E,qEAAqE;AACrE,+EAA+E;AAC/E,sEAAsE;AACtE,+DAA+D;AAC/D,wEAAwE;AACxE,uBAAuB;AACvB,+EAA+E;AAC/E,4EAA4E;AAC5E,qEAAqE;AACrE,yEAAyE;AACzE,wEAAwE;AACxE,iDAAiD;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,OAAO;IAChB,GAAG,EAAE,OAAO;CACJ,CAAC;AAEX,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,8CAA8C;IAC9C,YAAY,EAAE,OAAO;IACrB,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE;QACP,UAAU,EAAE,EAAE;QACd,yEAAyE;QACzE,wEAAwE;QACxE,qEAAqE;QACrE,kEAAkE;QAClE,yFAAyF;QACzF,oEAAoE;QACpE,gEAAgE;QAChE,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,aAAa,EACX,wPAAwP;QAC1P,0EAA0E;QAC1E,uEAAuE;QACvE,4EAA4E;QAC5E,yEAAyE;QACzE,uDAAuD;QACvD,aAAa,EAAE,QAAQ;QACvB,wEAAwE;QACxE,oCAAoC;QACpC,qEAAqE;QACrE,iDAAiD;QACjD,gEAAgE;QAChE,8EAA8E;QAC9E,2EAA2E;QAC3E,qDAAqD;QACrD,iBAAiB,EAAE,OAAO;QAC1B,oBAAoB,EAAE,KAAK;KAC5B;IACD,GAAG,EAAE;QACH,uBAAuB,EAAE,MAAM;QAC/B,YAAY,EAAE,KAAK;QACnB,wEAAwE;QACxE,uEAAuE;QACvE,wEAAwE;QACxE,+DAA+D;QAC/D,mBAAmB,EAAE,MAAM;KAC5B;IACD,aAAa,EAAE,eAAe;IAC9B,SAAS,EAAE;QACT,OAAO,EAAE;YACP,IAAI,EAAE,4BAA4B;YAClC,EAAE,EAAE,+BAA+B;YACnC,2EAA2E;YAC3E,yEAAyE;YACzE,6EAA6E;YAC7E,0EAA0E;YAC1E,4EAA4E;YAC5E,uEAAuE;YACvE,wEAAwE;YACxE,2EAA2E;YAC3E,uEAAuE;SACxE;QACD,GAAG,EAAE;YACH,OAAO,EAAE,2CAA2C;YACpD,sEAAsE;YACtE,sEAAsE;YACtE,qEAAqE;YACrE,sEAAsE;YACtE,6DAA6D;YAC7D,6DAA6D;YAC7D,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI;YACf,WAAW,EACT,gOAAgO;YAClO,QAAQ,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;SAC7F;KACF;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IAMpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,oBAAoB,EAAE,KAAK,CAAC;KAC7B,CAAC;CACH;AAMD,eAAO,MAAM,eAAe,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/tools/definitions.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IAMpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,oBAAoB,EAAE,KAAK,CAAC;KAC7B,CAAC;CACH;AAMD,eAAO,MAAM,eAAe,EAAE,OAAO,EA89BpC,CAAC;AAEF,eAAO,MAAM,SAAS,QAAyB,CAAC;AAShD,wBAAgB,iCAAiC,CAC/C,IAAI,GAAE,SAAS,OAAO,EAAoB,GACzC,IAAI,CAiBN"}
|
|
@@ -118,7 +118,11 @@ export const toolDefinitions = [
|
|
|
118
118
|
properties: {
|
|
119
119
|
platform: platformEnum,
|
|
120
120
|
glasses: glassesEnum,
|
|
121
|
-
appPackage: {
|
|
121
|
+
appPackage: {
|
|
122
|
+
type: "string",
|
|
123
|
+
minLength: 1,
|
|
124
|
+
description: "The Extentos project identity (reverse-DNS). This is what the SDK reports as the app id for telemetry, agent config, and sounds — it is NOT required to equal the store bundle id / applicationId (the scaffold bakes it as config.appId, decoupled). For a NEW app, use your bundle id. For an EXISTING app already shipped to both stores with DIFFERENT locked bundle ids, pass the SAME appPackage on BOTH platforms — both then share ONE Extentos project (one agent config, one sound set, per-platform analytics) regardless of the store ids.",
|
|
125
|
+
},
|
|
122
126
|
libraryVersion: { type: "string" },
|
|
123
127
|
responseFormat: responseFormatEnum,
|
|
124
128
|
placement: {
|
|
@@ -140,7 +144,7 @@ export const toolDefinitions = [
|
|
|
140
144
|
capabilities: {
|
|
141
145
|
type: "array",
|
|
142
146
|
items: { type: "string" },
|
|
143
|
-
description: "The SDK capabilities your app uses (feature names from getPlatformInfo — e.g. [\"capture_photo\", \"transcription_incremental\", \"speak\", \"display\"]). The scaffold records them in the integration manifest AND emits ExtentosConfig.usedCapabilities (Android) so the connection page shows one tile per capability — lit when the connected glasses provide it, dimmed when they don't (e.g. Display on a non-display Ray-Ban). Omit → no capability tiles and no derived camera/mic/speaker permissions (declare nothing, show nothing). Re-run with an updated set to change it (the bootstrap regenerates).
|
|
147
|
+
description: "The SDK capabilities your app uses (feature names from getPlatformInfo — e.g. [\"capture_photo\", \"transcription_incremental\", \"speak\", \"display\"]). The scaffold records them in the integration manifest AND emits ExtentosConfig.usedCapabilities (Android) so the connection page shows one tile per capability — lit when the connected glasses provide it, dimmed when they don't (e.g. Display on a non-display Ray-Ban). Omit → no capability tiles and no derived camera/mic/speaker permissions (declare nothing, show nothing). Re-run with an updated set to change it (the bootstrap regenerates). Both platforms emit ExtentosConfig.usedCapabilities — Kotlin setOf(CapabilityKind.X, …) / Swift [.camera, …].",
|
|
144
148
|
},
|
|
145
149
|
},
|
|
146
150
|
required: ["platform", "glasses", "appPackage"],
|
|
@@ -433,13 +437,21 @@ export const toolDefinitions = [
|
|
|
433
437
|
// --- 3. Implementation Guidance ---
|
|
434
438
|
{
|
|
435
439
|
name: "getVoiceCommandGuidance",
|
|
436
|
-
description: "Analyze proposed voice phrases for UX issues (length, homophones, digit-usage, Meta wake-word collision, ambiguity with existing phrases) before wiring them into a wake trigger. Applies equally to Phase 3 `glasses.conversation.onWake(phrase) { ... }` registrations AND legacy `glasses.voice.onPhrase(phrase) { ... }` / direct `glasses.audio.transcriptions()` consumers — the issues this catches
|
|
440
|
+
description: "Analyze proposed voice phrases for UX issues (length, homophones, digit-usage, Meta wake-word collision, ambiguity with existing phrases) before wiring them into a wake trigger. Returns { results, generalGuidance, summary }: `results` is one entry per input phrase — { phrase, issues: [{ severity: 'error' | 'warning' | 'info', rule, message }], suggestions: [], collisions: [] } — where `collisions` lists exact-duplicate matches and `issues` carries per-rule findings (rules: too_short, homophone_risk, digit_usage, punctuation, collision, disambiguation, meta_wake_word_overlap, match_mode_hint). Only `collision` and `meta_wake_word_overlap` are error-severity (fix before wiring); everything else is advisory. `generalGuidance` is cross-phrase advice; `summary` is a one-line rollup. Applies equally to Phase 3 `glasses.conversation.onWake(phrase) { ... }` registrations AND legacy `glasses.voice.onPhrase(phrase) { ... }` / direct `glasses.audio.transcriptions()` consumers — the issues this catches are the same regardless of which API surface dispatches the handler. USE before adding new phrase-match conditions to ANY voice-driven handler. DON'T USE for general voice docs (use searchDocs topic 'conversation_runtime' for Phase 3, 'voice_integration' for the legacy primitives).",
|
|
437
441
|
inputSchema: {
|
|
438
442
|
type: "object",
|
|
439
443
|
properties: {
|
|
440
|
-
phrases: {
|
|
441
|
-
|
|
442
|
-
|
|
444
|
+
phrases: {
|
|
445
|
+
type: "array",
|
|
446
|
+
items: { type: "string" },
|
|
447
|
+
minItems: 1,
|
|
448
|
+
description: "The proposed wake / trigger phrases to analyze (at least one). Each is scored against every rule — e.g. ['take a photo', 'start recording'].",
|
|
449
|
+
},
|
|
450
|
+
existingPhrases: {
|
|
451
|
+
type: "array",
|
|
452
|
+
items: { type: "string" },
|
|
453
|
+
description: "Phrases already wired into the app. Optional — when given, the analyzer also flags exact-duplicate collisions and shared-prefix ambiguity between the new `phrases` and these already-registered ones.",
|
|
454
|
+
},
|
|
443
455
|
},
|
|
444
456
|
required: ["phrases"],
|
|
445
457
|
additionalProperties: false,
|
|
@@ -447,7 +459,7 @@ export const toolDefinitions = [
|
|
|
447
459
|
},
|
|
448
460
|
{
|
|
449
461
|
name: "getPermissions",
|
|
450
|
-
description: "Derive Android permissions, iOS Info.plist keys, and Meta DAT scopes
|
|
462
|
+
description: "Derive the Android permissions, iOS Info.plist keys, and Meta DAT scopes a list of SDK capabilities requires. Returns { android, ios, metaDat, summary } — **ALWAYS all three platform blocks regardless of the `platform` argument** (which only frames the one-line `summary`; it does NOT filter the response). `android` = { permissions[], manifestEntries[] (ready-to-paste <uses-permission> lines), foregroundService: { required, types[], declaration, devInstructions }, notificationListener: { required, declaration, devInstructions }, minimumSdk, compileSdk, targetSdk }. `ios` = { plistKeys: [{ key, value, reason }] }. `metaDat` = { scopes[], registrationRequired, registrationSteps[] }. Capabilities that need no platform permission (e.g. speak, connection_state, earcon) contribute nothing and are accepted silently — they never error. USE after deciding which features (capture_photo, transcription_incremental, voice_command, …) the app integrates. DON'T USE for capability discovery (use getPlatformInfo).",
|
|
451
463
|
inputSchema: {
|
|
452
464
|
type: "object",
|
|
453
465
|
properties: {
|
|
@@ -457,7 +469,10 @@ export const toolDefinitions = [
|
|
|
457
469
|
minItems: 1,
|
|
458
470
|
description: "Capability names from getPlatformInfo.features[].name. e.g. ['capture_photo', 'transcription_incremental', 'voice_command'].",
|
|
459
471
|
},
|
|
460
|
-
platform:
|
|
472
|
+
platform: {
|
|
473
|
+
...platformEnum,
|
|
474
|
+
description: "Selects how the one-line `summary` is phrased (Android vs iOS framing). Required — but does NOT filter the response: the android, ios, and metaDat blocks are all returned either way.",
|
|
475
|
+
},
|
|
461
476
|
},
|
|
462
477
|
required: ["capabilities", "platform"],
|
|
463
478
|
additionalProperties: false,
|
|
@@ -466,22 +481,28 @@ export const toolDefinitions = [
|
|
|
466
481
|
// --- 4. Validation ---
|
|
467
482
|
{
|
|
468
483
|
name: "inspectIntegration",
|
|
469
|
-
description: "Read-only snapshot of current Extentos integration: manifest,
|
|
484
|
+
description: "Read-only snapshot of the current Extentos integration at a project path. Returns { found, manifest, generatedFilesStatus, dependency, drift, connectionPageConfig, gaps, summary }. **`found: false` is NOT an error** — when no extentos.manifest.json exists the call still succeeds, returning empty sub-objects plus a `gaps` remediation string that tells you to run generateConnectionModule. When `found: true`: `manifest` is the parsed extentos.manifest.json; `generatedFilesStatus` is per-file { path, exists, hasMarker, hashMatch }; `dependency` is { found, coordinate, file } for the Gradle/SPM dependency; `drift` is { fileDrift: [{ path, reason: 'missing' | 'marker_absent' | 'hash_mismatch' }], dependencyDrift: boolean }; `connectionPageConfig` is the committed connection-page snapshot (or null); `gaps` is an array of human-readable remediation strings; `summary` is a one-line rollup. USE before validateIntegration or for a 'what's wired so far?' read. DON'T USE for correctness checking / a pre-test gate (use validateIntegration — it severity-tiers the same surface and adds ~15 checks).",
|
|
470
485
|
inputSchema: {
|
|
471
486
|
type: "object",
|
|
472
487
|
properties: {
|
|
473
|
-
projectPath: {
|
|
488
|
+
projectPath: {
|
|
489
|
+
type: "string",
|
|
490
|
+
description: "Absolute (or cwd-relative) path to the project root holding extentos.manifest.json. Optional — defaults to the MCP server's current working directory (process.cwd()); pass it explicitly whenever the project isn't the cwd.",
|
|
491
|
+
},
|
|
474
492
|
},
|
|
475
493
|
additionalProperties: false,
|
|
476
494
|
},
|
|
477
495
|
},
|
|
478
496
|
{
|
|
479
497
|
name: "validateIntegration",
|
|
480
|
-
description: "
|
|
498
|
+
description: "Pre-test gate that runs ~15 severity-tiered checks over the whole project — manifest present + parses, generated-file markers + hashes, dependency declared, library-version freshness, Android Meta-DAT repo declaration, bootstrap wiring (ExtentosGlasses.create / Extentos.create), connection-page config, toolchain (AGP/Gradle) floors, foreground-service hints, and permissions. The permissions check DERIVES the permissions your declared `capabilities` imply and verifies they're present in the REAL app/src/main/AndroidManifest.xml <uses-permission> elements (Android) or the app target's Info.plist keys (iOS) — the runtime source of truth, not the manifest JSON's permissions array. Returns { valid, checks, summary }: each `checks[]` entry is { name, passed, severity?: 'error' | 'warn' | 'info', details?, fix? }. `valid` is true when zero ERROR-severity checks fail; warn/info are advisories that don't block. `summary` reads 'Safe to test' ONLY at zero warnings — any warning demotes it to 'review before testing'. So treat this as a graded readiness report, not a binary pass/fail. USE after making changes, before testing. DON'T USE for reading state without judging it (use inspectIntegration).",
|
|
481
499
|
inputSchema: {
|
|
482
500
|
type: "object",
|
|
483
501
|
properties: {
|
|
484
|
-
projectPath: {
|
|
502
|
+
projectPath: {
|
|
503
|
+
type: "string",
|
|
504
|
+
description: "Absolute (or cwd-relative) path to the project root. Optional — defaults to the MCP server's current working directory (process.cwd()); pass it explicitly whenever the project isn't the cwd.",
|
|
505
|
+
},
|
|
485
506
|
},
|
|
486
507
|
additionalProperties: false,
|
|
487
508
|
},
|
|
@@ -545,9 +566,23 @@ export const toolDefinitions = [
|
|
|
545
566
|
inputSchema: {
|
|
546
567
|
type: "object",
|
|
547
568
|
properties: {
|
|
548
|
-
deviceCode: {
|
|
549
|
-
|
|
550
|
-
|
|
569
|
+
deviceCode: {
|
|
570
|
+
type: "string",
|
|
571
|
+
minLength: 1,
|
|
572
|
+
description: "The `deviceCode` from createSimulatorSession's auth_required (HTTP 402) response — the opaque handle the backend correlates the developer's signup with. A stale/unknown code returns unknown_device_code (call createSimulatorSession again for a fresh one).",
|
|
573
|
+
},
|
|
574
|
+
maxWaitSeconds: {
|
|
575
|
+
type: "integer",
|
|
576
|
+
minimum: 1,
|
|
577
|
+
maximum: 600,
|
|
578
|
+
description: "Max seconds to keep polling for the developer to finish signup. Default 600 (also the cap). On timeout returns auth_timeout (retryable) — call again with the SAME deviceCode while it's still valid.",
|
|
579
|
+
},
|
|
580
|
+
pollIntervalSeconds: {
|
|
581
|
+
type: "integer",
|
|
582
|
+
minimum: 1,
|
|
583
|
+
maximum: 30,
|
|
584
|
+
description: "Seconds between backend polls. Default 5; clamped to [1, 30]. The backend may push a longer interval, which then overrides this value.",
|
|
585
|
+
},
|
|
551
586
|
},
|
|
552
587
|
required: ["deviceCode"],
|
|
553
588
|
additionalProperties: false,
|
|
@@ -591,6 +626,10 @@ export const toolDefinitions = [
|
|
|
591
626
|
},
|
|
592
627
|
responseFormat: responseFormatEnum,
|
|
593
628
|
redactBinary: { type: "boolean" },
|
|
629
|
+
collapseRepeats: {
|
|
630
|
+
type: "boolean",
|
|
631
|
+
description: "When true (default), consecutive payload-identical events (same layer/severity/type/message/details — timestamps excluded) collapse into ONE entry carrying `repeat: N` and `lastTimestamp`, so a runaway emitter can't fill the response with one line repeated hundreds of times. `totalEvents` and the summary count RAW events. Pass false for the uncollapsed rows.",
|
|
632
|
+
},
|
|
594
633
|
},
|
|
595
634
|
required: ["sessionId"],
|
|
596
635
|
additionalProperties: false,
|
|
@@ -642,7 +681,7 @@ export const toolDefinitions = [
|
|
|
642
681
|
audioWavBase64: {
|
|
643
682
|
type: "string",
|
|
644
683
|
minLength: 1,
|
|
645
|
-
description: "DEFERRED to v1.1 — passing this field returns `not_implemented`. The intended path: base64-encoded WAV (
|
|
684
|
+
description: "DEFERRED to v1.1 — passing this field returns `not_implemented`. The intended path: base64-encoded WAV (mono i16 LE PCM; rate matched to the live audio path at implementation time); library decodes and feeds through audio_chunks Flow to the active real provider. Needs a Rust core extension that Sprint 1's machine-split deliberately avoids. For end-to-end real-provider validation in the meantime, run the OpenAi provider session with a real mic source (sim browser tab mic, or real glasses).",
|
|
646
685
|
},
|
|
647
686
|
},
|
|
648
687
|
required: ["sessionId"],
|
|
@@ -786,7 +825,7 @@ export const toolDefinitions = [
|
|
|
786
825
|
// --- 6. Production ---
|
|
787
826
|
{
|
|
788
827
|
name: "getProductionChecklist",
|
|
789
|
-
description: "Return a personalized production-readiness checklist based on the SDK capabilities the app uses
|
|
828
|
+
description: "Return a personalized production-readiness checklist based on the SDK capabilities the app uses, the handlers it declares, and the BYOK services it integrates. Returns { ready, steps, summary }: `ready` is true when no step has status 'needed'; each `steps[]` entry is { category, description, status: 'done' | 'needed' | 'optional', details, fix?, requiredScopes?, affectedHandlers?, codeChange?: { file, hint } }. Steps are conditional — streams add a foreground-service step, voice/camera/audio add a real-hardware-verification step, and declared BYOK `services` (or the Phase 3 conversation runtime) add an API-keys step. Pass `projectPath` so the Meta-account and credential-swap steps read the project's real build state and report 'done' instead of 'needed'. Cross-links: getPermissions for the exact permission set the Permissions-Audit step verifies, getCredentialGuide for the per-provider key setup the API-Keys step needs, validateIntegration for the structural pre-test gate. USE when going to production. DON'T USE during development.",
|
|
790
829
|
inputSchema: {
|
|
791
830
|
type: "object",
|
|
792
831
|
properties: {
|
|
@@ -806,7 +845,10 @@ export const toolDefinitions = [
|
|
|
806
845
|
description: 'BYOK provider names the app actually integrates (e.g. ["anthropic", "openai"]). The trigger for the API Keys step — a DAT-native app (capture_photo + speak) or a Phase 4 managed-gateway app declares none and skips it.',
|
|
807
846
|
},
|
|
808
847
|
platform: platformEnum,
|
|
809
|
-
projectPath: {
|
|
848
|
+
projectPath: {
|
|
849
|
+
type: "string",
|
|
850
|
+
description: "Absolute (or cwd-relative) path to the project root. Optional — when given, the Meta-Developer-Account and Credential-Swap steps read the real build state (Android extentos_meta_credentials.xml / iOS Info.plist MWDAT dict) to mark themselves 'done' vs 'needed'. Omit → every step is assumed not-yet-done.",
|
|
851
|
+
},
|
|
810
852
|
},
|
|
811
853
|
required: ["capabilities", "platform"],
|
|
812
854
|
additionalProperties: false,
|
|
@@ -814,7 +856,7 @@ export const toolDefinitions = [
|
|
|
814
856
|
},
|
|
815
857
|
{
|
|
816
858
|
name: "getCredentialGuide",
|
|
817
|
-
description: "Return step-by-step credential setup
|
|
859
|
+
description: "Return step-by-step credential setup for the Meta DAT build identity plus each BYOK AI provider the app integrates. Returns { metaCredentials, serviceCredentials, keyStorage, summary }: `metaCredentials` = { required, requiredScope: 'real_hardware_only', scopeNote, steps[], configChange: { file, keys[], example, note? } } — the `requiredScope` / `scopeNote` say Meta DAT creds are needed ONLY for builds on real Ray-Ban Meta hardware; sim/emulator dev works without them, so DON'T lead the developer through Meta's developer-portal registration until the hardware milestone. `serviceCredentials` = one entry per BYOK service { service, forHandlers[], steps[], codeExample }. `keyStorage` = platform-specific { preferredPath, fallbackPath, doNotDo[], notes[] } secure-storage guidance. Cross-links: getProductionChecklist for where these steps sit in the ship sequence, getCredentialStatus / setCredential for the account-vaulted path (secrets pasted in the dashboard, never through the agent). USE when wiring a new BYOK provider or graduating from simulator to real hardware. DON'T USE during the simulator-only dev loop (Meta DAT creds aren't needed there).",
|
|
818
860
|
inputSchema: {
|
|
819
861
|
type: "object",
|
|
820
862
|
properties: {
|