@desktalk/core 0.1.3 → 0.1.4

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 (37) hide show
  1. package/dist/frontend/assets/{frontend-BIEc2N7M.js → frontend-BIX1osqf.js} +2 -2
  2. package/dist/frontend/assets/{frontend-BIEc2N7M.js.map → frontend-BIX1osqf.js.map} +1 -1
  3. package/dist/frontend/assets/{frontend-BG-YLJqZ.js → frontend-BzdZVdad.js} +2 -2
  4. package/dist/frontend/assets/{frontend-BG-YLJqZ.js.map → frontend-BzdZVdad.js.map} +1 -1
  5. package/dist/frontend/assets/{frontend-DHFvbI_u.js → frontend-CNI9ZWUx.js} +2 -2
  6. package/dist/frontend/assets/{frontend-DHFvbI_u.js.map → frontend-CNI9ZWUx.js.map} +1 -1
  7. package/dist/frontend/assets/{frontend-BNhxRpOo.js → frontend-CSSNHa7X.js} +2 -2
  8. package/dist/frontend/assets/{frontend-BNhxRpOo.js.map → frontend-CSSNHa7X.js.map} +1 -1
  9. package/dist/frontend/assets/{frontend-D9i707Nm.js → frontend-Da6BeHSp.js} +2 -2
  10. package/dist/frontend/assets/{frontend-D9i707Nm.js.map → frontend-Da6BeHSp.js.map} +1 -1
  11. package/dist/frontend/assets/{frontend-Dy9eRAQd.js → frontend-f1PcGFgm.js} +67 -25
  12. package/dist/frontend/assets/frontend-f1PcGFgm.js.map +1 -0
  13. package/dist/frontend/assets/{frontend-CrQvPdit.js → frontend-zfGj9snS.js} +2 -2
  14. package/dist/frontend/assets/{frontend-CrQvPdit.js.map → frontend-zfGj9snS.js.map} +1 -1
  15. package/dist/frontend/assets/{highlighted-body-TPN3WLV5-B8LPaWFP.js → highlighted-body-TPN3WLV5-g134n7tc.js} +2 -2
  16. package/dist/frontend/assets/{highlighted-body-TPN3WLV5-B8LPaWFP.js.map → highlighted-body-TPN3WLV5-g134n7tc.js.map} +1 -1
  17. package/dist/frontend/assets/index-AQaNuL08.css +1 -0
  18. package/dist/frontend/assets/{index-DCZC2uPI.js → index-D4gDxl9-.js} +99 -99
  19. package/dist/frontend/assets/index-D4gDxl9-.js.map +1 -0
  20. package/dist/frontend/index.html +2 -2
  21. package/dist/server/api-routes.d.ts.map +1 -1
  22. package/dist/server/api-routes.js +88 -7
  23. package/dist/server/api-routes.js.map +1 -1
  24. package/dist/server/index.d.ts.map +1 -1
  25. package/dist/server/index.js +3 -0
  26. package/dist/server/index.js.map +1 -1
  27. package/dist/services/ai/pi-session-service.d.ts +8 -0
  28. package/dist/services/ai/pi-session-service.d.ts.map +1 -1
  29. package/dist/services/ai/pi-session-service.js +17 -1
  30. package/dist/services/ai/pi-session-service.js.map +1 -1
  31. package/dist/services/ai/providers.d.ts.map +1 -1
  32. package/dist/services/ai/providers.js +40 -14
  33. package/dist/services/ai/providers.js.map +1 -1
  34. package/package.json +12 -10
  35. package/dist/frontend/assets/frontend-Dy9eRAQd.js.map +0 -1
  36. package/dist/frontend/assets/index-BljFdF__.css +0 -1
  37. package/dist/frontend/assets/index-DCZC2uPI.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import{W as We,a as Fe,u as V,A as $e,b as Ge,g as Le,c as Ue,d as he,s as Ze}from"./index-DCZC2uPI.js";function Ae(t){return JSON.stringify(t).replace(/</g,"\\u003c")}function Ye(t,e){const r=Ae(t),n=Ae(e);return["<script data-dt-bridge>","(() => {",` const streamId = ${r};`,` const token = ${n};`," let requestCounter = 0;"," const pending = new Map();"," const actionHandlers = new Map();"," const REQUEST_TIMEOUT_MS = 30000;",""," function createError(message) {"," return message instanceof Error ? message : new Error(String(message));"," }",""," function normalizeExecArgs(programOrShell, argsOrOpts, maybeOpts) {",' if (typeof programOrShell === "string" && /\\s/.test(programOrShell)'," && (argsOrOpts === undefined || argsOrOpts === null",' || (typeof argsOrOpts === "object" && !Array.isArray(argsOrOpts)))) {'," return {",' program: "sh",',' args: ["-c", programOrShell],',' options: (typeof argsOrOpts === "object" && argsOrOpts !== null) ? argsOrOpts : {},'," };"," }"," return {"," program: programOrShell,"," args: Array.isArray(argsOrOpts) ? argsOrOpts : [],"," options: (Array.isArray(argsOrOpts) ? maybeOpts : argsOrOpts) || {},"," };"," }",""," function request(kind, payload) {"," return new Promise((resolve, reject) => {"," const requestId = `dt-bridge-${Date.now()}-${++requestCounter}`;"," const timeout = window.setTimeout(() => {"," pending.delete(requestId);"," reject(new Error('DeskTalk bridge request timed out.'));"," }, REQUEST_TIMEOUT_MS);",""," pending.set(requestId, { resolve, reject, timeout });"," window.parent.postMessage({"," type: 'desktalk:bridge-request',"," streamId,"," token,"," requestId,"," kind,"," payload,"," }, '*');"," });"," }",""," function createCollectionStorage(name) {"," return Object.freeze({"," insert(params) {"," return request('storage', { action: 'collection.insert', collection: name, params }).then(() => undefined);"," },"," update(id, params) {"," return request('storage', { action: 'collection.update', collection: name, id, params }).then(() => undefined);"," },"," delete(id) {"," return request('storage', { action: 'collection.delete', collection: name, id }).then(() => undefined);"," },"," findById(id) {"," return request('storage', { action: 'collection.findById', collection: name, id }).then((result) => result.record);"," },"," find(filter, options) {"," return request('storage', { action: 'collection.find', collection: name, filter, options }).then((result) => result.records);"," },"," findAll() {"," return request('storage', { action: 'collection.findAll', collection: name }).then((result) => result.records);"," },"," count(filter) {"," return request('storage', { action: 'collection.count', collection: name, filter }).then((result) => result.count);"," },"," compact() {"," return request('storage', { action: 'collection.compact', collection: name }).then(() => undefined);"," },"," });"," }",""," const actions = Object.freeze({"," register(definition) {",' if (!definition || typeof definition !== "object") {',' throw new Error("DeskTalk.actions.register requires an action definition object.");'," }",' const name = typeof definition.name === "string" ? definition.name.trim() : "";'," if (!name) {",' throw new Error("DeskTalk.actions.register requires a non-empty action name.");'," }",' if (typeof definition.handler !== "function") {',' throw new Error(`DeskTalk.actions.register("${name}") requires a handler function.`);'," }"," actionHandlers.set(name, definition.handler);",' return request("actions", {',' action: "register",'," name,",' description: typeof definition.description === "string" ? definition.description : "",',' params: definition.params && typeof definition.params === "object" ? definition.params : undefined,'," }).then(() => undefined);"," },"," unregister(name) {",' const normalizedName = typeof name === "string" ? name.trim() : "";'," if (!normalizedName) {",' throw new Error("DeskTalk.actions.unregister requires a non-empty action name.");'," }"," actionHandlers.delete(normalizedName);",' return request("actions", { action: "unregister", name: normalizedName }).then(() => undefined);'," },"," clear() {"," actionHandlers.clear();",' return request("actions", { action: "clear" }).then(() => undefined);'," },"," });",""," const storage = Object.freeze({"," get(name) {"," return request('storage', { action: 'kv.get', name }).then((result) => result.value);"," },"," set(name, value) {"," return request('storage', { action: 'kv.set', name, value }).then(() => undefined);"," },"," delete(name) {"," return request('storage', { action: 'kv.delete', name }).then((result) => result.deleted);"," },"," list() {"," return request('storage', { action: 'kv.list' }).then((result) => result.names);"," },"," collection(name) {"," return createCollectionStorage(name);"," },"," });",""," window.addEventListener('message', (event) => {"," const message = event.data;"," if (!message || message.streamId !== streamId || message.token !== token) return;"," if (message.type === 'desktalk:bridge-response') {"," const pendingRequest = pending.get(message.requestId);"," if (!pendingRequest) return;"," pending.delete(message.requestId);"," window.clearTimeout(pendingRequest.timeout);"," if (message.ok) {"," pendingRequest.resolve(message.result);"," return;"," }",' pendingRequest.reject(createError(message.error || "DeskTalk bridge request failed."));'," return;"," }"," if (message.type !== 'desktalk:invoke-action') return;"," const handler = actionHandlers.get(message.actionName);"," if (!handler) {"," window.parent.postMessage({"," type: 'desktalk:invoke-action-result',"," streamId,"," token,"," requestId: message.requestId,"," ok: false,",' error: `Action "${String(message.actionName || "")}" is not registered.`,'," }, '*');"," return;"," }"," Promise.resolve()"," .then(() => handler(message.params || {}))"," .then((result) => {"," window.parent.postMessage({"," type: 'desktalk:invoke-action-result',"," streamId,"," token,"," requestId: message.requestId,"," ok: true,"," result,"," }, '*');"," })"," .catch((error) => {"," window.parent.postMessage({"," type: 'desktalk:invoke-action-result',"," streamId,"," token,"," requestId: message.requestId,"," ok: false,"," error: error instanceof Error ? error.message : String(error),"," }, '*');"," });"," });",""," window.DeskTalk = Object.freeze({"," getState(selector) {"," return request('getState', { selector });"," },"," request(url, options) {"," return request('request', { url, options: options || {} });"," },"," exec(programOrShell, argsOrOpts, maybeOpts) {"," const n = normalizeExecArgs(programOrShell, argsOrOpts, maybeOpts);"," return request('exec', { program: n.program, args: n.args, options: n.options });"," },"," execute(programOrShell, argsOrOpts, maybeOpts) {"," const n = normalizeExecArgs(programOrShell, argsOrOpts, maybeOpts);"," return request('exec', { program: n.program, args: n.args, options: n.options });"," },"," actions,"," storage,"," });","})();","<\/script>"].join(`
1
+ import{W as We,a as Fe,u as V,A as $e,b as Ge,g as Le,c as Ue,d as he,s as Ze}from"./index-D4gDxl9-.js";function Ae(t){return JSON.stringify(t).replace(/</g,"\\u003c")}function Ye(t,e){const r=Ae(t),n=Ae(e);return["<script data-dt-bridge>","(() => {",` const streamId = ${r};`,` const token = ${n};`," let requestCounter = 0;"," const pending = new Map();"," const actionHandlers = new Map();"," const REQUEST_TIMEOUT_MS = 30000;",""," function createError(message) {"," return message instanceof Error ? message : new Error(String(message));"," }",""," function normalizeExecArgs(programOrShell, argsOrOpts, maybeOpts) {",' if (typeof programOrShell === "string" && /\\s/.test(programOrShell)'," && (argsOrOpts === undefined || argsOrOpts === null",' || (typeof argsOrOpts === "object" && !Array.isArray(argsOrOpts)))) {'," return {",' program: "sh",',' args: ["-c", programOrShell],',' options: (typeof argsOrOpts === "object" && argsOrOpts !== null) ? argsOrOpts : {},'," };"," }"," return {"," program: programOrShell,"," args: Array.isArray(argsOrOpts) ? argsOrOpts : [],"," options: (Array.isArray(argsOrOpts) ? maybeOpts : argsOrOpts) || {},"," };"," }",""," function request(kind, payload) {"," return new Promise((resolve, reject) => {"," const requestId = `dt-bridge-${Date.now()}-${++requestCounter}`;"," const timeout = window.setTimeout(() => {"," pending.delete(requestId);"," reject(new Error('DeskTalk bridge request timed out.'));"," }, REQUEST_TIMEOUT_MS);",""," pending.set(requestId, { resolve, reject, timeout });"," window.parent.postMessage({"," type: 'desktalk:bridge-request',"," streamId,"," token,"," requestId,"," kind,"," payload,"," }, '*');"," });"," }",""," function createCollectionStorage(name) {"," return Object.freeze({"," insert(params) {"," return request('storage', { action: 'collection.insert', collection: name, params }).then(() => undefined);"," },"," update(id, params) {"," return request('storage', { action: 'collection.update', collection: name, id, params }).then(() => undefined);"," },"," delete(id) {"," return request('storage', { action: 'collection.delete', collection: name, id }).then(() => undefined);"," },"," findById(id) {"," return request('storage', { action: 'collection.findById', collection: name, id }).then((result) => result.record);"," },"," find(filter, options) {"," return request('storage', { action: 'collection.find', collection: name, filter, options }).then((result) => result.records);"," },"," findAll() {"," return request('storage', { action: 'collection.findAll', collection: name }).then((result) => result.records);"," },"," count(filter) {"," return request('storage', { action: 'collection.count', collection: name, filter }).then((result) => result.count);"," },"," compact() {"," return request('storage', { action: 'collection.compact', collection: name }).then(() => undefined);"," },"," });"," }",""," const actions = Object.freeze({"," register(definition) {",' if (!definition || typeof definition !== "object") {',' throw new Error("DeskTalk.actions.register requires an action definition object.");'," }",' const name = typeof definition.name === "string" ? definition.name.trim() : "";'," if (!name) {",' throw new Error("DeskTalk.actions.register requires a non-empty action name.");'," }",' if (typeof definition.handler !== "function") {',' throw new Error(`DeskTalk.actions.register("${name}") requires a handler function.`);'," }"," actionHandlers.set(name, definition.handler);",' return request("actions", {',' action: "register",'," name,",' description: typeof definition.description === "string" ? definition.description : "",',' params: definition.params && typeof definition.params === "object" ? definition.params : undefined,'," }).then(() => undefined);"," },"," unregister(name) {",' const normalizedName = typeof name === "string" ? name.trim() : "";'," if (!normalizedName) {",' throw new Error("DeskTalk.actions.unregister requires a non-empty action name.");'," }"," actionHandlers.delete(normalizedName);",' return request("actions", { action: "unregister", name: normalizedName }).then(() => undefined);'," },"," clear() {"," actionHandlers.clear();",' return request("actions", { action: "clear" }).then(() => undefined);'," },"," });",""," const storage = Object.freeze({"," get(name) {"," return request('storage', { action: 'kv.get', name }).then((result) => result.value);"," },"," set(name, value) {"," return request('storage', { action: 'kv.set', name, value }).then(() => undefined);"," },"," delete(name) {"," return request('storage', { action: 'kv.delete', name }).then((result) => result.deleted);"," },"," list() {"," return request('storage', { action: 'kv.list' }).then((result) => result.names);"," },"," collection(name) {"," return createCollectionStorage(name);"," },"," });",""," window.addEventListener('message', (event) => {"," const message = event.data;"," if (!message || message.streamId !== streamId || message.token !== token) return;"," if (message.type === 'desktalk:bridge-response') {"," const pendingRequest = pending.get(message.requestId);"," if (!pendingRequest) return;"," pending.delete(message.requestId);"," window.clearTimeout(pendingRequest.timeout);"," if (message.ok) {"," pendingRequest.resolve(message.result);"," return;"," }",' pendingRequest.reject(createError(message.error || "DeskTalk bridge request failed."));'," return;"," }"," if (message.type !== 'desktalk:invoke-action') return;"," const handler = actionHandlers.get(message.actionName);"," if (!handler) {"," window.parent.postMessage({"," type: 'desktalk:invoke-action-result',"," streamId,"," token,"," requestId: message.requestId,"," ok: false,",' error: `Action "${String(message.actionName || "")}" is not registered.`,'," }, '*');"," return;"," }"," Promise.resolve()"," .then(() => handler(message.params || {}))"," .then((result) => {"," window.parent.postMessage({"," type: 'desktalk:invoke-action-result',"," streamId,"," token,"," requestId: message.requestId,"," ok: true,"," result,"," }, '*');"," })"," .catch((error) => {"," window.parent.postMessage({"," type: 'desktalk:invoke-action-result',"," streamId,"," token,"," requestId: message.requestId,"," ok: false,"," error: error instanceof Error ? error.message : String(error),"," }, '*');"," });"," });",""," window.DeskTalk = Object.freeze({"," getState(selector) {"," return request('getState', { selector });"," },"," request(url, options) {"," return request('request', { url, options: options || {} });"," },"," exec(programOrShell, argsOrOpts, maybeOpts) {"," const n = normalizeExecArgs(programOrShell, argsOrOpts, maybeOpts);"," return request('exec', { program: n.program, args: n.args, options: n.options });"," },"," execute(programOrShell, argsOrOpts, maybeOpts) {"," const n = normalizeExecArgs(programOrShell, argsOrOpts, maybeOpts);"," return request('exec', { program: n.program, args: n.args, options: n.options });"," },"," actions,"," storage,"," });","})();","<\/script>"].join(`
2
2
  `)}var T=window.React,ne=T;T.Children;T.Component;T.Fragment;T.Profiler;T.PureComponent;T.StrictMode;T.Suspense;T.cloneElement;T.createContext;T.createElement;T.createRef;var Xe=T.forwardRef;T.isValidElement;T.lazy;T.memo;T.startTransition;var u=T.useCallback;T.useContext;T.useDebugValue;T.useDeferredValue;var O=T.useEffect;T.useId;var Qe=T.useImperativeHandle;T.useInsertionEffect;T.useLayoutEffect;var ve=T.useMemo;T.useReducer;var $=T.useRef,R=T.useState;T.useSyncExternalStore;T.useTransition;T.version;var He=window.ReactDOM,Je=He.createRoot;He.hydrateRoot;var _e=t=>{let e;const r=new Set,n=(b,I)=>{const f=typeof b=="function"?b(e):b;if(!Object.is(f,e)){const k=e;e=I??(typeof f!="object"||f===null)?f:Object.assign({},e,f),r.forEach(S=>S(e,k))}},a=()=>e,l={setState:n,getState:a,getInitialState:()=>p,subscribe:b=>(r.add(b),()=>r.delete(b))},p=e=t(n,a,l);return l},Ke=t=>t?_e(t):_e,et=t=>t;function ge(t,e=et){const r=ne.useSyncExternalStore(t.subscribe,ne.useCallback(()=>e(t.getState()),[t,e]),ne.useCallback(()=>e(t.getInitialState()),[t,e]));return ne.useDebugValue(r),r}var Me={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},Pe=ne.createContext&&ne.createContext(Me),tt=["attr","size","title"];function rt(t,e){if(t==null)return{};var r,n,a=nt(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n<l.length;n++)r=l[n],e.indexOf(r)===-1&&{}.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}function nt(t,e){if(t==null)return{};var r={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(e.indexOf(n)!==-1)continue;r[n]=t[n]}return r}function we(){return we=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)({}).hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},we.apply(null,arguments)}function Se(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),r.push.apply(r,n)}return r}function be(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?Se(Object(r),!0).forEach(function(n){ot(t,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Se(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n))})}return t}function ot(t,e,r){return(e=it(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function it(t){var e=at(t,"string");return typeof e=="symbol"?e:e+""}function at(t,e){if(typeof t!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(typeof n!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function je(t){return t&&t.map((e,r)=>ne.createElement(e.tag,be({key:r},e.attr),je(e.child)))}function st(t){return e=>ne.createElement(lt,we({attr:be({},t.attr)},e),je(t.child))}function lt(t){var e=r=>{var{attr:n,size:a,title:l}=t,p=rt(t,tt),b=a||r.size||"1em",I;return r.className&&(I=r.className),t.className&&(I=(I?I+" ":"")+t.className),ne.createElement("svg",we({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},r.attr,n,p,{className:I,style:be(be({color:t.color||r.color},r.style),t.style),height:b,width:b,xmlns:"http://www.w3.org/2000/svg"}),l&&ne.createElement("title",null,l),t.children)};return Pe!==void 0?ne.createElement(Pe.Consumer,null,r=>e(r)):e(Me)}function dt(t){return st({attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M504 255.531c.253 136.64-111.18 248.372-247.82 248.468-59.015.042-113.223-20.53-155.822-54.911-11.077-8.94-11.905-25.541-1.839-35.607l11.267-11.267c8.609-8.609 22.353-9.551 31.891-1.984C173.062 425.135 212.781 440 256 440c101.705 0 184-82.311 184-184 0-101.705-82.311-184-184-184-48.814 0-93.149 18.969-126.068 49.932l50.754 50.754c10.08 10.08 2.941 27.314-11.313 27.314H24c-8.837 0-16-7.163-16-16V38.627c0-14.254 17.234-21.393 27.314-11.314l49.372 49.372C129.209 34.136 189.552 8 256 8c136.81 0 247.747 110.78 248 247.531zm-180.912 78.784l9.823-12.63c8.138-10.463 6.253-25.542-4.21-33.679L288 256.349V152c0-13.255-10.745-24-24-24h-16c-13.255 0-24 10.745-24 24v135.651l65.409 50.874c10.463 8.137 25.541 6.253 33.679-4.21z"},child:[]}]})(t)}var Z={toolbar:"BrowserPreviewToolbar_toolbar",browserNavGroup:"BrowserPreviewToolbar_browserNavGroup",browserNavBtn:"BrowserPreviewToolbar_browserNavBtn",browserActionBtn:"BrowserPreviewToolbar_browserActionBtn",browserActionSpacer:"BrowserPreviewToolbar_browserActionSpacer",addressBar:"BrowserPreviewToolbar_addressBar",lockIcon:"BrowserPreviewToolbar_lockIcon",addressText:"BrowserPreviewToolbar_addressText",streamingIndicator:"BrowserPreviewToolbar_streamingIndicator",streamingDot:"BrowserPreviewToolbar_streamingDot"},ke=window.__desktalk_jsx_runtime,i=ke.jsx,B=ke.jsxs;ke.jsxDEV;var ye=ke.Fragment;function ct({filename:t,filepath:e,streaming:r,onRefreshFromFile:n,onShowHistory:a,onEditSource:l}){return B("div",{className:Z.toolbar,children:[i("div",{className:Z.browserNavGroup,children:!r&&n?i("button",{className:Z.browserNavBtn,onClick:n,title:"Refresh","aria-label":"Refresh",children:B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[i("polyline",{points:"23 4 23 10 17 10"}),i("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})}):i("button",{className:Z.browserNavBtn,disabled:!0,"aria-hidden":"true",children:B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[i("polyline",{points:"23 4 23 10 17 10"}),i("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})})}),i("div",{className:Z.addressBar,children:r?B("div",{className:Z.streamingIndicator,children:[i("span",{className:Z.streamingDot}),i("span",{children:"Streaming..."})]}):B(ye,{children:[B("svg",{className:Z.lockIcon,width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[i("rect",{x:"3",y:"11",width:"18",height:"11",rx:"2",ry:"2"}),i("path",{d:"M7 11V7a5 5 0 0 1 10 0v4"})]}),B("span",{className:Z.addressText,title:e||t,children:["file://",Ze(e||t)]})]})}),B("div",{className:Z.browserNavGroup,children:[a&&!r?i("button",{className:Z.browserActionBtn,onClick:a,title:"History","aria-label":"History",children:i(dt,{"aria-hidden":"true"})}):null,l&&!r?i("button",{className:Z.browserNavBtn,onClick:l,title:"Edit in TextEdit","aria-label":"Edit in TextEdit",children:B("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[i("path",{d:"M12 20h9"}),i("path",{d:"M16.5 3.5a2.12 2.12 0 1 1 3 3L7 19l-4 1 1-4Z"})]})}):!a||r?i("div",{className:Z.browserActionSpacer,"aria-hidden":"true"}):null,!l&&a&&!r?i("div",{className:Z.browserActionSpacer,"aria-hidden":"true"}):null]})]})}var re={toolbar:"PreviewToolbar_toolbar",toolbarGroup:"PreviewToolbar_toolbarGroup",toolBtn:"PreviewToolbar_toolBtn",filename:"PreviewToolbar_filename",zoomIndicator:"PreviewToolbar_zoomIndicator"};function Te({filename:t,filepath:e,mode:r,zoomPercent:n,canGoPrev:a,canGoNext:l,onZoomIn:p,onZoomOut:b,onFitToWindow:I,onActualSize:f,onPrevious:k,onNext:S,streaming:q,onRefreshFromFile:A,onShowHistory:c,onEditSource:h}){return r==="html"||r==="stream"?i(ct,{filename:t,filepath:e,streaming:q,onRefreshFromFile:A,onShowHistory:c,onEditSource:h}):B("div",{className:re.toolbar,children:[B("div",{className:re.toolbarGroup,children:[i("button",{className:re.toolBtn,onClick:k,disabled:!a,title:"Previous image",children:"◀"}),i("button",{className:re.toolBtn,onClick:S,disabled:!l,title:"Next image",children:"▶"})]}),i("span",{className:re.filename,title:t,children:t}),B("div",{className:re.toolbarGroup,children:[i("button",{className:re.toolBtn,onClick:b,title:"Zoom out",children:"−"}),B("span",{className:re.zoomIndicator,children:[n??100,"%"]}),i("button",{className:re.toolBtn,onClick:p,title:"Zoom in",children:"+"}),i("button",{className:re.toolBtn,onClick:I,title:"Fit to window",children:"⤢"}),i("button",{className:re.toolBtn,onClick:f,title:"Actual size (1:1)",children:"1:1"})]})]})}var Be={viewport:"ImageViewport_viewport",image:"ImageViewport_image"},ue=50;function ut({dataUrl:t,zoom:e,onZoomChange:r}){const n=$(null),[a,l]=R(0),[p,b]=R(0),[I,f]=R(!1),k=$({x:0,y:0,panX:0,panY:0});O(()=>{l(0),b(0)},[t]);const S=u(m=>{m.preventDefault();const v=m.deltaY>0?-.1:.1,E=Math.max(.1,Math.min(10,e+v));r(E)},[e,r]);O(()=>{const m=n.current;if(m)return m.addEventListener("wheel",S,{passive:!1}),()=>m.removeEventListener("wheel",S)},[S]);const q=u(m=>{m.button===0&&(f(!0),k.current={x:m.clientX,y:m.clientY,panX:a,panY:p})},[a,p]),A=u(m=>{if(!I)return;const v=m.clientX-k.current.x,E=m.clientY-k.current.y;l(k.current.panX+v),b(k.current.panY+E)},[I]),c=u(()=>{f(!1)},[]);O(()=>{const m=n.current;if(!m)return;const v=E=>{switch(E.key){case"ArrowUp":E.preventDefault(),b(_=>_+ue);break;case"ArrowDown":E.preventDefault(),b(_=>_-ue);break;case"ArrowLeft":E.preventDefault(),l(_=>_+ue);break;case"ArrowRight":E.preventDefault(),l(_=>_-ue);break}};return m.addEventListener("keydown",v),()=>m.removeEventListener("keydown",v)},[]);const h=u(m=>{switch(m){case"up":b(v=>v+ue);break;case"down":b(v=>v-ue);break;case"left":l(v=>v+ue);break;case"right":l(v=>v-ue);break}},[]);return O(()=>{const m=n.current;m&&(m.panInDirection=h)},[h]),i("div",{ref:n,className:Be.viewport,onMouseDown:q,onMouseMove:A,onMouseUp:c,onMouseLeave:c,tabIndex:0,style:{cursor:I?"grabbing":"grab"},children:i("img",{className:Be.image,src:t,alt:"",draggable:!1,style:{transform:`translate(${a}px, ${p}px) scale(${e})`}})})}var Ie={viewportContainer:"HtmlViewport_viewportContainer",htmlViewport:"HtmlViewport_htmlViewport",shimmerOverlay:"HtmlViewport_shimmerOverlay"},De="#f7f7fa",Oe="#101114",ze=Xe(function({html:t,src:e,streaming:r,onBridgeRequest:n,onInvokeActionResult:a,onLoad:l,theme:p},b){const I=$(null),f=$(0),k=$(!1),S=$(!!r),q=u(()=>{const A=I.current;if(!A||!p)return;const c=p.mode==="dark"?Oe:De;A.style.backgroundColor=c;const h=A.contentDocument;h?.documentElement&&(h.documentElement.dataset.theme=p.mode,h.documentElement.style.colorScheme=p.mode,h.documentElement.style.backgroundColor=c),h?.body&&(h.body.style.backgroundColor=c);const m={type:"desktalk:theme-update",accentColor:p.accentColor,mode:p.mode};A.contentWindow?.postMessage(m,"*")},[p]);return Qe(b,()=>({postInvokeAction(A){I.current?.contentWindow?.postMessage(A,"*")}}),[]),O(()=>{if(!n&&!a)return;const A=c=>{const h=I.current;if(!h||c.source!==h.contentWindow)return;const m=c.data;if(m){if(m.type==="desktalk:bridge-request"){if(!n)return;n(m,v=>{h.contentWindow?.postMessage(v,"*")});return}m.type==="desktalk:invoke-action-result"&&a?.(m)}};return window.addEventListener("message",A),()=>window.removeEventListener("message",A)},[n,a]),O(()=>{q()},[q]),O(()=>{if(e){I.current?.contentDocument?.close(),f.current=0,k.current=!1,S.current=!1;return}if(t===void 0)return;const A=I.current;if(!A)return;const c=A.contentDocument;if(!c)return;const h=S.current;if(S.current=!!r,!r){if(h&&k.current){const v=t.slice(f.current);v.length>0&&(c.write(v),f.current=t.length),c.close(),k.current=!1;return}c.open(),c.write(t),c.close(),f.current=t.length,k.current=!1;return}k.current||(c.open(),k.current=!0,f.current=0);const m=t.slice(f.current);m.length>0&&(c.write(m),f.current=t.length)},[t,e,r]),B("div",{className:Ie.viewportContainer,children:[r?i("div",{className:Ie.shimmerOverlay,"aria-hidden":"true"}):null,i("iframe",{ref:I,className:Ie.htmlViewport,sandbox:"allow-scripts allow-same-origin",title:"HTML Preview",src:e,onLoad:()=>{q(),l?.()},style:{backgroundColor:p?.mode==="dark"?Oe:De}})]})}),K={dialogOverlay:"HistoryDialog_dialogOverlay",dialogCard:"HistoryDialog_dialogCard",dialogHeader:"HistoryDialog_dialogHeader",dialogTitle:"HistoryDialog_dialogTitle",dialogSubtitle:"HistoryDialog_dialogSubtitle",closeButton:"HistoryDialog_closeButton",historyList:"HistoryDialog_historyList",historyItem:"HistoryDialog_historyItem",historyMessage:"HistoryDialog_historyMessage",historyMeta:"HistoryDialog_historyMeta",historyHash:"HistoryDialog_historyHash",emptyState:"HistoryDialog_emptyState"};function mt({entries:t,restoringHash:e=null,onRestore:r,onClose:n}){const a=ve(()=>new Intl.DateTimeFormat(void 0,{dateStyle:"medium",timeStyle:"short"}),[]);return i("div",{className:K.dialogOverlay,onClick:n,children:B("div",{className:K.dialogCard,onClick:l=>l.stopPropagation(),children:[B("div",{className:K.dialogHeader,children:[B("div",{children:[i("div",{className:K.dialogTitle,children:"History"}),i("div",{className:K.dialogSubtitle,children:"Select a saved version to restore."})]}),i("button",{type:"button",className:K.closeButton,onClick:n,"aria-label":"Close history",children:"✕"})]}),t.length===0?i("div",{className:K.emptyState,children:"No saved history yet."}):i("div",{className:K.historyList,children:t.map(l=>{const p=Number.isNaN(Date.parse(l.date))?l.date:a.format(new Date(l.date));return B("button",{type:"button",className:K.historyItem,onClick:()=>r(l),disabled:e!==null,children:[i("div",{className:K.historyMessage,children:l.message}),B("div",{className:K.historyMeta,children:[i("span",{children:p}),i("span",{className:K.historyHash,children:l.hash.slice(0,7)})]})]},l.hash)})})]})})}function me(t){return t?t.replace(/\\/g,"/"):null}function pt(t,e){const r=(me(t)??t).split("/").filter(Boolean).map(l=>encodeURIComponent(l)).join("/"),n=new URLSearchParams;e?.streamId&&n.set("streamId",e.streamId),e?.token&&n.set("token",e.token),e?.accentColor&&n.set("accent",e.accentColor),e?.theme&&n.set("theme",e.theme),e?.cacheBust&&n.set("t",e.cacheBust);const a=n.toString();return a?`/@dtfs/${r}?${a}`:`/@dtfs/${r}`}function gt(t){const e=me(t);return e?e===".data/liveapps"||e.startsWith(".data/liveapps/"):!1}function Re(t,e){const r=me(t),n=me(e);return!r||!n?!1:r===n||r.endsWith(`/${n}`)}var Y={dialogOverlay:"BridgeConfirmDialog_dialogOverlay",dialogCard:"BridgeConfirmDialog_dialogCard",dialogHeader:"BridgeConfirmDialog_dialogHeader",dialogIcon:"BridgeConfirmDialog_dialogIcon",dialogTitle:"BridgeConfirmDialog_dialogTitle",dialogSubtitle:"BridgeConfirmDialog_dialogSubtitle",dialogLabel:"BridgeConfirmDialog_dialogLabel",dialogCode:"BridgeConfirmDialog_dialogCode",dialogRisk:"BridgeConfirmDialog_dialogRisk",dialogActions:"BridgeConfirmDialog_dialogActions",dialogCancelButton:"BridgeConfirmDialog_dialogCancelButton",dialogConfirmButton:"BridgeConfirmDialog_dialogConfirmButton"};function Ve({command:t,cwd:e,risk:r,onConfirm:n,onCancel:a}){return i("div",{className:Y.dialogOverlay,onClick:a,children:B("div",{className:Y.dialogCard,onClick:l=>l.stopPropagation(),children:[B("div",{className:Y.dialogHeader,children:[i("span",{className:Y.dialogIcon,children:"⚠"}),B("div",{children:[i("div",{className:Y.dialogTitle,children:"Confirm command execution"}),i("div",{className:Y.dialogSubtitle,children:"This generated page is requesting a risky command."})]})]}),i("div",{className:Y.dialogLabel,children:"Command"}),i("div",{className:Y.dialogCode,children:t}),i("div",{className:Y.dialogLabel,children:"Working directory"}),i("div",{className:Y.dialogCode,children:e}),i("div",{className:Y.dialogRisk,children:r}),B("div",{className:Y.dialogActions,children:[i("button",{type:"button",className:Y.dialogCancelButton,onClick:a,children:"Cancel"}),i("button",{type:"button",className:Y.dialogConfirmButton,onClick:n,children:"Run command"})]})]})})}var ft={emptyState:"HtmlPreviewPane_emptyState"};function ht(t){let e,r=null,n=!1;if(window.dispatchEvent(new CustomEvent("desktalk:bridge:get-state",{detail:{selector:t,resolve:a=>{n=!0,e=a},reject:a=>{r=new Error(a)}}})),r)throw r;if(!n)throw new Error("DeskTalk core state bridge is unavailable.");return e}function vt(t){const e=me(t);return e?e.split("/").filter(Boolean).at(-1)??e:null}function wt({initialPath:t,liveAppId:e,bridgeToken:r,theme:n,onActionStateChange:a,onLiveAppActionsChange:l,onLiveAppActionInvokerChange:p}){const b=Le(),I=Ue(),f=$(null),k=$(new Map),S=$(new Map),[q,A]=R(0),[c,h]=R([]),[m,v]=R(!1),[E,_]=R(null),[N,de]=R(null),Q=V("preview.bridge.registerSession"),oe=V("preview.bridge.exec"),H=V("preview.bridge.exec.confirm"),W=V("preview.bridge.storage"),F=V("preview.bridge.request"),J=V("preview.history.list"),ce=V("preview.history.restore"),P=me(t),M=ve(()=>vt(t),[t]),C=!!(e&&r&&gt(t)),j=!!(C&&P),ee=c.length>0,te=u(()=>{l(Array.from(k.current.values()))},[l]),ie=u(s=>{for(const z of S.current.values())clearTimeout(z.timeout),z.reject(new Error(s));S.current.clear()},[]),X=u(()=>{k.current.clear(),te()},[te]),G=u(()=>!P||!j?(h([]),v(!1),Promise.resolve([])):J({path:P}).then(s=>(h(s),s.length===0&&v(!1),s)).catch(s=>(h([]),v(!1),console.error("Failed to load preview history:",s),[])),[j,J,P]),ae=ve(()=>P?pt(P,{streamId:C?e:void 0,token:C?r:void 0,accentColor:C?n.accentColor:void 0,theme:C?n.mode:void 0,cacheBust:q>0?String(q):void 0}):null,[r,e,P,q,C,n]);he("preview.file-changed",s=>{Re(s.filePath,P)&&(X(),ie("LiveApp reloaded before the action completed."),A(Date.now()),G())}),O(()=>{G()},[G]),O(()=>{!C||!e||!r||Q({streamId:e,token:r}).catch(s=>{console.error("Failed to register preview bridge session:",s)})},[r,e,Q,C]),O(()=>{C&&(X(),ie("LiveApp reloaded before the action completed."))},[X,ae,ie,C]);const o=u(s=>{switch(s.selector){case"desktop.summary":case"desktop.windows":case"desktop.focusedWindow":case"theme.current":return ht(s.selector);case"preview.context":return{windowId:b,mode:"html",liveAppId:e,title:M,path:P};default:throw new Error(`Unsupported DeskTalk bridge selector: ${String(s.selector)}`)}},[M,e,P,b]),y=u((s,z)=>{if(!C||!e||!r)return Promise.reject(new Error("DeskTalk LiveApp actions are unavailable."));if(!f.current)return Promise.reject(new Error("LiveApp viewport is not ready."));const D=`liveapp-action-${Date.now()}-${Math.random().toString(36).slice(2,10)}`;return new Promise((x,d)=>{const L=setTimeout(()=>{S.current.delete(D),d(new Error(`LiveApp action "${s}" timed out.`))},1e4);S.current.set(D,{resolve:x,reject:d,timeout:L}),f.current?.postInvokeAction({type:"desktalk:invoke-action",streamId:e,token:r,requestId:D,actionName:s,params:z??null})})},[r,e,C]);O(()=>{if(!C){p(null),l([]);return}return p(y),()=>{p(null)}},[y,p,l,C]),O(()=>()=>{ie("LiveApp action invocation was interrupted."),X(),p(null)},[X,p,ie]);const g=u(s=>{if(!C||s.streamId!==e||s.token!==r)return;const z=S.current.get(s.requestId);if(z){if(clearTimeout(z.timeout),S.current.delete(s.requestId),s.ok){z.resolve(s.result);return}z.reject(new Error(s.error||"LiveApp action failed."))}},[r,e,C]),w=u((s,z)=>{const D=x=>{z({type:"desktalk:bridge-response",streamId:s.streamId,token:s.token,requestId:s.requestId,...x})};if(!C||!e||!r){D({ok:!1,error:"DeskTalk bridge is only available for LiveApps."});return}if(s.streamId!==e||s.token!==r){D({ok:!1,error:"DeskTalk bridge token mismatch."});return}if(s.kind==="getState"){try{D({ok:!0,result:o(s.payload)})}catch(x){D({ok:!1,error:x.message})}return}if(s.kind==="storage"){W({streamId:e,token:r,liveAppId:e,request:s.payload}).then(x=>{D({ok:!0,result:x})}).catch(x=>{D({ok:!1,error:x.message})});return}if(s.kind==="request"){F({streamId:e,token:r,request:s.payload}).then(x=>{D({ok:!0,result:x})}).catch(x=>{D({ok:!1,error:x.message})});return}if(s.kind==="actions"){const x=s.payload;if(x.action==="register"){k.current.set(x.name,{name:x.name,description:x.description,params:x.params}),te(),D({ok:!0,result:{ok:!0}});return}if(x.action==="unregister"){k.current.delete(x.name),te(),D({ok:!0,result:{ok:!0}});return}if(x.action==="clear"){X(),D({ok:!0,result:{ok:!0}});return}D({ok:!1,error:"Unsupported DeskTalk actions request."});return}if(s.kind!=="exec"){D({ok:!1,error:`Unsupported DeskTalk bridge request: ${s.kind}`});return}if(N){D({ok:!1,error:"A command confirmation is already waiting for user input."});return}oe({...s.payload,streamId:e,token:r}).then(x=>{if(x.status==="completed"){D({ok:!0,result:x.result});return}if(x.status==="requires_confirmation"){de({confirmationRequestId:x.requestId,bridgeRequestId:s.requestId,commandPreview:x.commandPreview,cwd:x.cwd,reason:x.reason,respond:z});return}D({ok:!1,error:x.reason})}).catch(x=>{D({ok:!1,error:x.message})})},[r,oe,e,N,F,te,X,o,C,W]),se=u(async s=>{if(!N||!r||!e)return;const z=N.respond,D=N.bridgeRequestId,x=N.confirmationRequestId;de(null);try{const d=await H({requestId:x,confirmed:s});z({type:"desktalk:bridge-response",streamId:e,token:r,requestId:D,ok:d.status==="completed",result:d.status==="completed"?d.result:void 0,error:d.status==="completed"?void 0:d.reason})}catch(d){z({type:"desktalk:bridge-response",streamId:e,token:r,requestId:D,ok:!1,error:d.message})}},[r,H,e,N]),U=u(()=>{!P||!C||I("text-edit",{path:P})},[P,I,C]),fe=u(()=>{!P||!j||G().then(s=>{s&&s.length>0&&v(!0)})},[j,P,G]),xe=u(s=>{!P||!M||!window.confirm(`Restore ${M} to this version?
3
3
 
4
4
  ${s.message}
@@ -552,4 +552,4 @@ ${new Date(s.date).toLocaleString()}`)||(_(s.hash),ce({path:P,commitHash:s.hash}
552
552
  }
553
553
  /*# sourceMappingURL=frontend.css.map */
554
554
  `,document.head.appendChild(e)})();export{Mt as activate};
555
- //# sourceMappingURL=frontend-D9i707Nm.js.map
555
+ //# sourceMappingURL=frontend-Da6BeHSp.js.map