@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.
- package/README.md +15 -0
- package/dist/auth/bearer.d.ts +49 -0
- package/dist/auth/bearer.d.ts.map +1 -0
- package/dist/auth/bearer.js +159 -0
- package/dist/auth/bearer.js.map +1 -0
- package/dist/auth/oauth/authorize.d.ts +19 -0
- package/dist/auth/oauth/authorize.d.ts.map +1 -0
- package/dist/auth/oauth/authorize.js +111 -0
- package/dist/auth/oauth/authorize.js.map +1 -0
- package/dist/auth/oauth/config.d.ts +10 -0
- package/dist/auth/oauth/config.d.ts.map +1 -0
- package/dist/auth/oauth/config.js +16 -0
- package/dist/auth/oauth/config.js.map +1 -0
- package/dist/auth/oauth/dcr.d.ts +15 -0
- package/dist/auth/oauth/dcr.d.ts.map +1 -0
- package/dist/auth/oauth/dcr.js +38 -0
- package/dist/auth/oauth/dcr.js.map +1 -0
- package/dist/auth/oauth/jwt.d.ts +13 -0
- package/dist/auth/oauth/jwt.d.ts.map +1 -0
- package/dist/auth/oauth/jwt.js +46 -0
- package/dist/auth/oauth/jwt.js.map +1 -0
- package/dist/auth/oauth/metadata.d.ts +9 -0
- package/dist/auth/oauth/metadata.d.ts.map +1 -0
- package/dist/auth/oauth/metadata.js +19 -0
- package/dist/auth/oauth/metadata.js.map +1 -0
- package/dist/auth/oauth/router.d.ts +32 -0
- package/dist/auth/oauth/router.d.ts.map +1 -0
- package/dist/auth/oauth/router.js +159 -0
- package/dist/auth/oauth/router.js.map +1 -0
- package/dist/auth/oauth/store.d.ts +55 -0
- package/dist/auth/oauth/store.d.ts.map +1 -0
- package/dist/auth/oauth/store.js +63 -0
- package/dist/auth/oauth/store.js.map +1 -0
- package/dist/auth/oauth/token.d.ts +21 -0
- package/dist/auth/oauth/token.d.ts.map +1 -0
- package/dist/auth/oauth/token.js +77 -0
- package/dist/auth/oauth/token.js.map +1 -0
- package/dist/auth/oidc/group-policy.d.ts +43 -0
- package/dist/auth/oidc/group-policy.d.ts.map +1 -0
- package/dist/auth/oidc/group-policy.js +54 -0
- package/dist/auth/oidc/group-policy.js.map +1 -0
- package/dist/auth/oidc/verifier.d.ts +42 -0
- package/dist/auth/oidc/verifier.d.ts.map +1 -0
- package/dist/auth/oidc/verifier.js +145 -0
- package/dist/auth/oidc/verifier.js.map +1 -0
- package/dist/auth/token-cli.d.ts +9 -0
- package/dist/auth/token-cli.d.ts.map +1 -0
- package/dist/auth/token-cli.js +98 -0
- package/dist/auth/token-cli.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +149 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/redact.d.ts +20 -0
- package/dist/config/redact.d.ts.map +1 -0
- package/dist/config/redact.js +77 -0
- package/dist/config/redact.js.map +1 -0
- package/dist/config/secrets.d.ts +100 -0
- package/dist/config/secrets.d.ts.map +1 -0
- package/dist/config/secrets.js +130 -0
- package/dist/config/secrets.js.map +1 -0
- package/dist/framework/html.d.ts +103 -0
- package/dist/framework/html.d.ts.map +1 -0
- package/dist/framework/html.js +271 -0
- package/dist/framework/html.js.map +1 -0
- package/dist/framework/interface.d.ts +130 -0
- package/dist/framework/interface.d.ts.map +1 -0
- package/dist/framework/interface.js +112 -0
- package/dist/framework/interface.js.map +1 -0
- package/dist/framework/react.d.ts +133 -0
- package/dist/framework/react.d.ts.map +1 -0
- package/dist/framework/react.js +243 -0
- package/dist/framework/react.js.map +1 -0
- package/dist/framework/vue.d.ts +99 -0
- package/dist/framework/vue.d.ts.map +1 -0
- package/dist/framework/vue.js +375 -0
- package/dist/framework/vue.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/client.d.ts +81 -0
- package/dist/llm/client.d.ts.map +1 -0
- package/dist/llm/client.js +141 -0
- package/dist/llm/client.js.map +1 -0
- package/dist/llm/component-response.d.ts +111 -0
- package/dist/llm/component-response.d.ts.map +1 -0
- package/dist/llm/component-response.js +167 -0
- package/dist/llm/component-response.js.map +1 -0
- package/dist/llm/generated-files.d.ts +10 -0
- package/dist/llm/generated-files.d.ts.map +1 -0
- package/dist/llm/generated-files.js +26 -0
- package/dist/llm/generated-files.js.map +1 -0
- package/dist/llm/prompts/CHANGELOG.md +70 -0
- package/dist/llm/prompts/generate-component.system.md +99 -0
- package/dist/llm/prompts/refine-component.system.md +112 -0
- package/dist/llm/prompts.d.ts +66 -0
- package/dist/llm/prompts.d.ts.map +1 -0
- package/dist/llm/prompts.js +78 -0
- package/dist/llm/prompts.js.map +1 -0
- package/dist/llm/retry.d.ts +183 -0
- package/dist/llm/retry.d.ts.map +1 -0
- package/dist/llm/retry.js +475 -0
- package/dist/llm/retry.js.map +1 -0
- package/dist/llm/schema.d.ts +129 -0
- package/dist/llm/schema.d.ts.map +1 -0
- package/dist/llm/schema.js +147 -0
- package/dist/llm/schema.js.map +1 -0
- package/dist/llm/validate.d.ts +107 -0
- package/dist/llm/validate.d.ts.map +1 -0
- package/dist/llm/validate.js +174 -0
- package/dist/llm/validate.js.map +1 -0
- package/dist/manifest/compiler.d.ts +112 -0
- package/dist/manifest/compiler.d.ts.map +1 -0
- package/dist/manifest/compiler.js +306 -0
- package/dist/manifest/compiler.js.map +1 -0
- package/dist/manifest/ensure.d.ts +46 -0
- package/dist/manifest/ensure.d.ts.map +1 -0
- package/dist/manifest/ensure.js +49 -0
- package/dist/manifest/ensure.js.map +1 -0
- package/dist/manifest/index.d.ts +13 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +13 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/middleware/plan-guard.d.ts +167 -0
- package/dist/middleware/plan-guard.d.ts.map +1 -0
- package/dist/middleware/plan-guard.js +190 -0
- package/dist/middleware/plan-guard.js.map +1 -0
- package/dist/plans/index.d.ts +71 -0
- package/dist/plans/index.d.ts.map +1 -0
- package/dist/plans/index.js +252 -0
- package/dist/plans/index.js.map +1 -0
- package/dist/schemas/component.schema.json +114 -0
- package/dist/server.d.ts +96 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +258 -0
- package/dist/server.js.map +1 -0
- package/dist/store/empty-manifest.d.ts +58 -0
- package/dist/store/empty-manifest.d.ts.map +1 -0
- package/dist/store/empty-manifest.js +59 -0
- package/dist/store/empty-manifest.js.map +1 -0
- package/dist/store/git-host.d.ts +120 -0
- package/dist/store/git-host.d.ts.map +1 -0
- package/dist/store/git-host.js +796 -0
- package/dist/store/git-host.js.map +1 -0
- package/dist/store/index.d.ts +5 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +4 -0
- package/dist/store/index.js.map +1 -0
- package/dist/store/interface.d.ts +322 -0
- package/dist/store/interface.d.ts.map +1 -0
- package/dist/store/interface.js +100 -0
- package/dist/store/interface.js.map +1 -0
- package/dist/store/kit-files.d.ts +88 -0
- package/dist/store/kit-files.d.ts.map +1 -0
- package/dist/store/kit-files.js +199 -0
- package/dist/store/kit-files.js.map +1 -0
- package/dist/store/local.d.ts +70 -0
- package/dist/store/local.d.ts.map +1 -0
- package/dist/store/local.js +651 -0
- package/dist/store/local.js.map +1 -0
- package/dist/store/manifest.d.ts +44 -0
- package/dist/store/manifest.d.ts.map +1 -0
- package/dist/store/manifest.js +116 -0
- package/dist/store/manifest.js.map +1 -0
- package/dist/store/viewer-assets.d.ts +20 -0
- package/dist/store/viewer-assets.d.ts.map +1 -0
- package/dist/store/viewer-assets.js +118 -0
- package/dist/store/viewer-assets.js.map +1 -0
- package/dist/sync/anchor.d.ts +125 -0
- package/dist/sync/anchor.d.ts.map +1 -0
- package/dist/sync/anchor.js +210 -0
- package/dist/sync/anchor.js.map +1 -0
- package/dist/sync/index.d.ts +15 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +15 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/orchestrator.d.ts +160 -0
- package/dist/sync/orchestrator.d.ts.map +1 -0
- package/dist/sync/orchestrator.js +288 -0
- package/dist/sync/orchestrator.js.map +1 -0
- package/dist/tools/bind_kit.d.ts +29 -0
- package/dist/tools/bind_kit.d.ts.map +1 -0
- package/dist/tools/bind_kit.js +70 -0
- package/dist/tools/bind_kit.js.map +1 -0
- package/dist/tools/conjure.d.ts +141 -0
- package/dist/tools/conjure.d.ts.map +1 -0
- package/dist/tools/conjure.js +655 -0
- package/dist/tools/conjure.js.map +1 -0
- package/dist/tools/conjure_screen.d.ts +174 -0
- package/dist/tools/conjure_screen.d.ts.map +1 -0
- package/dist/tools/conjure_screen.js +458 -0
- package/dist/tools/conjure_screen.js.map +1 -0
- package/dist/tools/create_kit.d.ts +32 -0
- package/dist/tools/create_kit.d.ts.map +1 -0
- package/dist/tools/create_kit.js +131 -0
- package/dist/tools/create_kit.js.map +1 -0
- package/dist/tools/create_project.d.ts +267 -0
- package/dist/tools/create_project.d.ts.map +1 -0
- package/dist/tools/create_project.js +546 -0
- package/dist/tools/create_project.js.map +1 -0
- package/dist/tools/delete_files.d.ts +93 -0
- package/dist/tools/delete_files.d.ts.map +1 -0
- package/dist/tools/delete_files.js +276 -0
- package/dist/tools/delete_files.js.map +1 -0
- package/dist/tools/delete_project.d.ts +43 -0
- package/dist/tools/delete_project.d.ts.map +1 -0
- package/dist/tools/delete_project.js +118 -0
- package/dist/tools/delete_project.js.map +1 -0
- package/dist/tools/get_kit.d.ts +28 -0
- package/dist/tools/get_kit.d.ts.map +1 -0
- package/dist/tools/get_kit.js +95 -0
- package/dist/tools/get_kit.js.map +1 -0
- package/dist/tools/get_project.d.ts +37 -0
- package/dist/tools/get_project.d.ts.map +1 -0
- package/dist/tools/get_project.js +71 -0
- package/dist/tools/get_project.js.map +1 -0
- package/dist/tools/list_components.d.ts +42 -0
- package/dist/tools/list_components.d.ts.map +1 -0
- package/dist/tools/list_components.js +125 -0
- package/dist/tools/list_components.js.map +1 -0
- package/dist/tools/list_files.d.ts +32 -0
- package/dist/tools/list_files.d.ts.map +1 -0
- package/dist/tools/list_files.js +109 -0
- package/dist/tools/list_files.js.map +1 -0
- package/dist/tools/list_kits.d.ts +14 -0
- package/dist/tools/list_kits.d.ts.map +1 -0
- package/dist/tools/list_kits.js +41 -0
- package/dist/tools/list_kits.js.map +1 -0
- package/dist/tools/list_projects.d.ts +23 -0
- package/dist/tools/list_projects.d.ts.map +1 -0
- package/dist/tools/list_projects.js +66 -0
- package/dist/tools/list_projects.js.map +1 -0
- package/dist/tools/plan.d.ts +16 -0
- package/dist/tools/plan.d.ts.map +1 -0
- package/dist/tools/plan.js +146 -0
- package/dist/tools/plan.js.map +1 -0
- package/dist/tools/preview.d.ts +289 -0
- package/dist/tools/preview.d.ts.map +1 -0
- package/dist/tools/preview.js +672 -0
- package/dist/tools/preview.js.map +1 -0
- package/dist/tools/read_file.d.ts +40 -0
- package/dist/tools/read_file.d.ts.map +1 -0
- package/dist/tools/read_file.js +114 -0
- package/dist/tools/read_file.js.map +1 -0
- package/dist/tools/refine.d.ts +220 -0
- package/dist/tools/refine.d.ts.map +1 -0
- package/dist/tools/refine.js +501 -0
- package/dist/tools/refine.js.map +1 -0
- package/dist/tools/validate.d.ts +74 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +224 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tools/write_files.d.ts +158 -0
- package/dist/tools/write_files.d.ts.map +1 -0
- package/dist/tools/write_files.js +541 -0
- package/dist/tools/write_files.js.map +1 -0
- package/dist/transport.d.ts +77 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +448 -0
- package/dist/transport.js.map +1 -0
- package/dist/ui/card-asset-broker.d.ts +42 -0
- package/dist/ui/card-asset-broker.d.ts.map +1 -0
- package/dist/ui/card-asset-broker.js +479 -0
- package/dist/ui/card-asset-broker.js.map +1 -0
- package/dist/ui/grid-resource.d.ts +252 -0
- package/dist/ui/grid-resource.d.ts.map +1 -0
- package/dist/ui/grid-resource.js +680 -0
- package/dist/ui/grid-resource.js.map +1 -0
- package/dist/ui/viewer-static/index.html +95 -0
- package/dist/ui/viewer-static/viewer.css +451 -0
- package/dist/ui/viewer-static/viewer.js +1405 -0
- package/dist/validate/full-scan.d.ts +87 -0
- package/dist/validate/full-scan.d.ts.map +1 -0
- package/dist/validate/full-scan.js +299 -0
- package/dist/validate/full-scan.js.map +1 -0
- package/dist/validate/index.d.ts +15 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +18 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/marker.d.ts +89 -0
- package/dist/validate/marker.d.ts.map +1 -0
- package/dist/validate/marker.js +87 -0
- package/dist/validate/marker.js.map +1 -0
- package/dist/validate/phash.d.ts +135 -0
- package/dist/validate/phash.d.ts.map +1 -0
- package/dist/validate/phash.js +307 -0
- package/dist/validate/phash.js.map +1 -0
- package/dist/validate/render.d.ts +38 -0
- package/dist/validate/render.d.ts.map +1 -0
- package/dist/validate/render.js +155 -0
- package/dist/validate/render.js.map +1 -0
- package/dist/watch/index.d.ts +12 -0
- package/dist/watch/index.d.ts.map +1 -0
- package/dist/watch/index.js +12 -0
- package/dist/watch/index.js.map +1 -0
- package/dist/watch/watcher.d.ts +65 -0
- package/dist/watch/watcher.d.ts.map +1 -0
- package/dist/watch/watcher.js +238 -0
- package/dist/watch/watcher.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conjure_screen.js","sourceRoot":"","sources":["../../src/tools/conjure_screen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { KitStore } from "../store/interface.js";
|
|
3
|
+
/**
|
|
4
|
+
* Derive a URL-safe slug from a human-readable name.
|
|
5
|
+
* Lowercases, replaces spaces/underscores with hyphens, collapses
|
|
6
|
+
* runs of hyphens, and trims leading/trailing hyphens.
|
|
7
|
+
*
|
|
8
|
+
* Truncates to `SLUG_MAX_LENGTH` (re-trimming a trailing hyphen the cut
|
|
9
|
+
* may expose) so `buildKitId`'s output always fits the 64-char id budget
|
|
10
|
+
* that `KIT_ID_PATTERN` enforces — names up to `NAME_MAX_LENGTH` (64 chars)
|
|
11
|
+
* would otherwise slugify to more than that once the `-<6-char-hex>`
|
|
12
|
+
* suffix is appended, producing a kitId `get_kit`/`bind_kit` reject.
|
|
13
|
+
*/
|
|
14
|
+
export declare function slugify(name: string): string;
|
|
15
|
+
/** Generate a 6-character hex suffix for deduplication. */
|
|
16
|
+
export declare function randomSuffix(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Build a kitId from a display name: `<slug>-<6-char-hex>`.
|
|
19
|
+
*
|
|
20
|
+
* Exported for testability; the random part can be injected. The slug is
|
|
21
|
+
* always truncated (see `slugify`) so the result satisfies `KIT_ID_PATTERN`
|
|
22
|
+
* regardless of how long `name` is, up to `NAME_MAX_LENGTH`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildKitId(name: string, suffix?: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Register the `mcp__genie__create_kit` tool on the given MCP server.
|
|
27
|
+
*
|
|
28
|
+
* The store dependency is injected so the server can swap between
|
|
29
|
+
* storage adapters without touching tool code.
|
|
30
|
+
*/
|
|
31
|
+
export declare function registerCreateKit(server: McpServer, store: KitStore): void;
|
|
32
|
+
//# sourceMappingURL=create_kit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_kit.d.ts","sourceRoot":"","sources":["../../src/tools/create_kit.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAiBtD;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ5C;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAIhE;AAaD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CA8D1E"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool: create_kit (M1-06).
|
|
3
|
+
*
|
|
4
|
+
* Creates a new UI kit owned by the caller and returns the kitId
|
|
5
|
+
* that downstream tools (plan, write_files, …) lock against.
|
|
6
|
+
*
|
|
7
|
+
* Input: { name: string } — human-readable display name (1-64 chars,
|
|
8
|
+
* ASCII alphanumeric + space/dash/underscore).
|
|
9
|
+
* Output: { kitId: string } — slug derived from name + 6-char random suffix.
|
|
10
|
+
*/
|
|
11
|
+
import { randomBytes } from "node:crypto";
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
import { KitAlreadyExistsError } from "../store/interface.js";
|
|
14
|
+
/** Validation pattern: ASCII alphanumeric, spaces, hyphens, underscores. Must contain at least one alphanumeric. */
|
|
15
|
+
const NAME_PATTERN = /^(?=.*[A-Za-z0-9])[A-Za-z0-9 _-]+$/;
|
|
16
|
+
/** Max characters for the display name. */
|
|
17
|
+
const NAME_MAX_LENGTH = 64;
|
|
18
|
+
/**
|
|
19
|
+
* Every `kitId` this module generates must satisfy `KIT_ID_PATTERN`
|
|
20
|
+
* (`get_kit.ts`): `[a-z0-9-]{3,64}` overall. A generated id is always
|
|
21
|
+
* `<slug>-<6-char-hex>`, so the slug itself must leave room for the
|
|
22
|
+
* hyphen + suffix: 64 - 1 - 6 = 57.
|
|
23
|
+
*/
|
|
24
|
+
const SLUG_MAX_LENGTH = 57;
|
|
25
|
+
/**
|
|
26
|
+
* Derive a URL-safe slug from a human-readable name.
|
|
27
|
+
* Lowercases, replaces spaces/underscores with hyphens, collapses
|
|
28
|
+
* runs of hyphens, and trims leading/trailing hyphens.
|
|
29
|
+
*
|
|
30
|
+
* Truncates to `SLUG_MAX_LENGTH` (re-trimming a trailing hyphen the cut
|
|
31
|
+
* may expose) so `buildKitId`'s output always fits the 64-char id budget
|
|
32
|
+
* that `KIT_ID_PATTERN` enforces — names up to `NAME_MAX_LENGTH` (64 chars)
|
|
33
|
+
* would otherwise slugify to more than that once the `-<6-char-hex>`
|
|
34
|
+
* suffix is appended, producing a kitId `get_kit`/`bind_kit` reject.
|
|
35
|
+
*/
|
|
36
|
+
export function slugify(name) {
|
|
37
|
+
return name
|
|
38
|
+
.toLowerCase()
|
|
39
|
+
.replace(/[_ ]+/g, "-")
|
|
40
|
+
.replace(/-{2,}/g, "-")
|
|
41
|
+
.replace(/^-|-$/g, "")
|
|
42
|
+
.slice(0, SLUG_MAX_LENGTH)
|
|
43
|
+
.replace(/-$/, "");
|
|
44
|
+
}
|
|
45
|
+
/** Generate a 6-character hex suffix for deduplication. */
|
|
46
|
+
export function randomSuffix() {
|
|
47
|
+
return randomBytes(3).toString("hex"); // 3 bytes → 6 hex chars
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Build a kitId from a display name: `<slug>-<6-char-hex>`.
|
|
51
|
+
*
|
|
52
|
+
* Exported for testability; the random part can be injected. The slug is
|
|
53
|
+
* always truncated (see `slugify`) so the result satisfies `KIT_ID_PATTERN`
|
|
54
|
+
* regardless of how long `name` is, up to `NAME_MAX_LENGTH`.
|
|
55
|
+
*/
|
|
56
|
+
export function buildKitId(name, suffix) {
|
|
57
|
+
const slug = slugify(name);
|
|
58
|
+
const sfx = suffix ?? randomSuffix();
|
|
59
|
+
return `${slug}-${sfx}`;
|
|
60
|
+
}
|
|
61
|
+
/** Input schema for create_kit (Zod v4). */
|
|
62
|
+
const inputSchema = {
|
|
63
|
+
name: z
|
|
64
|
+
.string()
|
|
65
|
+
.min(1)
|
|
66
|
+
.max(NAME_MAX_LENGTH)
|
|
67
|
+
.describe("Human-readable display name for the new UI kit (1-64 chars, ASCII alphanumeric + space/dash/underscore)."),
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Register the `mcp__genie__create_kit` tool on the given MCP server.
|
|
71
|
+
*
|
|
72
|
+
* The store dependency is injected so the server can swap between
|
|
73
|
+
* storage adapters without touching tool code.
|
|
74
|
+
*/
|
|
75
|
+
export function registerCreateKit(server, store) {
|
|
76
|
+
server.registerTool("mcp__genie__create_kit", {
|
|
77
|
+
title: "Create Kit",
|
|
78
|
+
description: "Create a new UI kit — returns the kitId that plan and other verbs " +
|
|
79
|
+
"lock against. The kit name is the human-readable display name. Reach for this " +
|
|
80
|
+
"first when starting fresh, before conjure/plan/write_files target the new kitId.",
|
|
81
|
+
inputSchema,
|
|
82
|
+
}, async ({ name }) => {
|
|
83
|
+
// Validate name characters (Zod handles length; we check the pattern).
|
|
84
|
+
if (!NAME_PATTERN.test(name)) {
|
|
85
|
+
return {
|
|
86
|
+
isError: true,
|
|
87
|
+
content: [
|
|
88
|
+
{
|
|
89
|
+
type: "text",
|
|
90
|
+
text: JSON.stringify({
|
|
91
|
+
error: "InvalidKitName",
|
|
92
|
+
message: "Kit name must contain only ASCII letters, digits, spaces, " +
|
|
93
|
+
"hyphens, or underscores.",
|
|
94
|
+
}),
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const kitId = buildKitId(name);
|
|
100
|
+
try {
|
|
101
|
+
const kit = await store.createKit(name, kitId);
|
|
102
|
+
return {
|
|
103
|
+
content: [
|
|
104
|
+
{
|
|
105
|
+
type: "text",
|
|
106
|
+
text: JSON.stringify({ kitId: kit.id }),
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (err instanceof KitAlreadyExistsError) {
|
|
113
|
+
return {
|
|
114
|
+
isError: true,
|
|
115
|
+
content: [
|
|
116
|
+
{
|
|
117
|
+
type: "text",
|
|
118
|
+
text: JSON.stringify({
|
|
119
|
+
error: "KitAlreadyExistsError",
|
|
120
|
+
message: err.message,
|
|
121
|
+
kitId: err.kitId,
|
|
122
|
+
}),
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
throw err; // unexpected errors bubble up as MCP internal errors
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=create_kit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_kit.js","sourceRoot":"","sources":["../../src/tools/create_kit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import type { KitStore } from "../store/interface.js";
|
|
4
|
+
export declare const CREATE_PROJECT_TOOL_NAME = "mcp__genie__create_project";
|
|
5
|
+
export declare const PROJECT_ID_PATTERN: RegExp;
|
|
6
|
+
declare const projectKindSchema: z.ZodEnum<{
|
|
7
|
+
workspace: "workspace";
|
|
8
|
+
blueprint: "blueprint";
|
|
9
|
+
}>;
|
|
10
|
+
/** Shared shape for a single kit binding entry (see `KitBinding`). Exported so
|
|
11
|
+
* `bind_kit`'s output schema can't drift from what `create_project`/`get_project`
|
|
12
|
+
* already declare for the same field (mirrors the `projectSummaryShape` pattern
|
|
13
|
+
* just below). */
|
|
14
|
+
export declare const kitBindingShape: {
|
|
15
|
+
kitId: z.ZodString;
|
|
16
|
+
default: z.ZodOptional<z.ZodBoolean>;
|
|
17
|
+
};
|
|
18
|
+
declare const kitBindingSchema: z.ZodObject<{
|
|
19
|
+
kitId: z.ZodString;
|
|
20
|
+
default: z.ZodOptional<z.ZodBoolean>;
|
|
21
|
+
}, z.core.$strict>;
|
|
22
|
+
declare const createProjectArgsSchema: z.ZodObject<{
|
|
23
|
+
name: z.ZodString;
|
|
24
|
+
kind: z.ZodEnum<{
|
|
25
|
+
workspace: "workspace";
|
|
26
|
+
blueprint: "blueprint";
|
|
27
|
+
}>;
|
|
28
|
+
fromBlueprintId: z.ZodOptional<z.ZodString>;
|
|
29
|
+
kitBindings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
30
|
+
kitId: z.ZodString;
|
|
31
|
+
default: z.ZodOptional<z.ZodBoolean>;
|
|
32
|
+
}, z.core.$strict>>>;
|
|
33
|
+
}, z.core.$strict>;
|
|
34
|
+
/** A recorded screen artifact within a project (written by `conjure_screen`, M1-21). */
|
|
35
|
+
declare const projectScreenSchema: z.ZodObject<{
|
|
36
|
+
id: z.ZodString;
|
|
37
|
+
path: z.ZodString;
|
|
38
|
+
title: z.ZodString;
|
|
39
|
+
updatedAt: z.ZodString;
|
|
40
|
+
}, z.core.$strict>;
|
|
41
|
+
declare const projectManifestSchema: z.ZodObject<{
|
|
42
|
+
id: z.ZodString;
|
|
43
|
+
name: z.ZodString;
|
|
44
|
+
kind: z.ZodEnum<{
|
|
45
|
+
workspace: "workspace";
|
|
46
|
+
blueprint: "blueprint";
|
|
47
|
+
}>;
|
|
48
|
+
defaultKitId: z.ZodOptional<z.ZodString>;
|
|
49
|
+
kitBindings: z.ZodArray<z.ZodObject<{
|
|
50
|
+
kitId: z.ZodString;
|
|
51
|
+
default: z.ZodOptional<z.ZodBoolean>;
|
|
52
|
+
}, z.core.$strict>>;
|
|
53
|
+
createdAt: z.ZodString;
|
|
54
|
+
updatedAt: z.ZodString;
|
|
55
|
+
sourceBlueprintId: z.ZodOptional<z.ZodString>;
|
|
56
|
+
screens: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
57
|
+
id: z.ZodString;
|
|
58
|
+
path: z.ZodString;
|
|
59
|
+
title: z.ZodString;
|
|
60
|
+
updatedAt: z.ZodString;
|
|
61
|
+
}, z.core.$strict>>>;
|
|
62
|
+
}, z.core.$strict>;
|
|
63
|
+
export type ProjectKind = z.infer<typeof projectKindSchema>;
|
|
64
|
+
export type KitBinding = z.infer<typeof kitBindingSchema>;
|
|
65
|
+
export type ProjectScreen = z.infer<typeof projectScreenSchema>;
|
|
66
|
+
export type CreateProjectArgs = z.infer<typeof createProjectArgsSchema>;
|
|
67
|
+
export type ProjectManifest = z.infer<typeof projectManifestSchema>;
|
|
68
|
+
export interface ProjectSummary extends Record<string, unknown> {
|
|
69
|
+
id: string;
|
|
70
|
+
name: string;
|
|
71
|
+
kind: ProjectKind;
|
|
72
|
+
defaultKitId?: string;
|
|
73
|
+
kitBindings: KitBinding[];
|
|
74
|
+
updatedAt: string;
|
|
75
|
+
canEdit: boolean;
|
|
76
|
+
}
|
|
77
|
+
/** Full detail returned by `get_project` — a `ProjectSummary` plus screens and provenance. */
|
|
78
|
+
export interface ProjectDetail extends ProjectSummary {
|
|
79
|
+
screens: ProjectScreen[];
|
|
80
|
+
sourceBlueprintId?: string;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Shared output shape for a `ProjectSummary`, consumed by both `list_projects` and
|
|
84
|
+
* `get_project` so the two tools' schemas can't drift apart (Implementation Notes:
|
|
85
|
+
* "Share schema helpers with list_projects").
|
|
86
|
+
*/
|
|
87
|
+
export declare const projectSummaryShape: {
|
|
88
|
+
id: z.ZodString;
|
|
89
|
+
name: z.ZodString;
|
|
90
|
+
kind: z.ZodEnum<{
|
|
91
|
+
workspace: "workspace";
|
|
92
|
+
blueprint: "blueprint";
|
|
93
|
+
}>;
|
|
94
|
+
defaultKitId: z.ZodOptional<z.ZodString>;
|
|
95
|
+
kitBindings: z.ZodArray<z.ZodObject<{
|
|
96
|
+
kitId: z.ZodString;
|
|
97
|
+
default: z.ZodOptional<z.ZodBoolean>;
|
|
98
|
+
}, z.core.$strict>>;
|
|
99
|
+
updatedAt: z.ZodString;
|
|
100
|
+
canEdit: z.ZodBoolean;
|
|
101
|
+
};
|
|
102
|
+
/** Shared output shape for a single recorded screen entry (see `ProjectDetail.screens`). */
|
|
103
|
+
export declare const projectScreenShape: {
|
|
104
|
+
id: z.ZodString;
|
|
105
|
+
path: z.ZodString;
|
|
106
|
+
title: z.ZodString;
|
|
107
|
+
updatedAt: z.ZodString;
|
|
108
|
+
};
|
|
109
|
+
export interface CreateProjectResult extends Record<string, unknown> {
|
|
110
|
+
projectId: string;
|
|
111
|
+
}
|
|
112
|
+
export type ProjectStoreErrorCode = "ERR_PROJECT_EXISTS" | "ERR_BLUEPRINT_NOT_FOUND" | "ERR_INVALID_PROJECT_NAME" | "ERR_PROJECT_NOT_FOUND" | "ERR_KIT_NOT_FOUND" | "ERR_PROJECT_READONLY" | "ERR_PROJECT_KIT_REQUIRED";
|
|
113
|
+
export declare class ProjectStoreError extends Error {
|
|
114
|
+
readonly code: ProjectStoreErrorCode;
|
|
115
|
+
readonly suggestedSlug?: string;
|
|
116
|
+
readonly projectId?: string;
|
|
117
|
+
readonly kitId?: string;
|
|
118
|
+
constructor(code: ProjectStoreErrorCode, message: string, options?: {
|
|
119
|
+
suggestedSlug?: string;
|
|
120
|
+
projectId?: string;
|
|
121
|
+
kitId?: string;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/** Input to `bind_kit` (M1-20) — see `ProjectStore.bindKit`. */
|
|
125
|
+
export interface BindKitArgs {
|
|
126
|
+
projectId: string;
|
|
127
|
+
kitId: string;
|
|
128
|
+
default?: boolean;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Input to `ProjectStore.recordScreen` (M1-21) — the durable *reference* a
|
|
132
|
+
* generated screen leaves in `.genie/project.json`. The artifact bytes
|
|
133
|
+
* themselves (`files`) are returned to the caller as an artifact set;
|
|
134
|
+
* `updatedAt` is stamped by the store, not supplied here.
|
|
135
|
+
*/
|
|
136
|
+
export interface RecordScreenInput {
|
|
137
|
+
id: string;
|
|
138
|
+
path: string;
|
|
139
|
+
title: string;
|
|
140
|
+
}
|
|
141
|
+
export declare class ProjectStore {
|
|
142
|
+
readonly root: string;
|
|
143
|
+
private readonly kitStore?;
|
|
144
|
+
/**
|
|
145
|
+
* `kitStore` is optional so every existing single-arg `new ProjectStore(root)`
|
|
146
|
+
* call site (this file's + sibling tools' tests, `server.ts` prior to M1-20)
|
|
147
|
+
* keeps compiling unchanged. It is required in practice only by `bindKit`,
|
|
148
|
+
* which asserts its presence at call time — `server.ts` always supplies the
|
|
149
|
+
* real `LocalFsKitStore` it already constructs for the kit verbs.
|
|
150
|
+
*/
|
|
151
|
+
constructor(root: string, kitStore?: KitStore | undefined);
|
|
152
|
+
createProject(args: CreateProjectArgs): Promise<CreateProjectResult>;
|
|
153
|
+
listProjects(): Promise<ProjectSummary[]>;
|
|
154
|
+
/**
|
|
155
|
+
* Get full detail for a single project (workspace or blueprint — same shape,
|
|
156
|
+
* no special-case tool family; AC4). Throws `ProjectStoreError("ERR_PROJECT_NOT_FOUND")`
|
|
157
|
+
* with the id echoed (AC5) for a missing, unreadable, or malformed manifest — the same
|
|
158
|
+
* leniency `readListManifest` already applies when enumerating projects.
|
|
159
|
+
*
|
|
160
|
+
* Validates `projectId` against `PROJECT_ID_PATTERN` before any filesystem access —
|
|
161
|
+
* matching `createProject`/`listProjects`, which only ever touch paths built from
|
|
162
|
+
* slug-shaped ids. `get_project`'s MCP tool layer already rejects non-slug ids via
|
|
163
|
+
* its own regex-typed input schema, but `ProjectStore` is a public export and
|
|
164
|
+
* `getProject` a public method: a direct/programmatic caller (bypassing the MCP
|
|
165
|
+
* schema) could otherwise pass something like `"../secret"` and probe paths outside
|
|
166
|
+
* the projects root. Rejecting here, before `readListManifest`/`join()`, closes that
|
|
167
|
+
* gap without changing the external contract (still `ERR_PROJECT_NOT_FOUND`).
|
|
168
|
+
*/
|
|
169
|
+
getProject(projectId: string): Promise<ProjectDetail>;
|
|
170
|
+
/**
|
|
171
|
+
* Delete a project directory (M1-14a-1 / DRO-531 — the `delete_project`
|
|
172
|
+
* store-injection re-plumb). Owns the *persistence policy* the
|
|
173
|
+
* `delete_project` tool previously reached into the filesystem for directly,
|
|
174
|
+
* so the verb now routes through the injected `ProjectStore` (LocalFs by
|
|
175
|
+
* default, a git-host backend when one exists) instead of a raw `projectsRoot`
|
|
176
|
+
* path + `node:fs`.
|
|
177
|
+
*
|
|
178
|
+
* Semantics (preserved verbatim from the pre-seam tool):
|
|
179
|
+
* - Missing project → NOT an error. Returns `{ existed: false }` so the tool
|
|
180
|
+
* can report the idempotent "already deleted" warning. A caller re-running
|
|
181
|
+
* a delete after a crash must not see a hard failure.
|
|
182
|
+
* - Read-only project (`.genie/.readonly` marker present) → throws
|
|
183
|
+
* `ProjectStoreError("ERR_PROJECT_READONLY")`; nothing is removed. Same
|
|
184
|
+
* guard `bindKit`/`recordScreen` apply on the write path.
|
|
185
|
+
* - Otherwise removes the project tree recursively and returns
|
|
186
|
+
* `{ existed: true }`. Deleting a blueprint does NOT touch workspaces
|
|
187
|
+
* instantiated from it — those were copied at create time and live in
|
|
188
|
+
* their own directories.
|
|
189
|
+
*
|
|
190
|
+
* `projectId` is regex-checked before any filesystem access (same
|
|
191
|
+
* defense-in-depth as `getProject`/`bindKit`/`recordScreen`: `ProjectStore` is
|
|
192
|
+
* a public export and this a public method, so a direct caller bypassing the
|
|
193
|
+
* tool's Zod schema could otherwise pass `"../secret"` into `projectRoot()`).
|
|
194
|
+
* A malformed id resolves nothing to delete → `{ existed: false }`, never an
|
|
195
|
+
* `rm` outside the projects root.
|
|
196
|
+
*/
|
|
197
|
+
deleteProject(projectId: string): Promise<{
|
|
198
|
+
existed: boolean;
|
|
199
|
+
}>;
|
|
200
|
+
/**
|
|
201
|
+
* Bind a kit to a project (M1-20). Writes the binding into
|
|
202
|
+
* `.genie/project.json` and returns the updated summary.
|
|
203
|
+
*
|
|
204
|
+
* - AC3: a new `kitId` is appended to `kitBindings`.
|
|
205
|
+
* - AC4: `default: true` sets `defaultKitId` and clears `default` from every
|
|
206
|
+
* other binding, so exactly one binding is ever the default. `default: false`
|
|
207
|
+
* clears default status from just this binding (if it held it). Omitting
|
|
208
|
+
* `default` entirely preserves whatever this binding's current default
|
|
209
|
+
* status already is (or `false` for a brand-new binding) — this is what
|
|
210
|
+
* keeps a same-kit re-bind idempotent (AC8) instead of silently demoting an
|
|
211
|
+
* existing default on every unrelated re-bind call.
|
|
212
|
+
* - AC5/AC6: validates the project and kit both exist first — no partial
|
|
213
|
+
* writes on a bad reference. `projectId` is also regex-checked up front
|
|
214
|
+
* (same defense-in-depth as `getProject`, above) before any filesystem
|
|
215
|
+
* access.
|
|
216
|
+
* - AC7: no blueprint special-case; `createProject` already copies
|
|
217
|
+
* `kitBindings` into a workspace instantiated `fromBlueprintId`, so a
|
|
218
|
+
* binding recorded here on a blueprint carries forward automatically.
|
|
219
|
+
* - AC8: re-binding the same `kitId` updates that one entry in place rather
|
|
220
|
+
* than appending a duplicate.
|
|
221
|
+
*/
|
|
222
|
+
bindKit(args: BindKitArgs): Promise<ProjectSummary>;
|
|
223
|
+
/**
|
|
224
|
+
* Record a generated screen artifact reference into `.genie/project.json`
|
|
225
|
+
* (M1-21, `conjure_screen` → AC7). Appends to `manifest.screens` (the array
|
|
226
|
+
* `get_project` surfaces and defaults to `[]`) and bumps `updatedAt`, then
|
|
227
|
+
* returns the stored entry with its server-stamped `updatedAt`.
|
|
228
|
+
*
|
|
229
|
+
* Mirrors `bindKit`'s write-path guards exactly:
|
|
230
|
+
* - `projectId` is regex-checked before any filesystem access (same
|
|
231
|
+
* defense-in-depth as `getProject`/`bindKit`: `ProjectStore` is a public
|
|
232
|
+
* export and this a public method, so a direct caller bypassing the MCP
|
|
233
|
+
* schema could otherwise pass `"../secret"` into `projectRoot()`/`join()`).
|
|
234
|
+
* - a missing/malformed manifest → `ERR_PROJECT_NOT_FOUND` (id echoed).
|
|
235
|
+
* - a read-only project → `ERR_PROJECT_READONLY`; no partial write.
|
|
236
|
+
*
|
|
237
|
+
* The store persists only the *reference* (id/path/title/updatedAt); the
|
|
238
|
+
* artifact bytes are returned to the caller as an artifact set (Issue
|
|
239
|
+
* "Keep output as an artifact set"), never inlined into the manifest.
|
|
240
|
+
*/
|
|
241
|
+
recordScreen(input: {
|
|
242
|
+
projectId: string;
|
|
243
|
+
screen: RecordScreenInput;
|
|
244
|
+
}): Promise<ProjectScreen>;
|
|
245
|
+
/**
|
|
246
|
+
* Verify `kitId` resolves to a writable `GENIE_KIT`, reusing `get_kit`'s own
|
|
247
|
+
* validation (Implementation Notes: "Reuse get_kit validation before writing
|
|
248
|
+
* the project manifest") rather than re-deriving kit-lookup semantics here.
|
|
249
|
+
* Maps every rejection shape `getKit` can throw — a malformed id (Zod), a
|
|
250
|
+
* missing kit (`ProjectNotFoundError`), or a non-kit project
|
|
251
|
+
* (`WrongProjectTypeError`) — onto the single `ERR_KIT_NOT_FOUND` code
|
|
252
|
+
* `bind_kit`'s own AC6 specifies.
|
|
253
|
+
*/
|
|
254
|
+
private assertKitExists;
|
|
255
|
+
private projectRoot;
|
|
256
|
+
private manifestPath;
|
|
257
|
+
private writeManifest;
|
|
258
|
+
private readManifest;
|
|
259
|
+
private readBlueprint;
|
|
260
|
+
private readListManifest;
|
|
261
|
+
private findExistingProject;
|
|
262
|
+
private suggestSlug;
|
|
263
|
+
}
|
|
264
|
+
export declare const CREATE_PROJECT_DESCRIPTION: string;
|
|
265
|
+
export declare function registerCreateProjectTool(server: McpServer, store: ProjectStore): void;
|
|
266
|
+
export {};
|
|
267
|
+
//# sourceMappingURL=create_project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_project.d.ts","sourceRoot":"","sources":["../../src/tools/create_project.ts"],"names":[],"mappings":"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"}
|