@tmhs/mobile-mcp 0.7.0 → 0.10.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/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/tools/addMap.d.ts +3 -0
- package/dist/tools/addMap.d.ts.map +1 -0
- package/dist/tools/addMap.js +223 -0
- package/dist/tools/addMap.js.map +1 -0
- package/dist/tools/checkOfflineReady.d.ts +3 -0
- package/dist/tools/checkOfflineReady.d.ts.map +1 -0
- package/dist/tools/checkOfflineReady.js +190 -0
- package/dist/tools/checkOfflineReady.js.map +1 -0
- package/dist/tools/generateForm.d.ts +3 -0
- package/dist/tools/generateForm.d.ts.map +1 -0
- package/dist/tools/generateForm.js +337 -0
- package/dist/tools/generateForm.js.map +1 -0
- package/dist/tools/generateTestFile.d.ts +3 -0
- package/dist/tools/generateTestFile.d.ts.map +1 -0
- package/dist/tools/generateTestFile.js +184 -0
- package/dist/tools/generateTestFile.js.map +1 -0
- package/dist/tools/profilePerformance.d.ts +3 -0
- package/dist/tools/profilePerformance.d.ts.map +1 -0
- package/dist/tools/profilePerformance.js +222 -0
- package/dist/tools/profilePerformance.js.map +1 -0
- package/dist/tools/runTests.d.ts +3 -0
- package/dist/tools/runTests.d.ts.map +1 -0
- package/dist/tools/runTests.js +165 -0
- package/dist/tools/runTests.js.map +1 -0
- package/dist/tools/securityAudit.d.ts +3 -0
- package/dist/tools/securityAudit.d.ts.map +1 -0
- package/dist/tools/securityAudit.js +213 -0
- package/dist/tools/securityAudit.js.map +1 -0
- package/dist/tools/setupCI.d.ts +3 -0
- package/dist/tools/setupCI.d.ts.map +1 -0
- package/dist/tools/setupCI.js +202 -0
- package/dist/tools/setupCI.js.map +1 -0
- package/dist/tools/setupI18n.d.ts +3 -0
- package/dist/tools/setupI18n.d.ts.map +1 -0
- package/dist/tools/setupI18n.js +155 -0
- package/dist/tools/setupI18n.js.map +1 -0
- package/dist/tools/setupMonitoring.d.ts +3 -0
- package/dist/tools/setupMonitoring.d.ts.map +1 -0
- package/dist/tools/setupMonitoring.js +250 -0
- package/dist/tools/setupMonitoring.js.map +1 -0
- package/dist/tools/setupRealtime.d.ts +3 -0
- package/dist/tools/setupRealtime.d.ts.map +1 -0
- package/dist/tools/setupRealtime.js +311 -0
- package/dist/tools/setupRealtime.js.map +1 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -20,9 +20,20 @@ import { register as registerSubmitToPlayStore } from "./tools/submitToPlayStore
|
|
|
20
20
|
import { register as registerGenerateScreenshots } from "./tools/generateScreenshots.js";
|
|
21
21
|
import { register as registerAnalyzeBundle } from "./tools/analyzeBundle.js";
|
|
22
22
|
import { register as registerConfigureOTA } from "./tools/configureOTA.js";
|
|
23
|
+
import { register as registerRunTests } from "./tools/runTests.js";
|
|
24
|
+
import { register as registerSetupCI } from "./tools/setupCI.js";
|
|
25
|
+
import { register as registerGenerateTestFile } from "./tools/generateTestFile.js";
|
|
26
|
+
import { register as registerSetupI18n } from "./tools/setupI18n.js";
|
|
27
|
+
import { register as registerAddMap } from "./tools/addMap.js";
|
|
28
|
+
import { register as registerGenerateForm } from "./tools/generateForm.js";
|
|
29
|
+
import { register as registerSetupRealtime } from "./tools/setupRealtime.js";
|
|
30
|
+
import { register as registerSecurityAudit } from "./tools/securityAudit.js";
|
|
31
|
+
import { register as registerProfilePerformance } from "./tools/profilePerformance.js";
|
|
32
|
+
import { register as registerCheckOfflineReady } from "./tools/checkOfflineReady.js";
|
|
33
|
+
import { register as registerSetupMonitoring } from "./tools/setupMonitoring.js";
|
|
23
34
|
const server = new McpServer({
|
|
24
35
|
name: "mobile-mcp",
|
|
25
|
-
version: "0.
|
|
36
|
+
version: "0.10.0",
|
|
26
37
|
});
|
|
27
38
|
registerCheckDevEnvironment(server);
|
|
28
39
|
registerScaffoldProject(server);
|
|
@@ -43,6 +54,17 @@ registerSubmitToPlayStore(server);
|
|
|
43
54
|
registerGenerateScreenshots(server);
|
|
44
55
|
registerAnalyzeBundle(server);
|
|
45
56
|
registerConfigureOTA(server);
|
|
57
|
+
registerRunTests(server);
|
|
58
|
+
registerSetupCI(server);
|
|
59
|
+
registerGenerateTestFile(server);
|
|
60
|
+
registerSetupI18n(server);
|
|
61
|
+
registerAddMap(server);
|
|
62
|
+
registerGenerateForm(server);
|
|
63
|
+
registerSetupRealtime(server);
|
|
64
|
+
registerSecurityAudit(server);
|
|
65
|
+
registerProfilePerformance(server);
|
|
66
|
+
registerCheckOfflineReady(server);
|
|
67
|
+
registerSetupMonitoring(server);
|
|
46
68
|
async function main() {
|
|
47
69
|
const transport = new StdioServerTransport();
|
|
48
70
|
await server.connect(transport);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,QAAQ,IAAI,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,QAAQ,IAAI,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,QAAQ,IAAI,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,QAAQ,IAAI,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,QAAQ,IAAI,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,QAAQ,IAAI,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,QAAQ,IAAI,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,QAAQ,IAAI,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,QAAQ,IAAI,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,QAAQ,IAAI,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,QAAQ,IAAI,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,QAAQ,IAAI,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,QAAQ,IAAI,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,QAAQ,IAAI,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAC7F,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,QAAQ,IAAI,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,QAAQ,IAAI,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AACzF,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,QAAQ,IAAI,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,QAAQ,IAAI,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,QAAQ,IAAI,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,QAAQ,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,QAAQ;CAClB,CAAC,CAAC;AAEH,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACpC,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAClC,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAClC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,mBAAmB,CAAC,MAAM,CAAC,CAAC;AAC5B,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,4BAA4B,CAAC,MAAM,CAAC,CAAC;AACrC,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACnC,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACpC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,6BAA6B,CAAC,MAAM,CAAC,CAAC;AACtC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAClC,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACpC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzB,eAAe,CAAC,MAAM,CAAC,CAAC;AACxB,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,cAAc,CAAC,MAAM,CAAC,CAAC;AACvB,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAC9B,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACnC,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAClC,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAEhC,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addMap.d.ts","sourceRoot":"","sources":["../../src/tools/addMap.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0IzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkHhD"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { writeFileSync, mkdirSync, existsSync, readFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { textResponse, errorResponse } from "../types.js";
|
|
5
|
+
const inputSchema = {
|
|
6
|
+
project_path: z
|
|
7
|
+
.string()
|
|
8
|
+
.optional()
|
|
9
|
+
.describe("Absolute path to the project root. Defaults to cwd."),
|
|
10
|
+
framework: z
|
|
11
|
+
.enum(["expo", "flutter"])
|
|
12
|
+
.optional()
|
|
13
|
+
.default("expo")
|
|
14
|
+
.describe("Project framework (default: expo)."),
|
|
15
|
+
provider: z
|
|
16
|
+
.enum(["google", "apple"])
|
|
17
|
+
.optional()
|
|
18
|
+
.default("google")
|
|
19
|
+
.describe("Map provider (default: google). Apple Maps only available on iOS."),
|
|
20
|
+
screen_name: z
|
|
21
|
+
.string()
|
|
22
|
+
.optional()
|
|
23
|
+
.default("MapScreen")
|
|
24
|
+
.describe("Name for the generated map screen component (default: MapScreen)."),
|
|
25
|
+
};
|
|
26
|
+
function generateExpoMapScreen(name) {
|
|
27
|
+
return `import { useState } from "react";
|
|
28
|
+
import { StyleSheet, View } from "react-native";
|
|
29
|
+
import MapView, { Marker, type Region } from "react-native-maps";
|
|
30
|
+
|
|
31
|
+
const INITIAL_REGION: Region = {
|
|
32
|
+
latitude: 37.7749,
|
|
33
|
+
longitude: -122.4194,
|
|
34
|
+
latitudeDelta: 0.0922,
|
|
35
|
+
longitudeDelta: 0.0421,
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
interface MapMarker {
|
|
39
|
+
id: string;
|
|
40
|
+
coordinate: { latitude: number; longitude: number };
|
|
41
|
+
title: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export default function ${name}() {
|
|
46
|
+
const [markers] = useState<MapMarker[]>([
|
|
47
|
+
{
|
|
48
|
+
id: "1",
|
|
49
|
+
coordinate: { latitude: 37.7749, longitude: -122.4194 },
|
|
50
|
+
title: "San Francisco",
|
|
51
|
+
description: "Starting point",
|
|
52
|
+
},
|
|
53
|
+
]);
|
|
54
|
+
|
|
55
|
+
return (
|
|
56
|
+
<View style={styles.container}>
|
|
57
|
+
<MapView
|
|
58
|
+
style={styles.map}
|
|
59
|
+
initialRegion={INITIAL_REGION}
|
|
60
|
+
showsUserLocation
|
|
61
|
+
showsMyLocationButton
|
|
62
|
+
>
|
|
63
|
+
{markers.map((marker) => (
|
|
64
|
+
<Marker
|
|
65
|
+
key={marker.id}
|
|
66
|
+
coordinate={marker.coordinate}
|
|
67
|
+
title={marker.title}
|
|
68
|
+
description={marker.description}
|
|
69
|
+
/>
|
|
70
|
+
))}
|
|
71
|
+
</MapView>
|
|
72
|
+
</View>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const styles = StyleSheet.create({
|
|
77
|
+
container: {
|
|
78
|
+
flex: 1,
|
|
79
|
+
},
|
|
80
|
+
map: {
|
|
81
|
+
width: "100%",
|
|
82
|
+
height: "100%",
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
`;
|
|
86
|
+
}
|
|
87
|
+
function generateFlutterMapScreen(name) {
|
|
88
|
+
const className = name.charAt(0).toUpperCase() + name.slice(1);
|
|
89
|
+
return `import 'package:flutter/material.dart';
|
|
90
|
+
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
|
91
|
+
|
|
92
|
+
class ${className} extends StatefulWidget {
|
|
93
|
+
const ${className}({super.key});
|
|
94
|
+
|
|
95
|
+
@override
|
|
96
|
+
State<${className}> createState() => _${className}State();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
class _${className}State extends State<${className}> {
|
|
100
|
+
static const _initialPosition = CameraPosition(
|
|
101
|
+
target: LatLng(37.7749, -122.4194),
|
|
102
|
+
zoom: 14,
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
final Set<Marker> _markers = {
|
|
106
|
+
const Marker(
|
|
107
|
+
markerId: MarkerId('san_francisco'),
|
|
108
|
+
position: LatLng(37.7749, -122.4194),
|
|
109
|
+
infoWindow: InfoWindow(title: 'San Francisco'),
|
|
110
|
+
),
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
GoogleMapController? _controller;
|
|
114
|
+
|
|
115
|
+
@override
|
|
116
|
+
Widget build(BuildContext context) {
|
|
117
|
+
return Scaffold(
|
|
118
|
+
appBar: AppBar(title: const Text('Map')),
|
|
119
|
+
body: GoogleMap(
|
|
120
|
+
initialCameraPosition: _initialPosition,
|
|
121
|
+
markers: _markers,
|
|
122
|
+
myLocationEnabled: true,
|
|
123
|
+
myLocationButtonEnabled: true,
|
|
124
|
+
onMapCreated: (controller) => _controller = controller,
|
|
125
|
+
),
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@override
|
|
130
|
+
void dispose() {
|
|
131
|
+
_controller?.dispose();
|
|
132
|
+
super.dispose();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
`;
|
|
136
|
+
}
|
|
137
|
+
export function register(server) {
|
|
138
|
+
server.tool("mobile_addMap", "Add a map view with provider config, location permissions, and marker support. Generates a starter map screen component.", inputSchema, async (args) => {
|
|
139
|
+
try {
|
|
140
|
+
const root = args.project_path || process.cwd();
|
|
141
|
+
const filesCreated = [];
|
|
142
|
+
const configChanges = [];
|
|
143
|
+
if (args.framework === "flutter") {
|
|
144
|
+
const screenDir = join(root, "lib", "screens");
|
|
145
|
+
mkdirSync(screenDir, { recursive: true });
|
|
146
|
+
const fileName = args.screen_name
|
|
147
|
+
.replace(/([A-Z])/g, "_$1")
|
|
148
|
+
.toLowerCase()
|
|
149
|
+
.replace(/^_/, "");
|
|
150
|
+
const screenPath = join(screenDir, `${fileName}.dart`);
|
|
151
|
+
if (existsSync(screenPath)) {
|
|
152
|
+
return errorResponse(new Error(`File already exists: ${screenPath}`));
|
|
153
|
+
}
|
|
154
|
+
writeFileSync(screenPath, generateFlutterMapScreen(args.screen_name), "utf-8");
|
|
155
|
+
filesCreated.push(screenPath);
|
|
156
|
+
return textResponse(JSON.stringify({
|
|
157
|
+
success: true,
|
|
158
|
+
framework: "flutter",
|
|
159
|
+
provider: args.provider,
|
|
160
|
+
files_created: filesCreated,
|
|
161
|
+
next_steps: [
|
|
162
|
+
"Add google_maps_flutter to pubspec.yaml: flutter pub add google_maps_flutter",
|
|
163
|
+
"Add your API key to android/app/src/main/AndroidManifest.xml:",
|
|
164
|
+
' <meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR_KEY"/>',
|
|
165
|
+
"Add your API key to ios/Runner/AppDelegate.swift:",
|
|
166
|
+
' GMSServices.provideAPIKey("YOUR_KEY")',
|
|
167
|
+
"Add location permissions to AndroidManifest.xml and Info.plist",
|
|
168
|
+
"Get a Google Maps API key from console.cloud.google.com",
|
|
169
|
+
],
|
|
170
|
+
}, null, 2));
|
|
171
|
+
}
|
|
172
|
+
const appJsonPath = join(root, "app.json");
|
|
173
|
+
if (existsSync(appJsonPath)) {
|
|
174
|
+
const appJson = JSON.parse(readFileSync(appJsonPath, "utf-8"));
|
|
175
|
+
const expo = appJson.expo || {};
|
|
176
|
+
if (!expo.plugins)
|
|
177
|
+
expo.plugins = [];
|
|
178
|
+
const hasMapPlugin = expo.plugins.some((p) => (typeof p === "string" && p === "react-native-maps") ||
|
|
179
|
+
(Array.isArray(p) && p[0] === "react-native-maps"));
|
|
180
|
+
if (!hasMapPlugin) {
|
|
181
|
+
const mapConfig = [
|
|
182
|
+
"react-native-maps",
|
|
183
|
+
{
|
|
184
|
+
googleMapsApiKey: "GOOGLE_MAPS_API_KEY_HERE",
|
|
185
|
+
},
|
|
186
|
+
];
|
|
187
|
+
expo.plugins.push(mapConfig);
|
|
188
|
+
appJson.expo = expo;
|
|
189
|
+
writeFileSync(appJsonPath, JSON.stringify(appJson, null, 2) + "\n", "utf-8");
|
|
190
|
+
configChanges.push("Added react-native-maps plugin to app.json");
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const screenDir = join(root, "app");
|
|
194
|
+
if (!existsSync(screenDir)) {
|
|
195
|
+
mkdirSync(screenDir, { recursive: true });
|
|
196
|
+
}
|
|
197
|
+
const screenPath = join(screenDir, `${args.screen_name.charAt(0).toLowerCase() + args.screen_name.slice(1)}.tsx`);
|
|
198
|
+
if (!existsSync(screenPath)) {
|
|
199
|
+
writeFileSync(screenPath, generateExpoMapScreen(args.screen_name), "utf-8");
|
|
200
|
+
filesCreated.push(screenPath);
|
|
201
|
+
}
|
|
202
|
+
return textResponse(JSON.stringify({
|
|
203
|
+
success: true,
|
|
204
|
+
framework: "expo",
|
|
205
|
+
provider: args.provider,
|
|
206
|
+
files_created: filesCreated,
|
|
207
|
+
config_changes: configChanges,
|
|
208
|
+
next_steps: [
|
|
209
|
+
"Install react-native-maps: npx expo install react-native-maps",
|
|
210
|
+
"Install expo-location for user location: npx expo install expo-location",
|
|
211
|
+
"Replace GOOGLE_MAPS_API_KEY_HERE in app.json with your actual key",
|
|
212
|
+
"Get a Google Maps API key from console.cloud.google.com",
|
|
213
|
+
"Add location permission with mobile_addPermission",
|
|
214
|
+
"This requires a dev build (not Expo Go) for native map rendering",
|
|
215
|
+
],
|
|
216
|
+
}, null, 2));
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
return errorResponse(err);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=addMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addMap.js","sourceRoot":"","sources":["../../src/tools/addMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkOfflineReady.d.ts","sourceRoot":"","sources":["../../src/tools/checkOfflineReady.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2KzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6ChD"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { textResponse, errorResponse } from "../types.js";
|
|
5
|
+
const inputSchema = {
|
|
6
|
+
project_path: z
|
|
7
|
+
.string()
|
|
8
|
+
.optional()
|
|
9
|
+
.describe("Absolute path to the project root. Defaults to cwd."),
|
|
10
|
+
framework: z
|
|
11
|
+
.enum(["expo", "flutter"])
|
|
12
|
+
.optional()
|
|
13
|
+
.default("expo")
|
|
14
|
+
.describe("Framework to check (default: expo)."),
|
|
15
|
+
};
|
|
16
|
+
function readFileSafe(filePath) {
|
|
17
|
+
try {
|
|
18
|
+
if (!existsSync(filePath))
|
|
19
|
+
return null;
|
|
20
|
+
return readFileSync(filePath, "utf-8");
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function checkExpoOffline(root) {
|
|
27
|
+
const checks = [];
|
|
28
|
+
const pkgStr = readFileSafe(join(root, "package.json"));
|
|
29
|
+
const deps = pkgStr
|
|
30
|
+
? (() => {
|
|
31
|
+
const pkg = JSON.parse(pkgStr);
|
|
32
|
+
return { ...pkg.dependencies, ...pkg.devDependencies };
|
|
33
|
+
})()
|
|
34
|
+
: {};
|
|
35
|
+
const localDbLibs = ["@nozbe/watermelondb", "expo-sqlite", "realm", "powersync", "react-native-mmkv"];
|
|
36
|
+
const foundDb = localDbLibs.filter((lib) => deps[lib]);
|
|
37
|
+
if (foundDb.length > 0) {
|
|
38
|
+
checks.push({
|
|
39
|
+
category: "Local Database",
|
|
40
|
+
status: "pass",
|
|
41
|
+
message: `Local database found: ${foundDb.join(", ")}.`,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
checks.push({
|
|
46
|
+
category: "Local Database",
|
|
47
|
+
status: "fail",
|
|
48
|
+
message: "No local database library detected. Offline data persistence requires a local DB.",
|
|
49
|
+
fix: "Install @nozbe/watermelondb, expo-sqlite, or react-native-mmkv for local data storage.",
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const networkLibs = ["@react-native-community/netinfo", "expo-network"];
|
|
53
|
+
const foundNet = networkLibs.filter((lib) => deps[lib]);
|
|
54
|
+
if (foundNet.length > 0) {
|
|
55
|
+
checks.push({
|
|
56
|
+
category: "Network Status",
|
|
57
|
+
status: "pass",
|
|
58
|
+
message: `Network status library found: ${foundNet.join(", ")}.`,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
checks.push({
|
|
63
|
+
category: "Network Status",
|
|
64
|
+
status: "fail",
|
|
65
|
+
message: "No network status listener detected. The app cannot detect offline/online transitions.",
|
|
66
|
+
fix: "Install @react-native-community/netinfo to detect connectivity changes and adapt the UI.",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (deps["@tanstack/react-query"] || deps["react-query"]) {
|
|
70
|
+
checks.push({
|
|
71
|
+
category: "Query Caching",
|
|
72
|
+
status: "pass",
|
|
73
|
+
message: "React Query detected. Use its offline persistence plugin for cached query survival across restarts.",
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else if (deps["swr"]) {
|
|
77
|
+
checks.push({
|
|
78
|
+
category: "Query Caching",
|
|
79
|
+
status: "pass",
|
|
80
|
+
message: "SWR detected. Configure a persistent cache provider for offline reads.",
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
checks.push({
|
|
85
|
+
category: "Query Caching",
|
|
86
|
+
status: "warn",
|
|
87
|
+
message: "No query caching library found. API responses are lost when the app restarts.",
|
|
88
|
+
fix: "Add @tanstack/react-query with persistQueryClient for automatic offline caching.",
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
if (deps["@tanstack/react-query"]) {
|
|
92
|
+
checks.push({
|
|
93
|
+
category: "Mutation Queue",
|
|
94
|
+
status: "warn",
|
|
95
|
+
message: "Verify that useMutation calls include onMutate for optimistic updates and a retry/queue for offline writes.",
|
|
96
|
+
fix: "Use React Query's onlineMutationManager or build a custom queue with MMKV persistence.",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
checks.push({
|
|
101
|
+
category: "Mutation Queue",
|
|
102
|
+
status: "warn",
|
|
103
|
+
message: "No mutation queue pattern detected. Writes made offline may be lost.",
|
|
104
|
+
fix: "Implement an offline mutation queue that persists pending writes and replays them when connectivity returns.",
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return checks;
|
|
108
|
+
}
|
|
109
|
+
function checkFlutterOffline(root) {
|
|
110
|
+
const checks = [];
|
|
111
|
+
const pubspec = readFileSafe(join(root, "pubspec.yaml")) ?? "";
|
|
112
|
+
const localDbLibs = ["drift", "isar", "sqflite", "hive", "objectbox"];
|
|
113
|
+
const foundDb = localDbLibs.filter((lib) => pubspec.includes(lib));
|
|
114
|
+
if (foundDb.length > 0) {
|
|
115
|
+
checks.push({
|
|
116
|
+
category: "Local Database",
|
|
117
|
+
status: "pass",
|
|
118
|
+
message: `Local database found: ${foundDb.join(", ")}.`,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
checks.push({
|
|
123
|
+
category: "Local Database",
|
|
124
|
+
status: "fail",
|
|
125
|
+
message: "No local database package detected in pubspec.yaml.",
|
|
126
|
+
fix: "Add drift (recommended) or isar for typed, reactive local persistence.",
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (pubspec.includes("connectivity_plus")) {
|
|
130
|
+
checks.push({
|
|
131
|
+
category: "Network Status",
|
|
132
|
+
status: "pass",
|
|
133
|
+
message: "connectivity_plus found for network state monitoring.",
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
checks.push({
|
|
138
|
+
category: "Network Status",
|
|
139
|
+
status: "fail",
|
|
140
|
+
message: "No connectivity monitoring package found.",
|
|
141
|
+
fix: "Add connectivity_plus to detect online/offline transitions.",
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
if (pubspec.includes("dio") || pubspec.includes("http")) {
|
|
145
|
+
checks.push({
|
|
146
|
+
category: "HTTP Client",
|
|
147
|
+
status: "pass",
|
|
148
|
+
message: "HTTP client package detected. Ensure requests handle SocketException for offline scenarios.",
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
checks.push({
|
|
152
|
+
category: "Mutation Queue",
|
|
153
|
+
status: "warn",
|
|
154
|
+
message: "Verify you have a pending-operations queue that persists writes and replays on reconnect.",
|
|
155
|
+
fix: "Store failed mutations in the local DB with a sync status column and replay via a background isolate.",
|
|
156
|
+
});
|
|
157
|
+
return checks;
|
|
158
|
+
}
|
|
159
|
+
export function register(server) {
|
|
160
|
+
server.tool("mobile_checkOfflineReady", "Validate a mobile project's offline-first readiness: local database, network status listener, query caching, and mutation queue.", inputSchema, async (args) => {
|
|
161
|
+
try {
|
|
162
|
+
const root = args.project_path || process.cwd();
|
|
163
|
+
if (!existsSync(root)) {
|
|
164
|
+
return errorResponse(new Error(`Project path does not exist: ${root}`));
|
|
165
|
+
}
|
|
166
|
+
const checks = args.framework === "flutter"
|
|
167
|
+
? checkFlutterOffline(root)
|
|
168
|
+
: checkExpoOffline(root);
|
|
169
|
+
const passCount = checks.filter((c) => c.status === "pass").length;
|
|
170
|
+
const warnCount = checks.filter((c) => c.status === "warn").length;
|
|
171
|
+
const failCount = checks.filter((c) => c.status === "fail").length;
|
|
172
|
+
const readiness = failCount === 0 && warnCount === 0
|
|
173
|
+
? "ready"
|
|
174
|
+
: failCount === 0
|
|
175
|
+
? "partial"
|
|
176
|
+
: "not_ready";
|
|
177
|
+
return textResponse(JSON.stringify({
|
|
178
|
+
success: true,
|
|
179
|
+
framework: args.framework,
|
|
180
|
+
readiness,
|
|
181
|
+
summary: { pass: passCount, warn: warnCount, fail: failCount },
|
|
182
|
+
checks,
|
|
183
|
+
}, null, 2));
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
return errorResponse(err);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=checkOfflineReady.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkOfflineReady.js","sourceRoot":"","sources":["../../src/tools/checkOfflineReady.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateForm.d.ts","sourceRoot":"","sources":["../../src/tools/generateForm.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA6RzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwFhD"}
|