@getpaseo/server 0.1.100 → 0.1.102-beta.2
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/dist/scripts/supervisor.js +26 -8
- package/dist/server/executable-resolution/windows.js +3 -0
- package/dist/server/server/agent/activity-curator.d.ts +17 -0
- package/dist/server/server/agent/activity-curator.js +101 -24
- package/dist/server/server/agent/agent-manager.d.ts +10 -0
- package/dist/server/server/agent/agent-manager.js +69 -27
- package/dist/server/server/agent/agent-sdk-types.d.ts +15 -2
- package/dist/server/server/agent/mcp-server.d.ts +2 -45
- package/dist/server/server/agent/mcp-server.js +45 -1985
- package/dist/server/server/agent/prompt-attachments.js +6 -2
- package/dist/server/server/agent/provider-snapshot-manager.d.ts +12 -1
- package/dist/server/server/agent/provider-snapshot-manager.js +132 -42
- package/dist/server/server/agent/providers/acp-agent.d.ts +27 -1
- package/dist/server/server/agent/providers/acp-agent.js +178 -27
- package/dist/server/server/agent/providers/claude/agent.js +111 -24
- package/dist/server/server/agent/providers/claude/query.d.ts +3 -0
- package/dist/server/server/agent/providers/claude/query.js +4 -2
- package/dist/server/server/agent/providers/codex-app-server-agent.js +6 -57
- package/dist/server/server/agent/providers/diagnostic-utils.d.ts +1 -0
- package/dist/server/server/agent/providers/diagnostic-utils.js +1 -1
- package/dist/server/server/agent/providers/generic-acp-agent.d.ts +3 -0
- package/dist/server/server/agent/providers/generic-acp-agent.js +41 -23
- package/dist/server/server/agent/providers/mock-load-test-agent.js +12 -2
- package/dist/server/server/agent/providers/opencode/paths.d.ts +2 -0
- package/dist/server/server/agent/providers/opencode/paths.js +7 -0
- package/dist/server/server/agent/providers/opencode/server-manager.d.ts +2 -0
- package/dist/server/server/agent/providers/opencode/server-manager.js +34 -5
- package/dist/server/server/agent/providers/opencode-agent.d.ts +4 -0
- package/dist/server/server/agent/providers/opencode-agent.js +14 -2
- package/dist/server/server/agent/providers/pi/agent.d.ts +5 -1
- package/dist/server/server/agent/providers/pi/agent.js +12 -3
- package/dist/server/server/agent/providers/provider-image-output.d.ts +5 -0
- package/dist/server/server/agent/providers/provider-image-output.js +61 -1
- package/dist/server/server/agent/tools/paseo-tools.d.ts +48 -0
- package/dist/server/server/agent/tools/paseo-tools.js +2119 -0
- package/dist/server/server/agent/tools/types.d.ts +36 -0
- package/dist/server/server/agent/tools/types.js +2 -0
- package/dist/server/server/bootstrap.d.ts +7 -1
- package/dist/server/server/bootstrap.js +89 -62
- package/dist/server/server/config.d.ts +2 -0
- package/dist/server/server/config.js +57 -1
- package/dist/server/server/daemon-worker.js +19 -7
- package/dist/server/server/lifecycle-reasons.d.ts +4 -0
- package/dist/server/server/lifecycle-reasons.js +6 -0
- package/dist/server/server/persisted-config.d.ts +12 -0
- package/dist/server/server/persisted-config.js +18 -2
- package/dist/server/server/process-diagnostics.d.ts +17 -0
- package/dist/server/server/process-diagnostics.js +22 -0
- package/dist/server/server/relay-transport.js +1 -0
- package/dist/server/server/resolve-worktree-creation-intent.js +3 -1
- package/dist/server/server/session/agent-updates/agent-updates-service.d.ts +59 -0
- package/dist/server/server/session/agent-updates/agent-updates-service.js +220 -0
- package/dist/server/server/session/checkout/checkout-session.d.ts +13 -15
- package/dist/server/server/session/checkout/checkout-session.js +18 -16
- package/dist/server/server/session/checkout/git-metadata-generator.d.ts +53 -0
- package/dist/server/server/session/checkout/git-metadata-generator.js +159 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.d.ts +32 -0
- package/dist/server/server/session/daemon/daemon-self-update-session-controller.js +88 -0
- package/dist/server/server/session/daemon/daemon-self-updater.d.ts +32 -0
- package/dist/server/server/session/daemon/daemon-self-updater.js +56 -0
- package/dist/server/server/session/daemon/daemon-session.d.ts +26 -0
- package/dist/server/server/session/daemon/daemon-session.js +50 -0
- package/dist/server/server/session/daemon/diagnostics.d.ts +41 -0
- package/dist/server/server/session/daemon/diagnostics.js +431 -0
- package/dist/server/server/session/daemon/install-origin.d.ts +7 -0
- package/dist/server/server/session/daemon/install-origin.js +64 -0
- package/dist/server/server/session/daemon/npm-global-cli.d.ts +29 -0
- package/dist/server/server/session/daemon/npm-global-cli.js +98 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.d.ts +34 -0
- package/dist/server/server/session/git-mutation/git-mutation-service.js +71 -0
- package/dist/server/server/session/provider/provider-catalog-session.js +8 -4
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.d.ts +36 -0
- package/dist/server/server/session/workspace-git-observer/workspace-git-observer-service.js +134 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.d.ts +34 -0
- package/dist/server/server/session/workspace-provisioning/workspace-provisioning-service.js +190 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.d.ts +41 -0
- package/dist/server/server/session/workspace-scripts/workspace-scripts-service.js +100 -0
- package/dist/server/server/session.d.ts +12 -54
- package/dist/server/server/session.js +187 -970
- package/dist/server/server/speech/providers/openai/config.d.ts +1 -2
- package/dist/server/server/speech/providers/openai/config.js +13 -9
- package/dist/server/server/speech/providers/openai/runtime.js +2 -16
- package/dist/server/server/speech/providers/openai/stt.d.ts +1 -0
- package/dist/server/server/speech/providers/openai/stt.js +4 -2
- package/dist/server/server/speech/providers/openai/tts.d.ts +1 -0
- package/dist/server/server/speech/providers/openai/tts.js +1 -0
- package/dist/server/server/web-ui.d.ts +10 -0
- package/dist/server/server/web-ui.js +205 -0
- package/dist/server/server/websocket/runtime-metrics.d.ts +23 -0
- package/dist/server/server/websocket-server.d.ts +4 -2
- package/dist/server/server/websocket-server.js +215 -52
- package/dist/server/server/worktree-bootstrap.d.ts +1 -1
- package/dist/server/server/worktree-branch-name-generator.js +3 -1
- package/dist/server/services/quota-fetcher/manifest.js +5 -0
- package/dist/server/services/quota-fetcher/providers/minimax.d.ts +29 -0
- package/dist/server/services/quota-fetcher/providers/minimax.js +227 -0
- package/dist/server/terminal/agent-hooks/agent-hook-installer.js +2 -2
- package/dist/server/utils/checkout-git.js +203 -25
- package/dist/server/utils/directory-suggestions.js +1 -4
- package/dist/server/utils/path.d.ts +2 -0
- package/dist/server/utils/path.js +13 -0
- package/dist/server/utils/worktree.d.ts +1 -0
- package/dist/server/utils/worktree.js +92 -11
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css +1 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.br +0 -0
- package/dist/server/web-ui/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-b01555c9b42665a03988c0a0032ef528.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-b01555c9b42665a03988c0a0032ef528.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-bridge-b01555c9b42665a03988c0a0032ef528.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-648388eca5c510b496e1eddf523f70ff.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-648388eca5c510b496e1eddf523f70ff.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/desktop-attachment-store-648388eca5c510b496e1eddf523f70ff.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-0ebbea2cd337f0c0680fdb3f8d4d5af3.js +16157 -0
- package/dist/server/web-ui/_expo/static/js/web/index-0ebbea2cd337f0c0680fdb3f8d4d5af3.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/index-0ebbea2cd337f0c0680fdb3f8d4d5af3.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-c64fa2416284927857a39087fd8d1332.js +1 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-c64fa2416284927857a39087fd8d1332.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-c64fa2416284927857a39087fd8d1332.js.gz +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-a9784226715772edf87ef36c596599c2.js +3 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-a9784226715772edf87ef36c596599c2.js.br +0 -0
- package/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-a9784226715772edf87ef36c596599c2.js.gz +0 -0
- package/dist/server/web-ui/apple-touch-icon.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon-mask.0a328cd9c1afd0afe8e3b1ec5165b1b4.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/back-icon.35ba0eaec5a4f5ed12ca16fabeae451d.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@2x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@3x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/clear-icon.c94f6478e7ae0cdd9f15de1fcb9e5e55@4x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@2x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@3x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/close-icon.808e1b1b9b53114ec2838071a7e6daa7@4x.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/@react-navigation/elements/lib/module/assets/search-icon.286d67d3f74808a60a78d3ebf1a5fb57.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/arrow_down.017bc6ba3fc25503e5eb5e53826d48a8.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/error.d1ea1496f9057eb392d5bbf3732a61b7.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/file.19eeb73b9593a38f8e9f418337fc7d10.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/forward.d8b800c443b8972542883e0b9de2bdc6.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/pkg.ab19f4cbc543357183a20571f68380a3.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/sitemap.412dd9275b6b48ad28f5e3d81bb1f626.png +0 -0
- package/dist/server/web-ui/assets/__node_modules/expo-router/assets/unmatched.20e71bdf79e3a97bf55fd9e164041578.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/antigravity.6e91a685c33435e0b466a56db86cf141.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/cursor.c31d6bce4fe9aadc3fe59962f4c4fcf3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/file-explorer.3e15e8f72c825c85ce336bcb0cdef776.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/finder.7f68fc2c475621a672e1be09309d5567.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/vscode.832bdb4c685d930f1c864c793703600b.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/webstorm.aa5dc2cd8c20cc0a155c4c5c5ab3c5f5.png +0 -0
- package/dist/server/web-ui/assets/assets/images/editor-apps/zed.f3a670b7f9aa226da4fe53fb86f1abbd.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
- package/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
- package/dist/server/web-ui/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
- package/dist/server/web-ui/favicon.ico +0 -0
- package/dist/server/web-ui/index.html +90 -0
- package/dist/server/web-ui/index.html.br +0 -0
- package/dist/server/web-ui/index.html.gz +0 -0
- package/dist/server/web-ui/manifest.json +27 -0
- package/dist/server/web-ui/manifest.json.br +0 -0
- package/dist/server/web-ui/manifest.json.gz +0 -0
- package/dist/server/web-ui/metadata.json +1 -0
- package/dist/server/web-ui/metadata.json.br +1 -0
- package/dist/server/web-ui/metadata.json.gz +0 -0
- package/dist/server/web-ui/pwa-icon-192.png +0 -0
- package/dist/server/web-ui/pwa-icon-512.png +0 -0
- package/dist/server/web-ui/robots.txt +2 -0
- package/dist/src/executable-resolution/windows.js +3 -0
- package/dist/src/server/persisted-config.js +18 -2
- package/package.json +7 -7
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.d.ts +0 -42
- package/dist/server/server/speech/providers/openai/realtime-transcription-session.js +0 -168
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),e.createIndexedDbAttachmentStore=function(){return{storageType:"web-indexeddb",async save(n){const o=n.id??(0,t.generateAttachmentId)(),s=Date.now(),{blob:c,mimeType:u}=await b(n),w=n.fileName??null,p=await l();try{await y(p,"readwrite",t=>t.put({id:o,blob:c,createdAt:s,fileName:w}))}finally{p.close()}return{id:o,mimeType:u,storageType:"web-indexeddb",storageKey:o,fileName:w,byteSize:c.size,createdAt:s}},async encodeBase64({attachment:n}){const o=await l();try{const s=await u(o,n.storageKey);return await(0,t.blobToBase64)(s)}finally{o.close()}},async resolvePreviewUrl({attachment:t}){const n=await l();try{const o=await u(n,t.storageKey);return URL.createObjectURL(o)}finally{n.close()}},async releasePreviewUrl({url:t}){URL.revokeObjectURL(t)},async delete({attachment:t}){const n=await l();try{await y(n,"readwrite",n=>n.delete(t.storageKey))}finally{n.close()}},async garbageCollect({referencedIds:t}){const n=await l();try{await new Promise((s,c)=>{const l=n.transaction(o,"readwrite"),y=l.objectStore(o).openCursor();y.addEventListener("error",()=>{c(y.error??new Error("Failed to iterate IndexedDB attachment store."))}),y.addEventListener("success",()=>{const n=y.result;if(!n)return void s();const o=String(n.key);t.has(o)||n.delete(),n.continue()}),l.addEventListener("error",()=>{c(l.error??new Error("Failed to garbage collect IndexedDB attachments."))})})}finally{n.close()}}}};var t=r(d[0]);const n="paseo-attachment-bytes",o="attachments",s=1;function c(){const t=globalThis.indexedDB;if(!t)throw new Error("IndexedDB is unavailable in this runtime.");return t}function l(){return new Promise((t,l)=>{const y=c().open(n,s);y.onupgradeneeded=()=>{const t=y.result;t.objectStoreNames.contains(o)||t.createObjectStore(o,{keyPath:"id"})},y.addEventListener("success",()=>{t(y.result)}),y.addEventListener("error",()=>{l(y.error??new Error("Failed to open attachment IndexedDB."))})})}function y(t,n,s){return new Promise((c,l)=>{const y=t.transaction(o,n),b=y.objectStore(o),u=s(b);u.addEventListener("success",()=>{c(u.result)}),u.addEventListener("error",()=>{l(u.error??new Error("IndexedDB transaction request failed."))}),y.addEventListener("error",()=>{l(y.error??new Error("IndexedDB transaction failed."))})})}async function b(n){const o=n.source;if("bytes"===o.kind){const s=(0,t.normalizeMimeType)(n.mimeType),c=new ArrayBuffer(o.bytes.byteLength);return new Uint8Array(c).set(o.bytes),{blob:new Blob([c],{type:s}),mimeType:s}}if("blob"===o.kind){const s=(0,t.normalizeMimeType)(n.mimeType??o.blob.type);return{blob:o.blob.type===s?o.blob:o.blob.slice(0,o.blob.size,s),mimeType:s}}if("data_url"===o.kind){const s=(0,t.parseDataUrl)(o.dataUrl),c=await fetch(o.dataUrl),l=await c.blob(),y=(0,t.normalizeMimeType)(n.mimeType??s.mimeType??l.type);return{blob:l.type===y?l:l.slice(0,l.size,y),mimeType:y}}const s=await fetch(o.uri),c=await s.blob(),l=(0,t.normalizeMimeType)(n.mimeType??c.type);return{blob:c.type===l?c:c.slice(0,c.size,l),mimeType:l}}async function u(t,n){const o=await y(t,"readonly",t=>t.get(n));if(!o?.blob)throw new Error(`Attachment ${n} was not found in IndexedDB.`);return o.blob}},4398,[3926]);
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),e.createNativeFileAttachmentStore=function(){return(0,s.createLocalFileAttachmentStore)({storageType:"native-file",baseDirectoryName:"paseo-native-attachments",fileSystem:(0,t.createExpoAttachmentFileSystem)(),resolvePreviewUrl:async t=>t.storageKey.startsWith("file://")?t.storageKey:(0,o.isAbsolutePath)(t.storageKey)?t.storageKey.startsWith("/")?`file://${t.storageKey}`:t.storageKey.startsWith("\\\\")?`file:${t.storageKey.replace(/\\/g,"/")}`:`file:///${t.storageKey.replace(/\\/g,"/")}`:t.storageKey})};var t=r(d[0]),s=r(d[1]),o=r(d[2])},4399,[4400,4401,3458]);
|
|
2
|
+
__d(function(g,r,i,a,m,_e,_d){"use strict";Object.defineProperty(_e,'__esModule',{value:!0}),_e.createExpoAttachmentFileSystem=function(){return{cacheDirectory:t.cacheDirectory,async getInfo(e){const n=await t.getInfoAsync(e);if(!n.exists)return{exists:!1};const c="number"==typeof n.size?n.size:null;return{exists:!0,isDirectory:n.isDirectory??!1,size:c}},async makeDirectory(e,n){await t.makeDirectoryAsync(e,n)},async writeBytes(t,n){new e.File(t).write(n)},async copy(e){await t.copyAsync(e)},readAsBase64:async e=>await t.readAsStringAsync(e,{encoding:t.EncodingType.Base64}),async delete(e,n){await t.deleteAsync(e,n)},listDirectory:async e=>await t.readDirectoryAsync(e)}};var e=r(_d[0]),t=(function(e){if(e&&e.__esModule)return e;var t={};return e&&Object.keys(e).forEach(function(n){var c=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,c.get?c:{enumerable:!0,get:function(){return e[n]}})}),t.default=e,t})(r(_d[1]))},4400,[3502,3510]);
|
|
3
|
+
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),e.createLocalFileAttachmentStore=function(n){const{fileSystem:o}=n,l=o.cacheDirectory?`${o.cacheDirectory}${n.baseDirectoryName}/`:null;async function u(n){if(!l)throw new Error("Attachment file-system cacheDirectory is unavailable.");await c(o,l);const y=n.id??(0,t.generateAttachmentId)();let f;f="data_url"===n.source.kind?(0,t.parseDataUrl)(n.source.dataUrl).mimeType:"blob"===n.source.kind?n.source.blob.type:void 0;const u=(0,t.normalizeMimeType)(n.mimeType??f),p=n.fileName??null,w=s({fileName:p,mimeType:u}),U=Date.now(),b=`${l}${y}${w}`;return{id:y,mimeType:u,fileName:p,createdAt:U,targetUri:b,storageKey:(0,t.fileUriToPath)(b)}}return Object.assign({storageType:n.storageType,async save(t){const s=await u(t);await y({fileSystem:o,source:t.source,targetUri:s.targetUri,mimeType:s.mimeType});const c=await o.getInfo(s.targetUri),l=c.exists?c.size:null;return{id:s.id,mimeType:s.mimeType,storageType:n.storageType,storageKey:s.storageKey,fileName:s.fileName,byteSize:l,createdAt:s.createdAt}},encodeBase64:async({attachment:t})=>await o.readAsBase64(f(t)),resolvePreviewUrl:async({attachment:t})=>await n.resolvePreviewUrl(t)},n.releasePreviewUrl?{async releasePreviewUrl(t){await(n.releasePreviewUrl?.(t))}}:{},{async delete({attachment:t}){await o.delete(f(t),{idempotent:!0})},async garbageCollect({referencedIds:t}){if(!l)return;await c(o,l);const n=await o.listDirectory(l);await Promise.all(n.map(async n=>{const s=n.split(".",1)[0]??"";s&&!t.has(s)&&await o.delete(`${l}${n}`,{idempotent:!0})}))}})};var t=r(d[0]);const n={"image/png":".png","image/jpeg":".jpg","image/jpg":".jpg","image/gif":".gif","image/webp":".webp","image/avif":".avif","image/heic":".heic","image/heif":".heif","image/tiff":".tiff","image/bmp":".bmp","image/svg+xml":".svg"};function s(s){const c=(0,t.getFileExtensionFromName)(s.fileName);return c||(n[s.mimeType]??".img")}async function c(t,n){const s=await t.getInfo(n);s.exists&&s.isDirectory||await t.makeDirectory(n,{intermediates:!0})}async function o(t){const n=await fetch(t);return new Uint8Array(await n.arrayBuffer())}async function l(t){return new Uint8Array(await t.arrayBuffer())}async function y(n){if("file_uri"===n.source.kind){const s=(0,t.pathToFileUri)(n.source.uri);if(s===n.targetUri)return;return void await n.fileSystem.copy({from:s,to:n.targetUri})}let s;s="data_url"===n.source.kind?await o(n.source.dataUrl):"blob"===n.source.kind?await l(n.source.blob):n.source.bytes,await n.fileSystem.writeBytes(n.targetUri,s)}function f(n){return(0,t.pathToFileUri)(n.storageKey)}},4401,[3926]);
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/server/web-ui/assets/assets/images/editor-apps/zed.f3a670b7f9aa226da4fe53fb86f1abbd.png
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
6
|
+
<meta name="robots" content="noindex,nofollow" />
|
|
7
|
+
<meta name="theme-color" content="#181B1A" />
|
|
8
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
9
|
+
<meta name="apple-mobile-web-app-title" content="Paseo" />
|
|
10
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
11
|
+
<meta
|
|
12
|
+
name="viewport"
|
|
13
|
+
content="width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover"
|
|
14
|
+
/>
|
|
15
|
+
<link rel="manifest" href="/manifest.json" />
|
|
16
|
+
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
17
|
+
<title>Paseo</title>
|
|
18
|
+
<!-- The `react-native-web` recommended style reset: https://necolas.github.io/react-native-web/docs/setup/#root-element -->
|
|
19
|
+
<style id="expo-reset">
|
|
20
|
+
/* Keep the app shell fixed to the viewport. */
|
|
21
|
+
html,
|
|
22
|
+
body {
|
|
23
|
+
width: 100%;
|
|
24
|
+
height: 100%;
|
|
25
|
+
margin: 0;
|
|
26
|
+
padding: 0;
|
|
27
|
+
overflow: hidden;
|
|
28
|
+
overscroll-behavior: none;
|
|
29
|
+
}
|
|
30
|
+
/* These styles smooth text rendering in the app shell. */
|
|
31
|
+
body {
|
|
32
|
+
-webkit-font-smoothing: antialiased;
|
|
33
|
+
-moz-osx-font-smoothing: grayscale;
|
|
34
|
+
}
|
|
35
|
+
/* Prevent white flash before React mounts */
|
|
36
|
+
@media (prefers-color-scheme: dark) {
|
|
37
|
+
html,
|
|
38
|
+
body {
|
|
39
|
+
background-color: #181b1a;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/* These styles make the root element full-height */
|
|
43
|
+
#root {
|
|
44
|
+
display: flex;
|
|
45
|
+
width: 100%;
|
|
46
|
+
height: 100%;
|
|
47
|
+
flex: 1;
|
|
48
|
+
min-width: 0;
|
|
49
|
+
min-height: 0;
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
}
|
|
52
|
+
</style>
|
|
53
|
+
<style>
|
|
54
|
+
button,
|
|
55
|
+
a,
|
|
56
|
+
input,
|
|
57
|
+
textarea,
|
|
58
|
+
select,
|
|
59
|
+
[role="button"],
|
|
60
|
+
[role="link"],
|
|
61
|
+
[role="textbox"],
|
|
62
|
+
[role="combobox"],
|
|
63
|
+
[role="tab"],
|
|
64
|
+
[role="switch"],
|
|
65
|
+
[role="checkbox"],
|
|
66
|
+
[role="slider"],
|
|
67
|
+
[role="menuitem"],
|
|
68
|
+
[tabindex],
|
|
69
|
+
[contenteditable="true"] {
|
|
70
|
+
-webkit-app-region: no-drag !important;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Suppress the browser's default focus outline — it appears on mouse
|
|
74
|
+
clicks and looks out of place against our themed surfaces. Keep a
|
|
75
|
+
themed ring for keyboard users via :focus-visible. */
|
|
76
|
+
*:focus {
|
|
77
|
+
outline: none;
|
|
78
|
+
}
|
|
79
|
+
*:focus-visible {
|
|
80
|
+
outline: 2px solid #20744a;
|
|
81
|
+
outline-offset: 2px;
|
|
82
|
+
}
|
|
83
|
+
</style>
|
|
84
|
+
<link rel="preload" href="/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css" as="style"><link rel="stylesheet" href="/_expo/static/css/xterm-3bb1704bf6cb0876640973dc0244b4cb.css"><link rel="icon" href="/favicon.ico" /></head>
|
|
85
|
+
<body>
|
|
86
|
+
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
87
|
+
<div id="root"></div>
|
|
88
|
+
<script src="/_expo/static/js/web/index-0ebbea2cd337f0c0680fdb3f8d4d5af3.js" defer></script>
|
|
89
|
+
</body>
|
|
90
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "/",
|
|
3
|
+
"name": "Paseo",
|
|
4
|
+
"short_name": "Paseo",
|
|
5
|
+
"description": "Monitor and control local AI coding agents from anywhere.",
|
|
6
|
+
"start_url": "/",
|
|
7
|
+
"scope": "/",
|
|
8
|
+
"display": "standalone",
|
|
9
|
+
"orientation": "portrait",
|
|
10
|
+
"theme_color": "#181B1A",
|
|
11
|
+
"background_color": "#181B1A",
|
|
12
|
+
"categories": ["developer", "productivity", "utilities"],
|
|
13
|
+
"icons": [
|
|
14
|
+
{
|
|
15
|
+
"src": "/pwa-icon-192.png",
|
|
16
|
+
"sizes": "192x192",
|
|
17
|
+
"type": "image/png",
|
|
18
|
+
"purpose": "any maskable"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"src": "/pwa-icon-512.png",
|
|
22
|
+
"sizes": "512x512",
|
|
23
|
+
"type": "image/png",
|
|
24
|
+
"purpose": "any maskable"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":0,"bundler":"metro","fileMetadata":{}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
�{"version":0,"bundler":"metro","fileMetadata":{}}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -34,9 +34,17 @@ const LogConfigSchema = z
|
|
|
34
34
|
.optional(),
|
|
35
35
|
})
|
|
36
36
|
.strict();
|
|
37
|
-
const
|
|
37
|
+
const OpenAiVoiceProviderSchema = z
|
|
38
|
+
.object({
|
|
39
|
+
apiKey: z.string().trim().min(1).optional(),
|
|
40
|
+
baseUrl: z.string().trim().min(1).optional(),
|
|
41
|
+
})
|
|
42
|
+
.strict();
|
|
43
|
+
const OpenAiProviderSchema = z
|
|
38
44
|
.object({
|
|
39
45
|
apiKey: z.string().min(1).optional(),
|
|
46
|
+
voice: OpenAiVoiceProviderSchema.optional(),
|
|
47
|
+
baseUrl: z.string().trim().min(1).optional(),
|
|
40
48
|
})
|
|
41
49
|
.strict();
|
|
42
50
|
const LocalSpeechProviderSchema = z
|
|
@@ -46,7 +54,7 @@ const LocalSpeechProviderSchema = z
|
|
|
46
54
|
.strict();
|
|
47
55
|
const ProvidersSchema = z
|
|
48
56
|
.object({
|
|
49
|
-
openai:
|
|
57
|
+
openai: OpenAiProviderSchema.optional(),
|
|
50
58
|
local: LocalSpeechProviderSchema.optional(),
|
|
51
59
|
})
|
|
52
60
|
.strict();
|
|
@@ -118,6 +126,12 @@ const FeatureVoiceModeSchema = z
|
|
|
118
126
|
.optional(),
|
|
119
127
|
})
|
|
120
128
|
.strict();
|
|
129
|
+
const FeatureWebUiSchema = z
|
|
130
|
+
.object({
|
|
131
|
+
enabled: z.boolean().optional(),
|
|
132
|
+
distDir: z.string().min(1).optional(),
|
|
133
|
+
})
|
|
134
|
+
.strict();
|
|
121
135
|
const StructuredGenerationProviderConfigSchema = z
|
|
122
136
|
.object({
|
|
123
137
|
provider: z.string().min(1),
|
|
@@ -179,6 +193,7 @@ export const PersistedConfigSchema = z
|
|
|
179
193
|
listen: z.string().optional(),
|
|
180
194
|
hostnames: z.union([z.literal(true), z.array(z.string())]).optional(),
|
|
181
195
|
allowedHosts: z.union([z.literal(true), z.array(z.string())]).optional(),
|
|
196
|
+
trustedProxies: z.union([z.literal(true), z.array(z.string())]).optional(),
|
|
182
197
|
mcp: z
|
|
183
198
|
.object({
|
|
184
199
|
enabled: z.boolean().optional(),
|
|
@@ -244,6 +259,7 @@ export const PersistedConfigSchema = z
|
|
|
244
259
|
.object({
|
|
245
260
|
dictation: FeatureDictationSchema.optional(),
|
|
246
261
|
voiceMode: FeatureVoiceModeSchema.optional(),
|
|
262
|
+
webUi: FeatureWebUiSchema.optional(),
|
|
247
263
|
})
|
|
248
264
|
.strict()
|
|
249
265
|
.optional(),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getpaseo/server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.102-beta.2",
|
|
4
4
|
"description": "Paseo backend server",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist/server",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"build:clean": "npm run clean && npm run build",
|
|
41
41
|
"build:lib": "tsc -p tsconfig.server.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/server/server/speech/providers/local/sherpa/assets',{recursive:true}); fs.copyFileSync('src/server/speech/providers/local/sherpa/assets/silero_vad.onnx','dist/server/server/speech/providers/local/sherpa/assets/silero_vad.onnx'); fs.cpSync('src/terminal/shell-integration','dist/server/terminal/shell-integration',{recursive:true}); fs.cpSync('src/terminal/shell-integration','dist/src/terminal/shell-integration',{recursive:true}); fs.copyFileSync('src/terminal/terminal-ts-loader.mjs','dist/server/terminal/terminal-ts-loader.mjs');\"",
|
|
42
42
|
"build:scripts": "tsc -p tsconfig.scripts.json --incremental false && node -e \"const fs=require('node:fs'); fs.mkdirSync('dist/scripts',{recursive:true}); fs.copyFileSync('scripts/mcp-stdio-socket-bridge-cli.mjs','dist/scripts/mcp-stdio-socket-bridge-cli.mjs');\"",
|
|
43
|
-
"prepack": "npm run build:clean",
|
|
43
|
+
"prepack": "npm run build:clean && npm --prefix ../.. run build:daemon-web-ui",
|
|
44
44
|
"start": "node dist/scripts/supervisor-entrypoint.js",
|
|
45
45
|
"typecheck": "tsgo -p tsconfig.server.typecheck.json --noEmit",
|
|
46
46
|
"generate:config-schema": "tsx scripts/generate-config-schema.ts",
|
|
@@ -63,12 +63,12 @@
|
|
|
63
63
|
},
|
|
64
64
|
"dependencies": {
|
|
65
65
|
"@agentclientprotocol/sdk": "^0.17.1",
|
|
66
|
-
"@anthropic-ai/claude-agent-sdk": "^0.3.
|
|
66
|
+
"@anthropic-ai/claude-agent-sdk": "^0.3.195",
|
|
67
67
|
"@anthropic-ai/sdk": "^0.104.2",
|
|
68
|
-
"@getpaseo/client": "0.1.
|
|
69
|
-
"@getpaseo/highlight": "0.1.
|
|
70
|
-
"@getpaseo/protocol": "0.1.
|
|
71
|
-
"@getpaseo/relay": "0.1.
|
|
68
|
+
"@getpaseo/client": "0.1.102-beta.2",
|
|
69
|
+
"@getpaseo/highlight": "0.1.102-beta.2",
|
|
70
|
+
"@getpaseo/protocol": "0.1.102-beta.2",
|
|
71
|
+
"@getpaseo/relay": "0.1.102-beta.2",
|
|
72
72
|
"@isaacs/ttlcache": "^2.1.4",
|
|
73
73
|
"@modelcontextprotocol/sdk": "^1.20.1",
|
|
74
74
|
"@opencode-ai/sdk": "1.14.46",
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type pino from "pino";
|
|
2
|
-
import { EventEmitter } from "node:events";
|
|
3
|
-
import type { StreamingTranscriptionSession } from "../../speech-provider.js";
|
|
4
|
-
type OpenAITurnDetection = null | {
|
|
5
|
-
type: "server_vad";
|
|
6
|
-
create_response?: boolean;
|
|
7
|
-
threshold?: number;
|
|
8
|
-
prefix_padding_ms?: number;
|
|
9
|
-
silence_duration_ms?: number;
|
|
10
|
-
} | {
|
|
11
|
-
type: "semantic_vad";
|
|
12
|
-
create_response?: boolean;
|
|
13
|
-
eagerness?: "low" | "medium" | "high";
|
|
14
|
-
};
|
|
15
|
-
export declare class OpenAIRealtimeTranscriptionSession extends EventEmitter implements StreamingTranscriptionSession {
|
|
16
|
-
readonly requiredSampleRate = 24000;
|
|
17
|
-
private readonly apiKey;
|
|
18
|
-
private readonly logger;
|
|
19
|
-
private readonly transcriptionModel;
|
|
20
|
-
private readonly language?;
|
|
21
|
-
private readonly prompt?;
|
|
22
|
-
private readonly turnDetection;
|
|
23
|
-
private ws;
|
|
24
|
-
private ready;
|
|
25
|
-
private closing;
|
|
26
|
-
private partialByItemId;
|
|
27
|
-
constructor(params: {
|
|
28
|
-
apiKey: string;
|
|
29
|
-
logger: pino.Logger;
|
|
30
|
-
transcriptionModel: string;
|
|
31
|
-
language?: string;
|
|
32
|
-
prompt?: string;
|
|
33
|
-
turnDetection?: OpenAITurnDetection;
|
|
34
|
-
});
|
|
35
|
-
connect(): Promise<void>;
|
|
36
|
-
appendPcm16(pcm16le: Buffer): void;
|
|
37
|
-
commit(): void;
|
|
38
|
-
clear(): void;
|
|
39
|
-
close(): void;
|
|
40
|
-
}
|
|
41
|
-
export {};
|
|
42
|
-
//# sourceMappingURL=realtime-transcription-session.d.ts.map
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { WebSocket } from "ws";
|
|
2
|
-
import { EventEmitter } from "node:events";
|
|
3
|
-
export class OpenAIRealtimeTranscriptionSession extends EventEmitter {
|
|
4
|
-
constructor(params) {
|
|
5
|
-
super();
|
|
6
|
-
this.requiredSampleRate = 24000;
|
|
7
|
-
this.ws = null;
|
|
8
|
-
this.ready = null;
|
|
9
|
-
this.closing = false;
|
|
10
|
-
this.partialByItemId = new Map();
|
|
11
|
-
this.apiKey = params.apiKey;
|
|
12
|
-
this.logger = params.logger.child({ provider: "openai", component: "realtime-transcription" });
|
|
13
|
-
this.transcriptionModel = params.transcriptionModel;
|
|
14
|
-
this.language = params.language;
|
|
15
|
-
this.prompt = params.prompt;
|
|
16
|
-
this.turnDetection = params.turnDetection ?? null;
|
|
17
|
-
}
|
|
18
|
-
async connect() {
|
|
19
|
-
if (this.ready) {
|
|
20
|
-
return this.ready;
|
|
21
|
-
}
|
|
22
|
-
this.closing = false;
|
|
23
|
-
this.ready = new Promise((resolve, reject) => {
|
|
24
|
-
const url = process.env.OPENAI_REALTIME_URL ?? "wss://api.openai.com/v1/realtime?intent=transcription";
|
|
25
|
-
const ws = new WebSocket(url, {
|
|
26
|
-
headers: {
|
|
27
|
-
Authorization: `Bearer ${this.apiKey}`,
|
|
28
|
-
},
|
|
29
|
-
});
|
|
30
|
-
this.ws = ws;
|
|
31
|
-
let resolved = false;
|
|
32
|
-
const fail = (error) => {
|
|
33
|
-
if (resolved) {
|
|
34
|
-
this.emit("error", error);
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
resolved = true;
|
|
38
|
-
reject(error);
|
|
39
|
-
};
|
|
40
|
-
ws.on("open", () => {
|
|
41
|
-
this.logger.debug("OpenAI realtime transcription websocket connected");
|
|
42
|
-
const update = {
|
|
43
|
-
type: "session.update",
|
|
44
|
-
session: {
|
|
45
|
-
type: "transcription",
|
|
46
|
-
audio: {
|
|
47
|
-
input: {
|
|
48
|
-
format: { type: "audio/pcm", rate: 24000 },
|
|
49
|
-
transcription: {
|
|
50
|
-
model: this.transcriptionModel,
|
|
51
|
-
...(this.language ? { language: this.language } : {}),
|
|
52
|
-
...(this.prompt ? { prompt: this.prompt } : {}),
|
|
53
|
-
},
|
|
54
|
-
turn_detection: this.turnDetection,
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
},
|
|
58
|
-
};
|
|
59
|
-
ws.send(JSON.stringify(update));
|
|
60
|
-
});
|
|
61
|
-
ws.on("message", (data) => {
|
|
62
|
-
const text = typeof data === "string" ? data : data.toString("utf-8");
|
|
63
|
-
let parsed;
|
|
64
|
-
try {
|
|
65
|
-
parsed = JSON.parse(text);
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
const event = parsed;
|
|
71
|
-
if (event.type === "session.created" || event.type === "session.updated") {
|
|
72
|
-
if (!resolved) {
|
|
73
|
-
resolved = true;
|
|
74
|
-
resolve();
|
|
75
|
-
}
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (event.type === "input_audio_buffer.committed") {
|
|
79
|
-
this.emit("committed", {
|
|
80
|
-
segmentId: event.item_id,
|
|
81
|
-
previousSegmentId: event.previous_item_id,
|
|
82
|
-
});
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
if (event.type === "input_audio_buffer.speech_started") {
|
|
86
|
-
this.emit("speech_started");
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (event.type === "input_audio_buffer.speech_stopped") {
|
|
90
|
-
this.emit("speech_stopped");
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
if (event.type === "conversation.item.input_audio_transcription.delta") {
|
|
94
|
-
const replaceDelta = this.transcriptionModel === "whisper-1";
|
|
95
|
-
const prev = this.partialByItemId.get(event.item_id) ?? "";
|
|
96
|
-
const next = replaceDelta ? event.delta : prev + event.delta;
|
|
97
|
-
this.partialByItemId.set(event.item_id, next);
|
|
98
|
-
this.emit("transcript", { segmentId: event.item_id, transcript: next, isFinal: false });
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
if (event.type === "conversation.item.input_audio_transcription.completed") {
|
|
102
|
-
this.partialByItemId.set(event.item_id, event.transcript);
|
|
103
|
-
this.emit("transcript", {
|
|
104
|
-
segmentId: event.item_id,
|
|
105
|
-
transcript: event.transcript,
|
|
106
|
-
isFinal: true,
|
|
107
|
-
});
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
if (event.type === "error") {
|
|
111
|
-
const message = event.error?.message ?? "OpenAI realtime error";
|
|
112
|
-
fail(new Error(message));
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
ws.on("error", (err) => {
|
|
116
|
-
fail(err instanceof Error ? err : new Error(String(err)));
|
|
117
|
-
});
|
|
118
|
-
ws.on("close", () => {
|
|
119
|
-
this.logger.debug("OpenAI realtime websocket closed");
|
|
120
|
-
if (this.closing) {
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
if (!resolved) {
|
|
124
|
-
fail(new Error("OpenAI realtime websocket closed before ready"));
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
fail(new Error("OpenAI realtime websocket closed"));
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
return this.ready;
|
|
131
|
-
}
|
|
132
|
-
appendPcm16(pcm16le) {
|
|
133
|
-
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
|
|
134
|
-
throw new Error("OpenAI realtime websocket not connected");
|
|
135
|
-
}
|
|
136
|
-
const base64Audio = pcm16le.toString("base64");
|
|
137
|
-
const event = { type: "input_audio_buffer.append", audio: base64Audio };
|
|
138
|
-
this.ws.send(JSON.stringify(event));
|
|
139
|
-
}
|
|
140
|
-
commit() {
|
|
141
|
-
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
|
|
142
|
-
throw new Error("OpenAI realtime websocket not connected");
|
|
143
|
-
}
|
|
144
|
-
const event = { type: "input_audio_buffer.commit" };
|
|
145
|
-
this.ws.send(JSON.stringify(event));
|
|
146
|
-
}
|
|
147
|
-
clear() {
|
|
148
|
-
if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
const event = { type: "input_audio_buffer.clear" };
|
|
152
|
-
this.ws.send(JSON.stringify(event));
|
|
153
|
-
}
|
|
154
|
-
close() {
|
|
155
|
-
try {
|
|
156
|
-
this.closing = true;
|
|
157
|
-
this.ws?.close();
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
// no-op
|
|
161
|
-
}
|
|
162
|
-
finally {
|
|
163
|
-
this.ws = null;
|
|
164
|
-
this.ready = null;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=realtime-transcription-session.js.map
|