@extentos/mcp-server 0.0.93 → 0.1.0
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/dist/tools/data/capabilityPatterns.d.ts.map +1 -1
- package/dist/tools/data/capabilityPatterns.js +250 -3
- 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 +421 -10
- package/dist/tools/data/codeExamples.js.map +1 -1
- package/dist/tools/data/version.d.ts +0 -1
- package/dist/tools/data/version.d.ts.map +1 -1
- package/dist/tools/data/version.js +9 -1
- package/dist/tools/data/version.js.map +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +54 -3
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/docs/index.d.ts.map +1 -1
- package/dist/tools/docs/index.js +115 -2
- package/dist/tools/docs/index.js.map +1 -1
- package/dist/tools/handlers/assertToolCalled.d.ts +3 -0
- package/dist/tools/handlers/assertToolCalled.d.ts.map +1 -0
- package/dist/tools/handlers/assertToolCalled.js +171 -0
- package/dist/tools/handlers/assertToolCalled.js.map +1 -0
- package/dist/tools/handlers/getProductionChecklist.d.ts.map +1 -1
- package/dist/tools/handlers/getProductionChecklist.js +60 -9
- package/dist/tools/handlers/getProductionChecklist.js.map +1 -1
- package/dist/tools/handlers/injectAssistantUtterance.d.ts +3 -0
- package/dist/tools/handlers/injectAssistantUtterance.d.ts.map +1 -0
- package/dist/tools/handlers/injectAssistantUtterance.js +139 -0
- package/dist/tools/handlers/injectAssistantUtterance.js.map +1 -0
- package/dist/tools/handlers/validateIntegration.d.ts.map +1 -1
- package/dist/tools/handlers/validateIntegration.js +168 -0
- package/dist/tools/handlers/validateIntegration.js.map +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +4 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/templates/androidBootstrap.d.ts.map +1 -1
- package/dist/tools/templates/androidBootstrap.js +35 -0
- package/dist/tools/templates/androidBootstrap.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilityPatterns.d.ts","sourceRoot":"","sources":["../../../src/tools/data/capabilityPatterns.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"capabilityPatterns.d.ts","sourceRoot":"","sources":["../../../src/tools/data/capabilityPatterns.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAiiCD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAuB7D,CAAC;AAEF,eAAO,MAAM,yBAAyB,UAAwC,CAAC"}
|
|
@@ -617,7 +617,7 @@ _ = glasses.conversation?.onWake(phrase: "hey assistant") { ctx in
|
|
|
617
617
|
}
|
|
618
618
|
}`,
|
|
619
619
|
gotchas: [
|
|
620
|
-
"**`glasses.conversation` is null when conversationOptions wasn't passed at ExtentosConfig construction.** Phase 3 is opt-in to save the ~10 MB ONNX
|
|
620
|
+
"**`glasses.conversation` is null when conversationOptions wasn't passed at ExtentosConfig construction.** Phase 3 is opt-in to save the ~10 MB ONNX session-load cost for voice-only apps (model bytes still ship inside the library AAR / Swift package — opt-in saves the load, not the disk). Use `glasses.conversation?.onWake(...)` defensively; check `glasses.runtime.events` for a `conversation.init_failed` Log event if the surface is unexpectedly null (e.g. the AAR was rebuilt without the bundled models — see `ConversationModels.ensureExtracted` / `ConversationModels.paths`).",
|
|
621
621
|
"**Wake phrase composes with the voice client.** `onWake(\"hey assistant\")` internally calls `voice.onPhrase(\"hey assistant\") { core.startHandler(id) }`. The voice client's hint surface (connection page + simulator click-to-fire) still shows the phrase. Stops-cancellation works the same way as legacy onPhrase.",
|
|
622
622
|
"**`start { }` is the primitive when you want a custom trigger.** No wake phrase — register a handler that the developer fires manually (button, schedule, custom voice phrase, external signal). Returns the same `ConversationRegistrationHandle` (Kotlin interface / Swift protocol) returned by `onWake`; `cancel()` removes the registration without killing an in-flight handler. (Distinct from the uniffi-generated `ConversationRegistration` data class — that's the core's record of a registration, returned by `glasses.conversation.listRegistrations()`, not the handle.)",
|
|
623
623
|
"**Singleton-active in v1.** Only one conversation handler runs at a time per core. Concurrent triggers get rejected (`startHandler` returns false). Future versions may relax this; for now, write handlers that complete promptly or use cancellation to free the slot.",
|
|
@@ -774,13 +774,254 @@ _ = glasses.conversation?.onWake(phrase: "hey assistant") { ctx in
|
|
|
774
774
|
}
|
|
775
775
|
}`,
|
|
776
776
|
gotchas: [
|
|
777
|
-
"**Opt-in via `ExtentosConfig.conversationOptions`.** Pass `ConversationCoreOptions(config:, sileroVadModelPath:, smartTurnModelPath:, backendBaseUrl:, aiEndpoint:)` at create. Missing options → both `glasses.conversation` and `glasses.ai` are null; voice-only apps don't pay the ~10 MB model
|
|
777
|
+
"**Opt-in via `ExtentosConfig.conversationOptions`.** Pass `ConversationCoreOptions(config:, sileroVadModelPath:, smartTurnModelPath:, backendBaseUrl:, aiEndpoint:)` at create. Missing options → both `glasses.conversation` and `glasses.ai` are null; voice-only apps don't pay the ~10 MB ONNX session-load cost (model bytes still ship in the AAR / Swift package, just unloaded). The Silero VAD + Smart Turn v3 ONNX models are bundled INSIDE the library — use `ConversationModels.ensureExtracted(context)` on Android (suspend; extracts AAR assets to cacheDir, idempotent) or `ConversationModels.paths` on iOS (synchronous; `Bundle.module` lookup) to resolve the file paths.",
|
|
778
778
|
"**Five A10 lifecycle events emitted automatically:** handler_started / handler_finished / turn_started / turn_ended / barge_in / error. Visible via `glasses.runtime.events.filterIsInstance<RuntimeEvent.Conversation>()`, the simulator's right-rail ConversationPanel (H2), and `getEventLog(filter: \"voice\")` (conversation.error climbs to filter: \"errors\" automatically).",
|
|
779
779
|
"**PII boundary at emission.** Event payloads carry `textLen` (char count) only — never the transcript text itself. Rust core enforces; bridges + persist + agent surfaces carry the boundary forward. Don't try to add a backdoor; v1 deliberately doesn't ship one.",
|
|
780
780
|
"**Compare with the legacy path before committing.** `searchDocs(topic: \"conversation_runtime\")` has a comparison table positioning Phase 3 vs. legacy by use case (custom STT, non-OpenAI LLM, hand-rolled turn-finalization → still use legacy primitives).",
|
|
781
781
|
],
|
|
782
782
|
relatedExamples: ["conversation_agent_loop"],
|
|
783
783
|
};
|
|
784
|
+
// ── Phase 4 assistant runtime guides ──────────────────────────────────
|
|
785
|
+
const ASSISTANT_RUNTIME = {
|
|
786
|
+
feature: "assistant_runtime",
|
|
787
|
+
summary: "Phase 4 — umbrella entry for the `glasses.assistant` API. End-to-end voice provider abstraction: customer code is `glasses.assistant.start(provider) { tool(name, description) { body -> ToolResult } }`. The model owns wake / turn-taking / intent / confirmation; the customer writes tool bodies that act on app state. v1 ships OpenAI Realtime (`gpt-realtime` over WebSocket); Gemini Live in v1.5+. **Canonical replacement for the Phase 3 conversation runtime, which deprecates in v1.4.0 and removes in v2.0.0.** See per-feature entries (assistant_start, assistant_tool, assistant_provider_openai) for call-shape detail. Full composition example: `getCodeExample(pattern: \"assistant_agent_loop\")`. Conceptual guide: `searchDocs(topic: \"assistant_runtime\")`.",
|
|
788
|
+
kotlin: `// The whole runtime in one start block:
|
|
789
|
+
glasses.assistant.setOpenaiApiKey(BuildConfig.OPENAI_API_KEY)
|
|
790
|
+
glasses.assistant.start(
|
|
791
|
+
provider = AssistantProvider.OpenAi(model = "gpt-realtime", voice = "alloy"),
|
|
792
|
+
) {
|
|
793
|
+
instructions = "You are a helpful assistant on smart glasses. Speak briefly."
|
|
794
|
+
tool("take_picture", "Take a photo with the glasses camera.") {
|
|
795
|
+
val photo = glasses.camera.capturePhoto().valueOrNull()
|
|
796
|
+
?: return@tool ToolResult.Err("camera failed")
|
|
797
|
+
library.addPhoto(photo)
|
|
798
|
+
ToolResult.Ok("photo saved")
|
|
799
|
+
}
|
|
800
|
+
}`,
|
|
801
|
+
swift: `// The whole runtime in one start closure:
|
|
802
|
+
glasses.assistant.setOpenAiApiKey(Secrets.openAiKey)
|
|
803
|
+
_ = try await glasses.assistant.start(
|
|
804
|
+
provider: .openAI(model: "gpt-realtime", voice: "alloy")
|
|
805
|
+
) { config in
|
|
806
|
+
config.instructions = "You are a helpful assistant on smart glasses. Speak briefly."
|
|
807
|
+
config.tool("take_picture", description: "Take a photo with the glasses camera.") {
|
|
808
|
+
// capturePhoto returns ExtentosResult<Photo, CaptureError> async
|
|
809
|
+
// (not throwing); extract the success branch via the .success
|
|
810
|
+
// accessor on ExtentosResult (Errors.swift).
|
|
811
|
+
guard let photo = (await glasses.camera.capturePhoto()).success else {
|
|
812
|
+
return .err("camera failed")
|
|
813
|
+
}
|
|
814
|
+
library.add(photo)
|
|
815
|
+
return .ok("photo saved")
|
|
816
|
+
}
|
|
817
|
+
}`,
|
|
818
|
+
gotchas: [
|
|
819
|
+
"**glasses.assistant is always-on — no opt-in.** Unlike Phase 3's nullable `glasses.conversation` (gated on conversationOptions in ExtentosConfig), Phase 4 ships zero on-device ML so there's no cost to always exposing the surface. No ConversationModels.ensureExtracted, no ONNX file paths, no cascaded options to wire.",
|
|
820
|
+
"**Singleton-active per ExtentosGlasses (synthesis #13).** At most one assistant.start() at a time. A second start while active throws AssistantException(AlreadyActive). Call `glasses.assistant.stop()` (or `session.stop()`) before starting a new one. v1 simplicity; can relax in v1.x if customer demand surfaces.",
|
|
821
|
+
"**Eight `assistant.*` lifecycle events emitted automatically (synthesis #15):** session_started / session_ended / user_spoke / assistant_spoke / tool_called / tool_result / reconnected / error. Visible via `glasses.runtime.events.filterIsInstance<RuntimeEvent.Assistant>()`, the simulator's right-rail AssistantPanel, and `getEventLog(filter: \"voice\")`. assistant.error climbs to filter:\"errors\" automatically.",
|
|
822
|
+
"**PII boundary differs from Phase 3.** Assistant events DO carry verbatim transcripts in user_spoke / assistant_spoke. Phase 3 conversation.* stripped text (only textLen) because the cascaded path routed transcripts through Extentos backend. Phase 4 BYOK contract sends transcripts device → openai.com directly without touching Extentos backend, so the platform-side PII enforcement doesn't apply. Customer apps own their data retention story.",
|
|
823
|
+
"**Library-owned transparent reconnection (synthesis #23).** OpenAI Realtime hard-caps sessions at 60 min; library proactively reconnects every ~50 min + on WS onFailure / onClosed. Customer code doesn't see the swap. `assistant.reconnected` event fires for observability. Conversation history (recent 40 turns) replays on each reconnect.",
|
|
824
|
+
"**BYOK key flows direct to OpenAI (synthesis #12).** `setOpenaiApiKey(key)` stores the key in the AssistantClient; when start() opens the WebSocket, the key goes into `Authorization: Bearer ...` for the wss://api.openai.com/v1/realtime connection. Extentos backend never sees the key. See `getCredentialGuide(service: \"openai\")` for the local.properties + resValue / Info.plist plumbing.",
|
|
825
|
+
],
|
|
826
|
+
relatedExamples: ["assistant_agent_loop"],
|
|
827
|
+
};
|
|
828
|
+
const ASSISTANT_START = {
|
|
829
|
+
feature: "assistant_start",
|
|
830
|
+
summary: "Open an assistant session. Two equivalent forms: sugar `start(provider) { tool(...) { ... } }` (trailing-lambda builder) and raw `createSession(AssistantConfig(...))` + `session.start()`. Sugar is idiomatic for the common case; raw is the customer-can-skip-it primitive for programmatic tool registration. Both return an `AssistantSession`. Singleton-active per synthesis #13.",
|
|
831
|
+
kotlin: `// Sugar form
|
|
832
|
+
val session = glasses.assistant.start(
|
|
833
|
+
provider = AssistantProvider.OpenAi(model = "gpt-realtime", voice = "alloy"),
|
|
834
|
+
) {
|
|
835
|
+
instructions = "..."
|
|
836
|
+
tool("take_picture", "Take a photo.") { ToolResult.Ok("photo saved") }
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
// Raw form — equivalent
|
|
840
|
+
val session = glasses.assistant.createSession(AssistantConfig(
|
|
841
|
+
provider = AssistantProvider.OpenAi(...),
|
|
842
|
+
instructions = "...",
|
|
843
|
+
tools = listOf(
|
|
844
|
+
ToolDefinition("take_picture", "Take a photo.") { _ -> ToolResult.Ok("photo saved") },
|
|
845
|
+
),
|
|
846
|
+
))
|
|
847
|
+
session.start()
|
|
848
|
+
|
|
849
|
+
// Observe lifecycle:
|
|
850
|
+
session.state.collect { state -> /* Idle, Starting, Active, Reconnecting, Stopping, Ended */ }
|
|
851
|
+
|
|
852
|
+
// Stop when done:
|
|
853
|
+
session.stop() // or glasses.assistant.stop() — equivalent`,
|
|
854
|
+
swift: `// Sugar form
|
|
855
|
+
let session = try await glasses.assistant.start(
|
|
856
|
+
provider: .openAI(model: "gpt-realtime", voice: "alloy")
|
|
857
|
+
) { config in
|
|
858
|
+
config.instructions = "..."
|
|
859
|
+
config.tool("take_picture", description: "Take a photo.") { .ok("photo saved") }
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
// Raw form — equivalent
|
|
863
|
+
let session = glasses.assistant.createSession(config: AssistantConfig(
|
|
864
|
+
provider: .openAI(model: "gpt-realtime", voice: "alloy"),
|
|
865
|
+
instructions: "...",
|
|
866
|
+
tools: [ToolDefinition(name: "take_picture", description: "Take a photo.") { _ in .ok("photo saved") }]
|
|
867
|
+
))
|
|
868
|
+
try await session.start()
|
|
869
|
+
|
|
870
|
+
// Observe lifecycle (StateFlow-style — replays current on subscribe):
|
|
871
|
+
for await state in session.state.stream { /* idle, starting, active, reconnecting, stopping, ended */ }
|
|
872
|
+
|
|
873
|
+
// Stop when done (async, NOT throwing on iOS):
|
|
874
|
+
await session.stop() // or await glasses.assistant.stop() — equivalent`,
|
|
875
|
+
gotchas: [
|
|
876
|
+
"**`start()` is suspend / async throws — call from a coroutine / Task.** Opens the WebSocket, sends session.update, awaits session.updated handshake (~1-2s typical). Throws AssistantException(NoApiKey) if you haven't called setOpenaiApiKey; AssistantException(AlreadyActive) if another session is active; AssistantException(NetworkError) on WS open failure.",
|
|
877
|
+
"**Sugar form auto-starts the session; raw form does not.** `assistant.start(provider) { ... }` returns an already-Active session. `assistant.createSession(config)` returns an Idle session — you call `session.start()` to activate. The sugar is shorthand for `createSession + start`.",
|
|
878
|
+
"**Customer-can-skip-it (synthesis #7).** The raw form is the primitive; the sugar reduces to it. Every customer can replace `start { tool(...) { ... } }` with `createSession(AssistantConfig(tools = listOf(ToolDefinition(...), ...)))` + `start()` and get identical behavior. Useful for programmatic tool registration (loaded from config, conditional, etc.).",
|
|
879
|
+
"**`stop()` is idempotent.** Calling stop() on an Ended session is a no-op. Calling start() on an Ended session throws AssistantException(SessionEnded) — create a new session via createSession() to start fresh.",
|
|
880
|
+
],
|
|
881
|
+
relatedExamples: ["assistant_agent_loop"],
|
|
882
|
+
};
|
|
883
|
+
const ASSISTANT_TOOL = {
|
|
884
|
+
feature: "assistant_tool",
|
|
885
|
+
summary: "Register a tool the assistant may call. Three overloads on the `AssistantConfigBuilder` receiver inside `start { ... }`: (1) no-arg `tool(name, description) { -> ToolResult }`, (2) typed-args `tool<Args>(name, description) { args -> ToolResult }` where Args is `@Serializable` (Kotlin) / `Codable` (Swift), (3) explicit-schema escape hatch `tool(name, description, schema = JsonObject(...)) { args -> ToolResult }`. **Cross-platform asymmetry (Q3, intentional):** Kotlin infers the schema from Args's SerialDescriptor at runtime; Swift requires explicit `schema:` parameter on the typed overload (no Mirror walk on types — see synthesis #8). JSON Schema sent to OpenAI is identical regardless of source platform.",
|
|
886
|
+
kotlin: `// No-arg tool (most common — camera, status, simple actions)
|
|
887
|
+
tool("take_picture", "Take a photo when the user asks to capture a moment.") {
|
|
888
|
+
ToolResult.Ok("photo saved")
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
// Typed-args tool — Args inferred from @Serializable type
|
|
892
|
+
@kotlinx.serialization.Serializable
|
|
893
|
+
data class SetReminderArgs(val text: String, val minutesFromNow: Int)
|
|
894
|
+
|
|
895
|
+
tool<SetReminderArgs>("set_reminder", "Set a timed reminder.") { args ->
|
|
896
|
+
reminders.add(args.text, delay = args.minutesFromNow.minutes)
|
|
897
|
+
ToolResult.Ok("reminder set for \${args.minutesFromNow} min")
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
// Explicit-schema escape hatch — for polymorphic types or format constraints
|
|
901
|
+
tool("set_filter", "Apply an image filter.", schema = buildJsonObject {
|
|
902
|
+
put("type", "object")
|
|
903
|
+
put("properties", buildJsonObject {
|
|
904
|
+
put("name", buildJsonObject { put("type", "string"); put("enum", buildJsonArray { add("sepia"); add("noir") }) })
|
|
905
|
+
})
|
|
906
|
+
put("required", buildJsonArray { add("name") })
|
|
907
|
+
}) { args ->
|
|
908
|
+
val filterName = args["name"]?.jsonPrimitive?.contentOrNull
|
|
909
|
+
ToolResult.Ok("filter applied: \$filterName")
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
// Per-tool blocking opt-out (synthesis #9 — default is non-blocking)
|
|
913
|
+
tool("get_battery", "Current battery percentage.", blocking = true) {
|
|
914
|
+
ToolResult.Ok("\${battery.percent()}%")
|
|
915
|
+
}`,
|
|
916
|
+
swift: `// No-arg tool
|
|
917
|
+
config.tool("take_picture", description: "Take a photo when the user asks to capture a moment.") {
|
|
918
|
+
.ok("photo saved")
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
// Typed-args tool — EXPLICIT schema required on Swift (Q3 asymmetry).
|
|
922
|
+
// v1 has no \`JSONSchema\` builder helper; the customer constructs the
|
|
923
|
+
// schema directly via \`JSONValue\` (Codable + Sendable). Args type
|
|
924
|
+
// is inferred from the closure parameter annotation, not a separate
|
|
925
|
+
// \`args:\` parameter — see Tool.swift's typed-overload signature.
|
|
926
|
+
struct SetReminderArgs: Codable, Sendable {
|
|
927
|
+
let text: String
|
|
928
|
+
let minutesFromNow: Int
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
let reminderSchema: JSONValue = .object([
|
|
932
|
+
"type": .string("object"),
|
|
933
|
+
"properties": .object([
|
|
934
|
+
"text": .object(["type": .string("string")]),
|
|
935
|
+
"minutesFromNow": .object(["type": .string("integer")]),
|
|
936
|
+
]),
|
|
937
|
+
"required": .array([.string("text"), .string("minutesFromNow")]),
|
|
938
|
+
])
|
|
939
|
+
|
|
940
|
+
config.tool(
|
|
941
|
+
"set_reminder",
|
|
942
|
+
description: "Set a timed reminder.",
|
|
943
|
+
schema: reminderSchema
|
|
944
|
+
) { (args: SetReminderArgs) in
|
|
945
|
+
await reminders.add(args.text, delaySeconds: args.minutesFromNow * 60)
|
|
946
|
+
return .ok("reminder set for \\(args.minutesFromNow) min")
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
// Per-tool blocking opt-out (synthesis #9 — default is non-blocking)
|
|
950
|
+
config.tool("get_battery", description: "Current battery percentage.", blocking: true) {
|
|
951
|
+
.ok("\\(battery.percent())%")
|
|
952
|
+
}`,
|
|
953
|
+
gotchas: [
|
|
954
|
+
"**Tool descriptions matter — write them for the AI, not the engineer.** The model reads the description verbatim when deciding which tool to call. Use \"Take a photo when the user asks to capture a moment\" (describes WHEN to call) not \"Captures imagery via the camera SDK\" (describes implementation). Mock provider's word-overlap matcher also benefits from descriptions that contain keywords from likely user utterances.",
|
|
955
|
+
"**Tool body runs on Dispatchers.IO (Kotlin) / Swift Task (Swift).** Suspending camera / storage / HTTP calls are fine; CPU-heavy work won't block the main thread. Per-tool blocking opt-out via `blocking = true` parameter (synthesis #9) — true means the model waits silently for the result before speaking. Default false means the model says \"let me check...\" while the tool runs.",
|
|
956
|
+
"**`ToolResult.Ok(text)` vs `ToolResult.Err(message)`.** The `text` for Ok is what the model reads aloud / weaves into its reply. Keep it short + factual: \"photo saved\" not \"Image successfully persisted to local storage at /...\". For structured data the model needs to reason about, return it as a JSON string: `ToolResult.Ok(\"\"\"{\"km\": 12.4}\"\"\")`. Err is the user-facing failure message; the model surfaces it (\"sorry, the camera failed\").",
|
|
957
|
+
"**Customer-can-skip-it (synthesis #8) — the builder is sugar over `ToolDefinition`.** Every tool() call constructs a `ToolDefinition(name, description, schema, blocking, body)` and appends to the builder's list. Customers can skip the builder entirely and pass `tools = listOf(ToolDefinition(...))` to `AssistantConfig` directly for programmatic registration.",
|
|
958
|
+
"**Tools have full access to glasses.* + app state (synthesis #14).** No sandbox in v1. Tool body is regular customer-app code — it sees `glasses.camera`, `glasses.audio`, the app's DBs, view models, repositories, third-party SDKs. Security boundary stays at the app/OS level (Android permissions, iOS Info.plist) — not the SDK level. Per the indie/hobbyist target audience + BYOK provider model.",
|
|
959
|
+
],
|
|
960
|
+
relatedExamples: ["assistant_agent_loop"],
|
|
961
|
+
};
|
|
962
|
+
const ASSISTANT_PROVIDER_OPENAI = {
|
|
963
|
+
feature: "assistant_provider_openai",
|
|
964
|
+
summary: "OpenAI Realtime provider configuration. `AssistantProvider.OpenAi(model, voice, turnDetection)` — model defaults to \"gpt-realtime\" (use \"gpt-realtime-mini\" for cheaper / faster; \"gpt-realtime-1.5\" for the latest variant); voice from OpenAI's catalog (\"alloy\", \"echo\", \"shimmer\", \"marin\"); turnDetection defaults to `ServerVad(threshold = 0.5, prefixPaddingMs = 300, silenceDurationMs = 500)` per synthesis #10. BYOK key set out-of-band via `setOpenaiApiKey`. WebSocket transport in v1 (WebRTC v1.1+). GA wire format `audio/pcmu` (no rate field; G.711 intrinsic 8 kHz) per synthesis #6.",
|
|
965
|
+
kotlin: `// Default — gpt-realtime + alloy + ServerVad defaults
|
|
966
|
+
val provider = AssistantProvider.OpenAi(
|
|
967
|
+
model = "gpt-realtime",
|
|
968
|
+
voice = "alloy",
|
|
969
|
+
)
|
|
970
|
+
|
|
971
|
+
// Custom VAD tuning — more aggressive turn-end detection
|
|
972
|
+
val provider = AssistantProvider.OpenAi(
|
|
973
|
+
model = "gpt-realtime",
|
|
974
|
+
voice = "marin",
|
|
975
|
+
turnDetection = TurnDetection.ServerVad(
|
|
976
|
+
threshold = 0.6,
|
|
977
|
+
prefixPaddingMs = 200,
|
|
978
|
+
silenceDurationMs = 350,
|
|
979
|
+
),
|
|
980
|
+
)
|
|
981
|
+
|
|
982
|
+
// Semantic VAD — slower but smarter turn detection (model uses context
|
|
983
|
+
// to decide whether the user actually finished, vs paused mid-sentence)
|
|
984
|
+
val provider = AssistantProvider.OpenAi(
|
|
985
|
+
model = "gpt-realtime",
|
|
986
|
+
voice = "alloy",
|
|
987
|
+
turnDetection = TurnDetection.SemanticVad,
|
|
988
|
+
)
|
|
989
|
+
|
|
990
|
+
// BYOK key — set ONCE at bootstrap; reused on every session.start() +
|
|
991
|
+
// every reconnect within a session.
|
|
992
|
+
glasses.assistant.setOpenaiApiKey(BuildConfig.OPENAI_API_KEY)`,
|
|
993
|
+
swift: `// Default — gpt-realtime + alloy + ServerVad defaults
|
|
994
|
+
let provider: AssistantProvider = .openAI(model: "gpt-realtime", voice: "alloy")
|
|
995
|
+
|
|
996
|
+
// Custom VAD tuning
|
|
997
|
+
let provider: AssistantProvider = .openAI(
|
|
998
|
+
model: "gpt-realtime",
|
|
999
|
+
voice: "marin",
|
|
1000
|
+
turnDetection: .serverVad(
|
|
1001
|
+
threshold: 0.6,
|
|
1002
|
+
prefixPaddingMs: 200,
|
|
1003
|
+
silenceDurationMs: 350
|
|
1004
|
+
)
|
|
1005
|
+
)
|
|
1006
|
+
|
|
1007
|
+
// Semantic VAD
|
|
1008
|
+
let provider: AssistantProvider = .openAI(
|
|
1009
|
+
model: "gpt-realtime",
|
|
1010
|
+
voice: "alloy",
|
|
1011
|
+
turnDetection: .semanticVad
|
|
1012
|
+
)
|
|
1013
|
+
|
|
1014
|
+
// BYOK key
|
|
1015
|
+
glasses.assistant.setOpenAiApiKey(Secrets.openAiKey)`,
|
|
1016
|
+
gotchas: [
|
|
1017
|
+
"**Voice is locked at session start.** Per OpenAI Realtime — once the model has spoken, voice can't change mid-session. Library reads it once at session.update and never re-issues. To switch voice, stop + start a new session.",
|
|
1018
|
+
"**Wire format is `audio/pcmu` with NO rate field (synthesis #6).** G.711 mulaw is intrinsically 8 kHz; the GA spec encodes that via the format type alone. Library handles the PCM↔mulaw codec internally — customer never sees raw bytes. Validated via Twilio's production GA integration. Fallback to `audio/pcm rate=24000` documented but unlikely needed.",
|
|
1019
|
+
"**60-min hard ceiling on OpenAI Realtime sessions.** Library proactively reconnects every ~50 min ahead of the ceiling; on WS onFailure / onClosed mid-session, coalesced reconnect via lifecycle mutex; recent 40 conversation turns replayed on each reconnect; customer never sees the swap. `assistant.reconnected` event fires for observability. Synthesis #23.",
|
|
1020
|
+
"**No Anthropic provider in v1 or v2 (synthesis #17).** Anthropic hasn't shipped a Realtime API. v2.0.0 ships OpenAI only; Gemini Live in v1.5+. Revisit Claude when Anthropic ships their equivalent.",
|
|
1021
|
+
"**Test with `AssistantProvider.Mock()` first (synthesis #16).** Mock is deterministic, sub-millisecond, $0; matches injected utterances against tool descriptions for deterministic CI. Save the OpenAi provider for end-to-end smoke + production.",
|
|
1022
|
+
],
|
|
1023
|
+
relatedExamples: ["assistant_agent_loop"],
|
|
1024
|
+
};
|
|
784
1025
|
export const CAPABILITY_GUIDES = {
|
|
785
1026
|
capture_photo: CAPTURE_PHOTO,
|
|
786
1027
|
capture_video: CAPTURE_VIDEO,
|
|
@@ -792,7 +1033,13 @@ export const CAPABILITY_GUIDES = {
|
|
|
792
1033
|
connection_state: CONNECTION_STATE,
|
|
793
1034
|
toggles: TOGGLES,
|
|
794
1035
|
voice_command: VOICE_COMMAND,
|
|
795
|
-
// Phase
|
|
1036
|
+
// Phase 4 assistant runtime primitives (canonical voice-AI surface).
|
|
1037
|
+
assistant_runtime: ASSISTANT_RUNTIME,
|
|
1038
|
+
assistant_start: ASSISTANT_START,
|
|
1039
|
+
assistant_tool: ASSISTANT_TOOL,
|
|
1040
|
+
assistant_provider_openai: ASSISTANT_PROVIDER_OPENAI,
|
|
1041
|
+
// Phase 3 conversation runtime primitives — DEPRECATED in v1.4.0,
|
|
1042
|
+
// REMOVED in v2.0.0. Kept here for the migration window.
|
|
796
1043
|
conversation_runtime: CONVERSATION_RUNTIME,
|
|
797
1044
|
conversation_on_wake: CONVERSATION_ON_WAKE,
|
|
798
1045
|
conversation_listen: CONVERSATION_LISTEN,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilityPatterns.js","sourceRoot":"","sources":["../../../src/tools/data/capabilityPatterns.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"capabilityPatterns.js","sourceRoot":"","sources":["../../../src/tools/data/capabilityPatterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codeExamples.d.ts","sourceRoot":"","sources":["../../../src/tools/data/codeExamples.ts"],"names":[],"mappings":"AAeA,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,aAAa,EAAE,gBAAgB,GAAG,qBAAqB,GAAG,oBAAoB,GAAG,2BAA2B,CAAC;IAC7G,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,SAAS,EAAE,sBAAsB,CAAC;CACnC;AAED,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,SAAS,EAAE,uBAAuB,GAAG,sBAAsB,CAAC;IAC5D;4EACwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,sBAAsB;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE;QACrB,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAC9B,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;KAC3C,CAAC;IACF;;;;;;OAMG;IACH,eAAe,CAAC,EAAE;QAChB,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;KAClC,CAAC;CACH;
|
|
1
|
+
{"version":3,"file":"codeExamples.d.ts","sourceRoot":"","sources":["../../../src/tools/data/codeExamples.ts"],"names":[],"mappings":"AAeA,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,aAAa,EAAE,gBAAgB,GAAG,qBAAqB,GAAG,oBAAoB,GAAG,2BAA2B,CAAC;IAC7G,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,SAAS,EAAE,sBAAsB,CAAC;CACnC;AAED,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IACX,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,SAAS,EAAE,uBAAuB,GAAG,sBAAsB,CAAC;IAC5D;4EACwE;IACxE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8DAA8D;IAC9D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,sBAAsB;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;;OAMG;IACH,oBAAoB,CAAC,EAAE;QACrB,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAC9B,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;KAC3C,CAAC;IACF;;;;;;OAMG;IACH,eAAe,CAAC,EAAE;QAChB,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;KAClC,CAAC;CACH;AA6sED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAWrD,CAAC;AAEF,eAAO,MAAM,qBAAqB,UAAoC,CAAC"}
|