@appthen/vibe-workspace 0.1.8 → 0.1.9

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.
Files changed (44) hide show
  1. package/dist/{DocxPreview-CAmipQT3.js → DocxPreview-D2izjHfQ.js} +5 -5
  2. package/dist/{DocxPreview-CAmipQT3.js.map → DocxPreview-D2izjHfQ.js.map} +1 -1
  3. package/dist/{DotBadge-CeeLzNu3.js → DotBadge-BTtlqPqv.js} +2 -2
  4. package/dist/{DotBadge-CeeLzNu3.js.map → DotBadge-BTtlqPqv.js.map} +1 -1
  5. package/dist/{FreeCanvas-DritKIPq.js → FreeCanvas-D0qGlWl-.js} +2 -2
  6. package/dist/{FreeCanvas-DritKIPq.js.map → FreeCanvas-D0qGlWl-.js.map} +1 -1
  7. package/dist/{ImagePreview-ByIQrPzb.js → ImagePreview-CVw1IKRl.js} +4 -4
  8. package/dist/{ImagePreview-ByIQrPzb.js.map → ImagePreview-CVw1IKRl.js.map} +1 -1
  9. package/dist/{PdfPreview-0vwF3tLn.js → PdfPreview-BRDBxezL.js} +4 -4
  10. package/dist/{PdfPreview-0vwF3tLn.js.map → PdfPreview-BRDBxezL.js.map} +1 -1
  11. package/dist/{PluginContext-uAiGNF8S.js → PluginContext-DCtbrkoX.js} +2 -2
  12. package/dist/{PluginContext-uAiGNF8S.js.map → PluginContext-DCtbrkoX.js.map} +1 -1
  13. package/dist/{Workbench-8uTfTtsq.js → Workbench-Bz0iJPL8.js} +12 -12
  14. package/dist/{Workbench-8uTfTtsq.js.map → Workbench-Bz0iJPL8.js.map} +1 -1
  15. package/dist/{activate-DVnxnmfA.js → activate-B_lpUEhD.js} +3 -3
  16. package/dist/{activate-DVnxnmfA.js.map → activate-B_lpUEhD.js.map} +1 -1
  17. package/dist/canvas-core/index.js +1 -1
  18. package/dist/coding-kit/index.js +1 -1
  19. package/dist/components/index.js +4 -4
  20. package/dist/{dialog-ssICQNSV.js → dialog-RPHf7Mz2.js} +2 -2
  21. package/dist/{dialog-ssICQNSV.js.map → dialog-RPHf7Mz2.js.map} +1 -1
  22. package/dist/{docx-preview-lJ7EdPsl.js → docx-preview-CH7hwx62.js} +2 -2
  23. package/dist/{docx-preview-lJ7EdPsl.js.map → docx-preview-CH7hwx62.js.map} +1 -1
  24. package/dist/extension-dev-workbench/index.js +4 -4
  25. package/dist/{extensionRegistry-D35Ld-Wa.js → extensionRegistry-B6X2GQLX.js} +2 -2
  26. package/dist/{extensionRegistry-D35Ld-Wa.js.map → extensionRegistry-B6X2GQLX.js.map} +1 -1
  27. package/dist/index.js +13 -13
  28. package/dist/{list-detail-workspace-template-BTrgMGPx.js → list-detail-workspace-template-DsiEfhxo.js} +2 -2
  29. package/dist/{list-detail-workspace-template-BTrgMGPx.js.map → list-detail-workspace-template-DsiEfhxo.js.map} +1 -1
  30. package/dist/overlay/index.js +2 -2
  31. package/dist/{pluginCapabilities-BkCT7QDO.js → pluginCapabilities-BKLR6W4M.js} +2 -2
  32. package/dist/{pluginCapabilities-BkCT7QDO.js.map → pluginCapabilities-BKLR6W4M.js.map} +1 -1
  33. package/dist/plugins/agent/PluginModule.js +2 -2
  34. package/dist/plugins/base/index.js +1 -1
  35. package/dist/{sheet-Bsq3CLW4.js → sheet-tD__qqBd.js} +10 -10
  36. package/dist/{sheet-Bsq3CLW4.js.map → sheet-tD__qqBd.js.map} +1 -1
  37. package/dist/{skeleton-BSqTbX9l.js → skeleton-6VSIwQtG.js} +2 -2
  38. package/dist/{skeleton-BSqTbX9l.js.map → skeleton-6VSIwQtG.js.map} +1 -1
  39. package/dist/ui/index.js +3 -3
  40. package/dist/{useBinaryFileUrl-D11yvGuG.js → useBinaryFileUrl-_FJREA5b.js} +3 -3
  41. package/dist/{useBinaryFileUrl-D11yvGuG.js.map → useBinaryFileUrl-_FJREA5b.js.map} +1 -1
  42. package/dist/vibe-workspace.css +1 -1
  43. package/dist/workbench/index.js +2 -2
  44. package/package.json +1 -1
package/dist/ui/index.js CHANGED
@@ -1,7 +1,7 @@
1
- import { A, a, b, c, d, e, B, f, C, D, g, h, i, j, k, l, m, n, o, p, q, r, s, t, E, I, R, u, S, v, w, x, y, W, X, z, F, G, H, J, T, K, L, M, N, O, P, Q, U, V, Y } from "../skeleton-BSqTbX9l.js";
1
+ import { A, a, b, c, d, e, B, f, C, D, g, h, i, j, k, l, m, n, o, p, q, r, s, t, E, I, R, u, S, v, w, x, y, W, X, z, F, G, H, J, T, K, L, M, N, O, P, Q, U, V, Y } from "../skeleton-6VSIwQtG.js";
2
2
  import { P as P2, T as T2, a as a2, b as b2, c as c2, d as d2, e as e2, f as f2, g as g2, h as h2, i as i2, j as j2 } from "../toast-C4mLAjyT.js";
3
- import { D as D2, a as a3, b as b3, c as c3, d as d3, e as e3, f as f3, g as g3, h as h3, i as i3 } from "../dialog-ssICQNSV.js";
4
- import { S as S2, a as a4, b as b4, c as c4, d as d4, e as e4, f as f4, g as g4, h as h4, i as i4 } from "../sheet-Bsq3CLW4.js";
3
+ import { D as D2, a as a3, b as b3, c as c3, d as d3, e as e3, f as f3, g as g3, h as h3, i as i3 } from "../dialog-RPHf7Mz2.js";
4
+ import { S as S2, a as a4, b as b4, c as c4, d as d4, e as e4, f as f4, g as g4, h as h4, i as i4 } from "../sheet-tD__qqBd.js";
5
5
  export {
6
6
  A as WorkbenchAlert,
7
7
  a as WorkbenchAlertDescription,
@@ -1,6 +1,6 @@
1
1
  import { useContext, useState, useRef, useEffect } from "react";
2
- import { b as FileSystemContext } from "./activate-DVnxnmfA.js";
3
- import { M as MAX_BINARY_PREVIEW_BYTES, g as getBinaryMime, B as BinaryAssetNotFoundError } from "./Workbench-8uTfTtsq.js";
2
+ import { b as FileSystemContext } from "./activate-B_lpUEhD.js";
3
+ import { M as MAX_BINARY_PREVIEW_BYTES, g as getBinaryMime, B as BinaryAssetNotFoundError } from "./Workbench-Bz0iJPL8.js";
4
4
  function base64ToBlob(base64, mime) {
5
5
  const binary = atob(base64);
6
6
  const bytes = new Uint8Array(binary.length);
@@ -76,4 +76,4 @@ function useBinaryFileUrl(file) {
76
76
  export {
77
77
  useBinaryFileUrl as u
78
78
  };
79
- //# sourceMappingURL=useBinaryFileUrl-D11yvGuG.js.map
79
+ //# sourceMappingURL=useBinaryFileUrl-_FJREA5b.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBinaryFileUrl-D11yvGuG.js","sources":["../src/plugins/binary-previews/useBinaryFileUrl.ts"],"sourcesContent":["/**\n * 二进制文件预览 URL 解析 hook。\n *\n * 通过 FileSystemContext 拿 Workbench 实际的 FileSystemService 实例\n * (存在模块单例与 WorkbenchProvider 实例双实例,绝不 import 单例)。\n * runtime:base64 → Blob → objectURL(切换/卸载时 revoke);\n * 云端:VFS 资产签名 URL(无需 revoke)。\n */\nimport { useContext, useEffect, useRef, useState } from 'react';\nimport { FileSystemContext } from '../../core/FileSystemContext';\nimport {\n BinaryAssetNotFoundError,\n type FileSystemService,\n} from '../explorer/services/fileSystem';\nimport type { FileNode } from '../../types';\nimport { getBinaryMime, MAX_BINARY_PREVIEW_BYTES } from './binaryTypes';\n\nexport type BinaryUrlState =\n | { status: 'loading' }\n | { status: 'ready'; url: string; kind: 'blob' | 'signed-url' }\n | { status: 'no-asset' }\n | { status: 'too-large'; size?: number }\n | { status: 'error'; message: string };\n\nfunction base64ToBlob(base64: string, mime: string): Blob {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new Blob([bytes], { type: mime });\n}\n\nexport function useBinaryFileUrl(\n file: FileNode | null | undefined,\n): [BinaryUrlState, () => void] {\n const fileSystem = useContext(FileSystemContext) as FileSystemService | null;\n const [state, setState] = useState<BinaryUrlState>({ status: 'loading' });\n const [nonce, setNonce] = useState(0);\n // 当前持有的 blob: URL(签名 URL 不 revoke)\n const objectUrlRef = useRef<string | null>(null);\n const generationRef = useRef(0);\n\n const retry = () => setNonce((n) => n + 1);\n\n useEffect(() => {\n const generation = ++generationRef.current;\n\n // 释放上一个 blob URL(可能属于上一个文件)\n if (objectUrlRef.current) {\n URL.revokeObjectURL(objectUrlRef.current);\n objectUrlRef.current = null;\n }\n\n if (!file) {\n setState({ status: 'loading' });\n return;\n }\n if (!fileSystem) {\n setState({ status: 'error', message: '二进制预览需要工作台文件系统' });\n return;\n }\n const size = file.stats?.size;\n if (typeof size === 'number' && size > MAX_BINARY_PREVIEW_BYTES) {\n setState({ status: 'too-large', size });\n return;\n }\n\n let cancelled = false;\n setState({ status: 'loading' });\n\n (async () => {\n try {\n const source = await fileSystem.resolveBinarySource(file.id);\n if (cancelled || generation !== generationRef.current) return;\n\n if (source.kind === 'signed-url') {\n setState({ status: 'ready', url: source.url, kind: 'signed-url' });\n } else {\n const blob = base64ToBlob(source.base64, getBinaryMime(file.name) ?? 'application/octet-stream');\n const url = URL.createObjectURL(blob);\n objectUrlRef.current = url;\n setState({ status: 'ready', url, kind: 'blob' });\n }\n } catch (e) {\n if (cancelled || generation !== generationRef.current) return;\n if (e instanceof BinaryAssetNotFoundError) {\n setState({ status: 'no-asset' });\n } else {\n setState({ status: 'error', message: e instanceof Error ? e.message : String(e) });\n }\n }\n })();\n\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fileSystem, file?.id, nonce]);\n\n // 卸载时释放 blob URL\n useEffect(() => {\n return () => {\n if (objectUrlRef.current) {\n URL.revokeObjectURL(objectUrlRef.current);\n objectUrlRef.current = null;\n }\n };\n }, []);\n\n return [state, retry];\n}\n"],"names":[],"mappings":";;;AAwBA,SAAS,aAAa,QAAgB,MAAoB;AACxD,QAAM,SAAS,KAAK,MAAM;AAC1B,QAAM,QAAQ,IAAI,WAAW,OAAO,MAAM;AAC1C,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACzC,UAAM,CAAC,IAAI,OAAO,WAAW,CAAC;AAAA,EAChC;AACA,SAAO,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,MAAM;AACzC;AAEO,SAAS,iBACd,MAC8B;AAC9B,QAAM,aAAa,WAAW,iBAAiB;AAC/C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAyB,EAAE,QAAQ,WAAW;AACxE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,CAAC;AAEpC,QAAM,eAAe,OAAsB,IAAI;AAC/C,QAAM,gBAAgB,OAAO,CAAC;AAE9B,QAAM,QAAQ,MAAM,SAAS,CAAC,MAAM,IAAI,CAAC;AAEzC,YAAU,MAAM;;AACd,UAAM,aAAa,EAAE,cAAc;AAGnC,QAAI,aAAa,SAAS;AACxB,UAAI,gBAAgB,aAAa,OAAO;AACxC,mBAAa,UAAU;AAAA,IACzB;AAEA,QAAI,CAAC,MAAM;AACT,eAAS,EAAE,QAAQ,WAAW;AAC9B;AAAA,IACF;AACA,QAAI,CAAC,YAAY;AACf,eAAS,EAAE,QAAQ,SAAS,SAAS,kBAAkB;AACvD;AAAA,IACF;AACA,UAAM,QAAO,UAAK,UAAL,mBAAY;AACzB,QAAI,OAAO,SAAS,YAAY,OAAO,0BAA0B;AAC/D,eAAS,EAAE,QAAQ,aAAa,KAAA,CAAM;AACtC;AAAA,IACF;AAEA,QAAI,YAAY;AAChB,aAAS,EAAE,QAAQ,WAAW;AAE9B,KAAC,YAAY;AACX,UAAI;AACF,cAAM,SAAS,MAAM,WAAW,oBAAoB,KAAK,EAAE;AAC3D,YAAI,aAAa,eAAe,cAAc,QAAS;AAEvD,YAAI,OAAO,SAAS,cAAc;AAChC,mBAAS,EAAE,QAAQ,SAAS,KAAK,OAAO,KAAK,MAAM,cAAc;AAAA,QACnE,OAAO;AACL,gBAAM,OAAO,aAAa,OAAO,QAAQ,cAAc,KAAK,IAAI,KAAK,0BAA0B;AAC/F,gBAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,uBAAa,UAAU;AACvB,mBAAS,EAAE,QAAQ,SAAS,KAAK,MAAM,QAAQ;AAAA,QACjD;AAAA,MACF,SAAS,GAAG;AACV,YAAI,aAAa,eAAe,cAAc,QAAS;AACvD,YAAI,aAAa,0BAA0B;AACzC,mBAAS,EAAE,QAAQ,YAAY;AAAA,QACjC,OAAO;AACL,mBAAS,EAAE,QAAQ,SAAS,SAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,EAAA,CAAG;AAAA,QACnF;AAAA,MACF;AAAA,IACF,GAAA;AAEA,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EAEF,GAAG,CAAC,YAAY,6BAAM,IAAI,KAAK,CAAC;AAGhC,YAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,aAAa,SAAS;AACxB,YAAI,gBAAgB,aAAa,OAAO;AACxC,qBAAa,UAAU;AAAA,MACzB;AAAA,IACF;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,SAAO,CAAC,OAAO,KAAK;AACtB;"}
1
+ {"version":3,"file":"useBinaryFileUrl-_FJREA5b.js","sources":["../src/plugins/binary-previews/useBinaryFileUrl.ts"],"sourcesContent":["/**\n * 二进制文件预览 URL 解析 hook。\n *\n * 通过 FileSystemContext 拿 Workbench 实际的 FileSystemService 实例\n * (存在模块单例与 WorkbenchProvider 实例双实例,绝不 import 单例)。\n * runtime:base64 → Blob → objectURL(切换/卸载时 revoke);\n * 云端:VFS 资产签名 URL(无需 revoke)。\n */\nimport { useContext, useEffect, useRef, useState } from 'react';\nimport { FileSystemContext } from '../../core/FileSystemContext';\nimport {\n BinaryAssetNotFoundError,\n type FileSystemService,\n} from '../explorer/services/fileSystem';\nimport type { FileNode } from '../../types';\nimport { getBinaryMime, MAX_BINARY_PREVIEW_BYTES } from './binaryTypes';\n\nexport type BinaryUrlState =\n | { status: 'loading' }\n | { status: 'ready'; url: string; kind: 'blob' | 'signed-url' }\n | { status: 'no-asset' }\n | { status: 'too-large'; size?: number }\n | { status: 'error'; message: string };\n\nfunction base64ToBlob(base64: string, mime: string): Blob {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) {\n bytes[i] = binary.charCodeAt(i);\n }\n return new Blob([bytes], { type: mime });\n}\n\nexport function useBinaryFileUrl(\n file: FileNode | null | undefined,\n): [BinaryUrlState, () => void] {\n const fileSystem = useContext(FileSystemContext) as FileSystemService | null;\n const [state, setState] = useState<BinaryUrlState>({ status: 'loading' });\n const [nonce, setNonce] = useState(0);\n // 当前持有的 blob: URL(签名 URL 不 revoke)\n const objectUrlRef = useRef<string | null>(null);\n const generationRef = useRef(0);\n\n const retry = () => setNonce((n) => n + 1);\n\n useEffect(() => {\n const generation = ++generationRef.current;\n\n // 释放上一个 blob URL(可能属于上一个文件)\n if (objectUrlRef.current) {\n URL.revokeObjectURL(objectUrlRef.current);\n objectUrlRef.current = null;\n }\n\n if (!file) {\n setState({ status: 'loading' });\n return;\n }\n if (!fileSystem) {\n setState({ status: 'error', message: '二进制预览需要工作台文件系统' });\n return;\n }\n const size = file.stats?.size;\n if (typeof size === 'number' && size > MAX_BINARY_PREVIEW_BYTES) {\n setState({ status: 'too-large', size });\n return;\n }\n\n let cancelled = false;\n setState({ status: 'loading' });\n\n (async () => {\n try {\n const source = await fileSystem.resolveBinarySource(file.id);\n if (cancelled || generation !== generationRef.current) return;\n\n if (source.kind === 'signed-url') {\n setState({ status: 'ready', url: source.url, kind: 'signed-url' });\n } else {\n const blob = base64ToBlob(source.base64, getBinaryMime(file.name) ?? 'application/octet-stream');\n const url = URL.createObjectURL(blob);\n objectUrlRef.current = url;\n setState({ status: 'ready', url, kind: 'blob' });\n }\n } catch (e) {\n if (cancelled || generation !== generationRef.current) return;\n if (e instanceof BinaryAssetNotFoundError) {\n setState({ status: 'no-asset' });\n } else {\n setState({ status: 'error', message: e instanceof Error ? e.message : String(e) });\n }\n }\n })();\n\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fileSystem, file?.id, nonce]);\n\n // 卸载时释放 blob URL\n useEffect(() => {\n return () => {\n if (objectUrlRef.current) {\n URL.revokeObjectURL(objectUrlRef.current);\n objectUrlRef.current = null;\n }\n };\n }, []);\n\n return [state, retry];\n}\n"],"names":[],"mappings":";;;AAwBA,SAAS,aAAa,QAAgB,MAAoB;AACxD,QAAM,SAAS,KAAK,MAAM;AAC1B,QAAM,QAAQ,IAAI,WAAW,OAAO,MAAM;AAC1C,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;AACzC,UAAM,CAAC,IAAI,OAAO,WAAW,CAAC;AAAA,EAChC;AACA,SAAO,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,MAAM,MAAM;AACzC;AAEO,SAAS,iBACd,MAC8B;AAC9B,QAAM,aAAa,WAAW,iBAAiB;AAC/C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAyB,EAAE,QAAQ,WAAW;AACxE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,CAAC;AAEpC,QAAM,eAAe,OAAsB,IAAI;AAC/C,QAAM,gBAAgB,OAAO,CAAC;AAE9B,QAAM,QAAQ,MAAM,SAAS,CAAC,MAAM,IAAI,CAAC;AAEzC,YAAU,MAAM;;AACd,UAAM,aAAa,EAAE,cAAc;AAGnC,QAAI,aAAa,SAAS;AACxB,UAAI,gBAAgB,aAAa,OAAO;AACxC,mBAAa,UAAU;AAAA,IACzB;AAEA,QAAI,CAAC,MAAM;AACT,eAAS,EAAE,QAAQ,WAAW;AAC9B;AAAA,IACF;AACA,QAAI,CAAC,YAAY;AACf,eAAS,EAAE,QAAQ,SAAS,SAAS,kBAAkB;AACvD;AAAA,IACF;AACA,UAAM,QAAO,UAAK,UAAL,mBAAY;AACzB,QAAI,OAAO,SAAS,YAAY,OAAO,0BAA0B;AAC/D,eAAS,EAAE,QAAQ,aAAa,KAAA,CAAM;AACtC;AAAA,IACF;AAEA,QAAI,YAAY;AAChB,aAAS,EAAE,QAAQ,WAAW;AAE9B,KAAC,YAAY;AACX,UAAI;AACF,cAAM,SAAS,MAAM,WAAW,oBAAoB,KAAK,EAAE;AAC3D,YAAI,aAAa,eAAe,cAAc,QAAS;AAEvD,YAAI,OAAO,SAAS,cAAc;AAChC,mBAAS,EAAE,QAAQ,SAAS,KAAK,OAAO,KAAK,MAAM,cAAc;AAAA,QACnE,OAAO;AACL,gBAAM,OAAO,aAAa,OAAO,QAAQ,cAAc,KAAK,IAAI,KAAK,0BAA0B;AAC/F,gBAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,uBAAa,UAAU;AACvB,mBAAS,EAAE,QAAQ,SAAS,KAAK,MAAM,QAAQ;AAAA,QACjD;AAAA,MACF,SAAS,GAAG;AACV,YAAI,aAAa,eAAe,cAAc,QAAS;AACvD,YAAI,aAAa,0BAA0B;AACzC,mBAAS,EAAE,QAAQ,YAAY;AAAA,QACjC,OAAO;AACL,mBAAS,EAAE,QAAQ,SAAS,SAAS,aAAa,QAAQ,EAAE,UAAU,OAAO,CAAC,EAAA,CAAG;AAAA,QACnF;AAAA,MACF;AAAA,IACF,GAAA;AAEA,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EAEF,GAAG,CAAC,YAAY,6BAAM,IAAI,KAAK,CAAC;AAGhC,YAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,aAAa,SAAS;AACxB,YAAI,gBAAgB,aAAa,OAAO;AACxC,qBAAa,UAAU;AAAA,MACzB;AAAA,IACF;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,SAAO,CAAC,OAAO,KAAK;AACtB;"}