rtistree 0.5.0
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/CHANGELOG.md +15 -0
- package/LICENSE +21 -0
- package/README.md +99 -0
- package/THIRD_PARTY_NOTICES.md +25 -0
- package/dist/art-direction.d.ts +77 -0
- package/dist/art-direction.js +186 -0
- package/dist/art-direction.js.map +1 -0
- package/dist/artifacts.d.ts +24 -0
- package/dist/artifacts.js +49 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/assets.d.ts +16 -0
- package/dist/assets.js +96 -0
- package/dist/assets.js.map +1 -0
- package/dist/benchmark.d.ts +76 -0
- package/dist/benchmark.js +118 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +300 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands.d.ts +5315 -0
- package/dist/commands.js +591 -0
- package/dist/commands.js.map +1 -0
- package/dist/components.d.ts +20 -0
- package/dist/components.js +98 -0
- package/dist/components.js.map +1 -0
- package/dist/construction.d.ts +53 -0
- package/dist/construction.js +80 -0
- package/dist/construction.js.map +1 -0
- package/dist/critique.d.ts +44 -0
- package/dist/critique.js +45 -0
- package/dist/critique.js.map +1 -0
- package/dist/detail.d.ts +5 -0
- package/dist/detail.js +52 -0
- package/dist/detail.js.map +1 -0
- package/dist/document.d.ts +64 -0
- package/dist/document.js +56 -0
- package/dist/document.js.map +1 -0
- package/dist/export.d.ts +405 -0
- package/dist/export.js +344 -0
- package/dist/export.js.map +1 -0
- package/dist/font-inspection.d.ts +8 -0
- package/dist/font-inspection.js +34 -0
- package/dist/font-inspection.js.map +1 -0
- package/dist/graphics.d.ts +9 -0
- package/dist/graphics.js +72 -0
- package/dist/graphics.js.map +1 -0
- package/dist/history-storage.d.ts +10 -0
- package/dist/history-storage.js +59 -0
- package/dist/history-storage.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +18 -0
- package/dist/layout.js +155 -0
- package/dist/layout.js.map +1 -0
- package/dist/loader.d.ts +9 -0
- package/dist/loader.js +108 -0
- package/dist/loader.js.map +1 -0
- package/dist/mcp.d.ts +4 -0
- package/dist/mcp.js +223 -0
- package/dist/mcp.js.map +1 -0
- package/dist/merge.d.ts +6 -0
- package/dist/merge.js +49 -0
- package/dist/merge.js.map +1 -0
- package/dist/native.d.ts +3 -0
- package/dist/native.js +6 -0
- package/dist/native.js.map +1 -0
- package/dist/paint.d.ts +9 -0
- package/dist/paint.js +331 -0
- package/dist/paint.js.map +1 -0
- package/dist/path-edit.d.ts +20 -0
- package/dist/path-edit.js +30 -0
- package/dist/path-edit.js.map +1 -0
- package/dist/pdf-output.d.ts +21 -0
- package/dist/pdf-output.js +297 -0
- package/dist/pdf-output.js.map +1 -0
- package/dist/pipeline.d.ts +39 -0
- package/dist/pipeline.js +227 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/print-scene.d.ts +490 -0
- package/dist/print-scene.js +55 -0
- package/dist/print-scene.js.map +1 -0
- package/dist/production-workflow.d.ts +251 -0
- package/dist/production-workflow.js +335 -0
- package/dist/production-workflow.js.map +1 -0
- package/dist/program-worker.d.ts +1 -0
- package/dist/program-worker.js +31 -0
- package/dist/program-worker.js.map +1 -0
- package/dist/program.d.ts +85 -0
- package/dist/program.js +246 -0
- package/dist/program.js.map +1 -0
- package/dist/project-config.d.ts +91 -0
- package/dist/project-config.js +187 -0
- package/dist/project-config.js.map +1 -0
- package/dist/project.d.ts +897 -0
- package/dist/project.js +347 -0
- package/dist/project.js.map +1 -0
- package/dist/raster-edit.d.ts +61 -0
- package/dist/raster-edit.js +91 -0
- package/dist/raster-edit.js.map +1 -0
- package/dist/raster-studio.d.ts +84 -0
- package/dist/raster-studio.js +236 -0
- package/dist/raster-studio.js.map +1 -0
- package/dist/render.d.ts +79 -0
- package/dist/render.js +437 -0
- package/dist/render.js.map +1 -0
- package/dist/rich-text.d.ts +10 -0
- package/dist/rich-text.js +56 -0
- package/dist/rich-text.js.map +1 -0
- package/dist/schema.d.ts +1912 -0
- package/dist/schema.js +571 -0
- package/dist/schema.js.map +1 -0
- package/dist/spatial.d.ts +10 -0
- package/dist/spatial.js +29 -0
- package/dist/spatial.js.map +1 -0
- package/dist/studio-reference.d.ts +153 -0
- package/dist/studio-reference.js +39 -0
- package/dist/studio-reference.js.map +1 -0
- package/dist/svg.d.ts +5 -0
- package/dist/svg.js +315 -0
- package/dist/svg.js.map +1 -0
- package/dist/techniques.d.ts +74 -0
- package/dist/techniques.js +164 -0
- package/dist/techniques.js.map +1 -0
- package/dist/verify.d.ts +36 -0
- package/dist/verify.js +277 -0
- package/dist/verify.js.map +1 -0
- package/dist/viewport.d.ts +3 -0
- package/dist/viewport.js +71 -0
- package/dist/viewport.js.map +1 -0
- package/dist/workflow.d.ts +53 -0
- package/dist/workflow.js +66 -0
- package/dist/workflow.js.map +1 -0
- package/docs/agent-art-workflow.md +201 -0
- package/docs/agent-setup.md +83 -0
- package/docs/atelier.md +117 -0
- package/docs/cli-reference.md +61 -0
- package/docs/decisions/001-runtime-and-renderer.md +35 -0
- package/docs/decisions/002-composable-scenes-and-history.md +28 -0
- package/docs/decisions/003-editing-refinement-and-agent-validation.md +45 -0
- package/docs/decisions/004-print-production-and-projects.md +19 -0
- package/docs/decisions/005-programmable-digital-art.md +15 -0
- package/docs/decisions/006-staged-2d-art-production.md +13 -0
- package/docs/decisions/007-foundation-first-art-direction.md +13 -0
- package/docs/decisions/008-agent-onboarding-and-trial-lessons.md +48 -0
- package/docs/engine-overview.md +174 -0
- package/docs/evolution.md +179 -0
- package/docs/getting-started.md +107 -0
- package/docs/next-milestone.md +61 -0
- package/docs/previews/a3-production.json +36 -0
- package/docs/previews/benchmark.json +42 -0
- package/docs/previews/landscape.png +0 -0
- package/docs/previews/performance.json +24 -0
- package/docs/previews/poster.png +0 -0
- package/docs/production.md +107 -0
- package/docs/releasing.md +60 -0
- package/docs/scene-format.md +126 -0
- package/docs/studio.md +108 -0
- package/examples/hello/README.md +14 -0
- package/examples/hello/refine.json +10 -0
- package/examples/hello/render.mjs +9 -0
- package/examples/hello/scene.json +19 -0
- package/licenses/DM-Serif-Display-OFL.txt +93 -0
- package/licenses/Inter-OFL.txt +93 -0
- package/package.json +84 -0
- package/schemas/authoring.schema.json +2177 -0
- package/schemas/brief.schema.json +57 -0
- package/schemas/command.schema.json +3154 -0
- package/schemas/construction.schema.json +159 -0
- package/schemas/critique.schema.json +101 -0
- package/schemas/document.schema.json +41 -0
- package/schemas/export.schema.json +89 -0
- package/schemas/fragment.schema.json +1861 -0
- package/schemas/patch.schema.json +3177 -0
- package/schemas/pipeline.schema.json +205 -0
- package/schemas/production.schema.json +452 -0
- package/schemas/program.schema.json +152 -0
- package/schemas/project.schema.json +115 -0
- package/schemas/raster-read.schema.json +42 -0
- package/schemas/raster-write.schema.json +75 -0
- package/schemas/scene.schema.json +2014 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export * from './schema.js';
|
|
2
|
+
export * from './loader.js';
|
|
3
|
+
export * from './layout.js';
|
|
4
|
+
export * from './commands.js';
|
|
5
|
+
export * from './project.js';
|
|
6
|
+
export * from './render.js';
|
|
7
|
+
export * from './verify.js';
|
|
8
|
+
export * from './workflow.js';
|
|
9
|
+
export * from './artifacts.js';
|
|
10
|
+
export { sceneHash, sha256, canonical } from './assets.js';
|
|
11
|
+
export * from './benchmark.js';
|
|
12
|
+
export * from './critique.js';
|
|
13
|
+
export * from './components.js';
|
|
14
|
+
export * from './spatial.js';
|
|
15
|
+
export * from './merge.js';
|
|
16
|
+
export * from './document.js';
|
|
17
|
+
export * from './project-config.js';
|
|
18
|
+
export * from './export.js';
|
|
19
|
+
export * from './svg.js';
|
|
20
|
+
export * from './raster-studio.js';
|
|
21
|
+
export * from './program.js';
|
|
22
|
+
export * from './raster-edit.js';
|
|
23
|
+
export * from './pipeline.js';
|
|
24
|
+
export * from './production-workflow.js';
|
|
25
|
+
export * from './techniques.js';
|
|
26
|
+
export * from './construction.js';
|
|
27
|
+
export * from './art-direction.js';
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE3D,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAE3B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AAEjC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
package/dist/layout.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Bounds, Layer, Scene } from './schema.js';
|
|
2
|
+
export type Matrix = [number, number, number, number, number, number];
|
|
3
|
+
export interface ResolvedLayer {
|
|
4
|
+
layer: Layer;
|
|
5
|
+
visible: boolean;
|
|
6
|
+
bounds: Bounds;
|
|
7
|
+
worldBounds: Bounds;
|
|
8
|
+
matrix: Matrix;
|
|
9
|
+
children: ResolvedLayer[];
|
|
10
|
+
}
|
|
11
|
+
export declare const identity: Matrix;
|
|
12
|
+
export declare function multiply(a: Matrix, b: Matrix): Matrix;
|
|
13
|
+
export declare function transformedBounds(m: Matrix, w: number, h: number): Bounds;
|
|
14
|
+
export declare function intersects(a: Bounds, b: Bounds): boolean;
|
|
15
|
+
export declare function resolveLayout(scene: Scene): ResolvedLayer[];
|
|
16
|
+
export declare function flattenResolved(nodes: ResolvedLayer[]): ResolvedLayer[];
|
|
17
|
+
/** Flatten only isolation-free groups for vector export; preserve groups with compositing context. */
|
|
18
|
+
export declare function exportLayers(nodes: ResolvedLayer[]): ResolvedLayer[];
|
package/dist/layout.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
export const identity = [1, 0, 0, 1, 0, 0];
|
|
2
|
+
export function multiply(a, b) {
|
|
3
|
+
return [
|
|
4
|
+
a[0] * b[0] + a[2] * b[1],
|
|
5
|
+
a[1] * b[0] + a[3] * b[1],
|
|
6
|
+
a[0] * b[2] + a[2] * b[3],
|
|
7
|
+
a[1] * b[2] + a[3] * b[3],
|
|
8
|
+
a[0] * b[4] + a[2] * b[5] + a[4],
|
|
9
|
+
a[1] * b[4] + a[3] * b[5] + a[5],
|
|
10
|
+
];
|
|
11
|
+
}
|
|
12
|
+
export function transformedBounds(m, w, h) {
|
|
13
|
+
const points = [
|
|
14
|
+
[0, 0],
|
|
15
|
+
[w, 0],
|
|
16
|
+
[w, h],
|
|
17
|
+
[0, h],
|
|
18
|
+
].map(([x, y]) => [m[0] * x + m[2] * y + m[4], m[1] * x + m[3] * y + m[5]]);
|
|
19
|
+
const xs = points.map((p) => p[0]), ys = points.map((p) => p[1]);
|
|
20
|
+
const x = Math.min(...xs), y = Math.min(...ys);
|
|
21
|
+
return [x, y, Math.max(...xs) - x, Math.max(...ys) - y];
|
|
22
|
+
}
|
|
23
|
+
export function intersects(a, b) {
|
|
24
|
+
return a[0] < b[0] + b[2] && a[0] + a[2] > b[0] && a[1] < b[1] + b[3] && a[1] + a[3] > b[1];
|
|
25
|
+
}
|
|
26
|
+
export function resolveLayout(scene) {
|
|
27
|
+
const dimension = (value, total, fallback) => typeof value === 'string' ? (parseFloat(value) / 100) * total : (value ?? fallback);
|
|
28
|
+
function resolve(layers, pw, ph, matrix, layout, parentVisible = true) {
|
|
29
|
+
const padding = layout?.padding ?? 0, gap = layout?.gap ?? 0;
|
|
30
|
+
const w = pw - padding * 2, h = ph - padding * 2;
|
|
31
|
+
if (w <= 0 || h <= 0)
|
|
32
|
+
throw new Error('Layout padding consumes the parent bounds');
|
|
33
|
+
const horizontal = layout?.type === 'horizontal', vertical = layout?.type === 'vertical';
|
|
34
|
+
const count = layers.length;
|
|
35
|
+
let cursor = padding;
|
|
36
|
+
// Percentages on the flow axis share space remaining after gaps.
|
|
37
|
+
const aw = w - (horizontal ? gap * Math.max(0, count - 1) : 0), ah = h - (vertical ? gap * Math.max(0, count - 1) : 0);
|
|
38
|
+
const axis = horizontal ? 'width' : 'height', baseSize = horizontal ? aw : ah;
|
|
39
|
+
const growing = layers.filter((l) => (l.grow ?? 0) > 0), totalGrow = growing.reduce((sum, l) => sum + l.grow, 0);
|
|
40
|
+
const fixed = layers
|
|
41
|
+
.filter((l) => !growing.includes(l))
|
|
42
|
+
.reduce((sum, l) => sum +
|
|
43
|
+
dimension(l[axis], baseSize, l.bounds?.[horizontal ? 2 : 3] ?? baseSize / Math.max(1, count)), 0);
|
|
44
|
+
const free = Math.max(0, baseSize - fixed);
|
|
45
|
+
const sizes = layers.map((layer) => {
|
|
46
|
+
const width = horizontal && layer.grow
|
|
47
|
+
? (free * layer.grow) / totalGrow
|
|
48
|
+
: dimension(layer.width, aw, layer.bounds?.[2] ?? (horizontal ? aw / Math.max(1, count) : w));
|
|
49
|
+
let height = vertical && layer.grow
|
|
50
|
+
? (free * layer.grow) / totalGrow
|
|
51
|
+
: dimension(layer.height, ah, layer.bounds?.[3] ?? (vertical ? ah / Math.max(1, count) : h));
|
|
52
|
+
if (layer.aspect_ratio && layer.height === undefined)
|
|
53
|
+
height = width / layer.aspect_ratio;
|
|
54
|
+
return [width, height];
|
|
55
|
+
});
|
|
56
|
+
const remaining = (horizontal ? w : h) -
|
|
57
|
+
sizes.reduce((sum, s) => sum + s[horizontal ? 0 : 1], 0) -
|
|
58
|
+
gap * Math.max(0, count - 1);
|
|
59
|
+
let effectiveGap = gap;
|
|
60
|
+
if (horizontal || vertical) {
|
|
61
|
+
if (layout?.justify === 'center')
|
|
62
|
+
cursor += remaining / 2;
|
|
63
|
+
if (layout?.justify === 'end')
|
|
64
|
+
cursor += remaining;
|
|
65
|
+
if (layout?.justify === 'space-between' && count > 1)
|
|
66
|
+
effectiveGap += remaining / (count - 1);
|
|
67
|
+
}
|
|
68
|
+
return layers.map((layer, layerIndex) => {
|
|
69
|
+
const [width, height] = sizes[layerIndex];
|
|
70
|
+
if (width <= 0 || height <= 0 || width > 8192 || height > 8192)
|
|
71
|
+
throw new Error(`Invalid resolved size: ${layer.id}`);
|
|
72
|
+
let x = layer.bounds?.[0] ?? padding, y = layer.bounds?.[1] ?? padding;
|
|
73
|
+
if (horizontal || vertical) {
|
|
74
|
+
const crossSpace = horizontal ? h - height : w - width;
|
|
75
|
+
const cross = padding +
|
|
76
|
+
(layout?.align === 'center' ? crossSpace / 2 : layout?.align === 'end' ? crossSpace : 0);
|
|
77
|
+
if (horizontal) {
|
|
78
|
+
x = cursor;
|
|
79
|
+
y = cross;
|
|
80
|
+
cursor += width + effectiveGap;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
y = cursor;
|
|
84
|
+
x = cross;
|
|
85
|
+
cursor += height + effectiveGap;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else if (layer.anchor !== 'top-left') {
|
|
89
|
+
if (layer.anchor === 'center') {
|
|
90
|
+
x += (w - width) / 2;
|
|
91
|
+
y += (h - height) / 2;
|
|
92
|
+
}
|
|
93
|
+
if (layer.anchor.endsWith('right'))
|
|
94
|
+
x += w - width;
|
|
95
|
+
if (layer.anchor.startsWith('bottom'))
|
|
96
|
+
y += h - height;
|
|
97
|
+
}
|
|
98
|
+
const rad = ((layer.transform?.rotation ?? 0) * Math.PI) / 180, [sx, sy] = layer.transform?.scale ?? [1, 1];
|
|
99
|
+
const rotation = [
|
|
100
|
+
Math.cos(rad) * sx,
|
|
101
|
+
Math.sin(rad) * sx,
|
|
102
|
+
-Math.sin(rad) * sy,
|
|
103
|
+
Math.cos(rad) * sy,
|
|
104
|
+
0,
|
|
105
|
+
0,
|
|
106
|
+
];
|
|
107
|
+
const local = layer.affine ??
|
|
108
|
+
multiply(multiply([1, 0, 0, 1, x + width / 2, y + height / 2], rotation), [
|
|
109
|
+
1,
|
|
110
|
+
0,
|
|
111
|
+
0,
|
|
112
|
+
1,
|
|
113
|
+
-width / 2,
|
|
114
|
+
-height / 2,
|
|
115
|
+
]);
|
|
116
|
+
const world = multiply(matrix, local);
|
|
117
|
+
return {
|
|
118
|
+
layer,
|
|
119
|
+
visible: parentVisible && layer.visible && layer.opacity > 0,
|
|
120
|
+
bounds: [x, y, width, height],
|
|
121
|
+
worldBounds: transformedBounds(world, width, height),
|
|
122
|
+
matrix: world,
|
|
123
|
+
children: resolve(layer.children, width, height, world, layer.layout, parentVisible && layer.visible && layer.opacity > 0),
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
return resolve(scene.layers, scene.canvas.width, scene.canvas.height, identity);
|
|
128
|
+
}
|
|
129
|
+
export function flattenResolved(nodes) {
|
|
130
|
+
return nodes.flatMap((node) => [node, ...flattenResolved(node.children)]);
|
|
131
|
+
}
|
|
132
|
+
/** Flatten only isolation-free groups for vector export; preserve groups with compositing context. */
|
|
133
|
+
export function exportLayers(nodes) {
|
|
134
|
+
const contextFree = (n) => n.layer.blend_mode === 'normal' &&
|
|
135
|
+
n.layer.type !== 'adjustment' &&
|
|
136
|
+
n.children.every(contextFree);
|
|
137
|
+
return [...nodes]
|
|
138
|
+
.sort((a, b) => a.layer.z - b.layer.z)
|
|
139
|
+
.flatMap((n) => {
|
|
140
|
+
const l = n.layer;
|
|
141
|
+
if (!n.visible)
|
|
142
|
+
return [];
|
|
143
|
+
return l.type === 'group' &&
|
|
144
|
+
l.opacity === 1 &&
|
|
145
|
+
!l.mask &&
|
|
146
|
+
!l.effects.length &&
|
|
147
|
+
!l.operations.length &&
|
|
148
|
+
!l.tiles.length &&
|
|
149
|
+
!l.regions?.length &&
|
|
150
|
+
contextFree(n)
|
|
151
|
+
? exportLayers(n.children)
|
|
152
|
+
: [n];
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
|
package/dist/loader.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Scene } from './schema.js';
|
|
2
|
+
export interface SceneSource {
|
|
3
|
+
scene: Scene;
|
|
4
|
+
root: string;
|
|
5
|
+
file: string;
|
|
6
|
+
files: string[];
|
|
7
|
+
}
|
|
8
|
+
/** Includes are fragments with {include?, assets?, layers?}; IDs share one namespace. */
|
|
9
|
+
export declare function loadScene(file: string): Promise<SceneSource>;
|
package/dist/loader.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { componentsSchema, expandComponents } from './components.js';
|
|
2
|
+
import { readFile, realpath } from 'node:fs/promises';
|
|
3
|
+
import { dirname, relative, resolve } from 'node:path';
|
|
4
|
+
import { parse } from 'yaml';
|
|
5
|
+
import { localAssetPath } from './assets.js';
|
|
6
|
+
import { parseScene } from './schema.js';
|
|
7
|
+
/** Includes are fragments with {include?, assets?, layers?}; IDs share one namespace. */
|
|
8
|
+
export async function loadScene(file) {
|
|
9
|
+
const absolute = await realpath(resolve(file)), root = dirname(absolute), files = [], active = new Set();
|
|
10
|
+
const components = Object.create(null);
|
|
11
|
+
const fonts = Object.create(null);
|
|
12
|
+
const assets = Object.create(null);
|
|
13
|
+
async function read(path, isRoot = false) {
|
|
14
|
+
const safe = await localAssetPath(root, relative(root, path));
|
|
15
|
+
if (active.has(safe))
|
|
16
|
+
throw new Error(`Cyclic scene include: ${relative(root, safe)}`);
|
|
17
|
+
if (files.length >= 128)
|
|
18
|
+
throw new Error('Scene has too many includes (maximum 128)');
|
|
19
|
+
active.add(safe);
|
|
20
|
+
files.push(safe);
|
|
21
|
+
const raw = await readFile(safe, 'utf8');
|
|
22
|
+
if (raw.length > 8 * 1024 * 1024)
|
|
23
|
+
throw new Error('Scene file exceeds 8 MiB');
|
|
24
|
+
const doc = parse(raw, { maxAliasCount: 100 });
|
|
25
|
+
if (!doc || typeof doc !== 'object' || Array.isArray(doc))
|
|
26
|
+
throw new Error(`Expected an object in ${safe}`);
|
|
27
|
+
if (!isRoot)
|
|
28
|
+
for (const key of Object.keys(doc))
|
|
29
|
+
if (!['include', 'assets', 'layers', 'components', 'fonts'].includes(key))
|
|
30
|
+
throw new Error(`Unknown fragment field: ${key}`);
|
|
31
|
+
const layers = [];
|
|
32
|
+
if (doc.include !== undefined) {
|
|
33
|
+
if (!Array.isArray(doc.include) || doc.include.some((p) => typeof p !== 'string'))
|
|
34
|
+
throw new Error('include must be a list of relative file paths');
|
|
35
|
+
for (const part of doc.include) {
|
|
36
|
+
if (part.startsWith('/') || /^[a-z]+:/i.test(part))
|
|
37
|
+
throw new Error('Includes must be relative local paths');
|
|
38
|
+
const fragment = await read(resolve(dirname(safe), part));
|
|
39
|
+
layers.push(...fragment.layers);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (doc.assets !== undefined) {
|
|
43
|
+
if (!doc.assets || typeof doc.assets !== 'object' || Array.isArray(doc.assets))
|
|
44
|
+
throw new Error('assets must be a mapping');
|
|
45
|
+
for (const [id, asset] of Object.entries(doc.assets)) {
|
|
46
|
+
if (Object.hasOwn(assets, id))
|
|
47
|
+
throw new Error(`Duplicate asset id across files: ${id}`);
|
|
48
|
+
if (!asset || typeof asset.source !== 'string')
|
|
49
|
+
throw new Error(`Asset ${id} requires a source`);
|
|
50
|
+
if (asset.source.startsWith('/') || /^[a-z]+:/i.test(asset.source))
|
|
51
|
+
throw new Error('Assets must be relative local paths');
|
|
52
|
+
assets[id] = {
|
|
53
|
+
...asset,
|
|
54
|
+
source: relative(root, resolve(dirname(safe), asset.source)),
|
|
55
|
+
...(asset.recipe
|
|
56
|
+
? {
|
|
57
|
+
recipe: {
|
|
58
|
+
...asset.recipe,
|
|
59
|
+
source: relative(root, resolve(dirname(safe), asset.recipe.source)),
|
|
60
|
+
},
|
|
61
|
+
}
|
|
62
|
+
: {}),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (doc.components) {
|
|
67
|
+
for (const [id, component] of Object.entries(componentsSchema.parse(doc.components))) {
|
|
68
|
+
if (Object.hasOwn(components, id))
|
|
69
|
+
throw new Error(`Duplicate component: ${id}`);
|
|
70
|
+
components[id] = component;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (doc.fonts) {
|
|
74
|
+
if (typeof doc.fonts !== 'object' || Array.isArray(doc.fonts))
|
|
75
|
+
throw new Error('fonts must be a mapping');
|
|
76
|
+
for (const [id, font] of Object.entries(doc.fonts)) {
|
|
77
|
+
if (Object.hasOwn(fonts, id))
|
|
78
|
+
throw new Error('Duplicate font');
|
|
79
|
+
if (typeof font?.source !== 'string' ||
|
|
80
|
+
font.source.startsWith('/') ||
|
|
81
|
+
/^[a-z]+:/i.test(font.source))
|
|
82
|
+
throw new Error('Font requires a relative source');
|
|
83
|
+
fonts[id] = { ...font, source: relative(root, resolve(dirname(safe), font.source)) };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (doc.layers !== undefined) {
|
|
87
|
+
if (!Array.isArray(doc.layers))
|
|
88
|
+
throw new Error('layers must be an array');
|
|
89
|
+
layers.push(...doc.layers);
|
|
90
|
+
}
|
|
91
|
+
active.delete(safe);
|
|
92
|
+
const { include: _include, components: _components, ...rest } = doc;
|
|
93
|
+
return { ...rest, layers };
|
|
94
|
+
}
|
|
95
|
+
const document = await read(absolute, true);
|
|
96
|
+
return {
|
|
97
|
+
scene: parseScene({
|
|
98
|
+
...document,
|
|
99
|
+
assets,
|
|
100
|
+
...(Object.keys(fonts).length ? { fonts } : {}),
|
|
101
|
+
layers: expandComponents(document.layers, components),
|
|
102
|
+
}),
|
|
103
|
+
root,
|
|
104
|
+
file: absolute,
|
|
105
|
+
files,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAkB,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAQrD,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY;IAC1C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAC5C,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,EACxB,KAAK,GAAa,EAAE,EACpB,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7B,MAAM,UAAU,GAA8B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,KAAK,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3D,MAAM,MAAM,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5D,KAAK,UAAU,IAAI,CAAC,IAAY,EAAE,MAAM,GAAG,KAAK;QAC9C,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACvF,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACtF,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9E,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAA4B,CAAC;QAC1E,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM;YACT,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBAChC,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACvE,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;gBAC/E,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAmB,EAAE,CAAC;gBAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;oBAChD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,GAAI,QAAQ,CAAC,MAAoB,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC5E,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CACtC,GAAG,CAAC,MAAiD,CACtD,EAAE,CAAC;gBACF,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;gBACzF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;oBAC5C,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;gBACnD,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;oBAChE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACzD,MAAM,CAAC,EAAE,CAAC,GAAG;oBACX,GAAG,KAAK;oBACR,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC5D,GAAG,CAAC,KAAK,CAAC,MAAM;wBACd,CAAC,CAAC;4BACE,MAAM,EAAE;gCACN,GAAI,KAAK,CAAC,MAAiB;gCAC3B,MAAM,EAAE,QAAQ,CACd,IAAI,EACJ,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAG,KAAK,CAAC,MAA6B,CAAC,MAAM,CAAC,CACpE;6BACF;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;gBACrF,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;gBACjF,UAAU,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAA4B,CAAC,EAAE,CAAC;gBAC1E,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAChE,IACE,OAAO,IAAI,EAAE,MAAM,KAAK,QAAQ;oBAChC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;oBAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;oBAE7B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBACrD,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YACvF,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC3E,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC;QACpE,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5C,OAAO;QACL,KAAK,EAAE,UAAU,CAAC;YAChB,GAAG,QAAQ;YACX,MAAM;YACN,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,MAAmB,EAAE,UAAU,CAAC;SACnE,CAAC;QACF,IAAI;QACJ,IAAI,EAAE,QAAQ;QACd,KAAK;KACN,CAAC;AACJ,CAAC"}
|
package/dist/mcp.d.ts
ADDED
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { buildPipeline, pipelineSchema } from './pipeline.js';
|
|
2
|
+
import { production, productionRequestSchema } from './production-workflow.js';
|
|
3
|
+
import { exportArtwork, preflight, softProof } from './export.js';
|
|
4
|
+
import { exportPresetSchema } from './document.js';
|
|
5
|
+
import { critiqueSchema } from './critique.js';
|
|
6
|
+
import { programSchema, runProgram, replayRecipe } from './program.js';
|
|
7
|
+
import { studioReference } from './studio-reference.js';
|
|
8
|
+
import { artDirectionGuide, artDirectionResourceUri, rtistreeAgentInstructions, } from './art-direction.js';
|
|
9
|
+
import { rasterReadSchema, rasterWriteSchema, readRasterRegion, writeRasterRegion, } from './raster-edit.js';
|
|
10
|
+
import { ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
11
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
12
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
import { patchSchema } from './commands.js';
|
|
16
|
+
import { boundsSchema } from './schema.js';
|
|
17
|
+
import { writeRender } from './artifacts.js';
|
|
18
|
+
const json = (value) => ({
|
|
19
|
+
content: [{ type: 'text', text: JSON.stringify(value) }],
|
|
20
|
+
});
|
|
21
|
+
const image = (render) => ({
|
|
22
|
+
type: 'image',
|
|
23
|
+
data: render.png.toString('base64'),
|
|
24
|
+
mimeType: 'image/png',
|
|
25
|
+
});
|
|
26
|
+
export function createServer(project) {
|
|
27
|
+
const server = new McpServer({ name: 'rtistree', version: '0.5.0' }, { instructions: rtistreeAgentInstructions });
|
|
28
|
+
server.registerResource('art-direction', artDirectionResourceUri, {
|
|
29
|
+
title: 'Rtistree art direction and trial lessons',
|
|
30
|
+
description: 'Read before creating artwork: representative samples, subject-specific construction and motion checks, separate acceptance axes, calibration failures and a production plan template.',
|
|
31
|
+
mimeType: 'application/json',
|
|
32
|
+
}, async (uri) => ({
|
|
33
|
+
contents: [
|
|
34
|
+
{ uri: uri.href, mimeType: 'application/json', text: JSON.stringify(artDirectionGuide) },
|
|
35
|
+
],
|
|
36
|
+
}));
|
|
37
|
+
const definitions = [];
|
|
38
|
+
// Share recursive definitions in discovery while retaining SDK runtime validation.
|
|
39
|
+
function registerTool(name, config, callback) {
|
|
40
|
+
definitions.push({
|
|
41
|
+
name,
|
|
42
|
+
description: config.description,
|
|
43
|
+
annotations: config.annotations,
|
|
44
|
+
inputSchema: z.toJSONSchema(z.object(config.inputSchema), {
|
|
45
|
+
reused: 'ref',
|
|
46
|
+
target: 'draft-7',
|
|
47
|
+
io: 'input',
|
|
48
|
+
}),
|
|
49
|
+
});
|
|
50
|
+
return server.registerTool(name, config, callback);
|
|
51
|
+
}
|
|
52
|
+
const readOnly = { readOnlyHint: true, destructiveHint: false, openWorldHint: false };
|
|
53
|
+
const mutate = { readOnlyHint: false, destructiveHint: false, openWorldHint: false };
|
|
54
|
+
registerTool('buildPipeline', {
|
|
55
|
+
description: 'Before creating artwork, read studioHelp for construction and review guidance. Explicitly execute trusted local 2D painting code in a dependency graph. Reuse unchanged nodes and atomically commit all changed outputs. Graph code and parameters are retained in scene metadata. Build success is not a visual-quality pass. Native code is not sandboxed.',
|
|
56
|
+
inputSchema: { pipeline: pipelineSchema, expected_hash: z.string().optional() },
|
|
57
|
+
annotations: { ...mutate, openWorldHint: true },
|
|
58
|
+
}, async ({ pipeline, expected_hash }) => json(await buildPipeline(project, pipeline, expected_hash)));
|
|
59
|
+
registerTool('production', {
|
|
60
|
+
description: 'Plan stages, capture image candidates and detail crops, record human/vision reviews, compare, restore the best candidate with undo, and advance gated stages. Reviews require actual visual observation; technical checks do not rate art. Read studioHelp first.',
|
|
61
|
+
inputSchema: { request: productionRequestSchema },
|
|
62
|
+
annotations: mutate,
|
|
63
|
+
}, async ({ request }) => json(await production(project, request)));
|
|
64
|
+
registerTool('studioHelp', {
|
|
65
|
+
description: 'Read before creating artwork: representative samples, reference study, distinct poses, connected construction, shared perspective, functional motion checks, observed visual review, targeted revision and blocking defects. Includes trial lessons, a starter production plan, named 2D guides, the raster API and trusted-code limits.',
|
|
66
|
+
inputSchema: {},
|
|
67
|
+
annotations: readOnly,
|
|
68
|
+
}, async () => json(studioReference));
|
|
69
|
+
registerTool('runProgram', {
|
|
70
|
+
description: 'Before creating artwork, read studioHelp for construction and review guidance. Execute a trusted local JavaScript raster program with seeded studio helpers; bake and pin its output, recipe and input snapshots, optionally update a target layer. Successful execution is not a visual-quality pass. Native worker isolation is not a security sandbox; only run code you trust. Scene rendering never executes programs.',
|
|
71
|
+
inputSchema: { program: programSchema },
|
|
72
|
+
annotations: { ...mutate, openWorldHint: true },
|
|
73
|
+
}, async ({ program }) => json(await runProgram(project, program)));
|
|
74
|
+
registerTool('replayProgram', {
|
|
75
|
+
description: 'Explicitly re-execute a trusted baked asset recipe and compare output hashes. This runs local code, not a security sandbox.',
|
|
76
|
+
inputSchema: { asset: z.string() },
|
|
77
|
+
annotations: { ...mutate, openWorldHint: true },
|
|
78
|
+
}, async ({ asset }) => {
|
|
79
|
+
const reference = (await project.scene()).assets[asset]?.recipe;
|
|
80
|
+
if (!reference)
|
|
81
|
+
throw new Error('Asset has no recipe');
|
|
82
|
+
const { png, ...result } = await replayRecipe(project.root, reference);
|
|
83
|
+
return json(result);
|
|
84
|
+
});
|
|
85
|
+
registerTool('readRasterRegion', {
|
|
86
|
+
description: 'Read an exact canvas-space PNG region of the composite or isolated layer, with a scene hash for subsequent dense edits.',
|
|
87
|
+
inputSchema: { request: rasterReadSchema },
|
|
88
|
+
annotations: mutate,
|
|
89
|
+
}, async ({ request }) => {
|
|
90
|
+
const { render, ...result } = await readRasterRegion(project, request);
|
|
91
|
+
return { content: [...json(result).content, image(render)] };
|
|
92
|
+
});
|
|
93
|
+
registerTool('writeRasterRegion', {
|
|
94
|
+
description: 'Atomically replace or composite a dense local PNG patch into a layer, with exact dimensions, stale-scene protection, locality validation and undo. Layer-space patches follow later object transforms.',
|
|
95
|
+
inputSchema: { request: rasterWriteSchema },
|
|
96
|
+
annotations: mutate,
|
|
97
|
+
}, async ({ request }) => json(await writeRasterRegion(project, request)));
|
|
98
|
+
registerTool('inspectScene', {
|
|
99
|
+
description: 'Inspect semantic layers, resolved bounds, scene hash and undo state. Start here before editing.',
|
|
100
|
+
inputSchema: {},
|
|
101
|
+
annotations: readOnly,
|
|
102
|
+
}, async () => json(await project.inspect()));
|
|
103
|
+
registerTool('inspectLayer', {
|
|
104
|
+
description: 'Inspect one layer including its semantic source, masks, effects, raster operations and tiles.',
|
|
105
|
+
inputSchema: { id: z.string() },
|
|
106
|
+
annotations: readOnly,
|
|
107
|
+
}, async ({ id }) => json(await project.inspectLayer(id)));
|
|
108
|
+
registerTool('inspectRegion', {
|
|
109
|
+
description: 'Return an exact PNG crop, intersecting layers, quantized dominant colours and mean luma. Coordinates are canvas pixels.',
|
|
110
|
+
inputSchema: { bounds: boundsSchema },
|
|
111
|
+
annotations: readOnly,
|
|
112
|
+
}, async ({ bounds }) => {
|
|
113
|
+
const { render, ...region } = await project.inspectRegion(bounds);
|
|
114
|
+
return { content: [...json(region).content, image(render)] };
|
|
115
|
+
});
|
|
116
|
+
registerTool('render', {
|
|
117
|
+
description: 'Render the current persisted scene and return a PNG image, artifact paths and deterministic evidence.',
|
|
118
|
+
inputSchema: { quality: z.enum(['draft', 'preview', 'final']).default('preview') },
|
|
119
|
+
annotations: mutate,
|
|
120
|
+
}, async ({ quality }) => {
|
|
121
|
+
const render = await project.render({ quality });
|
|
122
|
+
const artifact = await writeRender(join(project.outputDirectory, `${render.evidence.render.png_hash.slice(7)}.png`), render);
|
|
123
|
+
return { content: [...json(artifact).content, image(render)] };
|
|
124
|
+
});
|
|
125
|
+
registerTool('renderRegion', {
|
|
126
|
+
description: 'Render an exact crop with full compositing context. No approximation at crop edges.',
|
|
127
|
+
inputSchema: { bounds: boundsSchema },
|
|
128
|
+
annotations: readOnly,
|
|
129
|
+
}, async ({ bounds }) => {
|
|
130
|
+
const render = await project.render({ region: bounds });
|
|
131
|
+
return { content: [...json(render.evidence).content, image(render)] };
|
|
132
|
+
});
|
|
133
|
+
registerTool('apply', {
|
|
134
|
+
description: 'Atomically apply typed semantic or raster commands. Include the inspected expected_hash to reject stale edits and a reason for the audit log. Raster commands are rejected if any final pixel outside their bounds changes. Prefer semantic edits to pixels.',
|
|
135
|
+
inputSchema: { patch: patchSchema },
|
|
136
|
+
annotations: mutate,
|
|
137
|
+
}, async ({ patch }) => {
|
|
138
|
+
try {
|
|
139
|
+
const entry = await project.apply(patch);
|
|
140
|
+
return json({
|
|
141
|
+
sequence: entry.sequence,
|
|
142
|
+
scene_hash: entry.after_hash,
|
|
143
|
+
locality: entry.locality,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
return {
|
|
148
|
+
isError: true,
|
|
149
|
+
...json({ error: error instanceof Error ? error.message : String(error) }),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
registerTool('undo', {
|
|
154
|
+
description: 'Undo the last transaction; record the reversal in append-only history.',
|
|
155
|
+
inputSchema: {},
|
|
156
|
+
annotations: mutate,
|
|
157
|
+
}, async () => {
|
|
158
|
+
const entry = await project.undo();
|
|
159
|
+
return json({ scene_hash: entry.after_hash });
|
|
160
|
+
});
|
|
161
|
+
registerTool('redo', {
|
|
162
|
+
description: 'Redo the last undone transaction; new edits clear the redo branch.',
|
|
163
|
+
inputSchema: {},
|
|
164
|
+
annotations: mutate,
|
|
165
|
+
}, async () => {
|
|
166
|
+
const entry = await project.redo();
|
|
167
|
+
return json({ scene_hash: entry.after_hash });
|
|
168
|
+
});
|
|
169
|
+
registerTool('verify', {
|
|
170
|
+
description: 'Return measured scene-rule findings and render provenance. Does not assess aesthetic quality; inspect the image for visual critique.',
|
|
171
|
+
inputSchema: {},
|
|
172
|
+
annotations: readOnly,
|
|
173
|
+
}, async () => json(await project.verify()));
|
|
174
|
+
registerTool('history', {
|
|
175
|
+
description: 'Read the audit trail with reasons, scene hashes, commands and measured edit locality.',
|
|
176
|
+
inputSchema: {},
|
|
177
|
+
annotations: readOnly,
|
|
178
|
+
}, async () => json((await project.history()).map(({ after, ...entry }) => entry)));
|
|
179
|
+
registerTool('recordCritique', {
|
|
180
|
+
description: 'Record a human or vision-agent critique of the actual current image, with exact scene/PNG hashes. Findings can block the iterative pass condition.',
|
|
181
|
+
inputSchema: { critique: critiqueSchema },
|
|
182
|
+
annotations: mutate,
|
|
183
|
+
}, async ({ critique }) => json(await project.recordCritique(critique)));
|
|
184
|
+
registerTool('readCritique', {
|
|
185
|
+
description: 'Read the critique for the current scene/render, or null if it has not been reviewed.',
|
|
186
|
+
inputSchema: {},
|
|
187
|
+
annotations: readOnly,
|
|
188
|
+
}, async () => json(await project.critique()));
|
|
189
|
+
registerTool('rebase', {
|
|
190
|
+
description: 'Merge nonconflicting manual source changes into the working scene; conflicting paths are reported without committing.',
|
|
191
|
+
inputSchema: {},
|
|
192
|
+
annotations: mutate,
|
|
193
|
+
}, async () => {
|
|
194
|
+
const e = await project.rebase();
|
|
195
|
+
return json({ hash: e.after_hash });
|
|
196
|
+
});
|
|
197
|
+
registerTool('compactHistory', {
|
|
198
|
+
description: 'Compress the full audit trail while retaining every undo/redo state.',
|
|
199
|
+
inputSchema: {},
|
|
200
|
+
annotations: mutate,
|
|
201
|
+
}, async () => json(await project.compactHistory()));
|
|
202
|
+
registerTool('exportArtwork', {
|
|
203
|
+
description: 'Export PNG, JPEG, TIFF, or physically sized PDF into the project output directory with profile and geometry read-back validation.',
|
|
204
|
+
inputSchema: { name: z.string().regex(/^[a-zA-Z0-9_-]+$/), options: exportPresetSchema },
|
|
205
|
+
annotations: mutate,
|
|
206
|
+
}, async ({ name, options }) => json(await exportArtwork(project, join(project.outputDirectory, `${name}.${options.format}`), options)));
|
|
207
|
+
registerTool('softProof', {
|
|
208
|
+
description: 'Create an sRGB preview of a round-trip through the project CMYK ICC profile.',
|
|
209
|
+
inputSchema: { options: exportPresetSchema },
|
|
210
|
+
annotations: mutate,
|
|
211
|
+
}, async ({ options }) => json(await softProof(project, join(project.outputDirectory, 'proof.png'), options)));
|
|
212
|
+
registerTool('preflight', {
|
|
213
|
+
description: 'Inspect physical print geometry, source image resolution and ICC requirements before export.',
|
|
214
|
+
inputSchema: { options: exportPresetSchema },
|
|
215
|
+
annotations: readOnly,
|
|
216
|
+
}, async ({ options }) => json(await preflight(project, options)));
|
|
217
|
+
server.server.setRequestHandler(ListToolsRequestSchema, () => ({ tools: definitions }));
|
|
218
|
+
return server;
|
|
219
|
+
}
|
|
220
|
+
export async function serve(project) {
|
|
221
|
+
await createServer(project).connect(new StdioServerTransport());
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/merge.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare class SourceConflict extends Error {
|
|
2
|
+
readonly paths: string[];
|
|
3
|
+
constructor(paths: string[]);
|
|
4
|
+
}
|
|
5
|
+
/** Preserve disjoint source and agent edits. ID-bearing arrays are merged by identity. */
|
|
6
|
+
export declare function mergeSource(base: unknown, working: unknown, incoming: unknown): unknown;
|