@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,248 @@
1
+ // Stream consumer templates per docs/_mcp_tools_working.md § generateStreamConsumer.
2
+ // Android: Flow<T> with repeatOnLifecycle(STARTED) or GlassesState.Active.scope
3
+ // iOS: AsyncStream<T> consumed in a Task with the appropriate QoS.
4
+ export function renderAndroidStreams(appPackage, streams, scope, concise) {
5
+ if (scope === "lifecycle")
6
+ return androidLifecycleTemplate(appPackage, streams, concise);
7
+ return androidConnectionTemplate(appPackage, streams, concise);
8
+ }
9
+ export function renderIosStreams(streams, scope, concise) {
10
+ if (scope === "lifecycle")
11
+ return iosLifecycleTemplate(streams, concise);
12
+ return iosConnectionTemplate(streams, concise);
13
+ }
14
+ function androidLifecycleTemplate(appPackage, streams, concise) {
15
+ const header = `// EXTENTOS-GENERATED — stream consumer boilerplate. Regenerate via MCP tools.\n` +
16
+ `package ${appPackage}.extentos\n\n` +
17
+ `import androidx.lifecycle.Lifecycle\n` +
18
+ `import androidx.lifecycle.LifecycleOwner\n` +
19
+ `import androidx.lifecycle.lifecycleScope\n` +
20
+ `import androidx.lifecycle.repeatOnLifecycle\n` +
21
+ `import com.extentos.glasses.ExtentosGlasses\n` +
22
+ `import com.extentos.glasses.camera.VideoFrame\n` +
23
+ `import com.extentos.glasses.audio.AudioChunk\n` +
24
+ `import com.extentos.glasses.audio.Transcript\n` +
25
+ `import kotlinx.coroutines.Dispatchers\n` +
26
+ `import kotlinx.coroutines.flow.catch\n` +
27
+ `import kotlinx.coroutines.flow.flowOn\n` +
28
+ `import kotlinx.coroutines.launch\n\n`;
29
+ const prose = concise
30
+ ? ""
31
+ : `/**\n * Call from onCreate() or a LaunchedEffect after glasses are connected.\n * Collection stops when the lifecycle drops below STARTED (screen off, backgrounded)\n * and resumes automatically when STARTED again.\n */\n`;
32
+ const body = streams.map((s) => androidStreamBlock(s, "lifecycle", concise)).join("\n");
33
+ return (header +
34
+ prose +
35
+ `fun LifecycleOwner.collectExtentosStreams(glasses: ExtentosGlasses) {\n` +
36
+ body +
37
+ `}\n`);
38
+ }
39
+ function androidConnectionTemplate(appPackage, streams, concise) {
40
+ const header = `// EXTENTOS-GENERATED — stream consumer boilerplate (connection-scoped). Regenerate via MCP tools.\n` +
41
+ `package ${appPackage}.extentos\n\n` +
42
+ `import com.extentos.glasses.ExtentosGlasses\n` +
43
+ `import com.extentos.glasses.connection.GlassesState\n` +
44
+ `import com.extentos.glasses.camera.VideoFrame\n` +
45
+ `import com.extentos.glasses.audio.AudioChunk\n` +
46
+ `import com.extentos.glasses.audio.Transcript\n` +
47
+ `import kotlinx.coroutines.Dispatchers\n` +
48
+ `import kotlinx.coroutines.flow.catch\n` +
49
+ `import kotlinx.coroutines.flow.flowOn\n` +
50
+ `import kotlinx.coroutines.launch\n\n`;
51
+ const prose = concise
52
+ ? ""
53
+ : `// These collectors live as long as the glasses are connected. They survive\n// Activity recreation but stop on disconnect — the per-connection scope\n// cancels all children automatically when glasses disconnect.\n\n`;
54
+ const body = streams.map((s) => androidStreamBlock(s, "connection", concise)).join("\n");
55
+ return (header +
56
+ prose +
57
+ `suspend fun collectExtentosStreams(glasses: ExtentosGlasses) {\n` +
58
+ ` glasses.connection.state.collect { state ->\n` +
59
+ ` if (state is GlassesState.Active) {\n` +
60
+ body +
61
+ ` }\n` +
62
+ ` }\n` +
63
+ `}\n`);
64
+ }
65
+ function androidStreamBlock(s, scope, concise) {
66
+ const { kotlinAccessor, kotlinType, dispatcher, shapeComment, exampleComment, backpressure } = androidStreamMeta(s.type);
67
+ const launchPrefix = scope === "lifecycle"
68
+ ? ` lifecycleScope.launch {\n repeatOnLifecycle(Lifecycle.State.STARTED) {\n `
69
+ : ` state.scope.launch {\n `;
70
+ const launchSuffix = scope === "lifecycle" ? `\n }\n }` : `\n }`;
71
+ const indentBase = scope === "lifecycle" ? " " : " ";
72
+ const comment = concise
73
+ ? ""
74
+ : ` // ── ${s.type}: "${s.id}" ──\n` +
75
+ ` // Flow<${kotlinType}> — ${backpressure}\n` +
76
+ ` // Dispatcher: ${dispatcher.replace("Dispatchers.", "")}\n`;
77
+ const inner = `glasses.${kotlinAccessor}("${s.id}")\n` +
78
+ `${indentBase}.flowOn(${dispatcher})\n` +
79
+ `${indentBase}.catch { e -> /* TODO: handle stream error — log, show UI, retry */ }\n` +
80
+ `${indentBase}.collect { item: ${kotlinType} ->\n` +
81
+ `${indentBase} // USER-CODE-START:${s.id}\n` +
82
+ (concise
83
+ ? ""
84
+ : `${indentBase} // ${shapeComment}\n${indentBase} //\n${indentBase} // ${exampleComment}\n`) +
85
+ `${indentBase} // TODO: process ${s.type} "${s.id}"\n` +
86
+ `${indentBase} // USER-CODE-END:${s.id}\n` +
87
+ `${indentBase}}`;
88
+ return comment + launchPrefix + inner + launchSuffix + "\n";
89
+ }
90
+ function androidStreamMeta(type) {
91
+ switch (type) {
92
+ case "video_frames":
93
+ return {
94
+ kotlinAccessor: "camera.videoFrames",
95
+ kotlinType: "VideoFrame",
96
+ dispatcher: "Dispatchers.Default",
97
+ backpressure: "DropOldest backpressure (skips stale frames)",
98
+ shapeComment: "item.buffer: ByteBuffer, item.width, item.height, item.presentationTimeUs",
99
+ exampleComment: "Example: val result = myDetector.detect(item.buffer, item.width, item.height)",
100
+ };
101
+ case "audio_chunks":
102
+ return {
103
+ kotlinAccessor: "audio.audioChunks",
104
+ kotlinType: "AudioChunk",
105
+ dispatcher: "Dispatchers.Default",
106
+ backpressure: "Suspend(16) backpressure (~320ms buffer)",
107
+ shapeComment: "item.samples: ShortArray (PCM 16-bit), item.sampleRate, item.timestampMs",
108
+ exampleComment: "Example: val label = soundClassifier.classify(item.samples, item.sampleRate)",
109
+ };
110
+ case "transcription_incremental":
111
+ return {
112
+ kotlinAccessor: "audio.transcriptions",
113
+ kotlinType: "Transcript",
114
+ dispatcher: "Dispatchers.Main",
115
+ backpressure: "sealed: Partial | Final (delivered on Main for UI updates)",
116
+ shapeComment: "when (item) { is Transcript.Partial -> …; is Transcript.Final -> … }",
117
+ exampleComment: "Example: updateCaptionView(item)",
118
+ };
119
+ case "outgoing_audio_stream":
120
+ return {
121
+ kotlinAccessor: "audio.outgoingAudio",
122
+ kotlinType: "AudioChunk",
123
+ dispatcher: "Dispatchers.IO",
124
+ backpressure: "Suspend(16) backpressure",
125
+ shapeComment: "item.samples (Opus or PCM per codec), item.sampleRate, item.timestampMs",
126
+ exampleComment: "Example: peerConnection.sendAudioFrame(item.samples, item.timestampMs)",
127
+ };
128
+ case "outgoing_video_stream":
129
+ return {
130
+ kotlinAccessor: "camera.outgoingVideo",
131
+ kotlinType: "VideoFrame",
132
+ dispatcher: "Dispatchers.IO",
133
+ backpressure: "DropOldest backpressure",
134
+ shapeComment: "item.buffer: ByteBuffer (HEVC compressed — pass-through, don't re-encode)",
135
+ exampleComment: "Example: peerConnection.sendVideoFrame(item.buffer, item.presentationTimeUs)",
136
+ };
137
+ }
138
+ }
139
+ function iosLifecycleTemplate(streams, concise) {
140
+ const header = `// EXTENTOS-GENERATED — stream consumer boilerplate. Regenerate via MCP tools.\n` +
141
+ `import Foundation\n` +
142
+ `import GlassesCore\n\n`;
143
+ const prose = concise
144
+ ? ""
145
+ : `/// Call from your View's .task { ... } after glasses are connected.\n/// The Tasks are cancelled automatically when the parent task is cancelled.\n`;
146
+ const body = streams.map((s) => iosStreamBlock(s, "lifecycle", concise)).join("\n");
147
+ return (header +
148
+ prose +
149
+ `@MainActor\n` +
150
+ `func collectExtentosStreams(glasses: ExtentosGlasses) async {\n` +
151
+ body +
152
+ `}\n`);
153
+ }
154
+ function iosConnectionTemplate(streams, concise) {
155
+ const header = `// EXTENTOS-GENERATED — stream consumer boilerplate (connection-scoped). Regenerate via MCP tools.\n` +
156
+ `import Foundation\n` +
157
+ `import GlassesCore\n\n`;
158
+ const prose = concise
159
+ ? ""
160
+ : `/// Observes ExtentosGlasses state and launches per-connection Tasks that are\n/// cancelled automatically when the glasses disconnect.\n`;
161
+ const body = streams.map((s) => iosStreamBlock(s, "connection", concise)).join("\n");
162
+ return (header +
163
+ prose +
164
+ `func collectExtentosStreams(glasses: ExtentosGlasses) async {\n` +
165
+ ` for await state in glasses.connection.state.values {\n` +
166
+ ` guard case .active(let activeState) = state else { continue }\n` +
167
+ body +
168
+ ` }\n` +
169
+ `}\n`);
170
+ }
171
+ function iosStreamBlock(s, scope, concise) {
172
+ const { swiftAccessor, swiftType, qos, shapeComment, exampleComment, backpressure } = iosStreamMeta(s.type);
173
+ const indent = scope === "lifecycle" ? " " : " ";
174
+ const taskOpener = scope === "lifecycle"
175
+ ? `${indent}Task(priority: .${qos}) {\n`
176
+ : `${indent}activeState.addTask(priority: .${qos}) {\n`;
177
+ const comment = concise
178
+ ? ""
179
+ : `${indent}// ── ${s.type}: "${s.id}" ──\n` +
180
+ `${indent}// AsyncStream<${swiftType}> — ${backpressure}\n` +
181
+ `${indent}// QoS: ${qos}\n`;
182
+ const body = taskOpener +
183
+ `${indent} do {\n` +
184
+ `${indent} for try await item in glasses.${swiftAccessor}("${s.id}") {\n` +
185
+ `${indent} // USER-CODE-START:${s.id}\n` +
186
+ (concise
187
+ ? ""
188
+ : `${indent} // ${shapeComment}\n${indent} //\n${indent} // ${exampleComment}\n`) +
189
+ `${indent} // TODO: process ${s.type} "${s.id}"\n` +
190
+ `${indent} _ = item\n` +
191
+ `${indent} // USER-CODE-END:${s.id}\n` +
192
+ `${indent} }\n` +
193
+ `${indent} } catch {\n` +
194
+ `${indent} // TODO: handle stream error — log, show UI, retry\n` +
195
+ `${indent} }\n` +
196
+ `${indent}}\n`;
197
+ return comment + body;
198
+ }
199
+ function iosStreamMeta(type) {
200
+ switch (type) {
201
+ case "video_frames":
202
+ return {
203
+ swiftAccessor: "camera.videoFrames",
204
+ swiftType: "VideoFrame",
205
+ qos: "userInitiated",
206
+ backpressure: "DropOldest (skips stale frames)",
207
+ shapeComment: "item.buffer: CMSampleBuffer, item.width, item.height, item.presentationTime",
208
+ exampleComment: "Example: let result = myDetector.detect(item.buffer)",
209
+ };
210
+ case "audio_chunks":
211
+ return {
212
+ swiftAccessor: "audio.audioChunks",
213
+ swiftType: "AudioChunk",
214
+ qos: "userInitiated",
215
+ backpressure: "Suspend(16) backpressure (~320ms buffer)",
216
+ shapeComment: "item.samples: Data (PCM 16-bit), item.sampleRate, item.timestampMs",
217
+ exampleComment: "Example: let label = soundClassifier.classify(item.samples, item.sampleRate)",
218
+ };
219
+ case "transcription_incremental":
220
+ return {
221
+ swiftAccessor: "audio.transcriptions",
222
+ swiftType: "Transcript",
223
+ qos: "userInteractive",
224
+ backpressure: "enum: .partial | .final (delivered for UI updates)",
225
+ shapeComment: "switch item { case .partial(let t): …; case .final(let t): … }",
226
+ exampleComment: "Example: await updateCaptionView(item)",
227
+ };
228
+ case "outgoing_audio_stream":
229
+ return {
230
+ swiftAccessor: "audio.outgoingAudio",
231
+ swiftType: "AudioChunk",
232
+ qos: "utility",
233
+ backpressure: "Suspend(16) backpressure",
234
+ shapeComment: "item.samples (Opus or PCM per codec), item.sampleRate, item.timestampMs",
235
+ exampleComment: "Example: peerConnection.sendAudioFrame(item.samples, item.timestampMs)",
236
+ };
237
+ case "outgoing_video_stream":
238
+ return {
239
+ swiftAccessor: "camera.outgoingVideo",
240
+ swiftType: "VideoFrame",
241
+ qos: "utility",
242
+ backpressure: "DropOldest backpressure",
243
+ shapeComment: "item.buffer: CMSampleBuffer (HEVC compressed — pass-through)",
244
+ exampleComment: "Example: peerConnection.sendVideoFrame(item.buffer, item.presentationTime)",
245
+ };
246
+ }
247
+ }
248
+ //# sourceMappingURL=streamConsumer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streamConsumer.js","sourceRoot":"","sources":["../../../src/tools/templates/streamConsumer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function androidSourcePath(appPackage: string): string;
2
+ export declare function iosModuleName(appPackage: string): string;
3
+ export declare function iosAppStructName(appPackage: string): string;
4
+ //# sourceMappingURL=appPackage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPackage.d.ts","sourceRoot":"","sources":["../../../src/tools/util/appPackage.ts"],"names":[],"mappings":"AAIA,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,16 @@
1
+ // Derive Android source paths from a Java-style package name.
2
+ // `com.example.myapp` → `com/example/myapp`
3
+ // Also provides the iOS module-name heuristic (appPackage last segment, TitleCase).
4
+ export function androidSourcePath(appPackage) {
5
+ return appPackage.replace(/\./g, "/");
6
+ }
7
+ export function iosModuleName(appPackage) {
8
+ const last = appPackage.split(".").pop() ?? appPackage;
9
+ if (!last)
10
+ return "App";
11
+ return last.charAt(0).toUpperCase() + last.slice(1);
12
+ }
13
+ export function iosAppStructName(appPackage) {
14
+ return `${iosModuleName(appPackage)}App`;
15
+ }
16
+ //# sourceMappingURL=appPackage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appPackage.js","sourceRoot":"","sources":["../../../src/tools/util/appPackage.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,4CAA4C;AAC5C,oFAAoF;AAEpF,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,25 @@
1
+ export declare function backendBaseUrl(): string;
2
+ export interface AuthRecord {
3
+ authToken: string;
4
+ accountId: string;
5
+ linkedAt: string;
6
+ expiresAt: string;
7
+ scope?: string;
8
+ }
9
+ export declare function writeAuthToken(record: AuthRecord): {
10
+ path: string;
11
+ ok: boolean;
12
+ error?: string;
13
+ };
14
+ export declare function identityHeaders(): Record<string, string>;
15
+ export interface BackendResponse<T> {
16
+ ok: boolean;
17
+ status: number;
18
+ data: T | null;
19
+ errorText: string | null;
20
+ }
21
+ export declare function backendFetch<T>(path: string, init?: {
22
+ method?: "GET" | "POST";
23
+ body?: unknown;
24
+ }): Promise<BackendResponse<T>>;
25
+ //# sourceMappingURL=backendClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backendClient.d.ts","sourceRoot":"","sources":["../../../src/tools/util/backendClient.ts"],"names":[],"mappings":"AAUA,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AA8DD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAsBhG;AAED,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxD;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAsB,YAAY,CAAC,CAAC,EAClC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAO,GACrD,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CA2C7B"}
@@ -0,0 +1,144 @@
1
+ // HTTP client wrapper that talks to the Extentos backend (api.extentos.com).
2
+ // Resolves base URL + identity headers from env + ~/.extentos/{install.json, auth.json}.
3
+ import { readFileSync, existsSync, mkdirSync, writeFileSync } from "node:fs";
4
+ import { homedir } from "node:os";
5
+ import { join } from "node:path";
6
+ import { randomBytes } from "node:crypto";
7
+ const DEFAULT_BACKEND = "https://api.extentos.com";
8
+ export function backendBaseUrl() {
9
+ return process.env.EXTENTOS_BACKEND_URL || DEFAULT_BACKEND;
10
+ }
11
+ function configDir() {
12
+ return process.env.EXTENTOS_CONFIG_DIR || join(homedir(), ".extentos");
13
+ }
14
+ function ensureConfigDir() {
15
+ const dir = configDir();
16
+ if (!existsSync(dir)) {
17
+ try {
18
+ mkdirSync(dir, { recursive: true });
19
+ }
20
+ catch {
21
+ // best-effort
22
+ }
23
+ }
24
+ return dir;
25
+ }
26
+ function loadInstallId() {
27
+ const path = join(configDir(), "install.json");
28
+ if (existsSync(path)) {
29
+ try {
30
+ const raw = readFileSync(path, "utf-8");
31
+ const parsed = JSON.parse(raw);
32
+ if (typeof parsed.installId === "string" && parsed.installId.trim()) {
33
+ return parsed.installId;
34
+ }
35
+ }
36
+ catch {
37
+ // fall through
38
+ }
39
+ }
40
+ const installId = `inst_${randomBytes(16).toString("hex")}`;
41
+ try {
42
+ ensureConfigDir();
43
+ writeFileSync(path, JSON.stringify({ installId, createdAt: new Date().toISOString() }, null, 2));
44
+ }
45
+ catch {
46
+ // best-effort
47
+ }
48
+ return installId;
49
+ }
50
+ function loadAuthToken() {
51
+ const path = join(configDir(), "auth.json");
52
+ if (!existsSync(path))
53
+ return null;
54
+ try {
55
+ const raw = readFileSync(path, "utf-8");
56
+ const parsed = JSON.parse(raw);
57
+ // canonical field is authToken per AUTHENTICATION.md § Token storage; accept
58
+ // legacy "token" for forward/back-compat with earlier dev writes.
59
+ const token = typeof parsed.authToken === "string" && parsed.authToken.trim()
60
+ ? parsed.authToken
61
+ : typeof parsed.token === "string" && parsed.token.trim()
62
+ ? parsed.token
63
+ : null;
64
+ return token;
65
+ }
66
+ catch {
67
+ // fall through
68
+ }
69
+ return null;
70
+ }
71
+ export function writeAuthToken(record) {
72
+ const path = join(configDir(), "auth.json");
73
+ try {
74
+ ensureConfigDir();
75
+ writeFileSync(path, JSON.stringify({
76
+ authToken: record.authToken,
77
+ accountId: record.accountId,
78
+ linkedAt: record.linkedAt,
79
+ expiresAt: record.expiresAt,
80
+ scope: record.scope ?? "account_full",
81
+ }, null, 2));
82
+ return { path, ok: true };
83
+ }
84
+ catch (err) {
85
+ return { path, ok: false, error: err instanceof Error ? err.message : String(err) };
86
+ }
87
+ }
88
+ export function identityHeaders() {
89
+ const headers = {};
90
+ const token = loadAuthToken();
91
+ if (token) {
92
+ headers["Authorization"] = `Bearer ${token}`;
93
+ }
94
+ else {
95
+ headers["X-Extentos-Install-Id"] = loadInstallId();
96
+ }
97
+ return headers;
98
+ }
99
+ export async function backendFetch(path, init = {}) {
100
+ const url = `${backendBaseUrl().replace(/\/+$/, "")}${path.startsWith("/") ? path : `/${path}`}`;
101
+ const method = init.method ?? "GET";
102
+ const headers = {
103
+ "Content-Type": "application/json",
104
+ ...identityHeaders(),
105
+ };
106
+ let res;
107
+ try {
108
+ res = await fetch(url, {
109
+ method,
110
+ headers,
111
+ body: init.body !== undefined ? JSON.stringify(init.body) : undefined,
112
+ });
113
+ }
114
+ catch (err) {
115
+ return {
116
+ ok: false,
117
+ status: 0,
118
+ data: null,
119
+ errorText: err instanceof Error ? err.message : String(err),
120
+ };
121
+ }
122
+ const text = await res.text();
123
+ let parsed = null;
124
+ if (text) {
125
+ try {
126
+ parsed = JSON.parse(text);
127
+ }
128
+ catch {
129
+ return {
130
+ ok: false,
131
+ status: res.status,
132
+ data: null,
133
+ errorText: `Backend returned non-JSON body (${res.status}): ${text.slice(0, 200)}`,
134
+ };
135
+ }
136
+ }
137
+ return {
138
+ ok: res.ok,
139
+ status: res.status,
140
+ data: parsed,
141
+ errorText: res.ok ? null : text || `HTTP ${res.status}`,
142
+ };
143
+ }
144
+ //# sourceMappingURL=backendClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backendClient.js","sourceRoot":"","sources":["../../../src/tools/util/backendClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface ManifestInit {
2
+ platform: "android" | "ios";
3
+ appPackage: string;
4
+ libraryVersion: string;
5
+ specPath: string;
6
+ }
7
+ export declare function buildEmptyManifest(init: ManifestInit, nowIso: string): Record<string, unknown>;
8
+ export declare const EMPTY_SPEC_CONTENT: Record<string, unknown>;
9
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/tools/util/manifest.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmD9F;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAMtD,CAAC"}
@@ -0,0 +1,62 @@
1
+ // Build a canonical empty extentos.manifest.json per schemas/extentos-manifest.schema.json.
2
+ // Used by generateConnectionModule; later tools (initSpec, updateSpec, generateConsumer)
3
+ // mutate via manifestPatch operations against this shape.
4
+ export function buildEmptyManifest(init, nowIso) {
5
+ const base = {
6
+ manifestVersion: 1,
7
+ platform: init.platform,
8
+ glasses: "meta_rayban",
9
+ appPackage: init.appPackage,
10
+ extentos: {
11
+ libraryVersion: init.libraryVersion,
12
+ specVersion: "1.0",
13
+ installedAt: nowIso,
14
+ lastUpdatedAt: nowIso,
15
+ },
16
+ spec: {
17
+ path: init.specPath,
18
+ hash: "sha256:empty",
19
+ },
20
+ generatedFiles: [],
21
+ permissions: [],
22
+ integration: {
23
+ blocks: [],
24
+ streams: [],
25
+ triggers: [],
26
+ handlerNames: [],
27
+ togglesOverridden: [],
28
+ },
29
+ };
30
+ if (init.platform === "android") {
31
+ base.gradle = {
32
+ coordinate: `com.extentos:glasses:${init.libraryVersion}`,
33
+ buildFile: "app/build.gradle.kts",
34
+ additionalArtifacts: [
35
+ { coordinate: `com.extentos:glasses-ui:${init.libraryVersion}`, configuration: "implementation" },
36
+ { coordinate: `com.extentos:glasses-debug:${init.libraryVersion}`, configuration: "debugImplementation" },
37
+ ],
38
+ };
39
+ }
40
+ else {
41
+ base.spm = {
42
+ package: "Extentos",
43
+ packageURL: "https://github.com/extentos/swift-glasses",
44
+ version: init.libraryVersion,
45
+ projectFile: "Package.swift",
46
+ additionalProducts: [
47
+ { product: "GlassesCore", target: "App" },
48
+ { product: "GlassesUI", target: "App" },
49
+ { product: "GlassesDebug", target: "App", debugOnly: true },
50
+ ],
51
+ };
52
+ }
53
+ return base;
54
+ }
55
+ export const EMPTY_SPEC_CONTENT = {
56
+ $schema: "extentos://schema/v1",
57
+ extentos_version: "1.0",
58
+ blocks: [],
59
+ streams: [],
60
+ triggers: [],
61
+ };
62
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/tools/util/manifest.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,yFAAyF;AACzF,0DAA0D;AAS1D,MAAM,UAAU,kBAAkB,CAAC,IAAkB,EAAE,MAAc;IACnE,MAAM,IAAI,GAA4B;QACpC,eAAe,EAAE,CAAC;QAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE;YACR,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,WAAW,EAAE,KAAK;YAClB,WAAW,EAAE,MAAM;YACnB,aAAa,EAAE,MAAM;SACtB;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC,QAAQ;YACnB,IAAI,EAAE,cAAc;SACrB;QACD,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,EAAE;QACf,WAAW,EAAE;YACX,MAAM,EAAE,EAAE;YACV,OAAO,EAAE,EAAE;YACX,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,EAAE;YAChB,iBAAiB,EAAE,EAAE;SACtB;KACF,CAAC;IAEF,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG;YACZ,UAAU,EAAE,wBAAwB,IAAI,CAAC,cAAc,EAAE;YACzD,SAAS,EAAE,sBAAsB;YACjC,mBAAmB,EAAE;gBACnB,EAAE,UAAU,EAAE,2BAA2B,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE;gBACjG,EAAE,UAAU,EAAE,8BAA8B,IAAI,CAAC,cAAc,EAAE,EAAE,aAAa,EAAE,qBAAqB,EAAE;aAC1G;SACF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,GAAG;YACT,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,2CAA2C;YACvD,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,WAAW,EAAE,eAAe;YAC5B,kBAAkB,EAAE;gBAClB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE;gBACzC,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;gBACvC,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;aAC5D;SACF,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAA4B;IACzD,OAAO,EAAE,sBAAsB;IAC/B,gBAAgB,EAAE,KAAK;IACvB,MAAM,EAAE,EAAE;IACV,OAAO,EAAE,EAAE;IACX,QAAQ,EAAE,EAAE;CACb,CAAC"}
@@ -0,0 +1,32 @@
1
+ export interface AndroidDerivation {
2
+ permissions: string[];
3
+ manifestEntries: string[];
4
+ foregroundService: {
5
+ required: boolean;
6
+ types: string[];
7
+ declaration: string | null;
8
+ };
9
+ minimumSdk: number;
10
+ compileSdk: number;
11
+ targetSdk: number;
12
+ }
13
+ export interface IosDerivation {
14
+ plistKeys: Array<{
15
+ key: string;
16
+ value: string;
17
+ reason: string;
18
+ }>;
19
+ }
20
+ export interface MetaDatDerivation {
21
+ scopes: string[];
22
+ registrationRequired: boolean;
23
+ registrationSteps: string[];
24
+ }
25
+ export declare function derivePermissions(blocks: Array<Record<string, unknown>>, streams: Array<Record<string, unknown>>, triggers: Array<Record<string, unknown>>): string[];
26
+ export declare function deriveAndroid(spec: Record<string, unknown>): AndroidDerivation;
27
+ export declare function deriveIos(spec: Record<string, unknown>): IosDerivation;
28
+ export declare function deriveMetaDat(spec: Record<string, unknown>): MetaDatDerivation;
29
+ export declare function derivesInfoPlistPatch(spec: Record<string, unknown>): {
30
+ added: Record<string, string>;
31
+ } | undefined;
32
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../../src/tools/util/permissions.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,EAAE;QACjB,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B;AAsBD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACtC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACvC,MAAM,EAAE,CA+BV;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CAmC9E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa,CAsCtE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,iBAAiB,CA+B9E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,SAAS,CAMlH"}