@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":"preview.js","sourceRoot":"","sources":["../../src/tools/preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { KitStore } from "../store/interface.js";
|
|
3
|
+
/** 256 KiB in bytes — hard cap per DesignSync contract. Re-exported for tests. */
|
|
4
|
+
export declare const MAX_FILE_BYTES: number;
|
|
5
|
+
/**
|
|
6
|
+
* Validate that a relative path stays within a kit root (prevents traversal).
|
|
7
|
+
* Throws an `InvalidPathError` McpError on escape, else returns.
|
|
8
|
+
*
|
|
9
|
+
* The check is purely lexical — it resolves `relativePath` against a synthetic
|
|
10
|
+
* root and asks whether the result escapes it — so it needs no real filesystem
|
|
11
|
+
* path (the tool no longer holds a `kitsRoot`; the injected `KitStore` owns
|
|
12
|
+
* where kits physically live). Using `path.relative`/`path.isAbsolute` rather
|
|
13
|
+
* than string checks against a hard-coded "/" keeps traversal protection
|
|
14
|
+
* correct across platforms and separator styles. This tool-level guard is what
|
|
15
|
+
* surfaces `InvalidPathError` to the client; the store also guards internally
|
|
16
|
+
* (defense in depth), but with its own generic message.
|
|
17
|
+
*/
|
|
18
|
+
export declare function assertSafeRelativePath(relativePath: string): void;
|
|
19
|
+
/**
|
|
20
|
+
* Register the `mcp__genie__read_file` tool on the given MCP server.
|
|
21
|
+
*
|
|
22
|
+
* @param server The MCP server to register the tool on.
|
|
23
|
+
* @param kitStore The injected kit backend (M1-14a-1a / DRO-540). Read-file now
|
|
24
|
+
* routes through `KitStore.readFile`, which owns MIME
|
|
25
|
+
* resolution, utf-8/base64 classification, and the 256 KiB cap —
|
|
26
|
+
* so the SAME verb runs against `LocalFsKitStore` (disk) or
|
|
27
|
+
* `GitHostKitStore` (git host) with byte-identical output. The
|
|
28
|
+
* tool keeps only its request-shape guards (kitId + path
|
|
29
|
+
* traversal) and the MCP error mapping.
|
|
30
|
+
*
|
|
31
|
+
* AC1: Tool name `mcp__genie__read_file`.
|
|
32
|
+
* AC2: Input `{ kitId: string, path: string }`.
|
|
33
|
+
* AC3: Returns `{ content, encoding, mimeType }`.
|
|
34
|
+
* AC4: Files > 256 KiB → MCP error -32603.
|
|
35
|
+
* AC5: Binary files → base64 encoding.
|
|
36
|
+
* AC6: Path traversal → InvalidPathError (InvalidParams -32602).
|
|
37
|
+
* AC7: Unknown path → MCP error -32602.
|
|
38
|
+
*/
|
|
39
|
+
export declare function registerReadFile(server: McpServer, kitStore: KitStore): void;
|
|
40
|
+
//# sourceMappingURL=read_file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read_file.d.ts","sourceRoot":"","sources":["../../src/tools/read_file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,kFAAkF;AAClF,eAAO,MAAM,cAAc,QAAa,CAAC;AAEzC;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAWjE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAyE5E"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
|
|
4
|
+
import { FileTooLargeError, NotFoundError } from "../store/interface.js";
|
|
5
|
+
import { isSafeKitId } from "../store/kit-files.js";
|
|
6
|
+
/** 256 KiB in bytes — hard cap per DesignSync contract. Re-exported for tests. */
|
|
7
|
+
export const MAX_FILE_BYTES = 256 * 1024;
|
|
8
|
+
/**
|
|
9
|
+
* Validate that a relative path stays within a kit root (prevents traversal).
|
|
10
|
+
* Throws an `InvalidPathError` McpError on escape, else returns.
|
|
11
|
+
*
|
|
12
|
+
* The check is purely lexical — it resolves `relativePath` against a synthetic
|
|
13
|
+
* root and asks whether the result escapes it — so it needs no real filesystem
|
|
14
|
+
* path (the tool no longer holds a `kitsRoot`; the injected `KitStore` owns
|
|
15
|
+
* where kits physically live). Using `path.relative`/`path.isAbsolute` rather
|
|
16
|
+
* than string checks against a hard-coded "/" keeps traversal protection
|
|
17
|
+
* correct across platforms and separator styles. This tool-level guard is what
|
|
18
|
+
* surfaces `InvalidPathError` to the client; the store also guards internally
|
|
19
|
+
* (defense in depth), but with its own generic message.
|
|
20
|
+
*/
|
|
21
|
+
export function assertSafeRelativePath(relativePath) {
|
|
22
|
+
const root = resolve("/__genie_kit_root__");
|
|
23
|
+
const target = resolve(root, relativePath);
|
|
24
|
+
const rel = relative(root, target);
|
|
25
|
+
const escapes = rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel);
|
|
26
|
+
if (escapes) {
|
|
27
|
+
throw new McpError(ErrorCode.InvalidParams, `InvalidPathError: path traversal is not allowed`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Register the `mcp__genie__read_file` tool on the given MCP server.
|
|
32
|
+
*
|
|
33
|
+
* @param server The MCP server to register the tool on.
|
|
34
|
+
* @param kitStore The injected kit backend (M1-14a-1a / DRO-540). Read-file now
|
|
35
|
+
* routes through `KitStore.readFile`, which owns MIME
|
|
36
|
+
* resolution, utf-8/base64 classification, and the 256 KiB cap —
|
|
37
|
+
* so the SAME verb runs against `LocalFsKitStore` (disk) or
|
|
38
|
+
* `GitHostKitStore` (git host) with byte-identical output. The
|
|
39
|
+
* tool keeps only its request-shape guards (kitId + path
|
|
40
|
+
* traversal) and the MCP error mapping.
|
|
41
|
+
*
|
|
42
|
+
* AC1: Tool name `mcp__genie__read_file`.
|
|
43
|
+
* AC2: Input `{ kitId: string, path: string }`.
|
|
44
|
+
* AC3: Returns `{ content, encoding, mimeType }`.
|
|
45
|
+
* AC4: Files > 256 KiB → MCP error -32603.
|
|
46
|
+
* AC5: Binary files → base64 encoding.
|
|
47
|
+
* AC6: Path traversal → InvalidPathError (InvalidParams -32602).
|
|
48
|
+
* AC7: Unknown path → MCP error -32602.
|
|
49
|
+
*/
|
|
50
|
+
export function registerReadFile(server, kitStore) {
|
|
51
|
+
server.registerTool("mcp__genie__read_file", {
|
|
52
|
+
title: "Read File",
|
|
53
|
+
description: "Read the contents of a single file from a UI kit. Returns text (utf-8) " +
|
|
54
|
+
"or binary (base64) content. Files larger than 256 KiB are rejected. Typically " +
|
|
55
|
+
"follows list_files, to inspect one file's current content before refining it " +
|
|
56
|
+
"or editing by hand.",
|
|
57
|
+
inputSchema: {
|
|
58
|
+
kitId: z.string().min(1).describe("The UI kit identifier."),
|
|
59
|
+
path: z.string().describe("Relative path within the kit directory."),
|
|
60
|
+
},
|
|
61
|
+
}, async ({ kitId, path: relPath }) => {
|
|
62
|
+
// Reject an unsafe kitId through the SAME shared rule `list_files` and the
|
|
63
|
+
// stores use (`isSafeKitId`), so the tools' traversal defenses cannot
|
|
64
|
+
// silently drift (AC1). This rejects the empty string — whose kit-dir
|
|
65
|
+
// resolves to the kits ROOT, letting a crafted `path` such as
|
|
66
|
+
// `other-kit/secret.txt` read a SIBLING kit's bytes (AC-SEC) — as well as
|
|
67
|
+
// `.`/`..` and any separator. The `.min(1)` above already blocks an empty
|
|
68
|
+
// kitId at the MCP schema layer; this is the defense-in-depth guard for
|
|
69
|
+
// programmatic callers that bypass schema validation.
|
|
70
|
+
if (!isSafeKitId(kitId)) {
|
|
71
|
+
throw new McpError(ErrorCode.InvalidParams, `InvalidPathError: invalid kit identifier`);
|
|
72
|
+
}
|
|
73
|
+
// AC6 — path traversal check (surfaces InvalidPathError to the client).
|
|
74
|
+
assertSafeRelativePath(relPath);
|
|
75
|
+
let file;
|
|
76
|
+
try {
|
|
77
|
+
// AC3/AC4/AC5 — the store returns { content, encoding, mimeType },
|
|
78
|
+
// owns the 256 KiB cap (throws FileTooLargeError), and classifies
|
|
79
|
+
// binary→base64 / text→utf-8.
|
|
80
|
+
file = await kitStore.readFile(kitId, relPath);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
// AC4 — over the size cap. Preserve the exact client-facing wording.
|
|
84
|
+
if (error instanceof FileTooLargeError) {
|
|
85
|
+
throw new McpError(ErrorCode.InternalError, `File exceeds 256 KiB cap (actual: ${error.actualBytes} bytes)`);
|
|
86
|
+
}
|
|
87
|
+
// AC7 — a missing file OR a missing kit both surface as "File not
|
|
88
|
+
// found" (the pre-store tool stat()'d the resolved target and reported
|
|
89
|
+
// the same for either case).
|
|
90
|
+
if (error instanceof NotFoundError) {
|
|
91
|
+
throw new McpError(ErrorCode.InvalidParams, `File not found: ${relPath}`);
|
|
92
|
+
}
|
|
93
|
+
throw error; // unexpected — bubble up as an MCP internal error.
|
|
94
|
+
}
|
|
95
|
+
// AC3 — structured response. Provide `structuredContent` so MCP clients
|
|
96
|
+
// can consume `{ content, encoding, mimeType }` directly without parsing,
|
|
97
|
+
// while keeping a JSON text part for backward compatibility.
|
|
98
|
+
const payload = {
|
|
99
|
+
content: file.content,
|
|
100
|
+
encoding: file.encoding,
|
|
101
|
+
mimeType: file.mimeType,
|
|
102
|
+
};
|
|
103
|
+
return {
|
|
104
|
+
content: [
|
|
105
|
+
{
|
|
106
|
+
type: "text",
|
|
107
|
+
text: JSON.stringify(payload),
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
structuredContent: payload,
|
|
111
|
+
};
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=read_file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read_file.js","sourceRoot":"","sources":["../../src/tools/read_file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP tool: refine (M2-04 · DRO-251) — genie's iterate-on-an-existing-component
|
|
3
|
+
* verb.
|
|
4
|
+
*
|
|
5
|
+
* Where `conjure` (M2-03) generates a component from a blank-slate prompt,
|
|
6
|
+
* `refine` takes a component that ALREADY exists in a kit plus a free-form
|
|
7
|
+
* `instruction` ("make the border radius softer") and an optional canvas-style
|
|
8
|
+
* `region: { x, y, w, h }` rect, and returns the updated component — a unified
|
|
9
|
+
* diff for the human plus the full updated file set (the source of truth, AC5).
|
|
10
|
+
*
|
|
11
|
+
* It reuses M2-03's machinery deliberately (AC6 "same retry-once pattern as
|
|
12
|
+
* M2-03"): the request/validate/retry loop, the COMPONENT_SCHEMA `json_schema`
|
|
13
|
+
* response_format, the Ajv validation, and the single retry-with-feedback all
|
|
14
|
+
* come from the shared `llm/component-response.ts` harness. The delta from
|
|
15
|
+
* `conjure` is entirely in the prompt (diff-mode: "edit, don't rewrite") and two
|
|
16
|
+
* new steps this file owns: loading the current source from the kit (AC3) and,
|
|
17
|
+
* when a region is given, rendering a crop of it for vision input (AC4/AC7).
|
|
18
|
+
*
|
|
19
|
+
* Two DISTINCT retry mechanisms are in play here, at different layers — don't
|
|
20
|
+
* conflate them when reading this file (same split as `conjure.ts`):
|
|
21
|
+
* 1. The shared harness's "retries once on validation failure" above (AC6)
|
|
22
|
+
* is a structurally-valid-but-wrong-shape reply getting one more attempt
|
|
23
|
+
* with the Ajv error fed back into the prompt.
|
|
24
|
+
* 2. Each of those (up to 2) calls individually goes through M2-06's
|
|
25
|
+
* `withRetry(createChatCompletion)` (DRO-253, see `defaultChatCompletion`
|
|
26
|
+
* below) for transient network/429/5xx failures — invisible to this
|
|
27
|
+
* file's own logic and to the shared harness, handled entirely inside the
|
|
28
|
+
* `chat` seam.
|
|
29
|
+
*
|
|
30
|
+
* ── Import-time safety (same as conjure) ──────────────────────────────────────
|
|
31
|
+
* `../llm/client.js` constructs its `llmClient` singleton eagerly at module load
|
|
32
|
+
* and throws `MissingLLMConfigError` when `GENIE_LLM_*` is unset. So the client
|
|
33
|
+
* is only a *type* import here (erased by `verbatimModuleSyntax`); the default
|
|
34
|
+
* runtime `chat` seam reaches it via a lazy `await import(...)`, touched only
|
|
35
|
+
* when a real `refine` call runs. Tests inject their own `chat` + `kitStore` +
|
|
36
|
+
* `cropper` and never load the client or Playwright. (`../llm/retry.js`'s
|
|
37
|
+
* `withRetry`, by contrast, has no such eager side effect — it's a plain
|
|
38
|
+
* higher-order function — so it's imported statically below and applied
|
|
39
|
+
* inside that same lazy seam, same as `conjure.ts`.)
|
|
40
|
+
*
|
|
41
|
+
* ── AC7 region crop is a lazy, OPTIONAL peer dependency ───────────────────────
|
|
42
|
+
* AC7 asks for a headless-Chromium crop via Playwright, and calls Playwright
|
|
43
|
+
* "M3-02's validator setup is a peer dependency" — i.e. it is NOT one of genie's
|
|
44
|
+
* hard `dependencies` (M3-02 hasn't landed). So the default `RegionCropper`
|
|
45
|
+
* resolves Playwright with a *runtime* `import(...)` and degrades gracefully when
|
|
46
|
+
* it is absent: it logs a warning and returns no image, and `refine` still runs
|
|
47
|
+
* — the region's coordinates are described in the prompt text so the model can
|
|
48
|
+
* still scope its edit. This keeps `refine` shippable now (CI's
|
|
49
|
+
* `--frozen-lockfile` install stays green without Playwright) and lets the real
|
|
50
|
+
* crop light up automatically once M3-02 adds Playwright. The cropper is
|
|
51
|
+
* injectable, so tests exercise both the crop-attached and crop-unavailable
|
|
52
|
+
* paths with a stub.
|
|
53
|
+
*/
|
|
54
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
55
|
+
import { z } from "zod";
|
|
56
|
+
import { type ValidatedComponent } from "../llm/schema.js";
|
|
57
|
+
import { type LoadedPrompt } from "../llm/prompts.js";
|
|
58
|
+
import { type ChatCompletionFn, type UsageInfo } from "../llm/component-response.js";
|
|
59
|
+
import { type GeneratedFileWithEncoding } from "../llm/generated-files.js";
|
|
60
|
+
export declare const REFINE_TOOL_NAME = "mcp__genie__refine";
|
|
61
|
+
/** Default model routing alias — the same one `conjure` uses (M2-05). Resolved
|
|
62
|
+
* to a concrete provider model by the configured endpoint/gateway. Defined
|
|
63
|
+
* locally to keep `refine` decoupled from `conjure`'s module. */
|
|
64
|
+
export declare const DEFAULT_MODEL = "design-default";
|
|
65
|
+
/** PascalCase component-name shape — identical to `COMPONENT_SCHEMA`'s
|
|
66
|
+
* `componentName` pattern, so an id `refine` accepts is one `conjure` could have
|
|
67
|
+
* produced. */
|
|
68
|
+
export declare const COMPONENT_NAME_PATTERN: RegExp;
|
|
69
|
+
declare const regionSchema: z.ZodObject<{
|
|
70
|
+
x: z.ZodNumber;
|
|
71
|
+
y: z.ZodNumber;
|
|
72
|
+
w: z.ZodNumber;
|
|
73
|
+
h: z.ZodNumber;
|
|
74
|
+
}, z.core.$strict>;
|
|
75
|
+
export type Region = z.infer<typeof regionSchema>;
|
|
76
|
+
declare const refineArgsSchema: z.ZodObject<{
|
|
77
|
+
kitId: z.ZodString;
|
|
78
|
+
componentName: z.ZodString;
|
|
79
|
+
instruction: z.ZodString;
|
|
80
|
+
region: z.ZodOptional<z.ZodObject<{
|
|
81
|
+
x: z.ZodNumber;
|
|
82
|
+
y: z.ZodNumber;
|
|
83
|
+
w: z.ZodNumber;
|
|
84
|
+
h: z.ZodNumber;
|
|
85
|
+
}, z.core.$strict>>;
|
|
86
|
+
model: z.ZodDefault<z.ZodString>;
|
|
87
|
+
}, z.core.$strict>;
|
|
88
|
+
export type RefineArgs = z.infer<typeof refineArgsSchema>;
|
|
89
|
+
/**
|
|
90
|
+
* What `refine` returns (AC5): a unified `diff` (informational — for the human
|
|
91
|
+
* reading the change) plus the full updated `files` (the source of truth). Also
|
|
92
|
+
* carries `componentName`/`group`/`manifestEntry` (echoing the refined
|
|
93
|
+
* component) and token `usage`, mirroring `conjure`'s richer return so a caller
|
|
94
|
+
* accounts for both verbs the same way.
|
|
95
|
+
*/
|
|
96
|
+
export interface RefineResult extends Record<string, unknown> {
|
|
97
|
+
componentName: string;
|
|
98
|
+
group: string;
|
|
99
|
+
/** Unified diff (git-style) from the original file set to the updated one. */
|
|
100
|
+
diff: string;
|
|
101
|
+
files: RefinedFile[];
|
|
102
|
+
manifestEntry: ValidatedComponent["manifestEntry"];
|
|
103
|
+
usage: UsageInfo;
|
|
104
|
+
}
|
|
105
|
+
export type RefinedFile = GeneratedFileWithEncoding;
|
|
106
|
+
/** A file loaded from the kit: the store's `readFile` result plus the `path` the
|
|
107
|
+
* caller passed in (the store does not echo it back). */
|
|
108
|
+
export interface LoadedFile {
|
|
109
|
+
path: string;
|
|
110
|
+
content: string;
|
|
111
|
+
encoding: string;
|
|
112
|
+
mimeType: string;
|
|
113
|
+
}
|
|
114
|
+
/** The `readFile` result shape `KitStore` returns — content + encoding + MIME,
|
|
115
|
+
* WITHOUT the path (the caller already knows it). Kept structurally identical to
|
|
116
|
+
* `KitFileContent` so the real `KitStore` is assignable to `RefineKitStore`. */
|
|
117
|
+
export interface KitFileRead {
|
|
118
|
+
content: string;
|
|
119
|
+
encoding: string;
|
|
120
|
+
mimeType: string;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* The narrow kit-read port `refine` needs: list a kit's files (to discover which
|
|
124
|
+
* belong to `componentName`) and read each one (AC3). `KitStore` satisfies this
|
|
125
|
+
* structurally — the same pattern `conjure_screen` uses for its project port.
|
|
126
|
+
*
|
|
127
|
+
* Discovery via `listFiles` rather than `listComponents`: the latter reads the
|
|
128
|
+
* M3-03-compiled `.genie/manifest.json` card index, which does not exist yet in
|
|
129
|
+
* M2. `listFiles` + a path filter is the manifest-independent way to find a
|
|
130
|
+
* component's files today; when M3-03 lands, this can switch to the manifest
|
|
131
|
+
* without changing the tool's contract.
|
|
132
|
+
*/
|
|
133
|
+
export interface RefineKitStore {
|
|
134
|
+
listFiles(kitId: string): Promise<{
|
|
135
|
+
path: string;
|
|
136
|
+
}[]>;
|
|
137
|
+
readFile(kitId: string, path: string): Promise<KitFileRead>;
|
|
138
|
+
}
|
|
139
|
+
/** A request to render a preview and screenshot one rectangle of it. */
|
|
140
|
+
export interface RegionCropRequest {
|
|
141
|
+
/** The `<Name>.html` preview markup to render. */
|
|
142
|
+
html: string;
|
|
143
|
+
/** The rect to screenshot, in the preview's own pixel coordinates. */
|
|
144
|
+
region: Region;
|
|
145
|
+
/** The viewport to render the preview at (must contain the region). */
|
|
146
|
+
viewport: {
|
|
147
|
+
width: number;
|
|
148
|
+
height: number;
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
/** The crop result: a `data:image/png;base64,…` URL, or `null` when a crop could
|
|
152
|
+
* not be produced (Playwright absent, or a render/screenshot failure). `null` is
|
|
153
|
+
* a graceful-degradation signal, never an error — `refine` proceeds without the
|
|
154
|
+
* image (AC7). */
|
|
155
|
+
export interface RegionCropResult {
|
|
156
|
+
dataUrl: string | null;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* The region-crop seam (AC7). Production supplies {@link defaultRegionCropper}
|
|
160
|
+
* (lazy Playwright); tests inject a stub so no browser is launched and the
|
|
161
|
+
* crop-attached / crop-unavailable branches are both exercisable offline.
|
|
162
|
+
*/
|
|
163
|
+
export interface RegionCropper {
|
|
164
|
+
crop(request: RegionCropRequest): Promise<RegionCropResult>;
|
|
165
|
+
}
|
|
166
|
+
export interface RefineDeps {
|
|
167
|
+
/** Kit-read port (AC3). Required — `refine` cannot load source without it. */
|
|
168
|
+
kitStore: RefineKitStore;
|
|
169
|
+
/** Chat-completion seam (AC6). Defaults to a lazy wrapper over the M2-01 client. */
|
|
170
|
+
chat?: ChatCompletionFn;
|
|
171
|
+
/** Region-crop seam (AC7). Defaults to lazy Playwright with graceful degradation. */
|
|
172
|
+
cropper?: RegionCropper;
|
|
173
|
+
/** Prompt loader override (tests). Defaults to the real versioned loader. */
|
|
174
|
+
loadSystemPrompt?: () => LoadedPrompt;
|
|
175
|
+
}
|
|
176
|
+
/** Typed failure surfaced to the tool boundary (mapped to an MCP error result).
|
|
177
|
+
* `ERR_COMPONENT_NOT_FOUND` — no files for `componentName` in the kit (or the
|
|
178
|
+
* kit itself is absent); `ERR_LLM_OUTPUT_INVALID` — the model did not return a
|
|
179
|
+
* schema-valid component after the retry (same code `conjure` throws). */
|
|
180
|
+
export declare class RefineError extends Error {
|
|
181
|
+
readonly code: "ERR_COMPONENT_NOT_FOUND" | "ERR_LLM_OUTPUT_INVALID";
|
|
182
|
+
readonly details?: Record<string, unknown> | undefined;
|
|
183
|
+
constructor(code: "ERR_COMPONENT_NOT_FOUND" | "ERR_LLM_OUTPUT_INVALID", message: string, details?: Record<string, unknown> | undefined);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Default cropper (AC7): render the preview HTML in headless Chromium and
|
|
187
|
+
* screenshot the region rect, returning it as a PNG data URL for vision input.
|
|
188
|
+
* Degrades gracefully — if Playwright is absent, or launch/render/screenshot
|
|
189
|
+
* fails, it logs and returns `{ dataUrl: null }` so `refine` continues without
|
|
190
|
+
* the image rather than failing the whole call over an optional enhancement.
|
|
191
|
+
*/
|
|
192
|
+
export declare const defaultRegionCropper: RegionCropper;
|
|
193
|
+
/**
|
|
194
|
+
* Choose a render viewport for the crop that (a) is at least the component's
|
|
195
|
+
* natural preview size (read from `meta.json`'s `viewport` when available, so the
|
|
196
|
+
* layout matches how the card really renders) and (b) is big enough to contain
|
|
197
|
+
* the requested region. Falls back to a sensible default when there is no
|
|
198
|
+
* parseable meta.
|
|
199
|
+
*/
|
|
200
|
+
export declare function deriveRenderViewport(files: LoadedFile[], region: Region): {
|
|
201
|
+
width: number;
|
|
202
|
+
height: number;
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* Build a git-style unified diff from the original file set to the updated one,
|
|
206
|
+
* matched by path. Only CHANGED files contribute a hunk (unchanged files are
|
|
207
|
+
* omitted so the diff shows exactly what the refinement did); added/removed
|
|
208
|
+
* files diff against `/dev/null`. Informational only — `files` is authoritative.
|
|
209
|
+
*/
|
|
210
|
+
export declare function buildUnifiedDiff(originals: Map<string, string>, updated: Map<string, string>): string;
|
|
211
|
+
/**
|
|
212
|
+
* Refine one existing component. Flow: load current files (AC3) → optionally
|
|
213
|
+
* render a region crop (AC4/AC7) → run the shared request/validate/retry loop
|
|
214
|
+
* with the diff-mode prompt (AC6) → compute the unified diff (AC5) → return
|
|
215
|
+
* `{ diff, files, … }` and log a per-call line (AC8).
|
|
216
|
+
*/
|
|
217
|
+
export declare function refine(deps: RefineDeps, args: unknown): Promise<RefineResult>;
|
|
218
|
+
export declare function registerRefineTool(server: McpServer, deps: RefineDeps): void;
|
|
219
|
+
export {};
|
|
220
|
+
//# sourceMappingURL=refine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../src/tools/refine.ts"],"names":[],"mappings":"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"}
|