@bytetrue/byspace 0.14.6 → 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 (90) hide show
  1. package/dist/commands/daemon/index.js +16 -0
  2. package/dist/commands/daemon/install-service.d.ts +15 -0
  3. package/dist/commands/daemon/install-service.js +69 -0
  4. package/dist/commands/daemon/local-daemon.d.ts +1 -0
  5. package/dist/commands/daemon/local-daemon.js +1 -1
  6. package/dist/commands/daemon/service/backend.d.ts +16 -0
  7. package/dist/commands/daemon/service/backend.js +50 -0
  8. package/dist/commands/daemon/service/launchd.d.ts +15 -0
  9. package/dist/commands/daemon/service/launchd.js +101 -0
  10. package/dist/commands/daemon/service/service-spec.d.ts +54 -0
  11. package/dist/commands/daemon/service/service-spec.js +95 -0
  12. package/dist/commands/daemon/service/service-status.d.ts +28 -0
  13. package/dist/commands/daemon/service/service-status.js +32 -0
  14. package/dist/commands/daemon/service/systemd.d.ts +22 -0
  15. package/dist/commands/daemon/service/systemd.js +90 -0
  16. package/dist/commands/daemon/service/windows-task.d.ts +12 -0
  17. package/dist/commands/daemon/service/windows-task.js +75 -0
  18. package/dist/commands/daemon/service-status.d.ts +13 -0
  19. package/dist/commands/daemon/service-status.js +30 -0
  20. package/dist/commands/daemon/uninstall-service.d.ts +11 -0
  21. package/dist/commands/daemon/uninstall-service.js +53 -0
  22. package/node_modules/@bytetrue/client/package.json +3 -3
  23. package/node_modules/@bytetrue/highlight/package.json +1 -1
  24. package/node_modules/@bytetrue/protocol/dist/generated/validation/ws-outbound.aot.js +10901 -10861
  25. package/node_modules/@bytetrue/protocol/dist/messages.d.ts +231 -92
  26. package/node_modules/@bytetrue/protocol/dist/messages.js +29 -0
  27. package/node_modules/@bytetrue/protocol/dist/validation/ws-outbound-schema-metadata.d.ts +44 -22
  28. package/node_modules/@bytetrue/protocol/package.json +1 -1
  29. package/node_modules/@bytetrue/relay/package.json +1 -1
  30. package/node_modules/@bytetrue/server/dist/server/server/byspace-env.d.ts +1 -0
  31. package/node_modules/@bytetrue/server/dist/server/server/byspace-env.js +9 -0
  32. package/node_modules/@bytetrue/server/dist/server/server/daemon-config-store.d.ts +11 -0
  33. package/node_modules/@bytetrue/server/dist/server/server/daemon-config-store.js +71 -1
  34. package/node_modules/@bytetrue/server/dist/server/server/session/daemon/daemon-service-install.d.ts +25 -0
  35. package/node_modules/@bytetrue/server/dist/server/server/session/daemon/daemon-service-install.js +182 -0
  36. package/node_modules/@bytetrue/server/dist/server/server/session/daemon/daemon-service-manager.d.ts +21 -0
  37. package/node_modules/@bytetrue/server/dist/server/server/session/daemon/daemon-service-manager.js +154 -0
  38. package/node_modules/@bytetrue/server/dist/server/server/websocket-server.js +2 -0
  39. package/node_modules/@bytetrue/server/dist/server/terminal/agent-hooks/pi/pi-extension.d.ts +1 -1
  40. package/node_modules/@bytetrue/server/dist/server/terminal/agent-hooks/pi/pi-extension.js +16 -1
  41. package/node_modules/@bytetrue/server/dist/server/terminal/terminal.js +6 -0
  42. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/{index-679e8946b965f52a7a27dc9c54f59a4c.js → index-eade2661e21bbc08a50d56f1c6b0917a.js} +537 -535
  43. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/index-eade2661e21bbc08a50d56f1c6b0917a.js.br +0 -0
  44. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/index-eade2661e21bbc08a50d56f1c6b0917a.js.gz +0 -0
  45. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/{indexeddb-attachment-store-d61d5dd974e90216cec99e62c343ffc7.js → indexeddb-attachment-store-a2e8491be0374dc2a52abfe002ecabe9.js} +1 -1
  46. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/{indexeddb-attachment-store-d61d5dd974e90216cec99e62c343ffc7.js.br → indexeddb-attachment-store-a2e8491be0374dc2a52abfe002ecabe9.js.br} +0 -0
  47. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-a2e8491be0374dc2a52abfe002ecabe9.js.gz +0 -0
  48. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/{native-file-attachment-store-df0c0ebe8d233a5a74eddb59a110f00b.js → native-file-attachment-store-6ba28513708667bbad7dd5434a0f8d5b.js} +3 -3
  49. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-6ba28513708667bbad7dd5434a0f8d5b.js.br +0 -0
  50. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-6ba28513708667bbad7dd5434a0f8d5b.js.gz +0 -0
  51. package/node_modules/@bytetrue/server/dist/server/web-ui/apple-touch-icon.png +0 -0
  52. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark-attention.9c2d51faf93468f68840811c0d9a8c6f.png +0 -0
  53. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark-running.a52155010955dca55546513b60bb2e2b.png +0 -0
  54. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark.ee7787d5c6bd1ad67c31b9949a832f7a.png +0 -0
  55. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light-attention.9c2d51faf93468f68840811c0d9a8c6f.png +0 -0
  56. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light-running.a52155010955dca55546513b60bb2e2b.png +0 -0
  57. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light.ee7787d5c6bd1ad67c31b9949a832f7a.png +0 -0
  58. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/notification-icon.ba5a7dce236a7febe5d803b16f027b70.png +0 -0
  59. package/node_modules/@bytetrue/server/dist/server/web-ui/favicon.ico +0 -0
  60. package/node_modules/@bytetrue/server/dist/server/web-ui/index.html +1 -1
  61. package/node_modules/@bytetrue/server/dist/server/web-ui/index.html.br +0 -0
  62. package/node_modules/@bytetrue/server/dist/server/web-ui/index.html.gz +0 -0
  63. package/node_modules/@bytetrue/server/dist/server/web-ui/manifest.json +14 -2
  64. package/node_modules/@bytetrue/server/dist/server/web-ui/manifest.json.br +0 -0
  65. package/node_modules/@bytetrue/server/dist/server/web-ui/manifest.json.gz +0 -0
  66. package/node_modules/@bytetrue/server/dist/server/web-ui/pwa-icon-192.png +0 -0
  67. package/node_modules/@bytetrue/server/dist/server/web-ui/pwa-icon-512.png +0 -0
  68. package/node_modules/@bytetrue/server/dist/server/web-ui/pwa-maskable-192.png +0 -0
  69. package/node_modules/@bytetrue/server/dist/server/web-ui/pwa-maskable-512.png +0 -0
  70. package/node_modules/@bytetrue/server/dist/src/server/byspace-env.js +9 -0
  71. package/node_modules/@bytetrue/server/dist/src/server/daemon-config-store.js +71 -1
  72. package/node_modules/@bytetrue/server/dist/src/server/session/daemon/daemon-service-install.js +182 -0
  73. package/node_modules/@bytetrue/server/dist/src/server/session/daemon/daemon-service-manager.js +154 -0
  74. package/node_modules/@bytetrue/server/dist/src/server/session/daemon/install-origin.js +64 -0
  75. package/node_modules/@bytetrue/server/dist/src/server/session/daemon/npm-global-cli.js +98 -0
  76. package/node_modules/@bytetrue/server/dist/src/terminal/terminal.js +6 -0
  77. package/node_modules/@bytetrue/server/package.json +15 -5
  78. package/package.json +7 -7
  79. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/index-679e8946b965f52a7a27dc9c54f59a4c.js.br +0 -0
  80. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/index-679e8946b965f52a7a27dc9c54f59a4c.js.gz +0 -0
  81. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/indexeddb-attachment-store-d61d5dd974e90216cec99e62c343ffc7.js.gz +0 -0
  82. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-df0c0ebe8d233a5a74eddb59a110f00b.js.br +0 -0
  83. package/node_modules/@bytetrue/server/dist/server/web-ui/_expo/static/js/web/native-file-attachment-store-df0c0ebe8d233a5a74eddb59a110f00b.js.gz +0 -0
  84. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
  85. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
  86. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-dark.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
  87. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light-attention.882b3a27dcb2073e9e31b334f9ed9728.png +0 -0
  88. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light-running.8112342ff0d39e047a7f8d4fad9402f3.png +0 -0
  89. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/favicon-light.8005ed36ac07a5a7c60de25780897bd4.png +0 -0
  90. package/node_modules/@bytetrue/server/dist/server/web-ui/assets/assets/images/notification-icon.3bf81d33ddbf380606bdd248ba83e158.png +0 -0
@@ -0,0 +1,64 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { z } from "zod";
5
+ import { isRealpathInsideRoot } from "../../../utils/path.js";
6
+ import { BYSPACE_CLI_PACKAGE } from "./npm-global-cli.js";
7
+ const PackageJsonSchema = z.object({ name: z.string().optional() }).passthrough();
8
+ export const daemonInstallOriginRuntime = {
9
+ resolveCurrentServerPackageRoot,
10
+ };
11
+ export function validateDaemonInstallOrigin(install, daemonVersion, runtime = daemonInstallOriginRuntime) {
12
+ if (install.isLinked) {
13
+ return `The global ${BYSPACE_CLI_PACKAGE} install is linked; self-update only supports normal npm global installs.`;
14
+ }
15
+ if (daemonVersion && install.version !== daemonVersion) {
16
+ return `This daemon is not running from the npm global ${BYSPACE_CLI_PACKAGE} install (global npm has ${install.version}, daemon is ${daemonVersion}).`;
17
+ }
18
+ const currentServerPackageRoot = runtime.resolveCurrentServerPackageRoot();
19
+ if (!currentServerPackageRoot) {
20
+ return "Unable to verify that this daemon is running from an npm global install.";
21
+ }
22
+ if (!isCurrentServerUnderNpmInstall(currentServerPackageRoot, install)) {
23
+ return `This daemon is not running from the npm global ${BYSPACE_CLI_PACKAGE} install.`;
24
+ }
25
+ return null;
26
+ }
27
+ function isCurrentServerUnderNpmInstall(currentServerPackageRoot, install) {
28
+ const roots = install.globalRootPath
29
+ ? [install.packagePath, globalNodeModulesPath(install.globalRootPath)]
30
+ : [install.packagePath];
31
+ return roots.some((root) => isRealpathInsideRoot(root, currentServerPackageRoot));
32
+ }
33
+ function globalNodeModulesPath(globalRootPath) {
34
+ const normalized = path.normalize(globalRootPath);
35
+ return path.basename(normalized) === "node_modules"
36
+ ? normalized
37
+ : path.join(normalized, "node_modules");
38
+ }
39
+ function resolveCurrentServerPackageRoot() {
40
+ return resolvePackageRootFrom(fileURLToPath(import.meta.url), "@bytetrue/server");
41
+ }
42
+ function resolvePackageRootFrom(startPath, packageName) {
43
+ let currentDir = path.dirname(startPath);
44
+ while (true) {
45
+ const packageJsonPath = path.join(currentDir, "package.json");
46
+ if (existsSync(packageJsonPath)) {
47
+ try {
48
+ const packageJson = PackageJsonSchema.parse(JSON.parse(readFileSync(packageJsonPath, "utf8")));
49
+ if (packageJson.name === packageName) {
50
+ return currentDir;
51
+ }
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ const parentDir = path.dirname(currentDir);
58
+ if (parentDir === currentDir) {
59
+ return null;
60
+ }
61
+ currentDir = parentDir;
62
+ }
63
+ }
64
+ //# sourceMappingURL=install-origin.js.map
@@ -0,0 +1,98 @@
1
+ import { getErrorMessage } from "@bytetrue/protocol/error-utils";
2
+ import { z } from "zod";
3
+ import { execCommand } from "../../../utils/spawn.js";
4
+ export const BYSPACE_CLI_PACKAGE = "@bytetrue/byspace";
5
+ const NPM_PROBE_TIMEOUT_MS = 10000;
6
+ const NPM_INSTALL_TIMEOUT_MS = 300000;
7
+ const NPM_MAX_BUFFER_BYTES = 10 * 1024 * 1024;
8
+ const NpmGlobalListSchema = z
9
+ .object({
10
+ path: z.string().optional(),
11
+ dependencies: z.record(z.string(), z.unknown()).optional(),
12
+ })
13
+ .passthrough();
14
+ const NpmGlobalCliPackageSchema = z
15
+ .object({
16
+ version: z.string(),
17
+ path: z.string(),
18
+ link: z.boolean().optional(),
19
+ })
20
+ .passthrough();
21
+ const CommandErrorSchema = z
22
+ .object({
23
+ code: z.union([z.number(), z.string()]).optional(),
24
+ stdout: z.string().optional(),
25
+ stderr: z.string().optional(),
26
+ })
27
+ .passthrough();
28
+ async function runExternalCommand(command, args, options) {
29
+ try {
30
+ const { stdout, stderr } = await execCommand(command, args, {
31
+ timeout: options?.timeout,
32
+ maxBuffer: options?.maxBuffer,
33
+ });
34
+ return { exitCode: 0, stdout, stderr };
35
+ }
36
+ catch (error) {
37
+ const parsed = CommandErrorSchema.safeParse(error);
38
+ if (!parsed.success) {
39
+ return { exitCode: 1, stdout: "", stderr: getErrorMessage(error) };
40
+ }
41
+ return {
42
+ exitCode: typeof parsed.data.code === "number" ? parsed.data.code : 1,
43
+ stdout: parsed.data.stdout ?? "",
44
+ stderr: parsed.data.stderr || getErrorMessage(error),
45
+ };
46
+ }
47
+ }
48
+ function parseNpmGlobalBySpaceInstall(stdout) {
49
+ let parsedJson;
50
+ try {
51
+ parsedJson = JSON.parse(stdout);
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ const list = NpmGlobalListSchema.safeParse(parsedJson);
57
+ if (!list.success) {
58
+ return null;
59
+ }
60
+ const rawCliPackage = list.data.dependencies?.[BYSPACE_CLI_PACKAGE];
61
+ const cliPackage = NpmGlobalCliPackageSchema.safeParse(rawCliPackage);
62
+ if (!cliPackage.success) {
63
+ return null;
64
+ }
65
+ return {
66
+ version: cliPackage.data.version,
67
+ packagePath: cliPackage.data.path,
68
+ globalRootPath: list.data.path ?? null,
69
+ isLinked: cliPackage.data.link === true,
70
+ };
71
+ }
72
+ export class DefaultNpmGlobalBySpaceCli {
73
+ constructor(runCommand = runExternalCommand) {
74
+ this.runCommand = runCommand;
75
+ }
76
+ async inspect() {
77
+ const result = await this.runCommand("npm", ["-g", "ls", BYSPACE_CLI_PACKAGE, "--json", "--depth=0", "--long"], {
78
+ timeout: NPM_PROBE_TIMEOUT_MS,
79
+ maxBuffer: NPM_MAX_BUFFER_BYTES,
80
+ });
81
+ if (result.exitCode !== 0 && result.stdout.trim().length === 0) {
82
+ throw new Error(result.stderr.trim() || "npm is not available on this host");
83
+ }
84
+ const install = parseNpmGlobalBySpaceInstall(result.stdout);
85
+ if (!install) {
86
+ throw new Error(`${BYSPACE_CLI_PACKAGE} is not installed with npm -g on this host`);
87
+ }
88
+ return install;
89
+ }
90
+ installLatest() {
91
+ return this.runCommand("npm", ["install", "-g", `${BYSPACE_CLI_PACKAGE}@beta`], {
92
+ timeout: NPM_INSTALL_TIMEOUT_MS,
93
+ maxBuffer: NPM_MAX_BUFFER_BYTES,
94
+ });
95
+ }
96
+ }
97
+ export const npmGlobalBySpaceCli = new DefaultNpmGlobalBySpaceCli();
98
+ //# sourceMappingURL=npm-global-cli.js.map
@@ -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.14.6",
3
+ "version": "0.16.0",
4
4
  "description": "BySpace backend server",
5
5
  "files": [
6
6
  "dist/server",
@@ -27,6 +27,16 @@
27
27
  "types": "./dist/server/terminal/agent-hooks/provider-registry.d.ts",
28
28
  "source": "./src/terminal/agent-hooks/provider-registry.ts",
29
29
  "default": "./dist/server/terminal/agent-hooks/provider-registry.js"
30
+ },
31
+ "./daemon-install-origin": {
32
+ "types": "./dist/server/server/session/daemon/install-origin.d.ts",
33
+ "source": "./src/server/session/daemon/install-origin.ts",
34
+ "default": "./dist/server/server/session/daemon/install-origin.js"
35
+ },
36
+ "./npm-global-cli": {
37
+ "types": "./dist/server/server/session/daemon/npm-global-cli.d.ts",
38
+ "source": "./src/server/session/daemon/npm-global-cli.ts",
39
+ "default": "./dist/server/server/session/daemon/npm-global-cli.js"
30
40
  }
31
41
  },
32
42
  "publishConfig": {
@@ -67,10 +77,10 @@
67
77
  "test:e2e:ui": "vitest --ui e2e.test.ts"
68
78
  },
69
79
  "dependencies": {
70
- "@bytetrue/client": "0.14.6",
71
- "@bytetrue/highlight": "0.14.6",
72
- "@bytetrue/protocol": "0.14.6",
73
- "@bytetrue/relay": "0.14.6"
80
+ "@bytetrue/client": "0.16.0",
81
+ "@bytetrue/highlight": "0.16.0",
82
+ "@bytetrue/protocol": "0.16.0",
83
+ "@bytetrue/relay": "0.16.0"
74
84
  },
75
85
  "devDependencies": {
76
86
  "@playwright/test": "^1.56.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytetrue/byspace",
3
- "version": "0.14.6",
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.14.6",
34
- "@bytetrue/highlight": "0.14.6",
35
- "@bytetrue/protocol": "0.14.6",
36
- "@bytetrue/relay": "0.14.6",
37
- "@bytetrue/server": "0.14.6",
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": "23b6b3d85ad3bfe3298c9291b8b9caaea65145d3",
106
+ "gitHead": "c925fa500a5af75d9ddba8892069b10eb3214757",
107
107
  "bundledDependencies": [
108
108
  "@bytetrue/highlight",
109
109
  "@bytetrue/relay",