@extentos/mcp-server 0.0.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.
Files changed (202) hide show
  1. package/README.md +56 -0
  2. package/dist/cli/login.d.ts +2 -0
  3. package/dist/cli/login.d.ts.map +1 -0
  4. package/dist/cli/login.js +71 -0
  5. package/dist/cli/login.js.map +1 -0
  6. package/dist/cli/logout.d.ts +2 -0
  7. package/dist/cli/logout.d.ts.map +1 -0
  8. package/dist/cli/logout.js +65 -0
  9. package/dist/cli/logout.js.map +1 -0
  10. package/dist/cli/privacy.d.ts +3 -0
  11. package/dist/cli/privacy.d.ts.map +1 -0
  12. package/dist/cli/privacy.js +39 -0
  13. package/dist/cli/privacy.js.map +1 -0
  14. package/dist/cli/status.d.ts +2 -0
  15. package/dist/cli/status.d.ts.map +1 -0
  16. package/dist/cli/status.js +9 -0
  17. package/dist/cli/status.js.map +1 -0
  18. package/dist/cli/update.d.ts +2 -0
  19. package/dist/cli/update.d.ts.map +1 -0
  20. package/dist/cli/update.js +8 -0
  21. package/dist/cli/update.js.map +1 -0
  22. package/dist/cli/whoami.d.ts +2 -0
  23. package/dist/cli/whoami.d.ts.map +1 -0
  24. package/dist/cli/whoami.js +8 -0
  25. package/dist/cli/whoami.js.map +1 -0
  26. package/dist/cli.d.ts +3 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +69 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/generated/schemas.d.ts +4 -0
  31. package/dist/generated/schemas.d.ts.map +1 -0
  32. package/dist/generated/schemas.js +2697 -0
  33. package/dist/generated/schemas.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +69 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/stub.d.ts +15 -0
  39. package/dist/stub.d.ts.map +1 -0
  40. package/dist/stub.js +20 -0
  41. package/dist/stub.js.map +1 -0
  42. package/dist/telemetry/client.d.ts +73 -0
  43. package/dist/telemetry/client.d.ts.map +1 -0
  44. package/dist/telemetry/client.js +207 -0
  45. package/dist/telemetry/client.js.map +1 -0
  46. package/dist/telemetry/consent.d.ts +19 -0
  47. package/dist/telemetry/consent.d.ts.map +1 -0
  48. package/dist/telemetry/consent.js +68 -0
  49. package/dist/telemetry/consent.js.map +1 -0
  50. package/dist/telemetry/index.d.ts +56 -0
  51. package/dist/telemetry/index.d.ts.map +1 -0
  52. package/dist/telemetry/index.js +151 -0
  53. package/dist/telemetry/index.js.map +1 -0
  54. package/dist/telemetry/installRegistry.d.ts +18 -0
  55. package/dist/telemetry/installRegistry.d.ts.map +1 -0
  56. package/dist/telemetry/installRegistry.js +102 -0
  57. package/dist/telemetry/installRegistry.js.map +1 -0
  58. package/dist/tools/data/capabilities.d.ts +566 -0
  59. package/dist/tools/data/capabilities.d.ts.map +1 -0
  60. package/dist/tools/data/capabilities.js +243 -0
  61. package/dist/tools/data/capabilities.js.map +1 -0
  62. package/dist/tools/data/examplePatterns.d.ts +4 -0
  63. package/dist/tools/data/examplePatterns.d.ts.map +1 -0
  64. package/dist/tools/data/examplePatterns.js +546 -0
  65. package/dist/tools/data/examplePatterns.js.map +1 -0
  66. package/dist/tools/data/presetTriggers.d.ts +4 -0
  67. package/dist/tools/data/presetTriggers.d.ts.map +1 -0
  68. package/dist/tools/data/presetTriggers.js +47 -0
  69. package/dist/tools/data/presetTriggers.js.map +1 -0
  70. package/dist/tools/data/version.d.ts +31 -0
  71. package/dist/tools/data/version.d.ts.map +1 -0
  72. package/dist/tools/data/version.js +34 -0
  73. package/dist/tools/data/version.js.map +1 -0
  74. package/dist/tools/definitions.d.ts +13 -0
  75. package/dist/tools/definitions.d.ts.map +1 -0
  76. package/dist/tools/definitions.js +347 -0
  77. package/dist/tools/definitions.js.map +1 -0
  78. package/dist/tools/docs/index.d.ts +10 -0
  79. package/dist/tools/docs/index.d.ts.map +1 -0
  80. package/dist/tools/docs/index.js +220 -0
  81. package/dist/tools/docs/index.js.map +1 -0
  82. package/dist/tools/handlers/completeAuthLink.d.ts +3 -0
  83. package/dist/tools/handlers/completeAuthLink.d.ts.map +1 -0
  84. package/dist/tools/handlers/completeAuthLink.js +152 -0
  85. package/dist/tools/handlers/completeAuthLink.js.map +1 -0
  86. package/dist/tools/handlers/createSimulatorSession.d.ts +3 -0
  87. package/dist/tools/handlers/createSimulatorSession.d.ts.map +1 -0
  88. package/dist/tools/handlers/createSimulatorSession.js +231 -0
  89. package/dist/tools/handlers/createSimulatorSession.js.map +1 -0
  90. package/dist/tools/handlers/generateConnectionModule.d.ts +3 -0
  91. package/dist/tools/handlers/generateConnectionModule.d.ts.map +1 -0
  92. package/dist/tools/handlers/generateConnectionModule.js +222 -0
  93. package/dist/tools/handlers/generateConnectionModule.js.map +1 -0
  94. package/dist/tools/handlers/generateConsumer.d.ts +3 -0
  95. package/dist/tools/handlers/generateConsumer.d.ts.map +1 -0
  96. package/dist/tools/handlers/generateConsumer.js +257 -0
  97. package/dist/tools/handlers/generateConsumer.js.map +1 -0
  98. package/dist/tools/handlers/getCredentialGuide.d.ts +3 -0
  99. package/dist/tools/handlers/getCredentialGuide.d.ts.map +1 -0
  100. package/dist/tools/handlers/getCredentialGuide.js +296 -0
  101. package/dist/tools/handlers/getCredentialGuide.js.map +1 -0
  102. package/dist/tools/handlers/getEventLog.d.ts +3 -0
  103. package/dist/tools/handlers/getEventLog.d.ts.map +1 -0
  104. package/dist/tools/handlers/getEventLog.js +90 -0
  105. package/dist/tools/handlers/getEventLog.js.map +1 -0
  106. package/dist/tools/handlers/getExampleSpec.d.ts +3 -0
  107. package/dist/tools/handlers/getExampleSpec.d.ts.map +1 -0
  108. package/dist/tools/handlers/getExampleSpec.js +44 -0
  109. package/dist/tools/handlers/getExampleSpec.js.map +1 -0
  110. package/dist/tools/handlers/getPermissions.d.ts +3 -0
  111. package/dist/tools/handlers/getPermissions.d.ts.map +1 -0
  112. package/dist/tools/handlers/getPermissions.js +50 -0
  113. package/dist/tools/handlers/getPermissions.js.map +1 -0
  114. package/dist/tools/handlers/getPlatformInfo.d.ts +3 -0
  115. package/dist/tools/handlers/getPlatformInfo.d.ts.map +1 -0
  116. package/dist/tools/handlers/getPlatformInfo.js +78 -0
  117. package/dist/tools/handlers/getPlatformInfo.js.map +1 -0
  118. package/dist/tools/handlers/getProductionChecklist.d.ts +3 -0
  119. package/dist/tools/handlers/getProductionChecklist.d.ts.map +1 -0
  120. package/dist/tools/handlers/getProductionChecklist.js +238 -0
  121. package/dist/tools/handlers/getProductionChecklist.js.map +1 -0
  122. package/dist/tools/handlers/getSimulatorStatus.d.ts +3 -0
  123. package/dist/tools/handlers/getSimulatorStatus.d.ts.map +1 -0
  124. package/dist/tools/handlers/getSimulatorStatus.js +56 -0
  125. package/dist/tools/handlers/getSimulatorStatus.js.map +1 -0
  126. package/dist/tools/handlers/getVoiceCommandGuidance.d.ts +3 -0
  127. package/dist/tools/handlers/getVoiceCommandGuidance.d.ts.map +1 -0
  128. package/dist/tools/handlers/getVoiceCommandGuidance.js +200 -0
  129. package/dist/tools/handlers/getVoiceCommandGuidance.js.map +1 -0
  130. package/dist/tools/handlers/initSpec.d.ts +3 -0
  131. package/dist/tools/handlers/initSpec.d.ts.map +1 -0
  132. package/dist/tools/handlers/initSpec.js +234 -0
  133. package/dist/tools/handlers/initSpec.js.map +1 -0
  134. package/dist/tools/handlers/inspectIntegration.d.ts +3 -0
  135. package/dist/tools/handlers/inspectIntegration.d.ts.map +1 -0
  136. package/dist/tools/handlers/inspectIntegration.js +204 -0
  137. package/dist/tools/handlers/inspectIntegration.js.map +1 -0
  138. package/dist/tools/handlers/planIntegration.d.ts +3 -0
  139. package/dist/tools/handlers/planIntegration.d.ts.map +1 -0
  140. package/dist/tools/handlers/planIntegration.js +279 -0
  141. package/dist/tools/handlers/planIntegration.js.map +1 -0
  142. package/dist/tools/handlers/searchDocs.d.ts +3 -0
  143. package/dist/tools/handlers/searchDocs.d.ts.map +1 -0
  144. package/dist/tools/handlers/searchDocs.js +41 -0
  145. package/dist/tools/handlers/searchDocs.js.map +1 -0
  146. package/dist/tools/handlers/updateSpec.d.ts +3 -0
  147. package/dist/tools/handlers/updateSpec.d.ts.map +1 -0
  148. package/dist/tools/handlers/updateSpec.js +453 -0
  149. package/dist/tools/handlers/updateSpec.js.map +1 -0
  150. package/dist/tools/handlers/validateIntegration.d.ts +3 -0
  151. package/dist/tools/handlers/validateIntegration.d.ts.map +1 -0
  152. package/dist/tools/handlers/validateIntegration.js +546 -0
  153. package/dist/tools/handlers/validateIntegration.js.map +1 -0
  154. package/dist/tools/handlers/validateSpec.d.ts +3 -0
  155. package/dist/tools/handlers/validateSpec.d.ts.map +1 -0
  156. package/dist/tools/handlers/validateSpec.js +26 -0
  157. package/dist/tools/handlers/validateSpec.js.map +1 -0
  158. package/dist/tools/registry.d.ts +4 -0
  159. package/dist/tools/registry.d.ts.map +1 -0
  160. package/dist/tools/registry.js +43 -0
  161. package/dist/tools/registry.js.map +1 -0
  162. package/dist/tools/response.d.ts +12 -0
  163. package/dist/tools/response.d.ts.map +1 -0
  164. package/dist/tools/response.js +19 -0
  165. package/dist/tools/response.js.map +1 -0
  166. package/dist/tools/templates/androidBootstrap.d.ts +2 -0
  167. package/dist/tools/templates/androidBootstrap.d.ts.map +1 -0
  168. package/dist/tools/templates/androidBootstrap.js +40 -0
  169. package/dist/tools/templates/androidBootstrap.js.map +1 -0
  170. package/dist/tools/templates/callbackHandler.d.ts +11 -0
  171. package/dist/tools/templates/callbackHandler.d.ts.map +1 -0
  172. package/dist/tools/templates/callbackHandler.js +177 -0
  173. package/dist/tools/templates/callbackHandler.js.map +1 -0
  174. package/dist/tools/templates/iosBootstrap.d.ts +3 -0
  175. package/dist/tools/templates/iosBootstrap.d.ts.map +1 -0
  176. package/dist/tools/templates/iosBootstrap.js +50 -0
  177. package/dist/tools/templates/iosBootstrap.js.map +1 -0
  178. package/dist/tools/templates/streamConsumer.d.ts +8 -0
  179. package/dist/tools/templates/streamConsumer.d.ts.map +1 -0
  180. package/dist/tools/templates/streamConsumer.js +248 -0
  181. package/dist/tools/templates/streamConsumer.js.map +1 -0
  182. package/dist/tools/util/appPackage.d.ts +4 -0
  183. package/dist/tools/util/appPackage.d.ts.map +1 -0
  184. package/dist/tools/util/appPackage.js +16 -0
  185. package/dist/tools/util/appPackage.js.map +1 -0
  186. package/dist/tools/util/backendClient.d.ts +25 -0
  187. package/dist/tools/util/backendClient.d.ts.map +1 -0
  188. package/dist/tools/util/backendClient.js +144 -0
  189. package/dist/tools/util/backendClient.js.map +1 -0
  190. package/dist/tools/util/manifest.d.ts +9 -0
  191. package/dist/tools/util/manifest.d.ts.map +1 -0
  192. package/dist/tools/util/manifest.js +62 -0
  193. package/dist/tools/util/manifest.js.map +1 -0
  194. package/dist/tools/util/permissions.d.ts +32 -0
  195. package/dist/tools/util/permissions.d.ts.map +1 -0
  196. package/dist/tools/util/permissions.js +165 -0
  197. package/dist/tools/util/permissions.js.map +1 -0
  198. package/dist/tools/validation/validateSpec.d.ts +22 -0
  199. package/dist/tools/validation/validateSpec.d.ts.map +1 -0
  200. package/dist/tools/validation/validateSpec.js +370 -0
  201. package/dist/tools/validation/validateSpec.js.map +1 -0
  202. package/package.json +58 -0
@@ -0,0 +1,546 @@
1
+ // Reference ExtentosSpec templates per MCP_TOOLS.md § getExampleSpec.
2
+ // All templates conform to schemas/extentos-spec.schema.json v1.0 and enforce:
3
+ // - is_empty branch idiom after app_callback
4
+ // - fallback trigger on voice specs
5
+ // - thermal_warning on stream specs (via preset thermal_throttle inlined)
6
+ // - branch depth ≤ 1
7
+ // - realistic handler names, named captures promoted to regular variables
8
+ const BASE = {
9
+ $schema: "extentos://schema/v1",
10
+ extentos_version: "1.0",
11
+ target: { vendor: "meta_rayban" },
12
+ };
13
+ const THERMAL_THROTTLE_TRIGGER = {
14
+ type: "thermal_warning",
15
+ id: "t_thermal_throttle",
16
+ severity: "critical",
17
+ actions: [
18
+ { type: "set_toggle", key: "battery_save_mode", value: true },
19
+ { type: "log", level: "warning", message: "thermal throttle engaged" },
20
+ ],
21
+ };
22
+ const FALLBACK_TRIGGER = {
23
+ type: "fallback",
24
+ id: "t_fallback",
25
+ actions: [
26
+ { type: "speak_text", text: "Sorry, I didn't catch that." },
27
+ ],
28
+ };
29
+ const KOTLIN_VISION = `// ExtentosCallbacks.kt (excerpt) — AppCallbackHandler impl
30
+ override suspend fun onCall(call: AppCallback): AppCallbackResult {
31
+ return when (call.handler) {
32
+ "vision" -> {
33
+ val image = call.input["image"] as? String
34
+ ?: return AppCallbackResult.Error("bad_input", "missing image")
35
+ val prompt = call.input["prompt"] as? String ?: "Describe this scene."
36
+ // TODO: wire your anthropic client here
37
+ val description = yourAnthropicClient.describe(image, prompt)
38
+ AppCallbackResult.Success(buildJsonObject { put("description", description) })
39
+ }
40
+ else -> AppCallbackResult.Error("unknown_handler", call.handler)
41
+ }
42
+ }`;
43
+ const SWIFT_VISION = `// ExtentosCallbacks.swift (excerpt) — AppCallbackHandler
44
+ func onCall(name: String, payload: JSONValue, context: CallbackContext) async -> JSONValue {
45
+ switch name {
46
+ case "vision":
47
+ guard let image = payload["image"]?.stringValue else {
48
+ return JSONValue.object(["error": .string("missing image")])
49
+ }
50
+ let prompt = payload["prompt"]?.stringValue ?? "Describe this scene."
51
+ // TODO: wire your Anthropic client here
52
+ let description = try await yourAnthropicClient.describe(image: image, prompt: prompt)
53
+ return JSONValue.object(["description": .string(description)])
54
+ default:
55
+ return JSONValue.object(["error": .string("unknown handler: \\(name)")])
56
+ }
57
+ }`;
58
+ export const PATTERN_IDS = [
59
+ "voice_assistant",
60
+ "live_translation",
61
+ "scene_description",
62
+ "notification_reader",
63
+ "navigation_guide",
64
+ "video_call",
65
+ "object_detection",
66
+ "voice_notes",
67
+ ];
68
+ export const PATTERNS = {
69
+ voice_assistant: {
70
+ id: "voice_assistant",
71
+ description: "Voice-activated AI assistant that captures a photo on 'describe what you see' and narrates the result. The archetype for any photo+vision voice command.",
72
+ spec: {
73
+ ...BASE,
74
+ blocks: [
75
+ { type: "capture_photo", id: "main_camera", params: { resolution: "MEDIUM", format: "jpeg" } },
76
+ ],
77
+ triggers: [
78
+ {
79
+ type: "voice_command",
80
+ id: "t_describe",
81
+ phrase: "describe what you see",
82
+ match_mode: "contains",
83
+ actions: [
84
+ { type: "block_call", block_id: "main_camera", save_as: "photo" },
85
+ { type: "app_callback", handler: "vision", input: { image: "{{photo}}", prompt: "Describe this scene briefly." }, save_as: "result" },
86
+ {
87
+ type: "branch",
88
+ condition: { variable: "result.description", operator: "is_empty" },
89
+ then: [{ type: "speak_text", text: "I couldn't describe that one." }],
90
+ else: [{ type: "speak_text", text: "{{result.description}}" }],
91
+ },
92
+ ],
93
+ },
94
+ FALLBACK_TRIGGER,
95
+ ],
96
+ },
97
+ usedPrimitives: {
98
+ blocks: ["capture_photo"],
99
+ streams: [],
100
+ triggers: ["voice_command", "fallback"],
101
+ actions: ["block_call", "app_callback", "branch", "speak_text"],
102
+ },
103
+ handlerNames: ["vision"],
104
+ codeSnippets: { kotlin: KOTLIN_VISION, swift: SWIFT_VISION },
105
+ },
106
+ live_translation: {
107
+ id: "live_translation",
108
+ description: "Continuous speech translation — transcription stream feeds a translate handler, speaks the translation. Manual_launch kicks it off; thermal guard included.",
109
+ spec: {
110
+ ...BASE,
111
+ blocks: [],
112
+ streams: [
113
+ {
114
+ type: "transcription_incremental",
115
+ id: "live_transcript",
116
+ config: { language: "en-US" },
117
+ },
118
+ ],
119
+ triggers: [
120
+ {
121
+ type: "manual_launch",
122
+ id: "t_start_translation",
123
+ actions: [
124
+ { type: "set_toggle", key: "transcription_enabled", value: true },
125
+ { type: "speak_text", text: "Live translation started." },
126
+ ],
127
+ },
128
+ {
129
+ type: "voice_command",
130
+ id: "t_stop_translation",
131
+ phrase: "stop translating",
132
+ match_mode: "contains",
133
+ actions: [
134
+ { type: "set_toggle", key: "transcription_enabled", value: false },
135
+ { type: "speak_text", text: "Translation stopped." },
136
+ ],
137
+ },
138
+ FALLBACK_TRIGGER,
139
+ THERMAL_THROTTLE_TRIGGER,
140
+ ],
141
+ },
142
+ usedPrimitives: {
143
+ blocks: [],
144
+ streams: ["transcription_incremental"],
145
+ triggers: ["manual_launch", "voice_command", "fallback", "thermal_warning"],
146
+ actions: ["set_toggle", "speak_text"],
147
+ },
148
+ handlerNames: ["translate"],
149
+ codeSnippets: {
150
+ kotlin: `// ExtentosStreams.kt (excerpt) — live transcript consumer\n` +
151
+ `glasses.streams.transcriptionIncremental.collect { transcript ->\n` +
152
+ ` if (transcript is Transcript.Final && transcript.text.isNotBlank()) {\n` +
153
+ ` // TODO: wire your translation client here (DeepL, Google Translate, etc.)\n` +
154
+ ` val translated = yourTranslator.translate(transcript.text, target = "es")\n` +
155
+ ` glasses.runtime.speak(translated)\n` +
156
+ ` }\n` +
157
+ `}`,
158
+ swift: `// ExtentosStreams.swift (excerpt)\n` +
159
+ `for await transcript in glasses.streams.transcriptionIncremental {\n` +
160
+ ` guard case .final(let text, _) = transcript, !text.isEmpty else { continue }\n` +
161
+ ` // TODO: wire your translation client here\n` +
162
+ ` let translated = try await yourTranslator.translate(text, target: "es")\n` +
163
+ ` await glasses.runtime.speak(translated)\n` +
164
+ `}`,
165
+ },
166
+ },
167
+ scene_description: {
168
+ id: "scene_description",
169
+ description: "Multi-phrase scene description — accepts several natural utterances for the same photo+vision flow.",
170
+ spec: {
171
+ ...BASE,
172
+ blocks: [
173
+ { type: "capture_photo", id: "main_camera", params: { resolution: "MEDIUM", format: "jpeg" } },
174
+ ],
175
+ triggers: [
176
+ {
177
+ type: "voice_command",
178
+ id: "t_describe",
179
+ phrase: "what do you see",
180
+ match_mode: "contains",
181
+ actions: [
182
+ { type: "block_call", block_id: "main_camera", save_as: "photo" },
183
+ { type: "app_callback", handler: "vision", input: { image: "{{photo}}", prompt: "Describe this scene in one sentence." }, save_as: "result" },
184
+ {
185
+ type: "branch",
186
+ condition: { variable: "result.description", operator: "is_empty" },
187
+ then: [{ type: "speak_text", text: "I couldn't see that clearly." }],
188
+ else: [{ type: "speak_text", text: "{{result.description}}" }],
189
+ },
190
+ ],
191
+ },
192
+ {
193
+ type: "voice_command",
194
+ id: "t_read_text",
195
+ phrase: "read this",
196
+ match_mode: "contains",
197
+ actions: [
198
+ { type: "block_call", block_id: "main_camera", save_as: "photo" },
199
+ { type: "app_callback", handler: "vision", input: { image: "{{photo}}", prompt: "Read the text visible in this image verbatim." }, save_as: "result" },
200
+ {
201
+ type: "branch",
202
+ condition: { variable: "result.description", operator: "is_empty" },
203
+ then: [{ type: "speak_text", text: "No readable text found." }],
204
+ else: [{ type: "speak_text", text: "{{result.description}}" }],
205
+ },
206
+ ],
207
+ },
208
+ FALLBACK_TRIGGER,
209
+ ],
210
+ },
211
+ usedPrimitives: {
212
+ blocks: ["capture_photo"],
213
+ streams: [],
214
+ triggers: ["voice_command", "fallback"],
215
+ actions: ["block_call", "app_callback", "branch", "speak_text"],
216
+ },
217
+ handlerNames: ["vision"],
218
+ codeSnippets: { kotlin: KOTLIN_VISION, swift: SWIFT_VISION },
219
+ },
220
+ notification_reader: {
221
+ id: "notification_reader",
222
+ description: "Forward phone notifications to glasses TTS. Privacy-gated: respects privacy_mode toggle.",
223
+ spec: {
224
+ ...BASE,
225
+ blocks: [],
226
+ triggers: [
227
+ {
228
+ type: "phone_notification_forwarded",
229
+ id: "t_read_notification",
230
+ actions: [
231
+ {
232
+ type: "branch",
233
+ condition: { variable: "toggles.privacy_mode", operator: "equals", value: true },
234
+ then: [{ type: "log", level: "info", message: "notification suppressed by privacy_mode" }],
235
+ else: [
236
+ { type: "earcon_beep", sound: "notification", volume: 0.6 },
237
+ { type: "speak_text", text: "{{trigger_payload.title}}. {{trigger_payload.body}}" },
238
+ ],
239
+ },
240
+ ],
241
+ },
242
+ {
243
+ type: "voice_command",
244
+ id: "t_toggle_privacy",
245
+ phrase: "enable privacy mode",
246
+ match_mode: "contains",
247
+ actions: [
248
+ { type: "set_toggle", key: "privacy_mode", value: true },
249
+ { type: "speak_text", text: "Privacy mode on." },
250
+ ],
251
+ },
252
+ FALLBACK_TRIGGER,
253
+ ],
254
+ },
255
+ usedPrimitives: {
256
+ blocks: [],
257
+ streams: [],
258
+ triggers: ["phone_notification_forwarded", "voice_command", "fallback"],
259
+ actions: ["branch", "earcon_beep", "speak_text", "log", "set_toggle"],
260
+ },
261
+ handlerNames: [],
262
+ codeSnippets: {
263
+ kotlin: `// No handler needed — notification_reader works entirely via set_toggle and branch on trigger_payload.\n` +
264
+ `// Ensure NotificationListenerService is granted at runtime; the library surfaces payload through phone_notification_forwarded.`,
265
+ swift: `// No handler needed — notification_reader works entirely via set_toggle and branch on trigger_payload.\n` +
266
+ `// Ensure UNUserNotificationCenter delegate is set; the library surfaces payload through phone_notification_forwarded.`,
267
+ },
268
+ },
269
+ navigation_guide: {
270
+ id: "navigation_guide",
271
+ description: "Turn-by-turn walking directions: location_updated feeds a navigation handler; speaks next step only when distance changed.",
272
+ spec: {
273
+ ...BASE,
274
+ blocks: [],
275
+ triggers: [
276
+ {
277
+ type: "voice_command",
278
+ id: "t_set_destination",
279
+ phrase: "navigate to {destination}",
280
+ match_mode: "contains",
281
+ actions: [
282
+ { type: "app_callback", handler: "navigation_set_destination", input: { destination: "{{destination}}" }, save_as: "nav" },
283
+ {
284
+ type: "branch",
285
+ condition: { variable: "nav.accepted", operator: "equals", value: true },
286
+ then: [{ type: "speak_text", text: "Starting navigation to {{destination}}." }],
287
+ else: [{ type: "speak_text", text: "I couldn't find that destination." }],
288
+ },
289
+ ],
290
+ },
291
+ {
292
+ type: "location_updated",
293
+ id: "t_next_step",
294
+ min_interval_millis: 5000,
295
+ min_displacement_meters: 10,
296
+ actions: [
297
+ { type: "app_callback", handler: "navigation_next_step", input: { lat: "{{trigger_payload.latitude}}", lng: "{{trigger_payload.longitude}}" }, save_as: "step" },
298
+ {
299
+ type: "branch",
300
+ condition: { variable: "step.instruction", operator: "not_empty" },
301
+ then: [{ type: "speak_text", text: "{{step.instruction}}" }],
302
+ },
303
+ ],
304
+ },
305
+ FALLBACK_TRIGGER,
306
+ ],
307
+ },
308
+ usedPrimitives: {
309
+ blocks: [],
310
+ streams: [],
311
+ triggers: ["voice_command", "location_updated", "fallback"],
312
+ actions: ["app_callback", "branch", "speak_text"],
313
+ },
314
+ handlerNames: ["navigation_set_destination", "navigation_next_step"],
315
+ codeSnippets: {
316
+ kotlin: `// Handles both navigation_set_destination and navigation_next_step via when-discriminator.\n` +
317
+ `override suspend fun onCall(call: AppCallback): AppCallbackResult = when (call.handler) {\n` +
318
+ ` "navigation_set_destination" -> {\n` +
319
+ ` val destination = call.input["destination"] as? String ?: ""\n` +
320
+ ` // TODO: wire your routing provider here\n` +
321
+ ` val accepted = yourRoutingClient.setDestination(destination)\n` +
322
+ ` AppCallbackResult.Success(buildJsonObject { put("accepted", accepted) })\n` +
323
+ ` }\n` +
324
+ ` "navigation_next_step" -> {\n` +
325
+ ` val step = yourRoutingClient.nextStep()\n` +
326
+ ` AppCallbackResult.Success(buildJsonObject { put("instruction", step?.text.orEmpty()) })\n` +
327
+ ` }\n` +
328
+ ` else -> AppCallbackResult.Error("unknown_handler", call.handler)\n` +
329
+ `}`,
330
+ swift: `func onCall(name: String, payload: JSONValue, context: CallbackContext) async -> JSONValue {\n` +
331
+ ` switch name {\n` +
332
+ ` case "navigation_set_destination":\n` +
333
+ ` let destination = payload["destination"]?.stringValue ?? ""\n` +
334
+ ` let accepted = try await yourRoutingClient.setDestination(destination)\n` +
335
+ ` return JSONValue.object(["accepted": .bool(accepted)])\n` +
336
+ ` case "navigation_next_step":\n` +
337
+ ` let step = try await yourRoutingClient.nextStep()\n` +
338
+ ` return JSONValue.object(["instruction": .string(step?.text ?? "")])\n` +
339
+ ` default:\n` +
340
+ ` return JSONValue.object(["error": .string("unknown handler: \\(name)")])\n` +
341
+ ` }\n` +
342
+ `}`,
343
+ },
344
+ },
345
+ video_call: {
346
+ id: "video_call",
347
+ description: "Outgoing video+audio to a third-party service. Kicks off on 'start a call', toggles coexistence to prefer_video, tears down on 'end call'.",
348
+ spec: {
349
+ ...BASE,
350
+ blocks: [],
351
+ streams: [
352
+ {
353
+ type: "outgoing_video",
354
+ id: "call_video",
355
+ config: { resolution: "MEDIUM", frame_rate: 15, codec: "hvc1" },
356
+ },
357
+ {
358
+ type: "outgoing_audio",
359
+ id: "call_audio",
360
+ config: { chunk_millis: 20, codec: "opus" },
361
+ },
362
+ ],
363
+ triggers: [
364
+ {
365
+ type: "voice_command",
366
+ id: "t_start_call",
367
+ phrase: "start a call",
368
+ match_mode: "contains",
369
+ actions: [
370
+ { type: "set_toggle", key: "audio_video_coexistence_policy", value: "prefer_video" },
371
+ { type: "set_toggle", key: "camera_streaming_enabled", value: true },
372
+ { type: "speak_text", text: "Calling now." },
373
+ ],
374
+ },
375
+ {
376
+ type: "voice_command",
377
+ id: "t_end_call",
378
+ phrase: "end call",
379
+ match_mode: "contains",
380
+ actions: [
381
+ { type: "set_toggle", key: "camera_streaming_enabled", value: false },
382
+ { type: "speak_text", text: "Call ended." },
383
+ ],
384
+ },
385
+ FALLBACK_TRIGGER,
386
+ THERMAL_THROTTLE_TRIGGER,
387
+ ],
388
+ },
389
+ usedPrimitives: {
390
+ blocks: [],
391
+ streams: ["outgoing_video", "outgoing_audio"],
392
+ triggers: ["voice_command", "fallback", "thermal_warning"],
393
+ actions: ["set_toggle", "speak_text"],
394
+ },
395
+ handlerNames: [],
396
+ codeSnippets: {
397
+ kotlin: `// Send outgoing frames/chunks to your call service.\n` +
398
+ `val videoJob = scope.launch {\n` +
399
+ ` glasses.streams.outgoingVideo.collect { frame ->\n` +
400
+ ` yourCallClient.sendVideoFrame(frame.bytes, frame.presentationTimeMicros)\n` +
401
+ ` }\n` +
402
+ `}\n` +
403
+ `val audioJob = scope.launch {\n` +
404
+ ` glasses.streams.outgoingAudio.collect { chunk -> yourCallClient.sendAudioChunk(chunk.bytes) }\n` +
405
+ `}`,
406
+ swift: `let videoTask = Task.detached(priority: .utility) {\n` +
407
+ ` for await frame in glasses.streams.outgoingVideo {\n` +
408
+ ` try? await yourCallClient.send(videoFrame: frame.bytes, pts: frame.presentationTimeMicros)\n` +
409
+ ` }\n` +
410
+ `}\n` +
411
+ `let audioTask = Task.detached(priority: .utility) {\n` +
412
+ ` for await chunk in glasses.streams.outgoingAudio {\n` +
413
+ ` try? await yourCallClient.send(audioChunk: chunk.bytes)\n` +
414
+ ` }\n` +
415
+ `}`,
416
+ },
417
+ },
418
+ object_detection: {
419
+ id: "object_detection",
420
+ description: "Continuous object detection on low-fps video frames. Speaks detected objects when detection changes. Thermal throttle guard included.",
421
+ spec: {
422
+ ...BASE,
423
+ blocks: [],
424
+ streams: [
425
+ {
426
+ type: "video_frames",
427
+ id: "detection_frames",
428
+ config: { resolution: "LOW", frame_rate: 2, codec: "hvc1", backpressure: "drop_oldest" },
429
+ },
430
+ ],
431
+ triggers: [
432
+ {
433
+ type: "voice_command",
434
+ id: "t_toggle_detection",
435
+ phrase: "start detecting objects",
436
+ match_mode: "contains",
437
+ actions: [
438
+ { type: "set_toggle", key: "camera_streaming_enabled", value: true },
439
+ { type: "speak_text", text: "Object detection on." },
440
+ ],
441
+ },
442
+ {
443
+ type: "voice_command",
444
+ id: "t_stop_detection",
445
+ phrase: "stop detecting",
446
+ match_mode: "contains",
447
+ actions: [
448
+ { type: "set_toggle", key: "camera_streaming_enabled", value: false },
449
+ { type: "speak_text", text: "Stopped." },
450
+ ],
451
+ },
452
+ FALLBACK_TRIGGER,
453
+ THERMAL_THROTTLE_TRIGGER,
454
+ ],
455
+ },
456
+ usedPrimitives: {
457
+ blocks: [],
458
+ streams: ["video_frames"],
459
+ triggers: ["voice_command", "fallback", "thermal_warning"],
460
+ actions: ["set_toggle", "speak_text"],
461
+ },
462
+ handlerNames: ["detect_objects"],
463
+ codeSnippets: {
464
+ kotlin: `// Consume low-fps frames on the Default dispatcher (ML workload).\n` +
465
+ `scope.launch(Dispatchers.Default) {\n` +
466
+ ` glasses.streams.videoFrames.collect { frame ->\n` +
467
+ ` // TODO: wire your on-device ML model (TFLite / ONNX) here\n` +
468
+ ` val labels = yourDetector.detect(frame.bytes, frame.width, frame.height)\n` +
469
+ ` if (labels.isNotEmpty()) glasses.runtime.speak("I see " + labels.take(3).joinToString(", "))\n` +
470
+ ` }\n` +
471
+ `}`,
472
+ swift: `Task.detached(priority: .userInitiated) {\n` +
473
+ ` for await frame in glasses.streams.videoFrames {\n` +
474
+ ` // TODO: wire your on-device ML model (CoreML / Vision) here\n` +
475
+ ` let labels = yourDetector.detect(bytes: frame.bytes, width: frame.width, height: frame.height)\n` +
476
+ ` if !labels.isEmpty {\n` +
477
+ ` await glasses.runtime.speak("I see " + labels.prefix(3).joined(separator: ", "))\n` +
478
+ ` }\n` +
479
+ ` }\n` +
480
+ `}`,
481
+ },
482
+ },
483
+ voice_notes: {
484
+ id: "voice_notes",
485
+ description: "Record a voice note on 'take a note', transcribe, send to your notes service. Named capture {duration} demoted to regular variable.",
486
+ spec: {
487
+ ...BASE,
488
+ blocks: [
489
+ {
490
+ type: "record_audio",
491
+ id: "note_recorder",
492
+ params: { max_duration_seconds: 30, silence_timeout_seconds: 3, quality: "standard" },
493
+ },
494
+ ],
495
+ triggers: [
496
+ {
497
+ type: "voice_command",
498
+ id: "t_take_note",
499
+ phrase: "take a note",
500
+ match_mode: "contains",
501
+ actions: [
502
+ { type: "speak_text", text: "Recording." },
503
+ { type: "block_call", block_id: "note_recorder", save_as: "note" },
504
+ {
505
+ type: "branch",
506
+ condition: { variable: "note.transcript", operator: "is_empty" },
507
+ then: [{ type: "speak_text", text: "I didn't catch that." }],
508
+ else: [
509
+ { type: "app_callback", handler: "save_note", input: { text: "{{note.transcript}}" }, save_as: "save_result" },
510
+ { type: "speak_text", text: "Saved." },
511
+ ],
512
+ },
513
+ ],
514
+ },
515
+ FALLBACK_TRIGGER,
516
+ ],
517
+ },
518
+ usedPrimitives: {
519
+ blocks: ["record_audio"],
520
+ streams: [],
521
+ triggers: ["voice_command", "fallback"],
522
+ actions: ["speak_text", "block_call", "branch", "app_callback"],
523
+ },
524
+ handlerNames: ["save_note"],
525
+ codeSnippets: {
526
+ kotlin: `override suspend fun onCall(call: AppCallback): AppCallbackResult = when (call.handler) {\n` +
527
+ ` "save_note" -> {\n` +
528
+ ` val text = call.input["text"] as? String ?: ""\n` +
529
+ ` // TODO: wire your notes backend (Notion, Supabase, etc.) here\n` +
530
+ ` yourNotesClient.save(text)\n` +
531
+ ` AppCallbackResult.Success(buildJsonObject { put("ok", true) })\n` +
532
+ ` }\n` +
533
+ ` else -> AppCallbackResult.Error("unknown_handler", call.handler)\n` +
534
+ `}`,
535
+ swift: `func onCall(name: String, payload: JSONValue, context: CallbackContext) async -> JSONValue {\n` +
536
+ ` guard name == "save_note" else {\n` +
537
+ ` return JSONValue.object(["error": .string("unknown handler: \\(name)")])\n` +
538
+ ` }\n` +
539
+ ` let text = payload["text"]?.stringValue ?? ""\n` +
540
+ ` try await yourNotesClient.save(text)\n` +
541
+ ` return JSONValue.object(["ok": .bool(true)])\n` +
542
+ `}`,
543
+ },
544
+ },
545
+ };
546
+ //# sourceMappingURL=examplePatterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examplePatterns.js","sourceRoot":"","sources":["../../../src/tools/data/examplePatterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const PRESET_TRIGGER_IDS: readonly ["fallback_default", "thermal_throttle", "disconnect_announce"];
2
+ export type PresetTriggerId = (typeof PRESET_TRIGGER_IDS)[number];
3
+ export declare const PRESET_TRIGGERS: Record<PresetTriggerId, Record<string, unknown>>;
4
+ //# sourceMappingURL=presetTriggers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presetTriggers.d.ts","sourceRoot":"","sources":["../../../src/tools/data/presetTriggers.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB,0EAIrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAqC5E,CAAC"}
@@ -0,0 +1,47 @@
1
+ // Preset-trigger expansions for initSpec.
2
+ // Source: docs/_mcp_tools_working.md § initSpec presetTriggers.
3
+ // Explicit agent-provided triggers with matching `id` override the preset.
4
+ export const PRESET_TRIGGER_IDS = [
5
+ "fallback_default",
6
+ "thermal_throttle",
7
+ "disconnect_announce",
8
+ ];
9
+ export const PRESET_TRIGGERS = {
10
+ fallback_default: {
11
+ type: "fallback",
12
+ id: "fallback_handler",
13
+ actions: [
14
+ {
15
+ type: "log",
16
+ level: "info",
17
+ message: "unrecognized utterance",
18
+ payload: { raw: "{{trigger_payload.raw_transcript}}" },
19
+ },
20
+ { type: "speak_text", text: "Sorry, I didn't catch that. Try again." },
21
+ ],
22
+ },
23
+ thermal_throttle: {
24
+ type: "thermal_warning",
25
+ id: "thermal_throttle",
26
+ severity: "moderate",
27
+ actions: [
28
+ { type: "log", level: "warning", message: "thermal warning — entering battery save mode" },
29
+ { type: "set_toggle", key: "battery_save_mode", value: true },
30
+ ],
31
+ },
32
+ disconnect_announce: {
33
+ type: "connection_state_changed",
34
+ id: "disconnect_announce",
35
+ on_transition: { to: "Disconnected" },
36
+ actions: [
37
+ { type: "speak_text", text: "Glasses disconnected." },
38
+ {
39
+ type: "log",
40
+ level: "info",
41
+ message: "glasses disconnected",
42
+ payload: { cause: "{{trigger_payload.cause}}" },
43
+ },
44
+ ],
45
+ },
46
+ };
47
+ //# sourceMappingURL=presetTriggers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presetTriggers.js","sourceRoot":"","sources":["../../../src/tools/data/presetTriggers.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,gEAAgE;AAChE,2EAA2E;AAE3E,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,kBAAkB;IAClB,kBAAkB;IAClB,qBAAqB;CACb,CAAC;AAIX,MAAM,CAAC,MAAM,eAAe,GAAqD;IAC/E,gBAAgB,EAAE;QAChB,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,kBAAkB;QACtB,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,wBAAwB;gBACjC,OAAO,EAAE,EAAE,GAAG,EAAE,oCAAoC,EAAE;aACvD;YACD,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,wCAAwC,EAAE;SACvE;KACF;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,iBAAiB;QACvB,EAAE,EAAE,kBAAkB;QACtB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,8CAA8C,EAAE;YAC1F,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE;SAC9D;KACF;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,0BAA0B;QAChC,EAAE,EAAE,qBAAqB;QACzB,aAAa,EAAE,EAAE,EAAE,EAAE,cAAc,EAAE;QACrC,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,uBAAuB,EAAE;YACrD;gBACE,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,sBAAsB;gBAC/B,OAAO,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE;aAChD;SACF;KACF;CACF,CAAC"}
@@ -0,0 +1,31 @@
1
+ export declare const VERSION_INFO: {
2
+ latestStable: string;
3
+ specVersion: string;
4
+ android: {
5
+ minimumSdk: number;
6
+ compileSdk: number;
7
+ targetSdk: number;
8
+ kotlinVersion: string;
9
+ };
10
+ ios: {
11
+ minimumDeploymentTarget: string;
12
+ swiftVersion: string;
13
+ };
14
+ datSdkVersion: {
15
+ android: string;
16
+ ios: string;
17
+ };
18
+ artifacts: {
19
+ android: {
20
+ core: string;
21
+ ui: string;
22
+ debug: string;
23
+ };
24
+ ios: {
25
+ package: string;
26
+ version: string;
27
+ products: string[];
28
+ };
29
+ };
30
+ };
31
+ //# sourceMappingURL=version.d.ts.map