@obra-studio/figma-console-mcp 1.32.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/LICENSE +21 -0
- package/README.md +879 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.js +278 -0
- package/dist/apps/design-system-dashboard/scoring/accessibility.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts +29 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.js +358 -0
- package/dist/apps/design-system-dashboard/scoring/component-metadata.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.js +342 -0
- package/dist/apps/design-system-dashboard/scoring/consistency.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.js +231 -0
- package/dist/apps/design-system-dashboard/scoring/coverage.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/engine.d.ts +27 -0
- package/dist/apps/design-system-dashboard/scoring/engine.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/engine.js +93 -0
- package/dist/apps/design-system-dashboard/scoring/engine.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.js +309 -0
- package/dist/apps/design-system-dashboard/scoring/naming-semantics.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts +14 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.js +350 -0
- package/dist/apps/design-system-dashboard/scoring/token-architecture.js.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/types.d.ts +89 -0
- package/dist/apps/design-system-dashboard/scoring/types.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/scoring/types.js +41 -0
- package/dist/apps/design-system-dashboard/scoring/types.js.map +1 -0
- package/dist/apps/design-system-dashboard/server.d.ts +24 -0
- package/dist/apps/design-system-dashboard/server.d.ts.map +1 -0
- package/dist/apps/design-system-dashboard/server.js +160 -0
- package/dist/apps/design-system-dashboard/server.js.map +1 -0
- package/dist/apps/token-browser/server.d.ts +26 -0
- package/dist/apps/token-browser/server.d.ts.map +1 -0
- package/dist/apps/token-browser/server.js +137 -0
- package/dist/apps/token-browser/server.js.map +1 -0
- package/dist/browser/base.d.ts +58 -0
- package/dist/browser/base.d.ts.map +1 -0
- package/dist/browser/base.js +6 -0
- package/dist/browser/base.js.map +1 -0
- package/dist/browser/local.d.ts +87 -0
- package/dist/browser/local.d.ts.map +1 -0
- package/dist/browser/local.js +318 -0
- package/dist/browser/local.js.map +1 -0
- package/dist/core/accessibility-tools.d.ts +21 -0
- package/dist/core/accessibility-tools.d.ts.map +1 -0
- package/dist/core/accessibility-tools.js +307 -0
- package/dist/core/accessibility-tools.js.map +1 -0
- package/dist/core/annotation-tools.d.ts +14 -0
- package/dist/core/annotation-tools.d.ts.map +1 -0
- package/dist/core/annotation-tools.js +231 -0
- package/dist/core/annotation-tools.js.map +1 -0
- package/dist/core/autodocs-tools.d.ts +7 -0
- package/dist/core/autodocs-tools.d.ts.map +1 -0
- package/dist/core/autodocs-tools.js +195 -0
- package/dist/core/autodocs-tools.js.map +1 -0
- package/dist/core/comment-tools.d.ts +11 -0
- package/dist/core/comment-tools.d.ts.map +1 -0
- package/dist/core/comment-tools.js +293 -0
- package/dist/core/comment-tools.js.map +1 -0
- package/dist/core/config.d.ts +17 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +154 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/console-monitor.d.ts +82 -0
- package/dist/core/console-monitor.d.ts.map +1 -0
- package/dist/core/console-monitor.js +428 -0
- package/dist/core/console-monitor.js.map +1 -0
- package/dist/core/deep-component-tools.d.ts +14 -0
- package/dist/core/deep-component-tools.d.ts.map +1 -0
- package/dist/core/deep-component-tools.js +129 -0
- package/dist/core/deep-component-tools.js.map +1 -0
- package/dist/core/design-code-tools.d.ts +116 -0
- package/dist/core/design-code-tools.d.ts.map +1 -0
- package/dist/core/design-code-tools.js +2751 -0
- package/dist/core/design-code-tools.js.map +1 -0
- package/dist/core/design-system-manifest.d.ts +272 -0
- package/dist/core/design-system-manifest.d.ts.map +1 -0
- package/dist/core/design-system-manifest.js +261 -0
- package/dist/core/design-system-manifest.js.map +1 -0
- package/dist/core/design-system-tools.d.ts +67 -0
- package/dist/core/design-system-tools.d.ts.map +1 -0
- package/dist/core/design-system-tools.js +874 -0
- package/dist/core/design-system-tools.js.map +1 -0
- package/dist/core/diagnose-tool.d.ts +33 -0
- package/dist/core/diagnose-tool.d.ts.map +1 -0
- package/dist/core/diagnose-tool.js +97 -0
- package/dist/core/diagnose-tool.js.map +1 -0
- package/dist/core/diff/changelog-formatter.d.ts +35 -0
- package/dist/core/diff/changelog-formatter.d.ts.map +1 -0
- package/dist/core/diff/changelog-formatter.js +276 -0
- package/dist/core/diff/changelog-formatter.js.map +1 -0
- package/dist/core/diff/diff-engine.d.ts +127 -0
- package/dist/core/diff/diff-engine.d.ts.map +1 -0
- package/dist/core/diff/diff-engine.js +335 -0
- package/dist/core/diff/diff-engine.js.map +1 -0
- package/dist/core/diff/property-compare.d.ts +19 -0
- package/dist/core/diff/property-compare.d.ts.map +1 -0
- package/dist/core/diff/property-compare.js +37 -0
- package/dist/core/diff/property-compare.js.map +1 -0
- package/dist/core/diff/version-cache.d.ts +40 -0
- package/dist/core/diff/version-cache.d.ts.map +1 -0
- package/dist/core/diff/version-cache.js +75 -0
- package/dist/core/diff/version-cache.js.map +1 -0
- package/dist/core/enrichment/enrichment-service.d.ts +52 -0
- package/dist/core/enrichment/enrichment-service.d.ts.map +1 -0
- package/dist/core/enrichment/enrichment-service.js +369 -0
- package/dist/core/enrichment/enrichment-service.js.map +1 -0
- package/dist/core/enrichment/index.d.ts +8 -0
- package/dist/core/enrichment/index.d.ts.map +1 -0
- package/dist/core/enrichment/index.js +8 -0
- package/dist/core/enrichment/index.js.map +1 -0
- package/dist/core/enrichment/relationship-mapper.d.ts +106 -0
- package/dist/core/enrichment/relationship-mapper.d.ts.map +1 -0
- package/dist/core/enrichment/relationship-mapper.js +352 -0
- package/dist/core/enrichment/relationship-mapper.js.map +1 -0
- package/dist/core/enrichment/style-resolver.d.ts +80 -0
- package/dist/core/enrichment/style-resolver.d.ts.map +1 -0
- package/dist/core/enrichment/style-resolver.js +327 -0
- package/dist/core/enrichment/style-resolver.js.map +1 -0
- package/dist/core/figjam-tools.d.ts +8 -0
- package/dist/core/figjam-tools.d.ts.map +1 -0
- package/dist/core/figjam-tools.js +548 -0
- package/dist/core/figjam-tools.js.map +1 -0
- package/dist/core/figma-api.d.ts +245 -0
- package/dist/core/figma-api.d.ts.map +1 -0
- package/dist/core/figma-api.js +446 -0
- package/dist/core/figma-api.js.map +1 -0
- package/dist/core/figma-connector.d.ts +180 -0
- package/dist/core/figma-connector.d.ts.map +1 -0
- package/dist/core/figma-connector.js +8 -0
- package/dist/core/figma-connector.js.map +1 -0
- package/dist/core/figma-desktop-connector.d.ts +312 -0
- package/dist/core/figma-desktop-connector.d.ts.map +1 -0
- package/dist/core/figma-desktop-connector.js +1298 -0
- package/dist/core/figma-desktop-connector.js.map +1 -0
- package/dist/core/figma-reconstruction-spec.d.ts +166 -0
- package/dist/core/figma-reconstruction-spec.d.ts.map +1 -0
- package/dist/core/figma-reconstruction-spec.js +403 -0
- package/dist/core/figma-reconstruction-spec.js.map +1 -0
- package/dist/core/figma-style-extractor.d.ts +76 -0
- package/dist/core/figma-style-extractor.d.ts.map +1 -0
- package/dist/core/figma-style-extractor.js +312 -0
- package/dist/core/figma-style-extractor.js.map +1 -0
- package/dist/core/figma-tools.d.ts +22 -0
- package/dist/core/figma-tools.d.ts.map +1 -0
- package/dist/core/figma-tools.js +3187 -0
- package/dist/core/figma-tools.js.map +1 -0
- package/dist/core/identity.d.ts +41 -0
- package/dist/core/identity.d.ts.map +1 -0
- package/dist/core/identity.js +97 -0
- package/dist/core/identity.js.map +1 -0
- package/dist/core/library-tools.d.ts +17 -0
- package/dist/core/library-tools.d.ts.map +1 -0
- package/dist/core/library-tools.js +581 -0
- package/dist/core/library-tools.js.map +1 -0
- package/dist/core/logger.d.ts +22 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +54 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/port-discovery.d.ts +171 -0
- package/dist/core/port-discovery.d.ts.map +1 -0
- package/dist/core/port-discovery.js +563 -0
- package/dist/core/port-discovery.js.map +1 -0
- package/dist/core/resolve-package-root.d.ts +2 -0
- package/dist/core/resolve-package-root.d.ts.map +1 -0
- package/dist/core/resolve-package-root.js +12 -0
- package/dist/core/resolve-package-root.js.map +1 -0
- package/dist/core/slides-tools.d.ts +8 -0
- package/dist/core/slides-tools.d.ts.map +1 -0
- package/dist/core/slides-tools.js +715 -0
- package/dist/core/slides-tools.js.map +1 -0
- package/dist/core/snippet-injector.d.ts +24 -0
- package/dist/core/snippet-injector.d.ts.map +1 -0
- package/dist/core/snippet-injector.js +97 -0
- package/dist/core/snippet-injector.js.map +1 -0
- package/dist/core/tokens/alias-resolver.d.ts +55 -0
- package/dist/core/tokens/alias-resolver.d.ts.map +1 -0
- package/dist/core/tokens/alias-resolver.js +136 -0
- package/dist/core/tokens/alias-resolver.js.map +1 -0
- package/dist/core/tokens/config.d.ts +87 -0
- package/dist/core/tokens/config.d.ts.map +1 -0
- package/dist/core/tokens/config.js +285 -0
- package/dist/core/tokens/config.js.map +1 -0
- package/dist/core/tokens/figma-converter.d.ts +81 -0
- package/dist/core/tokens/figma-converter.d.ts.map +1 -0
- package/dist/core/tokens/figma-converter.js +196 -0
- package/dist/core/tokens/figma-converter.js.map +1 -0
- package/dist/core/tokens/formatters/css-vars.d.ts +24 -0
- package/dist/core/tokens/formatters/css-vars.d.ts.map +1 -0
- package/dist/core/tokens/formatters/css-vars.js +330 -0
- package/dist/core/tokens/formatters/css-vars.js.map +1 -0
- package/dist/core/tokens/formatters/dtcg.d.ts +28 -0
- package/dist/core/tokens/formatters/dtcg.d.ts.map +1 -0
- package/dist/core/tokens/formatters/dtcg.js +301 -0
- package/dist/core/tokens/formatters/dtcg.js.map +1 -0
- package/dist/core/tokens/formatters/index.d.ts +30 -0
- package/dist/core/tokens/formatters/index.d.ts.map +1 -0
- package/dist/core/tokens/formatters/index.js +46 -0
- package/dist/core/tokens/formatters/index.js.map +1 -0
- package/dist/core/tokens/formatters/json.d.ts +37 -0
- package/dist/core/tokens/formatters/json.d.ts.map +1 -0
- package/dist/core/tokens/formatters/json.js +188 -0
- package/dist/core/tokens/formatters/json.js.map +1 -0
- package/dist/core/tokens/formatters/less.d.ts +4 -0
- package/dist/core/tokens/formatters/less.d.ts.map +1 -0
- package/dist/core/tokens/formatters/less.js +5 -0
- package/dist/core/tokens/formatters/less.js.map +1 -0
- package/dist/core/tokens/formatters/scss.d.ts +26 -0
- package/dist/core/tokens/formatters/scss.d.ts.map +1 -0
- package/dist/core/tokens/formatters/scss.js +253 -0
- package/dist/core/tokens/formatters/scss.js.map +1 -0
- package/dist/core/tokens/formatters/stubs.d.ts +9 -0
- package/dist/core/tokens/formatters/stubs.d.ts.map +1 -0
- package/dist/core/tokens/formatters/stubs.js +14 -0
- package/dist/core/tokens/formatters/stubs.js.map +1 -0
- package/dist/core/tokens/formatters/style-dictionary-v3.d.ts +45 -0
- package/dist/core/tokens/formatters/style-dictionary-v3.d.ts.map +1 -0
- package/dist/core/tokens/formatters/style-dictionary-v3.js +208 -0
- package/dist/core/tokens/formatters/style-dictionary-v3.js.map +1 -0
- package/dist/core/tokens/formatters/tailwind-v3.d.ts +37 -0
- package/dist/core/tokens/formatters/tailwind-v3.d.ts.map +1 -0
- package/dist/core/tokens/formatters/tailwind-v3.js +238 -0
- package/dist/core/tokens/formatters/tailwind-v3.js.map +1 -0
- package/dist/core/tokens/formatters/tailwind-v4.d.ts +41 -0
- package/dist/core/tokens/formatters/tailwind-v4.d.ts.map +1 -0
- package/dist/core/tokens/formatters/tailwind-v4.js +331 -0
- package/dist/core/tokens/formatters/tailwind-v4.js.map +1 -0
- package/dist/core/tokens/formatters/tokens-studio.d.ts +44 -0
- package/dist/core/tokens/formatters/tokens-studio.d.ts.map +1 -0
- package/dist/core/tokens/formatters/tokens-studio.js +251 -0
- package/dist/core/tokens/formatters/tokens-studio.js.map +1 -0
- package/dist/core/tokens/formatters/ts-module.d.ts +35 -0
- package/dist/core/tokens/formatters/ts-module.d.ts.map +1 -0
- package/dist/core/tokens/formatters/ts-module.js +199 -0
- package/dist/core/tokens/formatters/ts-module.js.map +1 -0
- package/dist/core/tokens/index.d.ts +17 -0
- package/dist/core/tokens/index.d.ts.map +1 -0
- package/dist/core/tokens/index.js +16 -0
- package/dist/core/tokens/index.js.map +1 -0
- package/dist/core/tokens/parsers/css-vars.d.ts +3 -0
- package/dist/core/tokens/parsers/css-vars.d.ts.map +1 -0
- package/dist/core/tokens/parsers/css-vars.js +5 -0
- package/dist/core/tokens/parsers/css-vars.js.map +1 -0
- package/dist/core/tokens/parsers/dtcg.d.ts +21 -0
- package/dist/core/tokens/parsers/dtcg.d.ts.map +1 -0
- package/dist/core/tokens/parsers/dtcg.js +254 -0
- package/dist/core/tokens/parsers/dtcg.js.map +1 -0
- package/dist/core/tokens/parsers/index.d.ts +37 -0
- package/dist/core/tokens/parsers/index.d.ts.map +1 -0
- package/dist/core/tokens/parsers/index.js +139 -0
- package/dist/core/tokens/parsers/index.js.map +1 -0
- package/dist/core/tokens/parsers/json.d.ts +4 -0
- package/dist/core/tokens/parsers/json.d.ts.map +1 -0
- package/dist/core/tokens/parsers/json.js +8 -0
- package/dist/core/tokens/parsers/json.js.map +1 -0
- package/dist/core/tokens/parsers/scss.d.ts +3 -0
- package/dist/core/tokens/parsers/scss.d.ts.map +1 -0
- package/dist/core/tokens/parsers/scss.js +5 -0
- package/dist/core/tokens/parsers/scss.js.map +1 -0
- package/dist/core/tokens/parsers/stubs.d.ts +15 -0
- package/dist/core/tokens/parsers/stubs.d.ts.map +1 -0
- package/dist/core/tokens/parsers/stubs.js +21 -0
- package/dist/core/tokens/parsers/stubs.js.map +1 -0
- package/dist/core/tokens/parsers/style-dictionary-v3.d.ts +3 -0
- package/dist/core/tokens/parsers/style-dictionary-v3.d.ts.map +1 -0
- package/dist/core/tokens/parsers/style-dictionary-v3.js +5 -0
- package/dist/core/tokens/parsers/style-dictionary-v3.js.map +1 -0
- package/dist/core/tokens/parsers/tailwind-v3.d.ts +3 -0
- package/dist/core/tokens/parsers/tailwind-v3.d.ts.map +1 -0
- package/dist/core/tokens/parsers/tailwind-v3.js +5 -0
- package/dist/core/tokens/parsers/tailwind-v3.js.map +1 -0
- package/dist/core/tokens/parsers/tailwind-v4.d.ts +3 -0
- package/dist/core/tokens/parsers/tailwind-v4.d.ts.map +1 -0
- package/dist/core/tokens/parsers/tailwind-v4.js +5 -0
- package/dist/core/tokens/parsers/tailwind-v4.js.map +1 -0
- package/dist/core/tokens/parsers/tokens-studio.d.ts +3 -0
- package/dist/core/tokens/parsers/tokens-studio.d.ts.map +1 -0
- package/dist/core/tokens/parsers/tokens-studio.js +5 -0
- package/dist/core/tokens/parsers/tokens-studio.js.map +1 -0
- package/dist/core/tokens/schemas.d.ts +31 -0
- package/dist/core/tokens/schemas.d.ts.map +1 -0
- package/dist/core/tokens/schemas.js +149 -0
- package/dist/core/tokens/schemas.js.map +1 -0
- package/dist/core/tokens/transforms/color.d.ts +9 -0
- package/dist/core/tokens/transforms/color.d.ts.map +1 -0
- package/dist/core/tokens/transforms/color.js +13 -0
- package/dist/core/tokens/transforms/color.js.map +1 -0
- package/dist/core/tokens/transforms/index.d.ts +36 -0
- package/dist/core/tokens/transforms/index.d.ts.map +1 -0
- package/dist/core/tokens/transforms/index.js +30 -0
- package/dist/core/tokens/transforms/index.js.map +1 -0
- package/dist/core/tokens/transforms/size.d.ts +7 -0
- package/dist/core/tokens/transforms/size.d.ts.map +1 -0
- package/dist/core/tokens/transforms/size.js +8 -0
- package/dist/core/tokens/transforms/size.js.map +1 -0
- package/dist/core/tokens/types.d.ts +228 -0
- package/dist/core/tokens/types.d.ts.map +1 -0
- package/dist/core/tokens/types.js +19 -0
- package/dist/core/tokens/types.js.map +1 -0
- package/dist/core/tokens-tools.d.ts +42 -0
- package/dist/core/tokens-tools.d.ts.map +1 -0
- package/dist/core/tokens-tools.js +860 -0
- package/dist/core/tokens-tools.js.map +1 -0
- package/dist/core/types/design-code.d.ts +271 -0
- package/dist/core/types/design-code.d.ts.map +1 -0
- package/dist/core/types/design-code.js +5 -0
- package/dist/core/types/design-code.js.map +1 -0
- package/dist/core/types/enriched.d.ts +213 -0
- package/dist/core/types/enriched.d.ts.map +1 -0
- package/dist/core/types/enriched.js +6 -0
- package/dist/core/types/enriched.js.map +1 -0
- package/dist/core/types/index.d.ts +104 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +5 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/variable-resolver.d.ts +45 -0
- package/dist/core/variable-resolver.d.ts.map +1 -0
- package/dist/core/variable-resolver.js +86 -0
- package/dist/core/variable-resolver.js.map +1 -0
- package/dist/core/version-tools.d.ts +59 -0
- package/dist/core/version-tools.d.ts.map +1 -0
- package/dist/core/version-tools.js +1159 -0
- package/dist/core/version-tools.js.map +1 -0
- package/dist/core/websocket-connector.d.ts +187 -0
- package/dist/core/websocket-connector.d.ts.map +1 -0
- package/dist/core/websocket-connector.js +378 -0
- package/dist/core/websocket-connector.js.map +1 -0
- package/dist/core/websocket-server.js +866 -0
- package/dist/core/websocket-server.js.map +1 -0
- package/dist/core/write-tools.d.ts +7 -0
- package/dist/core/write-tools.d.ts.map +1 -0
- package/dist/core/write-tools.js +2172 -0
- package/dist/core/write-tools.js.map +1 -0
- package/dist/local.d.ts +95 -0
- package/dist/local.d.ts.map +1 -0
- package/dist/local.js +3036 -0
- package/dist/local.js.map +1 -0
- package/dist/vendor/obra-autodocs/autodocs-body.generated.d.ts +2 -0
- package/dist/vendor/obra-autodocs/autodocs-body.generated.d.ts.map +1 -0
- package/dist/vendor/obra-autodocs/autodocs-body.generated.js +6 -0
- package/dist/vendor/obra-autodocs/autodocs-body.generated.js.map +1 -0
- package/figma-desktop-bridge/README.md +365 -0
- package/figma-desktop-bridge/code.js +6504 -0
- package/figma-desktop-bridge/icon.png +0 -0
- package/figma-desktop-bridge/manifest.json +67 -0
- package/figma-desktop-bridge/ui.html +2441 -0
- package/package.json +98 -0
|
@@ -0,0 +1,548 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { createChildLogger } from "./logger.js";
|
|
3
|
+
const logger = createChildLogger({ component: "figjam-tools" });
|
|
4
|
+
/** Valid sticky note colors */
|
|
5
|
+
const STICKY_COLORS = [
|
|
6
|
+
"YELLOW",
|
|
7
|
+
"BLUE",
|
|
8
|
+
"GREEN",
|
|
9
|
+
"PINK",
|
|
10
|
+
"ORANGE",
|
|
11
|
+
"PURPLE",
|
|
12
|
+
"RED",
|
|
13
|
+
"LIGHT_GRAY",
|
|
14
|
+
"GRAY",
|
|
15
|
+
];
|
|
16
|
+
/** Valid FigJam shape types */
|
|
17
|
+
const SHAPE_TYPES = [
|
|
18
|
+
"ROUNDED_RECTANGLE",
|
|
19
|
+
"DIAMOND",
|
|
20
|
+
"ELLIPSE",
|
|
21
|
+
"TRIANGLE_UP",
|
|
22
|
+
"TRIANGLE_DOWN",
|
|
23
|
+
"PARALLELOGRAM_RIGHT",
|
|
24
|
+
"PARALLELOGRAM_LEFT",
|
|
25
|
+
"ENG_DATABASE",
|
|
26
|
+
"ENG_QUEUE",
|
|
27
|
+
"ENG_FILE",
|
|
28
|
+
"ENG_FOLDER",
|
|
29
|
+
];
|
|
30
|
+
/** Valid FigJam node types for board content filtering */
|
|
31
|
+
const FIGJAM_NODE_TYPES = [
|
|
32
|
+
"STICKY",
|
|
33
|
+
"SHAPE_WITH_TEXT",
|
|
34
|
+
"CONNECTOR",
|
|
35
|
+
"TABLE",
|
|
36
|
+
"CODE_BLOCK",
|
|
37
|
+
"SECTION",
|
|
38
|
+
"FRAME",
|
|
39
|
+
"TEXT",
|
|
40
|
+
];
|
|
41
|
+
/** Maximum items for batch operations to prevent DoS / plugin timeouts */
|
|
42
|
+
const MAX_BATCH_SIZE = 200;
|
|
43
|
+
/** Maximum table dimensions */
|
|
44
|
+
const MAX_TABLE_ROWS = 100;
|
|
45
|
+
const MAX_TABLE_COLUMNS = 50;
|
|
46
|
+
/** Maximum text length per field */
|
|
47
|
+
const MAX_TEXT_LENGTH = 5000;
|
|
48
|
+
/** Maximum code block length */
|
|
49
|
+
const MAX_CODE_LENGTH = 50000;
|
|
50
|
+
/** Maximum node IDs for arrangement */
|
|
51
|
+
const MAX_ARRANGE_NODES = 500;
|
|
52
|
+
/** Maximum nodes to return from board content reads */
|
|
53
|
+
const MAX_READ_NODES = 1000;
|
|
54
|
+
/**
|
|
55
|
+
* Register FigJam-specific tools.
|
|
56
|
+
* These tools only work when the connected file is a FigJam board (editorType === 'figjam').
|
|
57
|
+
* Used by both local mode (src/local.ts) and cloud mode (src/index.ts).
|
|
58
|
+
*/
|
|
59
|
+
export function registerFigJamTools(server, getDesktopConnector) {
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// STICKY NOTE TOOLS
|
|
62
|
+
// ============================================================================
|
|
63
|
+
server.tool("figjam_create_sticky", `Create a sticky note on a FigJam board. Only works in FigJam files.
|
|
64
|
+
|
|
65
|
+
**Colors:** YELLOW, BLUE, GREEN, PINK, ORANGE, PURPLE, RED, LIGHT_GRAY, GRAY (default: YELLOW)`, {
|
|
66
|
+
text: z
|
|
67
|
+
.string()
|
|
68
|
+
.max(MAX_TEXT_LENGTH)
|
|
69
|
+
.describe("Text content for the sticky note"),
|
|
70
|
+
color: z
|
|
71
|
+
.enum(STICKY_COLORS)
|
|
72
|
+
.optional()
|
|
73
|
+
.describe("Sticky color"),
|
|
74
|
+
x: z.number().optional().describe("X position on canvas"),
|
|
75
|
+
y: z.number().optional().describe("Y position on canvas"),
|
|
76
|
+
}, async ({ text, color, x, y }) => {
|
|
77
|
+
try {
|
|
78
|
+
const connector = await getDesktopConnector();
|
|
79
|
+
const result = await connector.createSticky({ text, color, x, y });
|
|
80
|
+
return {
|
|
81
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
logger.error({ error }, "figjam_create_sticky failed");
|
|
86
|
+
return {
|
|
87
|
+
content: [
|
|
88
|
+
{
|
|
89
|
+
type: "text",
|
|
90
|
+
text: JSON.stringify({
|
|
91
|
+
error: error instanceof Error ? error.message : String(error),
|
|
92
|
+
hint: "This tool only works in FigJam files. Make sure the Desktop Bridge plugin is running in a FigJam board.",
|
|
93
|
+
}),
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
isError: true,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
server.tool("figjam_create_stickies", `Batch create multiple sticky notes on a FigJam board (max ${MAX_BATCH_SIZE}). Use this to populate boards from structured data (meeting notes, brainstorm ideas, etc.).
|
|
101
|
+
|
|
102
|
+
**Colors:** YELLOW, BLUE, GREEN, PINK, ORANGE, PURPLE, RED, LIGHT_GRAY, GRAY`, {
|
|
103
|
+
stickies: z
|
|
104
|
+
.array(z.object({
|
|
105
|
+
text: z.string().max(MAX_TEXT_LENGTH).describe("Text content"),
|
|
106
|
+
color: z.enum(STICKY_COLORS).optional().describe("Sticky color"),
|
|
107
|
+
x: z.number().optional().describe("X position"),
|
|
108
|
+
y: z.number().optional().describe("Y position"),
|
|
109
|
+
}))
|
|
110
|
+
.max(MAX_BATCH_SIZE)
|
|
111
|
+
.describe(`Array of sticky note specifications (max ${MAX_BATCH_SIZE})`),
|
|
112
|
+
}, async ({ stickies }) => {
|
|
113
|
+
try {
|
|
114
|
+
const connector = await getDesktopConnector();
|
|
115
|
+
const result = await connector.createStickies({ stickies });
|
|
116
|
+
return {
|
|
117
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
logger.error({ error }, "figjam_create_stickies failed");
|
|
122
|
+
return {
|
|
123
|
+
content: [
|
|
124
|
+
{
|
|
125
|
+
type: "text",
|
|
126
|
+
text: JSON.stringify({
|
|
127
|
+
error: error instanceof Error ? error.message : String(error),
|
|
128
|
+
hint: "This tool only works in FigJam files.",
|
|
129
|
+
}),
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
isError: true,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
// ============================================================================
|
|
137
|
+
// CONNECTOR TOOL
|
|
138
|
+
// ============================================================================
|
|
139
|
+
server.tool("figjam_create_connector", `Connect two nodes with a connector line in FigJam. Use to create flowcharts, diagrams, and relationship maps.
|
|
140
|
+
|
|
141
|
+
Nodes must exist on the board (stickies, shapes, etc.). Use their node IDs from creation results.
|
|
142
|
+
|
|
143
|
+
**Magnet positions:** AUTO (default), TOP, BOTTOM, LEFT, RIGHT — controls where the connector attaches to each node.`, {
|
|
144
|
+
startNodeId: z.string().describe("Node ID of the start element"),
|
|
145
|
+
endNodeId: z.string().describe("Node ID of the end element"),
|
|
146
|
+
label: z
|
|
147
|
+
.string()
|
|
148
|
+
.max(MAX_TEXT_LENGTH)
|
|
149
|
+
.optional()
|
|
150
|
+
.describe("Optional text label on the connector"),
|
|
151
|
+
startMagnet: z
|
|
152
|
+
.enum(["AUTO", "TOP", "BOTTOM", "LEFT", "RIGHT"])
|
|
153
|
+
.optional()
|
|
154
|
+
.default("AUTO")
|
|
155
|
+
.describe("Magnet position on the start node"),
|
|
156
|
+
endMagnet: z
|
|
157
|
+
.enum(["AUTO", "TOP", "BOTTOM", "LEFT", "RIGHT"])
|
|
158
|
+
.optional()
|
|
159
|
+
.default("AUTO")
|
|
160
|
+
.describe("Magnet position on the end node"),
|
|
161
|
+
}, async ({ startNodeId, endNodeId, label, startMagnet, endMagnet }) => {
|
|
162
|
+
try {
|
|
163
|
+
const connector = await getDesktopConnector();
|
|
164
|
+
const result = await connector.createConnector({
|
|
165
|
+
startNodeId,
|
|
166
|
+
endNodeId,
|
|
167
|
+
label,
|
|
168
|
+
startMagnet,
|
|
169
|
+
endMagnet,
|
|
170
|
+
});
|
|
171
|
+
return {
|
|
172
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
logger.error({ error }, "figjam_create_connector failed");
|
|
177
|
+
return {
|
|
178
|
+
content: [
|
|
179
|
+
{
|
|
180
|
+
type: "text",
|
|
181
|
+
text: JSON.stringify({
|
|
182
|
+
error: error instanceof Error ? error.message : String(error),
|
|
183
|
+
hint: "This tool only works in FigJam files. Both start and end nodes must exist.",
|
|
184
|
+
}),
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
isError: true,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
// ============================================================================
|
|
192
|
+
// SHAPE WITH TEXT TOOL
|
|
193
|
+
// ============================================================================
|
|
194
|
+
server.tool("figjam_create_shape_with_text", `Create a labeled shape on a FigJam board with optional size, colors, and font control. Use for flowchart nodes, process diagrams, and visual organization.
|
|
195
|
+
|
|
196
|
+
**Shape types:** ROUNDED_RECTANGLE (default), DIAMOND, ELLIPSE, TRIANGLE_UP, TRIANGLE_DOWN, PARALLELOGRAM_RIGHT, PARALLELOGRAM_LEFT, ENG_DATABASE, ENG_QUEUE, ENG_FILE, ENG_FOLDER`, {
|
|
197
|
+
text: z
|
|
198
|
+
.string()
|
|
199
|
+
.max(MAX_TEXT_LENGTH)
|
|
200
|
+
.optional()
|
|
201
|
+
.describe("Text label for the shape"),
|
|
202
|
+
shapeType: z
|
|
203
|
+
.enum(SHAPE_TYPES)
|
|
204
|
+
.optional()
|
|
205
|
+
.describe("Shape type"),
|
|
206
|
+
x: z.number().optional().describe("X position on canvas"),
|
|
207
|
+
y: z.number().optional().describe("Y position on canvas"),
|
|
208
|
+
width: z.number().min(1).max(10000).optional().describe("Width in pixels"),
|
|
209
|
+
height: z.number().min(1).max(10000).optional().describe("Height in pixels"),
|
|
210
|
+
fillColor: z.string().regex(/^#[0-9a-fA-F]{6}$/).optional().describe("Fill color as hex (e.g., '#E1F5EE')"),
|
|
211
|
+
strokeColor: z.string().regex(/^#[0-9a-fA-F]{6}$/).optional().describe("Stroke/border color as hex"),
|
|
212
|
+
fontSize: z.number().min(1).max(200).optional().describe("Text font size in pixels"),
|
|
213
|
+
strokeDashPattern: z.string().optional().describe("Dash pattern as comma-separated numbers (e.g., '10,5' for dashed)"),
|
|
214
|
+
}, async ({ text, shapeType, x, y, width, height, fillColor, strokeColor, fontSize, strokeDashPattern }) => {
|
|
215
|
+
try {
|
|
216
|
+
const connector = await getDesktopConnector();
|
|
217
|
+
const result = await connector.createShapeWithText({
|
|
218
|
+
text,
|
|
219
|
+
shapeType,
|
|
220
|
+
x,
|
|
221
|
+
y,
|
|
222
|
+
width,
|
|
223
|
+
height,
|
|
224
|
+
fillColor,
|
|
225
|
+
strokeColor,
|
|
226
|
+
fontSize,
|
|
227
|
+
strokeDashPattern,
|
|
228
|
+
});
|
|
229
|
+
return {
|
|
230
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
logger.error({ error }, "figjam_create_shape_with_text failed");
|
|
235
|
+
return {
|
|
236
|
+
content: [
|
|
237
|
+
{
|
|
238
|
+
type: "text",
|
|
239
|
+
text: JSON.stringify({
|
|
240
|
+
error: error instanceof Error ? error.message : String(error),
|
|
241
|
+
hint: "This tool only works in FigJam files.",
|
|
242
|
+
}),
|
|
243
|
+
},
|
|
244
|
+
],
|
|
245
|
+
isError: true,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
// ============================================================================
|
|
250
|
+
// SECTION TOOL
|
|
251
|
+
// ============================================================================
|
|
252
|
+
server.tool("figjam_create_section", `Create a section on a FigJam board. Sections are containers that can hold other elements. Use for grouping related content.\n\n**Note:** After creating a section, place elements inside it by setting their x/y coordinates within the section's bounds, then use figma_execute to call section.appendChild(node) to parent them.`, {
|
|
253
|
+
name: z.string().max(500).optional().describe("Section name/title"),
|
|
254
|
+
x: z.number().optional().describe("X position on canvas"),
|
|
255
|
+
y: z.number().optional().describe("Y position on canvas"),
|
|
256
|
+
width: z.number().min(1).max(20000).optional().default(1000).describe("Section width in pixels"),
|
|
257
|
+
height: z.number().min(1).max(20000).optional().default(800).describe("Section height in pixels"),
|
|
258
|
+
fillColor: z.string().regex(/^#[0-9a-fA-F]{6}$/).optional().describe("Fill color as hex"),
|
|
259
|
+
}, async ({ name, x, y, width, height, fillColor }) => {
|
|
260
|
+
try {
|
|
261
|
+
const connector = await getDesktopConnector();
|
|
262
|
+
const result = await connector.createSection({
|
|
263
|
+
name, x, y, width, height, fillColor,
|
|
264
|
+
});
|
|
265
|
+
return {
|
|
266
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
logger.error({ error }, "figjam_create_section failed");
|
|
271
|
+
return {
|
|
272
|
+
content: [
|
|
273
|
+
{
|
|
274
|
+
type: "text",
|
|
275
|
+
text: JSON.stringify({
|
|
276
|
+
error: error instanceof Error ? error.message : String(error),
|
|
277
|
+
hint: "This tool only works in FigJam files.",
|
|
278
|
+
}),
|
|
279
|
+
},
|
|
280
|
+
],
|
|
281
|
+
isError: true,
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
// ============================================================================
|
|
286
|
+
// TABLE TOOL
|
|
287
|
+
// ============================================================================
|
|
288
|
+
server.tool("figjam_create_table", `Create a table on a FigJam board with optional cell data. Use for structured data display, comparison matrices, and organized information.
|
|
289
|
+
|
|
290
|
+
**Data format:** 2D array of strings, e.g. [["Header1", "Header2"], ["Row1Col1", "Row1Col2"]]`, {
|
|
291
|
+
rows: z
|
|
292
|
+
.number()
|
|
293
|
+
.min(1)
|
|
294
|
+
.max(MAX_TABLE_ROWS)
|
|
295
|
+
.describe(`Number of rows (1-${MAX_TABLE_ROWS})`),
|
|
296
|
+
columns: z
|
|
297
|
+
.number()
|
|
298
|
+
.min(1)
|
|
299
|
+
.max(MAX_TABLE_COLUMNS)
|
|
300
|
+
.describe(`Number of columns (1-${MAX_TABLE_COLUMNS})`),
|
|
301
|
+
data: z
|
|
302
|
+
.array(z.array(z.string().max(MAX_TEXT_LENGTH)))
|
|
303
|
+
.optional()
|
|
304
|
+
.describe("2D array of cell text content (row-major order)"),
|
|
305
|
+
x: z.number().optional().describe("X position on canvas"),
|
|
306
|
+
y: z.number().optional().describe("Y position on canvas"),
|
|
307
|
+
}, async ({ rows, columns, data, x, y }) => {
|
|
308
|
+
try {
|
|
309
|
+
const connector = await getDesktopConnector();
|
|
310
|
+
const result = await connector.createTable({
|
|
311
|
+
rows,
|
|
312
|
+
columns,
|
|
313
|
+
data,
|
|
314
|
+
x,
|
|
315
|
+
y,
|
|
316
|
+
});
|
|
317
|
+
return {
|
|
318
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
logger.error({ error }, "figjam_create_table failed");
|
|
323
|
+
return {
|
|
324
|
+
content: [
|
|
325
|
+
{
|
|
326
|
+
type: "text",
|
|
327
|
+
text: JSON.stringify({
|
|
328
|
+
error: error instanceof Error ? error.message : String(error),
|
|
329
|
+
hint: "This tool only works in FigJam files.",
|
|
330
|
+
}),
|
|
331
|
+
},
|
|
332
|
+
],
|
|
333
|
+
isError: true,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
// ============================================================================
|
|
338
|
+
// CODE BLOCK TOOL
|
|
339
|
+
// ============================================================================
|
|
340
|
+
server.tool("figjam_create_code_block", `Create a code block on a FigJam board. Use for sharing code snippets, config examples, or technical documentation in collaborative boards.`, {
|
|
341
|
+
code: z.string().max(MAX_CODE_LENGTH).describe("The code content"),
|
|
342
|
+
language: z
|
|
343
|
+
.string()
|
|
344
|
+
.optional()
|
|
345
|
+
.describe("Programming language (e.g., 'JAVASCRIPT', 'PYTHON', 'TYPESCRIPT', 'JSON', 'HTML', 'CSS')"),
|
|
346
|
+
x: z.number().optional().describe("X position on canvas"),
|
|
347
|
+
y: z.number().optional().describe("Y position on canvas"),
|
|
348
|
+
}, async ({ code, language, x, y }) => {
|
|
349
|
+
try {
|
|
350
|
+
const connector = await getDesktopConnector();
|
|
351
|
+
const result = await connector.createCodeBlock({
|
|
352
|
+
code,
|
|
353
|
+
language,
|
|
354
|
+
x,
|
|
355
|
+
y,
|
|
356
|
+
});
|
|
357
|
+
return {
|
|
358
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
logger.error({ error }, "figjam_create_code_block failed");
|
|
363
|
+
return {
|
|
364
|
+
content: [
|
|
365
|
+
{
|
|
366
|
+
type: "text",
|
|
367
|
+
text: JSON.stringify({
|
|
368
|
+
error: error instanceof Error ? error.message : String(error),
|
|
369
|
+
hint: "This tool only works in FigJam files.",
|
|
370
|
+
}),
|
|
371
|
+
},
|
|
372
|
+
],
|
|
373
|
+
isError: true,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
// ============================================================================
|
|
378
|
+
// LAYOUT HELPER TOOL
|
|
379
|
+
// ============================================================================
|
|
380
|
+
server.tool("figjam_auto_arrange", `Arrange nodes on a FigJam board in a grid, horizontal row, or vertical column layout. Use after batch-creating elements to organize them neatly.`, {
|
|
381
|
+
nodeIds: z
|
|
382
|
+
.array(z.string())
|
|
383
|
+
.max(MAX_ARRANGE_NODES)
|
|
384
|
+
.describe(`Array of node IDs to arrange (max ${MAX_ARRANGE_NODES})`),
|
|
385
|
+
layout: z
|
|
386
|
+
.enum(["grid", "horizontal", "vertical"])
|
|
387
|
+
.optional()
|
|
388
|
+
.default("grid")
|
|
389
|
+
.describe("Layout type: grid, horizontal, or vertical"),
|
|
390
|
+
spacing: z
|
|
391
|
+
.number()
|
|
392
|
+
.optional()
|
|
393
|
+
.default(40)
|
|
394
|
+
.describe("Spacing between nodes in pixels"),
|
|
395
|
+
columns: z
|
|
396
|
+
.number()
|
|
397
|
+
.optional()
|
|
398
|
+
.describe("Number of columns for grid layout (defaults to sqrt of node count)"),
|
|
399
|
+
}, async ({ nodeIds, layout, spacing, columns }) => {
|
|
400
|
+
try {
|
|
401
|
+
const connector = await getDesktopConnector();
|
|
402
|
+
// Compute grid columns safely on the server side — no string interpolation
|
|
403
|
+
const gridCols = columns || Math.ceil(Math.sqrt(nodeIds.length));
|
|
404
|
+
// Pass all parameters as a JSON object to avoid code injection.
|
|
405
|
+
// The plugin code reads from the params object, not interpolated strings.
|
|
406
|
+
const paramsJson = JSON.stringify({
|
|
407
|
+
nodeIds,
|
|
408
|
+
layout,
|
|
409
|
+
spacing,
|
|
410
|
+
gridCols,
|
|
411
|
+
});
|
|
412
|
+
// Use JSON.stringify to produce a properly-escaped double-quoted JS string literal.
|
|
413
|
+
// This handles all control characters including \u2028/\u2029 that manual
|
|
414
|
+
// single-quote escaping would miss.
|
|
415
|
+
const code = `
|
|
416
|
+
const params = JSON.parse(${JSON.stringify(paramsJson)});
|
|
417
|
+
const nodes = [];
|
|
418
|
+
for (const id of params.nodeIds) {
|
|
419
|
+
const node = await figma.getNodeByIdAsync(id);
|
|
420
|
+
if (node) nodes.push(node);
|
|
421
|
+
}
|
|
422
|
+
if (nodes.length === 0) throw new Error('No valid nodes found');
|
|
423
|
+
|
|
424
|
+
let x = nodes[0].x;
|
|
425
|
+
let y = nodes[0].y;
|
|
426
|
+
const startX = x;
|
|
427
|
+
let maxRowHeight = 0;
|
|
428
|
+
|
|
429
|
+
for (let i = 0; i < nodes.length; i++) {
|
|
430
|
+
const node = nodes[i];
|
|
431
|
+
if (params.layout === 'horizontal') {
|
|
432
|
+
node.x = x;
|
|
433
|
+
node.y = y;
|
|
434
|
+
x += node.width + params.spacing;
|
|
435
|
+
} else if (params.layout === 'vertical') {
|
|
436
|
+
node.x = x;
|
|
437
|
+
node.y = y;
|
|
438
|
+
y += node.height + params.spacing;
|
|
439
|
+
} else {
|
|
440
|
+
const col = i % params.gridCols;
|
|
441
|
+
if (col === 0 && i > 0) {
|
|
442
|
+
y += maxRowHeight + params.spacing;
|
|
443
|
+
maxRowHeight = 0;
|
|
444
|
+
x = startX;
|
|
445
|
+
}
|
|
446
|
+
node.x = x;
|
|
447
|
+
node.y = y;
|
|
448
|
+
maxRowHeight = Math.max(maxRowHeight, node.height);
|
|
449
|
+
x += node.width + params.spacing;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
return { arranged: nodes.length, layout: params.layout };
|
|
453
|
+
`;
|
|
454
|
+
const result = await connector.executeCodeViaUI(code, 10000);
|
|
455
|
+
return {
|
|
456
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
catch (error) {
|
|
460
|
+
logger.error({ error }, "figjam_auto_arrange failed");
|
|
461
|
+
return {
|
|
462
|
+
content: [
|
|
463
|
+
{
|
|
464
|
+
type: "text",
|
|
465
|
+
text: JSON.stringify({
|
|
466
|
+
error: error instanceof Error ? error.message : String(error),
|
|
467
|
+
hint: "Make sure all node IDs are valid and the Desktop Bridge plugin is running.",
|
|
468
|
+
}),
|
|
469
|
+
},
|
|
470
|
+
],
|
|
471
|
+
isError: true,
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
});
|
|
475
|
+
// ============================================================================
|
|
476
|
+
// READ TOOLS — Query existing FigJam board content
|
|
477
|
+
// ============================================================================
|
|
478
|
+
server.tool("figjam_get_board_contents", `Read all content from a FigJam board. Returns stickies, shapes, connectors, tables, code blocks, and sections with their text content and positions.
|
|
479
|
+
|
|
480
|
+
Use this to understand what's on a board before modifying it, or to extract structured data from collaborative sessions.
|
|
481
|
+
|
|
482
|
+
**Filters:** Pass nodeTypes to limit results (e.g., ["STICKY"] for only stickies). Omit for everything.`, {
|
|
483
|
+
nodeTypes: z
|
|
484
|
+
.array(z.enum(FIGJAM_NODE_TYPES))
|
|
485
|
+
.optional()
|
|
486
|
+
.describe("Filter by node types. Omit for all."),
|
|
487
|
+
maxNodes: z
|
|
488
|
+
.number()
|
|
489
|
+
.min(1)
|
|
490
|
+
.max(MAX_READ_NODES)
|
|
491
|
+
.optional()
|
|
492
|
+
.default(500)
|
|
493
|
+
.describe(`Maximum nodes to return (1-${MAX_READ_NODES}, default: 500)`),
|
|
494
|
+
}, async ({ nodeTypes, maxNodes }) => {
|
|
495
|
+
try {
|
|
496
|
+
const connector = await getDesktopConnector();
|
|
497
|
+
const result = await connector.getBoardContents({
|
|
498
|
+
nodeTypes,
|
|
499
|
+
maxNodes,
|
|
500
|
+
});
|
|
501
|
+
return {
|
|
502
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
catch (error) {
|
|
506
|
+
logger.error({ error }, "figjam_get_board_contents failed");
|
|
507
|
+
return {
|
|
508
|
+
content: [
|
|
509
|
+
{
|
|
510
|
+
type: "text",
|
|
511
|
+
text: JSON.stringify({
|
|
512
|
+
error: error instanceof Error ? error.message : String(error),
|
|
513
|
+
hint: "This tool only works in FigJam files. Make sure the Desktop Bridge plugin is running in a FigJam board.",
|
|
514
|
+
}),
|
|
515
|
+
},
|
|
516
|
+
],
|
|
517
|
+
isError: true,
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
});
|
|
521
|
+
server.tool("figjam_get_connections", `Read the connection graph from a FigJam board. Returns all connectors with their start/end node references and labels.
|
|
522
|
+
|
|
523
|
+
Use this to understand relationships, flowcharts, and diagrams. Returns edges as {startNodeId, endNodeId, label} plus a summary of connected nodes.`, {}, async () => {
|
|
524
|
+
try {
|
|
525
|
+
const connector = await getDesktopConnector();
|
|
526
|
+
const result = await connector.getConnections();
|
|
527
|
+
return {
|
|
528
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
catch (error) {
|
|
532
|
+
logger.error({ error }, "figjam_get_connections failed");
|
|
533
|
+
return {
|
|
534
|
+
content: [
|
|
535
|
+
{
|
|
536
|
+
type: "text",
|
|
537
|
+
text: JSON.stringify({
|
|
538
|
+
error: error instanceof Error ? error.message : String(error),
|
|
539
|
+
hint: "This tool only works in FigJam files. Make sure the Desktop Bridge plugin is running in a FigJam board.",
|
|
540
|
+
}),
|
|
541
|
+
},
|
|
542
|
+
],
|
|
543
|
+
isError: true,
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
//# sourceMappingURL=figjam-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figjam-tools.js","sourceRoot":"","sources":["../../src/core/figjam-tools.ts"],"names":[],"mappings":"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"}
|