@ambitresearch/genie 1.3.1

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 (301) hide show
  1. package/README.md +15 -0
  2. package/dist/auth/bearer.d.ts +49 -0
  3. package/dist/auth/bearer.d.ts.map +1 -0
  4. package/dist/auth/bearer.js +159 -0
  5. package/dist/auth/bearer.js.map +1 -0
  6. package/dist/auth/oauth/authorize.d.ts +19 -0
  7. package/dist/auth/oauth/authorize.d.ts.map +1 -0
  8. package/dist/auth/oauth/authorize.js +111 -0
  9. package/dist/auth/oauth/authorize.js.map +1 -0
  10. package/dist/auth/oauth/config.d.ts +10 -0
  11. package/dist/auth/oauth/config.d.ts.map +1 -0
  12. package/dist/auth/oauth/config.js +16 -0
  13. package/dist/auth/oauth/config.js.map +1 -0
  14. package/dist/auth/oauth/dcr.d.ts +15 -0
  15. package/dist/auth/oauth/dcr.d.ts.map +1 -0
  16. package/dist/auth/oauth/dcr.js +38 -0
  17. package/dist/auth/oauth/dcr.js.map +1 -0
  18. package/dist/auth/oauth/jwt.d.ts +13 -0
  19. package/dist/auth/oauth/jwt.d.ts.map +1 -0
  20. package/dist/auth/oauth/jwt.js +46 -0
  21. package/dist/auth/oauth/jwt.js.map +1 -0
  22. package/dist/auth/oauth/metadata.d.ts +9 -0
  23. package/dist/auth/oauth/metadata.d.ts.map +1 -0
  24. package/dist/auth/oauth/metadata.js +19 -0
  25. package/dist/auth/oauth/metadata.js.map +1 -0
  26. package/dist/auth/oauth/router.d.ts +32 -0
  27. package/dist/auth/oauth/router.d.ts.map +1 -0
  28. package/dist/auth/oauth/router.js +159 -0
  29. package/dist/auth/oauth/router.js.map +1 -0
  30. package/dist/auth/oauth/store.d.ts +55 -0
  31. package/dist/auth/oauth/store.d.ts.map +1 -0
  32. package/dist/auth/oauth/store.js +63 -0
  33. package/dist/auth/oauth/store.js.map +1 -0
  34. package/dist/auth/oauth/token.d.ts +21 -0
  35. package/dist/auth/oauth/token.d.ts.map +1 -0
  36. package/dist/auth/oauth/token.js +77 -0
  37. package/dist/auth/oauth/token.js.map +1 -0
  38. package/dist/auth/oidc/group-policy.d.ts +43 -0
  39. package/dist/auth/oidc/group-policy.d.ts.map +1 -0
  40. package/dist/auth/oidc/group-policy.js +54 -0
  41. package/dist/auth/oidc/group-policy.js.map +1 -0
  42. package/dist/auth/oidc/verifier.d.ts +42 -0
  43. package/dist/auth/oidc/verifier.d.ts.map +1 -0
  44. package/dist/auth/oidc/verifier.js +145 -0
  45. package/dist/auth/oidc/verifier.js.map +1 -0
  46. package/dist/auth/token-cli.d.ts +9 -0
  47. package/dist/auth/token-cli.d.ts.map +1 -0
  48. package/dist/auth/token-cli.js +98 -0
  49. package/dist/auth/token-cli.js.map +1 -0
  50. package/dist/cli.d.ts +3 -0
  51. package/dist/cli.d.ts.map +1 -0
  52. package/dist/cli.js +149 -0
  53. package/dist/cli.js.map +1 -0
  54. package/dist/config/redact.d.ts +20 -0
  55. package/dist/config/redact.d.ts.map +1 -0
  56. package/dist/config/redact.js +77 -0
  57. package/dist/config/redact.js.map +1 -0
  58. package/dist/config/secrets.d.ts +100 -0
  59. package/dist/config/secrets.d.ts.map +1 -0
  60. package/dist/config/secrets.js +130 -0
  61. package/dist/config/secrets.js.map +1 -0
  62. package/dist/framework/html.d.ts +103 -0
  63. package/dist/framework/html.d.ts.map +1 -0
  64. package/dist/framework/html.js +271 -0
  65. package/dist/framework/html.js.map +1 -0
  66. package/dist/framework/interface.d.ts +130 -0
  67. package/dist/framework/interface.d.ts.map +1 -0
  68. package/dist/framework/interface.js +112 -0
  69. package/dist/framework/interface.js.map +1 -0
  70. package/dist/framework/react.d.ts +133 -0
  71. package/dist/framework/react.d.ts.map +1 -0
  72. package/dist/framework/react.js +243 -0
  73. package/dist/framework/react.js.map +1 -0
  74. package/dist/framework/vue.d.ts +99 -0
  75. package/dist/framework/vue.d.ts.map +1 -0
  76. package/dist/framework/vue.js +375 -0
  77. package/dist/framework/vue.js.map +1 -0
  78. package/dist/index.d.ts +3 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +3 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/llm/client.d.ts +81 -0
  83. package/dist/llm/client.d.ts.map +1 -0
  84. package/dist/llm/client.js +141 -0
  85. package/dist/llm/client.js.map +1 -0
  86. package/dist/llm/component-response.d.ts +111 -0
  87. package/dist/llm/component-response.d.ts.map +1 -0
  88. package/dist/llm/component-response.js +167 -0
  89. package/dist/llm/component-response.js.map +1 -0
  90. package/dist/llm/generated-files.d.ts +10 -0
  91. package/dist/llm/generated-files.d.ts.map +1 -0
  92. package/dist/llm/generated-files.js +26 -0
  93. package/dist/llm/generated-files.js.map +1 -0
  94. package/dist/llm/prompts/CHANGELOG.md +70 -0
  95. package/dist/llm/prompts/generate-component.system.md +99 -0
  96. package/dist/llm/prompts/refine-component.system.md +112 -0
  97. package/dist/llm/prompts.d.ts +66 -0
  98. package/dist/llm/prompts.d.ts.map +1 -0
  99. package/dist/llm/prompts.js +78 -0
  100. package/dist/llm/prompts.js.map +1 -0
  101. package/dist/llm/retry.d.ts +183 -0
  102. package/dist/llm/retry.d.ts.map +1 -0
  103. package/dist/llm/retry.js +475 -0
  104. package/dist/llm/retry.js.map +1 -0
  105. package/dist/llm/schema.d.ts +129 -0
  106. package/dist/llm/schema.d.ts.map +1 -0
  107. package/dist/llm/schema.js +147 -0
  108. package/dist/llm/schema.js.map +1 -0
  109. package/dist/llm/validate.d.ts +107 -0
  110. package/dist/llm/validate.d.ts.map +1 -0
  111. package/dist/llm/validate.js +174 -0
  112. package/dist/llm/validate.js.map +1 -0
  113. package/dist/manifest/compiler.d.ts +112 -0
  114. package/dist/manifest/compiler.d.ts.map +1 -0
  115. package/dist/manifest/compiler.js +306 -0
  116. package/dist/manifest/compiler.js.map +1 -0
  117. package/dist/manifest/ensure.d.ts +46 -0
  118. package/dist/manifest/ensure.d.ts.map +1 -0
  119. package/dist/manifest/ensure.js +49 -0
  120. package/dist/manifest/ensure.js.map +1 -0
  121. package/dist/manifest/index.d.ts +13 -0
  122. package/dist/manifest/index.d.ts.map +1 -0
  123. package/dist/manifest/index.js +13 -0
  124. package/dist/manifest/index.js.map +1 -0
  125. package/dist/middleware/plan-guard.d.ts +167 -0
  126. package/dist/middleware/plan-guard.d.ts.map +1 -0
  127. package/dist/middleware/plan-guard.js +190 -0
  128. package/dist/middleware/plan-guard.js.map +1 -0
  129. package/dist/plans/index.d.ts +71 -0
  130. package/dist/plans/index.d.ts.map +1 -0
  131. package/dist/plans/index.js +252 -0
  132. package/dist/plans/index.js.map +1 -0
  133. package/dist/schemas/component.schema.json +114 -0
  134. package/dist/server.d.ts +96 -0
  135. package/dist/server.d.ts.map +1 -0
  136. package/dist/server.js +258 -0
  137. package/dist/server.js.map +1 -0
  138. package/dist/store/empty-manifest.d.ts +58 -0
  139. package/dist/store/empty-manifest.d.ts.map +1 -0
  140. package/dist/store/empty-manifest.js +59 -0
  141. package/dist/store/empty-manifest.js.map +1 -0
  142. package/dist/store/git-host.d.ts +120 -0
  143. package/dist/store/git-host.d.ts.map +1 -0
  144. package/dist/store/git-host.js +796 -0
  145. package/dist/store/git-host.js.map +1 -0
  146. package/dist/store/index.d.ts +5 -0
  147. package/dist/store/index.d.ts.map +1 -0
  148. package/dist/store/index.js +4 -0
  149. package/dist/store/index.js.map +1 -0
  150. package/dist/store/interface.d.ts +322 -0
  151. package/dist/store/interface.d.ts.map +1 -0
  152. package/dist/store/interface.js +100 -0
  153. package/dist/store/interface.js.map +1 -0
  154. package/dist/store/kit-files.d.ts +88 -0
  155. package/dist/store/kit-files.d.ts.map +1 -0
  156. package/dist/store/kit-files.js +199 -0
  157. package/dist/store/kit-files.js.map +1 -0
  158. package/dist/store/local.d.ts +70 -0
  159. package/dist/store/local.d.ts.map +1 -0
  160. package/dist/store/local.js +651 -0
  161. package/dist/store/local.js.map +1 -0
  162. package/dist/store/manifest.d.ts +44 -0
  163. package/dist/store/manifest.d.ts.map +1 -0
  164. package/dist/store/manifest.js +116 -0
  165. package/dist/store/manifest.js.map +1 -0
  166. package/dist/store/viewer-assets.d.ts +20 -0
  167. package/dist/store/viewer-assets.d.ts.map +1 -0
  168. package/dist/store/viewer-assets.js +118 -0
  169. package/dist/store/viewer-assets.js.map +1 -0
  170. package/dist/sync/anchor.d.ts +125 -0
  171. package/dist/sync/anchor.d.ts.map +1 -0
  172. package/dist/sync/anchor.js +210 -0
  173. package/dist/sync/anchor.js.map +1 -0
  174. package/dist/sync/index.d.ts +15 -0
  175. package/dist/sync/index.d.ts.map +1 -0
  176. package/dist/sync/index.js +15 -0
  177. package/dist/sync/index.js.map +1 -0
  178. package/dist/sync/orchestrator.d.ts +160 -0
  179. package/dist/sync/orchestrator.d.ts.map +1 -0
  180. package/dist/sync/orchestrator.js +288 -0
  181. package/dist/sync/orchestrator.js.map +1 -0
  182. package/dist/tools/bind_kit.d.ts +29 -0
  183. package/dist/tools/bind_kit.d.ts.map +1 -0
  184. package/dist/tools/bind_kit.js +70 -0
  185. package/dist/tools/bind_kit.js.map +1 -0
  186. package/dist/tools/conjure.d.ts +141 -0
  187. package/dist/tools/conjure.d.ts.map +1 -0
  188. package/dist/tools/conjure.js +655 -0
  189. package/dist/tools/conjure.js.map +1 -0
  190. package/dist/tools/conjure_screen.d.ts +174 -0
  191. package/dist/tools/conjure_screen.d.ts.map +1 -0
  192. package/dist/tools/conjure_screen.js +458 -0
  193. package/dist/tools/conjure_screen.js.map +1 -0
  194. package/dist/tools/create_kit.d.ts +32 -0
  195. package/dist/tools/create_kit.d.ts.map +1 -0
  196. package/dist/tools/create_kit.js +131 -0
  197. package/dist/tools/create_kit.js.map +1 -0
  198. package/dist/tools/create_project.d.ts +267 -0
  199. package/dist/tools/create_project.d.ts.map +1 -0
  200. package/dist/tools/create_project.js +546 -0
  201. package/dist/tools/create_project.js.map +1 -0
  202. package/dist/tools/delete_files.d.ts +93 -0
  203. package/dist/tools/delete_files.d.ts.map +1 -0
  204. package/dist/tools/delete_files.js +276 -0
  205. package/dist/tools/delete_files.js.map +1 -0
  206. package/dist/tools/delete_project.d.ts +43 -0
  207. package/dist/tools/delete_project.d.ts.map +1 -0
  208. package/dist/tools/delete_project.js +118 -0
  209. package/dist/tools/delete_project.js.map +1 -0
  210. package/dist/tools/get_kit.d.ts +28 -0
  211. package/dist/tools/get_kit.d.ts.map +1 -0
  212. package/dist/tools/get_kit.js +95 -0
  213. package/dist/tools/get_kit.js.map +1 -0
  214. package/dist/tools/get_project.d.ts +37 -0
  215. package/dist/tools/get_project.d.ts.map +1 -0
  216. package/dist/tools/get_project.js +71 -0
  217. package/dist/tools/get_project.js.map +1 -0
  218. package/dist/tools/list_components.d.ts +42 -0
  219. package/dist/tools/list_components.d.ts.map +1 -0
  220. package/dist/tools/list_components.js +125 -0
  221. package/dist/tools/list_components.js.map +1 -0
  222. package/dist/tools/list_files.d.ts +32 -0
  223. package/dist/tools/list_files.d.ts.map +1 -0
  224. package/dist/tools/list_files.js +109 -0
  225. package/dist/tools/list_files.js.map +1 -0
  226. package/dist/tools/list_kits.d.ts +14 -0
  227. package/dist/tools/list_kits.d.ts.map +1 -0
  228. package/dist/tools/list_kits.js +41 -0
  229. package/dist/tools/list_kits.js.map +1 -0
  230. package/dist/tools/list_projects.d.ts +23 -0
  231. package/dist/tools/list_projects.d.ts.map +1 -0
  232. package/dist/tools/list_projects.js +66 -0
  233. package/dist/tools/list_projects.js.map +1 -0
  234. package/dist/tools/plan.d.ts +16 -0
  235. package/dist/tools/plan.d.ts.map +1 -0
  236. package/dist/tools/plan.js +146 -0
  237. package/dist/tools/plan.js.map +1 -0
  238. package/dist/tools/preview.d.ts +289 -0
  239. package/dist/tools/preview.d.ts.map +1 -0
  240. package/dist/tools/preview.js +672 -0
  241. package/dist/tools/preview.js.map +1 -0
  242. package/dist/tools/read_file.d.ts +40 -0
  243. package/dist/tools/read_file.d.ts.map +1 -0
  244. package/dist/tools/read_file.js +114 -0
  245. package/dist/tools/read_file.js.map +1 -0
  246. package/dist/tools/refine.d.ts +220 -0
  247. package/dist/tools/refine.d.ts.map +1 -0
  248. package/dist/tools/refine.js +501 -0
  249. package/dist/tools/refine.js.map +1 -0
  250. package/dist/tools/validate.d.ts +74 -0
  251. package/dist/tools/validate.d.ts.map +1 -0
  252. package/dist/tools/validate.js +224 -0
  253. package/dist/tools/validate.js.map +1 -0
  254. package/dist/tools/write_files.d.ts +158 -0
  255. package/dist/tools/write_files.d.ts.map +1 -0
  256. package/dist/tools/write_files.js +541 -0
  257. package/dist/tools/write_files.js.map +1 -0
  258. package/dist/transport.d.ts +77 -0
  259. package/dist/transport.d.ts.map +1 -0
  260. package/dist/transport.js +448 -0
  261. package/dist/transport.js.map +1 -0
  262. package/dist/ui/card-asset-broker.d.ts +42 -0
  263. package/dist/ui/card-asset-broker.d.ts.map +1 -0
  264. package/dist/ui/card-asset-broker.js +479 -0
  265. package/dist/ui/card-asset-broker.js.map +1 -0
  266. package/dist/ui/grid-resource.d.ts +252 -0
  267. package/dist/ui/grid-resource.d.ts.map +1 -0
  268. package/dist/ui/grid-resource.js +680 -0
  269. package/dist/ui/grid-resource.js.map +1 -0
  270. package/dist/ui/viewer-static/index.html +95 -0
  271. package/dist/ui/viewer-static/viewer.css +451 -0
  272. package/dist/ui/viewer-static/viewer.js +1405 -0
  273. package/dist/validate/full-scan.d.ts +87 -0
  274. package/dist/validate/full-scan.d.ts.map +1 -0
  275. package/dist/validate/full-scan.js +299 -0
  276. package/dist/validate/full-scan.js.map +1 -0
  277. package/dist/validate/index.d.ts +15 -0
  278. package/dist/validate/index.d.ts.map +1 -0
  279. package/dist/validate/index.js +18 -0
  280. package/dist/validate/index.js.map +1 -0
  281. package/dist/validate/marker.d.ts +89 -0
  282. package/dist/validate/marker.d.ts.map +1 -0
  283. package/dist/validate/marker.js +87 -0
  284. package/dist/validate/marker.js.map +1 -0
  285. package/dist/validate/phash.d.ts +135 -0
  286. package/dist/validate/phash.d.ts.map +1 -0
  287. package/dist/validate/phash.js +307 -0
  288. package/dist/validate/phash.js.map +1 -0
  289. package/dist/validate/render.d.ts +38 -0
  290. package/dist/validate/render.d.ts.map +1 -0
  291. package/dist/validate/render.js +155 -0
  292. package/dist/validate/render.js.map +1 -0
  293. package/dist/watch/index.d.ts +12 -0
  294. package/dist/watch/index.d.ts.map +1 -0
  295. package/dist/watch/index.js +12 -0
  296. package/dist/watch/index.js.map +1 -0
  297. package/dist/watch/watcher.d.ts +65 -0
  298. package/dist/watch/watcher.d.ts.map +1 -0
  299. package/dist/watch/watcher.js +238 -0
  300. package/dist/watch/watcher.js.map +1 -0
  301. package/package.json +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conjure.js","sourceRoot":"","sources":["../../src/tools/conjure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * MCP tool: conjure_screen (M1-21).
3
+ *
4
+ * The M1 project-aware generation contract for *screen* artifacts — a screen is
5
+ * a generated / previewed / refined / committed artifact, the same loop as a
6
+ * component but one step up (D-F). This tool owns the M1 slice: resolve which
7
+ * kit the screen is generated against, run the generation client, and record
8
+ * the resulting artifact reference in `.genie/project.json`. The generation
9
+ * *mechanics* (real model call, the validation gauntlet) are deepened by M2
10
+ * behind the same `ScreenGenerator` seam this file introduces (Implementation
11
+ * Notes: "the same generation-client interface later deepened by M2").
12
+ *
13
+ * Input: { projectId, prompt, kitId?, blueprintId?, framework?, model? }
14
+ * Output: { screenId, files: [{ path, content, encoding }], usage }
15
+ *
16
+ * Kit resolution ladder (D-F "Default-kit resolution", PRD DS-026 · AC3):
17
+ * 1. explicit — caller named `kitId` → use it (validated to exist)
18
+ * 2. default — the project's `defaultKitId` → use it
19
+ * 3. sole — exactly one reachable binding → use it
20
+ * 4. none / ambiguous → for a kit-specific prompt, STOP with
21
+ * `ERR_PROJECT_KIT_REQUIRED` (never invent a kit, AC4); for a basic-structure
22
+ * prompt, generate a framework-neutral scaffold that does not pretend it
23
+ * used a kit (AC5).
24
+ */
25
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
26
+ import { z } from "zod";
27
+ import type { ProjectDetail, ProjectScreen, RecordScreenInput } from "./create_project.js";
28
+ import type { KitStore } from "../store/interface.js";
29
+ export declare const CONJURE_SCREEN_TOOL_NAME = "mcp__genie__conjure_screen";
30
+ /** Target framework for the generated screen artifact (RFC §9.19). */
31
+ export declare const SCREEN_FRAMEWORKS: readonly ["react", "vue", "html"];
32
+ export type ScreenFramework = (typeof SCREEN_FRAMEWORKS)[number];
33
+ /**
34
+ * Input schema (RFC §9.19). `prompt` is bounded (8..8192) so a stray empty
35
+ * string or a megabyte paste can't reach the generator; `framework` defaults to
36
+ * `react`; `model` is an opaque routing hint (default `design-default`) the M1
37
+ * local generator ignores and M2 forwards to the configured endpoint.
38
+ */
39
+ declare const conjureScreenArgsSchema: z.ZodObject<{
40
+ projectId: z.ZodString;
41
+ prompt: z.ZodString;
42
+ kitId: z.ZodOptional<z.ZodString>;
43
+ blueprintId: z.ZodOptional<z.ZodString>;
44
+ framework: z.ZodDefault<z.ZodEnum<{
45
+ react: "react";
46
+ vue: "vue";
47
+ html: "html";
48
+ }>>;
49
+ model: z.ZodDefault<z.ZodString>;
50
+ }, z.core.$strict>;
51
+ export type ConjureScreenArgs = z.infer<typeof conjureScreenArgsSchema>;
52
+ /** How the effective kit was resolved — surfaced so generation can be *honest*
53
+ * about provenance rather than silently guessing (D-F step 3: "use it, and name
54
+ * which"). */
55
+ export type KitResolutionVia = "explicit" | "default" | "sole";
56
+ /** The kit a screen is generated against, plus how it was chosen. `null` marks a
57
+ * deliberately kitless (framework-neutral) generation. */
58
+ export interface ResolvedKit {
59
+ kitId: string;
60
+ via: KitResolutionVia;
61
+ }
62
+ /** A single generated artifact file. `encoding` is carried explicitly (RFC
63
+ * §9.19) so a future binary artifact (an image, a font) round-trips losslessly
64
+ * rather than being assumed UTF-8. */
65
+ export interface GeneratedFile {
66
+ path: string;
67
+ content: string;
68
+ encoding: "utf-8" | "base64";
69
+ }
70
+ /** Token/cost accounting for one generation (RFC `UsageInfo`). The M1 local
71
+ * generator reports all-zero — it makes no model call, and saying so honestly is
72
+ * the point (AC8: no real model call in CI). */
73
+ export interface UsageInfo {
74
+ promptTokens: number;
75
+ completionTokens: number;
76
+ totalTokens: number;
77
+ costUsd?: number;
78
+ }
79
+ /** What the tool hands the generator: the fully-resolved generation context. The
80
+ * tool owns id + path layout so the recorded manifest entry and the returned
81
+ * files can never disagree; the generator only fills in file *contents* + usage. */
82
+ export interface ScreenGenerationRequest {
83
+ projectId: string;
84
+ screenId: string;
85
+ /** Primary artifact path the tool has reserved (e.g. `screens/<id>/index.tsx`). */
86
+ entryPath: string;
87
+ prompt: string;
88
+ framework: ScreenFramework;
89
+ model: string;
90
+ /** The resolved kit, or `null` for a framework-neutral scaffold (AC5). */
91
+ kit: ResolvedKit | null;
92
+ /** Blueprint this screen was seeded from, if any (AC6). */
93
+ blueprint?: {
94
+ id: string;
95
+ };
96
+ }
97
+ export interface ScreenGenerationResult {
98
+ files: GeneratedFile[];
99
+ usage: UsageInfo;
100
+ }
101
+ /**
102
+ * The generation seam. M1 ships `LocalScaffoldScreenGenerator` (deterministic,
103
+ * offline). M2 swaps in a client that calls the configured OpenAI-compatible
104
+ * endpoint and runs the validation gauntlet — same interface, no tool change.
105
+ */
106
+ export interface ScreenGenerator {
107
+ generate(request: ScreenGenerationRequest): Promise<ScreenGenerationResult>;
108
+ }
109
+ /** Narrow project port `conjure_screen` needs — resolve detail + record the
110
+ * screen. `ProjectStore` (create_project.ts) satisfies this structurally, the
111
+ * same pattern `get_project`/`bind_kit` use. */
112
+ export interface ConjureScreenProjectStore {
113
+ getProject(projectId: string): Promise<ProjectDetail>;
114
+ recordScreen(input: {
115
+ projectId: string;
116
+ screen: RecordScreenInput;
117
+ }): Promise<ProjectScreen>;
118
+ }
119
+ export interface ConjureScreenDeps {
120
+ projectStore: ConjureScreenProjectStore;
121
+ /** Used only to validate an *explicit* `kitId` resolves to a real kit before
122
+ * generating against it — default/sole kits came from bindings already
123
+ * validated at bind time. */
124
+ kitStore: KitStore;
125
+ generator: ScreenGenerator;
126
+ }
127
+ export interface ConjureScreenResult extends Record<string, unknown> {
128
+ screenId: string;
129
+ files: GeneratedFile[];
130
+ usage: UsageInfo;
131
+ }
132
+ /**
133
+ * True when `prompt` asks for kit-specific components (whole-word component noun
134
+ * or an explicit kit/component-library phrase). Exported for direct testing of
135
+ * the AC4/AC5 boundary.
136
+ */
137
+ export declare function promptRequiresKit(prompt: string): boolean;
138
+ /** A human title for the screen: first non-empty line of the prompt, whitespace
139
+ * collapsed, capped at 80 chars. Falls back to "Screen". */
140
+ export declare function deriveScreenTitle(prompt: string): string;
141
+ /**
142
+ * Derive a unique screenId from the prompt, disambiguating against a project's
143
+ * existing screens by appending `-2`, `-3`, … (same scheme `create_project`'s
144
+ * `suggestSlug` uses). Deterministic given the project's current screen set — no
145
+ * clock or randomness, so tests are stable.
146
+ */
147
+ export declare function uniqueScreenId(existing: ProjectScreen[], title: string): string;
148
+ /**
149
+ * Core conjure_screen logic. Exported standalone (bypassing the MCP transport)
150
+ * so programmatic callers get the same validation + resolution as the tool
151
+ * (mirrors `bind_kit`'s `bindKit`).
152
+ *
153
+ * Ordering is deliberate: validate the project (and that it's writable) and the
154
+ * blueprint seed *before* resolving the kit, and resolve the kit *before*
155
+ * generating — so a bad reference fails cheaply, with no artifact written.
156
+ */
157
+ export declare function conjureScreen(deps: ConjureScreenDeps, args: unknown): Promise<ConjureScreenResult>;
158
+ /**
159
+ * The M1 generation client: a deterministic, **offline** scaffold generator. It
160
+ * makes no model call — CI needs none (AC8) — and reports zero usage, which is
161
+ * the honest accounting for "no tokens were spent". M2 replaces this with a
162
+ * client that calls the configured endpoint behind the same `ScreenGenerator`
163
+ * interface.
164
+ *
165
+ * Honesty is load-bearing (AC5): a kitless scaffold's banner explicitly says no
166
+ * kit was used; a kit-targeted scaffold names the kit it targets but does *not*
167
+ * claim to have pulled that kit's components (M1 can't — that's M2's gauntlet).
168
+ */
169
+ export declare class LocalScaffoldScreenGenerator implements ScreenGenerator {
170
+ generate(request: ScreenGenerationRequest): Promise<ScreenGenerationResult>;
171
+ }
172
+ export declare function registerConjureScreenTool(server: McpServer, deps: ConjureScreenDeps): void;
173
+ export {};
174
+ //# sourceMappingURL=conjure_screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conjure_screen.d.ts","sourceRoot":"","sources":["../../src/tools/conjure_screen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,eAAO,MAAM,wBAAwB,+BAA+B,CAAC;AAErE,sEAAsE;AACtE,eAAO,MAAM,iBAAiB,mCAAoC,CAAC;AACnE,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAuBjE;;;;;GAKG;AACH,QAAA,MAAM,uBAAuB;;;;;;;;;;;kBASlB,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;cAEc;AACd,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE/D;0DAC0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,gBAAgB,CAAC;CACvB;AAED;;sCAEsC;AACtC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC9B;AAED;;gDAEgD;AAChD,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;oFAEoF;AACpF,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,GAAG,EAAE,WAAW,GAAG,IAAI,CAAC;IACxB,2DAA2D;IAC3D,SAAS,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC7E;AAED;;gDAEgD;AAChD,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACtD,YAAY,CAAC,KAAK,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,iBAAiB,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC/F;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,yBAAyB,CAAC;IACxC;;iCAE6B;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClE,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;CAClB;AAmED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAMzD;AAID;4DAC4D;AAC5D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQxD;AAkBD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/E;AAwFD;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,iBAAiB,EACvB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,mBAAmB,CAAC,CAuD9B;AAoBD;;;;;;;;;;GAUG;AACH,qBAAa,4BAA6B,YAAW,eAAe;IAC5D,QAAQ,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAQlF;AA2GD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAmD1F"}
@@ -0,0 +1,458 @@
1
+ import { z } from "zod";
2
+ import { KIT_ID_PATTERN, ProjectNotFoundError, WrongProjectTypeError, getKit } from "./get_kit.js";
3
+ import { PROJECT_ID_PATTERN, ProjectStoreError } from "./create_project.js";
4
+ export const CONJURE_SCREEN_TOOL_NAME = "mcp__genie__conjure_screen";
5
+ /** Target framework for the generated screen artifact (RFC §9.19). */
6
+ export const SCREEN_FRAMEWORKS = ["react", "vue", "html"];
7
+ const projectIdSchema = z
8
+ .string()
9
+ .regex(PROJECT_ID_PATTERN, "projectId must be a 3-64 character slug containing only lowercase letters, numbers, and hyphens.");
10
+ const kitIdSchema = z
11
+ .string()
12
+ .regex(KIT_ID_PATTERN, "kitId must be a 3-64 character slug containing only lowercase letters, numbers, and hyphens.");
13
+ const blueprintIdSchema = z
14
+ .string()
15
+ .regex(PROJECT_ID_PATTERN, "blueprintId must be a 3-64 character slug containing only lowercase letters, numbers, and hyphens.");
16
+ /**
17
+ * Input schema (RFC §9.19). `prompt` is bounded (8..8192) so a stray empty
18
+ * string or a megabyte paste can't reach the generator; `framework` defaults to
19
+ * `react`; `model` is an opaque routing hint (default `design-default`) the M1
20
+ * local generator ignores and M2 forwards to the configured endpoint.
21
+ */
22
+ const conjureScreenArgsSchema = z
23
+ .object({
24
+ projectId: projectIdSchema,
25
+ prompt: z.string().min(8).max(8192),
26
+ kitId: kitIdSchema.optional(),
27
+ blueprintId: blueprintIdSchema.optional(),
28
+ framework: z.enum(SCREEN_FRAMEWORKS).default("react"),
29
+ model: z.string().min(1).max(128).default("design-default"),
30
+ })
31
+ .strict();
32
+ // ── Kit-specificity heuristic (AC4 vs AC5) ────────────────────────────────────
33
+ //
34
+ // In the *kitless* branch we must decide whether the prompt "asks for
35
+ // kit-specific components" (→ stop, AC4) or merely "basic structure" (→ neutral
36
+ // scaffold, AC5). M1 uses a deterministic keyword heuristic — no model call, so
37
+ // it is testable and CI-stable. It intentionally errs toward *permitting* a
38
+ // neutral scaffold: a prompt only trips the kit requirement when it explicitly
39
+ // names kit-level component nouns or references a kit/component library. M2 can
40
+ // deepen this with the model's own read of the prompt.
41
+ /** Component nouns that only a UI kit can supply — interactive widgets and
42
+ * overlays. Matched as whole words, case-insensitively. Structural and
43
+ * *navigation* landmarks (header, footer, nav, navbar, sidebar, toolbar, hero,
44
+ * section, banner, menu, breadcrumb, page, layout, grid) are deliberately
45
+ * absent — those are framework-neutral and a kitless scaffold can render them
46
+ * honestly (AC5). The heuristic errs toward permitting a neutral scaffold. */
47
+ const KIT_COMPONENT_TERMS = [
48
+ "button",
49
+ "card",
50
+ "input",
51
+ "textarea",
52
+ "form",
53
+ "modal",
54
+ "dialog",
55
+ "dropdown",
56
+ "select",
57
+ "combobox",
58
+ "table",
59
+ "datagrid",
60
+ "badge",
61
+ "avatar",
62
+ "tab",
63
+ "tabs",
64
+ "accordion",
65
+ "toast",
66
+ "snackbar",
67
+ "chip",
68
+ "slider",
69
+ "switch",
70
+ "toggle",
71
+ "checkbox",
72
+ "radio",
73
+ "tooltip",
74
+ "popover",
75
+ "pagination",
76
+ "stepper",
77
+ "alert",
78
+ "datepicker",
79
+ "carousel",
80
+ "spinner",
81
+ "progressbar",
82
+ "drawer",
83
+ ];
84
+ /** Phrases that explicitly invoke the kit / component library. */
85
+ const KIT_PHRASES = [
86
+ "use the kit",
87
+ "using the kit",
88
+ "from the kit",
89
+ "kit component",
90
+ "kit's component",
91
+ "component library",
92
+ "design system component",
93
+ ];
94
+ /**
95
+ * True when `prompt` asks for kit-specific components (whole-word component noun
96
+ * or an explicit kit/component-library phrase). Exported for direct testing of
97
+ * the AC4/AC5 boundary.
98
+ */
99
+ export function promptRequiresKit(prompt) {
100
+ const lower = prompt.toLowerCase();
101
+ if (KIT_PHRASES.some((phrase) => lower.includes(phrase)))
102
+ return true;
103
+ // Whole-word match so "input" matches but "throughput" does not, and
104
+ // "form" matches but "information"/"platform" do not.
105
+ return KIT_COMPONENT_TERMS.some((term) => new RegExp(`\\b${term}s?\\b`).test(lower));
106
+ }
107
+ // ── Screen id + title derivation (deterministic; no clock/random) ─────────────
108
+ /** A human title for the screen: first non-empty line of the prompt, whitespace
109
+ * collapsed, capped at 80 chars. Falls back to "Screen". */
110
+ export function deriveScreenTitle(prompt) {
111
+ const firstLine = prompt
112
+ .split("\n")
113
+ .map((line) => line.trim())
114
+ .find((line) => line.length > 0);
115
+ const collapsed = (firstLine ?? "").replace(/\s+/g, " ").trim();
116
+ if (!collapsed)
117
+ return "Screen";
118
+ return collapsed.length > 80 ? `${collapsed.slice(0, 79).trimEnd()}…` : collapsed;
119
+ }
120
+ /** Slugify a title into a screenId base matching `^[a-z0-9-]{3,64}$`. Falls back
121
+ * to "screen" when the title has no slug-able characters or is too short. */
122
+ function slugifyScreen(title) {
123
+ const slug = title
124
+ // Locale-independent: `toLocaleLowerCase()` would fold letters per the host
125
+ // locale (e.g. Turkish `I`→`ı`), making the same title yield different ids
126
+ // on different servers and breaking the `[a-z0-9]` slug. determinism is the
127
+ // contract here, so use the Unicode-default `toLowerCase()`.
128
+ .toLowerCase()
129
+ .replace(/[^a-z0-9]+/g, "-")
130
+ .replace(/^-+|-+$/g, "")
131
+ .slice(0, 64)
132
+ .replace(/-+$/g, "");
133
+ return slug.length >= 3 ? slug : "screen";
134
+ }
135
+ /**
136
+ * Derive a unique screenId from the prompt, disambiguating against a project's
137
+ * existing screens by appending `-2`, `-3`, … (same scheme `create_project`'s
138
+ * `suggestSlug` uses). Deterministic given the project's current screen set — no
139
+ * clock or randomness, so tests are stable.
140
+ */
141
+ export function uniqueScreenId(existing, title) {
142
+ const base = slugifyScreen(title);
143
+ const taken = new Set(existing.map((screen) => screen.id));
144
+ if (!taken.has(base))
145
+ return base;
146
+ for (let suffix = 2; suffix < 1000; suffix += 1) {
147
+ // Keep the whole id within 64 chars even after the suffix.
148
+ const candidate = `${base.slice(0, 64 - `-${suffix}`.length)}-${suffix}`;
149
+ if (!taken.has(candidate))
150
+ return candidate;
151
+ }
152
+ return base;
153
+ }
154
+ /** Entry filename per framework — the primary artifact the manifest points at. */
155
+ function entryFileName(framework) {
156
+ switch (framework) {
157
+ case "react":
158
+ return "index.tsx";
159
+ case "vue":
160
+ return "index.vue";
161
+ case "html":
162
+ return "index.html";
163
+ }
164
+ }
165
+ /**
166
+ * Validate an explicit `kitId` resolves to a real `GENIE_KIT`, mapping every
167
+ * shape `getKit` can reject with — malformed id (Zod), missing kit
168
+ * (`ProjectNotFoundError`), non-kit project (`WrongProjectTypeError`) — onto the
169
+ * single `ERR_KIT_NOT_FOUND` code (mirrors `bind_kit`'s `assertKitExists`).
170
+ */
171
+ async function assertExplicitKitExists(kitStore, kitId) {
172
+ try {
173
+ await getKit(kitStore, { kitId });
174
+ }
175
+ catch (error) {
176
+ if (error instanceof ProjectNotFoundError ||
177
+ error instanceof WrongProjectTypeError ||
178
+ error instanceof z.ZodError) {
179
+ throw new ProjectStoreError("ERR_KIT_NOT_FOUND", `Kit "${kitId}" was not found.`, { kitId });
180
+ }
181
+ throw error;
182
+ }
183
+ }
184
+ /**
185
+ * Resolve the effective kit for a screen using the D-F ladder. Returns the
186
+ * resolved kit (with provenance) or `null` when nothing resolves. Does *not*
187
+ * decide the kitless error — that depends on the prompt (see `conjureScreen`).
188
+ */
189
+ async function resolveKit(deps, project, explicitKitId) {
190
+ if (explicitKitId !== undefined) {
191
+ await assertExplicitKitExists(deps.kitStore, explicitKitId);
192
+ return { kitId: explicitKitId, via: "explicit" };
193
+ }
194
+ if (project.defaultKitId) {
195
+ return { kitId: project.defaultKitId, via: "default" };
196
+ }
197
+ if (project.kitBindings.length === 1) {
198
+ const sole = project.kitBindings[0];
199
+ if (sole)
200
+ return { kitId: sole.kitId, via: "sole" };
201
+ }
202
+ return null;
203
+ }
204
+ /**
205
+ * Validate `blueprintId` (AC6) resolves to a project of `kind: "blueprint"`,
206
+ * mapping a missing project or a non-blueprint onto `ERR_BLUEPRINT_NOT_FOUND`.
207
+ */
208
+ async function assertBlueprint(deps, blueprintId) {
209
+ let detail;
210
+ try {
211
+ detail = await deps.projectStore.getProject(blueprintId);
212
+ }
213
+ catch (error) {
214
+ if (error instanceof ProjectStoreError && error.code === "ERR_PROJECT_NOT_FOUND") {
215
+ throw new ProjectStoreError("ERR_BLUEPRINT_NOT_FOUND", `Blueprint "${blueprintId}" was not found.`);
216
+ }
217
+ throw error;
218
+ }
219
+ if (detail.kind !== "blueprint") {
220
+ throw new ProjectStoreError("ERR_BLUEPRINT_NOT_FOUND", `Project "${blueprintId}" is a ${detail.kind}, not a blueprint.`);
221
+ }
222
+ return { id: blueprintId };
223
+ }
224
+ /**
225
+ * Core conjure_screen logic. Exported standalone (bypassing the MCP transport)
226
+ * so programmatic callers get the same validation + resolution as the tool
227
+ * (mirrors `bind_kit`'s `bindKit`).
228
+ *
229
+ * Ordering is deliberate: validate the project (and that it's writable) and the
230
+ * blueprint seed *before* resolving the kit, and resolve the kit *before*
231
+ * generating — so a bad reference fails cheaply, with no artifact written.
232
+ */
233
+ export async function conjureScreen(deps, args) {
234
+ const parsed = conjureScreenArgsSchema.parse(args);
235
+ // 1. Project must exist and be writable (a screen is a mutation). getProject
236
+ // throws ProjectStoreError("ERR_PROJECT_NOT_FOUND") for a missing project.
237
+ const project = await deps.projectStore.getProject(parsed.projectId);
238
+ if (!project.canEdit) {
239
+ throw new ProjectStoreError("ERR_PROJECT_READONLY", `Project "${parsed.projectId}" is read-only and cannot be modified.`, { projectId: parsed.projectId });
240
+ }
241
+ // 2. Blueprint seed (AC6), validated before we spend any generation effort.
242
+ const blueprint = parsed.blueprintId
243
+ ? await assertBlueprint(deps, parsed.blueprintId)
244
+ : undefined;
245
+ // 3. Resolve the kit (AC3).
246
+ const kit = await resolveKit(deps, project, parsed.kitId);
247
+ // 4. Kitless branch: stop for a kit-specific prompt (AC4), scaffold otherwise
248
+ // (AC5). Never invent a kit.
249
+ if (kit === null && promptRequiresKit(parsed.prompt)) {
250
+ throw new ProjectStoreError("ERR_PROJECT_KIT_REQUIRED", kitRequiredMessage(project), {
251
+ projectId: parsed.projectId,
252
+ });
253
+ }
254
+ // 5. Reserve a unique id + entry path so the manifest entry and returned files
255
+ // agree (the tool owns layout; the generator owns contents).
256
+ const title = deriveScreenTitle(parsed.prompt);
257
+ const screenId = uniqueScreenId(project.screens, title);
258
+ const entryPath = `screens/${screenId}/${entryFileName(parsed.framework)}`;
259
+ // 6. Generate (M1: offline local scaffold; M2: real endpoint, same seam).
260
+ const generated = await deps.generator.generate({
261
+ projectId: parsed.projectId,
262
+ screenId,
263
+ entryPath,
264
+ prompt: parsed.prompt,
265
+ framework: parsed.framework,
266
+ model: parsed.model,
267
+ kit,
268
+ blueprint,
269
+ });
270
+ // 7. Record the artifact reference in `.genie/project.json` (AC7).
271
+ await deps.projectStore.recordScreen({
272
+ projectId: parsed.projectId,
273
+ screen: { id: screenId, path: entryPath, title },
274
+ });
275
+ return { screenId, files: generated.files, usage: generated.usage };
276
+ }
277
+ /** Message for `ERR_PROJECT_KIT_REQUIRED`, differentiating the two kitless
278
+ * dead-ends (D-F step 4): nothing bound vs. several bound with no default. */
279
+ function kitRequiredMessage(project) {
280
+ const boundKitIds = project.kitBindings.map((binding) => binding.kitId);
281
+ if (boundKitIds.length === 0) {
282
+ return (`No kit is bound to project "${project.id}". Bind one with bind_kit or pass an ` +
283
+ `explicit kitId before generating kit-specific components.`);
284
+ }
285
+ return (`Project "${project.id}" has multiple bound kits (${boundKitIds.join(", ")}) but no ` +
286
+ `default; pass an explicit kitId or set a default kit before generating kit-specific components.`);
287
+ }
288
+ // ── The default M1 generator: deterministic, offline scaffold ─────────────────
289
+ /**
290
+ * The M1 generation client: a deterministic, **offline** scaffold generator. It
291
+ * makes no model call — CI needs none (AC8) — and reports zero usage, which is
292
+ * the honest accounting for "no tokens were spent". M2 replaces this with a
293
+ * client that calls the configured endpoint behind the same `ScreenGenerator`
294
+ * interface.
295
+ *
296
+ * Honesty is load-bearing (AC5): a kitless scaffold's banner explicitly says no
297
+ * kit was used; a kit-targeted scaffold names the kit it targets but does *not*
298
+ * claim to have pulled that kit's components (M1 can't — that's M2's gauntlet).
299
+ */
300
+ export class LocalScaffoldScreenGenerator {
301
+ async generate(request) {
302
+ const content = renderScaffold(request);
303
+ return {
304
+ files: [{ path: request.entryPath, content, encoding: "utf-8" }],
305
+ // No model call → no tokens, no cost. Reported honestly (AC8).
306
+ usage: { promptTokens: 0, completionTokens: 0, totalTokens: 0, costUsd: 0 },
307
+ };
308
+ }
309
+ }
310
+ /** A one-line, honest provenance note for the scaffold header comment. */
311
+ function provenanceNote(request) {
312
+ const parts = [];
313
+ if (request.kit) {
314
+ parts.push(`targeting kit "${request.kit.kitId}" (resolved via ${request.kit.via})`);
315
+ }
316
+ else {
317
+ parts.push("framework-neutral scaffold — no UI kit was used");
318
+ }
319
+ if (request.blueprint)
320
+ parts.push(`seeded from blueprint "${request.blueprint.id}"`);
321
+ return parts.join("; ");
322
+ }
323
+ /** Render the entry artifact for the requested framework. Deterministic — the
324
+ * same request always produces the same bytes. */
325
+ function renderScaffold(request) {
326
+ const title = deriveScreenTitle(request.prompt);
327
+ const note = provenanceNote(request);
328
+ switch (request.framework) {
329
+ case "html":
330
+ return [
331
+ "<!doctype html>",
332
+ `<!-- genie conjure_screen (M1): ${note} -->`,
333
+ '<html lang="en">',
334
+ " <head>",
335
+ ' <meta charset="utf-8" />',
336
+ ' <meta name="viewport" content="width=device-width, initial-scale=1" />',
337
+ ` <title>${escapeHtml(title)}</title>`,
338
+ " </head>",
339
+ " <body>",
340
+ " <header><h1>" + escapeHtml(title) + "</h1></header>",
341
+ " <main><!-- generated screen body --></main>",
342
+ " <footer></footer>",
343
+ " </body>",
344
+ "</html>",
345
+ "",
346
+ ].join("\n");
347
+ case "vue":
348
+ return [
349
+ `<!-- genie conjure_screen (M1): ${note} -->`,
350
+ "<template>",
351
+ ' <main class="screen">',
352
+ ` <h1>${escapeHtml(title)}</h1>`,
353
+ " <!-- generated screen body -->",
354
+ " </main>",
355
+ "</template>",
356
+ "",
357
+ '<script setup lang="ts"></script>',
358
+ "",
359
+ ].join("\n");
360
+ case "react":
361
+ return [
362
+ `// genie conjure_screen (M1): ${note}`,
363
+ "export default function Screen() {",
364
+ " return (",
365
+ ' <main className="screen">',
366
+ ` <h1>${escapeJsx(title)}</h1>`,
367
+ " {/* generated screen body */}",
368
+ " </main>",
369
+ " );",
370
+ "}",
371
+ "",
372
+ ].join("\n");
373
+ }
374
+ }
375
+ function escapeHtml(value) {
376
+ return value
377
+ .replace(/&/g, "&amp;")
378
+ .replace(/</g, "&lt;")
379
+ .replace(/>/g, "&gt;")
380
+ .replace(/"/g, "&quot;");
381
+ }
382
+ /** JSX text nodes only need `{`, `}`, `<`, `>`, `&` neutralized; the title is
383
+ * plain text so we escape the structural characters that would break parsing. */
384
+ function escapeJsx(value) {
385
+ return value
386
+ .replace(/&/g, "&amp;")
387
+ .replace(/</g, "&lt;")
388
+ .replace(/>/g, "&gt;")
389
+ .replace(/[{}]/g, (char) => (char === "{" ? "&#123;" : "&#125;"));
390
+ }
391
+ /** Output schema mirroring RFC §9.19 (`screenId`, `files[]`, `usage`). */
392
+ const conjureScreenOutputShape = {
393
+ screenId: z.string().regex(/^[a-z0-9-]{3,64}$/),
394
+ files: z.array(z
395
+ .object({
396
+ path: z.string(),
397
+ content: z.string(),
398
+ encoding: z.enum(["utf-8", "base64"]),
399
+ })
400
+ .strict()),
401
+ usage: z
402
+ .object({
403
+ promptTokens: z.number().int().min(0),
404
+ completionTokens: z.number().int().min(0),
405
+ totalTokens: z.number().int().min(0),
406
+ costUsd: z.number().min(0).optional(),
407
+ })
408
+ .strict(),
409
+ };
410
+ export function registerConjureScreenTool(server, deps) {
411
+ server.registerTool(CONJURE_SCREEN_TOOL_NAME, {
412
+ title: "Conjure screen",
413
+ description: "Generate a full-page screen artifact inside a project, constrained by the project's " +
414
+ "bound UI kit. Resolves the kit by explicit kitId, then the project default, then a sole " +
415
+ "reachable binding; a kit-specific prompt with no resolvable kit stops with " +
416
+ "ERR_PROJECT_KIT_REQUIRED rather than inventing one. Records the screen in the project " +
417
+ "manifest and returns its files and token usage. Typically follows create_project + " +
418
+ "bind_kit; `design-default` is the valid gateway routing alias and may be overridden " +
419
+ "with a concrete model id exposed by the configured endpoint.",
420
+ inputSchema: {
421
+ projectId: projectIdSchema,
422
+ prompt: z.string().min(8).max(8192),
423
+ kitId: kitIdSchema.optional(),
424
+ blueprintId: blueprintIdSchema.optional(),
425
+ framework: z.enum(SCREEN_FRAMEWORKS).default("react"),
426
+ model: z.string().min(1).max(128).default("design-default"),
427
+ },
428
+ outputSchema: conjureScreenOutputShape,
429
+ }, async (args) => {
430
+ try {
431
+ const result = await conjureScreen(deps, args);
432
+ return {
433
+ content: [{ type: "text", text: JSON.stringify(result) }],
434
+ structuredContent: result,
435
+ };
436
+ }
437
+ catch (error) {
438
+ if (error instanceof ProjectStoreError) {
439
+ return {
440
+ isError: true,
441
+ content: [
442
+ {
443
+ type: "text",
444
+ text: JSON.stringify({
445
+ code: error.code,
446
+ message: error.message,
447
+ ...(error.projectId ? { projectId: error.projectId } : {}),
448
+ ...(error.kitId ? { kitId: error.kitId } : {}),
449
+ }),
450
+ },
451
+ ],
452
+ };
453
+ }
454
+ throw error;
455
+ }
456
+ });
457
+ }
458
+ //# sourceMappingURL=conjure_screen.js.map