@extentos/mcp-server 0.8.0 → 0.8.2

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 (35) hide show
  1. package/dist/localBridge.d.ts +4 -0
  2. package/dist/localBridge.d.ts.map +1 -1
  3. package/dist/localBridge.js +20 -1
  4. package/dist/localBridge.js.map +1 -1
  5. package/dist/tools/data/assistantCatalog.d.ts +10 -0
  6. package/dist/tools/data/assistantCatalog.d.ts.map +1 -1
  7. package/dist/tools/data/assistantCatalog.js +43 -17
  8. package/dist/tools/data/assistantCatalog.js.map +1 -1
  9. package/dist/tools/definitions.d.ts.map +1 -1
  10. package/dist/tools/definitions.js +6 -1
  11. package/dist/tools/definitions.js.map +1 -1
  12. package/dist/tools/handlers/assistantConfig.d.ts.map +1 -1
  13. package/dist/tools/handlers/assistantConfig.js +14 -1
  14. package/dist/tools/handlers/assistantConfig.js.map +1 -1
  15. package/dist/tools/handlers/createSimulatorSession.d.ts.map +1 -1
  16. package/dist/tools/handlers/createSimulatorSession.js +6 -1
  17. package/dist/tools/handlers/createSimulatorSession.js.map +1 -1
  18. package/dist/tools/handlers/generateConnectionModule.d.ts.map +1 -1
  19. package/dist/tools/handlers/generateConnectionModule.js +49 -7
  20. package/dist/tools/handlers/generateConnectionModule.js.map +1 -1
  21. package/dist/tools/handlers/getCapabilityGuide.d.ts.map +1 -1
  22. package/dist/tools/handlers/getCapabilityGuide.js +11 -0
  23. package/dist/tools/handlers/getCapabilityGuide.js.map +1 -1
  24. package/dist/tools/handlers/validateIntegration.d.ts.map +1 -1
  25. package/dist/tools/handlers/validateIntegration.js +69 -0
  26. package/dist/tools/handlers/validateIntegration.js.map +1 -1
  27. package/dist/tools/templates/androidBootstrap.d.ts +1 -1
  28. package/dist/tools/templates/androidBootstrap.d.ts.map +1 -1
  29. package/dist/tools/templates/androidBootstrap.js +23 -9
  30. package/dist/tools/templates/androidBootstrap.js.map +1 -1
  31. package/dist/tools/util/capabilityKinds.d.ts +9 -0
  32. package/dist/tools/util/capabilityKinds.d.ts.map +1 -0
  33. package/dist/tools/util/capabilityKinds.js +62 -0
  34. package/dist/tools/util/capabilityKinds.js.map +1 -0
  35. package/package.json +1 -1
@@ -26,19 +26,33 @@
26
26
  // and refuses to validate a project whose bootstrap has been hand-edited
27
27
  // (those edits would be lost on the next regenerate). Customer-side init
28
28
  // code goes outside this file.
29
- export function renderAndroidBootstrap(appPackage, template = "subclass") {
29
+ export function renderAndroidBootstrap(appPackage, template = "subclass", capabilityKinds = []) {
30
+ // The app's declared capability footprint, emitted as
31
+ // `usedCapabilities = setOf(CapabilityKind.X, …)` in ExtentosConfig so the
32
+ // connection page renders one tile per declared capability (lit per the
33
+ // connected glasses). Empty → no line → no tiles (the connection page hides the
34
+ // capabilities section — "declare nothing, show nothing"). Generated (not
35
+ // hand-edited) so it can't drift from the manifest the same scaffold call wrote.
36
+ const capImport = capabilityKinds.length
37
+ ? "import com.extentos.glasses.core.CapabilityKind\n"
38
+ : "";
39
+ const usedCapsBlock = capabilityKinds.length
40
+ ? "\n usedCapabilities = setOf(\n" +
41
+ capabilityKinds.map((k) => ` CapabilityKind.${k},\n`).join("") +
42
+ " ),"
43
+ : "";
30
44
  return template === "init_helper"
31
- ? renderInitHelperTemplate(appPackage)
32
- : renderSubclassTemplate(appPackage);
45
+ ? renderInitHelperTemplate(appPackage, capImport, usedCapsBlock)
46
+ : renderSubclassTemplate(appPackage, capImport, usedCapsBlock);
33
47
  }
34
- function renderSubclassTemplate(appPackage) {
48
+ function renderSubclassTemplate(appPackage, capImport, usedCapsBlock) {
35
49
  return `// EXTENTOS-GENERATED — do not edit manually. Regenerate via generateConnectionModule.
36
50
  package ${appPackage}.extentos
37
51
 
38
52
  import android.app.Application
39
53
  import android.util.Log
40
54
  import ${appPackage}.BuildConfig
41
- import com.extentos.glasses.core.ExtentosConfig
55
+ ${capImport}import com.extentos.glasses.core.ExtentosConfig
42
56
  import com.extentos.glasses.core.ExtentosGlasses
43
57
  import com.extentos.glasses.core.ExtentosResult
44
58
  import kotlinx.coroutines.CoroutineScope
@@ -119,7 +133,7 @@ open class ExtentosBootstrap : Application() {
119
133
  glasses = ExtentosGlasses.create(
120
134
  ExtentosConfig(
121
135
  applicationContext = this,
122
- debug = BuildConfig.DEBUG,
136
+ debug = BuildConfig.DEBUG,${usedCapsBlock}
123
137
  )
124
138
  )
125
139
 
@@ -142,14 +156,14 @@ open class ExtentosBootstrap : Application() {
142
156
  }
143
157
  `;
144
158
  }
145
- function renderInitHelperTemplate(appPackage) {
159
+ function renderInitHelperTemplate(appPackage, capImport, usedCapsBlock) {
146
160
  return `// EXTENTOS-GENERATED — do not edit manually. Regenerate via generateConnectionModule.
147
161
  package ${appPackage}.extentos
148
162
 
149
163
  import android.app.Application
150
164
  import android.util.Log
151
165
  import ${appPackage}.BuildConfig
152
- import com.extentos.glasses.core.ExtentosConfig
166
+ ${capImport}import com.extentos.glasses.core.ExtentosConfig
153
167
  import com.extentos.glasses.core.ExtentosGlasses
154
168
  import com.extentos.glasses.core.ExtentosResult
155
169
  import kotlinx.coroutines.CoroutineScope
@@ -188,7 +202,7 @@ object ExtentosBootstrap {
188
202
  ExtentosGlasses.create(
189
203
  ExtentosConfig(
190
204
  applicationContext = application,
191
- debug = BuildConfig.DEBUG,
205
+ debug = BuildConfig.DEBUG,${usedCapsBlock}
192
206
  )
193
207
  )
194
208
 
@@ -1 +1 @@
1
- {"version":3,"file":"androidBootstrap.js","sourceRoot":"","sources":["../../../src/tools/templates/androidBootstrap.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,cAAc;AACd,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,iFAAiF;AACjF,kEAAkE;AAClE,EAAE;AACF,0EAA0E;AAC1E,uEAAuE;AACvE,oEAAoE;AACpE,uEAAuE;AACvE,oEAAoE;AACpE,sEAAsE;AACtE,4BAA4B;AAC5B,EAAE;AACF,sEAAsE;AACtE,wEAAwE;AACxE,wEAAwE;AACxE,uEAAuE;AACvE,2BAA2B;AAC3B,EAAE;AACF,2DAA2D;AAC3D,yEAAyE;AACzE,yEAAyE;AACzE,yEAAyE;AACzE,+BAA+B;AAI/B,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,WAAqC,UAAU;IAE/C,OAAO,QAAQ,KAAK,aAAa;QAC/B,CAAC,CAAC,wBAAwB,CAAC,UAAU,CAAC;QACtC,CAAC,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAkB;IAChD,OAAO;UACC,UAAU;;;;SAIX,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuGlB,CAAC;AACF,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAkB;IAClD,OAAO;UACC,UAAU;;;;SAIX,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgElB,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yCAAyC,CACvD,mBAA2B,EAC3B,wBAAuC;IAEvC,MAAM,QAAQ,GAAG,wBAAwB;QACvC,CAAC,CAAC,kBAAkB,wBAAwB,IAAI;QAChD,CAAC,CAAC,+DAA+D,CAAC;IACpE,OAAO,qDAAqD,mBAAmB,QAAQ,QAAQ;;;;;;;;aAQpF,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,gBAAgB;;;;;;;;;;;;;;;;;+CAiBvB,CAAC;AAChD,CAAC;AAED,wDAAwD;AACxD,SAAS,gBAAgB,CAAC,EAAU;IAClC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"androidBootstrap.js","sourceRoot":"","sources":["../../../src/tools/templates/androidBootstrap.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,EAAE;AACF,cAAc;AACd,EAAE;AACF,0EAA0E;AAC1E,2EAA2E;AAC3E,iFAAiF;AACjF,kEAAkE;AAClE,EAAE;AACF,0EAA0E;AAC1E,uEAAuE;AACvE,oEAAoE;AACpE,uEAAuE;AACvE,oEAAoE;AACpE,sEAAsE;AACtE,4BAA4B;AAC5B,EAAE;AACF,sEAAsE;AACtE,wEAAwE;AACxE,wEAAwE;AACxE,uEAAuE;AACvE,2BAA2B;AAC3B,EAAE;AACF,2DAA2D;AAC3D,yEAAyE;AACzE,yEAAyE;AACzE,yEAAyE;AACzE,+BAA+B;AAI/B,MAAM,UAAU,sBAAsB,CACpC,UAAkB,EAClB,WAAqC,UAAU,EAC/C,kBAA4B,EAAE;IAE9B,sDAAsD;IACtD,2EAA2E;IAC3E,wEAAwE;IACxE,gFAAgF;IAChF,0EAA0E;IAC1E,iFAAiF;IACjF,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM;QACtC,CAAC,CAAC,mDAAmD;QACrD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM;QAC1C,CAAC,CAAC,+CAA+C;YAC/C,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sCAAsC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACjF,oBAAoB;QACtB,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,QAAQ,KAAK,aAAa;QAC/B,CAAC,CAAC,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC;QAChE,CAAC,CAAC,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAkB,EAAE,SAAiB,EAAE,aAAqB;IAC1F,OAAO;UACC,UAAU;;;;SAIX,UAAU;EACjB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAiFiC,aAAa;;;;;;;;;;;;;;;;;;;;;CAqBxD,CAAC;AACF,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAkB,EAAE,SAAiB,EAAE,aAAqB;IAC5F,OAAO;UACC,UAAU;;;;SAIX,UAAU;EACjB,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4CAuCiC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;CAwBxD,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yCAAyC,CACvD,mBAA2B,EAC3B,wBAAuC;IAEvC,MAAM,QAAQ,GAAG,wBAAwB;QACvC,CAAC,CAAC,kBAAkB,wBAAwB,IAAI;QAChD,CAAC,CAAC,+DAA+D,CAAC;IACpE,OAAO,qDAAqD,mBAAmB,QAAQ,QAAQ;;;;;;;;aAQpF,gBAAgB,CAAC,mBAAmB,CAAC,IAAI,gBAAgB;;;;;;;;;;;;;;;;;+CAiBvB,CAAC;AAChD,CAAC;AAED,wDAAwD;AACxD,SAAS,gBAAgB,CAAC,EAAU;IAClC,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,9 @@
1
+ export type CapabilityKindName = "Camera" | "Microphone" | "Speaker" | "Display" | "Location" | "Notifications";
2
+ /**
3
+ * Map declared SDK feature names → the deduped, canonically-ordered
4
+ * CapabilityKind tiles. Unknown / cross-cutting features contribute nothing,
5
+ * which is safe: an empty result means no tiles — the connection page hides the
6
+ * capabilities section ("declare nothing, show nothing").
7
+ */
8
+ export declare function capabilityKindsForFeatures(features: string[]): CapabilityKindName[];
9
+ //# sourceMappingURL=capabilityKinds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilityKinds.d.ts","sourceRoot":"","sources":["../../../src/tools/util/capabilityKinds.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,SAAS,GACT,UAAU,GACV,eAAe,CAAC;AAuCpB;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,kBAAkB,EAAE,CAMnF"}
@@ -0,0 +1,62 @@
1
+ // Maps SDK capability feature names (the `type` values in
2
+ // src/tools/data/capabilities.ts) → the connection page's CapabilityKind tiles.
3
+ //
4
+ // generateConnectionModule uses this to emit `ExtentosConfig.usedCapabilities`
5
+ // AND the manifest `capabilities` from ONE input, so the declared footprint, the
6
+ // connection-page tiles, and permission derivation can't drift apart. The tile
7
+ // then lights up or dims per the CONNECTED device's real capability set
8
+ // (android-library/.../EscapeHatch.kt → resolveCapabilityTiles).
9
+ //
10
+ // Keep in sync with: capabilities.ts feature `type`s (source of the keys) and
11
+ // android-library/.../core/UiState.kt `CapabilityKind` (the enum names emitted).
12
+ // `smoke-capability-emit.mjs` guards the mapping + the emission.
13
+ // A feature may touch more than one hardware surface (the assistant listens AND
14
+ // talks). Cross-cutting / runtime / toggle features (connection_state,
15
+ // connection_state_changed, fallback, assistant_tool, assistant_state, and the
16
+ // bool/enum toggle entries) intentionally map to NOTHING — they aren't a
17
+ // hardware capability tile.
18
+ const FEATURE_TO_KINDS = {
19
+ capture_photo: ["Camera"],
20
+ capture_video: ["Camera"],
21
+ video_frames: ["Camera"],
22
+ outgoing_video_stream: ["Camera"],
23
+ assistant_vision: ["Camera"],
24
+ record_audio: ["Microphone"],
25
+ audio_chunks: ["Microphone"],
26
+ transcription_incremental: ["Microphone"],
27
+ voice_command: ["Microphone"],
28
+ wake_word: ["Microphone"],
29
+ push_to_talk: ["Microphone"],
30
+ speak: ["Speaker"],
31
+ cancel_speak: ["Speaker"],
32
+ earcon: ["Speaker"],
33
+ outgoing_audio_stream: ["Speaker"],
34
+ assistant_runtime: ["Microphone", "Speaker"],
35
+ display: ["Display"],
36
+ };
37
+ // Canonical left-to-right tile order — MUST match the order in
38
+ // resolveCapabilityTiles (android-library/.../EscapeHatch.kt) so the scaffolded
39
+ // footprint and the renderer agree.
40
+ const ORDER = [
41
+ "Camera",
42
+ "Microphone",
43
+ "Speaker",
44
+ "Display",
45
+ "Location",
46
+ "Notifications",
47
+ ];
48
+ /**
49
+ * Map declared SDK feature names → the deduped, canonically-ordered
50
+ * CapabilityKind tiles. Unknown / cross-cutting features contribute nothing,
51
+ * which is safe: an empty result means no tiles — the connection page hides the
52
+ * capabilities section ("declare nothing, show nothing").
53
+ */
54
+ export function capabilityKindsForFeatures(features) {
55
+ const set = new Set();
56
+ for (const f of features) {
57
+ for (const k of FEATURE_TO_KINDS[f] ?? [])
58
+ set.add(k);
59
+ }
60
+ return ORDER.filter((k) => set.has(k));
61
+ }
62
+ //# sourceMappingURL=capabilityKinds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilityKinds.js","sourceRoot":"","sources":["../../../src/tools/util/capabilityKinds.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,gFAAgF;AAChF,EAAE;AACF,+EAA+E;AAC/E,iFAAiF;AACjF,+EAA+E;AAC/E,wEAAwE;AACxE,iEAAiE;AACjE,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,iEAAiE;AAUjE,gFAAgF;AAChF,uEAAuE;AACvE,+EAA+E;AAC/E,yEAAyE;AACzE,4BAA4B;AAC5B,MAAM,gBAAgB,GAAyC;IAC7D,aAAa,EAAE,CAAC,QAAQ,CAAC;IACzB,aAAa,EAAE,CAAC,QAAQ,CAAC;IACzB,YAAY,EAAE,CAAC,QAAQ,CAAC;IACxB,qBAAqB,EAAE,CAAC,QAAQ,CAAC;IACjC,gBAAgB,EAAE,CAAC,QAAQ,CAAC;IAC5B,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,yBAAyB,EAAE,CAAC,YAAY,CAAC;IACzC,aAAa,EAAE,CAAC,YAAY,CAAC;IAC7B,SAAS,EAAE,CAAC,YAAY,CAAC;IACzB,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,KAAK,EAAE,CAAC,SAAS,CAAC;IAClB,YAAY,EAAE,CAAC,SAAS,CAAC;IACzB,MAAM,EAAE,CAAC,SAAS,CAAC;IACnB,qBAAqB,EAAE,CAAC,SAAS,CAAC;IAClC,iBAAiB,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC;IAC5C,OAAO,EAAE,CAAC,SAAS,CAAC;CACrB,CAAC;AAEF,+DAA+D;AAC/D,gFAAgF;AAChF,oCAAoC;AACpC,MAAM,KAAK,GAAyB;IAClC,QAAQ;IACR,YAAY;IACZ,SAAS;IACT,SAAS;IACT,UAAU;IACV,eAAe;CAChB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,QAAkB;IAC3D,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@extentos/mcp-server",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
4
4
  "description": "Extentos MCP server — deterministic tools for building Meta-glasses apps.",
5
5
  "type": "module",
6
6
  "bin": {