@ethlete/cli 3.0.0-next.24 → 3.0.0-next.26

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 (194) hide show
  1. package/CHANGELOG.md +126 -0
  2. package/design/define-call.ts +69 -0
  3. package/design/define-part.ts +43 -9
  4. package/design/embed-page.ts +37 -4
  5. package/design/icon-sheet.ts +151 -0
  6. package/design/logo-sheet.ts +52 -0
  7. package/design/mark-part.ts +79 -2
  8. package/design/motion-drive.ts +215 -0
  9. package/design/motion-runtime.ts +224 -5
  10. package/design/motion-tokens.ts +177 -0
  11. package/design/spring.ts +53 -0
  12. package/design/token-sheet.ts +87 -0
  13. package/design/web/frame-fill.ts +4 -0
  14. package/design/web/frame-scheme.ts +44 -0
  15. package/design/web/frame.ts +239 -31
  16. package/package.json +1 -1
  17. package/src/lib/design/calls-tsconfig.d.ts +2 -0
  18. package/src/lib/design/calls-tsconfig.js +11 -5
  19. package/src/lib/design/calls-tsconfig.js.map +1 -1
  20. package/src/lib/design/check.d.ts +1 -0
  21. package/src/lib/design/check.js +62 -6
  22. package/src/lib/design/check.js.map +1 -1
  23. package/src/lib/design/contact-sheet.d.ts +9 -0
  24. package/src/lib/design/contact-sheet.js +38 -4
  25. package/src/lib/design/contact-sheet.js.map +1 -1
  26. package/src/lib/design/design-command.js +56 -7
  27. package/src/lib/design/design-command.js.map +1 -1
  28. package/src/lib/design/draw-ledger.d.ts +36 -0
  29. package/src/lib/design/draw-ledger.js +52 -0
  30. package/src/lib/design/draw-ledger.js.map +1 -0
  31. package/src/lib/design/force-interactions.d.ts +2 -1
  32. package/src/lib/design/force-interactions.js +7 -4
  33. package/src/lib/design/force-interactions.js.map +1 -1
  34. package/src/lib/design/mcp-command.d.ts +81 -0
  35. package/src/lib/design/mcp-command.js +422 -0
  36. package/src/lib/design/mcp-command.js.map +1 -0
  37. package/src/lib/design/motion-command.d.ts +71 -0
  38. package/src/lib/design/motion-command.js +308 -0
  39. package/src/lib/design/motion-command.js.map +1 -0
  40. package/src/lib/design/motion-endpoint.d.ts +61 -0
  41. package/src/lib/design/motion-endpoint.js +133 -0
  42. package/src/lib/design/motion-endpoint.js.map +1 -0
  43. package/src/lib/design/motion-flow.d.ts +5 -0
  44. package/src/lib/design/motion-flow.js +29 -0
  45. package/src/lib/design/motion-flow.js.map +1 -0
  46. package/src/lib/design/motion-shot.d.ts +43 -0
  47. package/src/lib/design/motion-shot.js +97 -0
  48. package/src/lib/design/motion-shot.js.map +1 -0
  49. package/src/lib/design/paths.d.ts +14 -0
  50. package/src/lib/design/paths.js +50 -1
  51. package/src/lib/design/paths.js.map +1 -1
  52. package/src/lib/design/ready-shots.d.ts +7 -0
  53. package/src/lib/design/ready-shots.js +22 -1
  54. package/src/lib/design/ready-shots.js.map +1 -1
  55. package/src/lib/design/render-packages.d.ts +14 -0
  56. package/src/lib/design/render-packages.js +18 -3
  57. package/src/lib/design/render-packages.js.map +1 -1
  58. package/src/lib/design/render-worker.js +1 -0
  59. package/src/lib/design/render-worker.js.map +1 -1
  60. package/src/lib/design/render.js +3 -3
  61. package/src/lib/design/render.js.map +1 -1
  62. package/src/lib/design/serve.d.ts +2 -2
  63. package/src/lib/design/serve.js +191 -21
  64. package/src/lib/design/serve.js.map +1 -1
  65. package/src/lib/design/shot-command.d.ts +13 -4
  66. package/src/lib/design/shot-command.js +30 -24
  67. package/src/lib/design/shot-command.js.map +1 -1
  68. package/src/lib/design/shot-store.d.ts +24 -0
  69. package/src/lib/design/shot-store.js +120 -0
  70. package/src/lib/design/shot-store.js.map +1 -0
  71. package/src/lib/design/shot.d.ts +37 -1
  72. package/src/lib/design/shot.js +185 -34
  73. package/src/lib/design/shot.js.map +1 -1
  74. package/src/lib/design/sketch-command.js +197 -51
  75. package/src/lib/design/sketch-command.js.map +1 -1
  76. package/src/lib/design/ssr-shims.d.ts +2 -0
  77. package/src/lib/design/ssr-shims.js +12 -1
  78. package/src/lib/design/ssr-shims.js.map +1 -1
  79. package/src/lib/design/studio-api.d.ts +31 -0
  80. package/src/lib/design/studio-api.js +118 -1
  81. package/src/lib/design/studio-api.js.map +1 -1
  82. package/src/lib/design/system/check-system.d.ts +6 -2
  83. package/src/lib/design/system/check-system.js +102 -20
  84. package/src/lib/design/system/check-system.js.map +1 -1
  85. package/src/lib/design/system/colour.d.ts +4 -1
  86. package/src/lib/design/system/colour.js +54 -2
  87. package/src/lib/design/system/colour.js.map +1 -1
  88. package/src/lib/design/system/complete-command.d.ts +1 -1
  89. package/src/lib/design/system/complete-command.js +80 -6
  90. package/src/lib/design/system/complete-command.js.map +1 -1
  91. package/src/lib/design/system/complete.d.ts +172 -9
  92. package/src/lib/design/system/complete.js +792 -167
  93. package/src/lib/design/system/complete.js.map +1 -1
  94. package/src/lib/design/system/contrast-check.d.ts +6 -1
  95. package/src/lib/design/system/contrast-check.js +167 -12
  96. package/src/lib/design/system/contrast-check.js.map +1 -1
  97. package/src/lib/design/system/drawn-open-points.d.ts +16 -0
  98. package/src/lib/design/system/drawn-open-points.js +43 -0
  99. package/src/lib/design/system/drawn-open-points.js.map +1 -0
  100. package/src/lib/design/system/exceptions.d.ts +59 -0
  101. package/src/lib/design/system/exceptions.js +132 -0
  102. package/src/lib/design/system/exceptions.js.map +1 -0
  103. package/src/lib/design/system/flows/flow.d.ts +3 -0
  104. package/src/lib/design/system/flows/flow.js +5 -3
  105. package/src/lib/design/system/flows/flow.js.map +1 -1
  106. package/src/lib/design/system/handoff.d.ts +11 -0
  107. package/src/lib/design/system/handoff.js +30 -0
  108. package/src/lib/design/system/handoff.js.map +1 -0
  109. package/src/lib/design/system/inventory-approval.d.ts +41 -0
  110. package/src/lib/design/system/inventory-approval.js +71 -0
  111. package/src/lib/design/system/inventory-approval.js.map +1 -0
  112. package/src/lib/design/system/inventory.d.ts +65 -0
  113. package/src/lib/design/system/inventory.js +168 -0
  114. package/src/lib/design/system/inventory.js.map +1 -0
  115. package/src/lib/design/system/list-system.d.ts +4 -1
  116. package/src/lib/design/system/list-system.js +11 -3
  117. package/src/lib/design/system/list-system.js.map +1 -1
  118. package/src/lib/design/system/open-points.d.ts +101 -0
  119. package/src/lib/design/system/open-points.js +156 -0
  120. package/src/lib/design/system/open-points.js.map +1 -0
  121. package/src/lib/design/system/part-ready.d.ts +52 -0
  122. package/src/lib/design/system/part-ready.js +101 -0
  123. package/src/lib/design/system/part-ready.js.map +1 -0
  124. package/src/lib/design/system/read-open-points.d.ts +27 -0
  125. package/src/lib/design/system/read-open-points.js +81 -0
  126. package/src/lib/design/system/read-open-points.js.map +1 -0
  127. package/src/lib/design/system/ready-command.d.ts +7 -0
  128. package/src/lib/design/system/ready-command.js +65 -0
  129. package/src/lib/design/system/ready-command.js.map +1 -0
  130. package/src/lib/design/system/render-check.d.ts +2 -0
  131. package/src/lib/design/system/render-check.js +216 -32
  132. package/src/lib/design/system/render-check.js.map +1 -1
  133. package/src/lib/design/system/resolve-product.d.ts +4 -4
  134. package/src/lib/design/system/resolve-product.js +22 -7
  135. package/src/lib/design/system/resolve-product.js.map +1 -1
  136. package/src/lib/design/system/rules/implements.d.ts +7 -0
  137. package/src/lib/design/system/rules/implements.js +43 -0
  138. package/src/lib/design/system/rules/implements.js.map +1 -0
  139. package/src/lib/design/system/rules/motion.d.ts +2 -0
  140. package/src/lib/design/system/rules/motion.js +26 -1
  141. package/src/lib/design/system/rules/motion.js.map +1 -1
  142. package/src/lib/design/system/rules/option-values.d.ts +15 -0
  143. package/src/lib/design/system/rules/option-values.js +145 -0
  144. package/src/lib/design/system/rules/option-values.js.map +1 -0
  145. package/src/lib/design/system/rules/stale-replace.js +80 -3
  146. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  147. package/src/lib/design/system/rules/token-selectors.js +1 -1
  148. package/src/lib/design/system/rules/token-selectors.js.map +1 -1
  149. package/src/lib/design/system/sketch/baseline.d.ts +11 -2
  150. package/src/lib/design/system/sketch/baseline.js +4 -2
  151. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  152. package/src/lib/design/system/sketch/check-sketches.d.ts +1 -0
  153. package/src/lib/design/system/sketch/check-sketches.js +4 -2
  154. package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
  155. package/src/lib/design/system/sketch/host-edit.d.ts +4 -0
  156. package/src/lib/design/system/sketch/host-edit.js +68 -0
  157. package/src/lib/design/system/sketch/host-edit.js.map +1 -0
  158. package/src/lib/design/system/sketch/merge.d.ts +3 -2
  159. package/src/lib/design/system/sketch/merge.js +79 -12
  160. package/src/lib/design/system/sketch/merge.js.map +1 -1
  161. package/src/lib/design/system/sketch/merged-parts.d.ts +11 -1
  162. package/src/lib/design/system/sketch/merged-parts.js +24 -3
  163. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  164. package/src/lib/design/system/sketch/no-visible-change.d.ts +6 -0
  165. package/src/lib/design/system/sketch/no-visible-change.js +25 -1
  166. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  167. package/src/lib/design/system/sketch/overlay.js +11 -3
  168. package/src/lib/design/system/sketch/overlay.js.map +1 -1
  169. package/src/lib/design/system/sketch/part-definition.d.ts +36 -0
  170. package/src/lib/design/system/sketch/part-definition.js +56 -2
  171. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  172. package/src/lib/design/system/sketch/sketch.d.ts +47 -0
  173. package/src/lib/design/system/sketch/sketch.js +137 -44
  174. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  175. package/src/lib/design/system/sketch/unchanged-states.d.ts +4 -1
  176. package/src/lib/design/system/sketch/unchanged-states.js +9 -5
  177. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  178. package/src/lib/design/system/sketch/unused-closure.d.ts +12 -0
  179. package/src/lib/design/system/sketch/unused-closure.js +195 -0
  180. package/src/lib/design/system/sketch/unused-closure.js.map +1 -0
  181. package/src/lib/design/system/sketch/unused-files.d.ts +1 -1
  182. package/src/lib/design/system/sketch/unused-files.js +6 -3
  183. package/src/lib/design/system/sketch/unused-files.js.map +1 -1
  184. package/src/lib/design/system/system-modules.js +6 -9
  185. package/src/lib/design/system/system-modules.js.map +1 -1
  186. package/src/lib/design/system/system-tsconfig.d.ts +2 -1
  187. package/src/lib/design/system/system-tsconfig.js +10 -6
  188. package/src/lib/design/system/system-tsconfig.js.map +1 -1
  189. package/src/lib/design/system/ts-source.d.ts +3 -0
  190. package/src/lib/design/system/ts-source.js +21 -4
  191. package/src/lib/design/system/ts-source.js.map +1 -1
  192. package/src/lib/design/thumb.d.ts +31 -4
  193. package/src/lib/design/thumb.js +105 -40
  194. package/src/lib/design/thumb.js.map +1 -1
@@ -0,0 +1,422 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.designMcp = exports.cliRunnerOf = exports.mcpAnswerOf = exports.toolArgvOf = exports.MCP_TOOLS = exports.MCP_PROTOCOL_VERSION = exports.MCP_USAGE = void 0;
13
+ const child_process_1 = require("child_process");
14
+ const fs_1 = require("fs");
15
+ const path_1 = require("path");
16
+ const readline_1 = require("readline");
17
+ const paths_1 = require("./paths");
18
+ const stamp_1 = require("./stamp");
19
+ exports.MCP_USAGE = 'mcp';
20
+ exports.MCP_PROTOCOL_VERSION = '2025-06-18';
21
+ const BY = {
22
+ name: 'by',
23
+ flag: '--by',
24
+ description: 'The exact model id of the agent that writes, e.g. claude-opus-5-5.',
25
+ required: true,
26
+ };
27
+ const PART = { name: 'part', description: 'The part, as <layer>/<name>.', required: true };
28
+ const PRODUCT = {
29
+ name: 'product',
30
+ flag: '--product',
31
+ description: 'The product. Optional when the workspace has only one.',
32
+ };
33
+ const CALL = { name: 'call', flag: '--call', description: 'The call slug, e.g. studio/01-workbench.' };
34
+ const VARIANT = { name: 'variant', flag: '--variant', description: 'The variant key of the call.' };
35
+ const variantFileOf = (options) => (0, path_1.resolve)((0, paths_1.callsRootOf)(options.target), options.call, `variant-${options.variant}.ts`);
36
+ const frameBaseOf = (target) => {
37
+ var _a;
38
+ const config = (0, paths_1.readConfig)(target);
39
+ return (_a = process.env['DE_URL']) !== null && _a !== void 0 ? _a : `http://localhost:${config ? (0, paths_1.portOf)(config) : paths_1.DEFAULT_PORT}`;
40
+ };
41
+ const readCall = (args, context) => {
42
+ var _a, _b;
43
+ const call = (_a = args['call']) !== null && _a !== void 0 ? _a : '';
44
+ const variant = (_b = args['variant']) !== null && _b !== void 0 ? _b : '';
45
+ const dir = (0, path_1.resolve)((0, paths_1.callsRootOf)(context.target), call);
46
+ const callFile = (0, path_1.resolve)(dir, 'call.ts');
47
+ const fixtureFile = (0, path_1.resolve)(dir, 'fixture.ts');
48
+ if (!(0, fs_1.existsSync)(callFile))
49
+ return { content: [{ type: 'text', text: `${callFile} does not exist.` }], isError: true };
50
+ const search = new URLSearchParams({ call, variant });
51
+ return {
52
+ content: [
53
+ {
54
+ type: 'text',
55
+ text: [
56
+ `The call: ${call}`,
57
+ `The variant under study: ${variant}`,
58
+ `The file you draw into: ${variantFileOf({ target: context.target, call, variant })}`,
59
+ `Its frame: ${frameBaseOf(context.target)}/frame.html?${search}`,
60
+ '',
61
+ (0, fs_1.readFileSync)(callFile, 'utf8'),
62
+ ].join('\n'),
63
+ },
64
+ {
65
+ type: 'text',
66
+ text: (0, fs_1.existsSync)(fixtureFile)
67
+ ? `fixture.ts, the data every variant draws. Never change it:\n\n${(0, fs_1.readFileSync)(fixtureFile, 'utf8')}`
68
+ : `The call ${call} carries no fixture.ts.`,
69
+ },
70
+ ],
71
+ isError: false,
72
+ };
73
+ };
74
+ const callCheckArgvOf = (args, context) => {
75
+ const call = args['call'];
76
+ const variant = args['variant'];
77
+ if (typeof call !== 'string' || call === '')
78
+ return [];
79
+ return [
80
+ '--tsconfig',
81
+ ...(typeof variant === 'string' && variant !== ''
82
+ ? ['--lint', variantFileOf({ target: context.target, call, variant })]
83
+ : []),
84
+ ...(context.receipt ? ['--receipt', context.receipt] : []),
85
+ ];
86
+ };
87
+ const SIZE = [
88
+ { name: 'preset', flag: '--preset', description: 'A preset of the product, e.g. phone.' },
89
+ { name: 'width', flag: '--width', description: 'A width in px instead of a preset.', type: 'integer' },
90
+ { name: 'scale', flag: '--scale', description: 'The device scale, 1 to 4.', type: 'integer' },
91
+ { name: 'surface', flag: '--surface', description: 'The surface theme to draw on.' },
92
+ { name: 'color', flag: '--color', description: 'The colour theme to draw with.' },
93
+ {
94
+ name: 'scheme',
95
+ flag: '--scheme',
96
+ description: 'The colour scheme to draw in, light or dark; a surface theme alone does not switch it.',
97
+ },
98
+ ];
99
+ /** The tools of `et design mcp`: each runs the `et design` command of the same name. */
100
+ exports.MCP_TOOLS = [
101
+ {
102
+ name: 'parts',
103
+ description: "List each product's parts as JSON: origin, note, states, widths, presets and problems.",
104
+ command: ['system', '--json'],
105
+ },
106
+ {
107
+ name: 'call',
108
+ description: 'Read a call before you draw a variant of it: call.ts, fixture.ts (the data every variant draws, never change ' +
109
+ 'it), the variant file you draw into and the URL of its frame.',
110
+ command: [],
111
+ values: [
112
+ Object.assign(Object.assign({}, CALL), { required: true }),
113
+ Object.assign(Object.assign({}, VARIANT), { required: true }),
114
+ ],
115
+ read: readCall,
116
+ },
117
+ {
118
+ name: 'check',
119
+ description: "Check a product's design system, or every product without one. With a call, lint its variant, type-check " +
120
+ 'the calls and render the call in a browser instead: run it after every edit of a variant. Exits with an ' +
121
+ 'error on findings.',
122
+ command: ['check'],
123
+ values: [CALL, VARIANT],
124
+ extra: callCheckArgvOf,
125
+ },
126
+ {
127
+ name: 'shot',
128
+ description: 'Draw the states of a part, the same way as the Studio screenshots, and return the contact sheet image.',
129
+ command: ['shot'],
130
+ positional: [PART],
131
+ values: [
132
+ { name: 'state', flag: '--state', description: 'The states to draw, a comma list. All states without it.' },
133
+ { name: 'interaction', flag: '--interaction', description: 'An interaction to force, e.g. hover.' },
134
+ ...SIZE,
135
+ ],
136
+ switches: [{ name: 'variants', flag: '--variants', description: "Draw every variant of the part's open sketch." }],
137
+ },
138
+ {
139
+ name: 'motion_shots',
140
+ description: 'Draw a motion of a part at each keyframe time, in full and reduced motion. Returns the contact sheet image and the JSON of its tracks.',
141
+ command: ['motion', 'shots'],
142
+ positional: [PART, { name: 'motion', description: 'The motion name of the part.', required: true }],
143
+ values: [
144
+ { name: 'variant', flag: '--variant', description: 'A variant of the open sketch on the part.' },
145
+ { name: 'mode', flag: '--mode', description: 'full or reduced. Both without it.' },
146
+ ...SIZE,
147
+ ],
148
+ },
149
+ {
150
+ name: 'sketch_new',
151
+ description: 'Open a sketch on a part, new or existing. Each variant starts as a copy of the part.',
152
+ command: ['sketch', 'new'],
153
+ positional: [PART],
154
+ values: [
155
+ { name: 'variants', flag: '--variants', description: 'The variant keys, a comma list: a,b.', required: true },
156
+ { name: 'like', flag: '--like', description: 'Start each variant as a copy of this part instead.' },
157
+ { name: 'round', flag: '--round', description: 'The title of the first round.' },
158
+ { name: 'note', flag: '--note', description: 'What the sketch tries.' },
159
+ BY,
160
+ ],
161
+ },
162
+ {
163
+ name: 'sketch_report',
164
+ description: 'Tell Studio what you build on a variant now, e.g. "phone, outline state".',
165
+ command: ['sketch', 'report'],
166
+ positional: [PART, { name: 'text', description: 'What you build now.', required: true }],
167
+ values: [{ name: 'variant', flag: '--variant', description: 'The variant key.', required: true }, BY],
168
+ },
169
+ {
170
+ name: 'part_ready',
171
+ description: 'Mark a part ready. It draws the part and refuses while the part has open points.',
172
+ command: ['ready'],
173
+ positional: [PART],
174
+ values: [BY],
175
+ },
176
+ {
177
+ name: 'sketch_ready',
178
+ description: 'Mark a sketch ready for the user to pick.',
179
+ command: ['sketch', 'ready'],
180
+ positional: [PART],
181
+ values: [BY],
182
+ },
183
+ {
184
+ name: 'sketch_merge',
185
+ description: 'Merge the variant the user picked. Studio runs it on the click of the user.',
186
+ command: ['sketch', 'merge'],
187
+ positional: [PART],
188
+ values: [{ name: 'note', flag: '--note', description: 'The reason, the note of the part.' }, BY],
189
+ },
190
+ {
191
+ name: 'sketch_discard',
192
+ description: 'Drop a sketch. Studio runs it on the click of the user.',
193
+ command: ['sketch', 'discard'],
194
+ positional: [PART],
195
+ values: [BY],
196
+ },
197
+ {
198
+ name: 'sketch_variant',
199
+ description: 'Add a variant to the open sketch, as a copy of another, in the running round or a new one.',
200
+ command: ['sketch', 'variant'],
201
+ positional: [PART, { name: 'variant', description: 'The key of the new variant.', required: true }],
202
+ values: [
203
+ { name: 'from', flag: '--from', description: 'The variant to copy.', required: true },
204
+ { name: 'round', flag: '--round', description: 'The title of a new round.' },
205
+ { name: 'note', flag: '--note', description: 'Why the running round lost. Needed with round.' },
206
+ BY,
207
+ ],
208
+ },
209
+ {
210
+ name: 'sketch_round',
211
+ description: 'Set the title, note or dropped states of a round of the open sketch.',
212
+ command: ['sketch', 'round'],
213
+ positional: [PART, { name: 'round', description: 'The round to change.', required: true }],
214
+ values: [
215
+ { name: 'title', flag: '--title', description: 'The title of the round.' },
216
+ { name: 'note', flag: '--note', description: 'The note of the round.' },
217
+ { name: 'drops', flag: '--drops', description: 'The states the round drops on purpose, a comma list.' },
218
+ BY,
219
+ ],
220
+ },
221
+ {
222
+ name: 'sketch_list',
223
+ description: 'List the open sketches as JSON.',
224
+ command: ['sketch', 'list', '--json'],
225
+ },
226
+ {
227
+ name: 'sketch_check',
228
+ description: 'Check each variant of a sketch laid over the product, or of every open sketch without a part.',
229
+ command: ['sketch', 'check'],
230
+ positional: [{ name: 'part', description: 'The part, as <layer>/<name>.' }],
231
+ },
232
+ {
233
+ name: 'sketch_preview',
234
+ description: 'List the elements and pages a merge of a variant changes.',
235
+ command: ['sketch', 'preview'],
236
+ positional: [PART, { name: 'variant', description: 'The variant key.', required: true }],
237
+ },
238
+ {
239
+ name: 'sketch_rebase',
240
+ description: 'After bringing each variant up to date with the product, record the product as it is now.',
241
+ command: ['sketch', 'rebase'],
242
+ positional: [PART],
243
+ values: [BY],
244
+ },
245
+ {
246
+ name: 'comment_reply',
247
+ description: 'Answer a comment thread as the agent. A question waits for the answer of the user.',
248
+ command: ['comment', 'reply'],
249
+ positional: [
250
+ { name: 'id', description: 'The comment id.', required: true },
251
+ { name: 'text', description: 'The reply.', required: true },
252
+ ],
253
+ values: [BY],
254
+ switches: [{ name: 'question', flag: '--question', description: 'Mark the reply as a question for the user.' }],
255
+ },
256
+ {
257
+ name: 'inbox',
258
+ description: 'List the comment threads and sketches that wait for the agent, then those that wait for the user.',
259
+ command: ['inbox', '--json'],
260
+ },
261
+ {
262
+ name: 'inbox_done',
263
+ description: 'Set the note of the part a comment thread is about, then mark the thread addressed.',
264
+ command: ['inbox', 'done'],
265
+ positional: [{ name: 'id', description: 'The comment id.', required: true }],
266
+ values: [{ name: 'note', flag: '--note', description: 'The new note of the part.', required: true }, BY],
267
+ },
268
+ ];
269
+ const inputsOf = (tool) => {
270
+ var _a, _b, _c;
271
+ return [
272
+ ...((_a = tool.positional) !== null && _a !== void 0 ? _a : []),
273
+ ...((_b = tool.values) !== null && _b !== void 0 ? _b : []),
274
+ ...((_c = tool.switches) !== null && _c !== void 0 ? _c : []).map((input) => (Object.assign(Object.assign({}, input), { type: 'boolean' }))),
275
+ ...(tool.read ? [] : [PRODUCT]),
276
+ ];
277
+ };
278
+ const inputSchemaOf = (tool) => {
279
+ const inputs = inputsOf(tool);
280
+ return {
281
+ type: 'object',
282
+ properties: Object.fromEntries(inputs.map((input) => { var _a; return [input.name, { type: (_a = input.type) !== null && _a !== void 0 ? _a : 'string', description: input.description }]; })),
283
+ required: inputs.filter((input) => input.required).map((input) => input.name),
284
+ };
285
+ };
286
+ /** The `et design` arguments a tool call runs, or why it cannot run. */
287
+ const toolArgvOf = (options) => {
288
+ var _a, _b, _c, _d, _e;
289
+ const { tool, args, context } = options;
290
+ const missing = inputsOf(tool).filter((input) => { var _a; return input.required && ((_a = args[input.name]) !== null && _a !== void 0 ? _a : '') === ''; });
291
+ if (missing.length > 0)
292
+ return `${tool.name} needs ${missing.map((input) => input.name).join(', ')}`;
293
+ const valueOf = (input) => args[input.name];
294
+ return [
295
+ ...tool.command,
296
+ ...((_a = tool.positional) !== null && _a !== void 0 ? _a : []).flatMap((input) => (valueOf(input) === undefined ? [] : [String(valueOf(input))])),
297
+ ...[...((_b = tool.values) !== null && _b !== void 0 ? _b : []), PRODUCT].flatMap((input) => { var _a; return valueOf(input) === undefined || valueOf(input) === '' ? [] : [(_a = input.flag) !== null && _a !== void 0 ? _a : '', String(valueOf(input))]; }),
298
+ ...(tool.name === 'shot' ? ['--states'] : []),
299
+ ...((_c = tool.switches) !== null && _c !== void 0 ? _c : []).flatMap((input) => { var _a; return (valueOf(input) === true ? [(_a = input.flag) !== null && _a !== void 0 ? _a : ''] : []); }),
300
+ ...((_e = (_d = tool.extra) === null || _d === void 0 ? void 0 : _d.call(tool, args, context)) !== null && _e !== void 0 ? _e : []),
301
+ ];
302
+ };
303
+ exports.toolArgvOf = toolArgvOf;
304
+ const filesOf = (options) => options.stdout
305
+ .split('\n')
306
+ .map((line) => line.trim())
307
+ .filter((line) => line.endsWith(options.extension))
308
+ .map((line) => ((0, path_1.isAbsolute)(line) ? line : (0, path_1.resolve)(options.target, line)))
309
+ .filter((file) => (0, fs_1.existsSync)(file));
310
+ const resultOf = (target, run) => ({
311
+ content: [
312
+ { type: 'text', text: [run.stdout.trim(), run.stderr.trim()].filter(Boolean).join('\n') || `exit ${run.code}` },
313
+ ...filesOf({ target, stdout: run.stdout, extension: '.png' }).map((file) => ({
314
+ type: 'image',
315
+ data: (0, fs_1.readFileSync)(file).toString('base64'),
316
+ mimeType: 'image/png',
317
+ })),
318
+ ...filesOf({ target, stdout: run.stdout, extension: '.json' }).map((file) => ({
319
+ type: 'text',
320
+ text: (0, fs_1.readFileSync)(file, 'utf8'),
321
+ })),
322
+ ],
323
+ isError: run.code !== 0,
324
+ });
325
+ const stringArgsOf = (args) => {
326
+ var _a;
327
+ return Object.fromEntries(Object.entries((_a = args) !== null && _a !== void 0 ? _a : {}).map(([key, value]) => [key, String(value)]));
328
+ };
329
+ /** The answer to one JSON-RPC request of an MCP client; `null` for a notification. */
330
+ const mcpAnswerOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
331
+ var _a, _b, _c, _d, _e;
332
+ const { target, request, run, receipt } = options;
333
+ if (request.id === undefined || request.id === null)
334
+ return null;
335
+ const answer = (result) => ({ jsonrpc: '2.0', id: request.id, result });
336
+ if (request.method === 'initialize') {
337
+ const asked = (_a = request.params) === null || _a === void 0 ? void 0 : _a['protocolVersion'];
338
+ return answer({
339
+ protocolVersion: typeof asked === 'string' ? asked : exports.MCP_PROTOCOL_VERSION,
340
+ capabilities: { tools: {} },
341
+ serverInfo: { name: 'ethlete-design', version: (0, stamp_1.buildStampOf)().version },
342
+ });
343
+ }
344
+ if (request.method === 'ping')
345
+ return answer({});
346
+ if (request.method === 'tools/list') {
347
+ return answer({
348
+ tools: exports.MCP_TOOLS.map((tool) => ({
349
+ name: tool.name,
350
+ description: tool.description,
351
+ inputSchema: inputSchemaOf(tool),
352
+ })),
353
+ });
354
+ }
355
+ if (request.method === 'tools/call') {
356
+ const name = (_b = request.params) === null || _b === void 0 ? void 0 : _b['name'];
357
+ const tool = exports.MCP_TOOLS.find((candidate) => candidate.name === name);
358
+ if (!tool)
359
+ return { jsonrpc: '2.0', id: request.id, error: { code: -32602, message: `unknown tool "${name}"` } };
360
+ const argv = (0, exports.toolArgvOf)({
361
+ tool,
362
+ args: (_d = (_c = request.params) === null || _c === void 0 ? void 0 : _c['arguments']) !== null && _d !== void 0 ? _d : {},
363
+ context: { target, receipt },
364
+ });
365
+ if (typeof argv === 'string')
366
+ return answer({ content: [{ type: 'text', text: argv }], isError: true });
367
+ if (tool.read)
368
+ return answer(tool.read(stringArgsOf((_e = request.params) === null || _e === void 0 ? void 0 : _e['arguments']), { target, receipt }));
369
+ return answer(resultOf(target, yield run(argv)));
370
+ }
371
+ return {
372
+ jsonrpc: '2.0',
373
+ id: request.id,
374
+ error: { code: -32601, message: `${request.method} is not a method of this server` },
375
+ };
376
+ });
377
+ exports.mcpAnswerOf = mcpAnswerOf;
378
+ /** Runs `et design <argv>` of this same CLI in the workspace, in its own process so its output stays off the protocol. */
379
+ const cliRunnerOf = (target) => (argv) => new Promise((done) => {
380
+ var _a;
381
+ const child = (0, child_process_1.spawn)(process.execPath, [(_a = process.argv[1]) !== null && _a !== void 0 ? _a : '', 'design', ...argv], {
382
+ cwd: target,
383
+ stdio: ['ignore', 'pipe', 'pipe'],
384
+ });
385
+ const stdout = [];
386
+ const stderr = [];
387
+ child.stdout.on('data', (chunk) => stdout.push(chunk));
388
+ child.stderr.on('data', (chunk) => stderr.push(chunk));
389
+ child.on('error', (error) => done({ code: 1, stdout: '', stderr: error.message }));
390
+ child.on('close', (code) => done({ code: code !== null && code !== void 0 ? code : 1, stdout: Buffer.concat(stdout).toString(), stderr: Buffer.concat(stderr).toString() }));
391
+ });
392
+ exports.cliRunnerOf = cliRunnerOf;
393
+ /**
394
+ * `et design mcp` serves the design tools to an MCP client over stdio. The workspace is the working directory;
395
+ * each tool runs the `et design` command of the same name there. With `receipt`, `check` on a call writes its receipt
396
+ * to that path.
397
+ */
398
+ const designMcp = (options) => {
399
+ var _a;
400
+ const { target, receipt } = options;
401
+ const run = (_a = options.run) !== null && _a !== void 0 ? _a : (0, exports.cliRunnerOf)(target);
402
+ const lines = (0, readline_1.createInterface)({ input: process.stdin });
403
+ const pending = new Set();
404
+ lines.on('line', (line) => {
405
+ let request;
406
+ try {
407
+ request = JSON.parse(line);
408
+ }
409
+ catch (_a) {
410
+ return;
411
+ }
412
+ const answered = (0, exports.mcpAnswerOf)({ target, request, run, receipt }).then((answer) => {
413
+ if (answer)
414
+ process.stdout.write(`${JSON.stringify(answer)}\n`);
415
+ });
416
+ pending.add(answered);
417
+ void answered.finally(() => pending.delete(answered));
418
+ });
419
+ return new Promise((done) => lines.on('close', () => void Promise.all([...pending]).then(() => done(0))));
420
+ };
421
+ exports.designMcp = designMcp;
422
+ //# sourceMappingURL=mcp-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-command.js","sourceRoot":"","sources":["../../../../../libs/cli/src/lib/design/mcp-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { MotionMode, MotionPictures } from './motion-shot';
2
+ import { DesignFlow, FlowLine } from './system/flows/flow';
3
+ export declare const MOTION_USAGE: string;
4
+ type DeclaredMotion = {
5
+ from: string;
6
+ to: string;
7
+ at?: number[];
8
+ interrupt?: number;
9
+ };
10
+ /** The JSON `motion shots` writes next to its sheet: per mode the end, the keyframe times and the tracks. */
11
+ export declare const motionReportOf: (options: {
12
+ product: string;
13
+ part: string;
14
+ motion: string;
15
+ declared: DeclaredMotion;
16
+ preset: string | null;
17
+ width: number | null;
18
+ drawn: Partial<Record<MotionMode, MotionPictures>>;
19
+ }) => {
20
+ product: string;
21
+ part: string;
22
+ motion: string;
23
+ from: string;
24
+ to: string;
25
+ interrupt: number | null;
26
+ preset: string | null;
27
+ width: number | null;
28
+ modes: {
29
+ [k: string]: {
30
+ end: number;
31
+ keyframes: number[];
32
+ tracks: unknown[];
33
+ };
34
+ };
35
+ };
36
+ /** The JSON `motion flow` writes next to its sheet: the line, its ends, and per mode the end, the keyframe times and the tracks. */
37
+ export declare const flowReportOf: (options: {
38
+ product: string;
39
+ flow: DesignFlow;
40
+ line: FlowLine;
41
+ preset: string;
42
+ drawn: Partial<Record<MotionMode, MotionPictures>>;
43
+ }) => {
44
+ product: string;
45
+ flow: string;
46
+ line: string;
47
+ label: string | null;
48
+ from: string;
49
+ to: string;
50
+ preset: string;
51
+ modes: {
52
+ [k: string]: {
53
+ end: number;
54
+ keyframes: number[];
55
+ tracks: unknown[];
56
+ };
57
+ };
58
+ };
59
+ /** One line per mode: when the motion ends and what runs, or that it runs no animation. */
60
+ export declare const motionSummaryOf: (drawn: Partial<Record<MotionMode, MotionPictures>>) => string[];
61
+ /**
62
+ * `et design motion shots <layer>/<name> <motion>` draws a motion of a part at each keyframe time, in full and reduced
63
+ * motion, into one contact sheet PNG with a row per mode, writes its tracks as JSON next to it, and prints both paths.
64
+ * `et design motion flow` draws a flow line the same way.
65
+ */
66
+ export declare const designMotion: (options: {
67
+ target: string;
68
+ argv: string[];
69
+ invocation: string;
70
+ }) => Promise<number>;
71
+ export {};