@extentos/mcp-server 0.0.57 → 0.0.58
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/README.md +22 -62
- package/dist/generated/events.d.ts +3 -3
- package/dist/generated/events.d.ts.map +1 -1
- package/dist/generated/events.js +11 -6
- package/dist/generated/events.js.map +1 -1
- package/dist/generated/schemas.d.ts.map +1 -1
- package/dist/generated/schemas.js +41 -124
- package/dist/generated/schemas.js.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/tools/data/capabilityPatterns.d.ts +11 -0
- package/dist/tools/data/capabilityPatterns.d.ts.map +1 -0
- package/dist/tools/data/capabilityPatterns.js +289 -0
- package/dist/tools/data/capabilityPatterns.js.map +1 -0
- package/dist/tools/data/codeExamples.d.ts +15 -0
- package/dist/tools/data/codeExamples.d.ts.map +1 -0
- package/dist/tools/data/codeExamples.js +494 -0
- package/dist/tools/data/codeExamples.js.map +1 -0
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +99 -181
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/docs/index.d.ts.map +1 -1
- package/dist/tools/docs/index.js +321 -800
- package/dist/tools/docs/index.js.map +1 -1
- package/dist/tools/handlers/createSimulatorSession.d.ts.map +1 -1
- package/dist/tools/handlers/createSimulatorSession.js +36 -51
- package/dist/tools/handlers/createSimulatorSession.js.map +1 -1
- package/dist/tools/handlers/generateConnectionModule.js +14 -15
- package/dist/tools/handlers/generateConnectionModule.js.map +1 -1
- package/dist/tools/handlers/getCapabilityGuide.d.ts +3 -0
- package/dist/tools/handlers/getCapabilityGuide.d.ts.map +1 -0
- package/dist/tools/handlers/getCapabilityGuide.js +47 -0
- package/dist/tools/handlers/getCapabilityGuide.js.map +1 -0
- package/dist/tools/handlers/getCodeExample.d.ts +3 -0
- package/dist/tools/handlers/getCodeExample.d.ts.map +1 -0
- package/dist/tools/handlers/getCodeExample.js +50 -0
- package/dist/tools/handlers/getCodeExample.js.map +1 -0
- package/dist/tools/handlers/getCredentialGuide.d.ts.map +1 -1
- package/dist/tools/handlers/getCredentialGuide.js +44 -84
- package/dist/tools/handlers/getCredentialGuide.js.map +1 -1
- package/dist/tools/handlers/getEventLog.d.ts.map +1 -1
- package/dist/tools/handlers/getEventLog.js +7 -8
- package/dist/tools/handlers/getEventLog.js.map +1 -1
- package/dist/tools/handlers/getPermissions.d.ts.map +1 -1
- package/dist/tools/handlers/getPermissions.js +27 -12
- package/dist/tools/handlers/getPermissions.js.map +1 -1
- package/dist/tools/handlers/getPlatformInfo.d.ts.map +1 -1
- package/dist/tools/handlers/getPlatformInfo.js +112 -46
- package/dist/tools/handlers/getPlatformInfo.js.map +1 -1
- package/dist/tools/handlers/getProductionChecklist.d.ts.map +1 -1
- package/dist/tools/handlers/getProductionChecklist.js +86 -120
- package/dist/tools/handlers/getProductionChecklist.js.map +1 -1
- package/dist/tools/handlers/getSimulatorStatus.d.ts.map +1 -1
- package/dist/tools/handlers/getSimulatorStatus.js +1 -3
- package/dist/tools/handlers/getSimulatorStatus.js.map +1 -1
- package/dist/tools/handlers/getVoiceCommandGuidance.d.ts.map +1 -1
- package/dist/tools/handlers/getVoiceCommandGuidance.js +18 -45
- package/dist/tools/handlers/getVoiceCommandGuidance.js.map +1 -1
- package/dist/tools/handlers/inspectIntegration.d.ts.map +1 -1
- package/dist/tools/handlers/inspectIntegration.js +14 -52
- package/dist/tools/handlers/inspectIntegration.js.map +1 -1
- package/dist/tools/handlers/validateIntegration.d.ts.map +1 -1
- package/dist/tools/handlers/validateIntegration.js +83 -167
- package/dist/tools/handlers/validateIntegration.js.map +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +6 -11
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/templates/androidBootstrap.d.ts.map +1 -1
- package/dist/tools/templates/androidBootstrap.js +20 -47
- package/dist/tools/templates/androidBootstrap.js.map +1 -1
- package/dist/tools/templates/iosBootstrap.d.ts.map +1 -1
- package/dist/tools/templates/iosBootstrap.js +24 -34
- package/dist/tools/templates/iosBootstrap.js.map +1 -1
- package/dist/tools/util/manifest.d.ts +0 -61
- package/dist/tools/util/manifest.d.ts.map +1 -1
- package/dist/tools/util/manifest.js +14 -112
- package/dist/tools/util/manifest.js.map +1 -1
- package/dist/tools/util/permissions.d.ts +4 -7
- package/dist/tools/util/permissions.d.ts.map +1 -1
- package/dist/tools/util/permissions.js +151 -161
- package/dist/tools/util/permissions.js.map +1 -1
- package/package.json +1 -6
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// getCodeExample — return a complete SDK code example for a use case.
|
|
2
|
+
//
|
|
3
|
+
// The customer's authoring layer post-pivot is Kotlin/Swift code that
|
|
4
|
+
// subscribes to capability primitives. This tool returns the canonical
|
|
5
|
+
// composition for each common voice-glasses use case in both languages so
|
|
6
|
+
// fresh AI agents have a concrete shape to peel from. Patterns live in
|
|
7
|
+
// data/codeExamples.ts; per-feature minimal usage lives in
|
|
8
|
+
// data/capabilityPatterns.ts (served by getCapabilityGuide).
|
|
9
|
+
import { okResponse, errorResponse } from "../response.js";
|
|
10
|
+
import { CODE_EXAMPLES, CODE_EXAMPLE_PATTERNS } from "../data/codeExamples.js";
|
|
11
|
+
export function handleGetCodeExample(raw) {
|
|
12
|
+
if (!raw || typeof raw !== "object") {
|
|
13
|
+
return errorResponse({
|
|
14
|
+
code: "invalid_arguments",
|
|
15
|
+
message: "getCodeExample requires { pattern }.",
|
|
16
|
+
fixHint: `Pass { pattern: "voice_qa_assistant" } (or one of: ${CODE_EXAMPLE_PATTERNS.join(", ")}).`,
|
|
17
|
+
retryable: false,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
const obj = raw;
|
|
21
|
+
const pattern = typeof obj.pattern === "string" ? obj.pattern : "";
|
|
22
|
+
if (!pattern) {
|
|
23
|
+
return errorResponse({
|
|
24
|
+
code: "invalid_arguments",
|
|
25
|
+
message: "pattern is required.",
|
|
26
|
+
fixHint: `Valid patterns: ${CODE_EXAMPLE_PATTERNS.join(", ")}.`,
|
|
27
|
+
retryable: false,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
const example = CODE_EXAMPLES[pattern];
|
|
31
|
+
if (!example) {
|
|
32
|
+
return errorResponse({
|
|
33
|
+
code: "invalid_arguments",
|
|
34
|
+
message: `Unknown pattern ${JSON.stringify(pattern)}.`,
|
|
35
|
+
fixHint: `Valid patterns: ${CODE_EXAMPLE_PATTERNS.join(", ")}.`,
|
|
36
|
+
retryable: false,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return okResponse({
|
|
40
|
+
pattern: example.pattern,
|
|
41
|
+
title: example.title,
|
|
42
|
+
description: example.description,
|
|
43
|
+
code: example.code,
|
|
44
|
+
explanation: example.explanation,
|
|
45
|
+
gotchas: example.gotchas,
|
|
46
|
+
relatedFeatures: example.relatedFeatures,
|
|
47
|
+
summary: `Returned code example "${example.title}". Study the kotlin + swift code, the explanation for what it does, and the gotchas before adapting. Don't copy whole — peel pieces relevant to your goal.`,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=getCodeExample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCodeExample.js","sourceRoot":"","sources":["../../../src/tools/handlers/getCodeExample.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,sEAAsE;AACtE,uEAAuE;AACvE,0EAA0E;AAC1E,uEAAuE;AACvE,2DAA2D;AAC3D,6DAA6D;AAE7D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAE/E,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,aAAa,CAAC;YACnB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,sCAAsC;YAC/C,OAAO,EAAE,sDAAsD,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YACnG,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC;YACnB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,sBAAsB;YAC/B,OAAO,EAAE,mBAAmB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAC/D,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,aAAa,CAAC;YACnB,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,mBAAmB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG;YACtD,OAAO,EAAE,mBAAmB,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAC/D,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;QAChB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,OAAO,EAAE,0BAA0B,OAAO,CAAC,KAAK,4JAA4J;KAC7M,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCredentialGuide.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getCredentialGuide.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getCredentialGuide.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getCredentialGuide.ts"],"names":[],"mappings":"AASA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA8I5E,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAWjE"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
// getCredentialGuide — step-by-step credential setup for Meta
|
|
2
|
-
//
|
|
3
|
-
//
|
|
1
|
+
// getCredentialGuide — step-by-step credential setup for Meta DAT
|
|
2
|
+
// + BYOK AI service providers.
|
|
3
|
+
//
|
|
4
|
+
// Post pure-SDK pivot: input is `{ services: Service[], platform }` —
|
|
5
|
+
// the agent declares which providers the app integrates with (one for
|
|
6
|
+
// each handler that calls out to an LLM/vision/translation API).
|
|
7
|
+
// Optional `handlers: string[]` lets the agent label each provider
|
|
8
|
+
// guide with the handlers it's for.
|
|
4
9
|
import { okResponse, errorResponse } from "../response.js";
|
|
5
10
|
const VALID_SERVICES = [
|
|
6
11
|
"anthropic",
|
|
@@ -123,11 +128,9 @@ export function handleGetCredentialGuide(raw) {
|
|
|
123
128
|
const parsed = parseArgs(raw);
|
|
124
129
|
if ("error" in parsed)
|
|
125
130
|
return parsed.error;
|
|
126
|
-
const {
|
|
127
|
-
const derivedServices = services.length ? services : deriveServicesFromSpec(spec);
|
|
128
|
-
const handlers = collectHandlerNames(spec);
|
|
131
|
+
const { platform, services, handlers } = parsed;
|
|
129
132
|
const metaCredentials = buildMetaCredentials(platform);
|
|
130
|
-
const serviceCredentials =
|
|
133
|
+
const serviceCredentials = services.map((svc) => buildServiceGuide(svc, handlers, platform));
|
|
131
134
|
const summary = buildSummary(platform, metaCredentials, serviceCredentials);
|
|
132
135
|
const keyStorage = buildKeyStorageGuidance(platform);
|
|
133
136
|
return okResponse({ metaCredentials, serviceCredentials, keyStorage, summary });
|
|
@@ -164,7 +167,7 @@ function buildServiceGuide(service, handlers, platform) {
|
|
|
164
167
|
steps: [
|
|
165
168
|
"Create an account with your chosen provider and obtain an API key.",
|
|
166
169
|
"Decide on a key storage strategy: Android keystore / iOS Keychain / BuildConfig / Info.plist / server proxy.",
|
|
167
|
-
"Pass the key to your
|
|
170
|
+
"Pass the key to your handler via dependency injection or constructor args.",
|
|
168
171
|
],
|
|
169
172
|
codeExample: sampleCode(platform, "YOUR_API_KEY"),
|
|
170
173
|
};
|
|
@@ -183,33 +186,28 @@ function buildServiceGuide(service, handlers, platform) {
|
|
|
183
186
|
}
|
|
184
187
|
function sampleCode(platform, keyName) {
|
|
185
188
|
if (platform === "android") {
|
|
186
|
-
return (`// build.gradle.kts
|
|
187
|
-
`android { defaultConfig {
|
|
188
|
-
`//
|
|
189
|
-
`private suspend fun handleVision(
|
|
190
|
-
` val
|
|
191
|
-
`
|
|
192
|
-
`
|
|
189
|
+
return (`// app/build.gradle.kts\n` +
|
|
190
|
+
`android { defaultConfig { resValue("string", "${keyName.toLowerCase()}", System.getenv("${keyName}") ?: "") } }\n\n` +
|
|
191
|
+
`// In your handler class (regular Kotlin against the Extentos SDK)\n` +
|
|
192
|
+
`private suspend fun handleVision(image: ByteArray): String {\n` +
|
|
193
|
+
` val key = context.getString(R.string.${keyName.toLowerCase()})\n` +
|
|
194
|
+
` val client = YourClient(apiKey = key)\n` +
|
|
195
|
+
` return client.analyze(image)\n` +
|
|
196
|
+
`}\n\n` +
|
|
197
|
+
`// resValue is preferred over buildConfigField because Kotlin compile-\n` +
|
|
198
|
+
`// time constants inlined from BuildConfig don't re-inline when the\n` +
|
|
199
|
+
`// resValue rotates — the kotlin incremental compiler doesn't notice\n` +
|
|
200
|
+
`// the literal changed, so old binaries silently keep the old key.`);
|
|
193
201
|
}
|
|
194
202
|
return (`// Info.plist\n` +
|
|
195
203
|
`<key>${keyName}</key>\n<string>$(${keyName})</string> <!-- inject via xcconfig, not checked in -->\n\n` +
|
|
196
|
-
`//
|
|
197
|
-
`private func handleVision(
|
|
204
|
+
`// In your handler (regular Swift against the Extentos SDK)\n` +
|
|
205
|
+
`private func handleVision(image: Data) async throws -> String {\n` +
|
|
198
206
|
` let key = Bundle.main.object(forInfoDictionaryKey: "${keyName}") as? String ?? ""\n` +
|
|
199
207
|
` let client = YourClient(apiKey: key)\n` +
|
|
200
|
-
` return try await client.analyze(
|
|
208
|
+
` return try await client.analyze(image)\n` +
|
|
201
209
|
`}`);
|
|
202
210
|
}
|
|
203
|
-
function deriveServicesFromSpec(spec) {
|
|
204
|
-
const handlers = collectHandlerNames(spec);
|
|
205
|
-
const set = new Set();
|
|
206
|
-
for (const h of handlers) {
|
|
207
|
-
set.add(guessServiceForHandler(h));
|
|
208
|
-
}
|
|
209
|
-
if (set.size === 0)
|
|
210
|
-
set.add("custom");
|
|
211
|
-
return [...set].sort();
|
|
212
|
-
}
|
|
213
211
|
function guessServiceForHandler(name) {
|
|
214
212
|
const n = name.toLowerCase();
|
|
215
213
|
if (/translate|translation/.test(n))
|
|
@@ -222,56 +220,24 @@ function guessServiceForHandler(name) {
|
|
|
222
220
|
return "openai";
|
|
223
221
|
return "custom";
|
|
224
222
|
}
|
|
225
|
-
function collectHandlerNames(spec) {
|
|
226
|
-
const set = new Set();
|
|
227
|
-
const visit = (actions) => {
|
|
228
|
-
if (!Array.isArray(actions))
|
|
229
|
-
return;
|
|
230
|
-
for (const a of actions) {
|
|
231
|
-
if (!a || typeof a !== "object")
|
|
232
|
-
continue;
|
|
233
|
-
const rec = a;
|
|
234
|
-
if (rec.type === "app_callback" && typeof rec.handler === "string")
|
|
235
|
-
set.add(rec.handler);
|
|
236
|
-
if (rec.type === "branch") {
|
|
237
|
-
visit(rec.then);
|
|
238
|
-
visit(rec.else);
|
|
239
|
-
}
|
|
240
|
-
if (rec.type === "retry_with_backoff" || rec.type === "when_connected") {
|
|
241
|
-
if (rec.action)
|
|
242
|
-
visit([rec.action]);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
};
|
|
246
|
-
const triggers = Array.isArray(spec.triggers) ? spec.triggers : [];
|
|
247
|
-
for (const t of triggers)
|
|
248
|
-
visit(t.actions);
|
|
249
|
-
return [...set].sort();
|
|
250
|
-
}
|
|
251
223
|
function buildSummary(platform, meta, services) {
|
|
252
224
|
const svcCount = services.length;
|
|
253
225
|
const withHandlers = services.filter((s) => s.forHandlers.length > 0).length;
|
|
254
226
|
return `Credential guide for ${platform}: Meta DAT ${meta.required ? "required" : "not required"} (${meta.steps.length} steps). ${svcCount} BYOK service${svcCount === 1 ? "" : "s"}${withHandlers ? ` (${withHandlers} handler-linked)` : ""}. Keys are stored in platform-local secure storage — the Extentos library never proxies or relays them. See keyStorage for storage best practices (gitignore + env-vars-first).`;
|
|
255
227
|
}
|
|
256
|
-
// Where the dev should put their API keys. The most common foot-gun on
|
|
257
|
-
// Android is `local.properties` — devs drop keys there because Android
|
|
258
|
-
// Studio puts `sdk.dir` there too. local.properties IS gitignored by
|
|
259
|
-
// default Android Studio templates, but it's not gitignored by some
|
|
260
|
-
// CI / template variants, and it leaks via accidental git add or by
|
|
261
|
-
// being attached to bug reports. iOS has the analogous trap with
|
|
262
|
-
// xcconfig files. Env-vars-first is the safest default.
|
|
263
228
|
function buildKeyStorageGuidance(platform) {
|
|
264
229
|
if (platform === "android") {
|
|
265
230
|
return {
|
|
266
|
-
preferredPath: "Read keys from environment variables at build time and inject into
|
|
267
|
-
fallbackPath: "If env vars are inconvenient, read from `local.properties` (which IS in default Android Studio .gitignore)
|
|
231
|
+
preferredPath: "Read keys from environment variables at build time and inject into Android resource strings via `resValue`. Example in app/build.gradle.kts: `resValue(\"string\", \"anthropic_api_key\", System.getenv(\"ANTHROPIC_API_KEY\") ?: \"\")`. Set the env var locally (per-shell or in your IDE's run-config); CI sets it via repo secrets. Read at runtime via `context.getString(R.string.anthropic_api_key)`. `resValue` is preferred over `buildConfigField` because kotlinc inlines BuildConfig String constants at compile time — when you rotate the key, the incremental compiler doesn't see existing .class files as dirty and the old key stays in the binary.",
|
|
232
|
+
fallbackPath: "If env vars are inconvenient, read from `local.properties` (which IS in default Android Studio .gitignore) and emit via `resValue`. Pattern: `val keys = Properties().apply { rootProject.file(\"local.properties\").inputStream().use(::load) }; resValue(\"string\", \"anthropic_api_key\", keys.getProperty(\"ANTHROPIC_API_KEY\") ?: System.getenv(\"ANTHROPIC_API_KEY\") ?: \"\")`. Before any push, confirm `local.properties` is in your `.gitignore` (`git check-ignore local.properties` should print the path) and that it's never been committed (`git log --all -- local.properties`).",
|
|
268
233
|
doNotDo: [
|
|
269
234
|
"Hardcode the key as a string literal in any tracked source file (.kt, .xml, .json).",
|
|
235
|
+
"Use `buildConfigField` for secrets that may rotate — kotlinc inlines those constants and stale values survive across rotations until you `gradle clean`.",
|
|
270
236
|
"Commit `local.properties` — even once. If you've ever pushed it, rotate every key inside.",
|
|
271
237
|
"Paste keys into bug reports, screenshots, or simulator-session logs.",
|
|
272
238
|
],
|
|
273
239
|
notes: [
|
|
274
|
-
"
|
|
240
|
+
"Resource string values end up in the compiled APK — anyone with the APK can extract them. Acceptable for dev-local AND for low-value keys (rate-limited demo accounts). For production, use a server proxy that holds the key and authenticates the app instead of shipping the key in the binary.",
|
|
275
241
|
],
|
|
276
242
|
};
|
|
277
243
|
}
|
|
@@ -290,34 +256,28 @@ function buildKeyStorageGuidance(platform) {
|
|
|
290
256
|
}
|
|
291
257
|
function parseArgs(raw) {
|
|
292
258
|
if (!raw || typeof raw !== "object") {
|
|
293
|
-
return {
|
|
294
|
-
error: errorResponse({
|
|
295
|
-
code: "invalid_arguments",
|
|
296
|
-
message: "getCredentialGuide requires { spec, platform }.",
|
|
297
|
-
fixHint: 'Pass { spec, platform: "android" | "ios", services?: [...] }.',
|
|
298
|
-
retryable: false,
|
|
299
|
-
}),
|
|
300
|
-
};
|
|
259
|
+
return errInvalid("getCredentialGuide requires { services, platform }.", 'Pass { services: ["anthropic", ...], platform: "android" | "ios", handlers?: [...] }.');
|
|
301
260
|
}
|
|
302
261
|
const obj = raw;
|
|
303
|
-
if (!obj.spec || typeof obj.spec !== "object") {
|
|
304
|
-
return errInvalid("spec is required.", "Pass the current spec.");
|
|
305
|
-
}
|
|
306
262
|
if (obj.platform !== "android" && obj.platform !== "ios") {
|
|
307
263
|
return errInvalid(`platform must be "android" or "ios" (got ${JSON.stringify(obj.platform)}).`, 'Pass platform: "android" or "ios".');
|
|
308
264
|
}
|
|
265
|
+
if (!Array.isArray(obj.services) || obj.services.length === 0) {
|
|
266
|
+
return errInvalid("services is required and must be a non-empty array of strings.", `Pass services: [...] with one or more of: ${VALID_SERVICES.join(", ")}.`);
|
|
267
|
+
}
|
|
309
268
|
const services = [];
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
return errInvalid(`services contains invalid entry ${JSON.stringify(s)}.`, `Valid services: ${VALID_SERVICES.join(", ")}.`);
|
|
317
|
-
}
|
|
269
|
+
for (const s of obj.services) {
|
|
270
|
+
if (typeof s === "string" && VALID_SERVICES.includes(s)) {
|
|
271
|
+
services.push(s);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
return errInvalid(`services contains invalid entry ${JSON.stringify(s)}.`, `Valid services: ${VALID_SERVICES.join(", ")}.`);
|
|
318
275
|
}
|
|
319
276
|
}
|
|
320
|
-
|
|
277
|
+
const handlers = Array.isArray(obj.handlers)
|
|
278
|
+
? obj.handlers.filter((h) => typeof h === "string")
|
|
279
|
+
: [];
|
|
280
|
+
return { platform: obj.platform, services, handlers };
|
|
321
281
|
}
|
|
322
282
|
function errInvalid(message, fixHint) {
|
|
323
283
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCredentialGuide.js","sourceRoot":"","sources":["../../../src/tools/handlers/getCredentialGuide.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"getCredentialGuide.js","sourceRoot":"","sources":["../../../src/tools/handlers/getCredentialGuide.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getEventLog.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getEventLog.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"getEventLog.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getEventLog.ts"],"names":[],"mappings":"AAGA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA8E5E,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAuFzE"}
|
|
@@ -2,17 +2,20 @@
|
|
|
2
2
|
// Spec: docs/mcp/MCP_TOOLS.md § getEventLog
|
|
3
3
|
import { okResponse, errorResponse } from "../response.js";
|
|
4
4
|
import { backendFetch } from "../util/backendClient.js";
|
|
5
|
+
// Filter values mirror the layers the post-pivot backend writes events to.
|
|
6
|
+
// 'all' + 'errors' are aggregate views; the remaining values each scope to
|
|
7
|
+
// one capability layer. Pre-pivot DSL filters (triggers / blocks / callbacks
|
|
8
|
+
// / spec) are retired — the corresponding event types are no longer emitted.
|
|
5
9
|
const FILTER_VALUES = new Set([
|
|
6
10
|
"all",
|
|
7
11
|
"errors",
|
|
8
12
|
"transport",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
13
|
+
"audio",
|
|
14
|
+
"camera",
|
|
15
|
+
"speak",
|
|
12
16
|
"toggles",
|
|
13
17
|
"streams",
|
|
14
18
|
"system",
|
|
15
|
-
"spec",
|
|
16
19
|
]);
|
|
17
20
|
// Redaction thresholds. Tuned so:
|
|
18
21
|
// - normal log messages (<1KB), small JSON payloads, and STT transcripts pass through unchanged.
|
|
@@ -83,7 +86,6 @@ export async function handleGetEventLog(raw) {
|
|
|
83
86
|
}
|
|
84
87
|
const limit = typeof o.limit === "number" && o.limit > 0 ? o.limit : 50;
|
|
85
88
|
const since = typeof o.since === "string" ? o.since : undefined;
|
|
86
|
-
const flowId = typeof o.flowId === "string" ? o.flowId : undefined;
|
|
87
89
|
const responseFormat = o.responseFormat === "concise" ? "concise" : "detailed";
|
|
88
90
|
const redactBinary = o.redactBinary === false ? false : true;
|
|
89
91
|
const params = new URLSearchParams();
|
|
@@ -91,8 +93,6 @@ export async function handleGetEventLog(raw) {
|
|
|
91
93
|
params.set("limit", String(limit));
|
|
92
94
|
if (since)
|
|
93
95
|
params.set("since", since);
|
|
94
|
-
if (flowId)
|
|
95
|
-
params.set("flowId", flowId);
|
|
96
96
|
const res = await backendFetch(`/api/sessions/${encodeURIComponent(o.sessionId)}/events?${params.toString()}`);
|
|
97
97
|
if (res.status === 404) {
|
|
98
98
|
return errorResponse({
|
|
@@ -115,7 +115,6 @@ export async function handleGetEventLog(raw) {
|
|
|
115
115
|
return {
|
|
116
116
|
id: e.id,
|
|
117
117
|
timestamp: e.timestamp,
|
|
118
|
-
flowId: e.flowId,
|
|
119
118
|
layer: e.layer,
|
|
120
119
|
severity: e.severity,
|
|
121
120
|
type: e.type,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getEventLog.js","sourceRoot":"","sources":["../../../src/tools/handlers/getEventLog.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,4CAA4C;AAE5C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,KAAK;IACL,QAAQ;IACR,WAAW;IACX,
|
|
1
|
+
{"version":3,"file":"getEventLog.js","sourceRoot":"","sources":["../../../src/tools/handlers/getEventLog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPermissions.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getPermissions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getPermissions.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getPermissions.ts"],"names":[],"mappings":"AAeA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAgD7D"}
|
|
@@ -1,22 +1,38 @@
|
|
|
1
|
-
// getPermissions — derive
|
|
2
|
-
//
|
|
3
|
-
|
|
1
|
+
// getPermissions — derive Android permissions / iOS Info.plist keys /
|
|
2
|
+
// Meta DAT scopes from a list of SDK capabilities the app uses.
|
|
3
|
+
//
|
|
4
|
+
// Post pure-SDK pivot: input is a flat list of capability names from
|
|
5
|
+
// `getPlatformInfo.features[].name` (capture_photo, video_frames,
|
|
6
|
+
// transcription_incremental, voice_command, location_updated, …). No
|
|
7
|
+
// spec input — the agent calls this BEFORE wiring the SDK by saying
|
|
8
|
+
// "my app will use these features."
|
|
9
|
+
import { deriveAndroidFromCapabilities, deriveIosFromCapabilities, deriveMetaDatFromCapabilities, KNOWN_CAPABILITIES, } from "../util/permissions.js";
|
|
4
10
|
import { okResponse, errorResponse } from "../response.js";
|
|
5
11
|
export function handleGetPermissions(raw) {
|
|
6
12
|
if (!raw || typeof raw !== "object") {
|
|
7
13
|
return errorResponse({
|
|
8
14
|
code: "invalid_arguments",
|
|
9
|
-
message: "getPermissions requires {
|
|
10
|
-
fixHint: 'Pass {
|
|
15
|
+
message: "getPermissions requires { capabilities, platform }.",
|
|
16
|
+
fixHint: 'Pass { capabilities: ["capture_photo", "transcription_incremental", ...], platform: "android" | "ios" }.',
|
|
11
17
|
retryable: false,
|
|
12
18
|
});
|
|
13
19
|
}
|
|
14
20
|
const obj = raw;
|
|
15
|
-
if (!
|
|
21
|
+
if (!Array.isArray(obj.capabilities)) {
|
|
16
22
|
return errorResponse({
|
|
17
23
|
code: "invalid_arguments",
|
|
18
|
-
message: "
|
|
19
|
-
fixHint:
|
|
24
|
+
message: "capabilities is required and must be an array of strings.",
|
|
25
|
+
fixHint: 'Pass capabilities: ["capture_photo", ...]. See getPlatformInfo(sections: ["capabilities"]) for the catalog of valid feature names.',
|
|
26
|
+
retryable: false,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
const capabilities = obj.capabilities.filter((c) => typeof c === "string");
|
|
30
|
+
const unknown = capabilities.filter((c) => !KNOWN_CAPABILITIES.includes(c));
|
|
31
|
+
if (unknown.length > 0) {
|
|
32
|
+
return errorResponse({
|
|
33
|
+
code: "invalid_arguments",
|
|
34
|
+
message: `Unknown capabilities: ${unknown.join(", ")}.`,
|
|
35
|
+
fixHint: `Valid capabilities: ${KNOWN_CAPABILITIES.join(", ")}. See getPlatformInfo(sections: ["capabilities"]) for the full catalog with descriptions.`,
|
|
20
36
|
retryable: false,
|
|
21
37
|
});
|
|
22
38
|
}
|
|
@@ -28,10 +44,9 @@ export function handleGetPermissions(raw) {
|
|
|
28
44
|
retryable: false,
|
|
29
45
|
});
|
|
30
46
|
}
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
const
|
|
34
|
-
const metaDat = deriveMetaDat(spec);
|
|
47
|
+
const android = deriveAndroidFromCapabilities(capabilities);
|
|
48
|
+
const ios = deriveIosFromCapabilities(capabilities);
|
|
49
|
+
const metaDat = deriveMetaDatFromCapabilities(capabilities);
|
|
35
50
|
const summary = buildSummary(obj.platform, android, ios, metaDat);
|
|
36
51
|
return okResponse({ android, ios, metaDat, summary });
|
|
37
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPermissions.js","sourceRoot":"","sources":["../../../src/tools/handlers/getPermissions.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"getPermissions.js","sourceRoot":"","sources":["../../../src/tools/handlers/getPermissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPlatformInfo.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getPlatformInfo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"getPlatformInfo.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getPlatformInfo.ts"],"names":[],"mappings":"AAmBA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkC5E,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAmC9D"}
|