devlens-mcp 0.3.1 → 0.3.3

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.
Files changed (128) hide show
  1. package/INSTALLATION_GUIDE.md +2 -353
  2. package/QUICK_START.md +2 -152
  3. package/dist/src/config/devlens-config.d.ts +92 -0
  4. package/dist/src/config/devlens-config.d.ts.map +1 -0
  5. package/dist/src/config/devlens-config.js +70 -0
  6. package/dist/src/config/devlens-config.js.map +1 -0
  7. package/dist/src/index.d.ts +35 -0
  8. package/dist/src/index.d.ts.map +1 -0
  9. package/dist/src/index.js +8 -0
  10. package/dist/src/index.js.map +1 -0
  11. package/dist/src/metro/cdp-client.d.ts +48 -0
  12. package/dist/src/metro/cdp-client.d.ts.map +1 -0
  13. package/dist/src/metro/cdp-client.js +127 -0
  14. package/dist/src/metro/cdp-client.js.map +1 -0
  15. package/dist/src/metro/log-collector.d.ts +30 -0
  16. package/dist/src/metro/log-collector.d.ts.map +1 -0
  17. package/dist/src/metro/log-collector.js +114 -0
  18. package/dist/src/metro/log-collector.js.map +1 -0
  19. package/dist/src/metro/metro-bridge.d.ts +56 -0
  20. package/dist/src/metro/metro-bridge.d.ts.map +1 -0
  21. package/dist/src/metro/metro-bridge.js +255 -0
  22. package/dist/src/metro/metro-bridge.js.map +1 -0
  23. package/dist/src/metro/network-inspector.d.ts +34 -0
  24. package/dist/src/metro/network-inspector.d.ts.map +1 -0
  25. package/dist/src/metro/network-inspector.js +100 -0
  26. package/dist/src/metro/network-inspector.js.map +1 -0
  27. package/dist/src/platform/android/adb.d.ts +50 -0
  28. package/dist/src/platform/android/adb.d.ts.map +1 -0
  29. package/dist/src/platform/android/adb.js +137 -0
  30. package/dist/src/platform/android/adb.js.map +1 -0
  31. package/dist/src/platform/android/android-device.d.ts +21 -0
  32. package/dist/src/platform/android/android-device.d.ts.map +1 -0
  33. package/dist/src/platform/android/android-device.js +94 -0
  34. package/dist/src/platform/android/android-device.js.map +1 -0
  35. package/dist/src/platform/android/ui-automator.d.ts +17 -0
  36. package/dist/src/platform/android/ui-automator.d.ts.map +1 -0
  37. package/dist/src/platform/android/ui-automator.js +126 -0
  38. package/dist/src/platform/android/ui-automator.js.map +1 -0
  39. package/dist/src/platform/device-manager.d.ts +28 -0
  40. package/dist/src/platform/device-manager.d.ts.map +1 -0
  41. package/dist/src/platform/device-manager.js +185 -0
  42. package/dist/src/platform/device-manager.js.map +1 -0
  43. package/dist/src/platform/device.d.ts +86 -0
  44. package/dist/src/platform/device.d.ts.map +1 -0
  45. package/dist/src/platform/device.js +7 -0
  46. package/dist/src/platform/device.js.map +1 -0
  47. package/dist/src/platform/ios/accessibility.d.ts +17 -0
  48. package/dist/src/platform/ios/accessibility.d.ts.map +1 -0
  49. package/dist/src/platform/ios/accessibility.js +159 -0
  50. package/dist/src/platform/ios/accessibility.js.map +1 -0
  51. package/dist/src/platform/ios/ios-device.d.ts +22 -0
  52. package/dist/src/platform/ios/ios-device.d.ts.map +1 -0
  53. package/dist/src/platform/ios/ios-device.js +97 -0
  54. package/dist/src/platform/ios/ios-device.js.map +1 -0
  55. package/dist/src/platform/ios/simctl.d.ts +54 -0
  56. package/dist/src/platform/ios/simctl.d.ts.map +1 -0
  57. package/dist/src/platform/ios/simctl.js +192 -0
  58. package/dist/src/platform/ios/simctl.js.map +1 -0
  59. package/dist/src/server.d.ts +3 -0
  60. package/dist/src/server.d.ts.map +1 -0
  61. package/dist/src/server.js +176 -0
  62. package/dist/src/server.js.map +1 -0
  63. package/dist/src/snapshot/formatter.d.ts +18 -0
  64. package/dist/src/snapshot/formatter.d.ts.map +1 -0
  65. package/dist/src/snapshot/formatter.js +86 -0
  66. package/dist/src/snapshot/formatter.js.map +1 -0
  67. package/dist/src/snapshot/ref-registry.d.ts +67 -0
  68. package/dist/src/snapshot/ref-registry.d.ts.map +1 -0
  69. package/dist/src/snapshot/ref-registry.js +169 -0
  70. package/dist/src/snapshot/ref-registry.js.map +1 -0
  71. package/dist/src/snapshot/snapshot-differ.d.ts +57 -0
  72. package/dist/src/snapshot/snapshot-differ.d.ts.map +1 -0
  73. package/dist/src/snapshot/snapshot-differ.js +153 -0
  74. package/dist/src/snapshot/snapshot-differ.js.map +1 -0
  75. package/dist/src/tools/app-tools.d.ts +71 -0
  76. package/dist/src/tools/app-tools.d.ts.map +1 -0
  77. package/dist/src/tools/app-tools.js +97 -0
  78. package/dist/src/tools/app-tools.js.map +1 -0
  79. package/dist/src/tools/device-tools.d.ts +53 -0
  80. package/dist/src/tools/device-tools.d.ts.map +1 -0
  81. package/dist/src/tools/device-tools.js +86 -0
  82. package/dist/src/tools/device-tools.js.map +1 -0
  83. package/dist/src/tools/ds-tools.d.ts +65 -0
  84. package/dist/src/tools/ds-tools.d.ts.map +1 -0
  85. package/dist/src/tools/ds-tools.js +314 -0
  86. package/dist/src/tools/ds-tools.js.map +1 -0
  87. package/dist/src/tools/interaction-tools.d.ts +248 -0
  88. package/dist/src/tools/interaction-tools.d.ts.map +1 -0
  89. package/dist/src/tools/interaction-tools.js +391 -0
  90. package/dist/src/tools/interaction-tools.js.map +1 -0
  91. package/dist/src/tools/metro-tools.d.ts +115 -0
  92. package/dist/src/tools/metro-tools.d.ts.map +1 -0
  93. package/dist/src/tools/metro-tools.js +270 -0
  94. package/dist/src/tools/metro-tools.js.map +1 -0
  95. package/dist/src/tools/navigation-tools.d.ts +36 -0
  96. package/dist/src/tools/navigation-tools.d.ts.map +1 -0
  97. package/dist/src/tools/navigation-tools.js +60 -0
  98. package/dist/src/tools/navigation-tools.js.map +1 -0
  99. package/dist/src/tools/screenshot-tools.d.ts +298 -0
  100. package/dist/src/tools/screenshot-tools.d.ts.map +1 -0
  101. package/dist/src/tools/screenshot-tools.js +565 -0
  102. package/dist/src/tools/screenshot-tools.js.map +1 -0
  103. package/dist/src/tools/snapshot-tools.d.ts +161 -0
  104. package/dist/src/tools/snapshot-tools.d.ts.map +1 -0
  105. package/dist/src/tools/snapshot-tools.js +479 -0
  106. package/dist/src/tools/snapshot-tools.js.map +1 -0
  107. package/dist/src/utils/image-preprocess.d.ts +49 -0
  108. package/dist/src/utils/image-preprocess.d.ts.map +1 -0
  109. package/dist/src/utils/image-preprocess.js +322 -0
  110. package/dist/src/utils/image-preprocess.js.map +1 -0
  111. package/dist/src/utils/retry.d.ts +21 -0
  112. package/dist/src/utils/retry.d.ts.map +1 -0
  113. package/dist/src/utils/retry.js +33 -0
  114. package/dist/src/utils/retry.js.map +1 -0
  115. package/dist/src/visual/comparator.d.ts +51 -0
  116. package/dist/src/visual/comparator.d.ts.map +1 -0
  117. package/dist/src/visual/comparator.js +119 -0
  118. package/dist/src/visual/comparator.js.map +1 -0
  119. package/dist/src/visual/layout-analyzer.d.ts +64 -0
  120. package/dist/src/visual/layout-analyzer.d.ts.map +1 -0
  121. package/dist/src/visual/layout-analyzer.js +198 -0
  122. package/dist/src/visual/layout-analyzer.js.map +1 -0
  123. package/dist/src/visual/screenshot.d.ts +17 -0
  124. package/dist/src/visual/screenshot.d.ts.map +1 -0
  125. package/dist/src/visual/screenshot.js +39 -0
  126. package/dist/src/visual/screenshot.js.map +1 -0
  127. package/docs/setup-guide.md +166 -210
  128. package/package.json +1 -1
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.diffSnapshots = diffSnapshots;
4
+ exports.formatDiff = formatDiff;
5
+ /**
6
+ * Content-based signature — used for element identity.
7
+ * Intentionally excludes position/size so moved elements are matched
8
+ * to their previous version rather than treated as add+remove.
9
+ */
10
+ function contentSignature(node) {
11
+ return [node.type, node.resourceId || "", node.text || "", node.label || ""].join("|");
12
+ }
13
+ /**
14
+ * Compute a diff between two snapshot trees.
15
+ *
16
+ * Identity matching: uses content signature (type + resourceId + text + label).
17
+ * Elements with matching content but different position are reported as "moved".
18
+ * Elements with matching content+position but different size are reported as "resized".
19
+ * Elements present in current but not previous are "added".
20
+ * Elements present in previous but not current are "removed".
21
+ */
22
+ function diffSnapshots(previous, current) {
23
+ const prevNodes = flattenTree(previous);
24
+ const currNodes = flattenTree(current);
25
+ const prevByContent = new Map();
26
+ for (const node of prevNodes) {
27
+ prevByContent.set(contentSignature(node), node);
28
+ }
29
+ const currByContent = new Map();
30
+ for (const node of currNodes) {
31
+ currByContent.set(contentSignature(node), node);
32
+ }
33
+ const added = [];
34
+ const removed = [];
35
+ const changed = [];
36
+ const moved = [];
37
+ const resized = [];
38
+ // Pass 1: find added, moved, resized, changed nodes
39
+ for (const [sig, currNode] of currByContent) {
40
+ const prevNode = prevByContent.get(sig);
41
+ if (!prevNode) {
42
+ added.push(currNode);
43
+ continue;
44
+ }
45
+ const posChanged = prevNode.bounds.x !== currNode.bounds.x ||
46
+ prevNode.bounds.y !== currNode.bounds.y;
47
+ const sizeChanged = prevNode.bounds.width !== currNode.bounds.width ||
48
+ prevNode.bounds.height !== currNode.bounds.height;
49
+ if (posChanged) {
50
+ moved.push({
51
+ node: currNode,
52
+ from: { x: prevNode.bounds.x, y: prevNode.bounds.y },
53
+ to: { x: currNode.bounds.x, y: currNode.bounds.y },
54
+ deltaX: currNode.bounds.x - prevNode.bounds.x,
55
+ deltaY: currNode.bounds.y - prevNode.bounds.y,
56
+ });
57
+ }
58
+ if (sizeChanged) {
59
+ resized.push({
60
+ node: currNode,
61
+ from: { width: prevNode.bounds.width, height: prevNode.bounds.height },
62
+ to: { width: currNode.bounds.width, height: currNode.bounds.height },
63
+ });
64
+ }
65
+ const changes = detectChanges(prevNode, currNode);
66
+ if (changes.length > 0) {
67
+ changed.push({ node: currNode, changes });
68
+ }
69
+ }
70
+ // Pass 2: find removed nodes
71
+ for (const [sig, node] of prevByContent) {
72
+ if (!currByContent.has(sig)) {
73
+ removed.push(node);
74
+ }
75
+ }
76
+ const structuralChange = added.length > prevNodes.length * 0.3 ||
77
+ removed.length > prevNodes.length * 0.3;
78
+ return { added, removed, changed, moved, resized, structuralChange };
79
+ }
80
+ /** Detect property-level changes between two nodes with the same identity */
81
+ function detectChanges(prev, curr) {
82
+ const changes = [];
83
+ if (prev.text !== curr.text) {
84
+ changes.push(`text: "${prev.text}" → "${curr.text}"`);
85
+ }
86
+ if (prev.value !== curr.value) {
87
+ changes.push(`value: "${prev.value}" → "${curr.value}"`);
88
+ }
89
+ if (prev.focused !== curr.focused) {
90
+ changes.push(`focused: ${prev.focused} → ${curr.focused}`);
91
+ }
92
+ if (prev.enabled !== curr.enabled) {
93
+ changes.push(`enabled: ${prev.enabled} → ${curr.enabled}`);
94
+ }
95
+ if (prev.label !== curr.label) {
96
+ changes.push(`label: "${prev.label}" → "${curr.label}"`);
97
+ }
98
+ return changes;
99
+ }
100
+ /** Flatten a tree into a list of all nodes */
101
+ function flattenTree(node) {
102
+ const result = [node];
103
+ for (const child of node.children) {
104
+ result.push(...flattenTree(child));
105
+ }
106
+ return result;
107
+ }
108
+ /** Format a diff for LLM consumption */
109
+ function formatDiff(diff) {
110
+ if (diff.structuralChange) {
111
+ return "[Major structural change — use full snapshot]";
112
+ }
113
+ const lines = [];
114
+ if (diff.added.length > 0) {
115
+ lines.push("ADDED:");
116
+ for (const node of diff.added) {
117
+ lines.push(` + ${node.type} ${node.text ? `"${node.text}"` : ""}`);
118
+ }
119
+ }
120
+ if (diff.removed.length > 0) {
121
+ lines.push("REMOVED:");
122
+ for (const node of diff.removed) {
123
+ lines.push(` - ${node.type} ${node.text ? `"${node.text}"` : ""}`);
124
+ }
125
+ }
126
+ if (diff.moved.length > 0) {
127
+ lines.push("MOVED:");
128
+ for (const m of diff.moved) {
129
+ const label = m.node.text ? `"${m.node.text}"` : m.node.type;
130
+ const dx = m.deltaX > 0 ? `+${m.deltaX}` : `${m.deltaX}`;
131
+ const dy = m.deltaY > 0 ? `+${m.deltaY}` : `${m.deltaY}`;
132
+ lines.push(` -> ${label} moved by (${dx}, ${dy})px`);
133
+ }
134
+ }
135
+ if (diff.resized.length > 0) {
136
+ lines.push("RESIZED:");
137
+ for (const r of diff.resized) {
138
+ const label = r.node.text ? `"${r.node.text}"` : r.node.type;
139
+ lines.push(` <> ${label}: ${r.from.width}x${r.from.height} → ${r.to.width}x${r.to.height}`);
140
+ }
141
+ }
142
+ if (diff.changed.length > 0) {
143
+ lines.push("CHANGED:");
144
+ for (const { node, changes } of diff.changed) {
145
+ lines.push(` ~ ${node.type} ${node.text ? `"${node.text}"` : ""}: ${changes.join(", ")}`);
146
+ }
147
+ }
148
+ if (lines.length === 0) {
149
+ return "[No changes detected]";
150
+ }
151
+ return lines.join("\n");
152
+ }
153
+ //# sourceMappingURL=snapshot-differ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot-differ.js","sourceRoot":"","sources":["../../../src/snapshot/snapshot-differ.ts"],"names":[],"mappings":";;AAqDA,sCA4EC;AAmCD,gCAuDC;AAxLD;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,IAAkB;IAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzF,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,aAAa,CAC3B,QAAsB,EACtB,OAAqB;IAErB,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,GAAG,EAAwB,CAAC;IACtD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,OAAO,GAAqD,EAAE,CAAC;IACrE,MAAM,KAAK,GAA0B,EAAE,CAAC;IACxC,MAAM,OAAO,GAA4B,EAAE,CAAC;IAE5C,oDAAoD;IACpD,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GACd,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAE1C,MAAM,WAAW,GACf,QAAQ,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,MAAM,CAAC,KAAK;YAC/C,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAEpD,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gBACpD,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;gBAClD,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC7C,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;aAC9C,CAAC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;gBACtE,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;aACrE,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GACpB,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG;QACrC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC;IAE1C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;AACvE,CAAC;AAED,6EAA6E;AAC7E,SAAS,aAAa,CAAC,IAAkB,EAAE,IAAkB;IAC3D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8CAA8C;AAC9C,SAAS,WAAW,CAAC,IAAkB;IACrC,MAAM,MAAM,GAAmB,CAAC,IAAI,CAAC,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wCAAwC;AACxC,SAAgB,UAAU,CAAC,IAAkB;IAC3C,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,OAAO,+CAA+C,CAAC;IACzD,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7D,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACzD,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7D,KAAK,CAAC,IAAI,CACR,QAAQ,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CACjF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CACR,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC/E,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { z } from "zod";
2
+ import type { DeviceManager } from "../platform/device-manager.js";
3
+ export declare const appToolSchemas: {
4
+ devlens_launch_app: {
5
+ description: string;
6
+ parameters: z.ZodObject<{
7
+ appId: z.ZodString;
8
+ }, "strip", z.ZodTypeAny, {
9
+ appId: string;
10
+ }, {
11
+ appId: string;
12
+ }>;
13
+ };
14
+ devlens_terminate_app: {
15
+ description: string;
16
+ parameters: z.ZodObject<{
17
+ appId: z.ZodString;
18
+ }, "strip", z.ZodTypeAny, {
19
+ appId: string;
20
+ }, {
21
+ appId: string;
22
+ }>;
23
+ };
24
+ devlens_install_app: {
25
+ description: string;
26
+ parameters: z.ZodObject<{
27
+ path: z.ZodString;
28
+ }, "strip", z.ZodTypeAny, {
29
+ path: string;
30
+ }, {
31
+ path: string;
32
+ }>;
33
+ };
34
+ devlens_list_apps: {
35
+ description: string;
36
+ parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
37
+ };
38
+ };
39
+ export declare function createAppToolHandlers(deviceManager: DeviceManager): {
40
+ devlens_launch_app: (params: {
41
+ appId: string;
42
+ }) => Promise<{
43
+ content: {
44
+ type: "text";
45
+ text: string;
46
+ }[];
47
+ }>;
48
+ devlens_terminate_app: (params: {
49
+ appId: string;
50
+ }) => Promise<{
51
+ content: {
52
+ type: "text";
53
+ text: string;
54
+ }[];
55
+ }>;
56
+ devlens_install_app: (params: {
57
+ path: string;
58
+ }) => Promise<{
59
+ content: {
60
+ type: "text";
61
+ text: string;
62
+ }[];
63
+ }>;
64
+ devlens_list_apps: () => Promise<{
65
+ content: {
66
+ type: "text";
67
+ text: string;
68
+ }[];
69
+ }>;
70
+ };
71
+ //# sourceMappingURL=app-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/app-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC1B,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,aAAa;iCAE3B;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;;;;;;oCAcd;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;;;;;;kCAcnB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;EA2CvD"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.appToolSchemas = void 0;
4
+ exports.createAppToolHandlers = createAppToolHandlers;
5
+ const zod_1 = require("zod");
6
+ exports.appToolSchemas = {
7
+ devlens_launch_app: {
8
+ description: "Launch an app on the device by its bundle ID (iOS) or package name (Android). The app must already be installed.",
9
+ parameters: zod_1.z.object({
10
+ appId: zod_1.z
11
+ .string()
12
+ .describe("Bundle ID (iOS, e.g., com.example.app) or package name (Android, e.g., com.example.app)"),
13
+ }),
14
+ },
15
+ devlens_terminate_app: {
16
+ description: "Force stop a running app on the device.",
17
+ parameters: zod_1.z.object({
18
+ appId: zod_1.z.string().describe("Bundle ID or package name of the app to stop"),
19
+ }),
20
+ },
21
+ devlens_install_app: {
22
+ description: "Install an app from a local file path. Supports .apk (Android), .app/.ipa (iOS).",
23
+ parameters: zod_1.z.object({
24
+ path: zod_1.z
25
+ .string()
26
+ .describe("Local file path to the app binary (.apk, .app, or .ipa)"),
27
+ }),
28
+ },
29
+ devlens_list_apps: {
30
+ description: "List all third-party apps installed on the device. Returns app IDs and names.",
31
+ parameters: zod_1.z.object({}),
32
+ },
33
+ };
34
+ function createAppToolHandlers(deviceManager) {
35
+ return {
36
+ devlens_launch_app: async (params) => {
37
+ const device = await deviceManager.getDevice();
38
+ await device.launchApp(params.appId);
39
+ return {
40
+ content: [
41
+ {
42
+ type: "text",
43
+ text: `Launched app: ${params.appId}`,
44
+ },
45
+ ],
46
+ };
47
+ },
48
+ devlens_terminate_app: async (params) => {
49
+ const device = await deviceManager.getDevice();
50
+ await device.terminateApp(params.appId);
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: `Terminated app: ${params.appId}`,
56
+ },
57
+ ],
58
+ };
59
+ },
60
+ devlens_install_app: async (params) => {
61
+ const device = await deviceManager.getDevice();
62
+ await device.installApp(params.path);
63
+ return {
64
+ content: [
65
+ {
66
+ type: "text",
67
+ text: `Installed app from: ${params.path}`,
68
+ },
69
+ ],
70
+ };
71
+ },
72
+ devlens_list_apps: async () => {
73
+ const device = await deviceManager.getDevice();
74
+ const apps = await device.listApps();
75
+ if (apps.length === 0) {
76
+ return {
77
+ content: [
78
+ {
79
+ type: "text",
80
+ text: "No third-party apps found on the device.",
81
+ },
82
+ ],
83
+ };
84
+ }
85
+ const lines = apps.map((app) => `${app.name} — ${app.appId}${app.isRunning ? " (running)" : ""}`);
86
+ return {
87
+ content: [
88
+ {
89
+ type: "text",
90
+ text: `Installed apps (${apps.length}):\n\n${lines.join("\n")}`,
91
+ },
92
+ ],
93
+ };
94
+ },
95
+ };
96
+ }
97
+ //# sourceMappingURL=app-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-tools.js","sourceRoot":"","sources":["../../../src/tools/app-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { z } from "zod";
2
+ import type { DeviceManager } from "../platform/device-manager.js";
3
+ export declare const deviceToolSchemas: {
4
+ devlens_list_devices: {
5
+ description: string;
6
+ parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
7
+ };
8
+ devlens_device_info: {
9
+ description: string;
10
+ parameters: z.ZodObject<{
11
+ deviceId: z.ZodOptional<z.ZodString>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ deviceId?: string | undefined;
14
+ }, {
15
+ deviceId?: string | undefined;
16
+ }>;
17
+ };
18
+ devlens_set_orientation: {
19
+ description: string;
20
+ parameters: z.ZodObject<{
21
+ orientation: z.ZodEnum<["portrait", "landscape"]>;
22
+ }, "strip", z.ZodTypeAny, {
23
+ orientation: "portrait" | "landscape";
24
+ }, {
25
+ orientation: "portrait" | "landscape";
26
+ }>;
27
+ };
28
+ };
29
+ export declare function createDeviceToolHandlers(deviceManager: DeviceManager): {
30
+ devlens_list_devices: () => Promise<{
31
+ content: {
32
+ type: "text";
33
+ text: string;
34
+ }[];
35
+ }>;
36
+ devlens_device_info: (params: {
37
+ deviceId?: string;
38
+ }) => Promise<{
39
+ content: {
40
+ type: "text";
41
+ text: string;
42
+ }[];
43
+ }>;
44
+ devlens_set_orientation: (params: {
45
+ orientation: "portrait" | "landscape";
46
+ }) => Promise<{
47
+ content: {
48
+ type: "text";
49
+ text: string;
50
+ }[];
51
+ }>;
52
+ };
53
+ //# sourceMappingURL=device-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/device-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CAwB7B,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,aAAa;;;;;;;kCA8B7B;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;sCAqBjB;QACtC,WAAW,EAAE,UAAU,GAAG,WAAW,CAAC;KACvC;;;;;;EAaJ"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deviceToolSchemas = void 0;
4
+ exports.createDeviceToolHandlers = createDeviceToolHandlers;
5
+ const zod_1 = require("zod");
6
+ exports.deviceToolSchemas = {
7
+ devlens_list_devices: {
8
+ description: "List all running iOS Simulators and Android Emulators. Returns device IDs, names, platforms, and OS versions.",
9
+ parameters: zod_1.z.object({}),
10
+ },
11
+ devlens_device_info: {
12
+ description: "Get detailed information about a specific device: screen size, OS version, orientation. If no deviceId is provided, uses the first available device.",
13
+ parameters: zod_1.z.object({
14
+ deviceId: zod_1.z
15
+ .string()
16
+ .optional()
17
+ .describe("Device ID from devlens_list_devices. Optional."),
18
+ }),
19
+ },
20
+ devlens_set_orientation: {
21
+ description: "Set the device orientation to portrait or landscape.",
22
+ parameters: zod_1.z.object({
23
+ orientation: zod_1.z
24
+ .enum(["portrait", "landscape"])
25
+ .describe("Target orientation"),
26
+ }),
27
+ },
28
+ };
29
+ function createDeviceToolHandlers(deviceManager) {
30
+ return {
31
+ devlens_list_devices: async () => {
32
+ const devices = await deviceManager.discoverDevices();
33
+ if (devices.length === 0) {
34
+ return {
35
+ content: [
36
+ {
37
+ type: "text",
38
+ text: "No running simulators or emulators found.\n\nTo start a device:\n- Android: Open Android Studio → Device Manager → Start an emulator\n- iOS: Open Xcode → Window → Devices and Simulators → Boot a simulator",
39
+ },
40
+ ],
41
+ };
42
+ }
43
+ const lines = devices.map((d) => `${d.isBooted ? "●" : "○"} ${d.name} (${d.platform}, ${d.osVersion}) — id: ${d.id}`);
44
+ return {
45
+ content: [
46
+ {
47
+ type: "text",
48
+ text: `Found ${devices.length} device(s):\n\n${lines.join("\n")}`,
49
+ },
50
+ ],
51
+ };
52
+ },
53
+ devlens_device_info: async (params) => {
54
+ const device = await deviceManager.getDevice(params.deviceId);
55
+ const info = await device.getInfo();
56
+ return {
57
+ content: [
58
+ {
59
+ type: "text",
60
+ text: [
61
+ `Device: ${info.name}`,
62
+ `Platform: ${info.platform}`,
63
+ `OS Version: ${info.osVersion}`,
64
+ `Screen: ${info.screenWidth}x${info.screenHeight}`,
65
+ `Orientation: ${info.orientation}`,
66
+ `ID: ${info.id}`,
67
+ ].join("\n"),
68
+ },
69
+ ],
70
+ };
71
+ },
72
+ devlens_set_orientation: async (params) => {
73
+ const device = await deviceManager.getDevice();
74
+ await device.setOrientation(params.orientation);
75
+ return {
76
+ content: [
77
+ {
78
+ type: "text",
79
+ text: `Orientation set to ${params.orientation}.`,
80
+ },
81
+ ],
82
+ };
83
+ },
84
+ };
85
+ }
86
+ //# sourceMappingURL=device-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-tools.js","sourceRoot":"","sources":["../../../src/tools/device-tools.ts"],"names":[],"mappings":";;;AA6BA,4DAkEC;AA/FD,6BAAwB;AAGX,QAAA,iBAAiB,GAAG;IAC/B,oBAAoB,EAAE;QACpB,WAAW,EACT,+GAA+G;QACjH,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC;KACzB;IACD,mBAAmB,EAAE;QACnB,WAAW,EACT,sJAAsJ;QACxJ,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;YACnB,QAAQ,EAAE,OAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;SAC9D,CAAC;KACH;IACD,uBAAuB,EAAE;QACvB,WAAW,EAAE,sDAAsD;QACnE,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC;YACnB,WAAW,EAAE,OAAC;iBACX,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;iBAC/B,QAAQ,CAAC,oBAAoB,CAAC;SAClC,CAAC;KACH;CACF,CAAC;AAEF,SAAgB,wBAAwB,CAAC,aAA4B;IACnE,OAAO;QACL,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAC/B,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,eAAe,EAAE,CAAC;YACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,8MAA8M;yBACrN;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CACvB,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,EAAE,EAAE,CACtF,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,SAAS,OAAO,CAAC,MAAM,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBAClE;iBACF;aACF,CAAC;QACJ,CAAC;QAED,mBAAmB,EAAE,KAAK,EAAE,MAA6B,EAAE,EAAE;YAC3D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAEpC,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;4BACJ,WAAW,IAAI,CAAC,IAAI,EAAE;4BACtB,aAAa,IAAI,CAAC,QAAQ,EAAE;4BAC5B,eAAe,IAAI,CAAC,SAAS,EAAE;4BAC/B,WAAW,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;4BAClD,gBAAgB,IAAI,CAAC,WAAW,EAAE;4BAClC,OAAO,IAAI,CAAC,EAAE,EAAE;yBACjB,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb;iBACF;aACF,CAAC;QACJ,CAAC;QAED,uBAAuB,EAAE,KAAK,EAAE,MAE/B,EAAE,EAAE;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,CAAC;YAC/C,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAChD,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,sBAAsB,MAAM,CAAC,WAAW,GAAG;qBAClD;iBACF;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { z } from "zod";
2
+ import type { DesignSystemConfig } from "../config/devlens-config.js";
3
+ /**
4
+ * Design System Context tool.
5
+ *
6
+ * When devlens.config.json is configured with a designSystem block,
7
+ * this tool scans the consumer project and returns:
8
+ * - Design token values (colors, spacing, typography, etc.)
9
+ * - TypeScript prop interfaces for DS components
10
+ * - Component usage patterns found in the codebase
11
+ *
12
+ * The AI uses this context to write DS-compliant code when fixing
13
+ * differences found by devlens_compare_with_figma.
14
+ */
15
+ export interface TokenEntry {
16
+ name: string;
17
+ value: string;
18
+ group: string;
19
+ }
20
+ export interface ComponentUsagePattern {
21
+ componentName: string;
22
+ importedFrom: string;
23
+ usageCount: number;
24
+ /** prop name → distinct values seen in the codebase */
25
+ sampleProps: Record<string, string[]>;
26
+ sourceFiles: string[];
27
+ }
28
+ export declare const dsToolSchemas: {
29
+ devlens_ds_context: {
30
+ description: string;
31
+ parameters: z.ZodObject<{
32
+ includeTokens: z.ZodDefault<z.ZodBoolean>;
33
+ includeComponents: z.ZodDefault<z.ZodBoolean>;
34
+ includeInterfaces: z.ZodDefault<z.ZodBoolean>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ includeTokens: boolean;
37
+ includeComponents: boolean;
38
+ includeInterfaces: boolean;
39
+ }, {
40
+ includeTokens?: boolean | undefined;
41
+ includeComponents?: boolean | undefined;
42
+ includeInterfaces?: boolean | undefined;
43
+ }>;
44
+ };
45
+ };
46
+ export declare function createDsToolHandlers(dsConfig: DesignSystemConfig | undefined): {
47
+ devlens_ds_context: (params: {
48
+ includeTokens: boolean;
49
+ includeComponents: boolean;
50
+ includeInterfaces: boolean;
51
+ }) => Promise<{
52
+ content: {
53
+ type: "text";
54
+ text: string;
55
+ }[];
56
+ isError: boolean;
57
+ } | {
58
+ content: {
59
+ type: "text";
60
+ text: string;
61
+ }[];
62
+ isError?: undefined;
63
+ }>;
64
+ };
65
+ //# sourceMappingURL=ds-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ds-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/ds-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAEtE;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAID,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;CAmBzB,CAAC;AAsQF,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,SAAS;iCAEtC;QACjC,aAAa,EAAE,OAAO,CAAC;QACvB,iBAAiB,EAAE,OAAO,CAAC;QAC3B,iBAAiB,EAAE,OAAO,CAAC;KAC5B;;;;;;;;;;;;;EAsEJ"}