@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.
- package/dist/localBridge.d.ts +4 -0
- package/dist/localBridge.d.ts.map +1 -1
- package/dist/localBridge.js +20 -1
- package/dist/localBridge.js.map +1 -1
- package/dist/tools/data/assistantCatalog.d.ts +10 -0
- package/dist/tools/data/assistantCatalog.d.ts.map +1 -1
- package/dist/tools/data/assistantCatalog.js +43 -17
- package/dist/tools/data/assistantCatalog.js.map +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +6 -1
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/handlers/assistantConfig.d.ts.map +1 -1
- package/dist/tools/handlers/assistantConfig.js +14 -1
- package/dist/tools/handlers/assistantConfig.js.map +1 -1
- package/dist/tools/handlers/createSimulatorSession.d.ts.map +1 -1
- package/dist/tools/handlers/createSimulatorSession.js +6 -1
- package/dist/tools/handlers/createSimulatorSession.js.map +1 -1
- package/dist/tools/handlers/generateConnectionModule.d.ts.map +1 -1
- package/dist/tools/handlers/generateConnectionModule.js +49 -7
- package/dist/tools/handlers/generateConnectionModule.js.map +1 -1
- package/dist/tools/handlers/getCapabilityGuide.d.ts.map +1 -1
- package/dist/tools/handlers/getCapabilityGuide.js +11 -0
- package/dist/tools/handlers/getCapabilityGuide.js.map +1 -1
- package/dist/tools/handlers/validateIntegration.d.ts.map +1 -1
- package/dist/tools/handlers/validateIntegration.js +69 -0
- package/dist/tools/handlers/validateIntegration.js.map +1 -1
- package/dist/tools/templates/androidBootstrap.d.ts +1 -1
- package/dist/tools/templates/androidBootstrap.d.ts.map +1 -1
- package/dist/tools/templates/androidBootstrap.js +23 -9
- package/dist/tools/templates/androidBootstrap.js.map +1 -1
- package/dist/tools/util/capabilityKinds.d.ts +9 -0
- package/dist/tools/util/capabilityKinds.d.ts.map +1 -0
- package/dist/tools/util/capabilityKinds.js +62 -0
- package/dist/tools/util/capabilityKinds.js.map +1 -0
- 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;
|
|
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"}
|