@camerontaylor/paseo-cli 0.8.0-fork.1 → 0.9.0-beta.2.fork.1
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/cli.js +44 -37
- package/dist/commands/agent/archive.js +2 -15
- package/dist/commands/agent/attach.d.ts +1 -0
- package/dist/commands/agent/attach.js +8 -12
- package/dist/commands/agent/delete.js +4 -15
- package/dist/commands/agent/detach.js +2 -13
- package/dist/commands/agent/import.js +2 -16
- package/dist/commands/agent/inspect.js +2 -15
- package/dist/commands/agent/logs.js +13 -13
- package/dist/commands/agent/ls.js +2 -23
- package/dist/commands/agent/mode.js +2 -2
- package/dist/commands/agent/open.js +2 -8
- package/dist/commands/agent/reload.js +2 -15
- package/dist/commands/agent/run.js +12 -17
- package/dist/commands/agent/send.js +6 -15
- package/dist/commands/agent/stop.js +2 -15
- package/dist/commands/agent/update.js +2 -15
- package/dist/commands/agent/wait.js +4 -15
- package/dist/commands/clone.js +2 -8
- package/dist/commands/daemon/config.d.ts +3 -0
- package/dist/commands/daemon/config.js +103 -0
- package/dist/commands/daemon/index.js +20 -52
- package/dist/commands/daemon/local-daemon.d.ts +10 -75
- package/dist/commands/daemon/local-daemon.js +61 -503
- package/dist/commands/daemon/pair.d.ts +3 -8
- package/dist/commands/daemon/pair.js +33 -61
- package/dist/commands/daemon/reload.d.ts +3 -1
- package/dist/commands/daemon/reload.js +10 -2
- package/dist/commands/daemon/restart.d.ts +19 -11
- package/dist/commands/daemon/restart.js +102 -88
- package/dist/commands/daemon/runtime-toolchain.js +1 -1
- package/dist/commands/daemon/set-password.js +8 -7
- package/dist/commands/daemon/start.d.ts +17 -3
- package/dist/commands/daemon/start.js +47 -52
- package/dist/commands/daemon/status.d.ts +12 -20
- package/dist/commands/daemon/status.js +91 -342
- package/dist/commands/daemon/stop.d.ts +19 -14
- package/dist/commands/daemon/stop.js +53 -55
- package/dist/commands/heartbeat/index.js +3 -3
- package/dist/commands/hub/connect.d.ts +1 -0
- package/dist/commands/hub/connect.js +1 -1
- package/dist/commands/hub/daemon-client.d.ts +3 -2
- package/dist/commands/hub/daemon-client.js +3 -3
- package/dist/commands/hub/disconnect.d.ts +1 -0
- package/dist/commands/hub/disconnect.js +1 -1
- package/dist/commands/hub/index.js +2 -2
- package/dist/commands/hub/init.d.ts +3 -1
- package/dist/commands/hub/init.js +13 -12
- package/dist/commands/hub/login.d.ts +4 -4
- package/dist/commands/hub/login.js +1 -1
- package/dist/commands/hub/logout.d.ts +1 -0
- package/dist/commands/hub/logout.js +2 -2
- package/dist/commands/hub/permissions.d.ts +1 -0
- package/dist/commands/hub/permissions.js +2 -2
- package/dist/commands/onboard.d.ts +7 -2
- package/dist/commands/onboard.js +59 -210
- package/dist/commands/open.js +3 -1
- package/dist/commands/permit/allow.js +2 -15
- package/dist/commands/permit/deny.js +2 -15
- package/dist/commands/permit/ls.js +2 -15
- package/dist/commands/plugin/index.d.ts +6 -0
- package/dist/commands/plugin/index.js +62 -46
- package/dist/commands/plugin/scaffold.js +10 -0
- package/dist/commands/plugin/shared.d.ts +5 -3
- package/dist/commands/plugin/shared.js +13 -9
- package/dist/commands/plugin/update.d.ts +37 -0
- package/dist/commands/plugin/update.js +58 -0
- package/dist/commands/project/create.js +5 -3
- package/dist/commands/project/delete.js +4 -2
- package/dist/commands/project/ls.js +2 -2
- package/dist/commands/project/rename.js +4 -2
- package/dist/commands/provider/add.js +2 -2
- package/dist/commands/provider/diagnostic.js +1 -1
- package/dist/commands/provider/ls.js +2 -30
- package/dist/commands/provider/models.js +1 -1
- package/dist/commands/provider/rm.js +2 -2
- package/dist/commands/schedule/create.js +2 -2
- package/dist/commands/schedule/delete.js +1 -1
- package/dist/commands/schedule/inspect.js +1 -1
- package/dist/commands/schedule/logs.js +1 -1
- package/dist/commands/schedule/ls.js +1 -1
- package/dist/commands/schedule/pause.js +1 -1
- package/dist/commands/schedule/resume.js +1 -1
- package/dist/commands/schedule/run-once.js +1 -1
- package/dist/commands/schedule/shared.d.ts +3 -1
- package/dist/commands/schedule/shared.js +7 -5
- package/dist/commands/schedule/update.js +1 -1
- package/dist/commands/script/ls.js +1 -1
- package/dist/commands/script/shared.d.ts +2 -1
- package/dist/commands/script/shared.js +3 -3
- package/dist/commands/script/start.js +1 -1
- package/dist/commands/script/stop.js +1 -1
- package/dist/commands/terminal/capture.d.ts +1 -1
- package/dist/commands/terminal/capture.js +2 -3
- package/dist/commands/terminal/create.js +1 -1
- package/dist/commands/terminal/kill.js +1 -1
- package/dist/commands/terminal/ls.js +1 -1
- package/dist/commands/terminal/send-keys.d.ts +1 -1
- package/dist/commands/terminal/send-keys.js +2 -3
- package/dist/commands/terminal/shared.d.ts +2 -1
- package/dist/commands/terminal/shared.js +5 -3
- package/dist/commands/workspace/archive.d.ts +1 -0
- package/dist/commands/workspace/archive.js +4 -2
- package/dist/commands/workspace/create.js +4 -2
- package/dist/commands/workspace/ls.d.ts +1 -0
- package/dist/commands/workspace/ls.js +2 -2
- package/dist/commands/workspace/rename.d.ts +1 -0
- package/dist/commands/workspace/rename.js +4 -2
- package/dist/commands/workspace/setup.d.ts +1 -0
- package/dist/commands/workspace/setup.js +2 -2
- package/dist/commands/worktree/archive.js +4 -2
- package/dist/commands/worktree/create.js +2 -10
- package/dist/commands/worktree/ls.d.ts +0 -2
- package/dist/commands/worktree/ls.js +4 -30
- package/dist/output/with-output.d.ts +2 -0
- package/dist/run.js +11 -1
- package/dist/utils/client-id.d.ts +1 -1
- package/dist/utils/client-id.js +8 -14
- package/dist/utils/client.d.ts +16 -21
- package/dist/utils/client.js +57 -109
- package/dist/utils/command-options.d.ts +1 -0
- package/dist/utils/command-options.js +26 -2
- package/dist/utils/daemon-target.d.ts +13 -0
- package/dist/utils/daemon-target.js +51 -0
- package/package.json +8 -4
|
@@ -7,7 +7,7 @@ const scheduleDeleteSchema = {
|
|
|
7
7
|
],
|
|
8
8
|
};
|
|
9
9
|
export async function runDeleteCommand(id, options, _command) {
|
|
10
|
-
const { client } = await connectScheduleClient(options.
|
|
10
|
+
const { client } = await connectScheduleClient(options.daemonTarget);
|
|
11
11
|
try {
|
|
12
12
|
const payload = await client.scheduleDelete({ id });
|
|
13
13
|
if (payload.error) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createScheduleInspectRows, createScheduleInspectSchema, } from "./schema.js";
|
|
2
2
|
import { connectScheduleClient, toScheduleCommandError, } from "./shared.js";
|
|
3
3
|
export async function runInspectCommand(id, options, _command) {
|
|
4
|
-
const { client } = await connectScheduleClient(options.
|
|
4
|
+
const { client } = await connectScheduleClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
const payload = await client.scheduleInspect({ id });
|
|
7
7
|
if (payload.error || !payload.schedule) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { scheduleLogSchema, toScheduleLogRow } from "./schema.js";
|
|
2
2
|
import { connectScheduleClient, requireNewAgentSchedule, toScheduleCommandError, } from "./shared.js";
|
|
3
3
|
export async function runLogsCommand(id, options, _command) {
|
|
4
|
-
const { client } = await connectScheduleClient(options.
|
|
4
|
+
const { client } = await connectScheduleClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
await requireNewAgentSchedule(client, id);
|
|
7
7
|
const payload = await client.scheduleLogs({ id });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { scheduleSchema } from "./schema.js";
|
|
2
2
|
import { connectScheduleClient, toScheduleCommandError, toScheduleRow, } from "./shared.js";
|
|
3
3
|
export async function runLsCommand(options, _command) {
|
|
4
|
-
const { client } = await connectScheduleClient(options.
|
|
4
|
+
const { client } = await connectScheduleClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
const payload = await client.scheduleList();
|
|
7
7
|
if (payload.error) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { scheduleSchema } from "./schema.js";
|
|
2
2
|
import { connectScheduleClient, requireNewAgentSchedule, toScheduleCommandError, toScheduleRow, } from "./shared.js";
|
|
3
3
|
export async function runPauseCommand(id, options, _command) {
|
|
4
|
-
const { client } = await connectScheduleClient(options.
|
|
4
|
+
const { client } = await connectScheduleClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
await requireNewAgentSchedule(client, id);
|
|
7
7
|
const payload = await client.schedulePause({ id });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { scheduleSchema } from "./schema.js";
|
|
2
2
|
import { connectScheduleClient, requireNewAgentSchedule, toScheduleCommandError, toScheduleRow, } from "./shared.js";
|
|
3
3
|
export async function runResumeCommand(id, options, _command) {
|
|
4
|
-
const { client } = await connectScheduleClient(options.
|
|
4
|
+
const { client } = await connectScheduleClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
await requireNewAgentSchedule(client, id);
|
|
7
7
|
const payload = await client.scheduleResume({ id });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { scheduleSchema } from "./schema.js";
|
|
2
2
|
import { connectScheduleClient, requireNewAgentSchedule, toScheduleCommandError, toScheduleRow, } from "./shared.js";
|
|
3
3
|
export async function runRunOnceCommand(id, options, _command) {
|
|
4
|
-
const { client } = await connectScheduleClient(options.
|
|
4
|
+
const { client } = await connectScheduleClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
await requireNewAgentSchedule(client, id);
|
|
7
7
|
const payload = await client.scheduleRunOnce({ id });
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import type { DaemonTarget } from "../../utils/daemon-target.js";
|
|
1
2
|
import type { CommandError, CommandOptions } from "../../output/index.js";
|
|
2
3
|
import type { CreateScheduleInput, ScheduleCadence, ScheduleDaemonClient, ScheduleListItem, ScheduleRecord, ScheduleTarget, UpdateScheduleInput } from "./types.js";
|
|
3
4
|
export interface ScheduleCommandOptions extends CommandOptions {
|
|
4
5
|
host?: string;
|
|
5
6
|
}
|
|
6
|
-
export declare function connectScheduleClient(
|
|
7
|
+
export declare function connectScheduleClient(target: DaemonTarget): Promise<{
|
|
7
8
|
client: ScheduleDaemonClient;
|
|
8
9
|
host: string;
|
|
9
10
|
}>;
|
|
@@ -24,6 +25,7 @@ export declare function parseScheduleCreateInput(options: {
|
|
|
24
25
|
thinking?: string;
|
|
25
26
|
cwd?: string;
|
|
26
27
|
host?: string;
|
|
28
|
+
daemonTarget: import("../../utils/daemon-target.js").DaemonTarget;
|
|
27
29
|
maxRuns?: string;
|
|
28
30
|
expiresIn?: string;
|
|
29
31
|
runNow?: boolean;
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import { connectToDaemon, getDaemonHost
|
|
1
|
+
import { connectToDaemon, getDaemonHost } from "../../utils/client.js";
|
|
2
2
|
import { parseDuration } from "../../utils/duration.js";
|
|
3
3
|
import { resolveProviderAndModel } from "../../utils/provider-model.js";
|
|
4
4
|
import { everyMsToFiveFieldCron } from "@camerontaylor/paseo-protocol/schedule/cadence";
|
|
5
|
-
export async function connectScheduleClient(
|
|
6
|
-
const resolvedHost = getDaemonHost({
|
|
5
|
+
export async function connectScheduleClient(target) {
|
|
6
|
+
const resolvedHost = getDaemonHost({ target });
|
|
7
7
|
try {
|
|
8
8
|
const client = (await connectToDaemon({
|
|
9
|
-
|
|
9
|
+
target,
|
|
10
10
|
}));
|
|
11
11
|
return { client, host: resolvedHost };
|
|
12
12
|
}
|
|
13
13
|
catch (error) {
|
|
14
|
+
if (error && typeof error === "object" && "code" in error)
|
|
15
|
+
throw error;
|
|
14
16
|
const message = error instanceof Error ? error.message : String(error);
|
|
15
17
|
throw {
|
|
16
18
|
code: "DAEMON_NOT_RUNNING",
|
|
@@ -116,7 +118,7 @@ export function parseScheduleCreateInput(options) {
|
|
|
116
118
|
};
|
|
117
119
|
}
|
|
118
120
|
const cwdInput = options.cwd?.trim();
|
|
119
|
-
if (
|
|
121
|
+
if (options.daemonTarget.kind === "endpoint" && !cwdInput) {
|
|
120
122
|
throw {
|
|
121
123
|
code: "MISSING_CWD",
|
|
122
124
|
message: "--cwd is required when --host is specified (the local working directory will not exist on the remote daemon)",
|
|
@@ -17,7 +17,7 @@ export async function runUpdateCommand(id, options, _command) {
|
|
|
17
17
|
clearMaxRuns: options.noMaxRuns,
|
|
18
18
|
clearExpires: options.noExpiresIn,
|
|
19
19
|
});
|
|
20
|
-
const { client } = await connectScheduleClient(options.
|
|
20
|
+
const { client } = await connectScheduleClient(options.daemonTarget);
|
|
21
21
|
try {
|
|
22
22
|
await requireNewAgentSchedule(client, id);
|
|
23
23
|
const payload = await client.scheduleUpdate(input);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { connectWorkspaceScriptClient, resolveWorkspaceScriptWorkspaceId, toWorkspaceScriptCommandError, } from "./shared.js";
|
|
2
2
|
import { workspaceScriptSchema } from "./schema.js";
|
|
3
3
|
export async function runLsCommand(options, _command) {
|
|
4
|
-
const client = await connectWorkspaceScriptClient(options.
|
|
4
|
+
const client = await connectWorkspaceScriptClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
const workspaceId = await resolveWorkspaceScriptWorkspaceId(client, options);
|
|
7
7
|
const payload = await client.listWorkspaceScripts(workspaceId);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DaemonTarget } from "../../utils/daemon-target.js";
|
|
1
2
|
import type { DaemonClient } from "@camerontaylor/paseo-client/internal/daemon-client";
|
|
2
3
|
import type { CommandError, CommandOptions } from "../../output/index.js";
|
|
3
4
|
export interface WorkspaceScriptCommandOptions extends CommandOptions {
|
|
@@ -5,7 +6,7 @@ export interface WorkspaceScriptCommandOptions extends CommandOptions {
|
|
|
5
6
|
cwd?: string;
|
|
6
7
|
workspace?: string;
|
|
7
8
|
}
|
|
8
|
-
export declare function connectWorkspaceScriptClient(
|
|
9
|
+
export declare function connectWorkspaceScriptClient(target: DaemonTarget): Promise<DaemonClient>;
|
|
9
10
|
export declare function resolveWorkspaceScriptWorkspaceId(client: DaemonClient, options: WorkspaceScriptCommandOptions): Promise<string>;
|
|
10
11
|
export declare function toWorkspaceScriptCommandError(code: string, action: string, error: unknown): CommandError;
|
|
11
12
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
2
|
import { connectToDaemon, getDaemonHost } from "../../utils/client.js";
|
|
3
|
-
export async function connectWorkspaceScriptClient(
|
|
4
|
-
const daemonHost = getDaemonHost({
|
|
3
|
+
export async function connectWorkspaceScriptClient(target) {
|
|
4
|
+
const daemonHost = getDaemonHost({ target });
|
|
5
5
|
try {
|
|
6
|
-
const client = await connectToDaemon({
|
|
6
|
+
const client = await connectToDaemon({ target });
|
|
7
7
|
// COMPAT(workspaceScriptManagement): added in v0.1.105, remove gate after 2027-01-10.
|
|
8
8
|
if (!client.getLastServerInfoMessage()?.features?.workspaceScriptManagement) {
|
|
9
9
|
await client.close().catch(() => { });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { connectWorkspaceScriptClient, resolveWorkspaceScriptWorkspaceId, toWorkspaceScriptCommandError, } from "./shared.js";
|
|
2
2
|
import { workspaceScriptSchema } from "./schema.js";
|
|
3
3
|
export async function runStartCommand(scriptName, options, _command) {
|
|
4
|
-
const client = await connectWorkspaceScriptClient(options.
|
|
4
|
+
const client = await connectWorkspaceScriptClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
const workspaceId = await resolveWorkspaceScriptWorkspaceId(client, options);
|
|
7
7
|
const payload = await client.startWorkspaceScriptWithStatus(workspaceId, scriptName);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { connectWorkspaceScriptClient, resolveWorkspaceScriptWorkspaceId, toWorkspaceScriptCommandError, } from "./shared.js";
|
|
2
2
|
import { workspaceScriptSchema } from "./schema.js";
|
|
3
3
|
export async function runStopCommand(scriptName, options, _command) {
|
|
4
|
-
const client = await connectWorkspaceScriptClient(options.
|
|
4
|
+
const client = await connectWorkspaceScriptClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
const workspaceId = await resolveWorkspaceScriptWorkspaceId(client, options);
|
|
7
7
|
const payload = await client.stopWorkspaceScript(workspaceId, scriptName);
|
|
@@ -6,5 +6,5 @@ export interface TerminalCaptureOptions extends TerminalCommandOptions {
|
|
|
6
6
|
scrollback?: boolean;
|
|
7
7
|
ansi?: boolean;
|
|
8
8
|
}
|
|
9
|
-
export declare function runCaptureCommand(terminalId: string,
|
|
9
|
+
export declare function runCaptureCommand(terminalId: string, options: TerminalCaptureOptions, _command: Command): Promise<void>;
|
|
10
10
|
//# sourceMappingURL=capture.d.ts.map
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { renderError, toCommandError } from "../../output/render.js";
|
|
2
2
|
import { connectTerminalClient, resolveTerminalId, toTerminalCommandError, } from "./shared.js";
|
|
3
|
-
export async function runCaptureCommand(terminalId,
|
|
4
|
-
const options = command.optsWithGlobals();
|
|
3
|
+
export async function runCaptureCommand(terminalId, options, _command) {
|
|
5
4
|
try {
|
|
6
5
|
const payload = await executeCaptureCommand(terminalId, options);
|
|
7
6
|
if (options.json) {
|
|
@@ -26,7 +25,7 @@ export async function runCaptureCommand(terminalId, _options, command) {
|
|
|
26
25
|
}
|
|
27
26
|
}
|
|
28
27
|
async function executeCaptureCommand(terminalId, options) {
|
|
29
|
-
const { client, close } = await connectTerminalClient(options.
|
|
28
|
+
const { client, close } = await connectTerminalClient(options.daemonTarget);
|
|
30
29
|
try {
|
|
31
30
|
const resolvedId = await resolveTerminalId(client, terminalId);
|
|
32
31
|
if (!resolvedId) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { connectTerminalClient, toTerminalCommandError, } from "./shared.js";
|
|
2
2
|
import { terminalSchema } from "./schema.js";
|
|
3
3
|
export async function runCreateCommand(options, _command) {
|
|
4
|
-
const { client, close } = await connectTerminalClient(options.
|
|
4
|
+
const { client, close } = await connectTerminalClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
const cwd = options.cwd ?? (options.workspace ? undefined : process.cwd());
|
|
7
7
|
const workspaceId = options.workspace ?? (await client.workspaces.open(options.cwd ?? process.cwd())).id;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { connectTerminalClient, resolveTerminalId, toTerminalCommandError, } from "./shared.js";
|
|
2
2
|
import { terminalKillSchema } from "./schema.js";
|
|
3
3
|
export async function runKillCommand(terminalId, options, _command) {
|
|
4
|
-
const { client, close } = await connectTerminalClient(options.
|
|
4
|
+
const { client, close } = await connectTerminalClient(options.daemonTarget);
|
|
5
5
|
try {
|
|
6
6
|
const resolvedId = await requireTerminalId(client, terminalId);
|
|
7
7
|
await client.terminals.ref(resolvedId).kill();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { connectTerminalClient, toTerminalCommandError, } from "./shared.js";
|
|
2
2
|
import { terminalSchema } from "./schema.js";
|
|
3
3
|
export async function runLsCommand(options, _command) {
|
|
4
|
-
const { client, close } = await connectTerminalClient(options.
|
|
4
|
+
const { client, close } = await connectTerminalClient(options.daemonTarget);
|
|
5
5
|
const cwd = options.all || options.workspace ? undefined : (options.cwd ?? process.cwd());
|
|
6
6
|
try {
|
|
7
7
|
const payload = await client.terminals.list({ cwd, workspaceId: options.workspace });
|
|
@@ -3,5 +3,5 @@ import { type TerminalCommandOptions } from "./shared.js";
|
|
|
3
3
|
export interface TerminalSendKeysOptions extends TerminalCommandOptions {
|
|
4
4
|
literal?: boolean;
|
|
5
5
|
}
|
|
6
|
-
export declare function runSendKeysCommand(terminalId: string, keys: string[],
|
|
6
|
+
export declare function runSendKeysCommand(terminalId: string, keys: string[], options: TerminalSendKeysOptions, _command: Command): Promise<void>;
|
|
7
7
|
//# sourceMappingURL=send-keys.d.ts.map
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { renderError, toCommandError } from "../../output/render.js";
|
|
2
2
|
import { connectTerminalClient, resolveTerminalId, toTerminalCommandError, } from "./shared.js";
|
|
3
|
-
export async function runSendKeysCommand(terminalId, keys,
|
|
4
|
-
const options = command.optsWithGlobals();
|
|
3
|
+
export async function runSendKeysCommand(terminalId, keys, options, _command) {
|
|
5
4
|
try {
|
|
6
5
|
const payload = await executeSendKeysCommand(terminalId, keys, options);
|
|
7
6
|
if (options.json) {
|
|
@@ -18,7 +17,7 @@ export async function runSendKeysCommand(terminalId, keys, _options, command) {
|
|
|
18
17
|
}
|
|
19
18
|
}
|
|
20
19
|
async function executeSendKeysCommand(terminalId, keys, options) {
|
|
21
|
-
const { client, close } = await connectTerminalClient(options.
|
|
20
|
+
const { client, close } = await connectTerminalClient(options.daemonTarget);
|
|
22
21
|
try {
|
|
23
22
|
const resolvedId = await resolveTerminalId(client, terminalId);
|
|
24
23
|
if (!resolvedId) {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { DaemonTarget } from "../../utils/daemon-target.js";
|
|
1
2
|
import type { CommandError, CommandOptions } from "../../output/index.js";
|
|
2
3
|
export interface TerminalCommandOptions extends CommandOptions {
|
|
3
4
|
host?: string;
|
|
4
5
|
}
|
|
5
|
-
export declare function connectTerminalClient(
|
|
6
|
+
export declare function connectTerminalClient(target: DaemonTarget): Promise<{
|
|
6
7
|
client: import("@camerontaylor/paseo-client").PaseoApi;
|
|
7
8
|
daemonHost: string;
|
|
8
9
|
close: () => Promise<void>;
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { createPaseoApi } from "@camerontaylor/paseo-client";
|
|
2
2
|
import { connectToDaemon, getDaemonHost } from "../../utils/client.js";
|
|
3
|
-
export async function connectTerminalClient(
|
|
4
|
-
const daemonHost = getDaemonHost({
|
|
3
|
+
export async function connectTerminalClient(target) {
|
|
4
|
+
const daemonHost = getDaemonHost({ target });
|
|
5
5
|
try {
|
|
6
|
-
const client = await connectToDaemon({
|
|
6
|
+
const client = await connectToDaemon({ target });
|
|
7
7
|
return { client: createPaseoApi(client), daemonHost, close: () => client.close() };
|
|
8
8
|
}
|
|
9
9
|
catch (err) {
|
|
10
|
+
if (err && typeof err === "object" && "code" in err)
|
|
11
|
+
throw err;
|
|
10
12
|
const message = err instanceof Error ? err.message : String(err);
|
|
11
13
|
const error = {
|
|
12
14
|
code: "DAEMON_NOT_RUNNING",
|
|
@@ -7,6 +7,7 @@ interface WorkspaceArchiveResult {
|
|
|
7
7
|
}
|
|
8
8
|
export declare function runArchiveCommand(workspaceId: string, options: {
|
|
9
9
|
host?: string;
|
|
10
|
+
daemonTarget: import("../../utils/daemon-target.js").DaemonTarget;
|
|
10
11
|
}, _command: Command): Promise<SingleResult<WorkspaceArchiveResult>>;
|
|
11
12
|
export {};
|
|
12
13
|
//# sourceMappingURL=archive.d.ts.map
|
|
@@ -8,8 +8,8 @@ const workspaceArchiveSchema = {
|
|
|
8
8
|
],
|
|
9
9
|
};
|
|
10
10
|
export async function runArchiveCommand(workspaceId, options, _command) {
|
|
11
|
-
const host = getDaemonHost({
|
|
12
|
-
const client = await connectToDaemon({
|
|
11
|
+
const host = getDaemonHost({ target: options.daemonTarget });
|
|
12
|
+
const client = await connectToDaemon({ target: options.daemonTarget }).catch((error) => {
|
|
13
13
|
const message = error instanceof Error ? error.message : String(error);
|
|
14
14
|
throw {
|
|
15
15
|
code: "DAEMON_NOT_RUNNING",
|
|
@@ -31,6 +31,8 @@ export async function runArchiveCommand(workspaceId, options, _command) {
|
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
catch (error) {
|
|
34
|
+
if (error && typeof error === "object" && "code" in error)
|
|
35
|
+
throw error;
|
|
34
36
|
const message = error instanceof Error ? error.message : String(error);
|
|
35
37
|
throw { code: "WORKSPACE_ARCHIVE_FAILED", message };
|
|
36
38
|
}
|
|
@@ -85,8 +85,8 @@ export function buildWorkspaceSource(options) {
|
|
|
85
85
|
throw new Error(`Unsupported workspace isolation: ${String(options.isolation)}`);
|
|
86
86
|
}
|
|
87
87
|
export async function runCreateCommand(options, _command) {
|
|
88
|
-
const host = getDaemonHost({
|
|
89
|
-
const client = await connectToDaemon({
|
|
88
|
+
const host = getDaemonHost({ target: options.daemonTarget });
|
|
89
|
+
const client = await connectToDaemon({ target: options.daemonTarget }).catch((error) => {
|
|
90
90
|
const message = error instanceof Error ? error.message : String(error);
|
|
91
91
|
throw {
|
|
92
92
|
code: "DAEMON_NOT_RUNNING",
|
|
@@ -104,6 +104,8 @@ export async function runCreateCommand(options, _command) {
|
|
|
104
104
|
return { type: "single", data: toWorkspaceRow(payload.workspace), schema: workspaceSchema };
|
|
105
105
|
}
|
|
106
106
|
catch (error) {
|
|
107
|
+
if (error && typeof error === "object" && "code" in error)
|
|
108
|
+
throw error;
|
|
107
109
|
const message = error instanceof Error ? error.message : String(error);
|
|
108
110
|
throw { code: "WORKSPACE_CREATE_FAILED", message };
|
|
109
111
|
}
|
|
@@ -3,5 +3,6 @@ import type { ListResult } from "../../output/index.js";
|
|
|
3
3
|
import { type WorkspaceRow } from "./shared.js";
|
|
4
4
|
export declare function runLsCommand(options: {
|
|
5
5
|
host?: string;
|
|
6
|
+
daemonTarget: import("../../utils/daemon-target.js").DaemonTarget;
|
|
6
7
|
}, _command: Command): Promise<ListResult<WorkspaceRow>>;
|
|
7
8
|
//# sourceMappingURL=ls.d.ts.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { connectToDaemon, getDaemonHost } from "../../utils/client.js";
|
|
2
2
|
import { toWorkspaceRow, workspaceSchema } from "./shared.js";
|
|
3
3
|
export async function runLsCommand(options, _command) {
|
|
4
|
-
const host = getDaemonHost({
|
|
5
|
-
const client = await connectToDaemon({
|
|
4
|
+
const host = getDaemonHost({ target: options.daemonTarget });
|
|
5
|
+
const client = await connectToDaemon({ target: options.daemonTarget }).catch((error) => {
|
|
6
6
|
const message = error instanceof Error ? error.message : String(error);
|
|
7
7
|
throw {
|
|
8
8
|
code: "DAEMON_NOT_RUNNING",
|
|
@@ -33,8 +33,8 @@ export function resolveWorkspaceTitle(input) {
|
|
|
33
33
|
}
|
|
34
34
|
export async function runRenameCommand(workspaceId, titleArg, options, _command) {
|
|
35
35
|
const title = resolveWorkspaceTitle({ title: titleArg, reset: options.reset });
|
|
36
|
-
const host = getDaemonHost({
|
|
37
|
-
const client = await connectToDaemon({
|
|
36
|
+
const host = getDaemonHost({ target: options.daemonTarget });
|
|
37
|
+
const client = await connectToDaemon({ target: options.daemonTarget }).catch((error) => {
|
|
38
38
|
const message = error instanceof Error ? error.message : String(error);
|
|
39
39
|
throw {
|
|
40
40
|
code: "DAEMON_NOT_RUNNING",
|
|
@@ -51,6 +51,8 @@ export async function runRenameCommand(workspaceId, titleArg, options, _command)
|
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
catch (error) {
|
|
54
|
+
if (error && typeof error === "object" && "code" in error)
|
|
55
|
+
throw error;
|
|
54
56
|
const message = error instanceof Error ? error.message : String(error);
|
|
55
57
|
throw { code: "WORKSPACE_RENAME_FAILED", message };
|
|
56
58
|
}
|
|
@@ -6,6 +6,7 @@ interface WorkspaceSetupResult {
|
|
|
6
6
|
}
|
|
7
7
|
export declare function runSetupCommand(workspaceId: string, options: {
|
|
8
8
|
host?: string;
|
|
9
|
+
daemonTarget: import("../../utils/daemon-target.js").DaemonTarget;
|
|
9
10
|
}, _command: Command): Promise<SingleResult<WorkspaceSetupResult>>;
|
|
10
11
|
export {};
|
|
11
12
|
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -7,8 +7,8 @@ const workspaceSetupSchema = {
|
|
|
7
7
|
],
|
|
8
8
|
};
|
|
9
9
|
export async function runSetupCommand(workspaceId, options, _command) {
|
|
10
|
-
const host = getDaemonHost({
|
|
11
|
-
const client = await connectToDaemon({
|
|
10
|
+
const host = getDaemonHost({ target: options.daemonTarget });
|
|
11
|
+
const client = await connectToDaemon({ target: options.daemonTarget }).catch((error) => {
|
|
12
12
|
throw {
|
|
13
13
|
code: "DAEMON_NOT_RUNNING",
|
|
14
14
|
message: `Cannot connect to daemon at ${host}: ${error instanceof Error ? error.message : String(error)}`,
|
|
@@ -16,7 +16,7 @@ export async function runArchiveCommand(nameArg, options, _command) {
|
|
|
16
16
|
return runArchiveCommandWithDeps(nameArg, options, { connectToDaemon });
|
|
17
17
|
}
|
|
18
18
|
export async function runArchiveCommandWithDeps(nameArg, options, deps) {
|
|
19
|
-
const host = getDaemonHost({
|
|
19
|
+
const host = getDaemonHost({ target: options.daemonTarget });
|
|
20
20
|
// Validate arguments
|
|
21
21
|
if (!nameArg || nameArg.trim().length === 0) {
|
|
22
22
|
const error = {
|
|
@@ -28,9 +28,11 @@ export async function runArchiveCommandWithDeps(nameArg, options, deps) {
|
|
|
28
28
|
}
|
|
29
29
|
let client;
|
|
30
30
|
try {
|
|
31
|
-
client = await deps.connectToDaemon({
|
|
31
|
+
client = await deps.connectToDaemon({ target: options.daemonTarget });
|
|
32
32
|
}
|
|
33
33
|
catch (err) {
|
|
34
|
+
if (err && typeof err === "object" && "code" in err)
|
|
35
|
+
throw err;
|
|
34
36
|
const message = err instanceof Error ? err.message : String(err);
|
|
35
37
|
const error = {
|
|
36
38
|
code: "DAEMON_NOT_RUNNING",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
|
-
import { connectToDaemon
|
|
2
|
+
import { connectToDaemon } from "../../utils/client.js";
|
|
3
3
|
import { buildCreateWorktreeRequest } from "./create-input.js";
|
|
4
4
|
export const createSchema = {
|
|
5
5
|
idField: "worktreePath",
|
|
@@ -15,15 +15,7 @@ function cmdError(code, message, details) {
|
|
|
15
15
|
export async function runCreateCommand(options, _command) {
|
|
16
16
|
const cwd = options.cwd ?? process.cwd();
|
|
17
17
|
const request = buildCreateWorktreeRequest(options, cwd);
|
|
18
|
-
const
|
|
19
|
-
let client;
|
|
20
|
-
try {
|
|
21
|
-
client = await connectToDaemon({ host: options.host });
|
|
22
|
-
}
|
|
23
|
-
catch (err) {
|
|
24
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
25
|
-
throw cmdError("DAEMON_NOT_RUNNING", `Cannot connect to daemon at ${host}: ${message}`, "Start the daemon with: paseo daemon start");
|
|
26
|
-
}
|
|
18
|
+
const client = await connectToDaemon({ target: options.daemonTarget });
|
|
27
19
|
try {
|
|
28
20
|
const response = await client.createPaseoWorktree(request);
|
|
29
21
|
const workspace = response.workspace;
|
|
@@ -7,8 +7,6 @@ export interface WorktreeListItem {
|
|
|
7
7
|
cwd: string;
|
|
8
8
|
agent: string;
|
|
9
9
|
}
|
|
10
|
-
export declare function resolvePaseoHomePath(): string;
|
|
11
|
-
export declare function resolvePaseoWorktreesDir(): string;
|
|
12
10
|
/** Schema for worktree ls output */
|
|
13
11
|
export declare const worktreeLsSchema: OutputSchema<WorktreeListItem>;
|
|
14
12
|
export type WorktreeLsResult = ListResult<WorktreeListItem>;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { connectToDaemon, getDaemonHost } from "../../utils/client.js";
|
|
1
|
+
import { basename } from "node:path";
|
|
2
|
+
import { connectToDaemon } from "../../utils/client.js";
|
|
4
3
|
/** Shorten home directory in path */
|
|
5
4
|
function shortenPath(path) {
|
|
6
5
|
const home = process.env.HOME;
|
|
@@ -13,16 +12,6 @@ function shortenPath(path) {
|
|
|
13
12
|
function extractWorktreeName(path) {
|
|
14
13
|
return basename(path);
|
|
15
14
|
}
|
|
16
|
-
export function resolvePaseoHomePath() {
|
|
17
|
-
return process.env.PASEO_HOME ?? join(homedir(), ".paseo");
|
|
18
|
-
}
|
|
19
|
-
export function resolvePaseoWorktreesDir() {
|
|
20
|
-
return join(resolvePaseoHomePath(), "worktrees");
|
|
21
|
-
}
|
|
22
|
-
function isAgentInManagedWorktree(agentCwd) {
|
|
23
|
-
const worktreesDir = resolvePaseoWorktreesDir();
|
|
24
|
-
return agentCwd === worktreesDir || agentCwd.startsWith(worktreesDir + sep);
|
|
25
|
-
}
|
|
26
15
|
/** Schema for worktree ls output */
|
|
27
16
|
export const worktreeLsSchema = {
|
|
28
17
|
idField: "name",
|
|
@@ -34,20 +23,7 @@ export const worktreeLsSchema = {
|
|
|
34
23
|
],
|
|
35
24
|
};
|
|
36
25
|
export async function runLsCommand(options, _command) {
|
|
37
|
-
const
|
|
38
|
-
let client;
|
|
39
|
-
try {
|
|
40
|
-
client = await connectToDaemon({ host: options.host });
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
44
|
-
const error = {
|
|
45
|
-
code: "DAEMON_NOT_RUNNING",
|
|
46
|
-
message: `Cannot connect to daemon at ${host}: ${message}`,
|
|
47
|
-
details: "Start the daemon with: paseo daemon start",
|
|
48
|
-
};
|
|
49
|
-
throw error;
|
|
50
|
-
}
|
|
26
|
+
const client = await connectToDaemon({ target: options.daemonTarget });
|
|
51
27
|
try {
|
|
52
28
|
const agentsPayload = await client.fetchAgents({ filter: { includeArchived: true } });
|
|
53
29
|
const agents = agentsPayload.entries.map((entry) => entry.agent);
|
|
@@ -64,9 +40,7 @@ export async function runLsCommand(options, _command) {
|
|
|
64
40
|
// Build a map of worktree paths to agent IDs
|
|
65
41
|
const worktreeAgentMap = new Map();
|
|
66
42
|
for (const agent of agents) {
|
|
67
|
-
|
|
68
|
-
worktreeAgentMap.set(agent.cwd, agent.id.slice(0, 7));
|
|
69
|
-
}
|
|
43
|
+
worktreeAgentMap.set(agent.cwd, agent.id.slice(0, 7));
|
|
70
44
|
}
|
|
71
45
|
const items = response.worktrees.map((wt) => ({
|
|
72
46
|
name: extractWorktreeName(wt.worktreePath),
|
|
@@ -7,6 +7,8 @@ import type { Command } from "commander";
|
|
|
7
7
|
import type { AnyCommandResult, OutputOptions } from "./types.js";
|
|
8
8
|
/** Options that include output settings from global options */
|
|
9
9
|
export interface CommandOptions extends Partial<OutputOptions> {
|
|
10
|
+
daemonTarget: import("../utils/daemon-target.js").DaemonTarget;
|
|
11
|
+
home?: string;
|
|
10
12
|
/** Daemon host target from --host option */
|
|
11
13
|
host?: string;
|
|
12
14
|
/** JSON output flag from --json option */
|
package/dist/run.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { renderError, toCommandError, defaultOutputOptions } from "./output/render.js";
|
|
1
2
|
import { createCli } from "./cli.js";
|
|
2
3
|
import { classifyInvocation } from "./classify.js";
|
|
3
4
|
import { openDesktopWithProject } from "./commands/open.js";
|
|
@@ -34,7 +35,16 @@ export async function runCli(argv, options = {}) {
|
|
|
34
35
|
return typeof process.exitCode === "number" ? process.exitCode : 0;
|
|
35
36
|
}
|
|
36
37
|
const program = createCli();
|
|
37
|
-
|
|
38
|
+
try {
|
|
39
|
+
await program.parseAsync(parseArgv, { from: "node" });
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
process.stderr.write(renderError(toCommandError(error), {
|
|
43
|
+
...defaultOutputOptions,
|
|
44
|
+
format: argv.includes("--json") ? "json" : "table",
|
|
45
|
+
}) + "\n");
|
|
46
|
+
return 1;
|
|
47
|
+
}
|
|
38
48
|
return typeof process.exitCode === "number" ? process.exitCode : 0;
|
|
39
49
|
}
|
|
40
50
|
//# sourceMappingURL=run.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function getOrCreateCliClientId(): Promise<string>;
|
|
1
|
+
export declare function getOrCreateCliClientId(home: string): Promise<string>;
|
|
2
2
|
//# sourceMappingURL=client-id.d.ts.map
|
package/dist/utils/client-id.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ensurePrivateDirectory } from "@camerontaylor/paseo-server/daemon-control";
|
|
2
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
2
3
|
import { randomUUID } from "node:crypto";
|
|
3
|
-
import {
|
|
4
|
-
import { homedir } from "node:os";
|
|
5
|
-
const CLIENT_SESSION_KEY_FILE = join(process.env.PASEO_HOME ?? join(homedir(), ".paseo"), "cli-client-id");
|
|
6
|
-
let cachedClientId = null;
|
|
4
|
+
import { join } from "node:path";
|
|
7
5
|
function normalizeClientId(value) {
|
|
8
6
|
const trimmed = value.trim();
|
|
9
7
|
return trimmed.length > 0 ? trimmed : null;
|
|
@@ -11,14 +9,11 @@ function normalizeClientId(value) {
|
|
|
11
9
|
function generateClientId() {
|
|
12
10
|
return `cid_${randomUUID().replace(/-/g, "")}`;
|
|
13
11
|
}
|
|
14
|
-
export async function getOrCreateCliClientId() {
|
|
15
|
-
|
|
16
|
-
return cachedClientId;
|
|
17
|
-
}
|
|
12
|
+
export async function getOrCreateCliClientId(home) {
|
|
13
|
+
const clientSessionKeyFile = join(home, "cli-client-id");
|
|
18
14
|
try {
|
|
19
|
-
const existing = normalizeClientId(await readFile(
|
|
15
|
+
const existing = normalizeClientId(await readFile(clientSessionKeyFile, "utf8"));
|
|
20
16
|
if (existing) {
|
|
21
|
-
cachedClientId = existing;
|
|
22
17
|
return existing;
|
|
23
18
|
}
|
|
24
19
|
}
|
|
@@ -29,9 +24,8 @@ export async function getOrCreateCliClientId() {
|
|
|
29
24
|
}
|
|
30
25
|
}
|
|
31
26
|
const nextValue = generateClientId();
|
|
32
|
-
|
|
33
|
-
await writeFile(
|
|
34
|
-
cachedClientId = nextValue;
|
|
27
|
+
ensurePrivateDirectory(home);
|
|
28
|
+
await writeFile(clientSessionKeyFile, nextValue, { mode: 0o600 });
|
|
35
29
|
return nextValue;
|
|
36
30
|
}
|
|
37
31
|
//# sourceMappingURL=client-id.js.map
|