appium-mcp 1.84.2 → 1.85.0
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/CHANGELOG.md +16 -0
- package/README.md +30 -2
- package/dist/core.d.ts +2 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +2 -0
- package/dist/core.js.map +1 -1
- package/dist/create-server.d.ts +3 -3
- package/dist/create-server.d.ts.map +1 -1
- package/dist/create-server.js +7 -3
- package/dist/create-server.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/session-store.d.ts +2 -2
- package/dist/session-store.d.ts.map +1 -1
- package/dist/session-store.js +5 -13
- package/dist/session-store.js.map +1 -1
- package/dist/telemetry/attributes.d.ts +46 -0
- package/dist/telemetry/attributes.d.ts.map +1 -0
- package/dist/telemetry/attributes.js +90 -0
- package/dist/telemetry/attributes.js.map +1 -0
- package/dist/telemetry/init.d.ts +19 -0
- package/dist/telemetry/init.d.ts.map +1 -0
- package/dist/telemetry/init.js +68 -0
- package/dist/telemetry/init.js.map +1 -0
- package/dist/telemetry/tracer.d.ts +31 -0
- package/dist/telemetry/tracer.d.ts.map +1 -0
- package/dist/telemetry/tracer.js +59 -0
- package/dist/telemetry/tracer.js.map +1 -0
- package/dist/telemetry/wrapOperations.d.ts +30 -0
- package/dist/telemetry/wrapOperations.d.ts.map +1 -0
- package/dist/telemetry/wrapOperations.js +156 -0
- package/dist/telemetry/wrapOperations.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -12
- package/dist/tools/index.js.map +1 -1
- package/dist/utils/env.d.ts +2 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +5 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/sensitive.d.ts +8 -0
- package/dist/utils/sensitive.d.ts.map +1 -0
- package/dist/utils/sensitive.js +27 -0
- package/dist/utils/sensitive.js.map +1 -0
- package/package.json +10 -1
- package/server.json +2 -2
- package/src/core.ts +2 -0
- package/src/create-server.ts +8 -4
- package/src/server.ts +1 -1
- package/src/session-store.ts +6 -20
- package/src/telemetry/attributes.ts +104 -0
- package/src/telemetry/init.ts +77 -0
- package/src/telemetry/tracer.ts +75 -0
- package/src/telemetry/wrapOperations.ts +245 -0
- package/src/tools/index.ts +2 -14
- package/src/utils/env.ts +5 -0
- package/src/utils/sensitive.ts +30 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
## [1.85.0](https://github.com/appium/appium-mcp/compare/v1.84.2...v1.85.0) (2026-06-11)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* add OpenTelemetry feature ([#385](https://github.com/appium/appium-mcp/issues/385)) ([99dee60](https://github.com/appium/appium-mcp/commit/99dee60e81491020cb7b03ed811629a4a955eeb8))
|
|
6
|
+
|
|
7
|
+
### Miscellaneous Chores
|
|
8
|
+
|
|
9
|
+
* **release:** 1.85.0 [skip ci] ([22d7957](https://github.com/appium/appium-mcp/commit/22d79570be7f5e8ea36dec302c21445823495e02))
|
|
10
|
+
|
|
11
|
+
## [1.85.0](https://github.com/appium/appium-mcp/compare/v1.84.2...v1.85.0) (2026-06-11)
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* add OpenTelemetry feature ([#385](https://github.com/appium/appium-mcp/issues/385)) ([99dee60](https://github.com/appium/appium-mcp/commit/99dee60e81491020cb7b03ed811629a4a955eeb8))
|
|
16
|
+
|
|
1
17
|
## [1.84.2](https://github.com/appium/appium-mcp/compare/v1.84.1...v1.84.2) (2026-06-09)
|
|
2
18
|
|
|
3
19
|
### Bug Fixes
|
package/README.md
CHANGED
|
@@ -155,6 +155,34 @@ This will automatically configure the MCP server for use with Claude Code. Make
|
|
|
155
155
|
| `SENTENCE_TRANSFORMERS_MODEL` | Optional | Hugging Face model used for semantic search in Appium documentation queries (default: `Xenova/all-MiniLM-L6-v2`) |
|
|
156
156
|
| `APPIUM_MCP_PERSIST_REMOTE_SESSIONS_PATH` | Optional | Absolute file path to persist attached remote session info across server restarts (JSON format) |
|
|
157
157
|
| `APPIUM_MCP_EVIDENCE` | Optional | Set to `true` or `1` to attach a structured **action evidence record** (locator, resolved element id, context, timing, normalized error code) to `appium_find_element` and `appium_gesture` responses as an `application/vnd.appium.evidence+json` resource block, for CI/debugging. Disabled by default; responses are unchanged when unset. |
|
|
158
|
+
| `APPIUM_MCP_OTEL_ENABLED` | Optional | Set to `true` to enable OpenTelemetry tracing (disabled by default). |
|
|
159
|
+
| `APPIUM_MCP_OTEL_INCLUDE_ARGUMENT_VALUES` | Optional | Set to `true` to include sanitized non-sensitive argument values in spans; disabled by default because values may contain sensitive data. |
|
|
160
|
+
| `OTEL_SERVICE_NAME` | Optional | Service name reported to the OpenTelemetry collector (example: `appium-mcp`). |
|
|
161
|
+
| `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` | Optional | OTLP/HTTP traces endpoint (example: `http://127.0.0.1:4318/v1/traces`). |
|
|
162
|
+
| `OTEL_TRACES_SAMPLER` | Optional | Trace sampling strategy; `parentbased_always_on` samples new root traces and follows parent decisions. |
|
|
163
|
+
|
|
164
|
+
### OpenTelemetry tracing
|
|
165
|
+
|
|
166
|
+
OpenTelemetry tracing is disabled by default. Set `APPIUM_MCP_OTEL_ENABLED=true` to initialize the Node.js OpenTelemetry SDK before the MCP server is constructed. The SDK uses standard `OTEL_*` environment variables, for example:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
APPIUM_MCP_OTEL_ENABLED=true
|
|
170
|
+
# Optional: include sanitized non-sensitive argument values in spans.
|
|
171
|
+
# APPIUM_MCP_OTEL_INCLUDE_ARGUMENT_VALUES=true
|
|
172
|
+
OTEL_SERVICE_NAME=appium-mcp
|
|
173
|
+
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://127.0.0.1:4318/v1/traces
|
|
174
|
+
OTEL_TRACES_SAMPLER=parentbased_always_on
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
When enabled, appium-mcp creates spans for MCP tool calls, prompt loads, resource reads, and resource template reads. Error status is recorded for thrown operation errors and MCP tool results marked with `isError`. Span attributes intentionally avoid raw screenshots, XML page source, prompts, credentials, and other high-cardinality or sensitive payloads.
|
|
178
|
+
|
|
179
|
+
For local trace inspection, use the Jaeger setup in `tools/telemetry`:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
npm run telemetry:jaeger:start
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Then open `http://127.0.0.1:16686` and run appium-mcp with the environment values in `tools/telemetry/jaeger.env`.
|
|
158
186
|
|
|
159
187
|
### Capabilities
|
|
160
188
|
|
|
@@ -342,7 +370,7 @@ HTTP and streamable MCP clients may **disconnect briefly** (reconnect, reload, p
|
|
|
342
370
|
|
|
343
371
|
Use `appium-mcp/core` to compose the default Appium MCP server with custom business logic without maintaining a fork. Plugins can register MCP tools, prompts, resources, and resource templates, and can wrap tool execution with lifecycle hooks. Call hooks are tool-only: prompts, resources, and resource templates are registered with FastMCP but are not wrapped by `beforeCall` or `afterCall`.
|
|
344
372
|
|
|
345
|
-
`createAppiumMcpServer({ policy })` can also hide nonmatching tools and resources from MCP discovery. Policy rules are regular expressions matched against tool and resource names exactly as registered. The policy is applied at registration time to both single and batch registration methods. Resource policy matches the resource `name` only; resources or resource templates without a string `name` cannot match a non-empty `allowResources` list.
|
|
373
|
+
`createAppiumMcpServer({ policy })` can also hide nonmatching tools and resources from MCP discovery. The factory is async, so await it before starting the returned server. Policy rules are regular expressions matched against tool and resource names exactly as registered. The policy is applied at registration time to both single and batch registration methods. Resource policy matches the resource `name` only; resources or resource templates without a string `name` cannot match a non-empty `allowResources` list.
|
|
346
374
|
|
|
347
375
|
```ts
|
|
348
376
|
import { createAppiumMcpServer } from 'appium-mcp/core';
|
|
@@ -382,7 +410,7 @@ class CheckoutPlugin implements AppiumMcpPlugin {
|
|
|
382
410
|
}
|
|
383
411
|
}
|
|
384
412
|
|
|
385
|
-
const server = createAppiumMcpServer({
|
|
413
|
+
const server = await createAppiumMcpServer({
|
|
386
414
|
plugins: [new CheckoutPlugin()],
|
|
387
415
|
additionalInstructions: 'Custom checkout policies are active.',
|
|
388
416
|
policy: {
|
package/dist/core.d.ts
CHANGED
|
@@ -10,5 +10,7 @@ export type { CreateAppiumMcpServerOptions } from './create-server.js';
|
|
|
10
10
|
export { evaluatePolicyTarget } from './policy.js';
|
|
11
11
|
export type { AppiumMcpPolicy, PolicyDecision, PolicyDecisionReason, PolicyTargetKind, } from './policy.js';
|
|
12
12
|
export { AppiumMcpCore, formatVerificationReport, McpRegistry, PluginManager, verifyAppiumMcpNames, } from './plugin.js';
|
|
13
|
+
export { isTelemetryEnabled } from './telemetry/attributes.js';
|
|
14
|
+
export { getAppiumMcpTracer, withSpan } from './telemetry/tracer.js';
|
|
13
15
|
export type { AppiumMcpPlugin, PluginContext, PluginSessionContext, ToolCallContext, ToolCallResult, VerificationDuplicate, VerificationDuplicateKind, VerificationEntry, VerificationReport, VerifyAppiumMcpNamesOptions, } from './plugin.js';
|
|
14
16
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACrE,YAAY,EACV,eAAe,EACf,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,kBAAkB,EAClB,2BAA2B,GAC5B,MAAM,aAAa,CAAC"}
|
package/dist/core.js
CHANGED
|
@@ -8,4 +8,6 @@
|
|
|
8
8
|
export { createAppiumMcpServer } from './create-server.js';
|
|
9
9
|
export { evaluatePolicyTarget } from './policy.js';
|
|
10
10
|
export { AppiumMcpCore, formatVerificationReport, McpRegistry, PluginManager, verifyAppiumMcpNames, } from './plugin.js';
|
|
11
|
+
export { isTelemetryEnabled } from './telemetry/attributes.js';
|
|
12
|
+
export { getAppiumMcpTracer, withSpan } from './telemetry/tracer.js';
|
|
11
13
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAOnD,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAOnD,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/create-server.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* ```ts
|
|
6
6
|
* import { createAppiumMcpServer } from 'appium-mcp/core';
|
|
7
7
|
*
|
|
8
|
-
* const server = createAppiumMcpServer({
|
|
8
|
+
* const server = await createAppiumMcpServer({
|
|
9
9
|
* plugins: [new CheckoutPlugin(), new LoginGuardPlugin()],
|
|
10
10
|
* });
|
|
11
11
|
*
|
|
@@ -52,7 +52,7 @@ export interface CreateAppiumMcpServerOptions {
|
|
|
52
52
|
* server. It replicates the setup that the default `server.ts` performs, while
|
|
53
53
|
* also registering plugin tools and lifecycle hooks.
|
|
54
54
|
*
|
|
55
|
-
* @returns A configured `FastMCP` instance ready to be `start()`-ed.
|
|
55
|
+
* @returns A promise resolving to a configured `FastMCP` instance ready to be `start()`-ed.
|
|
56
56
|
*/
|
|
57
|
-
export declare function createAppiumMcpServer(options?: CreateAppiumMcpServerOptions): FastMCP
|
|
57
|
+
export declare function createAppiumMcpServer(options?: CreateAppiumMcpServerOptions): Promise<FastMCP>;
|
|
58
58
|
//# sourceMappingURL=create-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAelE,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAE5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,aAAa,CAAC,EAAE,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;IAEhD;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAQD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,OAAO,CAAC,CAwKlB"}
|
package/dist/create-server.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* ```ts
|
|
6
6
|
* import { createAppiumMcpServer } from 'appium-mcp/core';
|
|
7
7
|
*
|
|
8
|
-
* const server = createAppiumMcpServer({
|
|
8
|
+
* const server = await createAppiumMcpServer({
|
|
9
9
|
* plugins: [new CheckoutPlugin(), new LoginGuardPlugin()],
|
|
10
10
|
* });
|
|
11
11
|
*
|
|
@@ -20,6 +20,8 @@ import { safeDeleteAllSessions, listSessions } from './session-store.js';
|
|
|
20
20
|
import log from './logger.js';
|
|
21
21
|
import { PluginManager } from './plugin.js';
|
|
22
22
|
import { installPolicy } from './policy.js';
|
|
23
|
+
import { initializeOpenTelemetry } from './telemetry/init.js';
|
|
24
|
+
import { installTelemetryWrappers } from './telemetry/wrapOperations.js';
|
|
23
25
|
const SERVER_VERSION = pkg.version;
|
|
24
26
|
const SERVER_INSTRUCTIONS = [
|
|
25
27
|
'Appium mobile automation through MCP. Defaults that avoid broken flows:',
|
|
@@ -40,9 +42,9 @@ const SERVER_INSTRUCTIONS = [
|
|
|
40
42
|
* server. It replicates the setup that the default `server.ts` performs, while
|
|
41
43
|
* also registering plugin tools and lifecycle hooks.
|
|
42
44
|
*
|
|
43
|
-
* @returns A configured `FastMCP` instance ready to be `start()`-ed.
|
|
45
|
+
* @returns A promise resolving to a configured `FastMCP` instance ready to be `start()`-ed.
|
|
44
46
|
*/
|
|
45
|
-
export function createAppiumMcpServer(options = {}) {
|
|
47
|
+
export async function createAppiumMcpServer(options = {}) {
|
|
46
48
|
const { plugins = [], serverName = 'MCP Appium', serverVersion = SERVER_VERSION, additionalInstructions, policy, } = options;
|
|
47
49
|
const instructions = additionalInstructions
|
|
48
50
|
? `${SERVER_INSTRUCTIONS}\n${additionalInstructions}`
|
|
@@ -57,6 +59,8 @@ export function createAppiumMcpServer(options = {}) {
|
|
|
57
59
|
},
|
|
58
60
|
});
|
|
59
61
|
installPolicy(server, policy);
|
|
62
|
+
await initializeOpenTelemetry();
|
|
63
|
+
installTelemetryWrappers(server);
|
|
60
64
|
// -------------------------------------------------------------------------
|
|
61
65
|
// 1. Install plugin hooks BEFORE registering any tools so that every built-in
|
|
62
66
|
// and plugin tool is wrapped with beforeCall / afterCall.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-server.js","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACxD,OAAO,aAAa,MAAM,kBAAkB,CAAC;AAC7C,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAwB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"create-server.js","sourceRoot":"","sources":["../src/create-server.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAUA,QAAA,MAAM,MAAM,iEAA2C,CAAC;AACxD,eAAe,MAAM,CAAC"}
|
package/dist/server.js
CHANGED
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,OAAO,GAAsB,EAAE,CAAC;AAEtC,IAAI,CAAC;IACH,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;AAC1C,CAAC;AAAC,OAAO,IAAI,EAAE,CAAC,CAAA,CAAC;AAEjB,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,OAAO,GAAsB,EAAE,CAAC;AAEtC,IAAI,CAAC;IACH,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAC1E,OAAO,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;AAC1C,CAAC;AAAC,OAAO,IAAI,EAAE,CAAC,CAAA,CAAC;AAEjB,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AACxD,eAAe,MAAM,CAAC"}
|
package/dist/session-store.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
|
|
2
|
-
import { XCUITestDriver } from 'appium-xcuitest-driver';
|
|
1
|
+
import type { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
|
|
2
|
+
import type { XCUITestDriver } from 'appium-xcuitest-driver';
|
|
3
3
|
import type { Client } from 'webdriver';
|
|
4
4
|
export type DriverInstance = Client | AndroidUiautomator2Driver | XCUITestDriver;
|
|
5
5
|
export type NullableDriverInstance = DriverInstance | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"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"}
|
package/dist/session-store.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { AndroidUiautomator2Driver } from 'appium-uiautomator2-driver';
|
|
2
|
-
import { XCUITestDriver } from 'appium-xcuitest-driver';
|
|
3
1
|
import log from './logger.js';
|
|
4
2
|
import { removePersistedSession, writePersistedSession, } from './persistence.js';
|
|
5
3
|
/**
|
|
@@ -24,9 +22,7 @@ export const PLATFORM = {
|
|
|
24
22
|
*/
|
|
25
23
|
export function isRemoteDriverSession(driver) {
|
|
26
24
|
if (driver) {
|
|
27
|
-
return (
|
|
28
|
-
driver.constructor?.name !== 'AndroidUiautomator2Driver' &&
|
|
29
|
-
!(driver instanceof XCUITestDriver) &&
|
|
25
|
+
return (driver.constructor?.name !== 'AndroidUiautomator2Driver' &&
|
|
30
26
|
driver.constructor?.name !== 'XCUITestDriver');
|
|
31
27
|
}
|
|
32
28
|
return false;
|
|
@@ -44,8 +40,7 @@ export function isRemoteDriverSession(driver) {
|
|
|
44
40
|
* @returns `true` if `driver` is an `AndroidUiautomator2Driver`.
|
|
45
41
|
*/
|
|
46
42
|
export function isAndroidUiautomator2DriverSession(driver) {
|
|
47
|
-
return
|
|
48
|
-
driver?.constructor?.name === 'AndroidUiautomator2Driver');
|
|
43
|
+
return driver?.constructor?.name === 'AndroidUiautomator2Driver';
|
|
49
44
|
}
|
|
50
45
|
/**
|
|
51
46
|
* Type-guard that asserts the provided driver is an XCUITest (iOS) driver.
|
|
@@ -59,8 +54,7 @@ export function isAndroidUiautomator2DriverSession(driver) {
|
|
|
59
54
|
* @returns `true` if `driver` is an `XCUITestDriver`.
|
|
60
55
|
*/
|
|
61
56
|
export function isXCUITestDriverSession(driver) {
|
|
62
|
-
return
|
|
63
|
-
driver?.constructor?.name === 'XCUITestDriver');
|
|
57
|
+
return driver?.constructor?.name === 'XCUITestDriver';
|
|
64
58
|
}
|
|
65
59
|
export async function setSession(d, id, capabilities = {}, ownership = 'owned', remoteServerUrl) {
|
|
66
60
|
await setSessionEntry(d, id, capabilities, ownership, remoteServerUrl);
|
|
@@ -282,12 +276,10 @@ function selectNextActiveSessionId(deletedSessionId) {
|
|
|
282
276
|
return nextSession ?? null;
|
|
283
277
|
}
|
|
284
278
|
export const getPlatformName = (driver) => {
|
|
285
|
-
if (driver
|
|
286
|
-
driver?.constructor?.name === 'AndroidUiautomator2Driver') {
|
|
279
|
+
if (driver?.constructor?.name === 'AndroidUiautomator2Driver') {
|
|
287
280
|
return PLATFORM.android;
|
|
288
281
|
}
|
|
289
|
-
if (driver
|
|
290
|
-
driver?.constructor?.name === 'XCUITestDriver') {
|
|
282
|
+
if (driver?.constructor?.name === 'XCUITestDriver') {
|
|
291
283
|
return PLATFORM.ios;
|
|
292
284
|
}
|
|
293
285
|
const client = driver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../src/session-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for deciding whether telemetry is enabled and for building safe span
|
|
3
|
+
* attributes. This file intentionally exposes only low-cardinality metadata and
|
|
4
|
+
* filtered input names so spans do not capture secrets, screenshots, page
|
|
5
|
+
* source XML, prompts, or other user payloads.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Determines whether telemetry is enabled based on the APPIUM_MCP_OTEL_ENABLED environment variable.
|
|
9
|
+
* Recognizes "1", "true", "yes", and "on" (case-insensitive) as true values.
|
|
10
|
+
* Defaults to false if the variable is not set or has an unrecognized value.
|
|
11
|
+
* @returns True if telemetry is enabled, false otherwise.
|
|
12
|
+
*/
|
|
13
|
+
export declare function isTelemetryEnabled(): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Determines whether including argument values in telemetry attributes is enabled based on the APPIUM_MCP_OTEL_INCLUDE_ARGUMENT_VALUES environment variable.
|
|
16
|
+
* Recognizes "1", "true", "yes", and "on" (case-insensitive) as true values.
|
|
17
|
+
* Defaults to false if the variable is not set or has an unrecognized value.
|
|
18
|
+
* When false, argument values will not be included in telemetry attributes, even for non-sensitive keys.
|
|
19
|
+
* When true, non-sensitive argument values will be included in telemetry attributes, while sensitive keys will still be excluded.
|
|
20
|
+
* @see safeInputValueAttributes for how argument values are included in attributes when this is enabled.
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
export declare function isArgumentValueTelemetryEnabled(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Safely converts a value to a string, number, or boolean for use as a telemetry attribute.
|
|
26
|
+
* If the value is already a string, number, or boolean, it is returned as-is.
|
|
27
|
+
* If the value is null or undefined, an empty string is returned.
|
|
28
|
+
* Otherwise, the value is converted to a string.
|
|
29
|
+
* @param value The value to convert.
|
|
30
|
+
* @returns The safe attribute value.
|
|
31
|
+
*/
|
|
32
|
+
export declare function safeAttributeValue(value: unknown): string | number | boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Safely extracts the session ID from the given arguments.
|
|
35
|
+
* Falls back to the active session ID when no string argument sessionId exists.
|
|
36
|
+
* @param args The arguments object potentially containing a sessionId.
|
|
37
|
+
* @returns The session ID if present and valid, otherwise undefined.
|
|
38
|
+
*/
|
|
39
|
+
export declare function safeSessionId(args: unknown): string | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Safely extracts the input keys from the given arguments, excluding sensitive keys.
|
|
42
|
+
* @param args The arguments object potentially containing input keys.
|
|
43
|
+
* @returns An array of safe input keys.
|
|
44
|
+
*/
|
|
45
|
+
export declare function safeInputKeys(args: unknown): string[];
|
|
46
|
+
//# sourceMappingURL=attributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../src/telemetry/attributes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,IAAI,OAAO,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAqB5E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAS/D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,CAQrD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for deciding whether telemetry is enabled and for building safe span
|
|
3
|
+
* attributes. This file intentionally exposes only low-cardinality metadata and
|
|
4
|
+
* filtered input names so spans do not capture secrets, screenshots, page
|
|
5
|
+
* source XML, prompts, or other user payloads.
|
|
6
|
+
*/
|
|
7
|
+
import { isTruthyEnvValue } from '../utils/env.js';
|
|
8
|
+
import { isSensitiveKey } from '../utils/sensitive.js';
|
|
9
|
+
import { getSessionId } from '../session-store.js';
|
|
10
|
+
const MAX_ATTRIBUTE_VALUE_LENGTH = 2048;
|
|
11
|
+
/**
|
|
12
|
+
* Determines whether telemetry is enabled based on the APPIUM_MCP_OTEL_ENABLED environment variable.
|
|
13
|
+
* Recognizes "1", "true", "yes", and "on" (case-insensitive) as true values.
|
|
14
|
+
* Defaults to false if the variable is not set or has an unrecognized value.
|
|
15
|
+
* @returns True if telemetry is enabled, false otherwise.
|
|
16
|
+
*/
|
|
17
|
+
export function isTelemetryEnabled() {
|
|
18
|
+
return isTruthyEnvValue(process.env.APPIUM_MCP_OTEL_ENABLED);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Determines whether including argument values in telemetry attributes is enabled based on the APPIUM_MCP_OTEL_INCLUDE_ARGUMENT_VALUES environment variable.
|
|
22
|
+
* Recognizes "1", "true", "yes", and "on" (case-insensitive) as true values.
|
|
23
|
+
* Defaults to false if the variable is not set or has an unrecognized value.
|
|
24
|
+
* When false, argument values will not be included in telemetry attributes, even for non-sensitive keys.
|
|
25
|
+
* When true, non-sensitive argument values will be included in telemetry attributes, while sensitive keys will still be excluded.
|
|
26
|
+
* @see safeInputValueAttributes for how argument values are included in attributes when this is enabled.
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
export function isArgumentValueTelemetryEnabled() {
|
|
30
|
+
return isTruthyEnvValue(process.env.APPIUM_MCP_OTEL_INCLUDE_ARGUMENT_VALUES);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Safely converts a value to a string, number, or boolean for use as a telemetry attribute.
|
|
34
|
+
* If the value is already a string, number, or boolean, it is returned as-is.
|
|
35
|
+
* If the value is null or undefined, an empty string is returned.
|
|
36
|
+
* Otherwise, the value is converted to a string.
|
|
37
|
+
* @param value The value to convert.
|
|
38
|
+
* @returns The safe attribute value.
|
|
39
|
+
*/
|
|
40
|
+
export function safeAttributeValue(value) {
|
|
41
|
+
if (typeof value === 'string' ||
|
|
42
|
+
typeof value === 'number' ||
|
|
43
|
+
typeof value === 'boolean') {
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
if (value == null) {
|
|
47
|
+
return '';
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const serialized = JSON.stringify(value, (key, val) => key && isSensitiveKey(key) ? '[REDACTED]' : val);
|
|
51
|
+
return truncateAttributeValue(serialized ?? String(value));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return truncateAttributeValue(String(value));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Safely extracts the session ID from the given arguments.
|
|
59
|
+
* Falls back to the active session ID when no string argument sessionId exists.
|
|
60
|
+
* @param args The arguments object potentially containing a sessionId.
|
|
61
|
+
* @returns The session ID if present and valid, otherwise undefined.
|
|
62
|
+
*/
|
|
63
|
+
export function safeSessionId(args) {
|
|
64
|
+
if (args && typeof args === 'object' && 'sessionId' in args) {
|
|
65
|
+
const sessionId = args.sessionId;
|
|
66
|
+
if (typeof sessionId === 'string' && sessionId.length > 0) {
|
|
67
|
+
return sessionId;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return getSessionId() ?? undefined;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Safely extracts the input keys from the given arguments, excluding sensitive keys.
|
|
74
|
+
* @param args The arguments object potentially containing input keys.
|
|
75
|
+
* @returns An array of safe input keys.
|
|
76
|
+
*/
|
|
77
|
+
export function safeInputKeys(args) {
|
|
78
|
+
if (!args || typeof args !== 'object' || Array.isArray(args)) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
return Object.keys(args)
|
|
82
|
+
.filter((key) => !isSensitiveKey(key))
|
|
83
|
+
.sort();
|
|
84
|
+
}
|
|
85
|
+
function truncateAttributeValue(value) {
|
|
86
|
+
return value.length > MAX_ATTRIBUTE_VALUE_LENGTH
|
|
87
|
+
? `${value.slice(0, MAX_ATTRIBUTE_VALUE_LENGTH)}...`
|
|
88
|
+
: value;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=attributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../src/telemetry/attributes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,+BAA+B;IAC7C,OAAO,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS,EAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CACpD,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAChD,CAAC;QACF,OAAO,sBAAsB,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;QAC5D,MAAM,SAAS,GAAI,IAAgC,CAAC,SAAS,CAAC;QAC9D,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,YAAY,EAAE,IAAI,SAAS,CAAC;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SACrB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SACrC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,OAAO,KAAK,CAAC,MAAM,GAAG,0BAA0B;QAC9C,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,0BAA0B,CAAC,KAAK;QACpD,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry SDK bootstrap for the appium-mcp CLI. Initialization is opt-in
|
|
3
|
+
* via APPIUM_MCP_OTEL_ENABLED so normal server startup keeps the default no-op
|
|
4
|
+
* OpenTelemetry provider and avoids exporter setup unless tracing is requested.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Initializes the OpenTelemetry SDK if telemetry is enabled and not already started.
|
|
8
|
+
* This function is idempotent and safe to call multiple times; the SDK will only
|
|
9
|
+
* be initialized once.
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
export declare function initializeOpenTelemetry(): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Shuts down the OpenTelemetry SDK if it was started. This is typically called during process shutdown to ensure
|
|
15
|
+
* that all telemetry data is flushed properly. This function is idempotent and safe to call multiple times.
|
|
16
|
+
* @returns
|
|
17
|
+
*/
|
|
18
|
+
export declare function shutdownOpenTelemetry(): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/telemetry/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH;;;;;GAKG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB7D;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAW3D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry SDK bootstrap for the appium-mcp CLI. Initialization is opt-in
|
|
3
|
+
* via APPIUM_MCP_OTEL_ENABLED so normal server startup keeps the default no-op
|
|
4
|
+
* OpenTelemetry provider and avoids exporter setup unless tracing is requested.
|
|
5
|
+
*/
|
|
6
|
+
import log from '../logger.js';
|
|
7
|
+
import { isTelemetryEnabled } from './attributes.js';
|
|
8
|
+
let sdkStarted = false;
|
|
9
|
+
let shutdownRegistered = false;
|
|
10
|
+
let sdk;
|
|
11
|
+
/**
|
|
12
|
+
* Initializes the OpenTelemetry SDK if telemetry is enabled and not already started.
|
|
13
|
+
* This function is idempotent and safe to call multiple times; the SDK will only
|
|
14
|
+
* be initialized once.
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
export async function initializeOpenTelemetry() {
|
|
18
|
+
if (!isTelemetryEnabled() || sdkStarted) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const [{ NodeSDK }, { OTLPTraceExporter }] = await Promise.all([
|
|
22
|
+
import('@opentelemetry/sdk-node'),
|
|
23
|
+
import('@opentelemetry/exporter-trace-otlp-http'),
|
|
24
|
+
]);
|
|
25
|
+
const nodeSdk = new NodeSDK({
|
|
26
|
+
traceExporter: new OTLPTraceExporter(),
|
|
27
|
+
});
|
|
28
|
+
sdk = nodeSdk;
|
|
29
|
+
nodeSdk.start();
|
|
30
|
+
sdkStarted = true;
|
|
31
|
+
registerShutdown();
|
|
32
|
+
log.info('OpenTelemetry tracing enabled for appium-mcp.');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Shuts down the OpenTelemetry SDK if it was started. This is typically called during process shutdown to ensure
|
|
36
|
+
* that all telemetry data is flushed properly. This function is idempotent and safe to call multiple times.
|
|
37
|
+
* @returns
|
|
38
|
+
*/
|
|
39
|
+
export async function shutdownOpenTelemetry() {
|
|
40
|
+
if (!sdkStarted || !sdk) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
await sdk.shutdown();
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
sdk = undefined;
|
|
48
|
+
sdkStarted = false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function registerShutdown() {
|
|
52
|
+
if (shutdownRegistered) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
shutdownRegistered = true;
|
|
56
|
+
const shutdown = async () => {
|
|
57
|
+
try {
|
|
58
|
+
await shutdownOpenTelemetry();
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
log.error('Error shutting down OpenTelemetry SDK:', error);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
process.once('beforeExit', () => {
|
|
65
|
+
void shutdown();
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/telemetry/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,GAAG,MAAM,cAAc,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B,IAAI,GAA6D,CAAC;AAElE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,IAAI,CAAC,kBAAkB,EAAE,IAAI,UAAU,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;IAED,MAAM,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7D,MAAM,CAAC,yBAAyB,CAAC;QACjC,MAAM,CAAC,yCAAyC,CAAC;KAClD,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC;QAC1B,aAAa,EAAE,IAAI,iBAAiB,EAAE;KACvC,CAAC,CAAC;IAEH,GAAG,GAAG,OAAO,CAAC;IACd,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,UAAU,GAAG,IAAI,CAAC;IAClB,gBAAgB,EAAE,CAAC;IACnB,GAAG,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;IACvB,CAAC;YAAS,CAAC;QACT,GAAG,GAAG,SAAS,CAAC;QAChB,UAAU,GAAG,KAAK,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,kBAAkB,GAAG,IAAI,CAAC;IAE1B,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,qBAAqB,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;QAC9B,KAAK,QAAQ,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared tracer helpers for appium-mcp instrumentation. Tool, prompt, and
|
|
3
|
+
* resource wrappers use this module so span creation, exception recording, and
|
|
4
|
+
* disabled-telemetry behavior stay consistent across MCP operation types.
|
|
5
|
+
*/
|
|
6
|
+
import { SpanStatusCode, type Attributes } from '@opentelemetry/api';
|
|
7
|
+
/**
|
|
8
|
+
* Gets the OpenTelemetry tracer for appium-mcp. This is used by tool, prompt,
|
|
9
|
+
* and resource wrappers to create spans with a consistent name and configuration.
|
|
10
|
+
* @returns The OpenTelemetry tracer for appium-mcp.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getAppiumMcpTracer(): import("@opentelemetry/api").Tracer;
|
|
13
|
+
/**
|
|
14
|
+
* Gets the currently active OpenTelemetry span from the context. This is used by
|
|
15
|
+
* tool, prompt, and resource wrappers to add attributes or record exceptions on the
|
|
16
|
+
* active span without needing to pass the span object through multiple layers of calls.
|
|
17
|
+
* @returns The currently active OpenTelemetry span, or undefined if there is no active span.
|
|
18
|
+
*/
|
|
19
|
+
export declare function getActiveSpan(): import("@opentelemetry/api").Span | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Runs the given asynchronous operation within a new OpenTelemetry span with the specified name and attributes.
|
|
22
|
+
* If telemetry is not enabled, the operation is run without creating a span.
|
|
23
|
+
* If the operation throws an error, the error is recorded on the span and re-thrown.
|
|
24
|
+
* @param name The name of the span.
|
|
25
|
+
* @param attributes The attributes to set on the span.
|
|
26
|
+
* @param operation The asynchronous operation to run within the span.
|
|
27
|
+
* @returns The result of the asynchronous operation.
|
|
28
|
+
*/
|
|
29
|
+
export declare function withSpan<T>(name: string, attributes: Attributes, operation: () => Promise<T>): Promise<T>;
|
|
30
|
+
export { SpanStatusCode };
|
|
31
|
+
//# sourceMappingURL=tracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../../src/telemetry/tracer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,cAAc,EAEd,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAM5B;;;;GAIG;AACH,wBAAgB,kBAAkB,wCAEjC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,kDAE5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAsBZ;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|