@bytetrue/byspace 0.7.0 → 0.7.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/README.md +14 -7
- package/node_modules/@bytetrue/byspace-client/package.json +1 -1
- package/node_modules/@bytetrue/byspace-highlight/package.json +1 -1
- package/node_modules/@bytetrue/byspace-plugin/package.json +1 -1
- package/node_modules/@bytetrue/byspace-protocol/package.json +1 -1
- package/node_modules/@bytetrue/byspace-relay/package.json +1 -1
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/{index-f57b88c691210d328c98f745f0ccd6a6.js → index-f8da343db0af2e8a9e2196188fcf15be.js} +2 -2
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-f8da343db0af2e8a9e2196188fcf15be.js.br +0 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/{index-f57b88c691210d328c98f745f0ccd6a6.js.gz → index-f8da343db0af2e8a9e2196188fcf15be.js.gz} +0 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/index.html +1 -1
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/index.html.br +0 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/index.html.gz +0 -0
- package/node_modules/@bytetrue/byspace-server/package.json +1 -1
- package/package.json +7 -7
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-f57b88c691210d328c98f745f0ccd6a6.js.br +0 -0
package/README.md
CHANGED
|
@@ -24,17 +24,17 @@
|
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
27
|
-
Run agents in parallel on your own machines from
|
|
27
|
+
Run agents in parallel on your own machines from Web, Android, Desktop, or the CLI.
|
|
28
28
|
|
|
29
29
|
- **Self-hosted:** Agents run on your machine with your full dev environment. Use your tools, your configs, and your skills.
|
|
30
30
|
- **Multi-provider:** Claude Code, Codex, Copilot, OpenCode, and Pi through the same interface. Pick the right model for each job.
|
|
31
31
|
- **Local dictation:** Transcribe tasks on your Host with a speech model you explicitly install and select.
|
|
32
|
-
- **
|
|
32
|
+
- **Every client:** Use the hosted Web/PWA, signed Android APK, macOS/Linux/Windows Desktop app, or CLI against the same local daemon.
|
|
33
33
|
- **Privacy-first:** BySpace doesn't have any telemetry, tracking, or forced log-ins.
|
|
34
34
|
|
|
35
35
|
## Getting Started
|
|
36
36
|
|
|
37
|
-
BySpace runs a local daemon that manages your coding agents.
|
|
37
|
+
BySpace runs a local daemon that manages your coding agents. Web, Android, Desktop, and CLI clients connect directly or through the E2EE relay.
|
|
38
38
|
|
|
39
39
|
### Prerequisites
|
|
40
40
|
|
|
@@ -46,6 +46,12 @@ You need at least one agent CLI installed and configured with your credentials:
|
|
|
46
46
|
- [OpenCode](https://github.com/anomalyco/opencode)
|
|
47
47
|
- [Pi](https://pi.dev)
|
|
48
48
|
|
|
49
|
+
### Android and Desktop
|
|
50
|
+
|
|
51
|
+
Download signed Android APKs and macOS/Linux/Windows Electron clients from the [latest GitHub Release](https://github.com/ByteTrue/byspace/releases/latest). Verify downloads with the included `client-release-manifest.json` and `SHA256SUMS.txt`.
|
|
52
|
+
|
|
53
|
+
iOS source, prebuild, and tests are maintained, but BySpace does not publish iOS builds.
|
|
54
|
+
|
|
49
55
|
### CLI / headless
|
|
50
56
|
|
|
51
57
|
Install or upgrade the Stable channel:
|
|
@@ -114,16 +120,17 @@ Then use them in any agent conversation:
|
|
|
114
120
|
Quick monorepo package map:
|
|
115
121
|
|
|
116
122
|
- `packages/server`: BySpace daemon (agent process orchestration, WebSocket API, MCP server)
|
|
117
|
-
- `packages/app`: Expo
|
|
123
|
+
- `packages/app`: shared Expo client for Web/PWA, Android, and maintained iOS source
|
|
124
|
+
- `packages/desktop`: Electron host for macOS, Linux, and Windows
|
|
118
125
|
- `packages/cli`: `byspace` CLI for daemon and agent workflows
|
|
119
126
|
- `packages/relay`: Relay package for remote connectivity
|
|
120
127
|
|
|
121
128
|
Maintainer workflows are encoded as repo-local skills:
|
|
122
129
|
|
|
123
130
|
- `upstream-sync` — rebuild from a frozen Paseo release snapshot.
|
|
124
|
-
- `release-beta` — ship npm/Web/Relay Beta as one channel.
|
|
125
|
-
- `release-stable` — ship or promote the Stable channel.
|
|
126
|
-
- `harden-byspace-release` — audit packaging, CI/CD, channel isolation, or recovery.
|
|
131
|
+
- `release-beta` — ship npm/Web/Relay plus Android/Desktop Beta as one channel.
|
|
132
|
+
- `release-stable` — ship or promote the complete Stable channel.
|
|
133
|
+
- `harden-byspace-release` — audit npm/client packaging, signing, CI/CD, channel isolation, or recovery.
|
|
127
134
|
|
|
128
135
|
Common commands:
|
|
129
136
|
|
|
@@ -1117,7 +1117,7 @@ __d(function(g,r,_i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?
|
|
|
1117
1117
|
__d(function(g,r,i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),Object.defineProperty(_e,"default",{enumerable:!0,get:function(){return N}}),Object.defineProperty(_e,"AppOwnership",{enumerable:!0,get:function(){return l.AppOwnership}}),Object.defineProperty(_e,"ExecutionEnvironment",{enumerable:!0,get:function(){return l.ExecutionEnvironment}}),Object.defineProperty(_e,"UserInterfaceIdiom",{enumerable:!0,get:function(){return l.UserInterfaceIdiom}});var n=e(r(d[0])),t=r(d[1]);r(d[2]);var u=e(r(d[3])),l=r(d[4]),o=e(r(d[5]));o.default||console.warn("No native ExponentConstants module found, are you sure the expo-constants's module is linked properly?");const s=(0,t.requireOptionalNativeModule)('ExpoUpdates');let f=null;if(s){let e;s.manifest?e=s.manifest:s.manifestString&&(e=JSON.parse(s.manifestString)),e&&Object.keys(e).length>0&&(f=e)}let c=null;if(u.default.EXDevLauncher){let e;u.default.EXDevLauncher.manifestString&&(e=JSON.parse(u.default.EXDevLauncher.manifestString)),e&&Object.keys(e).length>0&&(c=e)}let p=null;if(o.default&&o.default.manifest){const e=o.default.manifest;p='string'==typeof e?JSON.parse(e):e}let b=f??c??p;const E=o.default||{},{appOwnership:O}=E,x=(0,n.default)(E,["name","appOwnership"]),v=Object.assign({},x,{appOwnership:O??null});function _(e){return!h(e)}function h(e){return'metadata'in e}function S(e=!1){if(!b){const e=null===b?'null':'undefined';if(x.executionEnvironment,l.ExecutionEnvironment.Bare,x.executionEnvironment===l.ExecutionEnvironment.StoreClient||x.executionEnvironment===l.ExecutionEnvironment.Standalone)throw new t.CodedError('ERR_CONSTANTS_MANIFEST_UNAVAILABLE',`Constants.manifest is ${e}, must be an object.`)}return b}Object.defineProperties(v,{__unsafeNoWarnManifest:{get(){const e=S(!0);return e&&_(e)?e:null},enumerable:!1},__unsafeNoWarnManifest2:{get(){const e=S(!0);return e&&h(e)?e:null},enumerable:!1},manifest:{get(){const e=S();return e&&_(e)?e:null},enumerable:!0},manifest2:{get(){const e=S();return e&&h(e)?e:null},enumerable:!0},expoConfig:{get(){const e=S(!0);return e?s&&s.isEmbeddedLaunch?p:h(e)?e.extra?.expoClient??null:_(e)?e:null:null},enumerable:!0},expoGoConfig:{get(){const e=S(!0);return e?h(e)?e.extra?.expoGo??null:_(e)?e:null:null},enumerable:!0},easConfig:{get(){const e=S(!0);return e?h(e)?e.extra?.eas??null:_(e)?e:null:null},enumerable:!0},__rawManifest_TEST:{get:()=>b,set(e){b=e},enumerable:!1}});var N=v},1020,[35,4,25,1021,1022,1023]);
|
|
1118
1118
|
__d(function(g,r,i,a,m,_e,d){"use strict";Object.defineProperty(_e,'__esModule',{value:!0}),Object.defineProperty(_e,"default",{enumerable:!0,get:function(){return u}});var e,t=r(d[0]),u={UIManager:((e=t)&&e.__esModule?e:{default:e}).default}},1021,[159]);
|
|
1119
1119
|
__d(function(g,r,i,a,m,e,d){"use strict";var t,n,o;Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"AppOwnership",{enumerable:!0,get:function(){return t}}),Object.defineProperty(e,"ExecutionEnvironment",{enumerable:!0,get:function(){return n}}),Object.defineProperty(e,"UserInterfaceIdiom",{enumerable:!0,get:function(){return o}}),(function(t){t.Expo="expo"})(t||(t={})),(function(t){t.Bare="bare",t.Standalone="standalone",t.StoreClient="storeClient"})(n||(n={})),(function(t){t.Handset="handset",t.Tablet="tablet",t.Desktop="desktop",t.TV="tv",t.Unsupported="unsupported"})(o||(o={}))},1022,[]);
|
|
1120
|
-
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return s}});var n=r(d[0]);const t=(Date.now()+'-'+Math.floor(1e9*Math.random())).toString();function o(){if('undefined'!=typeof navigator&&'string'==typeof navigator.userAgent){const n=navigator.userAgent.toLowerCase();if(n.includes('edge'))return'Edge';if(n.includes('edg'))return'Chromium Edge';if(n.includes('opr')&&'opr'in window&&window.opr)return'Opera';if(n.includes('chrome')&&'chrome'in window&&window.chrome)return'Chrome';if(n.includes('trident'))return'IE';if(n.includes('firefox'))return'Firefox';if(n.includes('safari'))return'Safari'}}var s={get appOwnership(){return null},get executionEnvironment(){return n.ExecutionEnvironment.Bare},get sessionId(){return t},get isHeadless(){return'undefined'==typeof navigator||/\bHeadlessChrome\//.test(navigator.userAgent)},get expoVersion(){return this.manifest.sdkVersion||null},get linkingUri(){return'undefined'!=typeof location?location.origin:''},get expoRuntimeVersion(){return this.expoVersion},get deviceName(){return o()},get systemFonts(){return[]},get statusBarHeight(){return 0},get deviceYearClass(){return null},get manifest(){return"{\"name\":\"BySpace\",\"slug\":\"byspace\",\"version\":\"0.7.
|
|
1120
|
+
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return s}});var n=r(d[0]);const t=(Date.now()+'-'+Math.floor(1e9*Math.random())).toString();function o(){if('undefined'!=typeof navigator&&'string'==typeof navigator.userAgent){const n=navigator.userAgent.toLowerCase();if(n.includes('edge'))return'Edge';if(n.includes('edg'))return'Chromium Edge';if(n.includes('opr')&&'opr'in window&&window.opr)return'Opera';if(n.includes('chrome')&&'chrome'in window&&window.chrome)return'Chrome';if(n.includes('trident'))return'IE';if(n.includes('firefox'))return'Firefox';if(n.includes('safari'))return'Safari'}}var s={get appOwnership(){return null},get executionEnvironment(){return n.ExecutionEnvironment.Bare},get sessionId(){return t},get isHeadless(){return'undefined'==typeof navigator||/\bHeadlessChrome\//.test(navigator.userAgent)},get expoVersion(){return this.manifest.sdkVersion||null},get linkingUri(){return'undefined'!=typeof location?location.origin:''},get expoRuntimeVersion(){return this.expoVersion},get deviceName(){return o()},get systemFonts(){return[]},get statusBarHeight(){return 0},get deviceYearClass(){return null},get manifest(){return"{\"name\":\"BySpace\",\"slug\":\"byspace\",\"version\":\"0.7.2\",\"orientation\":\"portrait\",\"icon\":\"./assets/images/icon.png\",\"scheme\":\"byspace\",\"userInterfaceStyle\":\"automatic\",\"newArchEnabled\":true,\"web\":{\"output\":\"single\",\"favicon\":\"./assets/images/favicon.png\",\"shortName\":\"BySpace\",\"orientation\":\"portrait\",\"name\":\"BySpace\"},\"autolinking\":{\"searchPaths\":[\"../../node_modules\",\"./node_modules\"]},\"experiments\":{\"typedRoutes\":true,\"reactCompiler\":true,\"autolinkingModuleResolution\":true},\"extra\":{\"fdroidBuild\":false,\"profileBuild\":false,\"router\":{}},\"sdkVersion\":\"54.0.0\",\"platforms\":[\"ios\",\"android\",\"web\"]}"},get manifest2(){return null},get experienceUrl(){return'undefined'!=typeof location?location.origin:''},get debugMode(){return!1},getWebViewUserAgentAsync:async()=>'undefined'!=typeof navigator?navigator.userAgent:null}},1023,[1022]);
|
|
1121
1121
|
__d(function(g,r,i,a,m,_e,d){"use strict";Object.defineProperty(_e,'__esModule',{value:!0}),Object.defineProperty(_e,"default",{enumerable:!0,get:function(){return u}});var e,t=r(d[0]),n=r(d[1]),o=(e=n)&&e.__esModule?e:{default:e};async function u(){if(!o.default.unregisterForNotificationsAsync)throw new t.UnavailabilityError('ExpoNotifications','unregisterForNotificationsAsync');return o.default.unregisterForNotificationsAsync()}},1024,[4,1025]);
|
|
1122
1122
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"default",{enumerable:!0,get:function(){return n}}),r(d[0]);let t=!1;var n={addListener:()=>(t||(console.warn("[expo-notifications] Listening to push token changes is not yet fully supported on web. Adding a listener will have no effect."),t=!0),{remove:()=>{}}),removeListener:()=>{},removeAllListeners:()=>{},emit:()=>{},listenerCount:()=>0}},1025,[4]);
|
|
1123
1123
|
__d(function(g,r,i,a,m,_e,_d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),Object.defineProperty(_e,"default",{enumerable:!0,get:function(){return u}});var t=(function(e){if(e&&e.__esModule)return e;var t={};return e&&Object.keys(e).forEach(function(o){var n=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,n.get?n:{enumerable:!0,get:function(){return e[o]}})}),t.default=e,t})(r(_d[0])),o=e(r(_d[1])),n=r(_d[2]),c=r(_d[3]),s=e(r(_d[4])),d=e(r(_d[5]));const p='https://exp.host/--/api/v2/';async function u(e={}){const s=e.devicePushToken||await(0,d.default)(),u=e.deviceId||await h(),R=e.projectId||o.default.easConfig?.projectId||o.default.expoConfig?.extra?.eas?.projectId;if(!R)throw new n.CodedError('ERR_NOTIFICATIONS_NO_EXPERIENCE_ID',"No \"projectId\" found. If \"projectId\" can't be inferred from the manifest (for instance, in bare workflow), you have to pass it in yourself.");const w=e.applicationId||t.applicationId;if(!w)throw new n.CodedError('ERR_NOTIFICATIONS_NO_APPLICATION_ID',"No \"applicationId\" found. If it can't be inferred from native configuration by expo-application, you have to pass it in yourself.");const O=e.type||y(s),_=e.development||await I(),v=e.baseUrl??p,N=e.url??`${v}push/getExpoPushToken`,x={type:O,deviceId:u.toLowerCase(),development:_,appId:w,deviceToken:E(s),projectId:R},T=await fetch(N,{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify(x)}).catch(e=>{throw new n.CodedError('ERR_NOTIFICATIONS_NETWORK_ERROR',`Error encountered while fetching Expo token: ${e}.`)});if(!T.ok){const e=T.statusText||T.status;let t;try{t=await T.text()}catch{}throw new n.CodedError('ERR_NOTIFICATIONS_SERVER_ERROR',`Error encountered while fetching Expo token, expected an OK response, received: ${e} (body: "${t}").`)}const b=l(await f(T));try{e.url||e.baseUrl?console.debug("[expo-notifications] Since the URL endpoint to register in has been customized in the options, expo-notifications won't try to auto-update the device push token on the server."):await(0,c.setAutoServerRegistrationEnabledAsync)(!0)}catch(e){console.warn('[expo-notifications] Could not enable automatically registering new device tokens with the Expo notification service',e)}return{type:'expo',data:b}}async function f(e){try{return await e.json()}catch{try{throw new n.CodedError('ERR_NOTIFICATIONS_SERVER_ERROR',`Expected a JSON response from server when fetching Expo token, received body: ${JSON.stringify(await e.text())}.`)}catch{throw new n.CodedError('ERR_NOTIFICATIONS_SERVER_ERROR',`Expected a JSON response from server when fetching Expo token, received response: ${JSON.stringify(e)}.`)}}}function l(e){if(!e||'object'!=typeof e||!e.data||'object'!=typeof e.data||!e.data.expoPushToken||'string'!=typeof e.data.expoPushToken)throw new n.CodedError('ERR_NOTIFICATIONS_SERVER_ERROR',`Malformed response from server, expected "{ data: { expoPushToken: string } }", received: ${JSON.stringify(e,null,2)}.`);return e.data.expoPushToken}async function h(){try{if(!s.default.getInstallationIdAsync)throw new n.UnavailabilityError('ExpoServerRegistrationModule','getInstallationIdAsync');return await s.default.getInstallationIdAsync()}catch(e){throw new n.CodedError('ERR_NOTIF_DEVICE_ID',`Could not have fetched installation ID of the application: ${e}.`)}}function E(e){return'string'==typeof e.data?e.data:JSON.stringify(e.data)}async function I(){return!1}function y(e){switch(e.type){case'ios':return'apns';case'android':return'fcm';default:return e.type}}},1026,[1027,1020,4,1030,1034,1019]);
|
|
@@ -15211,7 +15211,7 @@ __d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{v
|
|
|
15211
15211
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),e.shouldUseDesktopDaemon=function(){return(0,n.isElectronRuntime)()},e.getDesktopDaemonStatus=async function(){return l(await(0,t.invokeDesktopCommand)("desktop_daemon_status"))},e.startDesktopDaemon=async function(){return l(await(0,t.invokeDesktopCommand)("start_desktop_daemon"))},e.stopDesktopDaemon=async function(n="manual_ipc"){return l(await(0,t.invokeDesktopCommand)("stop_desktop_daemon",{reason:n}))},e.restartDesktopDaemon=async function(){return l(await(0,t.invokeDesktopCommand)("restart_desktop_daemon"))},e.getDesktopDaemonLogs=async function(){return u(await(0,t.invokeDesktopCommand)("desktop_daemon_logs"))},e.getDesktopAppLogs=async function(){const n=await(0,t.invokeDesktopCommand)("desktop_app_logs");if(!o(n))throw new Error("Unexpected desktop app logs response.");return{logPath:s(n.logPath)??"",contents:"string"==typeof n.contents?n.contents:""}},e.getCliDaemonStatus=async function(){const n=await(0,t.invokeDesktopCommand)("cli_daemon_status");if("string"!=typeof n)throw new Error("Unexpected CLI daemon status response.");return n},e.listenToLocalTransportEvents=async function(t){const p=(0,n.getDesktopHost)()?.events?.on;if("function"!=typeof p)throw new Error("Desktop events API is unavailable.");const l=await p("local-daemon-transport-event",n=>{o(n)&&t({sessionId:s(n.sessionId)??"",kind:s(n.kind)??"error",text:s(n.text),binaryBase64:s(n.binaryBase64),code:c(n.code),reason:s(n.reason),error:s(n.error)})});return"function"==typeof l?l:()=>{}},e.openLocalTransportSession=async function(n){const o=await(0,t.invokeDesktopCommand)("open_local_daemon_transport",n);if("string"!=typeof o||0===o.trim().length)throw new Error("Unexpected local transport session response.");return o},e.sendLocalTransportMessage=async function(n){await(0,t.invokeDesktopCommand)("send_local_daemon_transport_message",Object.assign({sessionId:n.sessionId},n.text?{text:n.text}:{},n.binaryBase64?{binaryBase64:n.binaryBase64}:{}))},e.closeLocalTransportSession=async function(n){await(0,t.invokeDesktopCommand)("close_local_daemon_transport",{sessionId:n})},e.getCliInstallStatus=async function(){return k(await(0,t.invokeDesktopCommand)("get_cli_install_status"))},e.installCli=async function(){return k(await(0,t.invokeDesktopCommand)("install_cli"))},e.readLegacySkillSelection=function(){return(0,t.invokeDesktopCommand)("read_legacy_skill_selection")},e.deleteLegacySkillSelection=async function(){await(0,t.invokeDesktopCommand)("delete_legacy_skill_selection")};var n=r(d[0]),t=r(d[1]);function o(n){return"object"==typeof n&&null!==n}function s(n){return"string"==typeof n&&n.trim().length>0?n:null}function c(n){return"number"==typeof n&&Number.isFinite(n)?n:null}function p(n){const t=s(n)?.toLowerCase();switch(t){case"starting":return"starting";case"running":return"running";case"errored":case"error":return"errored";default:return"stopped"}}function l(n){if(!o(n))throw new Error("Unexpected desktop daemon status response.");return{serverId:s(n.serverId)??"",status:p(n.status),listen:s(n.listen),hostname:s(n.hostname),pid:c(n.pid),home:s(n.home)??"",version:s(n.version),desktopManaged:!0===n.desktopManaged,error:s(n.error)}}function u(n){if(!o(n))throw new Error("Unexpected desktop daemon logs response.");return{logPath:s(n.logPath)??"",contents:"string"==typeof n.contents?n.contents:""}}function k(n){if(!o(n))throw new Error("Unexpected install status response.");return{installed:!0===n.installed}}},3556,[1596,3557]);
|
|
15212
15212
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),e.invokeDesktopCommand=async function(t,o){const s=(0,n.getDesktopHost)()?.invoke;if("function"!=typeof s)throw new Error("Desktop invoke() is unavailable in this environment.");return await s(t,o)};var n=r(d[0])},3557,[1596]);
|
|
15213
15213
|
__d(function(g,r,i,a,m,_e,d){"use strict";function e(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(_e,'__esModule',{value:!0}),_e.resolveAppVersion=function(){const e=u(t.default?.version);if(e)return e;const o=u(n.default.expoConfig?.version);if(o)return o;const f=u(n.default.manifest?.version);if(f)return f;return null};var n=e(r(d[0])),t=e(r(d[1]));function u(e){if("string"!=typeof e)return null;const n=e.trim();return 0===n.length?null:n}},3558,[1020,3559]);
|
|
15214
|
-
__d(function(e,t,r,o,a,n,i){a.exports={name:"@bytetrue/byspace-app",version:"0.7.
|
|
15214
|
+
__d(function(e,t,r,o,a,n,i){a.exports={name:"@bytetrue/byspace-app",version:"0.7.2",private:!0,main:"index.ts",scripts:{start:"expo start --web","start:expo":"cross-env APP_VARIANT=development expo start",android:"npm run android:development","android:development":"npm --prefix ../.. run build:app-deps && cross-env CI=1 NODE_ENV=development APP_VARIANT=development expo prebuild --platform android --clean && cross-env NODE_ENV=development APP_VARIANT=development expo run:android --variant=debug","android:production":"npm --prefix ../.. run build:app-deps && cross-env CI=1 NODE_ENV=production APP_VARIANT=production expo prebuild --platform android --clean && cross-env NODE_ENV=production APP_VARIANT=production expo run:android --variant=release","android:release":"npm run android:production","android:clear":"node -e \"require('node:fs').rmSync('android', { recursive: true, force: true })\"",ios:"npm run ios:development","ios:development":"npm --prefix ../.. run build:app-deps && cross-env CI=1 NODE_ENV=development APP_VARIANT=development expo prebuild --platform ios --clean && cross-env NODE_ENV=development APP_VARIANT=development expo run:ios","ios:production":"npm --prefix ../.. run build:app-deps && cross-env CI=1 NODE_ENV=production APP_VARIANT=production expo prebuild --platform ios --clean && cross-env NODE_ENV=production APP_VARIANT=production expo run:ios --configuration Release",web:"npm --prefix ../.. run build:client && concurrently --kill-others --names protocol,client,expo --prefix-colors yellow,blue,magenta \"npm --prefix ../.. run watch:protocol\" \"npm --prefix ../.. run watch:client\" \"npm run web:expo\"","web:expo":"expo start --web",lint:"expo lint",typecheck:"tsgo --noEmit",test:"vitest run","test:browser":"vitest run --project browser","test:e2e":"playwright test --project='Desktop Chrome'","test:e2e:real":"cross-env E2E_FORK_BYSPACE_HOME_FROM=../../.dev/byspace-home playwright test --project=real-provider","test:e2e:ui":"playwright test --ui","test:e2e:mobile":"../../scripts/test-mobile-agent-device.sh",build:"npm run build:web","build:web":"npm --prefix ../.. run build:app-deps && expo export --platform web","profile:workspace-tabs":"node ./scripts/profile-workspace-tabs.mjs","deploy:web":"npm run build:web && wrangler pages deploy dist --project-name byspace --branch main","build:terminal-webview":"node ./scripts/build-terminal-webview-html.mjs","build:mermaid-runtime":"node ./src/components/markdown/fence/mermaid/build-runtime.mjs"},dependencies:{"@bytetrue/byspace-client":"*","@bytetrue/byspace-expo-two-way-audio":"*","@bytetrue/byspace-highlight":"*","@bytetrue/byspace-plugin":"*","@bytetrue/byspace-protocol":"*","@codemirror/commands":"6.10.4","@codemirror/language":"6.12.4","@codemirror/search":"6.7.1","@codemirror/state":"6.7.1","@codemirror/view":"6.43.6","@dnd-kit/core":"^6.3.1","@dnd-kit/sortable":"^10.0.0","@dnd-kit/utilities":"^3.2.2","@floating-ui/react-native":"^0.10.7","@gorhom/bottom-sheet":"^5.2.14","@gorhom/portal":"^1.0.14","@marijn/find-cluster-break":"^1.0.2","@mattermost/react-native-paste-input":"2.0.1","@react-native-async-storage/async-storage":"2.2.0","@react-native/normalize-colors":"^0.81.5","@react-navigation/native":"^7.1.8","@replit/codemirror-vim":"6.3.0","@shopify/react-native-skia":"2.2.12","@tanstack/react-query":"^5.90.11","@tanstack/react-virtual":"^3.13.21","@xterm/addon-clipboard":"^0.3.0-beta.213","@xterm/addon-fit":"^0.12.0-beta.213","@xterm/addon-image":"^0.10.0-beta.213","@xterm/addon-ligatures":"^0.11.0-beta.213","@xterm/addon-search":"^0.17.0-beta.213","@xterm/addon-unicode11":"^0.10.0-beta.213","@xterm/addon-web-links":"^0.13.0-beta.213","@xterm/addon-webgl":"^0.20.0-beta.212","@xterm/xterm":"^6.1.0-beta.213",buffer:"^6.0.3",expo:"^54.0.18","expo-asset":"~12.0.12","expo-audio":"~1.0.13","expo-build-properties":"^1.0.9","expo-camera":"~17.0.10","expo-clipboard":"~8.0.7","expo-constants":"~18.0.9","expo-crypto":"^15.0.8","expo-dev-client":"^6.0.15","expo-document-picker":"~14.0.8","expo-file-system":"~19.0.17","expo-image":"~3.0.10","expo-image-manipulator":"~14.0.8","expo-image-picker":"^17.0.8","expo-keep-awake":"^15.0.7","expo-linking":"~8.0.8","expo-localization":"~17.0.9","expo-notifications":"^0.32.16","expo-router":"~6.0.13","expo-sharing":"^14.0.8","expo-splash-screen":"~31.0.10","expo-system-ui":"~6.0.7","fast-deep-equal":"^3.1.3",htmlparser2:"^12.0.0",i18next:"^26.3.0","lucide-react-native":"^0.546.0","markdown-it":"^14.3.0",mermaid:"^11.16.0","mnemonic-id":"^3.2.7",qrcode:"^1.5.4",react:"19.1.0","react-dom":"19.1.0","react-i18next":"^17.0.8","react-native":"0.81.5","react-native-draggable-flatlist":"^4.0.3","react-native-edge-to-edge":"^1.7.0","react-native-gesture-handler":"~2.28.0","react-native-keyboard-controller":"1.21.12","react-native-markdown-display":"^7.0.2","react-native-nitro-modules":"0.35.5","react-native-reanimated":"~4.3.1","react-native-safe-area-context":"~5.6.0","react-native-screens":"~4.16.0","react-native-svg":"^15.14.0","react-native-uitextview":"^2.2.0","react-native-unistyles":"^3.2.4","react-native-web":"~0.21.0","react-native-webview":"13.16.1","react-native-worklets":"~0.8.3","tiny-invariant":"^1.3.3",turndown:"^7.2.4","turndown-plugin-gfm":"^1.0.2","use-sync-external-store":"^1.6.0",yaml:"^2.8.4",zod:"^4.4.3",zustand:"^5.0.9"},devDependencies:{"@playwright/test":"^1.56.1","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2","@types/jsdom":"^21.1.7","@types/markdown-it":"^14.1.2","@types/qrcode":"^1.5.6","@types/react":"~19.2.0","@types/react-dom":"^19.1.5","@types/turndown":"^5.0.6","@types/ws":"^8.18.1","@vitest/browser":"^4.1.10","@vitest/browser-playwright":"^4.1.10","@xterm/headless":"^6.1.0-beta.213",dotenv:"^17.2.3",esbuild:"0.28.1",eslint:"^9.25.0","eslint-config-expo":"~10.0.0","expo-gradle-jvmargs":"^1.1.2",jsdom:"^20.0.3","material-icon-theme":"^5.32.0",playwright:"^1.56.1","serve-sim":"^0.1.40",typescript:"~5.9.2",vitest:"^4.1.10",wrangler:"^4.105.0",ws:"^8.20.0"}}},3559,[]);
|
|
15215
15215
|
__d(function(g,r,i,a,m,e,d){"use strict";Object.defineProperty(e,'__esModule',{value:!0}),Object.defineProperty(e,"DaemonConnectionTestError",{enumerable:!0,get:function(){return y}}),e.isPlaintextDirectConnectionBlocked=w,e.buildClientConfig=T,e.connectAndProbe=C,e.connectToDaemon=async function(t,n,o=l){h(t);return C(await T(t,n?.serverId,n,o),E(t,n),o)};var t=r(d[0]),n=r(d[1]),o=r(d[2]),s=r(d[3]),c=r(d[4]);const l={getClientId:n.getOrCreateClientId,resolveAppVersion:o.resolveAppVersion,createLocalTransportFactory:c.createDesktopLocalDaemonTransportFactory,buildLocalTransportUrl:c.buildLocalDaemonTransportUrl,createClient:n=>new t.DaemonClient(n)};function u(t){if("string"!=typeof t)return null;const n=t.trim();return n.length>0?n:null}function p(t,n){const o=t&&("transport error"===t.toLowerCase()||"transport closed"===t.toLowerCase()),s=n&&("transport error"===n.toLowerCase()||"transport closed"===n.toLowerCase()||"unable to connect"===n.toLowerCase());return o&&n&&!s?n:t||(n||"Unable to connect")}function f(t){if(!t.config.password)return!1;const n=[t.reason,t.lastError].filter(Boolean).join("\n").toLowerCase();return n.includes("401")||n.includes("4001")||n.includes("unauthorized")||n.includes("code 1006")}class y extends Error{constructor(t,n){super(t),this.name="DaemonConnectionTestError",this.reason=n.reason,this.lastError=n.lastError}}function b(t){const n=t.toLowerCase();if("localhost"===n||n.endsWith(".localhost"))return!0;if(n.includes(":"))try{return"[::1]"===new URL(`http://[${n}]`).hostname}catch{return!1}const o=n.split(".");return 4===o.length&&"127"===o[0]&&o.every(t=>/^\d{1,3}$/.test(t)&&Number(t)<=255)}function w(t,n=("undefined"==typeof window?null:window.location?.protocol??null)){return"https:"===n&&"directTcp"===t.type&&!0!==t.useTls&&!b((0,s.parseHostPort)(t.endpoint).host)}function h(t){if(!w(t))return;const n="TLS is required for non-local direct connections from an HTTPS page";throw new y(n,{reason:n,lastError:null})}async function T(t,n,o,c=l){const u=await c.getClientId(),p=c.createLocalTransportFactory(),f=Object.assign({clientId:u,clientType:"mobile",appVersion:c.resolveAppVersion()??void 0,suppressSendErrors:!0,reconnect:{enabled:!1}},o?.capabilities?{capabilities:o.capabilities}:{},o?.trace?{trace:o.trace}:{},"directSocket"!==t.type&&"directPipe"!==t.type||!p?{}:{transportFactory:p});if("directSocket"===t.type||"directPipe"===t.type)return Object.assign({},f,{url:c.buildLocalTransportUrl({transportType:"directSocket"===t.type?"socket":"pipe",transportPath:t.path})});if("directTcp"===t.type)return Object.assign({},f,{url:(0,s.buildDaemonWebSocketUrl)(t.endpoint,{useTls:t.useTls??!1})},t.password?{password:t.password}:{});if(!n)throw new Error("serverId is required to probe a relay connection");return Object.assign({},f,{url:(0,s.buildRelayWebSocketUrl)({endpoint:t.relayEndpoint,useTls:t.useTls??(0,s.shouldUseTlsForDefaultHostedRelay)(t.relayEndpoint),serverId:n}),e2ee:{enabled:!0,daemonPublicKeyB64:t.daemonPublicKeyB64}})}function C(t,n,o=l){const s=o.createClient(t);return new Promise((o,c)=>{const l=setTimeout(()=>{s.close().catch(()=>{}),c(new y("Connection timed out",{reason:"Connection timed out",lastError:s.lastError??null}))},n);s.connect().then(()=>{clearTimeout(l);const t=s.getLastServerInfoMessage();if(!t)return s.close().catch(()=>{}),void c(new y("Missing server info message",{reason:"Missing server info message",lastError:s.lastError??null}));o({client:s,serverId:t.serverId,hostname:t.hostname})}).catch(n=>{clearTimeout(l);const o=u(n instanceof Error?n.message:String(n)),b=u(s.lastError),w=f({config:t,reason:o,lastError:b})?"Incorrect password":p(o,b);s.close().catch(()=>{}),c(new y(w,{reason:o,lastError:b}))})})}function E(t,n){return n?.timeoutMs?n.timeoutMs:"relay"===t.type?1e4:6e3}},3560,[3509,3561,3558,3552,3554]);
|
|
15216
15216
|
__d(function(g,r,i,a,m,_e,d){"use strict";Object.defineProperty(_e,'__esModule',{value:!0}),_e.createClientIdResolver=s,_e.getOrCreateClientId=async function(){return f.getOrCreate()};var t,e=r(d[0]),n=(t=e)&&t.__esModule?t:{default:t},o=r(d[1]),u=r(d[2]);const c="@byspace:client-id-v1",l=o.z.string().trim().min(1);function s(t){const e=t.storageKey??c;let n=null,o=null;return{async getOrCreate(){if(n)return n;if(o)return o;o=(async()=>{const o=await(0,u.readValidatedString)(t.storage,e,l);if(o)return n=o,o;const c=`cid_${t.generateUuid()}`;return await t.storage.setItem(e,c),n=c,c})();try{return await o}finally{o=null}}}}const f=s({storage:n.default,generateUuid:function(){const t=globalThis.crypto;return t&&"function"==typeof t.randomUUID?t.randomUUID().replace(/-/g,""):`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}})},3561,[1586,1600,1679]);
|
|
15217
15217
|
__d(function(g,r,i,a,m,e,d){"use strict";function n(n){const t=n.probeByConnectionId.get(n.connectionId);return"available"===t?.status?t.latencyMs:null}Object.defineProperty(e,'__esModule',{value:!0}),e.selectBestConnection=function(t){const{candidates:o,probeByConnectionId:c}=t;if(0===o.length)return null;let l=null,u=null;for(const t of o){const o=n({connectionId:t.connectionId,probeByConnectionId:c});null!==o&&((null===u||o<u)&&(l=t.connectionId,u=o))}return l}},3562,[]);
|
|
Binary file
|
|
Binary file
|
|
@@ -85,6 +85,6 @@
|
|
|
85
85
|
<body>
|
|
86
86
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
87
87
|
<div id="root"></div>
|
|
88
|
-
<script src="/_expo/static/js/web/index-
|
|
88
|
+
<script src="/_expo/static/js/web/index-f8da343db0af2e8a9e2196188fcf15be.js" defer></script>
|
|
89
89
|
</body>
|
|
90
90
|
</html>
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytetrue/byspace",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"description": "BySpace CLI - control your AI coding agents from the command line",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"access": "public"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@bytetrue/byspace-client": "0.7.
|
|
45
|
-
"@bytetrue/byspace-protocol": "0.7.
|
|
46
|
-
"@bytetrue/byspace-server": "0.7.
|
|
44
|
+
"@bytetrue/byspace-client": "0.7.2",
|
|
45
|
+
"@bytetrue/byspace-protocol": "0.7.2",
|
|
46
|
+
"@bytetrue/byspace-server": "0.7.2",
|
|
47
47
|
"@clack/prompts": "^1.0.0",
|
|
48
48
|
"chalk": "^5.3.0",
|
|
49
49
|
"commander": "^12.0.0",
|
|
@@ -71,12 +71,12 @@
|
|
|
71
71
|
"@lezer/xml": "^1.0.6",
|
|
72
72
|
"@lezer/yaml": "^1.0.4",
|
|
73
73
|
"lezer-elixir": "^1.1.2",
|
|
74
|
-
"@bytetrue/byspace-highlight": "0.7.
|
|
74
|
+
"@bytetrue/byspace-highlight": "0.7.2",
|
|
75
75
|
"zod": "^4.4.3",
|
|
76
|
-
"@bytetrue/byspace-plugin": "0.7.
|
|
76
|
+
"@bytetrue/byspace-plugin": "0.7.2",
|
|
77
77
|
"base64-js": "^1.5.1",
|
|
78
78
|
"tweetnacl": "^1.0.3",
|
|
79
|
-
"@bytetrue/byspace-relay": "0.7.
|
|
79
|
+
"@bytetrue/byspace-relay": "0.7.2",
|
|
80
80
|
"@agentclientprotocol/sdk": "^0.17.1",
|
|
81
81
|
"@anthropic-ai/claude-agent-sdk": "0.3.220",
|
|
82
82
|
"@anthropic-ai/sdk": "^0.104.2",
|