@bytetrue/byspace 0.2.0-beta.4 → 0.2.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 (39) hide show
  1. package/dist/commands/daemon/local-daemon.d.ts +2 -0
  2. package/dist/commands/daemon/local-daemon.js +21 -1
  3. package/dist/commands/daemon/start.js +11 -1
  4. package/node_modules/@bytetrue/byspace-client/dist/daemon-client.d.ts +3 -1
  5. package/node_modules/@bytetrue/byspace-client/dist/daemon-client.js +12 -0
  6. package/node_modules/@bytetrue/byspace-client/package.json +1 -1
  7. package/node_modules/@bytetrue/byspace-highlight/package.json +1 -1
  8. package/node_modules/@bytetrue/byspace-protocol/dist/generated/validation/ws-outbound.aot.js +9447 -9399
  9. package/node_modules/@bytetrue/byspace-protocol/dist/messages.d.ts +123 -0
  10. package/node_modules/@bytetrue/byspace-protocol/dist/messages.js +30 -0
  11. package/node_modules/@bytetrue/byspace-protocol/dist/validation/ws-outbound-schema-metadata.d.ts +20 -0
  12. package/node_modules/@bytetrue/byspace-protocol/package.json +1 -1
  13. package/node_modules/@bytetrue/byspace-relay/package.json +1 -1
  14. package/node_modules/@bytetrue/byspace-server/dist/server/server/config.js +1 -1
  15. package/node_modules/@bytetrue/byspace-server/dist/server/server/orchestration-skills.d.ts +11 -0
  16. package/node_modules/@bytetrue/byspace-server/dist/server/server/orchestration-skills.js +197 -0
  17. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/daemon-session.d.ts +6 -0
  18. package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/daemon-session.js +15 -0
  19. package/node_modules/@bytetrue/byspace-server/dist/server/server/session.js +4 -0
  20. package/node_modules/@bytetrue/byspace-server/dist/server/server/websocket-server.js +2 -0
  21. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-worker-process.js +8 -1
  22. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal.d.ts +1 -0
  23. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal.js +33 -10
  24. package/node_modules/@bytetrue/byspace-server/dist/server/terminal/worker-terminal-manager.js +3 -0
  25. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/{index-38ca1829d34e8fa57f6076abc4391d37.js → index-ba698ed4743a3ed98c16928de3e54cb1.js} +33 -33
  26. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-ba698ed4743a3ed98c16928de3e54cb1.js.br +0 -0
  27. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-ba698ed4743a3ed98c16928de3e54cb1.js.gz +0 -0
  28. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/index.html +1 -1
  29. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/index.html.br +0 -0
  30. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/index.html.gz +0 -0
  31. package/node_modules/@bytetrue/byspace-server/dist/skills/byspace/SKILL.md +147 -0
  32. package/node_modules/@bytetrue/byspace-server/dist/skills/byspace-advisor/SKILL.md +64 -0
  33. package/node_modules/@bytetrue/byspace-server/dist/skills/byspace-committee/SKILL.md +83 -0
  34. package/node_modules/@bytetrue/byspace-server/dist/skills/byspace-handoff/SKILL.md +71 -0
  35. package/node_modules/@bytetrue/byspace-server/dist/skills/byspace-loop/SKILL.md +45 -0
  36. package/node_modules/@bytetrue/byspace-server/package.json +3 -2
  37. package/package.json +6 -6
  38. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-38ca1829d34e8fa57f6076abc4391d37.js.br +0 -0
  39. package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-38ca1829d34e8fa57f6076abc4391d37.js.gz +0 -0
@@ -35,6 +35,8 @@ export interface LocalDaemonState {
35
35
  export interface DetachedStartResult {
36
36
  pid: number | null;
37
37
  logPath: string;
38
+ hostedWebUrl: string;
39
+ webUiUrl: string | null;
38
40
  }
39
41
  export interface StopLocalDaemonOptions {
40
42
  home?: string;
@@ -3,6 +3,7 @@ import { existsSync, readFileSync, unlinkSync } from "node:fs";
3
3
  import { createRequire } from "node:module";
4
4
  import path from "node:path";
5
5
  import { loadConfig, resolveBySpaceHome, spawnProcess } from "@bytetrue/byspace-server";
6
+ import { normalizeLoopbackToLocalhost } from "@bytetrue/byspace-protocol/daemon-endpoints";
6
7
  import { resolveBySpaceHostedRelease } from "@bytetrue/byspace-protocol/release-channel";
7
8
  import treeKill from "tree-kill";
8
9
  import { tryConnectToDaemon } from "../../utils/client.js";
@@ -11,7 +12,8 @@ const DETACHED_STARTUP_GRACE_MS = 1200;
11
12
  const PID_POLL_INTERVAL_MS = 100;
12
13
  const DAEMON_LOG_FILENAME = "daemon.log";
13
14
  const DAEMON_PID_FILENAME = "byspace.pid";
14
- const CURRENT_RELEASE_RELAY_ENDPOINT = resolveBySpaceHostedRelease(resolveCliVersion()).relayEndpoint;
15
+ const CURRENT_RELEASE = resolveBySpaceHostedRelease(resolveCliVersion());
16
+ const CURRENT_RELEASE_RELAY_ENDPOINT = CURRENT_RELEASE.relayEndpoint;
15
17
  export const DEFAULT_STOP_TIMEOUT_MS = 15000;
16
18
  export const DEFAULT_KILL_TIMEOUT_MS = 3000;
17
19
  const require = createRequire(import.meta.url);
@@ -366,6 +368,17 @@ export function resolveTcpHostFromListen(listen) {
366
368
  }
367
369
  return null;
368
370
  }
371
+ function resolveWebUiUrl(listen) {
372
+ const host = resolveTcpHostFromListen(listen);
373
+ if (!host)
374
+ return null;
375
+ try {
376
+ return new URL(`http://${normalizeLoopbackToLocalhost(host)}`).toString();
377
+ }
378
+ catch {
379
+ return null;
380
+ }
381
+ }
369
382
  export function resolveLocalDaemonState(options = {}) {
370
383
  const env = {
371
384
  ...envWithHome(options.home),
@@ -413,6 +426,7 @@ export async function startLocalDaemonDetached(options, runtime = defaultDaemonL
413
426
  const childEnv = buildChildEnv(options);
414
427
  const byspaceHome = runtime.resolveHome(childEnv);
415
428
  const logPath = path.join(byspaceHome, DAEMON_LOG_FILENAME);
429
+ const config = loadConfig(byspaceHome, { env: childEnv });
416
430
  const child = runtime.spawnDetached(process.execPath, [...process.execArgv, daemonRunnerEntry, ...buildRunnerArgs(options)], {
417
431
  detached: true,
418
432
  envMode: "internal",
@@ -453,6 +467,12 @@ export async function startLocalDaemonDetached(options, runtime = defaultDaemonL
453
467
  return {
454
468
  pid: child.pid ?? null,
455
469
  logPath,
470
+ webUiUrl: config.webUi?.enabled &&
471
+ config.webUi.distDir &&
472
+ existsSync(path.join(config.webUi.distDir, "index.html"))
473
+ ? resolveWebUiUrl(config.listen)
474
+ : null,
475
+ hostedWebUrl: config.appBaseUrl ?? CURRENT_RELEASE.appBaseUrl,
456
476
  };
457
477
  }
458
478
  export function startLocalDaemonForeground(options, runtime = defaultDaemonLaunchRuntime) {
@@ -13,7 +13,7 @@ export function startCommand() {
13
13
  .option("--relay-use-tls", "Use wss:// for the relay connection and pairing offers")
14
14
  .option("--no-mcp", "Disable the Agent MCP HTTP endpoint")
15
15
  .option("--no-inject-mcp", "Disable auto-injecting the BySpace MCP into created agents")
16
- .option("--web-ui", "Enable the bundled daemon web UI")
16
+ .option("--web-ui", "Enable the bundled daemon web UI (default)")
17
17
  .option("--no-web-ui", "Disable the bundled daemon web UI")
18
18
  .option("--hostnames <hosts>", 'Daemon hostnames (comma-separated, e.g. "myhost,.example.com" or "true" for any)')
19
19
  .addOption(new Option("--allowed-hosts <hosts>").hideHelp())
@@ -34,6 +34,16 @@ export async function runStart(options) {
34
34
  const startup = await startLocalDaemonDetached(options);
35
35
  console.log(chalk.green(`Daemon starting in background (PID ${startup.pid ?? "unknown"}).`));
36
36
  console.log(chalk.dim(`Logs: ${startup.logPath}`));
37
+ console.log();
38
+ if (startup.webUiUrl) {
39
+ console.log(chalk.green("Local Web UI is running."));
40
+ console.log("Open BySpace using either:");
41
+ console.log(` ${chalk.bold("Local:")} ${chalk.cyan(startup.webUiUrl)}`);
42
+ console.log(` ${chalk.bold("Hosted:")} ${chalk.cyan(startup.hostedWebUrl)}`);
43
+ }
44
+ else {
45
+ console.log(`${chalk.bold("Hosted Web:")} ${chalk.cyan(startup.hostedWebUrl)}`);
46
+ }
37
47
  }
38
48
  catch (err) {
39
49
  exitWithError(getErrorMessage(err));
@@ -1,7 +1,7 @@
1
1
  import type { z } from "zod";
2
2
  import { type ClientCapability } from "@bytetrue/byspace-protocol/client-capabilities";
3
3
  import { AgentRefreshedStatusPayloadSchema, CheckoutRenameBranchResponseSchema, RenameTerminalResponseSchema, RestartRequestedStatusPayloadSchema, ShutdownRequestedStatusPayloadSchema, DaemonUpdateResponseSchema, type ServerInfoStatusPayload } from "@bytetrue/byspace-protocol/messages";
4
- import type { AgentStreamEventPayload, AgentSnapshotPayload, ProjectPlacementPayload, AgentPermissionResolvedMessage, CreateAgentRequestMessage, CreateBySpaceWorktreeRequest, FileDownloadTokenResponse, FileUploadResponse, FileExplorerResponse, FetchAgentTimelineResponseMessage, AgentForkContextResponseMessage, GitSetupOptions, CheckoutStatusResponse, CheckoutCommit, ParsedDiffFile, CheckoutCommitResponse, CheckoutMergeResponse, CheckoutMergeFromBaseResponse, CheckoutPullResponse, CheckoutPushResponse, CheckoutRefreshResponse, CheckoutPrCreateResponse, CheckoutPrMergeResponse, CheckoutPrMergeMethod, CheckoutForgeSetAutoMergeResponse, CheckoutGithubSetAutoMergeResponse, CheckoutForgeGetCheckDetailsResponse, CheckoutGithubGetCheckDetailsResponse, CheckoutPrStatusResponse, PullRequestTimelineResponse, CheckoutSwitchBranchResponse, StashSaveResponse, StashPopResponse, StashListResponse, ValidateBranchResponse, BranchSuggestionsResponse, ForgeSearchResponse, ForgeSearchRequest, GitHubSearchResponse, GitHubSearchRequest, DirectorySuggestionsResponse, BySpaceWorktreeListResponse, BySpaceWorktreeArchiveResponse, ProjectIconResponse, ProjectAddResponse, ProjectCreateDirectoryResponse, OpenProjectResponseMessage, WorkspaceGithubSearchRepositoriesResponse, ProjectGithubCloneProtocol, ProjectGithubCloneResponse, ArchiveWorkspaceResponseMessage, WorkspaceSetupStatusResponseMessage, ListCommandsResponse, ListProviderFeaturesResponseMessage, ListProviderModelsResponseMessage, ListProviderModesResponseMessage, ListAvailableProvidersResponse, GetProvidersSnapshotResponseMessage, RefreshProvidersSnapshotResponseMessage, ProviderDiagnosticResponseMessage, ProviderUsageListResponseMessage, DaemonGetStatusResponse, DaemonGetPairingOfferResponse, DiagnosticsResponse, AgentRewindResponseMessage, ListTerminalsResponse, CreateTerminalResponse, SubscribeTerminalResponse, SubscribeTerminalRequest, CloseItemsResponse, KillTerminalResponse, CaptureTerminalResponse, TerminalInput, SessionInboundMessage, SessionOutboundMessage, SendAgentMessageRequest, BySpaceConfigRaw, BySpaceConfigRevision, WorkspaceCreateRequest, WorkspaceRecoveryState } from "@bytetrue/byspace-protocol/messages";
4
+ import type { AgentStreamEventPayload, AgentSnapshotPayload, ProjectPlacementPayload, AgentPermissionResolvedMessage, CreateAgentRequestMessage, CreateBySpaceWorktreeRequest, FileDownloadTokenResponse, FileUploadResponse, FileExplorerResponse, FetchAgentTimelineResponseMessage, AgentForkContextResponseMessage, GitSetupOptions, CheckoutStatusResponse, CheckoutCommit, ParsedDiffFile, CheckoutCommitResponse, CheckoutMergeResponse, CheckoutMergeFromBaseResponse, CheckoutPullResponse, CheckoutPushResponse, CheckoutRefreshResponse, CheckoutPrCreateResponse, CheckoutPrMergeResponse, CheckoutPrMergeMethod, CheckoutForgeSetAutoMergeResponse, CheckoutGithubSetAutoMergeResponse, CheckoutForgeGetCheckDetailsResponse, CheckoutGithubGetCheckDetailsResponse, CheckoutPrStatusResponse, PullRequestTimelineResponse, CheckoutSwitchBranchResponse, StashSaveResponse, StashPopResponse, StashListResponse, ValidateBranchResponse, BranchSuggestionsResponse, ForgeSearchResponse, ForgeSearchRequest, GitHubSearchResponse, GitHubSearchRequest, DirectorySuggestionsResponse, BySpaceWorktreeListResponse, BySpaceWorktreeArchiveResponse, ProjectIconResponse, ProjectAddResponse, ProjectCreateDirectoryResponse, OpenProjectResponseMessage, WorkspaceGithubSearchRepositoriesResponse, ProjectGithubCloneProtocol, ProjectGithubCloneResponse, ArchiveWorkspaceResponseMessage, WorkspaceSetupStatusResponseMessage, ListCommandsResponse, ListProviderFeaturesResponseMessage, ListProviderModelsResponseMessage, ListProviderModesResponseMessage, ListAvailableProvidersResponse, GetProvidersSnapshotResponseMessage, RefreshProvidersSnapshotResponseMessage, ProviderDiagnosticResponseMessage, ProviderUsageListResponseMessage, DaemonGetStatusResponse, DaemonGetPairingOfferResponse, DiagnosticsResponse, DaemonOrchestrationSkillsGetStatusResponse, DaemonOrchestrationSkillsSetInstalledResponse, AgentRewindResponseMessage, ListTerminalsResponse, CreateTerminalResponse, SubscribeTerminalResponse, SubscribeTerminalRequest, CloseItemsResponse, KillTerminalResponse, CaptureTerminalResponse, TerminalInput, SessionInboundMessage, SessionOutboundMessage, SendAgentMessageRequest, BySpaceConfigRaw, BySpaceConfigRevision, WorkspaceCreateRequest, WorkspaceRecoveryState } from "@bytetrue/byspace-protocol/messages";
5
5
  import type { AgentPermissionRequest, AgentPermissionResponse, AgentPersistenceHandle, AgentProviderNotice, AgentProvider, AgentSessionConfig } from "@bytetrue/byspace-protocol/agent-types";
6
6
  import type { MutableDaemonConfig, MutableDaemonConfigPatch } from "@bytetrue/byspace-protocol/messages";
7
7
  import { type DaemonTransportFactory, type WebSocketFactory } from "./daemon-client-transport.js";
@@ -935,6 +935,8 @@ export declare class DaemonClient {
935
935
  config: MutableDaemonConfig;
936
936
  }>;
937
937
  getDaemonStatus(options?: DaemonStatusOptions): Promise<DaemonStatusPayload>;
938
+ getOrchestrationSkillsStatus(requestId?: string): Promise<DaemonOrchestrationSkillsGetStatusResponse["payload"]>;
939
+ setOrchestrationSkillsInstalled(installed: boolean, requestId?: string): Promise<DaemonOrchestrationSkillsSetInstalledResponse["payload"]>;
938
940
  getDaemonPairingOffer(options?: DaemonPairingOfferOptions): Promise<DaemonPairingOfferPayload>;
939
941
  collectDiagnostics(requestId?: string): Promise<DiagnosticsPayload>;
940
942
  patchDaemonConfig(config: MutableDaemonConfigPatch, requestId?: string): Promise<{
@@ -2761,6 +2761,18 @@ export class DaemonClient {
2761
2761
  timeout: options?.timeout,
2762
2762
  });
2763
2763
  }
2764
+ async getOrchestrationSkillsStatus(requestId) {
2765
+ return this.sendNamespacedCorrelatedSessionRequest({
2766
+ requestId,
2767
+ message: { type: "daemon.orchestration_skills.get_status.request" },
2768
+ });
2769
+ }
2770
+ async setOrchestrationSkillsInstalled(installed, requestId) {
2771
+ return this.sendNamespacedCorrelatedSessionRequest({
2772
+ requestId,
2773
+ message: { type: "daemon.orchestration_skills.set_installed.request", installed },
2774
+ });
2775
+ }
2764
2776
  async getDaemonPairingOffer(options) {
2765
2777
  return this.sendCorrelatedSessionRequest({
2766
2778
  requestId: options?.requestId,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytetrue/byspace-client",
3
- "version": "0.2.0-beta.4",
3
+ "version": "0.2.0",
4
4
  "private": true,
5
5
  "description": "BySpace client SDK package",
6
6
  "files": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytetrue/byspace-highlight",
3
- "version": "0.2.0-beta.4",
3
+ "version": "0.2.0",
4
4
  "private": true,
5
5
  "files": [
6
6
  "dist",