@pinepaper.studio/mcp-server 1.5.5 → 1.6.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/README.de.md +71 -0
- package/README.es.md +71 -0
- package/README.fr.md +71 -0
- package/README.hi.md +71 -0
- package/README.ja.md +71 -0
- package/README.ko.md +71 -0
- package/README.md +513 -272
- package/README.pt-BR.md +71 -0
- package/README.zh-CN.md +71 -0
- package/assets/easing-splashes.svg +152 -0
- package/assets/equation-path.svg +77 -0
- package/assets/hero.svg +126 -0
- package/assets/live-badge.svg +62 -0
- package/assets/poster-sunburst.svg +106 -0
- package/dist/__tests__/fixtures/mock-relations.d.ts +48 -0
- package/dist/__tests__/fixtures/mock-relations.d.ts.map +1 -1
- package/dist/__tests__/fixtures/mock-relations.js +31 -0
- package/dist/__tests__/fixtures/mock-relations.js.map +1 -1
- package/dist/agent/types.d.ts +6 -6
- package/dist/browser/puppeteer-controller.d.ts +34 -0
- package/dist/browser/puppeteer-controller.d.ts.map +1 -1
- package/dist/browser/puppeteer-controller.js +116 -5
- package/dist/browser/puppeteer-controller.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -1
- package/dist/index.js.map +1 -1
- package/dist/ontology/index.d.ts +2 -0
- package/dist/ontology/index.d.ts.map +1 -1
- package/dist/ontology/index.js +2 -0
- package/dist/ontology/index.js.map +1 -1
- package/dist/ontology/ontology-compiler.d.ts +78 -0
- package/dist/ontology/ontology-compiler.d.ts.map +1 -0
- package/dist/ontology/ontology-compiler.js +235 -0
- package/dist/ontology/ontology-compiler.js.map +1 -0
- package/dist/ontology/ontology-validator.d.ts +103 -0
- package/dist/ontology/ontology-validator.d.ts.map +1 -0
- package/dist/ontology/ontology-validator.js +573 -0
- package/dist/ontology/ontology-validator.js.map +1 -0
- package/dist/ontology/types.d.ts +1 -0
- package/dist/ontology/types.d.ts.map +1 -1
- package/dist/ontology/validator.d.ts +6 -0
- package/dist/ontology/validator.d.ts.map +1 -1
- package/dist/ontology/validator.js +34 -5
- package/dist/ontology/validator.js.map +1 -1
- package/dist/ontology/vocabulary.d.ts.map +1 -1
- package/dist/ontology/vocabulary.js +91 -3
- package/dist/ontology/vocabulary.js.map +1 -1
- package/dist/tools/definitions.d.ts +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +978 -27
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/handlers/maps.d.ts.map +1 -1
- package/dist/tools/handlers/maps.js +54 -1
- package/dist/tools/handlers/maps.js.map +1 -1
- package/dist/tools/handlers/ontology.d.ts.map +1 -1
- package/dist/tools/handlers/ontology.js +15 -3
- package/dist/tools/handlers/ontology.js.map +1 -1
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +137 -6
- package/dist/tools/handlers.js.map +1 -1
- package/dist/tools/minimal-descriptions.d.ts.map +1 -1
- package/dist/tools/minimal-descriptions.js +20 -1
- package/dist/tools/minimal-descriptions.js.map +1 -1
- package/dist/tools/toolkits.d.ts.map +1 -1
- package/dist/tools/toolkits.js +25 -2
- package/dist/tools/toolkits.js.map +1 -1
- package/dist/types/code-generator.d.ts +190 -2
- package/dist/types/code-generator.d.ts.map +1 -1
- package/dist/types/code-generator.js +1068 -30
- package/dist/types/code-generator.js.map +1 -1
- package/dist/types/schemas.d.ts +2726 -116
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +594 -4
- package/dist/types/schemas.js.map +1 -1
- package/manifest.json +299 -71
- package/package.json +14 -3
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import { errorResult, executeOrGenerate } from '../handlers.js';
|
|
17
17
|
import { codeGenerator } from '../../types/code-generator.js';
|
|
18
|
-
import { AnalyzeDesignInputSchema, ValidateDesignInputSchema, QueryOntologyInputSchema, GetCanvasOntologyInputSchema, ErrorCodes, } from '../../types/schemas.js';
|
|
18
|
+
import { AnalyzeDesignInputSchema, ValidateDesignInputSchema, ValidateInputSchema, QueryOntologyInputSchema, GetCanvasOntologyInputSchema, ErrorCodes, } from '../../types/schemas.js';
|
|
19
19
|
export const ontologyHandlers = {
|
|
20
20
|
pinepaper_get_canvas_ontology: async (args, options) => {
|
|
21
21
|
const input = GetCanvasOntologyInputSchema.parse(args);
|
|
@@ -57,7 +57,7 @@ export const ontologyHandlers = {
|
|
|
57
57
|
},
|
|
58
58
|
pinepaper_validate_design: async (args, _options) => {
|
|
59
59
|
const input = ValidateDesignInputSchema.parse(args);
|
|
60
|
-
const { DesignGraph, KnowledgeGraphValidator } = await import('../../ontology/index.js');
|
|
60
|
+
const { DesignGraph, KnowledgeGraphValidator, validateDefinitionSemantics } = await import('../../ontology/index.js');
|
|
61
61
|
const dg = new DesignGraph();
|
|
62
62
|
const validator = new KnowledgeGraphValidator();
|
|
63
63
|
const definition = input.definition;
|
|
@@ -67,13 +67,25 @@ export const ontologyHandlers = {
|
|
|
67
67
|
const graph = dg.extractFromDefinition(definition);
|
|
68
68
|
quality = validator.scoreQuality(definition, graph);
|
|
69
69
|
}
|
|
70
|
+
// Structured semantic diagnostics (FxTool's S3.4 OntologyValidator, ported) — dangling
|
|
71
|
+
// relation targets, unknown item/relation types (+nearest-id), duplicate edges,
|
|
72
|
+
// relation cycles, keyframe order/easing. Runs Node-side, no browser round-trip.
|
|
73
|
+
const semantics = validateDefinitionSemantics(definition);
|
|
70
74
|
return {
|
|
71
75
|
content: [{
|
|
72
76
|
type: 'text',
|
|
73
|
-
text: JSON.stringify({ validation, quality }, null, 2),
|
|
77
|
+
text: JSON.stringify({ validation, quality, diagnostics: semantics }, null, 2),
|
|
74
78
|
}],
|
|
75
79
|
};
|
|
76
80
|
},
|
|
81
|
+
// Semantic validation of the LIVE scene or a proposed op (FxTool OntologyValidator).
|
|
82
|
+
// Distinct from validate_design (server-side template scoring): this runs in the
|
|
83
|
+
// browser and returns structured diagnostics {code, severity, message, target, fix}.
|
|
84
|
+
pinepaper_validate: async (args, options) => {
|
|
85
|
+
const input = ValidateInputSchema.parse(args);
|
|
86
|
+
const code = codeGenerator.generateValidate(input);
|
|
87
|
+
return executeOrGenerate(code, 'Semantic validation — structured diagnostics (references, relation types, params, cycles)', options, 'pinepaper_validate');
|
|
88
|
+
},
|
|
77
89
|
pinepaper_query_ontology: async (args, _options) => {
|
|
78
90
|
const input = QueryOntologyInputSchema.parse(args);
|
|
79
91
|
const { PP_VOCABULARY, RELATION_TYPE_MAP } = await import('../../ontology/vocabulary.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ontology.js","sourceRoot":"","sources":["../../../src/tools/handlers/ontology.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ontology.js","sourceRoot":"","sources":["../../../src/tools/handlers/ontology.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/tools/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAA6B,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/tools/handlers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAA6B,MAAM,oCAAoC,CAAC;AAyI/F,OAAO,EAAE,WAAW,EAAW,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,0BAA0B,EAI3B,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,YAAY,EAA0C,MAAM,uBAAuB,CAAC;AA4B7F;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,cAAc,CAOlD;AA+CD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,MAAM,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,aAAa,CAOhD;AAMD,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,0BAA0B,CAAC;IAC/C,oEAAoE;IACpE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,sEAAsE;IACtE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AA2ED,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,YAAY,GACrB,cAAc,CAwBhB;AAyBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,cAAc,CAAC,CAqMzB;AAMD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACtC,MAAM,CASR;AA0ED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,CAkBzB"}
|
package/dist/tools/handlers.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* Supports browser execution via Puppeteer.
|
|
7
7
|
*/
|
|
8
8
|
import { codeGenerator } from '../types/code-generator.js';
|
|
9
|
-
import { CreateItemInputSchema, ModifyItemInputSchema, DeleteItemInputSchema, AddRelationInputSchema, RemoveRelationInputSchema, QueryRelationsInputSchema, AnimateItemInputSchema, KeyframeAnimateInputSchema, ExecuteGeneratorInputSchema, ApplyEffectInputSchema, GetItemsInputSchema, PlayTimelineInputSchema, SetBackgroundColorInputSchema, SetCanvasSizeInputSchema, ImportSVGInputSchema, ImportMermaidInputSchema, AddFilterInputSchema, CreateGlossySphereInputSchema, CreateDiagonalStripesInputSchema, BatchCreateInputSchema, BatchModifyInputSchema, CreateGridInputSchema, CreateSceneInputSchema, GetPerformanceMetricsInputSchema, DiagnosticReportInputSchema, SearchAssetsInputSchema, ImportAssetInputSchema, P5DrawInputSchema,
|
|
9
|
+
import { CreateItemInputSchema, ModifyItemInputSchema, DeleteItemInputSchema, AddRelationInputSchema, RemoveRelationInputSchema, QueryRelationsInputSchema, AnimateItemInputSchema, KeyframeAnimateInputSchema, ExecuteGeneratorInputSchema, ApplyEffectInputSchema, GetItemsInputSchema, PlayTimelineInputSchema, SetBackgroundColorInputSchema, SetCanvasSizeInputSchema, ImportSVGInputSchema, ImportMermaidInputSchema, AddFilterInputSchema, CreateGlossySphereInputSchema, CreateDiagonalStripesInputSchema, BatchCreateInputSchema, BatchModifyInputSchema, CreateGridInputSchema, GeometryInputSchema, EquationPathInputSchema, EventInputSchema, ConstructionSequenceInputSchema, ValidateSceneInputSchema, CaptureFramesInputSchema, InstantiateOntologyInputSchema, LintSceneInputSchema, MediaInputSchema, CropImageInputSchema, ChromaKeyInputSchema, RiggingInputSchema, GroupInputSchema, CameraDirectorInputSchema, DetectObjectsInputSchema, ExtractObjectInputSchema, ArrangeInputSchema, CreateSceneInputSchema, GetPerformanceMetricsInputSchema, DiagnosticReportInputSchema, SearchAssetsInputSchema, ImportAssetInputSchema, P5DrawInputSchema,
|
|
10
10
|
// Diagram schemas
|
|
11
11
|
CreateDiagramShapeInputSchema, ConnectInputSchema, ConnectPortsInputSchema, AddPortsInputSchema, AutoLayoutInputSchema, GetDiagramShapesInputSchema, UpdateConnectorInputSchema, RemoveConnectorInputSchema, DiagramModeInputSchema,
|
|
12
12
|
// Agent flow mode schemas
|
|
@@ -125,10 +125,26 @@ function successResult(code, description) {
|
|
|
125
125
|
}
|
|
126
126
|
return { content };
|
|
127
127
|
}
|
|
128
|
-
function executedResult(code, result, screenshot, description) {
|
|
128
|
+
function executedResult(code, result, screenshot, description, report) {
|
|
129
129
|
const resultObj = { success: true, result };
|
|
130
130
|
if (description)
|
|
131
131
|
resultObj.description = description;
|
|
132
|
+
// Surface the governor's model-actionable feedback (app.runGenerated report):
|
|
133
|
+
// warnings (e.g. "500 items created one-by-one — prefer a pattern"), item count,
|
|
134
|
+
// and guard trips. Omitted entirely on pre-governor FxTool builds (no report).
|
|
135
|
+
if (report) {
|
|
136
|
+
const warnings = Array.isArray(report.warnings) ? report.warnings : [];
|
|
137
|
+
const items = report.items;
|
|
138
|
+
const governor = {};
|
|
139
|
+
if (warnings.length)
|
|
140
|
+
governor.warnings = warnings;
|
|
141
|
+
if (items && typeof items.created === 'number')
|
|
142
|
+
governor.itemsCreated = items.created;
|
|
143
|
+
if (report.guard?.tripped)
|
|
144
|
+
governor.loopGuardTripped = true;
|
|
145
|
+
if (Object.keys(governor).length)
|
|
146
|
+
resultObj.governor = governor;
|
|
147
|
+
}
|
|
132
148
|
const content = [
|
|
133
149
|
{ type: 'text', text: JSON.stringify(resultObj, null, 2) },
|
|
134
150
|
{ type: 'text', text: `Generated code:\n\`\`\`javascript\n${code}\n\`\`\`` },
|
|
@@ -374,12 +390,15 @@ ${code}
|
|
|
374
390
|
if (!result.success) {
|
|
375
391
|
// Capture canvas state for error context
|
|
376
392
|
const canvasState = await captureCanvasState(controller);
|
|
377
|
-
return errorResult(ErrorCodes.EXECUTION_ERROR, result.error || 'Failed to execute code in browser',
|
|
393
|
+
return errorResult(ErrorCodes.EXECUTION_ERROR, result.error || 'Failed to execute code in browser',
|
|
394
|
+
// errorCode surfaces the governor's structured code (PP_ITEM_BUDGET,
|
|
395
|
+
// PP_LOOP_BUDGET, PP_TIMEOUT) so the model can correct on the next turn.
|
|
396
|
+
{ code, errorCode: result.errorCode, governorReport: result.report }, {
|
|
378
397
|
toolName,
|
|
379
398
|
canvasState: canvasState || undefined,
|
|
380
399
|
});
|
|
381
400
|
}
|
|
382
|
-
return executedResult(code, result.result, result.screenshot, description);
|
|
401
|
+
return executedResult(code, result.result, result.screenshot, description, result.report);
|
|
383
402
|
}
|
|
384
403
|
// =============================================================================
|
|
385
404
|
// I18N HELPER FUNCTIONS
|
|
@@ -697,6 +716,108 @@ async function handleToolCallInner(toolName, args, options, tracker, baseTimerId
|
|
|
697
716
|
const description = `Creates a ${input.cols}x${input.rows} grid${input.animated ? ' with wave animation' : ''}`;
|
|
698
717
|
return executeOrGenerate(code, description, options, 'pinepaper_create_grid');
|
|
699
718
|
}
|
|
719
|
+
case 'pinepaper_geometry': {
|
|
720
|
+
const input = GeometryInputSchema.parse(args);
|
|
721
|
+
const code = codeGenerator.generateGeometry(input);
|
|
722
|
+
const description = `Geometry construction: ${input.operation}${input.createAs ? ' (+ create item)' : ''}`;
|
|
723
|
+
return executeOrGenerate(code, description, options, 'pinepaper_geometry');
|
|
724
|
+
}
|
|
725
|
+
case 'pinepaper_equation_path': {
|
|
726
|
+
const input = EquationPathInputSchema.parse(args);
|
|
727
|
+
const code = codeGenerator.generateEquationPath(input);
|
|
728
|
+
const description = `Equation-driven path: ${input.kind}${input.preset ? ` (${input.preset})` : ''}`;
|
|
729
|
+
return executeOrGenerate(code, description, options, 'pinepaper_equation_path');
|
|
730
|
+
}
|
|
731
|
+
case 'pinepaper_event': {
|
|
732
|
+
const input = EventInputSchema.parse(args);
|
|
733
|
+
const code = codeGenerator.generateEvent(input);
|
|
734
|
+
const description = input.action === 'create'
|
|
735
|
+
? `Create event "${input.name}"`
|
|
736
|
+
: `Pulse event ${input.eventId}`;
|
|
737
|
+
return executeOrGenerate(code, description, options, 'pinepaper_event');
|
|
738
|
+
}
|
|
739
|
+
case 'pinepaper_construction_sequence': {
|
|
740
|
+
const input = ConstructionSequenceInputSchema.parse(args);
|
|
741
|
+
const code = codeGenerator.generateConstructionSequence(input);
|
|
742
|
+
const description = `Construction sequence: ${input.action}`;
|
|
743
|
+
return executeOrGenerate(code, description, options, 'pinepaper_construction_sequence');
|
|
744
|
+
}
|
|
745
|
+
case 'pinepaper_group': {
|
|
746
|
+
const input = GroupInputSchema.parse(args);
|
|
747
|
+
const code = codeGenerator.generateGroup(input);
|
|
748
|
+
const description = input.action === 'ungroup' ? `Ungroup ${input.groupId ?? ''}`
|
|
749
|
+
: input.action === 'break_apart' ? `Break apart ${input.itemId ?? ''} into movable parts`
|
|
750
|
+
: `Group ${(input.itemIds ?? []).length} item(s)${input.groupName ? ` as "${input.groupName}"` : ''}`;
|
|
751
|
+
return executeOrGenerate(code, description, options, 'pinepaper_group');
|
|
752
|
+
}
|
|
753
|
+
case 'pinepaper_camera_director': {
|
|
754
|
+
const input = CameraDirectorInputSchema.parse(args);
|
|
755
|
+
const code = codeGenerator.generateCameraDirector(input);
|
|
756
|
+
const description = input.action === 'shots'
|
|
757
|
+
? `Camera director: ${(input.shots ?? []).length} shot(s)`
|
|
758
|
+
: 'Camera director: auto-direct walkthrough';
|
|
759
|
+
return executeOrGenerate(code, description, options, 'pinepaper_camera_director');
|
|
760
|
+
}
|
|
761
|
+
case 'pinepaper_detect_objects': {
|
|
762
|
+
const input = DetectObjectsInputSchema.parse(args);
|
|
763
|
+
const code = codeGenerator.generateDetectObjects(input);
|
|
764
|
+
const description = `Detect objects${input.asNodes ? ' (as design nodes)' : ''}`;
|
|
765
|
+
return executeOrGenerate(code, description, options, 'pinepaper_detect_objects');
|
|
766
|
+
}
|
|
767
|
+
case 'pinepaper_extract_object': {
|
|
768
|
+
const input = ExtractObjectInputSchema.parse(args);
|
|
769
|
+
const code = codeGenerator.generateExtractObject(input);
|
|
770
|
+
const description = `Extract object${input.label ? ` "${input.label}"` : ''} from image`;
|
|
771
|
+
return executeOrGenerate(code, description, options, 'pinepaper_extract_object');
|
|
772
|
+
}
|
|
773
|
+
case 'pinepaper_arrange': {
|
|
774
|
+
const input = ArrangeInputSchema.parse(args);
|
|
775
|
+
const code = codeGenerator.generateArrange(input);
|
|
776
|
+
const description = `Arrange ${input.itemId}: ${input.action}`;
|
|
777
|
+
return executeOrGenerate(code, description, options, 'pinepaper_arrange');
|
|
778
|
+
}
|
|
779
|
+
case 'pinepaper_validate_scene': {
|
|
780
|
+
const input = ValidateSceneInputSchema.parse(args);
|
|
781
|
+
const code = codeGenerator.generateValidateScene(input);
|
|
782
|
+
const description = input.ops ? `Pre-validate ${input.ops.length} proposed op(s)` : 'Audit the live scene';
|
|
783
|
+
return executeOrGenerate(code, description, options, 'pinepaper_validate_scene');
|
|
784
|
+
}
|
|
785
|
+
case 'pinepaper_capture_frames': {
|
|
786
|
+
const input = CaptureFramesInputSchema.parse(args);
|
|
787
|
+
const code = codeGenerator.generateCaptureFrames(input);
|
|
788
|
+
const description = `Deterministic capture of ${input.times.length} frame(s)`;
|
|
789
|
+
return executeOrGenerate(code, description, options, 'pinepaper_capture_frames');
|
|
790
|
+
}
|
|
791
|
+
case 'pinepaper_instantiate_ontology': {
|
|
792
|
+
const input = InstantiateOntologyInputSchema.parse(args);
|
|
793
|
+
const code = codeGenerator.generateInstantiateOntology(input);
|
|
794
|
+
return executeOrGenerate(code, 'Instantiate ontology → scene', options, 'pinepaper_instantiate_ontology');
|
|
795
|
+
}
|
|
796
|
+
case 'pinepaper_lint_scene': {
|
|
797
|
+
const input = LintSceneInputSchema.parse(args);
|
|
798
|
+
const code = codeGenerator.generateLintScene(input);
|
|
799
|
+
return executeOrGenerate(code, 'Lint scene (relational density)', options, 'pinepaper_lint_scene');
|
|
800
|
+
}
|
|
801
|
+
case 'pinepaper_media': {
|
|
802
|
+
const input = MediaInputSchema.parse(args);
|
|
803
|
+
const code = codeGenerator.generateMedia(input);
|
|
804
|
+
return executeOrGenerate(code, `Media: ${input.action}`, options, 'pinepaper_media');
|
|
805
|
+
}
|
|
806
|
+
case 'pinepaper_crop_image': {
|
|
807
|
+
const input = CropImageInputSchema.parse(args);
|
|
808
|
+
const code = codeGenerator.generateCropImage(input);
|
|
809
|
+
return executeOrGenerate(code, `Crop image ${input.itemId}`, options, 'pinepaper_crop_image');
|
|
810
|
+
}
|
|
811
|
+
case 'pinepaper_chroma_key': {
|
|
812
|
+
const input = ChromaKeyInputSchema.parse(args);
|
|
813
|
+
const code = codeGenerator.generateChromaKey(input);
|
|
814
|
+
return executeOrGenerate(code, `Chroma-key image ${input.itemId}`, options, 'pinepaper_chroma_key');
|
|
815
|
+
}
|
|
816
|
+
case 'pinepaper_rigging': {
|
|
817
|
+
const input = RiggingInputSchema.parse(args);
|
|
818
|
+
const code = codeGenerator.generateRigging(input);
|
|
819
|
+
return executeOrGenerate(code, `Rigging: ${input.action}`, options, 'pinepaper_rigging');
|
|
820
|
+
}
|
|
700
821
|
// -----------------------------------------------------------------------
|
|
701
822
|
// RELATION TOOLS
|
|
702
823
|
// -----------------------------------------------------------------------
|
|
@@ -753,7 +874,7 @@ async function handleToolCallInner(toolName, args, options, tracker, baseTimerId
|
|
|
753
874
|
}
|
|
754
875
|
case 'pinepaper_play_timeline': {
|
|
755
876
|
const input = PlayTimelineInputSchema.parse(args);
|
|
756
|
-
const code = codeGenerator.generatePlayTimeline(input.action, input.duration, input.loop, input.time);
|
|
877
|
+
const code = codeGenerator.generatePlayTimeline(input.action, input.duration, input.loop, input.time, input.deterministic);
|
|
757
878
|
return executeOrGenerate(code, `Timeline action: ${input.action}`, options, 'pinepaper_play_timeline');
|
|
758
879
|
}
|
|
759
880
|
// -----------------------------------------------------------------------
|
|
@@ -1784,6 +1905,15 @@ You can now start creating new items on a clean canvas.`,
|
|
|
1784
1905
|
'pinepaper_batch_create',
|
|
1785
1906
|
'pinepaper_batch_modify',
|
|
1786
1907
|
'pinepaper_create_grid',
|
|
1908
|
+
'pinepaper_geometry',
|
|
1909
|
+
'pinepaper_construction_sequence',
|
|
1910
|
+
'pinepaper_group',
|
|
1911
|
+
'pinepaper_camera_director',
|
|
1912
|
+
'pinepaper_detect_objects',
|
|
1913
|
+
'pinepaper_extract_object',
|
|
1914
|
+
'pinepaper_arrange',
|
|
1915
|
+
'pinepaper_validate_scene',
|
|
1916
|
+
'pinepaper_capture_frames',
|
|
1787
1917
|
'pinepaper_add_relation',
|
|
1788
1918
|
'pinepaper_remove_relation',
|
|
1789
1919
|
'pinepaper_query_relations',
|
|
@@ -1850,11 +1980,12 @@ You can now start creating new items on a clean canvas.`,
|
|
|
1850
1980
|
// Letter collage tools
|
|
1851
1981
|
'pinepaper_create_letter_collage',
|
|
1852
1982
|
'pinepaper_animate_letter_collage',
|
|
1853
|
-
// Map tools (
|
|
1983
|
+
// Map tools (5 action-dispatched)
|
|
1854
1984
|
'pinepaper_map',
|
|
1855
1985
|
'pinepaper_map_regions',
|
|
1856
1986
|
'pinepaper_map_animation',
|
|
1857
1987
|
'pinepaper_map_data',
|
|
1988
|
+
'pinepaper_globe',
|
|
1858
1989
|
// Font tools
|
|
1859
1990
|
'pinepaper_font',
|
|
1860
1991
|
// Image import tools
|