@bytetrue/byspace 0.15.0 → 0.16.0

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 (53) hide show
  1. package/node_modules/@bytetrue/client/package.json +3 -3
  2. package/node_modules/@bytetrue/highlight/package.json +1 -1
  3. package/node_modules/@bytetrue/protocol/package.json +1 -1
  4. package/node_modules/@bytetrue/relay/package.json +1 -1
  5. package/node_modules/@bytetrue/server/dist/server/server/byspace-env.d.ts +1 -0
  6. package/node_modules/@bytetrue/server/dist/server/server/byspace-env.js +9 -0
  7. package/node_modules/@bytetrue/server/dist/server/terminal/agent-hooks/pi/pi-extension.d.ts +1 -1
  8. package/node_modules/@bytetrue/server/dist/server/terminal/agent-hooks/pi/pi-extension.js +16 -1
  9. package/node_modules/@bytetrue/server/dist/server/terminal/terminal.js +6 -0
  10. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/{index-1e1ff7510a612ab12641e5e07e0a7208.js → index-eade2661e21bbc08a50d56f1c6b0917a.js} +526 -525
  11. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/index-eade2661e21bbc08a50d56f1c6b0917a.js.br +0 -0
  12. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/index-eade2661e21bbc08a50d56f1c6b0917a.js.gz +0 -0
  13. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/{indexeddb-attachment-store-1e67472b9640c869a55ff6915d1f7afb.js → indexeddb-attachment-store-a2e8491be0374dc2a52abfe002ecabe9.js} +1 -1
  14. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/{indexeddb-attachment-store-1e67472b9640c869a55ff6915d1f7afb.js.br → indexeddb-attachment-store-a2e8491be0374dc2a52abfe002ecabe9.js.br} +0 -0
  15. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-a2e8491be0374dc2a52abfe002ecabe9.js.gz +0 -0
  16. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/{native-file-attachment-store-63659fda781a1cc594f259795f1cc29f.js → native-file-attachment-store-6ba28513708667bbad7dd5434a0f8d5b.js} +3 -3
  17. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-6ba28513708667bbad7dd5434a0f8d5b.js.br +0 -0
  18. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-6ba28513708667bbad7dd5434a0f8d5b.js.gz +0 -0
  19. package/node_modules/@bytetrue/server/dist/server/web-ui/apple-touch-icon.png +0 -0
  20. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark-attention.9c2d51faf93468f68840811c0d9a8c6f.png +0 -0
  21. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark-running.a52155010955dca55546513b60bb2e2b.png +0 -0
  22. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark.ee7787d5c6bd1ad67c31b9949a832f7a.png +0 -0
  23. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light-attention.9c2d51faf93468f68840811c0d9a8c6f.png +0 -0
  24. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light-running.a52155010955dca55546513b60bb2e2b.png +0 -0
  25. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light.ee7787d5c6bd1ad67c31b9949a832f7a.png +0 -0
  26. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/notification-icon.ba5a7dce236a7febe5d803b16f027b70.png +0 -0
  27. package/node_modules/@bytetrue/server/dist/server/web-ui/favicon.ico +0 -0
  28. package/node_modules/@bytetrue/server/dist/server/web-ui/index.html +1 -1
  29. package/node_modules/@bytetrue/server/dist/server/web-ui/index.html.br +0 -0
  30. package/node_modules/@bytetrue/server/dist/server/web-ui/index.html.gz +0 -0
  31. package/node_modules/@bytetrue/server/dist/server/web-ui/manifest.json +14 -2
  32. package/node_modules/@bytetrue/server/dist/server/web-ui/manifest.json.br +0 -0
  33. package/node_modules/@bytetrue/server/dist/server/web-ui/manifest.json.gz +0 -0
  34. package/node_modules/@bytetrue/server/dist/server/web-ui/pwa-icon-192.png +0 -0
  35. package/node_modules/@bytetrue/server/dist/server/web-ui/pwa-icon-512.png +0 -0
  36. package/node_modules/@bytetrue/server/dist/server/web-ui/pwa-maskable-192.png +0 -0
  37. package/node_modules/@bytetrue/server/dist/server/web-ui/pwa-maskable-512.png +0 -0
  38. package/node_modules/@bytetrue/server/dist/src/server/byspace-env.js +9 -0
  39. package/node_modules/@bytetrue/server/dist/src/terminal/terminal.js +6 -0
  40. package/node_modules/@bytetrue/server/package.json +5 -5
  41. package/package.json +7 -7
  42. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/index-1e1ff7510a612ab12641e5e07e0a7208.js.br +0 -0
  43. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/index-1e1ff7510a612ab12641e5e07e0a7208.js.gz +0 -0
  44. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-1e67472b9640c869a55ff6915d1f7afb.js.gz +0 -0
  45. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-63659fda781a1cc594f259795f1cc29f.js.br +0 -0
  46. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-63659fda781a1cc594f259795f1cc29f.js.gz +0 -0
  47. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
  48. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
  49. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
  50. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
  51. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
  52. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
  53. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
@@ -1 +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="byspace-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}},4901,[4457]);
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="byspace-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}},4902,[4458]);
@@ -1,3 +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:"byspace-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])},4902,[4903,4904,3675]);
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]))},4903,[3830,3838]);
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)}},4904,[4457]);
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:"byspace-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])},4903,[4904,4905,3675]);
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]))},4904,[3830,3838]);
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)}},4905,[4458]);
@@ -86,6 +86,6 @@
86
86
  <body>
87
87
  <noscript>You need to enable JavaScript to run this app.</noscript>
88
88
  <div id="root"></div>
89
- <script src="/_expo/static/js/web/index-1e1ff7510a612ab12641e5e07e0a7208.js" defer></script>
89
+ <script src="/_expo/static/js/web/index-eade2661e21bbc08a50d56f1c6b0917a.js" defer></script>
90
90
  </body>
91
91
  </html>
@@ -15,13 +15,25 @@
15
15
  "src": "/pwa-icon-192.png",
16
16
  "sizes": "192x192",
17
17
  "type": "image/png",
18
- "purpose": "any maskable"
18
+ "purpose": "any"
19
19
  },
20
20
  {
21
21
  "src": "/pwa-icon-512.png",
22
22
  "sizes": "512x512",
23
23
  "type": "image/png",
24
- "purpose": "any maskable"
24
+ "purpose": "any"
25
+ },
26
+ {
27
+ "src": "/pwa-maskable-192.png",
28
+ "sizes": "192x192",
29
+ "type": "image/png",
30
+ "purpose": "maskable"
31
+ },
32
+ {
33
+ "src": "/pwa-maskable-512.png",
34
+ "sizes": "512x512",
35
+ "type": "image/png",
36
+ "purpose": "maskable"
25
37
  }
26
38
  ]
27
39
  }
@@ -1,5 +1,7 @@
1
1
  const BYSPACE_NODE_ENV = "BYSPACE_NODE_ENV";
2
2
  const ELECTRON_RUN_AS_NODE = "ELECTRON_RUN_AS_NODE";
3
+ // Shared with the installed Pi extension (which cannot import from here).
4
+ export const PI_TERMINAL_HOOK_OWNER_PID_ENV_KEY = "BYSPACE_PI_TERMINAL_HOOK_OWNER_PID";
3
5
  const RUNTIME_CONTROL_ENV_KEYS = [
4
6
  BYSPACE_NODE_ENV,
5
7
  "BYSPACE_DESKTOP_MANAGED",
@@ -7,6 +9,13 @@ const RUNTIME_CONTROL_ENV_KEYS = [
7
9
  ELECTRON_RUN_AS_NODE,
8
10
  "ELECTRON_NO_ATTACH_CONSOLE",
9
11
  "ESBUILD_BINARY_PATH",
12
+ // Written into `process.env` by the Pi terminal-activity extension so child Pi
13
+ // processes do not register a second reporter for the same terminal. If it
14
+ // survives into a fresh terminal or agent, that Pi process sees a marker whose
15
+ // value is a stale pid, concludes it is an inherited child, and registers no
16
+ // handlers at all — the terminal then never reports running/idle. It is
17
+ // per-process state, never inherited. See docs/terminal-activity.md.
18
+ PI_TERMINAL_HOOK_OWNER_PID_ENV_KEY,
10
19
  ];
11
20
  function buildInternalProcessEnv(baseEnv) {
12
21
  return { ...baseEnv };
@@ -786,6 +786,12 @@ export async function createTerminal(options) {
786
786
  if (!commandFinished) {
787
787
  return true;
788
788
  }
789
+ // The interactive shell only emits this when its foreground job ends. A
790
+ // terminal agent that exits without reporting idle (SIGKILL, crash, a
791
+ // suspend that never resumes) leaves `working` set forever, so treat the
792
+ // shell regaining the prompt as proof that the agent is gone. `interrupt`
793
+ // only clears `working`; a finished-attention idle state is untouched.
794
+ activityTracker.interrupt();
789
795
  for (const listener of Array.from(commandFinishedListeners)) {
790
796
  try {
791
797
  listener(commandFinished);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytetrue/server",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "BySpace backend server",
5
5
  "files": [
6
6
  "dist/server",
@@ -77,10 +77,10 @@
77
77
  "test:e2e:ui": "vitest --ui e2e.test.ts"
78
78
  },
79
79
  "dependencies": {
80
- "@bytetrue/client": "0.15.0",
81
- "@bytetrue/highlight": "0.15.0",
82
- "@bytetrue/protocol": "0.15.0",
83
- "@bytetrue/relay": "0.15.0"
80
+ "@bytetrue/client": "0.16.0",
81
+ "@bytetrue/highlight": "0.16.0",
82
+ "@bytetrue/protocol": "0.16.0",
83
+ "@bytetrue/relay": "0.16.0"
84
84
  },
85
85
  "devDependencies": {
86
86
  "@playwright/test": "^1.56.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytetrue/byspace",
3
- "version": "0.15.0",
3
+ "version": "0.16.0",
4
4
  "description": "BySpace CLI - control your AI coding agents from the command line",
5
5
  "bin": {
6
6
  "byspace": "bin/byspace"
@@ -30,11 +30,11 @@
30
30
  "@agentclientprotocol/sdk": "^0.17.1",
31
31
  "@anthropic-ai/claude-agent-sdk": "0.3.246",
32
32
  "@anthropic-ai/sdk": "^0.104.2",
33
- "@bytetrue/client": "0.15.0",
34
- "@bytetrue/highlight": "0.15.0",
35
- "@bytetrue/protocol": "0.15.0",
36
- "@bytetrue/relay": "0.15.0",
37
- "@bytetrue/server": "0.15.0",
33
+ "@bytetrue/client": "0.16.0",
34
+ "@bytetrue/highlight": "0.16.0",
35
+ "@bytetrue/protocol": "0.16.0",
36
+ "@bytetrue/relay": "0.16.0",
37
+ "@bytetrue/server": "0.16.0",
38
38
  "@clack/prompts": "^1.0.0",
39
39
  "@codemirror/language": "6.12.4",
40
40
  "@codemirror/legacy-modes": "^6.5.3",
@@ -103,7 +103,7 @@
103
103
  "bugs": {
104
104
  "url": "https://github.com/ByteTrue/byspace/issues"
105
105
  },
106
- "gitHead": "de9c1c94037fb5d0508285a46500a77e437229db",
106
+ "gitHead": "c925fa500a5af75d9ddba8892069b10eb3214757",
107
107
  "bundledDependencies": [
108
108
  "@bytetrue/highlight",
109
109
  "@bytetrue/relay",