@extentos/mcp-server 0.0.75 → 0.0.77

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 (83) hide show
  1. package/dist/tools/data/codeExamples.d.ts +53 -0
  2. package/dist/tools/data/codeExamples.d.ts.map +1 -1
  3. package/dist/tools/data/codeExamples.js +254 -62
  4. package/dist/tools/data/codeExamples.js.map +1 -1
  5. package/dist/tools/definitions.d.ts.map +1 -1
  6. package/dist/tools/definitions.js +6 -8
  7. package/dist/tools/definitions.js.map +1 -1
  8. package/dist/tools/docs/index.d.ts.map +1 -1
  9. package/dist/tools/docs/index.js +16 -7
  10. package/dist/tools/docs/index.js.map +1 -1
  11. package/dist/tools/handlers/createSimulatorSession.d.ts.map +1 -1
  12. package/dist/tools/handlers/createSimulatorSession.js +12 -1
  13. package/dist/tools/handlers/createSimulatorSession.js.map +1 -1
  14. package/dist/tools/handlers/generateConnectionModule.d.ts.map +1 -1
  15. package/dist/tools/handlers/generateConnectionModule.js +20 -13
  16. package/dist/tools/handlers/generateConnectionModule.js.map +1 -1
  17. package/dist/tools/handlers/getCodeExample.d.ts.map +1 -1
  18. package/dist/tools/handlers/getCodeExample.js +11 -1
  19. package/dist/tools/handlers/getCodeExample.js.map +1 -1
  20. package/dist/tools/handlers/getCredentialGuide.js +57 -8
  21. package/dist/tools/handlers/getCredentialGuide.js.map +1 -1
  22. package/dist/tools/handlers/getEventLog.d.ts.map +1 -1
  23. package/dist/tools/handlers/getEventLog.js +8 -10
  24. package/dist/tools/handlers/getEventLog.js.map +1 -1
  25. package/dist/tools/handlers/inspectIntegration.d.ts.map +1 -1
  26. package/dist/tools/handlers/inspectIntegration.js +8 -3
  27. package/dist/tools/handlers/inspectIntegration.js.map +1 -1
  28. package/dist/tools/handlers/validateIntegration.d.ts.map +1 -1
  29. package/dist/tools/handlers/validateIntegration.js +9 -3
  30. package/dist/tools/handlers/validateIntegration.js.map +1 -1
  31. package/dist/tools/util/generatedHash.d.ts +24 -8
  32. package/dist/tools/util/generatedHash.d.ts.map +1 -1
  33. package/dist/tools/util/generatedHash.js +88 -11
  34. package/dist/tools/util/generatedHash.js.map +1 -1
  35. package/package.json +1 -1
  36. package/dist/tools/data/examplePatterns.d.ts +0 -4
  37. package/dist/tools/data/examplePatterns.d.ts.map +0 -1
  38. package/dist/tools/data/examplePatterns.js +0 -546
  39. package/dist/tools/data/examplePatterns.js.map +0 -1
  40. package/dist/tools/data/presetTriggers.d.ts +0 -4
  41. package/dist/tools/data/presetTriggers.d.ts.map +0 -1
  42. package/dist/tools/data/presetTriggers.js +0 -47
  43. package/dist/tools/data/presetTriggers.js.map +0 -1
  44. package/dist/tools/handlers/generateConsumer.d.ts +0 -3
  45. package/dist/tools/handlers/generateConsumer.d.ts.map +0 -1
  46. package/dist/tools/handlers/generateConsumer.js +0 -477
  47. package/dist/tools/handlers/generateConsumer.js.map +0 -1
  48. package/dist/tools/handlers/getExampleSpec.d.ts +0 -3
  49. package/dist/tools/handlers/getExampleSpec.d.ts.map +0 -1
  50. package/dist/tools/handlers/getExampleSpec.js +0 -50
  51. package/dist/tools/handlers/getExampleSpec.js.map +0 -1
  52. package/dist/tools/handlers/initSpec.d.ts +0 -3
  53. package/dist/tools/handlers/initSpec.d.ts.map +0 -1
  54. package/dist/tools/handlers/initSpec.js +0 -350
  55. package/dist/tools/handlers/initSpec.js.map +0 -1
  56. package/dist/tools/handlers/planIntegration.d.ts +0 -3
  57. package/dist/tools/handlers/planIntegration.d.ts.map +0 -1
  58. package/dist/tools/handlers/planIntegration.js +0 -293
  59. package/dist/tools/handlers/planIntegration.js.map +0 -1
  60. package/dist/tools/handlers/updateSpec.d.ts +0 -3
  61. package/dist/tools/handlers/updateSpec.d.ts.map +0 -1
  62. package/dist/tools/handlers/updateSpec.js +0 -579
  63. package/dist/tools/handlers/updateSpec.js.map +0 -1
  64. package/dist/tools/handlers/validateSpec.d.ts +0 -3
  65. package/dist/tools/handlers/validateSpec.d.ts.map +0 -1
  66. package/dist/tools/handlers/validateSpec.js +0 -33
  67. package/dist/tools/handlers/validateSpec.js.map +0 -1
  68. package/dist/tools/templates/callbackHandler.d.ts +0 -11
  69. package/dist/tools/templates/callbackHandler.d.ts.map +0 -1
  70. package/dist/tools/templates/callbackHandler.js +0 -215
  71. package/dist/tools/templates/callbackHandler.js.map +0 -1
  72. package/dist/tools/templates/streamConsumer.d.ts +0 -8
  73. package/dist/tools/templates/streamConsumer.d.ts.map +0 -1
  74. package/dist/tools/templates/streamConsumer.js +0 -322
  75. package/dist/tools/templates/streamConsumer.js.map +0 -1
  76. package/dist/tools/util/userCodeMerge.d.ts +0 -69
  77. package/dist/tools/util/userCodeMerge.d.ts.map +0 -1
  78. package/dist/tools/util/userCodeMerge.js +0 -168
  79. package/dist/tools/util/userCodeMerge.js.map +0 -1
  80. package/dist/tools/validation/validateSpec.d.ts +0 -22
  81. package/dist/tools/validation/validateSpec.d.ts.map +0 -1
  82. package/dist/tools/validation/validateSpec.js +0 -623
  83. package/dist/tools/validation/validateSpec.js.map +0 -1
@@ -1,546 +0,0 @@
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_stream",
354
- id: "call_video",
355
- config: { resolution: "MEDIUM", frame_rate: 15, codec: "hvc1" },
356
- },
357
- {
358
- type: "outgoing_audio_stream",
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_stream", "outgoing_audio_stream"],
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"examplePatterns.js","sourceRoot":"","sources":["../../../src/tools/data/examplePatterns.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,47 +0,0 @@
1
- // Preset-trigger expansions for initSpec.
2
- // Source: docs/mcp/MCP_TOOLS.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
@@ -1 +0,0 @@
1
- {"version":3,"file":"presetTriggers.js","sourceRoot":"","sources":["../../../src/tools/data/presetTriggers.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAC3D,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"}
@@ -1,3 +0,0 @@
1
- import { type McpContent } from "../response.js";
2
- export declare function handleGenerateConsumer(raw: unknown): McpContent;
3
- //# sourceMappingURL=generateConsumer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generateConsumer.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/generateConsumer.ts"],"names":[],"mappings":"AA8BA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA6H5E,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAK/D"}