@getpaseo/cli 0.3.1 → 0.4.0-beta.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.
Files changed (62) hide show
  1. package/dist/cli.js +0 -5
  2. package/dist/commands/hub/connect.d.ts +1 -1
  3. package/dist/commands/hub/deploy-bundle.d.ts +16 -0
  4. package/dist/commands/hub/deploy-bundle.js +248 -0
  5. package/dist/commands/hub/deploy.d.ts +3 -2
  6. package/dist/commands/hub/deploy.js +17 -10
  7. package/dist/commands/hub/hub-client/index.d.ts +18 -0
  8. package/dist/commands/hub/hub-client/index.js +88 -0
  9. package/dist/commands/hub/{client.d.ts → hub-client/internal/contracts.d.ts} +16 -22
  10. package/dist/commands/hub/hub-client/internal/contracts.js +47 -0
  11. package/dist/commands/hub/hub-client/internal/problem.d.ts +3 -0
  12. package/dist/commands/hub/hub-client/internal/problem.js +72 -0
  13. package/dist/commands/hub/hub-client/internal/transport.d.ts +15 -0
  14. package/dist/commands/hub/hub-client/internal/transport.js +30 -0
  15. package/dist/commands/hub/index.d.ts +1 -1
  16. package/dist/commands/hub/index.js +1 -1
  17. package/dist/commands/hub/login-flow.d.ts +1 -1
  18. package/dist/commands/hub/projects.d.ts +1 -1
  19. package/dist/commands/provider/diagnostic.d.ts +12 -0
  20. package/dist/commands/provider/diagnostic.js +31 -0
  21. package/dist/commands/provider/index.js +5 -0
  22. package/dist/commands/workspace/index.js +10 -0
  23. package/dist/commands/workspace/rename.d.ts +22 -0
  24. package/dist/commands/workspace/rename.js +61 -0
  25. package/package.json +4 -4
  26. package/dist/commands/chat/create.d.ts +0 -9
  27. package/dist/commands/chat/create.js +0 -23
  28. package/dist/commands/chat/delete.d.ts +0 -6
  29. package/dist/commands/chat/delete.js +0 -20
  30. package/dist/commands/chat/index.d.ts +0 -3
  31. package/dist/commands/chat/index.js +0 -47
  32. package/dist/commands/chat/inspect.d.ts +0 -6
  33. package/dist/commands/chat/inspect.js +0 -20
  34. package/dist/commands/chat/ls.d.ts +0 -6
  35. package/dist/commands/chat/ls.js +0 -20
  36. package/dist/commands/chat/post.d.ts +0 -9
  37. package/dist/commands/chat/post.js +0 -28
  38. package/dist/commands/chat/read.d.ts +0 -11
  39. package/dist/commands/chat/read.js +0 -40
  40. package/dist/commands/chat/schema.d.ts +0 -36
  41. package/dist/commands/chat/schema.js +0 -81
  42. package/dist/commands/chat/shared.d.ts +0 -19
  43. package/dist/commands/chat/shared.js +0 -118
  44. package/dist/commands/chat/wait.d.ts +0 -9
  45. package/dist/commands/chat/wait.js +0 -45
  46. package/dist/commands/hub/client.js +0 -234
  47. package/dist/commands/hub/deploy-input.d.ts +0 -17
  48. package/dist/commands/hub/deploy-input.js +0 -264
  49. package/dist/commands/loop/index.d.ts +0 -3
  50. package/dist/commands/loop/index.js +0 -18
  51. package/dist/commands/loop/inspect.d.ts +0 -13
  52. package/dist/commands/loop/inspect.js +0 -100
  53. package/dist/commands/loop/logs.d.ts +0 -8
  54. package/dist/commands/loop/logs.js +0 -69
  55. package/dist/commands/loop/ls.d.ts +0 -18
  56. package/dist/commands/loop/ls.js +0 -62
  57. package/dist/commands/loop/run.d.ts +0 -30
  58. package/dist/commands/loop/run.js +0 -162
  59. package/dist/commands/loop/stop.d.ts +0 -15
  60. package/dist/commands/loop/stop.js +0 -56
  61. package/dist/commands/loop/types.d.ts +0 -138
  62. package/dist/commands/loop/types.js +0 -2
@@ -1,162 +0,0 @@
1
- import { connectToDaemon, getDaemonHost } from "../../utils/client.js";
2
- import { collectMultiple } from "../../utils/command-options.js";
3
- import { parseDuration } from "../../utils/duration.js";
4
- import { resolveProviderAndModel } from "../../utils/provider-model.js";
5
- export const loopRunSchema = {
6
- idField: "id",
7
- columns: [
8
- { header: "LOOP ID", field: "id", width: 10 },
9
- { header: "STATUS", field: "status", width: 10 },
10
- { header: "NAME", field: "name", width: 20 },
11
- { header: "CWD", field: "cwd", width: 40 },
12
- ],
13
- };
14
- export function addLoopRunOptions(command) {
15
- return command
16
- .description("Start a loop")
17
- .argument("<prompt>", "Prompt for each fresh worker iteration")
18
- .option("--provider <provider>", "Default provider for worker and verifier agents")
19
- .option("--model <model>", "Default model for worker and verifier agents")
20
- .option("--mode <mode>", "Provider-specific mode for the worker agent (e.g. claude bypassPermissions, opencode build)")
21
- .option("--verify-provider <provider>", "Provider for the verifier agent")
22
- .option("--verify-model <model>", "Model for the verifier agent")
23
- .option("--verify-mode <mode>", "Provider-specific mode for the verifier agent")
24
- .option("--verify <prompt>", "Verifier agent prompt")
25
- .option("--verify-check <command>", "Shell command that must exit 0 (repeatable)", collectMultiple, [])
26
- .option("--archive", "Archive worker and verifier agents after each iteration")
27
- .option("--name <name>", "Optional loop name")
28
- .option("--sleep <duration>", "Delay between iterations (for example: 30s, 5m)")
29
- .option("--max-iterations <n>", "Maximum number of iterations")
30
- .option("--max-time <duration>", "Maximum total runtime (for example: 1h, 30m)");
31
- }
32
- function toRow(loop) {
33
- return {
34
- id: loop.id,
35
- status: loop.status,
36
- name: loop.name,
37
- cwd: loop.cwd,
38
- };
39
- }
40
- function parseMaxIterations(value) {
41
- if (value === undefined) {
42
- return undefined;
43
- }
44
- const parsed = Number.parseInt(value, 10);
45
- if (!Number.isInteger(parsed) || parsed <= 0) {
46
- throw {
47
- code: "INVALID_MAX_ITERATIONS",
48
- message: "--max-iterations must be a positive integer",
49
- };
50
- }
51
- return parsed;
52
- }
53
- // oxlint-disable complexity
54
- export function buildLoopRunInput(prompt, options) {
55
- const verifyPrompt = options.verify?.trim();
56
- if (options.verify !== undefined && !verifyPrompt) {
57
- throw {
58
- code: "INVALID_VERIFY_PROMPT",
59
- message: "--verify cannot be empty",
60
- };
61
- }
62
- const result = {
63
- prompt,
64
- cwd: process.cwd(),
65
- };
66
- // Resolve provider/model
67
- if (options.provider) {
68
- const { provider, model } = resolveProviderAndModel({ provider: options.provider });
69
- if (provider)
70
- result.provider = provider;
71
- // Explicit --model takes precedence over parsed model
72
- if (options.model?.trim()) {
73
- result.model = options.model.trim();
74
- }
75
- else if (model) {
76
- result.model = model;
77
- }
78
- }
79
- else if (options.model?.trim()) {
80
- result.model = options.model.trim();
81
- }
82
- if (options.mode?.trim()) {
83
- result.modeId = options.mode.trim();
84
- }
85
- // Resolve verifier provider/model
86
- if (options.verifyProvider) {
87
- const { provider, model } = resolveProviderAndModel({ provider: options.verifyProvider });
88
- if (provider)
89
- result.verifierProvider = provider;
90
- // Explicit --verify-model takes precedence over parsed model
91
- if (options.verifyModel?.trim()) {
92
- result.verifierModel = options.verifyModel.trim();
93
- }
94
- else if (model) {
95
- result.verifierModel = model;
96
- }
97
- }
98
- else if (options.verifyModel?.trim()) {
99
- result.verifierModel = options.verifyModel.trim();
100
- }
101
- if (options.verifyMode?.trim()) {
102
- result.verifierModeId = options.verifyMode.trim();
103
- }
104
- if (verifyPrompt)
105
- result.verifyPrompt = verifyPrompt;
106
- if (options.verifyCheck && options.verifyCheck.length > 0) {
107
- result.verifyChecks = options.verifyCheck;
108
- }
109
- if (options.archive)
110
- result.archive = true;
111
- if (options.name?.trim())
112
- result.name = options.name.trim();
113
- if (options.sleep)
114
- result.sleepMs = parseDuration(options.sleep);
115
- if (options.maxIterations) {
116
- result.maxIterations = parseMaxIterations(options.maxIterations);
117
- }
118
- if (options.maxTime)
119
- result.maxTimeMs = parseDuration(options.maxTime);
120
- return result;
121
- }
122
- export async function runLoopRunCommand(prompt, options, _command) {
123
- const host = getDaemonHost({ host: options.host });
124
- const input = buildLoopRunInput(prompt, options);
125
- let client;
126
- try {
127
- client = (await connectToDaemon({
128
- host: options.host,
129
- }));
130
- }
131
- catch (error) {
132
- const message = error instanceof Error ? error.message : String(error);
133
- throw {
134
- code: "DAEMON_NOT_RUNNING",
135
- message: `Cannot connect to daemon at ${host}: ${message}`,
136
- details: "Start the daemon with: paseo daemon start",
137
- };
138
- }
139
- try {
140
- const payload = await client.loopRun(input);
141
- await client.close();
142
- if (payload.error || !payload.loop) {
143
- throw new Error(payload.error ?? "Loop creation failed");
144
- }
145
- return {
146
- type: "single",
147
- data: toRow(payload.loop),
148
- schema: loopRunSchema,
149
- };
150
- }
151
- catch (error) {
152
- await client.close().catch(() => { });
153
- if (error && typeof error === "object" && "code" in error) {
154
- throw error;
155
- }
156
- throw {
157
- code: "LOOP_RUN_FAILED",
158
- message: error instanceof Error ? error.message : String(error),
159
- };
160
- }
161
- }
162
- //# sourceMappingURL=run.js.map
@@ -1,15 +0,0 @@
1
- import { Command } from "commander";
2
- import type { CommandOptions, OutputSchema, SingleResult } from "../../output/index.js";
3
- interface LoopStopRow {
4
- id: string;
5
- status: string;
6
- activeIteration: string;
7
- }
8
- export interface LoopStopOptions extends CommandOptions {
9
- }
10
- export declare const loopStopSchema: OutputSchema<LoopStopRow>;
11
- export declare function addLoopStopOptions(command: Command): Command;
12
- export type LoopStopResult = SingleResult<LoopStopRow>;
13
- export declare function runLoopStopCommand(id: string, options: LoopStopOptions, _command: Command): Promise<LoopStopResult>;
14
- export {};
15
- //# sourceMappingURL=stop.d.ts.map
@@ -1,56 +0,0 @@
1
- import { connectToDaemon, getDaemonHost } from "../../utils/client.js";
2
- export const loopStopSchema = {
3
- idField: "id",
4
- columns: [
5
- { header: "LOOP ID", field: "id", width: 10 },
6
- { header: "STATUS", field: "status", width: 10 },
7
- { header: "ITER", field: "activeIteration", width: 8 },
8
- ],
9
- };
10
- export function addLoopStopOptions(command) {
11
- return command.description("Stop a running loop").argument("<id>", "Loop ID");
12
- }
13
- function toRow(loop) {
14
- return {
15
- id: loop.id,
16
- status: loop.status,
17
- activeIteration: loop.activeIteration === null ? "-" : String(loop.activeIteration),
18
- };
19
- }
20
- export async function runLoopStopCommand(id, options, _command) {
21
- const host = getDaemonHost({ host: options.host });
22
- let client;
23
- try {
24
- client = (await connectToDaemon({
25
- host: options.host,
26
- }));
27
- }
28
- catch (error) {
29
- const message = error instanceof Error ? error.message : String(error);
30
- throw {
31
- code: "DAEMON_NOT_RUNNING",
32
- message: `Cannot connect to daemon at ${host}: ${message}`,
33
- details: "Start the daemon with: paseo daemon start",
34
- };
35
- }
36
- try {
37
- const payload = await client.loopStop(id);
38
- await client.close();
39
- if (payload.error || !payload.loop) {
40
- throw new Error(payload.error ?? `Loop not found: ${id}`);
41
- }
42
- return {
43
- type: "single",
44
- data: toRow(payload.loop),
45
- schema: loopStopSchema,
46
- };
47
- }
48
- catch (error) {
49
- await client.close().catch(() => { });
50
- throw {
51
- code: "LOOP_STOP_FAILED",
52
- message: error instanceof Error ? error.message : String(error),
53
- };
54
- }
55
- }
56
- //# sourceMappingURL=stop.js.map
@@ -1,138 +0,0 @@
1
- export type LoopStatus = "running" | "succeeded" | "failed" | "stopped";
2
- export interface LoopLogEntry {
3
- seq: number;
4
- timestamp: string;
5
- iteration: number | null;
6
- source: "loop" | "worker" | "verifier" | "verify-check";
7
- level: "info" | "error";
8
- text: string;
9
- }
10
- export interface LoopVerifyCheckResult {
11
- command: string;
12
- exitCode: number;
13
- passed: boolean;
14
- stdout: string;
15
- stderr: string;
16
- startedAt: string;
17
- completedAt: string;
18
- }
19
- export interface LoopVerifyPromptResult {
20
- passed: boolean;
21
- reason: string;
22
- verifierAgentId: string | null;
23
- startedAt: string;
24
- completedAt: string;
25
- }
26
- export interface LoopIterationRecord {
27
- index: number;
28
- workerAgentId: string | null;
29
- workerStartedAt: string;
30
- workerCompletedAt: string | null;
31
- verifierAgentId: string | null;
32
- status: "running" | "succeeded" | "failed" | "stopped";
33
- workerOutcome: "completed" | "failed" | "canceled" | null;
34
- failureReason: string | null;
35
- verifyChecks: LoopVerifyCheckResult[];
36
- verifyPrompt: LoopVerifyPromptResult | null;
37
- }
38
- export interface LoopRecord {
39
- id: string;
40
- name: string | null;
41
- prompt: string;
42
- cwd: string;
43
- provider: string;
44
- model: string | null;
45
- modeId: string | null;
46
- workerProvider: string | null;
47
- workerModel: string | null;
48
- verifierProvider: string | null;
49
- verifierModel: string | null;
50
- verifierModeId: string | null;
51
- verifyPrompt: string | null;
52
- verifyChecks: string[];
53
- archive: boolean;
54
- sleepMs: number;
55
- maxIterations: number | null;
56
- maxTimeMs: number | null;
57
- status: LoopStatus;
58
- createdAt: string;
59
- updatedAt: string;
60
- startedAt: string;
61
- completedAt: string | null;
62
- stopRequestedAt: string | null;
63
- iterations: LoopIterationRecord[];
64
- logs: LoopLogEntry[];
65
- nextLogSeq: number;
66
- activeIteration: number | null;
67
- activeWorkerAgentId: string | null;
68
- activeVerifierAgentId: string | null;
69
- }
70
- export interface LoopListItem {
71
- id: string;
72
- name: string | null;
73
- status: LoopStatus;
74
- cwd: string;
75
- createdAt: string;
76
- updatedAt: string;
77
- activeIteration: number | null;
78
- }
79
- export interface LoopLogsResult {
80
- loop: LoopRecord;
81
- entries: LoopLogEntry[];
82
- nextCursor: number;
83
- }
84
- export interface LoopRunPayload {
85
- requestId: string;
86
- loop: LoopRecord | null;
87
- error: string | null;
88
- }
89
- export interface LoopListPayload {
90
- requestId: string;
91
- loops: LoopListItem[];
92
- error: string | null;
93
- }
94
- export interface LoopInspectPayload {
95
- requestId: string;
96
- loop: LoopRecord | null;
97
- error: string | null;
98
- }
99
- export interface LoopLogsPayload {
100
- requestId: string;
101
- loop: LoopRecord | null;
102
- entries: LoopLogEntry[];
103
- nextCursor: number;
104
- error: string | null;
105
- }
106
- export interface LoopStopPayload {
107
- requestId: string;
108
- loop: LoopRecord | null;
109
- error: string | null;
110
- }
111
- export interface LoopRunInput {
112
- prompt: string;
113
- cwd: string;
114
- provider?: string;
115
- model?: string;
116
- modeId?: string;
117
- workerProvider?: string;
118
- workerModel?: string;
119
- verifierProvider?: string;
120
- verifierModel?: string;
121
- verifierModeId?: string;
122
- verifyPrompt?: string;
123
- verifyChecks?: string[];
124
- archive?: boolean;
125
- name?: string;
126
- sleepMs?: number;
127
- maxIterations?: number;
128
- maxTimeMs?: number;
129
- }
130
- export interface LoopDaemonClient {
131
- loopRun(input: LoopRunInput): Promise<LoopRunPayload>;
132
- loopList(): Promise<LoopListPayload>;
133
- loopInspect(id: string): Promise<LoopInspectPayload>;
134
- loopLogs(id: string, afterSeq?: number): Promise<LoopLogsPayload>;
135
- loopStop(id: string): Promise<LoopStopPayload>;
136
- close(): Promise<void>;
137
- }
138
- //# sourceMappingURL=types.d.ts.map
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map