@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.
- package/dist/commands/daemon/local-daemon.d.ts +2 -0
- package/dist/commands/daemon/local-daemon.js +21 -1
- package/dist/commands/daemon/start.js +11 -1
- package/node_modules/@bytetrue/byspace-client/dist/daemon-client.d.ts +3 -1
- package/node_modules/@bytetrue/byspace-client/dist/daemon-client.js +12 -0
- 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-protocol/dist/generated/validation/ws-outbound.aot.js +9447 -9399
- package/node_modules/@bytetrue/byspace-protocol/dist/messages.d.ts +123 -0
- package/node_modules/@bytetrue/byspace-protocol/dist/messages.js +30 -0
- package/node_modules/@bytetrue/byspace-protocol/dist/validation/ws-outbound-schema-metadata.d.ts +20 -0
- 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/server/config.js +1 -1
- package/node_modules/@bytetrue/byspace-server/dist/server/server/orchestration-skills.d.ts +11 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/server/orchestration-skills.js +197 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/daemon-session.d.ts +6 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/server/session/daemon/daemon-session.js +15 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/server/session.js +4 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/server/websocket-server.js +2 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal-worker-process.js +8 -1
- package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal.d.ts +1 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/terminal/terminal.js +33 -10
- package/node_modules/@bytetrue/byspace-server/dist/server/terminal/worker-terminal-manager.js +3 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/{index-38ca1829d34e8fa57f6076abc4391d37.js → index-ba698ed4743a3ed98c16928de3e54cb1.js} +33 -33
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-ba698ed4743a3ed98c16928de3e54cb1.js.br +0 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-ba698ed4743a3ed98c16928de3e54cb1.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/dist/skills/byspace/SKILL.md +147 -0
- package/node_modules/@bytetrue/byspace-server/dist/skills/byspace-advisor/SKILL.md +64 -0
- package/node_modules/@bytetrue/byspace-server/dist/skills/byspace-committee/SKILL.md +83 -0
- package/node_modules/@bytetrue/byspace-server/dist/skills/byspace-handoff/SKILL.md +71 -0
- package/node_modules/@bytetrue/byspace-server/dist/skills/byspace-loop/SKILL.md +45 -0
- package/node_modules/@bytetrue/byspace-server/package.json +3 -2
- package/package.json +6 -6
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-38ca1829d34e8fa57f6076abc4391d37.js.br +0 -0
- package/node_modules/@bytetrue/byspace-server/dist/server/web-ui/_expo/static/js/web/index-38ca1829d34e8fa57f6076abc4391d37.js.gz +0 -0
|
@@ -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
|
|
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,
|