@neuralnomads/codenomad-dev 1.0.0-dev-20261021-da0dc279 → 1.0.0-dev-20261021-3be331df
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/package.json +1 -1
- package/public/assets/App-CV7a_XIb.js +166 -0
- package/public/assets/App-CV7a_XIb.js.map +1 -0
- package/public/assets/{FilesPanel-fldoLwjR.js → FilesPanel-DR1y0J8k.js} +2 -2
- package/public/assets/{FilesPanel-fldoLwjR.js.map → FilesPanel-DR1y0J8k.js.map} +1 -1
- package/public/assets/{StatusTab-BsieSz5T.js → StatusTab-CvArOQfz.js} +2 -2
- package/public/assets/{StatusTab-BsieSz5T.js.map → StatusTab-CvArOQfz.js.map} +1 -1
- package/public/assets/{client-state-DUiczYN_.js → client-state-DseolAb6.js} +2 -2
- package/public/assets/{client-state-DUiczYN_.js.map → client-state-DseolAb6.js.map} +1 -1
- package/public/assets/{client-state-8wzlVD60.js → client-state-Pknghd0N.js} +2 -2
- package/public/assets/{client-state-8wzlVD60.js.map → client-state-Pknghd0N.js.map} +1 -1
- package/public/assets/client-state-owner-commands-we9M_k_R.js +2 -0
- package/public/assets/{client-state-owner-commands-BbTnX6L9.js.map → client-state-owner-commands-we9M_k_R.js.map} +1 -1
- package/public/assets/{diff-viewer-c2DdbKd2.js → diff-viewer-DzwcL4Zt.js} +2 -2
- package/public/assets/{diff-viewer-c2DdbKd2.js.map → diff-viewer-DzwcL4Zt.js.map} +1 -1
- package/public/assets/{main-DIArqqxb.js → main-RhkO2_V4.js} +4 -4
- package/public/assets/{main-DIArqqxb.js.map → main-RhkO2_V4.js.map} +1 -1
- package/public/assets/{markdown-Bm3WjLUn.js → markdown-f7gFxms-.js} +2 -2
- package/public/assets/{markdown-Bm3WjLUn.js.map → markdown-f7gFxms-.js.map} +1 -1
- package/public/assets/{opener-startup-state-settings-card-B1CLwWxr.js → opener-startup-state-settings-card-6qWuvtuQ.js} +2 -2
- package/public/assets/{opener-startup-state-settings-card-B1CLwWxr.js.map → opener-startup-state-settings-card-6qWuvtuQ.js.map} +1 -1
- package/public/assets/{startup-state-settings-card-CApBOz_c.js → startup-state-settings-card-C31YnCd3.js} +2 -2
- package/public/assets/{startup-state-settings-card-CApBOz_c.js.map → startup-state-settings-card-C31YnCd3.js.map} +1 -1
- package/public/assets/{startup-state-settings-view-WgJn7GgZ.js → startup-state-settings-view-DeTncAxc.js} +2 -2
- package/public/assets/{startup-state-settings-view-WgJn7GgZ.js.map → startup-state-settings-view-DeTncAxc.js.map} +1 -1
- package/public/assets/{terminal-square-BuJcmlSz.js → terminal-square-CskZtmJl.js} +2 -2
- package/public/assets/{terminal-square-BuJcmlSz.js.map → terminal-square-CskZtmJl.js.map} +1 -1
- package/public/assets/{tool-call-HuawLUrB.js → tool-call-ct3UTaYa.js} +4 -4
- package/public/assets/{tool-call-HuawLUrB.js.map → tool-call-ct3UTaYa.js.map} +1 -1
- package/public/assets/{unified-picker-BUCAtNPn.js → unified-picker-DLAIy-T3.js} +2 -2
- package/public/assets/{unified-picker-BUCAtNPn.js.map → unified-picker-DLAIy-T3.js.map} +1 -1
- package/public/index.html +2 -2
- package/public/loading.html +1 -1
- package/public/sw.js +1 -1
- package/public/sw.js.map +1 -1
- package/public/assets/App-6cgf1_Fi.js +0 -166
- package/public/assets/App-6cgf1_Fi.js.map +0 -1
- package/public/assets/client-state-owner-commands-BbTnX6L9.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a,b as i,m as f,l as v,i as S}from"./index-bgLguS1D.js";import{h as w}from"./monaco-viewer-DdD9wg1H.js";import{g8 as m}from"./main-
|
|
2
|
-
//# sourceMappingURL=client-state-
|
|
1
|
+
import{a,b as i,m as f,l as v,i as S}from"./index-bgLguS1D.js";import{h as w}from"./monaco-viewer-DdD9wg1H.js";import{g8 as m}from"./main-RhkO2_V4.js";import"./git-diff-vendor-CINvIzmQ.js";import"./fast-diff-vendor-DgdwVvTQ.js";import"./highlight-vendor-8FKMu9os.js";const N=["codenomad-client-snapshot-v1","codenomad-client-restore-enabled-v1"],u={isPrimary:!1,restoreEnabled:!1,snapshot:null},d=w("actions"),r=(()=>{const e=new Uint8Array(32);return globalThis.crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")})();let o=!1;const C=()=>window.electronAPI;function l(e,t,n={}){if(a())return e(C());if(i())return S(t,{accessToken:r,...n})}async function A(){if(!f())return!1;try{const e=await l(t=>{var n;return(n=t==null?void 0:t.claimClientStateAccess)==null?void 0:n.call(t,r)},"client_state_claim_access");o=i()||e===!0}catch(e){o=!1,d.warn("Client state native access claim failed",e)}return o}async function O(){if(a()||i()){if(!await A())return u;const e=await l(n=>{var s;return(s=n==null?void 0:n.loadClientState)==null?void 0:s.call(n,r)},"client_state_load")??u;if(!a())return e;const t=C();return{...e,partitionProtocolVersion:e.partitionProtocolVersion===1&&typeof(t==null?void 0:t.commitClientStatePartitions)=="function"&&typeof t.loadClientStatePartition=="function"?1:void 0}}try{for(const e of N)window.localStorage.removeItem(e)}catch{}return u}async function _(e,t,n={}){return o?await l(s=>s&&e(s),t,n)??!1:!1}const M=e=>_(t=>{var n;return(n=t.saveClientState)==null?void 0:n.call(t,r,e)},"client_state_save",{snapshot:e}),R=e=>_(t=>{var n;return(n=t.commitClientStatePartitions)==null?void 0:n.call(t,r,e)},"client_state_commit_partitions",{payload:e}),b=async e=>o?await l(t=>{var n;return(n=t==null?void 0:t.loadClientStatePartition)==null?void 0:n.call(t,r,e)},"client_state_load_partition",{key:e})??null:null,I=e=>_(t=>{var n;return(n=t.setClientStateRestoreEnabled)==null?void 0:n.call(t,r,e)},"client_state_set_restore_enabled",{enabled:e}),k=()=>_(e=>{var t;return(t=e.clearClientState)==null?void 0:t.call(e,r)},"client_state_clear");function c(e,t={}){return!i()||!o?Promise.resolve():S(e,{accessToken:r,...t})}const y=e=>c("client_state_navigation_flushed",{generation:e}),L=e=>c("client_state_renderer_flushed",{generation:e});async function U(e){if(!f())return()=>{};if(a()){const t=n=>m(n)?e(n):Promise.reject(new Error("Invalid startup state command"));return window.__CODENOMAD_STARTUP_STATE_COMMAND__=t,()=>{window.__CODENOMAD_STARTUP_STATE_COMMAND__===t&&delete window.__CODENOMAD_STARTUP_STATE_COMMAND__}}return i()?v("client-state:startup-command",({payload:t})=>{!Number.isSafeInteger(t==null?void 0:t.id)||t.windowId!==window.__CODENOMAD_WINDOW_ID__||m(t.command)&&e(t.command).then(n=>c("client_state_startup_command_result",{id:t.id,stateResult:n})).catch(n=>(d.warn("Startup state command failed",n),c("client_state_startup_command_result",{id:t.id,stateResult:null}))).catch(n=>d.warn("Startup state command result was not delivered",n))}):()=>{}}export{y as acknowledgeNativeClientStateNavigationFlush,L as acknowledgeNativeClientStateRendererFlush,k as clearNativeClientState,R as commitNativeClientStatePartitions,U as installNativeStartupStateCommandHandler,O as loadNativeClientState,b as loadNativeClientStatePartition,M as saveNativeClientState,I as setNativeRestoreEnabled};
|
|
2
|
+
//# sourceMappingURL=client-state-Pknghd0N.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-state-8wzlVD60.js","sources":["../../../lib/native/client-state.ts"],"sourcesContent":["import { invoke } from \"@tauri-apps/api/core\"\nimport { listen } from \"@tauri-apps/api/event\"\nimport { isElectronHost, isLocalWindow, isTauriHost } from \"../runtime-env\"\nimport { getLogger } from \"../logger\"\nimport { isStartupStateCommand, type StartupStateCommand, type StartupStateSnapshot } from \"./startup-state-command\"\nconst LEGACY_WEB_KEYS = [\"codenomad-client-snapshot-v1\", \"codenomad-client-restore-enabled-v1\"]\nexport type NativeClientStateLoadResult = {\n isPrimary: boolean\n restoreEnabled: boolean\n snapshot: unknown | null\n partitionProtocolVersion?: 1\n}\nexport type NativeClientStatePartitionCommit = {\n protocolVersion: 1\n snapshot: unknown\n partitions: Record<string, string>\n partitionKeys: string[]\n}\nconst SECONDARY_CLIENT_STATE: NativeClientStateLoadResult = { isPrimary: false, restoreEnabled: false, snapshot: null }\nconst log = getLogger(\"actions\")\nconst accessToken = (() => {\n const bytes = new Uint8Array(32)\n globalThis.crypto.getRandomValues(bytes)\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")\n})()\nlet nativeAccessClaimed = false\nconst electronApi = () => (window as Window & { electronAPI?: ElectronAPI }).electronAPI\nfunction dispatchNative<T>(electronOperation: (api: ElectronAPI | undefined) => Promise<T> | undefined, command: string, args: Record<string, unknown> = {}): Promise<T> | undefined {\n if (isElectronHost()) return electronOperation(electronApi())\n if (isTauriHost()) return invoke<T>(command, { accessToken, ...args })\n}\nasync function claimNativeClientStateAccess(): Promise<boolean> {\n if (!isLocalWindow()) return false\n try {\n const result = await dispatchNative<boolean | void>((api) => api?.claimClientStateAccess?.(accessToken), \"client_state_claim_access\")\n nativeAccessClaimed = isTauriHost() || result === true\n } catch (error) {\n nativeAccessClaimed = false\n log.warn(\"Client state native access claim failed\", error)\n }\n return nativeAccessClaimed\n}\nexport async function loadNativeClientState(): Promise<NativeClientStateLoadResult> {\n if (isElectronHost() || isTauriHost()) {\n if (!await claimNativeClientStateAccess()) return SECONDARY_CLIENT_STATE\n const loaded = await dispatchNative((api) => api?.loadClientState?.(accessToken), \"client_state_load\") ?? SECONDARY_CLIENT_STATE\n if (!isElectronHost()) return loaded\n const api = electronApi()\n return {\n ...loaded,\n partitionProtocolVersion: loaded.partitionProtocolVersion === 1\n && typeof api?.commitClientStatePartitions === \"function\"\n && typeof api.loadClientStatePartition === \"function\" ? 1 : undefined,\n }\n }\n try {\n for (const key of LEGACY_WEB_KEYS) window.localStorage.removeItem(key)\n } catch {}\n return SECONDARY_CLIENT_STATE\n}\nasync function mutateNativeClientState(electronOperation: (api: ElectronAPI) => Promise<boolean> | undefined, command: string, args: Record<string, unknown> = {}): Promise<boolean> {\n if (!nativeAccessClaimed) return false\n return await dispatchNative((api) => api && electronOperation(api), command, args) ?? false\n}\nexport const saveNativeClientState = (snapshot: unknown): Promise<boolean> =>\n mutateNativeClientState((api) => api.saveClientState?.(accessToken, snapshot), \"client_state_save\", { snapshot })\nexport const commitNativeClientStatePartitions = (payload: NativeClientStatePartitionCommit): Promise<boolean> =>\n mutateNativeClientState((api) => api.commitClientStatePartitions?.(accessToken, payload), \"client_state_commit_partitions\", { payload })\nexport const loadNativeClientStatePartition = async (key: string): Promise<string | null> => {\n if (!nativeAccessClaimed) return null\n return await dispatchNative((api) => api?.loadClientStatePartition?.(accessToken, key), \"client_state_load_partition\", { key }) ?? null\n}\nexport const setNativeRestoreEnabled = (enabled: boolean): Promise<boolean> =>\n mutateNativeClientState((api) => api.setClientStateRestoreEnabled?.(accessToken, enabled), \"client_state_set_restore_enabled\", { enabled })\nexport const clearNativeClientState = (): Promise<boolean> =>\n mutateNativeClientState((api) => api.clearClientState?.(accessToken), \"client_state_clear\")\nfunction acknowledge(command: string, args: Record<string, unknown> = {}): Promise<void> {\n if (!isTauriHost() || !nativeAccessClaimed) return Promise.resolve()\n return invoke(command, { accessToken, ...args })\n}\nexport const acknowledgeNativeClientStateNavigationFlush = (generation: number) =>\n acknowledge(\"client_state_navigation_flushed\", { generation })\nexport const acknowledgeNativeClientStateRendererFlush = (generation: number) =>\n acknowledge(\"client_state_renderer_flushed\", { generation })\n\n/**\n * Lets the host forward startup-state commands from the Preferences window to\n * this local window only. Tauri replies with this renderer's access proof.\n */\nexport async function installNativeStartupStateCommandHandler(\n run: (command: StartupStateCommand) => Promise<StartupStateSnapshot>,\n): Promise<() => void> {\n if (!isLocalWindow()) return () => undefined\n if (isElectronHost()) {\n const handler = (command: unknown) => {\n if (!isStartupStateCommand(command)) return Promise.reject(new Error(\"Invalid startup state command\"))\n return run(command)\n }\n window.__CODENOMAD_STARTUP_STATE_COMMAND__ = handler\n return () => {\n if (window.__CODENOMAD_STARTUP_STATE_COMMAND__ === handler) delete window.__CODENOMAD_STARTUP_STATE_COMMAND__\n }\n }\n if (!isTauriHost()) return () => undefined\n return listen<{ id: number; windowId: unknown; command: unknown }>(\"client-state:startup-command\", ({ payload }) => {\n // Tauri delivers events to every Any-target listener; act only for this window.\n if (!Number.isSafeInteger(payload?.id) || payload.windowId !== window.__CODENOMAD_WINDOW_ID__) return\n if (!isStartupStateCommand(payload.command)) return\n void run(payload.command)\n .then((state) => acknowledge(\"client_state_startup_command_result\", { id: payload.id, stateResult: state }))\n .catch((error) => {\n log.warn(\"Startup state command failed\", error)\n return acknowledge(\"client_state_startup_command_result\", { id: payload.id, stateResult: null })\n })\n .catch((error) => log.warn(\"Startup state command result was not delivered\", error))\n })\n}\n"],"names":["LEGACY_WEB_KEYS","SECONDARY_CLIENT_STATE","log","getLogger","accessToken","bytes","byte","nativeAccessClaimed","electronApi","dispatchNative","electronOperation","command","args","isElectronHost","isTauriHost","invoke","claimNativeClientStateAccess","isLocalWindow","result","api","_a","error","loadNativeClientState","loaded","key","mutateNativeClientState","saveNativeClientState","snapshot","commitNativeClientStatePartitions","payload","loadNativeClientStatePartition","setNativeRestoreEnabled","enabled","clearNativeClientState","acknowledge","acknowledgeNativeClientStateNavigationFlush","generation","acknowledgeNativeClientStateRendererFlush","installNativeStartupStateCommandHandler","run","handler","isStartupStateCommand","listen","state"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client-state-Pknghd0N.js","sources":["../../../lib/native/client-state.ts"],"sourcesContent":["import { invoke } from \"@tauri-apps/api/core\"\nimport { listen } from \"@tauri-apps/api/event\"\nimport { isElectronHost, isLocalWindow, isTauriHost } from \"../runtime-env\"\nimport { getLogger } from \"../logger\"\nimport { isStartupStateCommand, type StartupStateCommand, type StartupStateSnapshot } from \"./startup-state-command\"\nconst LEGACY_WEB_KEYS = [\"codenomad-client-snapshot-v1\", \"codenomad-client-restore-enabled-v1\"]\nexport type NativeClientStateLoadResult = {\n isPrimary: boolean\n restoreEnabled: boolean\n snapshot: unknown | null\n partitionProtocolVersion?: 1\n}\nexport type NativeClientStatePartitionCommit = {\n protocolVersion: 1\n snapshot: unknown\n partitions: Record<string, string>\n partitionKeys: string[]\n}\nconst SECONDARY_CLIENT_STATE: NativeClientStateLoadResult = { isPrimary: false, restoreEnabled: false, snapshot: null }\nconst log = getLogger(\"actions\")\nconst accessToken = (() => {\n const bytes = new Uint8Array(32)\n globalThis.crypto.getRandomValues(bytes)\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\"\")\n})()\nlet nativeAccessClaimed = false\nconst electronApi = () => (window as Window & { electronAPI?: ElectronAPI }).electronAPI\nfunction dispatchNative<T>(electronOperation: (api: ElectronAPI | undefined) => Promise<T> | undefined, command: string, args: Record<string, unknown> = {}): Promise<T> | undefined {\n if (isElectronHost()) return electronOperation(electronApi())\n if (isTauriHost()) return invoke<T>(command, { accessToken, ...args })\n}\nasync function claimNativeClientStateAccess(): Promise<boolean> {\n if (!isLocalWindow()) return false\n try {\n const result = await dispatchNative<boolean | void>((api) => api?.claimClientStateAccess?.(accessToken), \"client_state_claim_access\")\n nativeAccessClaimed = isTauriHost() || result === true\n } catch (error) {\n nativeAccessClaimed = false\n log.warn(\"Client state native access claim failed\", error)\n }\n return nativeAccessClaimed\n}\nexport async function loadNativeClientState(): Promise<NativeClientStateLoadResult> {\n if (isElectronHost() || isTauriHost()) {\n if (!await claimNativeClientStateAccess()) return SECONDARY_CLIENT_STATE\n const loaded = await dispatchNative((api) => api?.loadClientState?.(accessToken), \"client_state_load\") ?? SECONDARY_CLIENT_STATE\n if (!isElectronHost()) return loaded\n const api = electronApi()\n return {\n ...loaded,\n partitionProtocolVersion: loaded.partitionProtocolVersion === 1\n && typeof api?.commitClientStatePartitions === \"function\"\n && typeof api.loadClientStatePartition === \"function\" ? 1 : undefined,\n }\n }\n try {\n for (const key of LEGACY_WEB_KEYS) window.localStorage.removeItem(key)\n } catch {}\n return SECONDARY_CLIENT_STATE\n}\nasync function mutateNativeClientState(electronOperation: (api: ElectronAPI) => Promise<boolean> | undefined, command: string, args: Record<string, unknown> = {}): Promise<boolean> {\n if (!nativeAccessClaimed) return false\n return await dispatchNative((api) => api && electronOperation(api), command, args) ?? false\n}\nexport const saveNativeClientState = (snapshot: unknown): Promise<boolean> =>\n mutateNativeClientState((api) => api.saveClientState?.(accessToken, snapshot), \"client_state_save\", { snapshot })\nexport const commitNativeClientStatePartitions = (payload: NativeClientStatePartitionCommit): Promise<boolean> =>\n mutateNativeClientState((api) => api.commitClientStatePartitions?.(accessToken, payload), \"client_state_commit_partitions\", { payload })\nexport const loadNativeClientStatePartition = async (key: string): Promise<string | null> => {\n if (!nativeAccessClaimed) return null\n return await dispatchNative((api) => api?.loadClientStatePartition?.(accessToken, key), \"client_state_load_partition\", { key }) ?? null\n}\nexport const setNativeRestoreEnabled = (enabled: boolean): Promise<boolean> =>\n mutateNativeClientState((api) => api.setClientStateRestoreEnabled?.(accessToken, enabled), \"client_state_set_restore_enabled\", { enabled })\nexport const clearNativeClientState = (): Promise<boolean> =>\n mutateNativeClientState((api) => api.clearClientState?.(accessToken), \"client_state_clear\")\nfunction acknowledge(command: string, args: Record<string, unknown> = {}): Promise<void> {\n if (!isTauriHost() || !nativeAccessClaimed) return Promise.resolve()\n return invoke(command, { accessToken, ...args })\n}\nexport const acknowledgeNativeClientStateNavigationFlush = (generation: number) =>\n acknowledge(\"client_state_navigation_flushed\", { generation })\nexport const acknowledgeNativeClientStateRendererFlush = (generation: number) =>\n acknowledge(\"client_state_renderer_flushed\", { generation })\n\n/**\n * Lets the host forward startup-state commands from the Preferences window to\n * this local window only. Tauri replies with this renderer's access proof.\n */\nexport async function installNativeStartupStateCommandHandler(\n run: (command: StartupStateCommand) => Promise<StartupStateSnapshot>,\n): Promise<() => void> {\n if (!isLocalWindow()) return () => undefined\n if (isElectronHost()) {\n const handler = (command: unknown) => {\n if (!isStartupStateCommand(command)) return Promise.reject(new Error(\"Invalid startup state command\"))\n return run(command)\n }\n window.__CODENOMAD_STARTUP_STATE_COMMAND__ = handler\n return () => {\n if (window.__CODENOMAD_STARTUP_STATE_COMMAND__ === handler) delete window.__CODENOMAD_STARTUP_STATE_COMMAND__\n }\n }\n if (!isTauriHost()) return () => undefined\n return listen<{ id: number; windowId: unknown; command: unknown }>(\"client-state:startup-command\", ({ payload }) => {\n // Tauri delivers events to every Any-target listener; act only for this window.\n if (!Number.isSafeInteger(payload?.id) || payload.windowId !== window.__CODENOMAD_WINDOW_ID__) return\n if (!isStartupStateCommand(payload.command)) return\n void run(payload.command)\n .then((state) => acknowledge(\"client_state_startup_command_result\", { id: payload.id, stateResult: state }))\n .catch((error) => {\n log.warn(\"Startup state command failed\", error)\n return acknowledge(\"client_state_startup_command_result\", { id: payload.id, stateResult: null })\n })\n .catch((error) => log.warn(\"Startup state command result was not delivered\", error))\n })\n}\n"],"names":["LEGACY_WEB_KEYS","SECONDARY_CLIENT_STATE","log","getLogger","accessToken","bytes","byte","nativeAccessClaimed","electronApi","dispatchNative","electronOperation","command","args","isElectronHost","isTauriHost","invoke","claimNativeClientStateAccess","isLocalWindow","result","api","_a","error","loadNativeClientState","loaded","key","mutateNativeClientState","saveNativeClientState","snapshot","commitNativeClientStatePartitions","payload","loadNativeClientStatePartition","setNativeRestoreEnabled","enabled","clearNativeClientState","acknowledge","acknowledgeNativeClientStateNavigationFlush","generation","acknowledgeNativeClientStateRendererFlush","installNativeStartupStateCommandHandler","run","handler","isStartupStateCommand","listen","state"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as t,s as r,c as a,r as i,a as s}from"./client-state-DseolAb6.js";import"./git-diff-vendor-CINvIzmQ.js";import"./fast-diff-vendor-DgdwVvTQ.js";import"./highlight-vendor-8FKMu9os.js";import"./client-state-Pknghd0N.js";import"./index-bgLguS1D.js";import"./monaco-viewer-DdD9wg1H.js";import"./main-RhkO2_V4.js";async function f(e){return await t(),e==="enable-restore"||e==="disable-restore"?await r(e==="enable-restore"):e==="clear"&&await a(),{isPrimary:s(),restoreEnabled:i()}}export{f as runStartupStateCommand};
|
|
2
|
+
//# sourceMappingURL=client-state-owner-commands-we9M_k_R.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-state-owner-commands-
|
|
1
|
+
{"version":3,"file":"client-state-owner-commands-we9M_k_R.js","sources":["../../../stores/client-state-owner-commands.ts"],"sourcesContent":["import {\n clearRestoredClientState, clientStateIsPrimary, initializeClientState,\n restorePreviousStateEnabled, setRestorePreviousStateEnabled,\n} from \"./client-state\"\nimport type { StartupStateCommand, StartupStateSnapshot } from \"../lib/native/startup-state-command\"\n\n/**\n * Runs a Preferences-originated startup-state command inside the owning local\n * window, through the same store transitions as its inline settings card.\n */\nexport async function runStartupStateCommand(command: StartupStateCommand): Promise<StartupStateSnapshot> {\n await initializeClientState()\n if (command === \"enable-restore\" || command === \"disable-restore\") {\n await setRestorePreviousStateEnabled(command === \"enable-restore\")\n } else if (command === \"clear\") {\n await clearRestoredClientState()\n }\n return { isPrimary: clientStateIsPrimary(), restoreEnabled: restorePreviousStateEnabled() }\n}\n"],"names":["runStartupStateCommand","command","initializeClientState","setRestorePreviousStateEnabled","clearRestoredClientState","clientStateIsPrimary","restorePreviousStateEnabled"],"mappings":"6TAUA,eAAsBA,EAAuBC,EAA6D,CACxG,aAAMC,EAAA,EACFD,IAAY,kBAAoBA,IAAY,kBAC9C,MAAME,EAA+BF,IAAY,gBAAgB,EACxDA,IAAY,SACrB,MAAMG,EAAA,EAED,CAAE,UAAWC,EAAA,EAAwB,eAAgBC,GAA4B,CAC1F"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{bu as _,t as b,i as x,u as E,m as V,h as B}from"./monaco-viewer-DdD9wg1H.js";import{a as L,d as D,k as p,c as F,S as T,E as z,D as G,G as $,H as U}from"./git-diff-vendor-CINvIzmQ.js";import{bm as N,bD as K}from"./main-
|
|
2
|
-
//# sourceMappingURL=diff-viewer-
|
|
1
|
+
import{bu as _,t as b,i as x,u as E,m as V,h as B}from"./monaco-viewer-DdD9wg1H.js";import{a as L,d as D,k as p,c as F,S as T,E as z,D as G,G as $,H as U}from"./git-diff-vendor-CINvIzmQ.js";import{bm as N,bD as K}from"./main-RhkO2_V4.js";import"./fast-diff-vendor-DgdwVvTQ.js";import"./highlight-vendor-8FKMu9os.js";import"./index-bgLguS1D.js";var q=b("<div>"),O=b("<div class=tool-call-diff-viewer>"),P=b("<pre class=tool-call-diff-fallback>");const j=B("session");U();function I(e,s,o){const a=window.getComputedStyle(o),i=document.createElement("span");i.textContent=s||"",i.style.position="absolute",i.style.visibility="hidden",i.style.pointerEvents="none",i.style.display="inline-block",i.style.width="auto",i.style.maxWidth="none",i.style.whiteSpace="nowrap",i.style.fontFamily=a.fontFamily,i.style.fontSize=a.fontSize,i.style.fontWeight=a.fontWeight,i.style.fontStyle=a.fontStyle,i.style.letterSpacing=a.letterSpacing,i.style.fontVariant=a.fontVariant,i.style.textTransform=a.textTransform,i.style.lineHeight=a.lineHeight,e.appendChild(i);const f=Math.ceil(i.getBoundingClientRect().width);return i.remove(),f}function M(e,s,o=40){const a=s.reduce((l,n)=>Math.max(l,I(e,n.text,n.source)),0),i=s.reduce((l,n)=>Math.max(l,n.text.length),1),f=Math.round(i*7+4);return Math.max(2,Math.min(o,a>0?a+2:f))}function J(e,s){const o=e.querySelector(".unified-diff-table-wrapper"),a=e.querySelector(".unified-diff-table"),i=e.querySelector(".unified-diff-table-num-col"),f=e.querySelectorAll(".diff-line-num"),l=e.querySelectorAll(".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper"),n=[];a&&(s?(a.classList.add("table-fixed"),a.style.tableLayout="fixed",a.style.width="100%",a.style.minWidth="100%"):(a.classList.remove("table-fixed"),a.style.tableLayout="auto",a.style.width="max-content",a.style.minWidth="100%")),f.forEach(r=>{var v,k;const c=r.querySelector("[data-line-old-num]"),m=r.querySelector("[data-line-new-num]"),W=r.querySelector(".shrink-0"),S=r.querySelector(":scope > .flex"),C=r.querySelector(":scope > .tool-call-diff-compact-line-number"),y=((v=c==null?void 0:c.textContent)==null?void 0:v.trim())??"",w=((k=m==null?void 0:m.textContent)==null?void 0:k.trim())??"",H=w.length>0&&w!=="0",R=y.length>0&&y!=="0",g=H?w:R?y:w||y;S&&(S.style.display="none"),W&&(W.style.display="none"),c&&(c.style.display="none",c.style.width="auto"),m&&(m.style.display="none",m.style.width="auto"),r.style.paddingLeft="1px",r.style.paddingRight="1px",r.style.textAlign="left";const u=C??document.createElement("span");u.className="tool-call-diff-compact-line-number",u.textContent=g,u.setAttribute("aria-hidden",g?"false":"true"),C||r.appendChild(u),n.push({gutter:r,label:u,text:g})});const t=M(e,n.map(r=>({text:r.text,source:r.label}))),d=`${t}px`,h=`${Math.max(8,t-10)}px`;o&&(o.style.setProperty("--diff-aside-width",h),o.style.setProperty("--diff-aside-width--",h)),i&&(i.style.width=d),n.forEach(({gutter:r,label:c})=>{r.style.width=d,r.style.minWidth=d,r.style.maxWidth=d,c.style.width="auto",c.style.maxWidth="none"}),l.forEach(r=>{r.style.width=d,r.style.minWidth=d,r.style.maxWidth=d,r.style.paddingLeft="0",r.style.paddingRight="0"})}function Q(e){const s=e.querySelector(".old-diff-table-wrapper"),o=e.querySelector(".new-diff-table-wrapper"),a=Array.from(e.querySelectorAll(".diff-line-old-num, .diff-line-new-num")),i=Array.from(e.querySelectorAll(".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper")),f=a.map(t=>({cell:t,span:t.querySelector("[data-line-num]")})).filter(t=>!!t.span),n=`${M(e,f.map(({span:t})=>{var d;return{text:((d=t.textContent)==null?void 0:d.trim())??"",source:t}}),64)}px`;[s,o].forEach(t=>{t&&t.style.setProperty("--diff-aside-width",n)}),a.forEach(t=>{t.style.width=n,t.style.minWidth=n,t.style.maxWidth=n,t.style.paddingLeft="2px",t.style.paddingRight="2px",t.style.textAlign="left",t.style.whiteSpace="nowrap",t.style.overflowWrap="normal",t.style.wordBreak="normal"}),f.forEach(({span:t})=>{t.style.whiteSpace="nowrap",t.style.overflowWrap="normal",t.style.wordBreak="normal"}),i.forEach(t=>{t.style.width=n,t.style.minWidth=n,t.style.maxWidth=n,t.style.paddingLeft="0",t.style.paddingRight="0"})}function A(e,s,o=!1){if(s==="unified"){J(e,o);return}s==="split"&&Q(e)}function ne(e){const s=L(()=>{const f=_(e.diffText);if(!f)return null;const l=N(e.filePath)||"text",n=e.filePath||"diff";return{oldFile:{fileName:n,fileLang:l},newFile:{fileName:n,fileLang:l},hunks:[f]}});let o,a;const i=L(()=>s()?`${e.theme}|${e.mode}|${e.wrap?"wrap":"nowrap"}|${e.diffText}`:"");return D(()=>{var n;if(e.cachedHtml){o&&A(o,e.mode,!!e.wrap),(n=e.onRendered)==null||n.call(e);return}const l=i();l&&o&&a!==l&&requestAnimationFrame(()=>{var d;if(!o)return;A(o,e.mode,!!e.wrap);const t=o.innerHTML;t&&(a=l,e.cacheEntryParams&&K(e.cacheEntryParams,{text:e.diffText,html:t,theme:e.theme,mode:e.mode,wrap:e.wrap}),(d=e.onRendered)==null||d.call(e))})}),(()=>{var f=O();return x(f,p(T,{get when(){return e.cachedHtml},get fallback(){return(()=>{var l=q(),n=o;return typeof n=="function"?E(n,l):o=l,x(l,p(T,{get when(){return s()},get fallback(){return(()=>{var t=P();return x(t,()=>e.diffText),t})()},children:t=>p(z,{fallback:d=>(j.warn("Failed to render diff view",d),(()=>{var h=P();return x(h,()=>e.diffText),h})()),get children(){return p(G,{get data(){return t()},get diffViewMode(){return V(()=>e.mode==="split")()?$.Split:$.Unified},get diffViewTheme(){return e.theme},diffViewHighlight:!0,get diffViewWrap(){return!!e.wrap},diffViewFontSize:13})}})})),l})()},get children(){var l=q(),n=o;return typeof n=="function"?E(n,l):o=l,F(()=>l.innerHTML=e.cachedHtml),l}})),f})()}export{ne as ToolCallDiffViewer};
|
|
2
|
+
//# sourceMappingURL=diff-viewer-DzwcL4Zt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff-viewer-c2DdbKd2.js","sources":["../../../components/diff-viewer.tsx"],"sourcesContent":["import { createMemo, Show, createEffect } from \"solid-js\"\nimport { DiffView, DiffModeEnum } from \"@git-diff-view/solid\"\nimport \"@git-diff-view/solid/styles/diff-view-pure.css\"\nimport { disableCache } from \"@git-diff-view/core\"\nimport type { DiffHighlighterLang } from \"@git-diff-view/core\"\nimport { ErrorBoundary } from \"solid-js\"\nimport { getLanguageFromPath } from \"../lib/text-render-utils\"\nimport { normalizeDiffText } from \"../lib/diff-utils\"\nimport { setCacheEntry } from \"../lib/global-cache\"\nimport type { CacheEntryParams } from \"../lib/global-cache\"\nimport type { DiffViewMode } from \"../stores/preferences\"\nimport { getLogger } from \"../lib/logger\"\nconst log = getLogger(\"session\")\n\n\ndisableCache()\n\ninterface ToolCallDiffViewerProps {\n diffText: string\n filePath?: string\n theme: \"light\" | \"dark\"\n mode: DiffViewMode\n wrap?: boolean\n onRendered?: () => void\n cachedHtml?: string\n cacheEntryParams?: CacheEntryParams\n}\n\ntype DiffData = {\n oldFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null }\n newFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null }\n hunks: string[]\n}\n\nfunction measureTextWidth(container: HTMLElement, text: string, source: HTMLElement) {\n const computed = window.getComputedStyle(source)\n const probe = document.createElement(\"span\")\n probe.textContent = text || \"\"\n probe.style.position = \"absolute\"\n probe.style.visibility = \"hidden\"\n probe.style.pointerEvents = \"none\"\n probe.style.display = \"inline-block\"\n probe.style.width = \"auto\"\n probe.style.maxWidth = \"none\"\n probe.style.whiteSpace = \"nowrap\"\n probe.style.fontFamily = computed.fontFamily\n probe.style.fontSize = computed.fontSize\n probe.style.fontWeight = computed.fontWeight\n probe.style.fontStyle = computed.fontStyle\n probe.style.letterSpacing = computed.letterSpacing\n probe.style.fontVariant = computed.fontVariant\n probe.style.textTransform = computed.textTransform\n probe.style.lineHeight = computed.lineHeight\n container.appendChild(probe)\n const width = Math.ceil(probe.getBoundingClientRect().width)\n probe.remove()\n return width\n}\n\nfunction computeCompactWidth(\n container: HTMLElement,\n entries: Array<{ text: string; source: HTMLElement }>,\n maxWidthPx = 40,\n) {\n const measuredLabelWidthPx = entries.reduce((max, entry) => {\n return Math.max(max, measureTextWidth(container, entry.text, entry.source))\n }, 0)\n const fallbackTextLength = entries.reduce((max, entry) => Math.max(max, entry.text.length), 1)\n const fallbackWidthPx = Math.round(fallbackTextLength * 7 + 4)\n return Math.max(2, Math.min(maxWidthPx, measuredLabelWidthPx > 0 ? measuredLabelWidthPx + 2 : fallbackWidthPx))\n}\n\nfunction applyCompactUnifiedGutter(container: HTMLElement, wrap: boolean) {\n const tableWrapper = container.querySelector<HTMLElement>(\".unified-diff-table-wrapper\")\n const table = container.querySelector<HTMLTableElement>(\".unified-diff-table\")\n const numberCol = container.querySelector<HTMLTableColElement>(\".unified-diff-table-num-col\")\n const gutterRows = container.querySelectorAll<HTMLElement>(\".diff-line-num\")\n const hunkGutters = container.querySelectorAll<HTMLElement>(\".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper\")\n const entries: Array<{ gutter: HTMLElement; label: HTMLElement; text: string }> = []\n\n if (table) {\n if (wrap) {\n table.classList.add(\"table-fixed\")\n table.style.tableLayout = \"fixed\"\n table.style.width = \"100%\"\n table.style.minWidth = \"100%\"\n } else {\n table.classList.remove(\"table-fixed\")\n table.style.tableLayout = \"auto\"\n table.style.width = \"max-content\"\n table.style.minWidth = \"100%\"\n }\n }\n\n gutterRows.forEach((gutter) => {\n const oldSpan = gutter.querySelector<HTMLElement>(\"[data-line-old-num]\")\n const newSpan = gutter.querySelector<HTMLElement>(\"[data-line-new-num]\")\n const spacer = gutter.querySelector<HTMLElement>(\".shrink-0\")\n const flexWrapper = gutter.querySelector<HTMLElement>(\":scope > .flex\")\n const currentLabel = gutter.querySelector<HTMLElement>(\":scope > .tool-call-diff-compact-line-number\")\n\n const oldText = oldSpan?.textContent?.trim() ?? \"\"\n const newText = newSpan?.textContent?.trim() ?? \"\"\n const hasUsableNew = newText.length > 0 && newText !== \"0\"\n const hasUsableOld = oldText.length > 0 && oldText !== \"0\"\n const visibleText = hasUsableNew ? newText : hasUsableOld ? oldText : newText || oldText\n\n if (flexWrapper) flexWrapper.style.display = \"none\"\n if (spacer) spacer.style.display = \"none\"\n if (oldSpan) { oldSpan.style.display = \"none\"; oldSpan.style.width = \"auto\" }\n if (newSpan) { newSpan.style.display = \"none\"; newSpan.style.width = \"auto\" }\n\n gutter.style.paddingLeft = \"1px\"\n gutter.style.paddingRight = \"1px\"\n gutter.style.textAlign = \"left\"\n\n const label = currentLabel ?? document.createElement(\"span\")\n label.className = \"tool-call-diff-compact-line-number\"\n label.textContent = visibleText\n label.setAttribute(\"aria-hidden\", visibleText ? \"false\" : \"true\")\n if (!currentLabel) gutter.appendChild(label)\n\n entries.push({ gutter, label, text: visibleText })\n })\n\n const gutterWidthPx = computeCompactWidth(container, entries.map((entry) => ({ text: entry.text, source: entry.label })))\n const gutterWidth = `${gutterWidthPx}px`\n const compactAsideWidth = `${Math.max(8, gutterWidthPx - 10)}px`\n\n if (tableWrapper) {\n tableWrapper.style.setProperty(\"--diff-aside-width\", compactAsideWidth)\n tableWrapper.style.setProperty(\"--diff-aside-width--\", compactAsideWidth)\n }\n if (numberCol) {\n numberCol.style.width = gutterWidth\n }\n\n entries.forEach(({ gutter, label }) => {\n gutter.style.width = gutterWidth\n gutter.style.minWidth = gutterWidth\n gutter.style.maxWidth = gutterWidth\n label.style.width = \"auto\"\n label.style.maxWidth = \"none\"\n })\n\n hunkGutters.forEach((gutter) => {\n gutter.style.width = gutterWidth\n gutter.style.minWidth = gutterWidth\n gutter.style.maxWidth = gutterWidth\n gutter.style.paddingLeft = \"0\"\n gutter.style.paddingRight = \"0\"\n })\n}\n\nfunction applyCompactSplitGutter(container: HTMLElement) {\n const oldWrapper = container.querySelector<HTMLElement>(\".old-diff-table-wrapper\")\n const newWrapper = container.querySelector<HTMLElement>(\".new-diff-table-wrapper\")\n const numberCells = Array.from(container.querySelectorAll<HTMLElement>(\".diff-line-old-num, .diff-line-new-num\"))\n const hunkActions = Array.from(container.querySelectorAll<HTMLElement>(\".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper\"))\n const numberSpans = numberCells\n .map((cell) => ({ cell, span: cell.querySelector<HTMLElement>(\"[data-line-num]\") }))\n .filter((entry): entry is { cell: HTMLElement; span: HTMLElement } => Boolean(entry.span))\n\n const gutterWidthPx = computeCompactWidth(\n container,\n numberSpans.map(({ span }) => ({ text: span.textContent?.trim() ?? \"\", source: span })),\n 64,\n )\n const gutterWidth = `${gutterWidthPx}px`\n\n ;[oldWrapper, newWrapper].forEach((wrapper) => {\n if (wrapper) {\n wrapper.style.setProperty(\"--diff-aside-width\", gutterWidth)\n }\n })\n\n numberCells.forEach((cell) => {\n cell.style.width = gutterWidth\n cell.style.minWidth = gutterWidth\n cell.style.maxWidth = gutterWidth\n cell.style.paddingLeft = \"2px\"\n cell.style.paddingRight = \"2px\"\n cell.style.textAlign = \"left\"\n cell.style.whiteSpace = \"nowrap\"\n cell.style.overflowWrap = \"normal\"\n cell.style.wordBreak = \"normal\"\n })\n\n numberSpans.forEach(({ span }) => {\n span.style.whiteSpace = \"nowrap\"\n span.style.overflowWrap = \"normal\"\n span.style.wordBreak = \"normal\"\n })\n\n hunkActions.forEach((cell) => {\n cell.style.width = gutterWidth\n cell.style.minWidth = gutterWidth\n cell.style.maxWidth = gutterWidth\n cell.style.paddingLeft = \"0\"\n cell.style.paddingRight = \"0\"\n })\n}\n\nfunction applyCompactDiffLayout(container: HTMLElement, mode: DiffViewMode, wrap = false) {\n if (mode === \"unified\") {\n applyCompactUnifiedGutter(container, wrap)\n return\n }\n if (mode === \"split\") {\n applyCompactSplitGutter(container)\n }\n}\n\nexport function ToolCallDiffViewer(props: ToolCallDiffViewerProps) {\n const diffData = createMemo<DiffData | null>(() => {\n const normalized = normalizeDiffText(props.diffText)\n if (!normalized) {\n return null\n }\n \n const language = getLanguageFromPath(props.filePath) || \"text\"\n const fileName = props.filePath || \"diff\"\n \n return {\n oldFile: {\n fileName,\n fileLang: (language || \"text\") as DiffHighlighterLang | null,\n },\n newFile: {\n fileName,\n fileLang: (language || \"text\") as DiffHighlighterLang | null,\n },\n hunks: [normalized],\n }\n })\n \n let diffContainerRef: HTMLDivElement | undefined\n let lastCapturedKey: string | undefined\n \n const contextKey = createMemo(() => {\n const data = diffData()\n if (!data) return \"\"\n return `${props.theme}|${props.mode}|${props.wrap ? \"wrap\" : \"nowrap\"}|${props.diffText}`\n })\n \n createEffect(() => {\n const cachedHtml = props.cachedHtml\n if (cachedHtml) {\n if (diffContainerRef) {\n applyCompactDiffLayout(diffContainerRef, props.mode, Boolean(props.wrap))\n }\n // When we are given cached HTML, we rely on the caller's cache\n // and simply notify once rendered.\n props.onRendered?.()\n return\n }\n \n const key = contextKey()\n if (!key) return\n if (!diffContainerRef) return\n if (lastCapturedKey === key) return\n\n requestAnimationFrame(() => {\n if (!diffContainerRef) return\n applyCompactDiffLayout(diffContainerRef, props.mode, Boolean(props.wrap))\n const markup = diffContainerRef.innerHTML\n if (!markup) return\n lastCapturedKey = key\n if (props.cacheEntryParams) {\n setCacheEntry(props.cacheEntryParams, {\n text: props.diffText,\n html: markup,\n theme: props.theme,\n mode: props.mode,\n wrap: props.wrap,\n })\n }\n props.onRendered?.()\n })\n })\n\n\n return (\n <div class=\"tool-call-diff-viewer\">\n <Show\n when={props.cachedHtml}\n fallback={\n <div ref={diffContainerRef}>\n <Show\n when={diffData()}\n fallback={<pre class=\"tool-call-diff-fallback\">{props.diffText}</pre>}\n >\n {(data) => (\n <ErrorBoundary fallback={(error) => {\n log.warn(\"Failed to render diff view\", error)\n return <pre class=\"tool-call-diff-fallback\">{props.diffText}</pre>\n }}>\n <DiffView\n data={data()}\n diffViewMode={props.mode === \"split\" ? DiffModeEnum.Split : DiffModeEnum.Unified}\n diffViewTheme={props.theme}\n diffViewHighlight\n diffViewWrap={Boolean(props.wrap)}\n diffViewFontSize={13}\n />\n </ErrorBoundary>\n )}\n </Show>\n </div>\n }\n >\n <div ref={diffContainerRef} innerHTML={props.cachedHtml} />\n </Show>\n </div>\n )\n}\n"],"names":["log","getLogger","disableCache","measureTextWidth","container","text","source","computed","window","getComputedStyle","probe","document","createElement","textContent","style","position","visibility","pointerEvents","display","width","maxWidth","whiteSpace","fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","fontVariant","textTransform","lineHeight","appendChild","Math","ceil","getBoundingClientRect","remove","computeCompactWidth","entries","maxWidthPx","measuredLabelWidthPx","reduce","max","entry","fallbackTextLength","length","fallbackWidthPx","round","min","applyCompactUnifiedGutter","wrap","tableWrapper","querySelector","table","numberCol","gutterRows","querySelectorAll","hunkGutters","classList","add","tableLayout","minWidth","forEach","gutter","oldSpan","newSpan","spacer","flexWrapper","currentLabel","oldText","trim","newText","hasUsableNew","hasUsableOld","visibleText","paddingLeft","paddingRight","textAlign","label","className","setAttribute","push","gutterWidthPx","map","gutterWidth","compactAsideWidth","setProperty","applyCompactSplitGutter","oldWrapper","newWrapper","numberCells","Array","from","hunkActions","numberSpans","cell","span","filter","Boolean","wrapper","overflowWrap","wordBreak","applyCompactDiffLayout","mode","ToolCallDiffViewer","props","diffData","createMemo","normalized","normalizeDiffText","diffText","language","getLanguageFromPath","filePath","fileName","oldFile","fileLang","newFile","hunks","diffContainerRef","lastCapturedKey","contextKey","theme","createEffect","cachedHtml","onRendered","key","requestAnimationFrame","markup","innerHTML","cacheEntryParams","setCacheEntry","html","_el$","_tmpl$2","_$insert","_$createComponent","Show","when","fallback","_el$3","_tmpl$","_ref$2","_$use","_el$4","_tmpl$3","children","data","ErrorBoundary","error","warn","_el$5","DiffView","diffViewMode","_$memo","DiffModeEnum","Split","Unified","diffViewTheme","diffViewHighlight","diffViewWrap","diffViewFontSize","_el$2","_ref$","_$effect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diff-viewer-DzwcL4Zt.js","sources":["../../../components/diff-viewer.tsx"],"sourcesContent":["import { createMemo, Show, createEffect } from \"solid-js\"\nimport { DiffView, DiffModeEnum } from \"@git-diff-view/solid\"\nimport \"@git-diff-view/solid/styles/diff-view-pure.css\"\nimport { disableCache } from \"@git-diff-view/core\"\nimport type { DiffHighlighterLang } from \"@git-diff-view/core\"\nimport { ErrorBoundary } from \"solid-js\"\nimport { getLanguageFromPath } from \"../lib/text-render-utils\"\nimport { normalizeDiffText } from \"../lib/diff-utils\"\nimport { setCacheEntry } from \"../lib/global-cache\"\nimport type { CacheEntryParams } from \"../lib/global-cache\"\nimport type { DiffViewMode } from \"../stores/preferences\"\nimport { getLogger } from \"../lib/logger\"\nconst log = getLogger(\"session\")\n\n\ndisableCache()\n\ninterface ToolCallDiffViewerProps {\n diffText: string\n filePath?: string\n theme: \"light\" | \"dark\"\n mode: DiffViewMode\n wrap?: boolean\n onRendered?: () => void\n cachedHtml?: string\n cacheEntryParams?: CacheEntryParams\n}\n\ntype DiffData = {\n oldFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null }\n newFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null }\n hunks: string[]\n}\n\nfunction measureTextWidth(container: HTMLElement, text: string, source: HTMLElement) {\n const computed = window.getComputedStyle(source)\n const probe = document.createElement(\"span\")\n probe.textContent = text || \"\"\n probe.style.position = \"absolute\"\n probe.style.visibility = \"hidden\"\n probe.style.pointerEvents = \"none\"\n probe.style.display = \"inline-block\"\n probe.style.width = \"auto\"\n probe.style.maxWidth = \"none\"\n probe.style.whiteSpace = \"nowrap\"\n probe.style.fontFamily = computed.fontFamily\n probe.style.fontSize = computed.fontSize\n probe.style.fontWeight = computed.fontWeight\n probe.style.fontStyle = computed.fontStyle\n probe.style.letterSpacing = computed.letterSpacing\n probe.style.fontVariant = computed.fontVariant\n probe.style.textTransform = computed.textTransform\n probe.style.lineHeight = computed.lineHeight\n container.appendChild(probe)\n const width = Math.ceil(probe.getBoundingClientRect().width)\n probe.remove()\n return width\n}\n\nfunction computeCompactWidth(\n container: HTMLElement,\n entries: Array<{ text: string; source: HTMLElement }>,\n maxWidthPx = 40,\n) {\n const measuredLabelWidthPx = entries.reduce((max, entry) => {\n return Math.max(max, measureTextWidth(container, entry.text, entry.source))\n }, 0)\n const fallbackTextLength = entries.reduce((max, entry) => Math.max(max, entry.text.length), 1)\n const fallbackWidthPx = Math.round(fallbackTextLength * 7 + 4)\n return Math.max(2, Math.min(maxWidthPx, measuredLabelWidthPx > 0 ? measuredLabelWidthPx + 2 : fallbackWidthPx))\n}\n\nfunction applyCompactUnifiedGutter(container: HTMLElement, wrap: boolean) {\n const tableWrapper = container.querySelector<HTMLElement>(\".unified-diff-table-wrapper\")\n const table = container.querySelector<HTMLTableElement>(\".unified-diff-table\")\n const numberCol = container.querySelector<HTMLTableColElement>(\".unified-diff-table-num-col\")\n const gutterRows = container.querySelectorAll<HTMLElement>(\".diff-line-num\")\n const hunkGutters = container.querySelectorAll<HTMLElement>(\".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper\")\n const entries: Array<{ gutter: HTMLElement; label: HTMLElement; text: string }> = []\n\n if (table) {\n if (wrap) {\n table.classList.add(\"table-fixed\")\n table.style.tableLayout = \"fixed\"\n table.style.width = \"100%\"\n table.style.minWidth = \"100%\"\n } else {\n table.classList.remove(\"table-fixed\")\n table.style.tableLayout = \"auto\"\n table.style.width = \"max-content\"\n table.style.minWidth = \"100%\"\n }\n }\n\n gutterRows.forEach((gutter) => {\n const oldSpan = gutter.querySelector<HTMLElement>(\"[data-line-old-num]\")\n const newSpan = gutter.querySelector<HTMLElement>(\"[data-line-new-num]\")\n const spacer = gutter.querySelector<HTMLElement>(\".shrink-0\")\n const flexWrapper = gutter.querySelector<HTMLElement>(\":scope > .flex\")\n const currentLabel = gutter.querySelector<HTMLElement>(\":scope > .tool-call-diff-compact-line-number\")\n\n const oldText = oldSpan?.textContent?.trim() ?? \"\"\n const newText = newSpan?.textContent?.trim() ?? \"\"\n const hasUsableNew = newText.length > 0 && newText !== \"0\"\n const hasUsableOld = oldText.length > 0 && oldText !== \"0\"\n const visibleText = hasUsableNew ? newText : hasUsableOld ? oldText : newText || oldText\n\n if (flexWrapper) flexWrapper.style.display = \"none\"\n if (spacer) spacer.style.display = \"none\"\n if (oldSpan) { oldSpan.style.display = \"none\"; oldSpan.style.width = \"auto\" }\n if (newSpan) { newSpan.style.display = \"none\"; newSpan.style.width = \"auto\" }\n\n gutter.style.paddingLeft = \"1px\"\n gutter.style.paddingRight = \"1px\"\n gutter.style.textAlign = \"left\"\n\n const label = currentLabel ?? document.createElement(\"span\")\n label.className = \"tool-call-diff-compact-line-number\"\n label.textContent = visibleText\n label.setAttribute(\"aria-hidden\", visibleText ? \"false\" : \"true\")\n if (!currentLabel) gutter.appendChild(label)\n\n entries.push({ gutter, label, text: visibleText })\n })\n\n const gutterWidthPx = computeCompactWidth(container, entries.map((entry) => ({ text: entry.text, source: entry.label })))\n const gutterWidth = `${gutterWidthPx}px`\n const compactAsideWidth = `${Math.max(8, gutterWidthPx - 10)}px`\n\n if (tableWrapper) {\n tableWrapper.style.setProperty(\"--diff-aside-width\", compactAsideWidth)\n tableWrapper.style.setProperty(\"--diff-aside-width--\", compactAsideWidth)\n }\n if (numberCol) {\n numberCol.style.width = gutterWidth\n }\n\n entries.forEach(({ gutter, label }) => {\n gutter.style.width = gutterWidth\n gutter.style.minWidth = gutterWidth\n gutter.style.maxWidth = gutterWidth\n label.style.width = \"auto\"\n label.style.maxWidth = \"none\"\n })\n\n hunkGutters.forEach((gutter) => {\n gutter.style.width = gutterWidth\n gutter.style.minWidth = gutterWidth\n gutter.style.maxWidth = gutterWidth\n gutter.style.paddingLeft = \"0\"\n gutter.style.paddingRight = \"0\"\n })\n}\n\nfunction applyCompactSplitGutter(container: HTMLElement) {\n const oldWrapper = container.querySelector<HTMLElement>(\".old-diff-table-wrapper\")\n const newWrapper = container.querySelector<HTMLElement>(\".new-diff-table-wrapper\")\n const numberCells = Array.from(container.querySelectorAll<HTMLElement>(\".diff-line-old-num, .diff-line-new-num\"))\n const hunkActions = Array.from(container.querySelectorAll<HTMLElement>(\".diff-line-hunk-action, .diff-line-widget-wrapper, .diff-line-extend-wrapper\"))\n const numberSpans = numberCells\n .map((cell) => ({ cell, span: cell.querySelector<HTMLElement>(\"[data-line-num]\") }))\n .filter((entry): entry is { cell: HTMLElement; span: HTMLElement } => Boolean(entry.span))\n\n const gutterWidthPx = computeCompactWidth(\n container,\n numberSpans.map(({ span }) => ({ text: span.textContent?.trim() ?? \"\", source: span })),\n 64,\n )\n const gutterWidth = `${gutterWidthPx}px`\n\n ;[oldWrapper, newWrapper].forEach((wrapper) => {\n if (wrapper) {\n wrapper.style.setProperty(\"--diff-aside-width\", gutterWidth)\n }\n })\n\n numberCells.forEach((cell) => {\n cell.style.width = gutterWidth\n cell.style.minWidth = gutterWidth\n cell.style.maxWidth = gutterWidth\n cell.style.paddingLeft = \"2px\"\n cell.style.paddingRight = \"2px\"\n cell.style.textAlign = \"left\"\n cell.style.whiteSpace = \"nowrap\"\n cell.style.overflowWrap = \"normal\"\n cell.style.wordBreak = \"normal\"\n })\n\n numberSpans.forEach(({ span }) => {\n span.style.whiteSpace = \"nowrap\"\n span.style.overflowWrap = \"normal\"\n span.style.wordBreak = \"normal\"\n })\n\n hunkActions.forEach((cell) => {\n cell.style.width = gutterWidth\n cell.style.minWidth = gutterWidth\n cell.style.maxWidth = gutterWidth\n cell.style.paddingLeft = \"0\"\n cell.style.paddingRight = \"0\"\n })\n}\n\nfunction applyCompactDiffLayout(container: HTMLElement, mode: DiffViewMode, wrap = false) {\n if (mode === \"unified\") {\n applyCompactUnifiedGutter(container, wrap)\n return\n }\n if (mode === \"split\") {\n applyCompactSplitGutter(container)\n }\n}\n\nexport function ToolCallDiffViewer(props: ToolCallDiffViewerProps) {\n const diffData = createMemo<DiffData | null>(() => {\n const normalized = normalizeDiffText(props.diffText)\n if (!normalized) {\n return null\n }\n \n const language = getLanguageFromPath(props.filePath) || \"text\"\n const fileName = props.filePath || \"diff\"\n \n return {\n oldFile: {\n fileName,\n fileLang: (language || \"text\") as DiffHighlighterLang | null,\n },\n newFile: {\n fileName,\n fileLang: (language || \"text\") as DiffHighlighterLang | null,\n },\n hunks: [normalized],\n }\n })\n \n let diffContainerRef: HTMLDivElement | undefined\n let lastCapturedKey: string | undefined\n \n const contextKey = createMemo(() => {\n const data = diffData()\n if (!data) return \"\"\n return `${props.theme}|${props.mode}|${props.wrap ? \"wrap\" : \"nowrap\"}|${props.diffText}`\n })\n \n createEffect(() => {\n const cachedHtml = props.cachedHtml\n if (cachedHtml) {\n if (diffContainerRef) {\n applyCompactDiffLayout(diffContainerRef, props.mode, Boolean(props.wrap))\n }\n // When we are given cached HTML, we rely on the caller's cache\n // and simply notify once rendered.\n props.onRendered?.()\n return\n }\n \n const key = contextKey()\n if (!key) return\n if (!diffContainerRef) return\n if (lastCapturedKey === key) return\n\n requestAnimationFrame(() => {\n if (!diffContainerRef) return\n applyCompactDiffLayout(diffContainerRef, props.mode, Boolean(props.wrap))\n const markup = diffContainerRef.innerHTML\n if (!markup) return\n lastCapturedKey = key\n if (props.cacheEntryParams) {\n setCacheEntry(props.cacheEntryParams, {\n text: props.diffText,\n html: markup,\n theme: props.theme,\n mode: props.mode,\n wrap: props.wrap,\n })\n }\n props.onRendered?.()\n })\n })\n\n\n return (\n <div class=\"tool-call-diff-viewer\">\n <Show\n when={props.cachedHtml}\n fallback={\n <div ref={diffContainerRef}>\n <Show\n when={diffData()}\n fallback={<pre class=\"tool-call-diff-fallback\">{props.diffText}</pre>}\n >\n {(data) => (\n <ErrorBoundary fallback={(error) => {\n log.warn(\"Failed to render diff view\", error)\n return <pre class=\"tool-call-diff-fallback\">{props.diffText}</pre>\n }}>\n <DiffView\n data={data()}\n diffViewMode={props.mode === \"split\" ? DiffModeEnum.Split : DiffModeEnum.Unified}\n diffViewTheme={props.theme}\n diffViewHighlight\n diffViewWrap={Boolean(props.wrap)}\n diffViewFontSize={13}\n />\n </ErrorBoundary>\n )}\n </Show>\n </div>\n }\n >\n <div ref={diffContainerRef} innerHTML={props.cachedHtml} />\n </Show>\n </div>\n )\n}\n"],"names":["log","getLogger","disableCache","measureTextWidth","container","text","source","computed","window","getComputedStyle","probe","document","createElement","textContent","style","position","visibility","pointerEvents","display","width","maxWidth","whiteSpace","fontFamily","fontSize","fontWeight","fontStyle","letterSpacing","fontVariant","textTransform","lineHeight","appendChild","Math","ceil","getBoundingClientRect","remove","computeCompactWidth","entries","maxWidthPx","measuredLabelWidthPx","reduce","max","entry","fallbackTextLength","length","fallbackWidthPx","round","min","applyCompactUnifiedGutter","wrap","tableWrapper","querySelector","table","numberCol","gutterRows","querySelectorAll","hunkGutters","classList","add","tableLayout","minWidth","forEach","gutter","oldSpan","newSpan","spacer","flexWrapper","currentLabel","oldText","trim","newText","hasUsableNew","hasUsableOld","visibleText","paddingLeft","paddingRight","textAlign","label","className","setAttribute","push","gutterWidthPx","map","gutterWidth","compactAsideWidth","setProperty","applyCompactSplitGutter","oldWrapper","newWrapper","numberCells","Array","from","hunkActions","numberSpans","cell","span","filter","Boolean","wrapper","overflowWrap","wordBreak","applyCompactDiffLayout","mode","ToolCallDiffViewer","props","diffData","createMemo","normalized","normalizeDiffText","diffText","language","getLanguageFromPath","filePath","fileName","oldFile","fileLang","newFile","hunks","diffContainerRef","lastCapturedKey","contextKey","theme","createEffect","cachedHtml","onRendered","key","requestAnimationFrame","markup","innerHTML","cacheEntryParams","setCacheEntry","html","_el$","_tmpl$2","_$insert","_$createComponent","Show","when","fallback","_el$3","_tmpl$","_ref$2","_$use","_el$4","_tmpl$3","children","data","ErrorBoundary","error","warn","_el$5","DiffView","diffViewMode","_$memo","DiffModeEnum","Split","Unified","diffViewTheme","diffViewHighlight","diffViewWrap","diffViewFontSize","_el$2","_ref$","_$effect"],"mappings":"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"}
|