connectiq-mcp-server 1.1.8 → 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 +249 -3
- 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 -37
- package/.claude/skills/prd-generate/SKILL.md +0 -228
- package/.claude/skills/prd-generate/references/agent-prompts.md +0 -114
- package/.claude/skills/prd-generate/references/principles.md +0 -60
- package/.claude/skills/prd-generate/references/templates.md +0 -289
- package/.claude/skills/prd-implement-phase/SKILL.md +0 -79
- package/.github/workflows/publish.yml +0 -52
- package/.mcp.json +0 -36
- package/.prettierignore +0 -5
- 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 -113
- package/CHANGELOG.md +0 -105
- 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",
|
|
@@ -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,
|
|
@@ -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",
|