@lumenkey/cli 0.3.0 → 0.4.0-rc.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 +51 -2
- package/dist/cli/copied.js +86 -85
- package/dist/cli/index.js +56 -44
- package/dist/cli/render.js +5 -1
- package/dist/core/asset-stream.d.ts +16 -0
- package/dist/core/asset-stream.js +64 -0
- package/dist/core/atomic-config-file.js +8 -7
- package/dist/core/chinese-messages.d.ts +4 -0
- package/dist/core/chinese-messages.js +907 -0
- package/dist/core/chinese-script.d.ts +7 -0
- package/dist/core/chinese-script.js +28 -0
- package/dist/core/client.js +2 -1
- package/dist/core/config-dir.js +2 -1
- package/dist/core/config.js +7 -6
- package/dist/core/download-root.d.ts +5 -0
- package/dist/core/download-root.js +64 -0
- package/dist/core/download.js +15 -12
- package/dist/core/generation-input.js +3 -2
- package/dist/core/generation.d.ts +8 -1
- package/dist/core/generation.js +13 -10
- package/dist/core/job-display.js +7 -6
- package/dist/core/locale.d.ts +2 -0
- package/dist/core/locale.js +172 -142
- package/dist/core/outcome.d.ts +6 -0
- package/dist/core/outcome.js +17 -4
- package/dist/core/output-path.d.ts +3 -1
- package/dist/core/output-path.js +5 -2
- package/dist/core/params.js +26 -25
- package/dist/core/profiles.js +5 -4
- package/dist/core/set-values.d.ts +0 -1
- package/dist/core/set-values.js +7 -7
- package/dist/core/submission-journal.js +43 -17
- package/dist/core/version.js +2 -3
- package/dist/mcp/server.js +30 -29
- package/dist/studio/asset-integrity-hash.d.ts +28 -0
- package/dist/studio/asset-integrity-hash.js +93 -0
- package/dist/studio/asset-integrity-queue.d.ts +24 -0
- package/dist/studio/asset-integrity-queue.js +94 -0
- package/dist/studio/asset-store.d.ts +52 -0
- package/dist/studio/asset-store.js +352 -0
- package/dist/studio/canvas/LICENSES.txt +1590 -0
- package/dist/studio/canvas/dependencies.json +862 -0
- package/dist/studio/canvas/director-source-manifest.json +47 -0
- package/dist/studio/canvas/editor.css +239 -0
- package/dist/studio/canvas/editor.js +4613 -0
- package/dist/studio/canvas/integration-source-manifest.json +384 -0
- package/dist/studio/canvas/source-manifest.json +240 -0
- package/dist/studio/canvas-store.d.ts +1254 -0
- package/dist/studio/canvas-store.js +205 -0
- package/dist/studio/capture-placement.d.ts +11 -0
- package/dist/studio/capture-placement.js +85 -0
- package/dist/studio/cloud-contract.d.ts +128 -0
- package/dist/studio/cloud-contract.js +229 -0
- package/dist/studio/cloud-service.d.ts +178 -0
- package/dist/studio/cloud-service.js +202 -0
- package/dist/studio/director-captures.d.ts +59 -0
- package/dist/studio/director-captures.js +141 -0
- package/dist/studio/director-contract.d.ts +1489 -0
- package/dist/studio/director-contract.js +288 -0
- package/dist/studio/director-png.d.ts +6 -0
- package/dist/studio/director-png.js +41 -0
- package/dist/studio/director-relations.d.ts +40 -0
- package/dist/studio/director-relations.js +103 -0
- package/dist/studio/document-authority.d.ts +7 -0
- package/dist/studio/document-authority.js +50 -0
- package/dist/studio/draft-store.d.ts +95 -0
- package/dist/studio/draft-store.js +100 -0
- package/dist/studio/errors.d.ts +85 -0
- package/dist/studio/errors.js +94 -0
- package/dist/studio/launch.d.ts +5 -0
- package/dist/studio/launch.js +31 -0
- package/dist/studio/media.d.ts +9 -0
- package/dist/studio/media.js +50 -0
- package/dist/studio/output-save-contract.d.ts +1321 -0
- package/dist/studio/output-save-contract.js +26 -0
- package/dist/studio/output-save-journal.d.ts +971 -0
- package/dist/studio/output-save-journal.js +287 -0
- package/dist/studio/output-save-recovery.d.ts +18 -0
- package/dist/studio/output-save-recovery.js +161 -0
- package/dist/studio/output-save-service.d.ts +436 -0
- package/dist/studio/output-save-service.js +251 -0
- package/dist/studio/output-save-worker.d.ts +40 -0
- package/dist/studio/output-save-worker.js +360 -0
- package/dist/studio/paths.d.ts +6 -0
- package/dist/studio/paths.js +68 -0
- package/dist/studio/run-journal.d.ts +993 -0
- package/dist/studio/run-journal.js +125 -0
- package/dist/studio/server.d.ts +17 -0
- package/dist/studio/server.js +440 -0
- package/dist/studio/session.d.ts +6 -0
- package/dist/studio/session.js +26 -0
- package/dist/studio/shell.d.ts +3 -0
- package/dist/studio/shell.js +23 -0
- package/dist/studio/style.d.ts +2 -0
- package/dist/studio/style.js +29 -0
- package/dist/studio/types.d.ts +26 -0
- package/dist/studio/types.js +2 -0
- package/dist/studio/web/app.d.ts +2 -0
- package/dist/studio/web/app.js +662 -0
- package/dist/studio/web/asset-controller.d.ts +37 -0
- package/dist/studio/web/asset-controller.js +191 -0
- package/dist/studio/web/asset-model.d.ts +29 -0
- package/dist/studio/web/asset-model.js +51 -0
- package/dist/studio/web/controller.d.ts +113 -0
- package/dist/studio/web/controller.js +401 -0
- package/dist/studio/web/messages.d.ts +2 -0
- package/dist/studio/web/messages.js +74 -0
- package/dist/studio/web/model.d.ts +75 -0
- package/dist/studio/web/model.js +182 -0
- package/dist/studio/web/save-controller.d.ts +85 -0
- package/dist/studio/web/save-controller.js +495 -0
- package/dist/studio/web/save-model.d.ts +63 -0
- package/dist/studio/web/save-model.js +64 -0
- package/dist/studio/web/save-queue.d.ts +7 -0
- package/dist/studio/web/save-queue.js +62 -0
- package/dist/studio/web/save-view.d.ts +9 -0
- package/dist/studio/web/save-view.js +19 -0
- package/dist/studio/writer-lock.d.ts +5 -0
- package/dist/studio/writer-lock.js +88 -0
- package/package.json +11 -5
- package/dist/cli/copied.d.ts.map +0 -1
- package/dist/cli/copied.js.map +0 -1
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/render.d.ts.map +0 -1
- package/dist/cli/render.js.map +0 -1
- package/dist/core/atomic-config-file.d.ts.map +0 -1
- package/dist/core/atomic-config-file.js.map +0 -1
- package/dist/core/chat.d.ts.map +0 -1
- package/dist/core/chat.js.map +0 -1
- package/dist/core/client.d.ts.map +0 -1
- package/dist/core/client.js.map +0 -1
- package/dist/core/config-dir.d.ts.map +0 -1
- package/dist/core/config-dir.js.map +0 -1
- package/dist/core/config-error.d.ts.map +0 -1
- package/dist/core/config-error.js.map +0 -1
- package/dist/core/config.d.ts.map +0 -1
- package/dist/core/config.js.map +0 -1
- package/dist/core/credit-cap.d.ts.map +0 -1
- package/dist/core/credit-cap.js.map +0 -1
- package/dist/core/download.d.ts.map +0 -1
- package/dist/core/download.js.map +0 -1
- package/dist/core/error-result.d.ts.map +0 -1
- package/dist/core/error-result.js.map +0 -1
- package/dist/core/explain.d.ts.map +0 -1
- package/dist/core/explain.js.map +0 -1
- package/dist/core/generation-input.d.ts.map +0 -1
- package/dist/core/generation-input.js.map +0 -1
- package/dist/core/generation-result.d.ts.map +0 -1
- package/dist/core/generation-result.js.map +0 -1
- package/dist/core/generation.d.ts.map +0 -1
- package/dist/core/generation.js.map +0 -1
- package/dist/core/job-display.d.ts.map +0 -1
- package/dist/core/job-display.js.map +0 -1
- package/dist/core/locale.d.ts.map +0 -1
- package/dist/core/locale.js.map +0 -1
- package/dist/core/origin.d.ts.map +0 -1
- package/dist/core/origin.js.map +0 -1
- package/dist/core/outcome.d.ts.map +0 -1
- package/dist/core/outcome.js.map +0 -1
- package/dist/core/output-path.d.ts.map +0 -1
- package/dist/core/output-path.js.map +0 -1
- package/dist/core/params.d.ts.map +0 -1
- package/dist/core/params.js.map +0 -1
- package/dist/core/poller.d.ts.map +0 -1
- package/dist/core/poller.js.map +0 -1
- package/dist/core/profiles.d.ts.map +0 -1
- package/dist/core/profiles.js.map +0 -1
- package/dist/core/set-values.d.ts.map +0 -1
- package/dist/core/set-values.js.map +0 -1
- package/dist/core/submission-journal.d.ts.map +0 -1
- package/dist/core/submission-journal.js.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/core/version.js.map +0 -1
- package/dist/core/wait.d.ts.map +0 -1
- package/dist/core/wait.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/mcp/render.d.ts.map +0 -1
- package/dist/mcp/render.js.map +0 -1
- package/dist/mcp/server.d.ts.map +0 -1
- package/dist/mcp/server.js.map +0 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Product shell; visual tokens/layout adapted from the read-only local-studio design baseline.
|
|
2
|
+
export const studioHtml = `<!doctype html>
|
|
3
|
+
<html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="studio-style-nonce" content="__STUDIO_STYLE_NONCE__"><title>LumenKey 本地工作台</title><link rel="stylesheet" href="/studio/style.css"><link rel="stylesheet" href="/studio/canvas/editor.css"></head>
|
|
4
|
+
<body><div class="app-shell">
|
|
5
|
+
<aside class="sidebar"><div class="brand"><b>光钥</b><small>LumenKey Studio · 本地</small></div>
|
|
6
|
+
<nav aria-label="工作台导航"><button data-view="create" data-mode="image" class="selected">图像创作</button><button data-view="create" data-mode="video">视频创作</button><button data-view="canvas">画布</button><button data-view="tasks">生成任务</button><button data-view="assets">本机素材</button></nav>
|
|
7
|
+
<div class="sidebar-bottom"><small>本机编辑 · 云端计算</small><button id="theme" class="quiet">切换明暗</button></div></aside>
|
|
8
|
+
<main class="workspace"><div class="runtime-header"><header class="topbar"><span>工作台 <span class="muted">/</span> <b id="crumb">图像创作</b></span><div class="top-actions"><span id="balance" class="muted">算力未知</span><button id="connect" class="quiet">连接云端</button><button id="disconnect" class="quiet" hidden>断开</button></div></header>
|
|
9
|
+
<div class="location runtime-status" aria-label="工作区状态"><div><small>保存位置</small><details id="storage-location" hidden><summary><span id="location-short"></span><span class="hint"> · 展开完整路径</span></summary><code id="location"></code></details><p id="storage-warning">正在读取保存位置…</p></div><div><small>本机授权</small><b id="local-status">正在核对本机授权…</b></div><div><small>云连接</small><b id="gateway">云端未连接</b><span id="gateway-detail" class="hint">离线可编辑;云端生成需要连接。</span></div></div></div>
|
|
10
|
+
<div class="runtime-note">先编辑内容,再查看报价。只有确认提交才会创建云端任务。</div>
|
|
11
|
+
<div class="view"><div id="error" class="error" role="alert" hidden></div><p id="notice" role="status" class="notice" hidden></p>
|
|
12
|
+
<section id="create-view"><div class="heading"><div><h1 id="title">图像创作</h1><p>描述你的想法,先查看报价,再决定是否生成。</p></div><button id="save-draft" class="quiet" disabled>保存草稿</button></div>
|
|
13
|
+
<div class="create-panel"><section class="composer"><div class="section-title"><h2>创作输入</h2><span id="draft-status" class="muted">未保存</span></div><div id="prompt-fields"></div><p class="hint">留空项按平台目录规则处理;本机文件不会自动上传。</p><p id="draft-error" class="error" hidden></p><button id="reload-draft" class="quiet" hidden>读取最新草稿版本(保留当前编辑)</button></section>
|
|
14
|
+
<aside class="settings"><h2>常用偏好</h2><label for="model">模型</label><select id="model" disabled><option value="">连接云端后加载目录</option></select><p id="catalog-status" class="hint">尚未连接</p><button id="reload-cloud" class="quiet" disabled>刷新目录与余额</button><div id="parameter-fields"></div><details id="advanced-parameters" hidden><summary>更多参数 <span class="hint">JSON 等复杂输入</span></summary><div id="advanced-fields"></div></details><div class="quote-area"><p id="quote-hint" class="hint">只报价,不会创建生成任务。</p><button id="quote" class="primary" disabled>查看报价</button></div></aside>
|
|
15
|
+
<section class="output"><div class="section-title"><h2>本次报价与结果</h2></div><div id="current-run" class="empty">填写输入并选择模型后查看报价。</div><button id="review-quote" class="primary" hidden>核对并确认生成</button></section></div></section>
|
|
16
|
+
<section id="canvas-view" hidden aria-label="本机画布"></section>
|
|
17
|
+
<section id="tasks-view" hidden><div class="heading"><div><h1>生成任务</h1><p>当前连接的本地任务记录。刷新只查询状态,不会重新下单。</p></div><button id="refresh-tasks" class="quiet">刷新任务列表</button></div><section class="save-binding" aria-label="输出保存连接"><p id="save-binding-status" role="status" class="hint"></p><code id="save-binding-path" hidden></code><button id="rebind-saves" class="quiet" disabled>重新核对保存连接</button></section><p id="tasks-status" role="status" class="hint"></p><div id="tasks"></div></section>
|
|
18
|
+
<section id="assets-view" hidden><div class="heading"><div><h1>本机素材</h1><p>这里仅显示已经写入所选目录的文件。</p></div><button id="refresh-assets" class="quiet">刷新素材</button></div><form id="save-asset" class="import"><label for="file">导入已有图片或视频</label><input id="file" type="file" accept="image/png,image/jpeg,image/webp,video/mp4,video/webm"><button id="save-asset-button" class="quiet" disabled>保存到本机目录</button></form><p id="asset-message" role="status" class="hint"></p><p id="assets-status" role="status" class="hint"></p><div id="assets" class="assets-grid"></div><p id="issues" class="error" hidden></p></section>
|
|
19
|
+
<footer>草稿和任务输入保存在本机目录,未加密。云端完成不等于已保存到本机;本地状态不证明扣费或退款。</footer></div></main></div>
|
|
20
|
+
<dialog id="confirm-dialog" aria-labelledby="confirm-title"><h2 id="confirm-title">确认本次生成</h2><p id="confirm-summary"></p><p class="hint">将使用已报价的输入。实际扣费与失败释放以平台账本为准。</p><div class="dialog-actions"><button id="cancel-confirm" class="quiet">暂不提交</button><button id="confirm" class="primary">确认提交</button></div></dialog>
|
|
21
|
+
<script type="module" src="/studio/app.js"></script></body></html>`;
|
|
22
|
+
export const studioScript = "import './web/app.js';";
|
|
23
|
+
//# sourceMappingURL=shell.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const studioStyle = "\n.asset-card .quiet{margin:12px 14px 0}.asset-card .disabled-reason{display:block;padding:8px 14px 0}.asset-card [aria-disabled=true]{cursor:not-allowed;opacity:.55}\n:root{color-scheme:dark;--bg:#0a0a0b;--shell:#0c0c0d;--panel:#101011;--panel2:#171719;--line:#28282b;--line2:#39393e;--ink:#f4f4f5;--ink2:#b4b4bc;--ink3:#9999a4;--field:#1b1b1e;--primary:#00e0ff;--primary-ink:#04252e;--sel-bg:#123037;--sel-ink:#5ee8fa;font-family:Inter,\"PingFang SC\",\"Microsoft YaHei\",system-ui,sans-serif;font-size:14px}\n[data-theme=light]{color-scheme:light;--bg:#f5f5f7;--shell:#fbfbfc;--panel:#fff;--panel2:#f0f0f3;--line:#e1e1e6;--line2:#c8c8d0;--ink:#16161a;--ink2:#53535c;--ink3:#62626f;--field:#f5f5f7;--primary:#00b3d1;--primary-ink:#03272d;--sel-bg:#d6f5fa;--sel-ink:#065d6d}\n*{box-sizing:border-box}[hidden]{display:none!important}body{margin:0;background:var(--bg);color:var(--ink)}button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer;min-height:38px}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--primary);outline-offset:3px}button,a{touch-action:manipulation}a{color:var(--sel-ink);overflow-wrap:anywhere}h1,h2,p{margin:0}h1{font-size:28px;font-weight:650;letter-spacing:-.025em}h2{font-size:16px;font-weight:600}p{line-height:1.8}.muted,.hint,small{color:var(--ink3)}.hint{font-size:12px;line-height:1.8}.app-shell{display:grid;grid-template-columns:204px minmax(0,1fr);min-height:100dvh}.sidebar{height:100dvh;position:sticky;top:0;display:flex;flex-direction:column;padding:29px 16px 22px;background:var(--shell);border-right:1px solid var(--line)}.brand{padding:0 10px 32px}.brand b{font-size:24px;letter-spacing:.12em}.brand small{display:block;margin-top:6px;font-size:11px}.sidebar nav{display:grid;gap:7px}.sidebar nav button{padding:12px 13px;border:0;border-radius:8px;background:none;text-align:left;color:var(--ink2)}.sidebar nav button:hover{background:var(--panel2)}.sidebar nav button.selected{background:var(--sel-bg);color:var(--sel-ink)}.sidebar-bottom{margin-top:auto;display:grid;gap:14px;padding:24px 10px 0;font-size:12px}.workspace{min-width:0}.topbar{min-height:70px;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 34px;border-bottom:1px solid var(--line);background:var(--shell);font-size:12px}.top-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.quiet{padding:8px 13px;border:1px solid var(--line2);border-radius:8px;background:transparent;color:var(--ink2);font-size:12px}.quiet:hover:not(:disabled){background:var(--panel2);color:var(--ink)}.primary{padding:11px 18px;border:0;border-radius:8px;background:var(--primary);color:var(--primary-ink);font-weight:650}.runtime-note{padding:10px 34px;font-size:11px;color:var(--ink3);background:var(--panel);line-height:1.6}.view{max-width:1400px;margin:auto;padding:28px 34px}.location{display:flex;justify-content:space-between;gap:20px;padding:13px 16px;border:1px solid var(--line);border-radius:9px;background:var(--panel);margin-bottom:25px;font-size:12px;overflow-wrap:anywhere}.location small{display:block;margin-bottom:6px}.location b{font-weight:500}.heading{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:22px 0}.heading p{font-size:12px;color:var(--ink3);margin-top:10px}.create-panel{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:20px}.composer,.settings,.output,.run-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:22px;min-width:0}.settings{grid-column:2;grid-row:1/span 2;display:flex;flex-direction:column;gap:12px}.output{grid-column:1;grid-row:2}.section-title{display:flex;justify-content:space-between;gap:14px;align-items:center;margin-bottom:20px}.section-title span{font-size:11px}.field{display:flex;flex-direction:column;gap:8px;margin-bottom:18px}.field label,.settings>label{font-size:12px;color:var(--ink2)}input,textarea,select{width:100%;min-width:0;background:var(--field);border:1px solid var(--line2);border-radius:7px;padding:11px 12px;line-height:1.5}textarea{min-height:100px;resize:vertical}.composer textarea{min-height:185px}.field small{font-size:11px;line-height:1.6;overflow-wrap:anywhere}.quote-area{border-top:1px solid var(--line);padding-top:18px;margin-top:auto;display:grid;gap:10px}.empty{padding:30px 8px;color:var(--ink3);font-size:13px;text-align:center;line-height:1.9}.output>.primary{margin-top:18px}.run-card{margin-bottom:14px}.run-meta{color:var(--ink3);font-size:12px;overflow-wrap:anywhere;margin:10px 0}.run-card strong{display:block;overflow-wrap:anywhere}.run-card .quiet{margin-top:12px}.run-links{display:flex;flex-direction:column;gap:10px;padding-top:10px}.error{border-left:3px solid var(--primary);background:var(--panel2);padding:12px 14px;font-size:12px;line-height:1.8;overflow-wrap:anywhere;margin-bottom:16px}.notice{font-size:12px;color:var(--sel-ink);margin-bottom:16px}.import{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;padding:20px;border:1px solid var(--line);border-radius:10px}.import label{grid-column:1/-1;font-size:13px}.assets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:18px;margin-top:20px}.asset-card{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--panel);padding-bottom:14px}.asset-card img,.asset-card video{width:100%;height:180px;object-fit:contain;background:var(--bg)}.asset-card p,.asset-card a{display:block;padding:12px 14px 0;font-size:12px;overflow-wrap:anywhere}footer{border-top:1px solid var(--line);margin-top:35px;padding:20px 0;color:var(--ink3);font-size:11px;line-height:1.8}dialog{max-width:min(490px,calc(100vw - 32px));padding:28px;background:var(--panel);color:var(--ink);border:1px solid var(--line2);border-radius:12px}dialog::backdrop{background:rgba(0,0,0,.7)}dialog h2{margin-bottom:18px}dialog p{margin-top:12px;overflow-wrap:anywhere}.dialog-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}\n@media(max-width:1000px){.app-shell{grid-template-columns:164px minmax(0,1fr)}.view{padding:24px}.topbar{padding:14px 24px}.create-panel{grid-template-columns:minmax(0,1fr) 230px;gap:14px}.composer,.settings,.output{padding:18px}}\n@media(max-width:740px){.app-shell{display:block}.sidebar{position:static;height:auto;padding:8px;border-right:0;border-bottom:1px solid var(--line)}.brand,.sidebar-bottom{display:none}.sidebar nav{display:flex;gap:4px}.sidebar nav button{flex:1;padding:10px 5px;text-align:center;font-size:12px}.topbar{padding:12px 16px;align-items:flex-start;flex-direction:column}.runtime-note{padding:10px 16px}.view{padding:20px 16px}.location{flex-direction:column;gap:10px}.create-panel{grid-template-columns:1fr}.settings,.output{grid-column:1;grid-row:auto}.heading{align-items:flex-start}h1{font-size:24px}.import{grid-template-columns:1fr}.assets-grid{grid-template-columns:1fr 1fr}.asset-card img,.asset-card video{height:140px}}\n@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}\n.workspace.canvas-mode{height:100dvh;display:flex;flex-direction:column;min-height:0}.canvas-mode .runtime-note,.canvas-mode .view>footer{display:none}.canvas-mode .view{max-width:none;width:100%;margin:0;padding:0;flex:1;min-height:0;display:flex;flex-direction:column;overflow:clip}.canvas-mode .location{border:0;border-radius:0;border-bottom:1px solid var(--line);padding:4px 14px;margin:0;flex:none;font-size:10px}.canvas-mode .location small{display:none}.canvas-mode .view>#error,.canvas-mode .view>#notice{flex:none;margin:0}#canvas-view{flex:1;min-height:0;min-width:0}.canvas-mode .topbar{flex:none}\n@media(max-width:740px){.workspace.canvas-mode{height:calc(100dvh - 58px)}.sidebar-bottom{display:block;padding:0 6px}.sidebar-bottom>:not(#theme){display:none}.sidebar-bottom #theme{position:absolute;right:8px;top:65px;z-index:10}.canvas-mode .topbar{min-height:76px;padding-right:100px}.canvas-mode .location{max-height:46px;overflow:auto}}\n\n/* Global journey: three distinct facts stay visible while content scrolls. */\n.topbar{position:sticky;top:0;z-index:20}.runtime-status{position:sticky;top:70px;z-index:19;display:grid;grid-template-columns:minmax(0,1.4fr) minmax(120px,.65fr) minmax(0,1fr);gap:18px;margin:0;padding:12px 34px;border:0;border-bottom:1px solid var(--line);border-radius:0;background:var(--shell)}.runtime-status>div{min-width:0}.runtime-status b{display:block;font-weight:500}.runtime-status small{margin:0 0 4px}.runtime-status summary{cursor:pointer;overflow-wrap:anywhere}.runtime-status code{display:block;padding-top:8px;overflow-wrap:anywhere;white-space:normal;font:inherit;color:var(--ink2)}.runtime-status #gateway-detail{display:block;overflow-wrap:anywhere}.runtime-status p{line-height:1.6}.runtime-status details[open] summary .hint{font-size:0}.runtime-status details[open] summary .hint::after{content:' \u00B7 \u6536\u8D77\u5B8C\u6574\u8DEF\u5F84';font-size:12px}\n.runtime-note{background:none;padding-top:12px;padding-bottom:0}.view{padding-top:8px}.heading{margin:18px 0}.heading>div{min-width:0}.heading>button{flex:none}.create-panel{align-items:start}.composer,.settings,.output{padding:20px}.settings{gap:10px}.settings h2{margin-bottom:4px}.settings>details{border-top:1px solid var(--line);padding-top:12px}.settings>details>summary{cursor:pointer;font-size:13px;line-height:1.7}.settings>details>summary .hint{display:block}.settings>details[open]>summary{margin-bottom:14px}.settings textarea{min-height:100px}.disabled-reason{display:block;max-width:48ch;font-size:11px;line-height:1.6;color:var(--ink2)}.top-actions{max-width:65%;gap:8px}.top-actions .disabled-reason{flex-basis:100%;text-align:right}.heading>.disabled-reason{max-width:210px}.quote-area .disabled-reason{margin:0}.field label{line-height:1.6}.output .run-card{border:0;padding:0}.error{border:1px solid var(--line2);border-radius:8px}.runtime-status :is(summary,code):focus-visible,summary:focus-visible{outline:2px solid var(--primary);outline-offset:3px}\n.canvas-mode .runtime-status{max-height:none;overflow:visible;flex:none;top:auto;padding:6px 14px}.canvas-mode .runtime-status small{display:block;font-size:10px}.canvas-mode .topbar{position:static}.canvas-mode .runtime-status{position:relative}\n@media(max-width:1100px){.runtime-status{padding:10px 24px;gap:12px;grid-template-columns:minmax(0,1.2fr) minmax(110px,.65fr) minmax(0,1fr)}.topbar{padding:12px 24px;min-height:70px}.create-panel{grid-template-columns:minmax(0,1fr) 250px;gap:14px}.heading{flex-wrap:wrap}.heading>.disabled-reason{flex-basis:100%;max-width:none}}\n@media(max-width:740px){.topbar{position:relative;top:auto}.runtime-status{position:relative;top:auto;grid-template-columns:1fr;padding:12px 16px;gap:10px}.top-actions{max-width:none}.top-actions .disabled-reason{text-align:left}.create-panel{grid-template-columns:1fr}.sidebar nav{flex-wrap:wrap}.sidebar nav button{flex:1 0 28%}}\n.runtime-header{position:sticky;top:0;z-index:20}.runtime-header .topbar,.runtime-header .runtime-status{position:static}.canvas-mode .runtime-header{position:relative;flex:none}\n@media(max-width:740px){.runtime-header{position:relative}}\n\n/* Compact persistent facts; successful connection is not a disabled action. */\n.runtime-header .topbar{min-height:58px;padding:10px 24px;gap:12px}.runtime-header .top-actions{max-width:70%;flex-wrap:nowrap}.runtime-header .top-actions .disabled-reason{flex-basis:auto;max-width:160px;text-align:left}.runtime-header .runtime-status{padding:8px 24px;gap:16px;font-size:12px;align-items:start}.runtime-status>div{display:flex;align-items:baseline;gap:8px;min-width:0}.runtime-status small{flex:none;white-space:nowrap;font-size:11px;margin:0}.runtime-status details{min-width:0;flex:1}.runtime-status summary{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.runtime-status #storage-warning{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:18px}.runtime-status #gateway-detail{display:none}.runtime-status b{font-size:12px;line-height:18px}.primary:disabled{background:var(--panel2);color:var(--ink2);border:1px solid var(--line2);opacity:1;cursor:not-allowed}\n@media(max-width:740px){.runtime-header .topbar{padding:10px 16px}.runtime-header .top-actions{max-width:100%;flex-wrap:wrap}.runtime-header .runtime-status{padding:10px 16px;gap:8px}}\n.runtime-status b,.runtime-status #storage-warning{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n.save-binding{padding:14px 0 20px;display:flex;flex-wrap:wrap;align-items:center;gap:10px}.save-binding p{margin:0}.save-binding code{flex-basis:100%;overflow-wrap:anywhere;white-space:normal;color:var(--ink2)}.output-list{margin-top:16px;padding-top:12px;border-top:1px solid var(--line2)}.output-record{margin:12px 0;padding:12px;border-radius:8px;background:var(--panel2)}.output-record p{margin:6px 0}.output-list button{margin:6px 8px 0 0}\n.saved-path{display:block;overflow-wrap:anywhere;white-space:normal;line-height:1.6}.output-record details{margin:12px 0}.output-record summary{cursor:pointer;overflow-wrap:anywhere}.save-progress{font-variant-numeric:tabular-nums}.save-status{font-weight:600}\n";
|
|
2
|
+
//# sourceMappingURL=style.d.ts.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Neutral/cyan palette and composer layout from design/local-studio/studio.css.
|
|
2
|
+
export const studioStyle = `
|
|
3
|
+
.asset-card .quiet{margin:12px 14px 0}.asset-card .disabled-reason{display:block;padding:8px 14px 0}.asset-card [aria-disabled=true]{cursor:not-allowed;opacity:.55}
|
|
4
|
+
:root{color-scheme:dark;--bg:#0a0a0b;--shell:#0c0c0d;--panel:#101011;--panel2:#171719;--line:#28282b;--line2:#39393e;--ink:#f4f4f5;--ink2:#b4b4bc;--ink3:#9999a4;--field:#1b1b1e;--primary:#00e0ff;--primary-ink:#04252e;--sel-bg:#123037;--sel-ink:#5ee8fa;font-family:Inter,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;font-size:14px}
|
|
5
|
+
[data-theme=light]{color-scheme:light;--bg:#f5f5f7;--shell:#fbfbfc;--panel:#fff;--panel2:#f0f0f3;--line:#e1e1e6;--line2:#c8c8d0;--ink:#16161a;--ink2:#53535c;--ink3:#62626f;--field:#f5f5f7;--primary:#00b3d1;--primary-ink:#03272d;--sel-bg:#d6f5fa;--sel-ink:#065d6d}
|
|
6
|
+
*{box-sizing:border-box}[hidden]{display:none!important}body{margin:0;background:var(--bg);color:var(--ink)}button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer;min-height:38px}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--primary);outline-offset:3px}button,a{touch-action:manipulation}a{color:var(--sel-ink);overflow-wrap:anywhere}h1,h2,p{margin:0}h1{font-size:28px;font-weight:650;letter-spacing:-.025em}h2{font-size:16px;font-weight:600}p{line-height:1.8}.muted,.hint,small{color:var(--ink3)}.hint{font-size:12px;line-height:1.8}.app-shell{display:grid;grid-template-columns:204px minmax(0,1fr);min-height:100dvh}.sidebar{height:100dvh;position:sticky;top:0;display:flex;flex-direction:column;padding:29px 16px 22px;background:var(--shell);border-right:1px solid var(--line)}.brand{padding:0 10px 32px}.brand b{font-size:24px;letter-spacing:.12em}.brand small{display:block;margin-top:6px;font-size:11px}.sidebar nav{display:grid;gap:7px}.sidebar nav button{padding:12px 13px;border:0;border-radius:8px;background:none;text-align:left;color:var(--ink2)}.sidebar nav button:hover{background:var(--panel2)}.sidebar nav button.selected{background:var(--sel-bg);color:var(--sel-ink)}.sidebar-bottom{margin-top:auto;display:grid;gap:14px;padding:24px 10px 0;font-size:12px}.workspace{min-width:0}.topbar{min-height:70px;display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 34px;border-bottom:1px solid var(--line);background:var(--shell);font-size:12px}.top-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.quiet{padding:8px 13px;border:1px solid var(--line2);border-radius:8px;background:transparent;color:var(--ink2);font-size:12px}.quiet:hover:not(:disabled){background:var(--panel2);color:var(--ink)}.primary{padding:11px 18px;border:0;border-radius:8px;background:var(--primary);color:var(--primary-ink);font-weight:650}.runtime-note{padding:10px 34px;font-size:11px;color:var(--ink3);background:var(--panel);line-height:1.6}.view{max-width:1400px;margin:auto;padding:28px 34px}.location{display:flex;justify-content:space-between;gap:20px;padding:13px 16px;border:1px solid var(--line);border-radius:9px;background:var(--panel);margin-bottom:25px;font-size:12px;overflow-wrap:anywhere}.location small{display:block;margin-bottom:6px}.location b{font-weight:500}.heading{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:22px 0}.heading p{font-size:12px;color:var(--ink3);margin-top:10px}.create-panel{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:20px}.composer,.settings,.output,.run-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:22px;min-width:0}.settings{grid-column:2;grid-row:1/span 2;display:flex;flex-direction:column;gap:12px}.output{grid-column:1;grid-row:2}.section-title{display:flex;justify-content:space-between;gap:14px;align-items:center;margin-bottom:20px}.section-title span{font-size:11px}.field{display:flex;flex-direction:column;gap:8px;margin-bottom:18px}.field label,.settings>label{font-size:12px;color:var(--ink2)}input,textarea,select{width:100%;min-width:0;background:var(--field);border:1px solid var(--line2);border-radius:7px;padding:11px 12px;line-height:1.5}textarea{min-height:100px;resize:vertical}.composer textarea{min-height:185px}.field small{font-size:11px;line-height:1.6;overflow-wrap:anywhere}.quote-area{border-top:1px solid var(--line);padding-top:18px;margin-top:auto;display:grid;gap:10px}.empty{padding:30px 8px;color:var(--ink3);font-size:13px;text-align:center;line-height:1.9}.output>.primary{margin-top:18px}.run-card{margin-bottom:14px}.run-meta{color:var(--ink3);font-size:12px;overflow-wrap:anywhere;margin:10px 0}.run-card strong{display:block;overflow-wrap:anywhere}.run-card .quiet{margin-top:12px}.run-links{display:flex;flex-direction:column;gap:10px;padding-top:10px}.error{border-left:3px solid var(--primary);background:var(--panel2);padding:12px 14px;font-size:12px;line-height:1.8;overflow-wrap:anywhere;margin-bottom:16px}.notice{font-size:12px;color:var(--sel-ink);margin-bottom:16px}.import{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;padding:20px;border:1px solid var(--line);border-radius:10px}.import label{grid-column:1/-1;font-size:13px}.assets-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:18px;margin-top:20px}.asset-card{border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--panel);padding-bottom:14px}.asset-card img,.asset-card video{width:100%;height:180px;object-fit:contain;background:var(--bg)}.asset-card p,.asset-card a{display:block;padding:12px 14px 0;font-size:12px;overflow-wrap:anywhere}footer{border-top:1px solid var(--line);margin-top:35px;padding:20px 0;color:var(--ink3);font-size:11px;line-height:1.8}dialog{max-width:min(490px,calc(100vw - 32px));padding:28px;background:var(--panel);color:var(--ink);border:1px solid var(--line2);border-radius:12px}dialog::backdrop{background:rgba(0,0,0,.7)}dialog h2{margin-bottom:18px}dialog p{margin-top:12px;overflow-wrap:anywhere}.dialog-actions{display:flex;justify-content:flex-end;gap:12px;margin-top:24px}
|
|
7
|
+
@media(max-width:1000px){.app-shell{grid-template-columns:164px minmax(0,1fr)}.view{padding:24px}.topbar{padding:14px 24px}.create-panel{grid-template-columns:minmax(0,1fr) 230px;gap:14px}.composer,.settings,.output{padding:18px}}
|
|
8
|
+
@media(max-width:740px){.app-shell{display:block}.sidebar{position:static;height:auto;padding:8px;border-right:0;border-bottom:1px solid var(--line)}.brand,.sidebar-bottom{display:none}.sidebar nav{display:flex;gap:4px}.sidebar nav button{flex:1;padding:10px 5px;text-align:center;font-size:12px}.topbar{padding:12px 16px;align-items:flex-start;flex-direction:column}.runtime-note{padding:10px 16px}.view{padding:20px 16px}.location{flex-direction:column;gap:10px}.create-panel{grid-template-columns:1fr}.settings,.output{grid-column:1;grid-row:auto}.heading{align-items:flex-start}h1{font-size:24px}.import{grid-template-columns:1fr}.assets-grid{grid-template-columns:1fr 1fr}.asset-card img,.asset-card video{height:140px}}
|
|
9
|
+
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
|
|
10
|
+
.workspace.canvas-mode{height:100dvh;display:flex;flex-direction:column;min-height:0}.canvas-mode .runtime-note,.canvas-mode .view>footer{display:none}.canvas-mode .view{max-width:none;width:100%;margin:0;padding:0;flex:1;min-height:0;display:flex;flex-direction:column;overflow:clip}.canvas-mode .location{border:0;border-radius:0;border-bottom:1px solid var(--line);padding:4px 14px;margin:0;flex:none;font-size:10px}.canvas-mode .location small{display:none}.canvas-mode .view>#error,.canvas-mode .view>#notice{flex:none;margin:0}#canvas-view{flex:1;min-height:0;min-width:0}.canvas-mode .topbar{flex:none}
|
|
11
|
+
@media(max-width:740px){.workspace.canvas-mode{height:calc(100dvh - 58px)}.sidebar-bottom{display:block;padding:0 6px}.sidebar-bottom>:not(#theme){display:none}.sidebar-bottom #theme{position:absolute;right:8px;top:65px;z-index:10}.canvas-mode .topbar{min-height:76px;padding-right:100px}.canvas-mode .location{max-height:46px;overflow:auto}}
|
|
12
|
+
|
|
13
|
+
/* Global journey: three distinct facts stay visible while content scrolls. */
|
|
14
|
+
.topbar{position:sticky;top:0;z-index:20}.runtime-status{position:sticky;top:70px;z-index:19;display:grid;grid-template-columns:minmax(0,1.4fr) minmax(120px,.65fr) minmax(0,1fr);gap:18px;margin:0;padding:12px 34px;border:0;border-bottom:1px solid var(--line);border-radius:0;background:var(--shell)}.runtime-status>div{min-width:0}.runtime-status b{display:block;font-weight:500}.runtime-status small{margin:0 0 4px}.runtime-status summary{cursor:pointer;overflow-wrap:anywhere}.runtime-status code{display:block;padding-top:8px;overflow-wrap:anywhere;white-space:normal;font:inherit;color:var(--ink2)}.runtime-status #gateway-detail{display:block;overflow-wrap:anywhere}.runtime-status p{line-height:1.6}.runtime-status details[open] summary .hint{font-size:0}.runtime-status details[open] summary .hint::after{content:' · 收起完整路径';font-size:12px}
|
|
15
|
+
.runtime-note{background:none;padding-top:12px;padding-bottom:0}.view{padding-top:8px}.heading{margin:18px 0}.heading>div{min-width:0}.heading>button{flex:none}.create-panel{align-items:start}.composer,.settings,.output{padding:20px}.settings{gap:10px}.settings h2{margin-bottom:4px}.settings>details{border-top:1px solid var(--line);padding-top:12px}.settings>details>summary{cursor:pointer;font-size:13px;line-height:1.7}.settings>details>summary .hint{display:block}.settings>details[open]>summary{margin-bottom:14px}.settings textarea{min-height:100px}.disabled-reason{display:block;max-width:48ch;font-size:11px;line-height:1.6;color:var(--ink2)}.top-actions{max-width:65%;gap:8px}.top-actions .disabled-reason{flex-basis:100%;text-align:right}.heading>.disabled-reason{max-width:210px}.quote-area .disabled-reason{margin:0}.field label{line-height:1.6}.output .run-card{border:0;padding:0}.error{border:1px solid var(--line2);border-radius:8px}.runtime-status :is(summary,code):focus-visible,summary:focus-visible{outline:2px solid var(--primary);outline-offset:3px}
|
|
16
|
+
.canvas-mode .runtime-status{max-height:none;overflow:visible;flex:none;top:auto;padding:6px 14px}.canvas-mode .runtime-status small{display:block;font-size:10px}.canvas-mode .topbar{position:static}.canvas-mode .runtime-status{position:relative}
|
|
17
|
+
@media(max-width:1100px){.runtime-status{padding:10px 24px;gap:12px;grid-template-columns:minmax(0,1.2fr) minmax(110px,.65fr) minmax(0,1fr)}.topbar{padding:12px 24px;min-height:70px}.create-panel{grid-template-columns:minmax(0,1fr) 250px;gap:14px}.heading{flex-wrap:wrap}.heading>.disabled-reason{flex-basis:100%;max-width:none}}
|
|
18
|
+
@media(max-width:740px){.topbar{position:relative;top:auto}.runtime-status{position:relative;top:auto;grid-template-columns:1fr;padding:12px 16px;gap:10px}.top-actions{max-width:none}.top-actions .disabled-reason{text-align:left}.create-panel{grid-template-columns:1fr}.sidebar nav{flex-wrap:wrap}.sidebar nav button{flex:1 0 28%}}
|
|
19
|
+
.runtime-header{position:sticky;top:0;z-index:20}.runtime-header .topbar,.runtime-header .runtime-status{position:static}.canvas-mode .runtime-header{position:relative;flex:none}
|
|
20
|
+
@media(max-width:740px){.runtime-header{position:relative}}
|
|
21
|
+
|
|
22
|
+
/* Compact persistent facts; successful connection is not a disabled action. */
|
|
23
|
+
.runtime-header .topbar{min-height:58px;padding:10px 24px;gap:12px}.runtime-header .top-actions{max-width:70%;flex-wrap:nowrap}.runtime-header .top-actions .disabled-reason{flex-basis:auto;max-width:160px;text-align:left}.runtime-header .runtime-status{padding:8px 24px;gap:16px;font-size:12px;align-items:start}.runtime-status>div{display:flex;align-items:baseline;gap:8px;min-width:0}.runtime-status small{flex:none;white-space:nowrap;font-size:11px;margin:0}.runtime-status details{min-width:0;flex:1}.runtime-status summary{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.runtime-status #storage-warning{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:18px}.runtime-status #gateway-detail{display:none}.runtime-status b{font-size:12px;line-height:18px}.primary:disabled{background:var(--panel2);color:var(--ink2);border:1px solid var(--line2);opacity:1;cursor:not-allowed}
|
|
24
|
+
@media(max-width:740px){.runtime-header .topbar{padding:10px 16px}.runtime-header .top-actions{max-width:100%;flex-wrap:wrap}.runtime-header .runtime-status{padding:10px 16px;gap:8px}}
|
|
25
|
+
.runtime-status b,.runtime-status #storage-warning{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
26
|
+
.save-binding{padding:14px 0 20px;display:flex;flex-wrap:wrap;align-items:center;gap:10px}.save-binding p{margin:0}.save-binding code{flex-basis:100%;overflow-wrap:anywhere;white-space:normal;color:var(--ink2)}.output-list{margin-top:16px;padding-top:12px;border-top:1px solid var(--line2)}.output-record{margin:12px 0;padding:12px;border-radius:8px;background:var(--panel2)}.output-record p{margin:6px 0}.output-list button{margin:6px 8px 0 0}
|
|
27
|
+
.saved-path{display:block;overflow-wrap:anywhere;white-space:normal;line-height:1.6}.output-record details{margin:12px 0}.output-record summary{cursor:pointer;overflow-wrap:anywhere}.save-progress{font-variant-numeric:tabular-nums}.save-status{font-weight:600}
|
|
28
|
+
`;
|
|
29
|
+
//# sourceMappingURL=style.js.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type StudioMediaType = 'image/png' | 'image/jpeg' | 'image/webp' | 'video/mp4' | 'video/webm';
|
|
2
|
+
export interface StudioAsset {
|
|
3
|
+
directorCapture?: import('./director-contract.js').DirectorProvenance;
|
|
4
|
+
assetId: string;
|
|
5
|
+
displayName: string;
|
|
6
|
+
mediaType: StudioMediaType;
|
|
7
|
+
relativePath: string;
|
|
8
|
+
byteLength: number;
|
|
9
|
+
sha256: string;
|
|
10
|
+
savedAt: string;
|
|
11
|
+
}
|
|
12
|
+
export interface StudioCatalog {
|
|
13
|
+
schemaVersion: 1;
|
|
14
|
+
revision: number;
|
|
15
|
+
assets: StudioAsset[];
|
|
16
|
+
}
|
|
17
|
+
export interface StudioRoot {
|
|
18
|
+
canonicalOutputDir: string;
|
|
19
|
+
managedDir: string;
|
|
20
|
+
assetsDir: string;
|
|
21
|
+
}
|
|
22
|
+
export interface StudioRecoveryIssue {
|
|
23
|
+
code: 'INCOMPLETE_FILE' | 'UNREGISTERED_ASSET' | 'ASSET_MISSING' | 'ASSET_CORRUPT';
|
|
24
|
+
file: string;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=types.d.ts.map
|