@1agh/maude 0.58.1 → 0.58.3
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/apps/studio/.ai/cache/_stats.json +1 -1
- package/apps/studio/acp/bridge.ts +165 -15
- package/apps/studio/annotations-bindings.ts +83 -4
- package/apps/studio/api.ts +6 -1
- package/apps/studio/bin/_fetch-asset.mjs +169 -5
- package/apps/studio/bin/_import-asset.mjs +72 -0
- package/apps/studio/bin/_import-figma.mjs +1121 -0
- package/apps/studio/bin/_video-playwright.mjs +86 -3
- package/apps/studio/bin/import-figma.sh +38 -0
- package/apps/studio/bin/read-annotations.mjs +11 -1
- package/apps/studio/bun.lock +16 -22
- package/apps/studio/canvas-edit.ts +29 -5
- package/apps/studio/client/app.jsx +129 -23
- package/apps/studio/client/export-center.jsx +42 -4
- package/apps/studio/client/panels/ChatPanel.jsx +25 -2
- package/apps/studio/client/panels/CloudBar.jsx +92 -1
- package/apps/studio/client/panels/FigmaImportPanel.jsx +264 -0
- package/apps/studio/client/panels/GitPanel.jsx +26 -6
- package/apps/studio/client/panels/SettingsPanel.jsx +181 -0
- package/apps/studio/client/panels/SetupChecklist.jsx +26 -2
- package/apps/studio/client/panels/TimelinePanel.jsx +2 -2
- package/apps/studio/client/panels/timeline-parse.js +3 -3
- package/apps/studio/client/styles/3-shell-maude.css +7 -0
- package/apps/studio/client/styles/4-components.css +134 -0
- package/apps/studio/client/styles/6-acp-chat.css +12 -0
- package/apps/studio/clip-ops.ts +93 -17
- package/apps/studio/cloud/endpoints.ts +78 -10
- package/apps/studio/cloud/renew.ts +183 -0
- package/apps/studio/context.ts +2 -1
- package/apps/studio/dist/client.bundle.js +1491 -1491
- package/apps/studio/dist/runtime/@remotion_media.js +56 -136
- package/apps/studio/dist/runtime/@remotion_player.js +18 -18
- package/apps/studio/dist/runtime/@remotion_transitions.js +9 -9
- package/apps/studio/dist/runtime/@remotion_transitions_clock-wipe.js +1 -1
- package/apps/studio/dist/runtime/remotion.js +12 -12
- package/apps/studio/dist/styles.css +1 -1
- package/apps/studio/exporters/_browser-bundles.ts +20 -6
- package/apps/studio/exporters/_runtime.ts +19 -0
- package/apps/studio/exporters/degraded.ts +92 -0
- package/apps/studio/exporters/index.ts +5 -0
- package/apps/studio/exporters/jobs.ts +19 -0
- package/apps/studio/exporters/unsupported-media.ts +170 -0
- package/apps/studio/exporters/video-encode-lib.ts +27 -1
- package/apps/studio/exporters/video-render-lib.ts +6 -0
- package/apps/studio/exporters/video.ts +62 -1
- package/apps/studio/figma/assets.test.ts +372 -0
- package/apps/studio/figma/assets.ts +398 -0
- package/apps/studio/figma/client.test.ts +395 -0
- package/apps/studio/figma/client.ts +513 -0
- package/apps/studio/figma/comments-to-strokes.test.ts +194 -0
- package/apps/studio/figma/comments-to-strokes.ts +173 -0
- package/apps/studio/figma/endpoints.ts +200 -0
- package/apps/studio/figma/sanitize.test.ts +256 -0
- package/apps/studio/figma/sanitize.ts +315 -0
- package/apps/studio/figma/style-map.ts +352 -0
- package/apps/studio/figma/to-artboard.test.ts +808 -0
- package/apps/studio/figma/to-artboard.ts +701 -0
- package/apps/studio/figma/to-render.test.ts +180 -0
- package/apps/studio/figma/to-render.ts +306 -0
- package/apps/studio/figma/to-strokes-roundtrip.test.ts +152 -0
- package/apps/studio/figma/to-strokes.test.ts +705 -0
- package/apps/studio/figma/to-strokes.ts +749 -0
- package/apps/studio/figma/to-tokens.test.ts +321 -0
- package/apps/studio/figma/to-tokens.ts +305 -0
- package/apps/studio/figma/types.ts +539 -0
- package/apps/studio/figma/url.test.ts +167 -0
- package/apps/studio/figma/url.ts +160 -0
- package/apps/studio/http.ts +129 -0
- package/apps/studio/sync/asset-push.ts +124 -0
- package/apps/studio/sync/canvas-path.ts +329 -0
- package/apps/studio/sync/codec.ts +42 -0
- package/apps/studio/sync/connection-state.ts +11 -0
- package/apps/studio/sync/hub-link.ts +63 -7
- package/apps/studio/sync/hubs-config.ts +31 -3
- package/apps/studio/sync/index.ts +755 -32
- package/apps/studio/sync/migrate-flat-fallback.ts +121 -0
- package/apps/studio/sync/presentation.ts +45 -1
- package/apps/studio/sync/projection.ts +11 -1
- package/apps/studio/sync/remote-docs.ts +122 -15
- package/apps/studio/sync/supervisor.ts +5 -1
- package/apps/studio/sync/workspace-signin.ts +7 -3
- package/apps/studio/test/acp-bridge-lifetime.test.ts +106 -0
- package/apps/studio/test/annotations-bindings.test.ts +150 -12
- package/apps/studio/test/canvas-create-api.test.ts +4 -1
- package/apps/studio/test/canvas-origin-gate.test.ts +13 -0
- package/apps/studio/test/capture-determinism-shape.test.ts +135 -0
- package/apps/studio/test/clip-addressing.test.ts +6 -1
- package/apps/studio/test/clip-ops.test.ts +5 -1
- package/apps/studio/test/cloud-endpoints.test.ts +96 -0
- package/apps/studio/test/cloud-renew.test.ts +205 -0
- package/apps/studio/test/cloud-shell-surfaces.test.ts +11 -2
- package/apps/studio/test/comment-relay-origin-gate.test.ts +117 -0
- package/apps/studio/test/comments-fs-rebroadcast.test.ts +155 -0
- package/apps/studio/test/exporters/degraded-propagation.test.ts +123 -0
- package/apps/studio/test/exporters/unsupported-media.test.ts +123 -0
- package/apps/studio/test/fetch-asset-gate.test.ts +189 -0
- package/apps/studio/test/figma-provenance.test.ts +108 -0
- package/apps/studio/test/figma-routes.test.ts +294 -0
- package/apps/studio/test/fixtures/mock-acp-agent-wedged.mjs +37 -0
- package/apps/studio/test/git-cloud-posture.test.ts +50 -0
- package/apps/studio/test/hub-link.test.ts +11 -0
- package/apps/studio/test/import-figma.test.ts +479 -0
- package/apps/studio/test/sync-asset-push.test.ts +124 -0
- package/apps/studio/test/sync-canvas-path.test.ts +200 -0
- package/apps/studio/test/sync-connection-state.test.ts +13 -0
- package/apps/studio/test/sync-hubs-config.test.ts +5 -0
- package/apps/studio/test/sync-migrate-flat-fallback.test.ts +98 -0
- package/apps/studio/test/sync-path-pull.test.ts +465 -0
- package/apps/studio/test/sync-presentation.test.ts +77 -0
- package/apps/studio/test/sync-remote-docs.test.ts +55 -3
- package/apps/studio/test/sync-runtime.test.ts +434 -1
- package/apps/studio/test/video-comp.test.ts +23 -1
- package/apps/studio/test/workspace-containment.test.ts +1 -0
- package/apps/studio/video-comp.tsx +70 -6
- package/apps/studio/whats-new.json +36 -0
- package/apps/studio/workspace-mode.ts +4 -0
- package/cli/commands/design.mjs +8 -0
- package/package.json +8 -8
- package/plugins/flow/.claude-plugin/config.schema.json +3 -3
|
@@ -623,6 +623,78 @@ export async function importSvg(svgText, { root, designRootRel = '.design' }) {
|
|
|
623
623
|
* only the rasterize step is blocked, so this fails loud there rather than
|
|
624
624
|
* pretending the whole pipeline is unavailable.
|
|
625
625
|
*/
|
|
626
|
+
|
|
627
|
+
/**
|
|
628
|
+
* The execution canary for MANY sanitized SVGs, in ONE browser session.
|
|
629
|
+
*
|
|
630
|
+
* Same coverage as `runSvgExecutionCanary`, same probe, same hard network
|
|
631
|
+
* denial, same directly-navigated document — the only thing that changes is
|
|
632
|
+
* that the session is created once instead of once per file.
|
|
633
|
+
*
|
|
634
|
+
* Why it exists: measured on a real 6-page product file, a per-file canary cost
|
|
635
|
+
* ~4.5 s each, so a normal design system's icon set (530 distinct vector
|
|
636
|
+
* renders after component dedupe) would have taken ~40 minutes and forced the
|
|
637
|
+
* import to drop most of its artwork against an asset-count cap. The canary is
|
|
638
|
+
* not what needed relaxing — the session-per-file was.
|
|
639
|
+
*
|
|
640
|
+
* Returns the set of indices that TRIPPED, so the caller refuses exactly those
|
|
641
|
+
* and keeps the rest. A tripped canary is still a hard refusal for that file.
|
|
642
|
+
*/
|
|
643
|
+
export async function runSvgExecutionCanaryBatch(sanitizedSvgs, { timeoutMs = 15_000 } = {}) {
|
|
644
|
+
const tripped = new Set();
|
|
645
|
+
if (sanitizedSvgs.length === 0) return tripped;
|
|
646
|
+
const dir = mkdtempSync(join(tmpdir(), 'maude-import-svg-batch-'));
|
|
647
|
+
const probePath = join(dir, 'probe.js');
|
|
648
|
+
try {
|
|
649
|
+
writeFileSync(probePath, 'window.__MAUDE_IMPORT_CANARY__ = false;\n');
|
|
650
|
+
const paths = sanitizedSvgs.map((svg, i) => {
|
|
651
|
+
const p = join(dir, `candidate-${i}.svg`);
|
|
652
|
+
writeFileSync(p, svg);
|
|
653
|
+
return p;
|
|
654
|
+
});
|
|
655
|
+
await withSandboxedRender(
|
|
656
|
+
async (session) => {
|
|
657
|
+
for (let i = 0; i < paths.length; i += 1) {
|
|
658
|
+
session.open(pathToFileURL(paths[i]).href);
|
|
659
|
+
// The probe re-runs on EVERY navigation in this session (it is
|
|
660
|
+
// registered as an init script), so the flag is per-document — a
|
|
661
|
+
// clean file after a tripped one still reads false.
|
|
662
|
+
if (session.eval('window.__MAUDE_IMPORT_CANARY__ === true').trim() === 'true') {
|
|
663
|
+
tripped.add(i);
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
},
|
|
667
|
+
{ timeoutMs, initScriptPath: probePath }
|
|
668
|
+
);
|
|
669
|
+
} finally {
|
|
670
|
+
rmSync(dir, { recursive: true, force: true });
|
|
671
|
+
}
|
|
672
|
+
return tripped;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
/**
|
|
676
|
+
* Sanitize + canary + write MANY SVGs. The batched counterpart of `importSvg`.
|
|
677
|
+
* Returns one result per input, or `null` where the file was refused.
|
|
678
|
+
*/
|
|
679
|
+
export async function importSvgBatch(svgTexts, { root, designRootRel = '.design' }) {
|
|
680
|
+
const sanitized = svgTexts.map((t) => {
|
|
681
|
+
try {
|
|
682
|
+
return sanitizeSvgAllowlist(t);
|
|
683
|
+
} catch {
|
|
684
|
+
return null;
|
|
685
|
+
}
|
|
686
|
+
});
|
|
687
|
+
const live = [];
|
|
688
|
+
for (let i = 0; i < sanitized.length; i += 1) if (sanitized[i] !== null) live.push(i);
|
|
689
|
+
|
|
690
|
+
const tripped = await runSvgExecutionCanaryBatch(live.map((i) => sanitized[i]));
|
|
691
|
+
return sanitized.map((svg, i) => {
|
|
692
|
+
if (svg === null) return null;
|
|
693
|
+
if (tripped.has(live.indexOf(i))) return null;
|
|
694
|
+
return writeContainedAsset(root, designRootRel, Buffer.from(svg, 'utf8'), 'svg');
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
|
|
626
698
|
export async function importPdf(inputPath, { root, designRootRel = '.design' }) {
|
|
627
699
|
const buffer = readPdfCapped(inputPath);
|
|
628
700
|
const pageCount = await getPdfPageCountIsolated(buffer);
|