connectiq-mcp-server 1.1.7 → 1.2.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/build/handlers/handlerUtils.d.ts +15 -1
- package/build/handlers/handlerUtils.d.ts.map +1 -1
- package/build/handlers/handlerUtils.js +24 -1
- package/build/handlers/handlerUtils.js.map +1 -1
- package/build/handlers/resourceHandlers.d.ts.map +1 -1
- package/build/handlers/resourceHandlers.js +69 -22
- package/build/handlers/resourceHandlers.js.map +1 -1
- package/build/handlers/toolHandlers.d.ts.map +1 -1
- package/build/handlers/toolHandlers.js +253 -7
- package/build/handlers/toolHandlers.js.map +1 -1
- package/build/index.js +10 -4
- package/build/index.js.map +1 -1
- package/build/parsers/HtmlParser.d.ts +31 -3
- package/build/parsers/HtmlParser.d.ts.map +1 -1
- package/build/parsers/HtmlParser.js +238 -13
- package/build/parsers/HtmlParser.js.map +1 -1
- package/build/parsers/HtmlParserSchemas.d.ts +140 -54
- package/build/parsers/HtmlParserSchemas.d.ts.map +1 -1
- package/build/parsers/HtmlParserSchemas.js +6 -0
- package/build/parsers/HtmlParserSchemas.js.map +1 -1
- package/build/schemas/SchemaFactory.d.ts +2 -2
- package/build/schemas/SchemaFactory.d.ts.map +1 -1
- package/build/schemas/SchemaFactory.js +1 -0
- package/build/schemas/SchemaFactory.js.map +1 -1
- package/build/services/ApiDocService.d.ts +4 -0
- package/build/services/ApiDocService.d.ts.map +1 -1
- package/build/services/ApiDocService.js +69 -19
- package/build/services/ApiDocService.js.map +1 -1
- package/build/services/DevGuideService.d.ts +75 -0
- package/build/services/DevGuideService.d.ts.map +1 -0
- package/build/services/DevGuideService.js +274 -0
- package/build/services/DevGuideService.js.map +1 -0
- package/build/services/SampleCodeSearchService.d.ts +2 -0
- package/build/services/SampleCodeSearchService.d.ts.map +1 -1
- package/build/services/SampleCodeSearchService.js +63 -25
- package/build/services/SampleCodeSearchService.js.map +1 -1
- package/build/types/index.d.ts +48 -1
- package/build/types/index.d.ts.map +1 -1
- package/build/utils/IndexCache.d.ts +3 -1
- package/build/utils/IndexCache.d.ts.map +1 -1
- package/build/utils/IndexCache.js +3 -2
- package/build/utils/IndexCache.js.map +1 -1
- package/build/utils/logging.d.ts +3 -2
- package/build/utils/logging.d.ts.map +1 -1
- package/build/utils/logging.js +4 -1
- package/build/utils/logging.js.map +1 -1
- package/data/guides/app-review-guidelines/app-review-guidelines.md +235 -0
- package/data/guides/connect-iq-basics/app-types.md +606 -0
- package/data/guides/connect-iq-basics/getting-started.md +85 -0
- package/data/guides/connect-iq-basics/your-first-app.md +104 -0
- package/data/guides/connect-iq-faq/how-do-i-create-a-connect-iq-background-service.md +101 -0
- package/data/guides/connect-iq-faq/how-do-i-create-an-audio-content-provider.md +85 -0
- package/data/guides/connect-iq-faq/how-do-i-get-my-watch-face-to-update-every-second.md +33 -0
- package/data/guides/connect-iq-faq/how-do-i-make-a-watch-face-for-amoled-products.md +74 -0
- package/data/guides/connect-iq-faq/how-do-i-optimize-bitmaps.md +313 -0
- package/data/guides/connect-iq-faq/how-do-i-override-the-goal-animations.md +13 -0
- package/data/guides/connect-iq-faq/how-do-i-use-a-mapview.md +130 -0
- package/data/guides/connect-iq-faq/how-do-i-use-custom-fonts.md +203 -0
- package/data/guides/connect-iq-faq/how-do-i-use-rest-services.md +127 -0
- package/data/guides/connect-iq-faq/how-do-i-use-the-connect-iq-mobile-sdk.md +29 -0
- package/data/guides/core-topics/activity-control.md +25 -0
- package/data/guides/core-topics/activity-prompts.md +39 -0
- package/data/guides/core-topics/activity-recording.md +245 -0
- package/data/guides/core-topics/ant-and-ant-plus.md +177 -0
- package/data/guides/core-topics/application-and-system-modules.md +239 -0
- package/data/guides/core-topics/authenticated-web-services.md +69 -0
- package/data/guides/core-topics/backgrounding.md +138 -0
- package/data/guides/core-topics/beta-apps.md +7 -0
- package/data/guides/core-topics/bluetooth-low-energy.md +142 -0
- package/data/guides/core-topics/build-configuration.md +149 -0
- package/data/guides/core-topics/communicating-with-mobile-apps.md +45 -0
- package/data/guides/core-topics/complications.md +387 -0
- package/data/guides/core-topics/debugging.md +193 -0
- package/data/guides/core-topics/downloading-content.md +116 -0
- package/data/guides/core-topics/editing-watch-faces-on-device.md +178 -0
- package/data/guides/core-topics/exception-reporting-tool.md +88 -0
- package/data/guides/core-topics/getting-the-users-attention.md +248 -0
- package/data/guides/core-topics/glances.md +70 -0
- package/data/guides/core-topics/graphics.md +343 -0
- package/data/guides/core-topics/https.md +134 -0
- package/data/guides/core-topics/input-handling.md +321 -0
- package/data/guides/core-topics/intents.md +41 -0
- package/data/guides/core-topics/layouts.md +686 -0
- package/data/guides/core-topics/manifest-and-permissions.md +406 -0
- package/data/guides/core-topics/mobile-sdk-for-android.md +321 -0
- package/data/guides/core-topics/mobile-sdk-for-ios.md +237 -0
- package/data/guides/core-topics/monkey-style.md +98 -0
- package/data/guides/core-topics/native-controls.md +786 -0
- package/data/guides/core-topics/notifications.md +73 -0
- package/data/guides/core-topics/pairing-wireless-devices.md +91 -0
- package/data/guides/core-topics/persisting-data.md +155 -0
- package/data/guides/core-topics/positioning.md +105 -0
- package/data/guides/core-topics/profiling.md +65 -0
- package/data/guides/core-topics/properties-and-app-settings.md +385 -0
- package/data/guides/core-topics/publishing-to-the-store.md +70 -0
- package/data/guides/core-topics/quantifying-the-user.md +355 -0
- package/data/guides/core-topics/requesting-reviews.md +54 -0
- package/data/guides/core-topics/resources.md +1028 -0
- package/data/guides/core-topics/security.md +41 -0
- package/data/guides/core-topics/sensors.md +467 -0
- package/data/guides/core-topics/shareable-libraries.md +220 -0
- package/data/guides/core-topics/trial-apps.md +136 -0
- package/data/guides/core-topics/unit-testing.md +118 -0
- package/data/guides/core-topics/user-interface.md +80 -0
- package/data/guides/index.json +723 -0
- package/data/guides/monetization/account-management.md +13 -0
- package/data/guides/monetization/app-sales.md +86 -0
- package/data/guides/monetization/merchant-onboarding.md +65 -0
- package/data/guides/monetization/monetization.md +11 -0
- package/data/guides/monetization/price-points.md +6386 -0
- package/data/guides/monkey-c/annotations.md +48 -0
- package/data/guides/monkey-c/coding-conventions.md +68 -0
- package/data/guides/monkey-c/compiler-options.md +219 -0
- package/data/guides/monkey-c/containers.md +86 -0
- package/data/guides/monkey-c/exceptions-and-errors.md +126 -0
- package/data/guides/monkey-c/functions.md +572 -0
- package/data/guides/monkey-c/monkey-c.md +115 -0
- package/data/guides/monkey-c/monkey-types.md +1070 -0
- package/data/guides/monkey-c/objects-and-memory.md +422 -0
- package/data/guides/personality-library/action-views.md +139 -0
- package/data/guides/personality-library/colors.md +228 -0
- package/data/guides/personality-library/confirmations.md +143 -0
- package/data/guides/personality-library/iconography.md +92 -0
- package/data/guides/personality-library/input-hints.md +66 -0
- package/data/guides/personality-library/page-loops.md +23 -0
- package/data/guides/personality-library/personality-library.md +83 -0
- package/data/guides/personality-library/progress-bars.md +47 -0
- package/data/guides/personality-library/prompts.md +94 -0
- package/data/guides/personality-library/toasts.md +25 -0
- package/data/guides/personality-library/typography.md +47 -0
- package/data/guides/reference-guides/jungle-reference.md +390 -0
- package/data/guides/reference-guides/monkey-c-command-line-setup.md +151 -0
- package/data/guides/reference-guides/monkey-c-reference.md +1697 -0
- package/data/guides/reference-guides/monkey-graph-reference.md +53 -0
- package/data/guides/reference-guides/monkey-motion-reference.md +414 -0
- package/data/guides/reference-guides/visual-studio-code-extension.md +260 -0
- package/data/guides/ux-guide/confirmations.md +13 -0
- package/data/guides/ux-guide/data-fields.md +59 -0
- package/data/guides/ux-guide/design-principles.md +11 -0
- package/data/guides/ux-guide/designing-workflows-and-interactions.md +200 -0
- package/data/guides/ux-guide/developing-the-concepts.md +62 -0
- package/data/guides/ux-guide/entry-points.md +46 -0
- package/data/guides/ux-guide/incorporating-the-visual-design-and-product-personalities.md +211 -0
- package/data/guides/ux-guide/localization.md +90 -0
- package/data/guides/ux-guide/map-views.md +11 -0
- package/data/guides/ux-guide/menus.md +35 -0
- package/data/guides/ux-guide/progress-bars.md +19 -0
- package/data/guides/ux-guide/understanding-what-you-are-building.md +39 -0
- package/data/guides/ux-guide/views.md +42 -0
- package/data/guides/ux-guide/watch-faces.md +59 -0
- package/package.json +10 -3
- package/.claude/settings.json +0 -11
- package/.claude/skills/commit/SKILL.md +0 -19
- package/.claude/skills/create-pr/SKILL.md +0 -44
- package/.github/workflows/publish.yml +0 -52
- package/.mcp.json +0 -36
- package/.prettierignore +0 -3
- package/.prettierrc +0 -8
- package/.serena/memories/code_style.md +0 -64
- package/.serena/memories/project_overview.md +0 -71
- package/.serena/memories/suggested_commands.md +0 -59
- package/.serena/memories/task_completion.md +0 -56
- package/.serena/project.yml +0 -89
- package/CHANGELOG.md +0 -99
- package/CLAUDE.md +0 -100
- package/eslint.config.js +0 -44
- package/mcp/github/.env.example +0 -1
- package/mcp/github/command.sh +0 -20
- package/server.json +0 -34
- package/src/config/ConfigManager.ts +0 -425
- package/src/handlers/handlerUtils.ts +0 -217
- package/src/handlers/promptHandlers.ts +0 -453
- package/src/handlers/resourceHandlers.ts +0 -390
- package/src/handlers/toolHandlers.ts +0 -1460
- package/src/index.ts +0 -158
- package/src/parsers/HtmlParser.ts +0 -1223
- package/src/parsers/HtmlParserSchemas.ts +0 -138
- package/src/parsers/XmlParser.ts +0 -445
- package/src/schemas/DataSampler.ts +0 -276
- package/src/schemas/SchemaFactory.ts +0 -423
- package/src/schemas/SchemaInferenceEngine.ts +0 -365
- package/src/schemas/index.ts +0 -36
- package/src/services/ApiDocService.ts +0 -739
- package/src/services/DeviceInfoService.ts +0 -564
- package/src/services/ProjectInfoService.ts +0 -62
- package/src/services/SampleCodeSearchService.ts +0 -534
- package/src/services/SampleService.ts +0 -659
- package/src/types/index.ts +0 -672
- package/src/utils/AsyncFileCache.ts +0 -118
- package/src/utils/DeviceFilter.ts +0 -345
- package/src/utils/IndexCache.ts +0 -305
- package/src/utils/MarkdownConverter.ts +0 -318
- package/src/utils/ParsingQualityMetrics.ts +0 -475
- package/src/utils/index.ts +0 -21
- package/src/utils/logging.ts +0 -92
- package/src/utils/versionUtils.ts +0 -34
- package/test/fixtures/mockConfig.ts +0 -780
- package/test/unit/config/ConfigManager.test.ts +0 -709
- package/test/unit/handlers/resourceHandlers.test.ts +0 -333
- package/test/unit/handlers/toolHandlers.test.ts +0 -706
- package/test/unit/parsers/HtmlParser.test.ts +0 -1196
- package/test/unit/parsers/XmlParser.test.ts +0 -368
- package/test/unit/schemas/SchemaFactory.test.ts +0 -331
- package/test/unit/schemas/SchemaInferenceEngine.test.ts +0 -315
- package/test/unit/services/ApiDocService.test.ts +0 -410
- package/test/unit/services/DeviceInfoService.test.ts +0 -839
- package/test/unit/services/ProjectInfoService.test.ts +0 -68
- package/test/unit/services/SampleCodeSearchService.test.ts +0 -505
- package/test/unit/services/SampleService.test.ts +0 -369
- package/test/unit/utils/DeviceFilter.test.ts +0 -599
- package/test/unit/utils/IndexCache.test.ts +0 -425
- package/test/unit/utils/MarkdownConverter.test.ts +0 -327
- package/test/unit/utils/ParsingQualityMetrics.test.ts +0 -858
- package/test/unit/utils/versionUtils.test.ts +0 -57
- package/tsconfig.json +0 -20
- package/tsconfig.test.json +0 -8
- package/vitest.config.ts +0 -20
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - Generic prefix-based filtering for completions
|
|
8
8
|
*
|
|
9
9
|
* Key design decisions:
|
|
10
|
-
* -
|
|
10
|
+
* - Device/appType/screenShape completables use pre-loaded SchemaFactory enums; module/project/file completables use async service calls
|
|
11
11
|
* - Error handling follows MCP 2025-11-25 spec (isError flag enables LLM self-correction)
|
|
12
12
|
* - Zod validation errors formatted with field paths for easier debugging
|
|
13
13
|
*/
|
|
@@ -45,6 +45,20 @@ export declare function validateToolOutput<T>(data: T, schema: ZodTypeAny, toolN
|
|
|
45
45
|
* @returns Filtered options (max 100)
|
|
46
46
|
*/
|
|
47
47
|
export declare function filterByPrefix(options: readonly string[], value: string | undefined): string[];
|
|
48
|
+
/**
|
|
49
|
+
* Validate a path component to prevent path traversal attacks.
|
|
50
|
+
* Rejects '.', '..', absolute paths, Windows drive letters, and null bytes.
|
|
51
|
+
*/
|
|
52
|
+
export declare function isValidPathComponent(component: string): boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Format guide content with a standard header including title, category, and source URL
|
|
55
|
+
*/
|
|
56
|
+
export declare function formatGuideContent(guide: {
|
|
57
|
+
title: string;
|
|
58
|
+
category: string;
|
|
59
|
+
url: string;
|
|
60
|
+
content: string;
|
|
61
|
+
}): string;
|
|
48
62
|
/**
|
|
49
63
|
* Creates a completable schema for device ID arguments with dynamic autocompletion.
|
|
50
64
|
* Uses pre-loaded SchemaFactory enum for validation + prefix filtering for completion.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlerUtils.d.ts","sourceRoot":"","sources":["../../src/handlers/handlerUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,CAAC,EAAE,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,CAAC,CAaH;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,EAAE,CAKV;AAoCD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,IAAI,GACb,UAAU,CACX,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CACpE,CAAC;AAaF;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,IAAI,GACb,UAAU,CACX,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CACpE,CAAC;AAaF;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,IAAI,GACb,UAAU,CACX,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CACpE,CAAC"}
|
|
1
|
+
{"version":3,"file":"handlerUtils.d.ts","sourceRoot":"","sources":["../../src/handlers/handlerUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAC9E,OAAO,EAAE,CAAC,EAAE,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUzD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,CAAC,CAaH;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,EAAE,CAKV;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAET;AAoCD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,IAAI,GACb,UAAU,CACX,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CACpE,CAAC;AAaF;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,IAAI,GACb,UAAU,CACX,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CACpE,CAAC;AAaF;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,GAClB,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,IAAI,GACb,UAAU,CACX,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CACpE,CAAC"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* - Generic prefix-based filtering for completions
|
|
8
8
|
*
|
|
9
9
|
* Key design decisions:
|
|
10
|
-
* -
|
|
10
|
+
* - Device/appType/screenShape completables use pre-loaded SchemaFactory enums; module/project/file completables use async service calls
|
|
11
11
|
* - Error handling follows MCP 2025-11-25 spec (isError flag enables LLM self-correction)
|
|
12
12
|
* - Zod validation errors formatted with field paths for easier debugging
|
|
13
13
|
*/
|
|
@@ -71,6 +71,29 @@ export function filterByPrefix(options, value) {
|
|
|
71
71
|
.filter((opt) => opt.toLowerCase().startsWith(lowerValue))
|
|
72
72
|
.slice(0, 100);
|
|
73
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Validate a path component to prevent path traversal attacks.
|
|
76
|
+
* Rejects '.', '..', absolute paths, Windows drive letters, and null bytes.
|
|
77
|
+
*/
|
|
78
|
+
export function isValidPathComponent(component) {
|
|
79
|
+
if (!component)
|
|
80
|
+
return false;
|
|
81
|
+
if (component === "." || component === "..")
|
|
82
|
+
return false;
|
|
83
|
+
if (component.startsWith("/") || component.startsWith("\\"))
|
|
84
|
+
return false;
|
|
85
|
+
if (/^[a-zA-Z]:/.test(component))
|
|
86
|
+
return false;
|
|
87
|
+
if (component.includes("\0"))
|
|
88
|
+
return false;
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Format guide content with a standard header including title, category, and source URL
|
|
93
|
+
*/
|
|
94
|
+
export function formatGuideContent(guide) {
|
|
95
|
+
return `# ${guide.title}\n\n**Category:** ${guide.category}\n**Source:** ${guide.url}\n\n---\n\n${guide.content}`;
|
|
96
|
+
}
|
|
74
97
|
// ============================================================================
|
|
75
98
|
// Completable Factory Functions
|
|
76
99
|
//
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlerUtils.js","sourceRoot":"","sources":["../../src/handlers/handlerUtils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handlerUtils.js","sourceRoot":"","sources":["../../src/handlers/handlerUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceHandlers.d.ts","sourceRoot":"","sources":["../../src/handlers/resourceHandlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"resourceHandlers.d.ts","sourceRoot":"","sources":["../../src/handlers/resourceHandlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAQlD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,MAAM,GACb,IAAI,CAsaN"}
|
|
@@ -10,32 +10,12 @@
|
|
|
10
10
|
* - ResourceTemplate for dynamic URI patterns with completion support
|
|
11
11
|
*/
|
|
12
12
|
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
13
|
-
import { formatErrorMessage } from "./handlerUtils.js";
|
|
14
|
-
/**
|
|
15
|
-
* Validate a path component to prevent path traversal attacks
|
|
16
|
-
*/
|
|
17
|
-
function isValidPathComponent(component) {
|
|
18
|
-
if (!component)
|
|
19
|
-
return false;
|
|
20
|
-
// Reject path traversal patterns
|
|
21
|
-
if (component === "." || component === "..")
|
|
22
|
-
return false;
|
|
23
|
-
// Reject absolute paths on Unix/Windows
|
|
24
|
-
if (component.startsWith("/") || component.startsWith("\\"))
|
|
25
|
-
return false;
|
|
26
|
-
// Reject Windows drive letters
|
|
27
|
-
if (/^[a-zA-Z]:/.test(component))
|
|
28
|
-
return false;
|
|
29
|
-
// Reject null bytes
|
|
30
|
-
if (component.includes("\0"))
|
|
31
|
-
return false;
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
13
|
+
import { formatErrorMessage, isValidPathComponent, filterByPrefix, formatGuideContent, } from "./handlerUtils.js";
|
|
34
14
|
/**
|
|
35
15
|
* Register all resource handlers with the MCP server
|
|
36
16
|
*/
|
|
37
17
|
export function registerResources(server, services, logger) {
|
|
38
|
-
const { apiDocService, deviceInfoService, sampleService } = services;
|
|
18
|
+
const { apiDocService, deviceInfoService, sampleService, devGuideService } = services;
|
|
39
19
|
// Register API module documentation resources using a template
|
|
40
20
|
// API docs are primarily for the assistant to understand the SDK
|
|
41
21
|
const apiAnnotations = {
|
|
@@ -324,5 +304,72 @@ export function registerResources(server, services, logger) {
|
|
|
324
304
|
throw new Error(errorMessage);
|
|
325
305
|
}
|
|
326
306
|
});
|
|
307
|
+
// Register developer guide resources using a template
|
|
308
|
+
// Guides provide learning content for both users and assistants
|
|
309
|
+
const guideAnnotations = {
|
|
310
|
+
audience: ["user", "assistant"],
|
|
311
|
+
priority: 0.7, // Important reference for development guidance
|
|
312
|
+
};
|
|
313
|
+
server.registerResource("dev-guide", new ResourceTemplate("connectiq://guides/{slug}", {
|
|
314
|
+
list: async () => {
|
|
315
|
+
const guides = await devGuideService.listGuides();
|
|
316
|
+
return {
|
|
317
|
+
resources: guides.map((guide) => ({
|
|
318
|
+
uri: `connectiq://guides/${guide.slug}`,
|
|
319
|
+
name: `Guide: ${guide.title}`,
|
|
320
|
+
description: `${guide.category} - ${guide.title}`,
|
|
321
|
+
mimeType: "text/markdown",
|
|
322
|
+
annotations: guideAnnotations,
|
|
323
|
+
})),
|
|
324
|
+
};
|
|
325
|
+
},
|
|
326
|
+
complete: {
|
|
327
|
+
slug: async (value) => {
|
|
328
|
+
const guides = await devGuideService.listGuides();
|
|
329
|
+
return filterByPrefix(guides.map((g) => g.slug), value);
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
}), {
|
|
333
|
+
title: "ConnectIQ Developer Guide",
|
|
334
|
+
description: "Developer guide content from developer.garmin.com/connect-iq/",
|
|
335
|
+
mimeType: "text/markdown",
|
|
336
|
+
annotations: guideAnnotations,
|
|
337
|
+
}, async (uri, params) => {
|
|
338
|
+
const slug = Array.isArray(params.slug)
|
|
339
|
+
? params.slug.join("/")
|
|
340
|
+
: params.slug;
|
|
341
|
+
logger.debug(`Resource read: ${uri.href}`, { resource: uri.href });
|
|
342
|
+
try {
|
|
343
|
+
// Validate slug to prevent path traversal
|
|
344
|
+
const slugParts = slug.split("/");
|
|
345
|
+
for (const part of slugParts) {
|
|
346
|
+
if (!isValidPathComponent(part)) {
|
|
347
|
+
throw new Error(`Invalid guide slug: ${slug}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
const guide = await devGuideService.getGuide(slug);
|
|
351
|
+
if (!guide) {
|
|
352
|
+
throw new Error(`Developer guide not found: ${slug}`);
|
|
353
|
+
}
|
|
354
|
+
const content = formatGuideContent(guide);
|
|
355
|
+
return {
|
|
356
|
+
contents: [
|
|
357
|
+
{
|
|
358
|
+
uri: uri.href,
|
|
359
|
+
mimeType: "text/markdown",
|
|
360
|
+
text: content,
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
catch (error) {
|
|
366
|
+
const errorMessage = formatErrorMessage(error);
|
|
367
|
+
logger.error(`Resource read error: ${errorMessage}`, {
|
|
368
|
+
resource: uri.href,
|
|
369
|
+
slug,
|
|
370
|
+
});
|
|
371
|
+
throw new Error(errorMessage);
|
|
372
|
+
}
|
|
373
|
+
});
|
|
327
374
|
}
|
|
328
375
|
//# sourceMappingURL=resourceHandlers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resourceHandlers.js","sourceRoot":"","sources":["../../src/handlers/resourceHandlers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resourceHandlers.js","sourceRoot":"","sources":["../../src/handlers/resourceHandlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolHandlers.d.ts","sourceRoot":"","sources":["../../src/handlers/toolHandlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EACV,cAAc,
|
|
1
|
+
{"version":3,"file":"toolHandlers.d.ts","sourceRoot":"","sources":["../../src/handlers/toolHandlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EACV,cAAc,EAIf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AAsa5E;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,cAAc,EACxB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,GACb,IAAI,CA+xCN"}
|
|
@@ -13,7 +13,7 @@ import { completable } from "@modelcontextprotocol/sdk/server/completable.js";
|
|
|
13
13
|
import { z } from "zod";
|
|
14
14
|
import { DeviceFilter, parseNumericFilter } from "../utils/index.js";
|
|
15
15
|
import { API_ELEMENT_TYPES } from "../schemas/index.js";
|
|
16
|
-
import { formatErrorMessage, validateToolOutput, createDeviceIdCompletable, createScreenShapeCompletable, createAppTypeCompletable, } from "./handlerUtils.js";
|
|
16
|
+
import { formatErrorMessage, validateToolOutput, isValidPathComponent, filterByPrefix, formatGuideContent, createDeviceIdCompletable, createScreenShapeCompletable, createAppTypeCompletable, } from "./handlerUtils.js";
|
|
17
17
|
// ============================================================================
|
|
18
18
|
// Output Schemas for structured tool responses (as Zod schemas)
|
|
19
19
|
//
|
|
@@ -53,6 +53,10 @@ const SearchApiDocsOutputSchema = z.object({
|
|
|
53
53
|
returnType: z.string().optional().describe("Return type"),
|
|
54
54
|
since: z.string().optional().describe("API level introduced"),
|
|
55
55
|
deprecated: z.boolean().optional().describe("Whether deprecated"),
|
|
56
|
+
deprecationMessage: z
|
|
57
|
+
.string()
|
|
58
|
+
.optional()
|
|
59
|
+
.describe("Deprecation reason/message"),
|
|
56
60
|
supportedDevices: z
|
|
57
61
|
.array(z.string())
|
|
58
62
|
.optional()
|
|
@@ -61,6 +65,10 @@ const SearchApiDocsOutputSchema = z.object({
|
|
|
61
65
|
.array(z.string())
|
|
62
66
|
.optional()
|
|
63
67
|
.describe("App types that support this API element"),
|
|
68
|
+
requiredPermissions: z
|
|
69
|
+
.array(z.string())
|
|
70
|
+
.optional()
|
|
71
|
+
.describe("Required permissions for this API"),
|
|
64
72
|
// Extended API documentation fields
|
|
65
73
|
notes: z
|
|
66
74
|
.array(z.string())
|
|
@@ -162,6 +170,9 @@ function projectApiElement(element, detailLevel) {
|
|
|
162
170
|
signature: element.signature,
|
|
163
171
|
since: element.since,
|
|
164
172
|
deprecated: element.deprecated,
|
|
173
|
+
deprecationMessage: element.deprecationMessage,
|
|
174
|
+
returnType: element.returnType,
|
|
175
|
+
propertyType: element.propertyType,
|
|
165
176
|
};
|
|
166
177
|
// For enums, include member count instead of full array
|
|
167
178
|
if (element.type === "enum" && element.enumMembers) {
|
|
@@ -188,6 +199,17 @@ const ListDevicesOutputSchema = z.object({
|
|
|
188
199
|
.optional()
|
|
189
200
|
.describe("Display type (e.g., amoled, mip)"),
|
|
190
201
|
deviceFamily: z.string().optional().describe("Device family identifier"),
|
|
202
|
+
hasTouch: z.boolean().optional().describe("Touch screen support"),
|
|
203
|
+
appTypes: z
|
|
204
|
+
.array(z.object({
|
|
205
|
+
type: z.string().describe("App type identifier"),
|
|
206
|
+
memoryLimit: z
|
|
207
|
+
.number()
|
|
208
|
+
.optional()
|
|
209
|
+
.describe("Memory limit in bytes"),
|
|
210
|
+
}))
|
|
211
|
+
.optional()
|
|
212
|
+
.describe("Supported app types with memory limits"),
|
|
191
213
|
})),
|
|
192
214
|
totalDevices: z.number().describe("Total number of devices"),
|
|
193
215
|
query: z.string().optional().describe("Search query applied"),
|
|
@@ -299,7 +321,40 @@ const SearchSampleCodeOutputSchema = z.object({
|
|
|
299
321
|
const TOOL_ANNOTATIONS = {
|
|
300
322
|
readOnlyHint: true,
|
|
301
323
|
idempotentHint: true,
|
|
324
|
+
destructiveHint: false,
|
|
325
|
+
openWorldHint: false,
|
|
302
326
|
};
|
|
327
|
+
/**
|
|
328
|
+
* Output schema for searchDevGuides tool
|
|
329
|
+
*/
|
|
330
|
+
const SearchDevGuidesOutputSchema = z.object({
|
|
331
|
+
results: z.array(z.object({
|
|
332
|
+
slug: z.string().describe("Guide slug identifier"),
|
|
333
|
+
title: z.string().describe("Guide page title"),
|
|
334
|
+
category: z.string().describe("Guide category"),
|
|
335
|
+
url: z.string().describe("Source URL on developer.garmin.com"),
|
|
336
|
+
snippet: z.string().describe("Relevant text snippet"),
|
|
337
|
+
score: z.number().describe("Relevance score"),
|
|
338
|
+
})),
|
|
339
|
+
totalResults: z.number().describe("Total number of results found"),
|
|
340
|
+
query: z.string().describe("Original search query"),
|
|
341
|
+
filters: z
|
|
342
|
+
.object({
|
|
343
|
+
category: z.string().optional().describe("Category filter applied"),
|
|
344
|
+
})
|
|
345
|
+
.optional()
|
|
346
|
+
.describe("Filters applied to the search"),
|
|
347
|
+
});
|
|
348
|
+
/**
|
|
349
|
+
* Output schema for getDevGuide tool
|
|
350
|
+
*/
|
|
351
|
+
const GetDevGuideOutputSchema = z.object({
|
|
352
|
+
slug: z.string().describe("Guide slug identifier"),
|
|
353
|
+
title: z.string().describe("Guide page title"),
|
|
354
|
+
category: z.string().describe("Guide category"),
|
|
355
|
+
url: z.string().describe("Source URL on developer.garmin.com"),
|
|
356
|
+
content: z.string().describe("Full markdown content of the guide"),
|
|
357
|
+
});
|
|
303
358
|
/**
|
|
304
359
|
* Register all tool handlers with the MCP server
|
|
305
360
|
* @param server - MCP server instance
|
|
@@ -308,7 +363,7 @@ const TOOL_ANNOTATIONS = {
|
|
|
308
363
|
* @param logger - Logger for structured logging
|
|
309
364
|
*/
|
|
310
365
|
export function registerTools(server, services, schemaFactory, logger) {
|
|
311
|
-
const { apiDocService, deviceInfoService, sampleService, projectInfoService, sampleCodeSearchService, } = services;
|
|
366
|
+
const { apiDocService, deviceInfoService, sampleService, projectInfoService, sampleCodeSearchService, devGuideService, } = services;
|
|
312
367
|
// Register searchApiDocs tool
|
|
313
368
|
server.registerTool("searchApiDocs", {
|
|
314
369
|
title: "Search ConnectIQ API Documentation",
|
|
@@ -330,7 +385,7 @@ export function registerTools(server, services, schemaFactory, logger) {
|
|
|
330
385
|
.filter((name) => name.toLowerCase().startsWith(lowerValue))
|
|
331
386
|
.slice(0, 100);
|
|
332
387
|
}),
|
|
333
|
-
limit: z
|
|
388
|
+
limit: z.coerce
|
|
334
389
|
.number()
|
|
335
390
|
.optional()
|
|
336
391
|
.default(20)
|
|
@@ -660,8 +715,24 @@ export function registerTools(server, services, schemaFactory, logger) {
|
|
|
660
715
|
devices = filter.filterDevices(devices);
|
|
661
716
|
}
|
|
662
717
|
const formatted = devices
|
|
663
|
-
.map((d) =>
|
|
718
|
+
.map((d) => {
|
|
719
|
+
let line = `- ${d.id}: ${d.name}`;
|
|
720
|
+
if (d.screenWidth)
|
|
721
|
+
line += ` (${d.screenWidth}x${d.screenHeight})`;
|
|
722
|
+
const hasTouch = d.hasTouch ?? d.display?.isTouch;
|
|
723
|
+
if (hasTouch)
|
|
724
|
+
line += " [touch]";
|
|
725
|
+
return line;
|
|
726
|
+
})
|
|
664
727
|
.join("\n");
|
|
728
|
+
// Normalize appTypes to consistent {type, memoryLimit?}[] format
|
|
729
|
+
const normalizeAppTypes = (appTypes) => {
|
|
730
|
+
if (!appTypes || appTypes.length === 0)
|
|
731
|
+
return undefined;
|
|
732
|
+
return appTypes.map((at) => typeof at === "string"
|
|
733
|
+
? { type: at }
|
|
734
|
+
: { type: at.type, memoryLimit: at.memoryLimit });
|
|
735
|
+
};
|
|
665
736
|
const structuredOutput = {
|
|
666
737
|
devices: devices.map((d) => ({
|
|
667
738
|
id: d.id,
|
|
@@ -671,6 +742,8 @@ export function registerTools(server, services, schemaFactory, logger) {
|
|
|
671
742
|
screenShape: d.screenShape,
|
|
672
743
|
displayType: d.displayType,
|
|
673
744
|
deviceFamily: d.deviceFamily,
|
|
745
|
+
hasTouch: d.hasTouch ?? d.display?.isTouch,
|
|
746
|
+
appTypes: normalizeAppTypes(d.appTypes),
|
|
674
747
|
})),
|
|
675
748
|
totalDevices: devices.length,
|
|
676
749
|
query,
|
|
@@ -736,7 +809,7 @@ export function registerTools(server, services, schemaFactory, logger) {
|
|
|
736
809
|
.string()
|
|
737
810
|
.optional()
|
|
738
811
|
.describe("Filter by minimum SDK version (e.g., '3.0.0')"),
|
|
739
|
-
limit: z
|
|
812
|
+
limit: z.coerce
|
|
740
813
|
.number()
|
|
741
814
|
.optional()
|
|
742
815
|
.default(50)
|
|
@@ -1010,12 +1083,12 @@ export function registerTools(server, services, schemaFactory, logger) {
|
|
|
1010
1083
|
.enum([".mc", ".xml", ".jungle", ".json"])
|
|
1011
1084
|
.optional()
|
|
1012
1085
|
.describe("Filter by file type"),
|
|
1013
|
-
limit: z
|
|
1086
|
+
limit: z.coerce
|
|
1014
1087
|
.number()
|
|
1015
1088
|
.optional()
|
|
1016
1089
|
.default(20)
|
|
1017
1090
|
.describe("Maximum number of results to return"),
|
|
1018
|
-
contextLines: z
|
|
1091
|
+
contextLines: z.coerce
|
|
1019
1092
|
.number()
|
|
1020
1093
|
.optional()
|
|
1021
1094
|
.default(2)
|
|
@@ -1105,6 +1178,179 @@ export function registerTools(server, services, schemaFactory, logger) {
|
|
|
1105
1178
|
};
|
|
1106
1179
|
}
|
|
1107
1180
|
});
|
|
1181
|
+
// Register searchDevGuides tool for searching developer guide content
|
|
1182
|
+
server.registerTool("searchDevGuides", {
|
|
1183
|
+
title: "Search Developer Guides",
|
|
1184
|
+
description: "Search ConnectIQ developer guides from developer.garmin.com. Covers Monkey C language, " +
|
|
1185
|
+
"core topics (UI, sensors, BLE, backgrounding, debugging), UX guidelines, FAQ, and more. " +
|
|
1186
|
+
"Use this to find development guides, tutorials, and best practices.",
|
|
1187
|
+
annotations: TOOL_ANNOTATIONS,
|
|
1188
|
+
inputSchema: {
|
|
1189
|
+
query: z
|
|
1190
|
+
.string()
|
|
1191
|
+
.min(1, "Search query cannot be empty")
|
|
1192
|
+
.describe("Search term to find in developer guides"),
|
|
1193
|
+
category: completable(z
|
|
1194
|
+
.string()
|
|
1195
|
+
.optional()
|
|
1196
|
+
.describe("Filter by guide category (e.g., 'Core Topics', 'Monkey C', 'UX Guide')"), async (value) => {
|
|
1197
|
+
const categories = await devGuideService.listCategories();
|
|
1198
|
+
return filterByPrefix(categories, value);
|
|
1199
|
+
}),
|
|
1200
|
+
limit: z.coerce
|
|
1201
|
+
.number()
|
|
1202
|
+
.optional()
|
|
1203
|
+
.default(10)
|
|
1204
|
+
.describe("Maximum number of results to return"),
|
|
1205
|
+
},
|
|
1206
|
+
outputSchema: SearchDevGuidesOutputSchema,
|
|
1207
|
+
}, async ({ query, category, limit }) => {
|
|
1208
|
+
logger.debug(`Tool called: searchDevGuides`, {
|
|
1209
|
+
tool: "searchDevGuides",
|
|
1210
|
+
query,
|
|
1211
|
+
});
|
|
1212
|
+
try {
|
|
1213
|
+
const results = await devGuideService.search(query, {
|
|
1214
|
+
category,
|
|
1215
|
+
limit,
|
|
1216
|
+
});
|
|
1217
|
+
const structuredOutput = {
|
|
1218
|
+
results: results.map((r) => ({
|
|
1219
|
+
slug: r.slug,
|
|
1220
|
+
title: r.title,
|
|
1221
|
+
category: r.category,
|
|
1222
|
+
url: r.url,
|
|
1223
|
+
snippet: r.snippet,
|
|
1224
|
+
score: r.score,
|
|
1225
|
+
})),
|
|
1226
|
+
totalResults: results.length,
|
|
1227
|
+
query,
|
|
1228
|
+
filters: category ? { category } : undefined,
|
|
1229
|
+
};
|
|
1230
|
+
validateToolOutput(structuredOutput, SearchDevGuidesOutputSchema, "searchDevGuides", logger);
|
|
1231
|
+
if (results.length === 0) {
|
|
1232
|
+
let message = `No developer guides found matching "${query}"`;
|
|
1233
|
+
if (category)
|
|
1234
|
+
message += ` in category "${category}"`;
|
|
1235
|
+
message += ".";
|
|
1236
|
+
return {
|
|
1237
|
+
content: [{ type: "text", text: message }],
|
|
1238
|
+
structuredContent: structuredOutput,
|
|
1239
|
+
};
|
|
1240
|
+
}
|
|
1241
|
+
const formatted = results
|
|
1242
|
+
.map((r, i) => `${i + 1}. **${r.title}** (${r.category})\n ${r.url}\n ${r.snippet}`)
|
|
1243
|
+
.join("\n\n");
|
|
1244
|
+
let header = `Found ${results.length} guide(s) matching "${query}"`;
|
|
1245
|
+
if (category)
|
|
1246
|
+
header += ` in ${category}`;
|
|
1247
|
+
header += ":\n\n";
|
|
1248
|
+
return {
|
|
1249
|
+
content: [{ type: "text", text: `${header}${formatted}` }],
|
|
1250
|
+
structuredContent: structuredOutput,
|
|
1251
|
+
};
|
|
1252
|
+
}
|
|
1253
|
+
catch (error) {
|
|
1254
|
+
const errorMessage = formatErrorMessage(error);
|
|
1255
|
+
logger.error(`searchDevGuides error: ${errorMessage}`, {
|
|
1256
|
+
tool: "searchDevGuides",
|
|
1257
|
+
query,
|
|
1258
|
+
});
|
|
1259
|
+
return {
|
|
1260
|
+
content: [
|
|
1261
|
+
{
|
|
1262
|
+
type: "text",
|
|
1263
|
+
text: `Error searching developer guides: ${errorMessage}`,
|
|
1264
|
+
},
|
|
1265
|
+
],
|
|
1266
|
+
isError: true,
|
|
1267
|
+
};
|
|
1268
|
+
}
|
|
1269
|
+
});
|
|
1270
|
+
// Register getDevGuide tool for reading full guide content
|
|
1271
|
+
server.registerTool("getDevGuide", {
|
|
1272
|
+
title: "Get Developer Guide",
|
|
1273
|
+
description: "Get the full content of a ConnectIQ developer guide page. Use searchDevGuides first to find " +
|
|
1274
|
+
"relevant guides, then use this tool with the slug to read the full content.",
|
|
1275
|
+
annotations: TOOL_ANNOTATIONS,
|
|
1276
|
+
inputSchema: {
|
|
1277
|
+
slug: completable(z
|
|
1278
|
+
.string()
|
|
1279
|
+
.min(1, "Guide slug cannot be empty")
|
|
1280
|
+
.describe("Guide slug (e.g., 'core-topics/backgrounding', 'monkey-c/functions')"), async (value) => {
|
|
1281
|
+
const guides = await devGuideService.listGuides();
|
|
1282
|
+
return filterByPrefix(guides.map((g) => g.slug), value);
|
|
1283
|
+
}),
|
|
1284
|
+
},
|
|
1285
|
+
outputSchema: GetDevGuideOutputSchema,
|
|
1286
|
+
}, async ({ slug }) => {
|
|
1287
|
+
logger.debug(`Tool called: getDevGuide`, {
|
|
1288
|
+
tool: "getDevGuide",
|
|
1289
|
+
slug,
|
|
1290
|
+
});
|
|
1291
|
+
try {
|
|
1292
|
+
// Validate slug to prevent path traversal
|
|
1293
|
+
const slugParts = slug.split("/");
|
|
1294
|
+
for (const part of slugParts) {
|
|
1295
|
+
if (!isValidPathComponent(part)) {
|
|
1296
|
+
return {
|
|
1297
|
+
content: [
|
|
1298
|
+
{
|
|
1299
|
+
type: "text",
|
|
1300
|
+
text: `Invalid guide slug: "${slug}". Use searchDevGuides to find available guides.`,
|
|
1301
|
+
},
|
|
1302
|
+
],
|
|
1303
|
+
isError: true,
|
|
1304
|
+
};
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
const guide = await devGuideService.getGuide(slug);
|
|
1308
|
+
if (!guide) {
|
|
1309
|
+
return {
|
|
1310
|
+
content: [
|
|
1311
|
+
{
|
|
1312
|
+
type: "text",
|
|
1313
|
+
text: `Developer guide not found: "${slug}". Use searchDevGuides to find available guides.`,
|
|
1314
|
+
},
|
|
1315
|
+
],
|
|
1316
|
+
isError: true,
|
|
1317
|
+
};
|
|
1318
|
+
}
|
|
1319
|
+
const structuredOutput = {
|
|
1320
|
+
slug,
|
|
1321
|
+
title: guide.title,
|
|
1322
|
+
category: guide.category,
|
|
1323
|
+
url: guide.url,
|
|
1324
|
+
content: guide.content,
|
|
1325
|
+
};
|
|
1326
|
+
validateToolOutput(structuredOutput, GetDevGuideOutputSchema, "getDevGuide", logger);
|
|
1327
|
+
return {
|
|
1328
|
+
content: [
|
|
1329
|
+
{
|
|
1330
|
+
type: "text",
|
|
1331
|
+
text: formatGuideContent(guide),
|
|
1332
|
+
},
|
|
1333
|
+
],
|
|
1334
|
+
structuredContent: structuredOutput,
|
|
1335
|
+
};
|
|
1336
|
+
}
|
|
1337
|
+
catch (error) {
|
|
1338
|
+
const errorMessage = formatErrorMessage(error);
|
|
1339
|
+
logger.error(`getDevGuide error: ${errorMessage}`, {
|
|
1340
|
+
tool: "getDevGuide",
|
|
1341
|
+
slug,
|
|
1342
|
+
});
|
|
1343
|
+
return {
|
|
1344
|
+
content: [
|
|
1345
|
+
{
|
|
1346
|
+
type: "text",
|
|
1347
|
+
text: `Error reading developer guide: ${errorMessage}`,
|
|
1348
|
+
},
|
|
1349
|
+
],
|
|
1350
|
+
isError: true,
|
|
1351
|
+
};
|
|
1352
|
+
}
|
|
1353
|
+
});
|
|
1108
1354
|
// Register getProjectConfig tool with output schema for structured responses
|
|
1109
1355
|
server.registerTool("getProjectConfig", {
|
|
1110
1356
|
title: "Get Project Configuration",
|