@getpaseo/cli 0.3.0 → 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 (93) hide show
  1. package/dist/cli.js +0 -5
  2. package/dist/commands/hub/authority.d.ts +17 -0
  3. package/dist/commands/hub/authority.js +18 -0
  4. package/dist/commands/hub/connect.d.ts +21 -0
  5. package/dist/commands/hub/connect.js +34 -0
  6. package/dist/commands/hub/credentials.d.ts +21 -0
  7. package/dist/commands/hub/credentials.js +143 -0
  8. package/dist/commands/hub/daemon-client.d.ts +27 -0
  9. package/dist/commands/hub/daemon-client.js +14 -0
  10. package/dist/commands/hub/deploy-bundle.d.ts +16 -0
  11. package/dist/commands/hub/deploy-bundle.js +248 -0
  12. package/dist/commands/hub/deploy.d.ts +25 -4
  13. package/dist/commands/hub/deploy.js +64 -48
  14. package/dist/commands/hub/disconnect.d.ts +16 -0
  15. package/dist/commands/hub/disconnect.js +24 -0
  16. package/dist/commands/hub/error.d.ts +1 -1
  17. package/dist/commands/hub/error.js +2 -2
  18. package/dist/commands/hub/help.d.ts +3 -0
  19. package/dist/commands/hub/help.js +5 -0
  20. package/dist/commands/hub/hub-client/index.d.ts +18 -0
  21. package/dist/commands/hub/hub-client/index.js +88 -0
  22. package/dist/commands/hub/hub-client/internal/contracts.d.ts +65 -0
  23. package/dist/commands/hub/hub-client/internal/contracts.js +47 -0
  24. package/dist/commands/hub/hub-client/internal/problem.d.ts +3 -0
  25. package/dist/commands/hub/hub-client/internal/problem.js +72 -0
  26. package/dist/commands/hub/hub-client/internal/transport.d.ts +15 -0
  27. package/dist/commands/hub/hub-client/internal/transport.js +30 -0
  28. package/dist/commands/hub/index.d.ts +15 -25
  29. package/dist/commands/hub/index.js +64 -74
  30. package/dist/commands/hub/{device-authorization.d.ts → login-flow.d.ts} +12 -15
  31. package/dist/commands/hub/login-flow.js +78 -0
  32. package/dist/commands/hub/login.d.ts +21 -0
  33. package/dist/commands/hub/login.js +34 -0
  34. package/dist/commands/hub/logout.d.ts +31 -0
  35. package/dist/commands/hub/logout.js +65 -0
  36. package/dist/commands/hub/origin.d.ts +2 -0
  37. package/dist/commands/hub/origin.js +27 -0
  38. package/dist/commands/hub/projects.d.ts +24 -0
  39. package/dist/commands/hub/projects.js +49 -0
  40. package/dist/commands/hub/reporter.d.ts +10 -0
  41. package/dist/commands/hub/reporter.js +11 -0
  42. package/dist/commands/hub/status-output.d.ts +13 -0
  43. package/dist/commands/hub/status-output.js +30 -0
  44. package/dist/commands/provider/diagnostic.d.ts +12 -0
  45. package/dist/commands/provider/diagnostic.js +31 -0
  46. package/dist/commands/provider/index.js +5 -0
  47. package/dist/commands/schedule/types.d.ts +1 -4
  48. package/dist/commands/workspace/index.js +10 -0
  49. package/dist/commands/workspace/rename.d.ts +22 -0
  50. package/dist/commands/workspace/rename.js +61 -0
  51. package/dist/output/types.d.ts +1 -1
  52. package/package.json +4 -4
  53. package/dist/commands/chat/create.d.ts +0 -9
  54. package/dist/commands/chat/create.js +0 -23
  55. package/dist/commands/chat/delete.d.ts +0 -6
  56. package/dist/commands/chat/delete.js +0 -20
  57. package/dist/commands/chat/index.d.ts +0 -3
  58. package/dist/commands/chat/index.js +0 -47
  59. package/dist/commands/chat/inspect.d.ts +0 -6
  60. package/dist/commands/chat/inspect.js +0 -20
  61. package/dist/commands/chat/ls.d.ts +0 -6
  62. package/dist/commands/chat/ls.js +0 -20
  63. package/dist/commands/chat/post.d.ts +0 -9
  64. package/dist/commands/chat/post.js +0 -28
  65. package/dist/commands/chat/read.d.ts +0 -11
  66. package/dist/commands/chat/read.js +0 -40
  67. package/dist/commands/chat/schema.d.ts +0 -36
  68. package/dist/commands/chat/schema.js +0 -81
  69. package/dist/commands/chat/shared.d.ts +0 -19
  70. package/dist/commands/chat/shared.js +0 -118
  71. package/dist/commands/chat/wait.d.ts +0 -9
  72. package/dist/commands/chat/wait.js +0 -45
  73. package/dist/commands/hub/client.d.ts +0 -19
  74. package/dist/commands/hub/client.js +0 -114
  75. package/dist/commands/hub/cloud-device-authorization.d.ts +0 -45
  76. package/dist/commands/hub/cloud-device-authorization.js +0 -92
  77. package/dist/commands/hub/deploy-input.d.ts +0 -17
  78. package/dist/commands/hub/deploy-input.js +0 -264
  79. package/dist/commands/hub/device-authorization.js +0 -87
  80. package/dist/commands/loop/index.d.ts +0 -3
  81. package/dist/commands/loop/index.js +0 -18
  82. package/dist/commands/loop/inspect.d.ts +0 -13
  83. package/dist/commands/loop/inspect.js +0 -100
  84. package/dist/commands/loop/logs.d.ts +0 -8
  85. package/dist/commands/loop/logs.js +0 -69
  86. package/dist/commands/loop/ls.d.ts +0 -18
  87. package/dist/commands/loop/ls.js +0 -62
  88. package/dist/commands/loop/run.d.ts +0 -30
  89. package/dist/commands/loop/run.js +0 -162
  90. package/dist/commands/loop/stop.d.ts +0 -15
  91. package/dist/commands/loop/stop.js +0 -56
  92. package/dist/commands/loop/types.d.ts +0 -138
  93. package/dist/commands/loop/types.js +0 -2
@@ -1,118 +0,0 @@
1
- import { connectToDaemon, getDaemonHost } from "../../utils/client.js";
2
- import { parseDuration } from "../../utils/duration.js";
3
- export async function connectChatClient(host) {
4
- const daemonHost = getDaemonHost({ host });
5
- try {
6
- const client = await connectToDaemon({ host });
7
- return { client, daemonHost };
8
- }
9
- catch (err) {
10
- const message = err instanceof Error ? err.message : String(err);
11
- const error = {
12
- code: "DAEMON_NOT_RUNNING",
13
- message: `Cannot connect to daemon at ${daemonHost}: ${message}`,
14
- details: "Start the daemon with: paseo daemon start",
15
- };
16
- throw error;
17
- }
18
- }
19
- export async function attachAgentNamesToMessages(client, messages, options = {}) {
20
- const agentIds = new Set();
21
- for (const message of messages) {
22
- agentIds.add(message.author);
23
- for (const mentionId of message.mentionAgentIds) {
24
- agentIds.add(mentionId);
25
- }
26
- }
27
- if (agentIds.size === 0) {
28
- return messages;
29
- }
30
- let payload;
31
- try {
32
- payload = await client.fetchAgents({
33
- filter: { includeArchived: true },
34
- ...(typeof options.timeout === "number" ? { timeout: options.timeout } : {}),
35
- });
36
- }
37
- catch (error) {
38
- if (options.bestEffort) {
39
- return messages;
40
- }
41
- throw error;
42
- }
43
- const agentNames = new Map();
44
- for (const entry of payload.entries) {
45
- const title = entry.agent.title?.trim();
46
- if (title) {
47
- agentNames.set(entry.agent.id, title);
48
- }
49
- }
50
- return messages.map((message) => ({
51
- ...message,
52
- authorName: agentNames.get(message.author) ?? null,
53
- mentionLabels: message.mentionAgentIds.map((agentId) => {
54
- const name = agentNames.get(agentId);
55
- return name ? `${name} (${agentId})` : agentId;
56
- }),
57
- }));
58
- }
59
- export function toChatCommandError(code, action, err) {
60
- if (err && typeof err === "object" && "code" in err && "message" in err) {
61
- return err;
62
- }
63
- const message = err instanceof Error ? err.message : String(err);
64
- const rpcCode = typeof err === "object" && err !== null && "code" in err && typeof err.code === "string"
65
- ? err.code
66
- : undefined;
67
- return {
68
- code: rpcCode ?? code,
69
- message: `Failed to ${action}: ${message}`,
70
- };
71
- }
72
- export function parseSinceValue(input) {
73
- if (!input) {
74
- return undefined;
75
- }
76
- try {
77
- const durationMs = parseDuration(input);
78
- return new Date(Date.now() - durationMs).toISOString();
79
- }
80
- catch {
81
- const timestamp = new Date(input);
82
- if (Number.isNaN(timestamp.getTime())) {
83
- const error = {
84
- code: "INVALID_SINCE",
85
- message: "Invalid --since value",
86
- details: "Use a duration like 10m or an ISO timestamp.",
87
- };
88
- throw error;
89
- }
90
- return timestamp.toISOString();
91
- }
92
- }
93
- export function parseTimeoutMs(input) {
94
- if (!input) {
95
- return undefined;
96
- }
97
- try {
98
- const timeoutMs = parseDuration(input);
99
- if (timeoutMs <= 0) {
100
- throw new Error("Timeout must be positive");
101
- }
102
- return timeoutMs;
103
- }
104
- catch (err) {
105
- const message = err instanceof Error ? err.message : String(err);
106
- const error = {
107
- code: "INVALID_TIMEOUT",
108
- message: "Invalid timeout value",
109
- details: message,
110
- };
111
- throw error;
112
- }
113
- }
114
- export function resolveChatAuthorAgentId() {
115
- const agentId = process.env.PASEO_AGENT_ID?.trim();
116
- return agentId && agentId.length > 0 ? agentId : "manual";
117
- }
118
- //# sourceMappingURL=shared.js.map
@@ -1,9 +0,0 @@
1
- import type { Command } from "commander";
2
- import type { ListResult } from "../../output/index.js";
3
- import { type ChatCommandOptions } from "./shared.js";
4
- import { type ChatMessageRow } from "./schema.js";
5
- export interface ChatWaitOptions extends ChatCommandOptions {
6
- timeout?: string;
7
- }
8
- export declare function runWaitCommand(room: string, options: ChatWaitOptions, _command: Command): Promise<ListResult<ChatMessageRow>>;
9
- //# sourceMappingURL=wait.d.ts.map
@@ -1,45 +0,0 @@
1
- import { attachAgentNamesToMessages, connectChatClient, parseTimeoutMs, toChatCommandError, } from "./shared.js";
2
- import { chatMessageSchema, toChatMessageRow } from "./schema.js";
3
- const CHAT_WAIT_PREFLIGHT_TIMEOUT_MS = 2000;
4
- export async function runWaitCommand(room, options, _command) {
5
- const timeoutMs = parseTimeoutMs(options.timeout);
6
- const { client } = await connectChatClient(options.host);
7
- const deadline = typeof timeoutMs === "number" ? Date.now() + timeoutMs : null;
8
- const hasExplicitTimeout = deadline !== null;
9
- const remainingTimeoutMs = () => deadline === null ? undefined : Math.max(1, deadline - Date.now());
10
- try {
11
- const latest = await client.readChatMessages({
12
- room,
13
- limit: 1,
14
- ...(hasExplicitTimeout
15
- ? {
16
- timeout: Math.min(remainingTimeoutMs() ?? 1, CHAT_WAIT_PREFLIGHT_TIMEOUT_MS),
17
- }
18
- : {}),
19
- });
20
- const afterMessageId = latest.messages[0]?.id;
21
- const payload = await client.waitForChatMessages({
22
- room,
23
- afterMessageId,
24
- timeoutMs: remainingTimeoutMs() ?? timeoutMs,
25
- });
26
- const messages = await attachAgentNamesToMessages(client, payload.messages.map(toChatMessageRow), hasExplicitTimeout
27
- ? {
28
- timeout: remainingTimeoutMs(),
29
- bestEffort: true,
30
- }
31
- : {});
32
- return {
33
- type: "list",
34
- data: messages,
35
- schema: chatMessageSchema,
36
- };
37
- }
38
- catch (err) {
39
- throw toChatCommandError("CHAT_WAIT_FAILED", "wait for chat messages", err);
40
- }
41
- finally {
42
- await client.close().catch(() => { });
43
- }
44
- }
45
- //# sourceMappingURL=wait.js.map
@@ -1,19 +0,0 @@
1
- import { z } from "zod";
2
- import type { HubDeployPartial } from "./deploy-input.js";
3
- declare const installResponseSchema: z.ZodObject<{
4
- projectSlug: z.ZodString;
5
- version: z.ZodNumber;
6
- versionId: z.ZodString;
7
- active: z.ZodBoolean;
8
- }, z.core.$strict>;
9
- export type HubInstallResult = z.infer<typeof installResponseSchema>;
10
- interface InstallHubConfigurationInput {
11
- origin: string;
12
- apiKey: string;
13
- projectSlug: string;
14
- yaml: string;
15
- partials?: readonly HubDeployPartial[];
16
- }
17
- export declare function installHubConfiguration(input: InstallHubConfigurationInput): Promise<HubInstallResult>;
18
- export {};
19
- //# sourceMappingURL=client.d.ts.map
@@ -1,114 +0,0 @@
1
- import { z } from "zod";
2
- import { HubDeployError } from "./error.js";
3
- const installResponseSchema = z
4
- .object({
5
- projectSlug: z.string().min(1),
6
- version: z.number().int().positive(),
7
- versionId: z.string().uuid(),
8
- active: z.boolean(),
9
- })
10
- .strict();
11
- const issuePathSchema = z.union([z.string(), z.array(z.union([z.string(), z.number()]))]);
12
- const fieldIssueSchema = z.object({
13
- field: z.string().optional(),
14
- path: issuePathSchema.optional(),
15
- message: z.string(),
16
- });
17
- const problemSchema = z.object({
18
- type: z.string().optional(),
19
- title: z.string().optional(),
20
- status: z.number().int().optional(),
21
- detail: z.string().optional(),
22
- instance: z.string().optional(),
23
- errors: z
24
- .union([z.array(fieldIssueSchema), z.record(z.string(), z.array(z.string()))])
25
- .optional(),
26
- issues: z.array(fieldIssueSchema).optional(),
27
- });
28
- export async function installHubConfiguration(input) {
29
- let response;
30
- try {
31
- response = await fetch(`${input.origin}/api/v1/configurations/install`, {
32
- method: "POST",
33
- headers: {
34
- authorization: `Bearer ${input.apiKey}`,
35
- "content-type": "application/json",
36
- },
37
- body: JSON.stringify({
38
- projectSlug: input.projectSlug,
39
- yaml: input.yaml,
40
- ...(input.partials === undefined || input.partials.length === 0
41
- ? {}
42
- : { partials: input.partials }),
43
- }),
44
- });
45
- }
46
- catch {
47
- throw new HubDeployError("HUB_NETWORK_ERROR", `Could not reach Paseo Hub at ${input.origin}. Check the Hub URL and network connection.`);
48
- }
49
- if (response.status !== 201) {
50
- throw await deploymentFailure(response, input.apiKey);
51
- }
52
- try {
53
- return installResponseSchema.parse(await response.json());
54
- }
55
- catch {
56
- throw new HubDeployError("HUB_INVALID_RESPONSE", "Hub returned a malformed deployment response.");
57
- }
58
- }
59
- async function deploymentFailure(response, apiKey) {
60
- const contentType = response.headers.get("content-type") ?? "";
61
- if (!contentType.toLowerCase().includes("application/problem+json")) {
62
- return new HubDeployError("HUB_REQUEST_FAILED", `Hub deployment failed with HTTP ${response.status}.`);
63
- }
64
- let body;
65
- try {
66
- body = await response.json();
67
- }
68
- catch {
69
- return new HubDeployError("HUB_INVALID_RESPONSE", `Hub returned malformed problem details for HTTP ${response.status}.`);
70
- }
71
- const parsed = problemSchema.safeParse(body);
72
- if (!parsed.success ||
73
- (parsed.data.status !== undefined && parsed.data.status !== response.status)) {
74
- return new HubDeployError("HUB_INVALID_RESPONSE", `Hub returned nonconforming problem details for HTTP ${response.status}.`);
75
- }
76
- const title = parsed.data.title ?? `Hub deployment failed with HTTP ${response.status}`;
77
- const detail = parsed.data.detail;
78
- const message = detail === undefined ? title : `${title}: ${detail}`;
79
- const details = formatFieldIssues(parsed.data.errors, parsed.data.issues);
80
- const code = response.status === 422 ? "HUB_VALIDATION_FAILED" : "HUB_REQUEST_FAILED";
81
- return new HubDeployError(code, redactSecret(message, apiKey), details === undefined ? undefined : redactSecret(details, apiKey));
82
- }
83
- function formatFieldIssues(errors, issues) {
84
- const fieldIssues = Array.isArray(errors) ? errors : issues;
85
- if (fieldIssues !== undefined) {
86
- const lines = fieldIssues.map((issue) => {
87
- const field = issue.field ?? formatIssuePath(issue.path);
88
- return field === undefined ? issue.message : `${field}: ${issue.message}`;
89
- });
90
- return lines.length === 0 ? undefined : lines.join("\n");
91
- }
92
- if (errors === undefined)
93
- return undefined;
94
- const lines = Object.entries(errors).flatMap(([field, messages]) => messages.map((message) => `${field}: ${message}`));
95
- return lines.length === 0 ? undefined : lines.join("\n");
96
- }
97
- function formatIssuePath(path) {
98
- if (path === undefined || typeof path === "string")
99
- return path;
100
- let formatted = "";
101
- for (const segment of path) {
102
- if (typeof segment === "number") {
103
- formatted += `[${segment}]`;
104
- }
105
- else {
106
- formatted += formatted.length === 0 ? segment : `.${segment}`;
107
- }
108
- }
109
- return formatted || undefined;
110
- }
111
- function redactSecret(value, secret) {
112
- return value.split(secret).join("[redacted]");
113
- }
114
- //# sourceMappingURL=client.js.map
@@ -1,45 +0,0 @@
1
- import { z } from "zod";
2
- declare const authorizationSchema: z.ZodObject<{
3
- deviceCode: z.ZodString;
4
- userCode: z.ZodString;
5
- verificationUri: z.ZodURL;
6
- verificationUriComplete: z.ZodURL;
7
- expiresAt: z.ZodString;
8
- interval: z.ZodNumber;
9
- }, z.core.$strip>;
10
- declare const pollSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
11
- status: z.ZodLiteral<"pending">;
12
- interval: z.ZodNumber;
13
- }, z.core.$strip>, z.ZodObject<{
14
- status: z.ZodLiteral<"slow_down">;
15
- interval: z.ZodNumber;
16
- }, z.core.$strip>, z.ZodObject<{
17
- status: z.ZodLiteral<"approved">;
18
- interval: z.ZodNumber;
19
- enrollmentToken: z.ZodString;
20
- }, z.core.$strip>, z.ZodObject<{
21
- status: z.ZodLiteral<"denied">;
22
- interval: z.ZodNumber;
23
- }, z.core.$strip>, z.ZodObject<{
24
- status: z.ZodLiteral<"expired">;
25
- interval: z.ZodNumber;
26
- }, z.core.$strip>, z.ZodObject<{
27
- status: z.ZodLiteral<"enrolled">;
28
- interval: z.ZodNumber;
29
- }, z.core.$strip>, z.ZodObject<{
30
- status: z.ZodLiteral<"retry_later">;
31
- }, z.core.$strip>], "status">;
32
- export type DeviceAuthorization = z.infer<typeof authorizationSchema>;
33
- export type DeviceAuthorizationPoll = z.infer<typeof pollSchema>;
34
- export interface CloudDeviceAuthorization {
35
- start(hubUrl: string, displayName: string): Promise<DeviceAuthorization>;
36
- poll(hubUrl: string, deviceCode: string, timeoutMilliseconds: number): Promise<DeviceAuthorizationPoll>;
37
- }
38
- export declare class CloudDeviceAuthorizationClient implements CloudDeviceAuthorization {
39
- private readonly startTimeoutMilliseconds;
40
- constructor(startTimeoutMilliseconds?: number);
41
- start(hubUrl: string, displayName: string): Promise<DeviceAuthorization>;
42
- poll(hubUrl: string, deviceCode: string, timeoutMilliseconds: number): Promise<DeviceAuthorizationPoll>;
43
- }
44
- export {};
45
- //# sourceMappingURL=cloud-device-authorization.d.ts.map
@@ -1,92 +0,0 @@
1
- import { z } from "zod";
2
- const START_TIMEOUT_MS = 15000;
3
- const activationUrlSchema = z.url({ protocol: /^https?$/u });
4
- const authorizationSchema = z.object({
5
- deviceCode: z.string().min(32),
6
- userCode: z.string().min(1),
7
- verificationUri: activationUrlSchema,
8
- verificationUriComplete: activationUrlSchema,
9
- expiresAt: z.string().datetime(),
10
- interval: z.number().int().min(5),
11
- });
12
- const pollSchema = z.discriminatedUnion("status", [
13
- z.object({ status: z.literal("pending"), interval: z.number().int().min(5) }),
14
- z.object({ status: z.literal("slow_down"), interval: z.number().int().min(5) }),
15
- z.object({
16
- status: z.literal("approved"),
17
- interval: z.number().int().min(5),
18
- enrollmentToken: z.string().min(32),
19
- }),
20
- z.object({ status: z.literal("denied"), interval: z.number().int().min(5) }),
21
- z.object({ status: z.literal("expired"), interval: z.number().int().min(5) }),
22
- z.object({ status: z.literal("enrolled"), interval: z.number().int().min(5) }),
23
- z.object({ status: z.literal("retry_later") }),
24
- ]);
25
- export class CloudDeviceAuthorizationClient {
26
- constructor(startTimeoutMilliseconds = START_TIMEOUT_MS) {
27
- this.startTimeoutMilliseconds = startTimeoutMilliseconds;
28
- }
29
- async start(hubUrl, displayName) {
30
- const signal = AbortSignal.timeout(this.startTimeoutMilliseconds);
31
- try {
32
- const response = await fetch(endpoint(hubUrl, "/api/device-authorizations/"), {
33
- method: "POST",
34
- headers: { "content-type": "application/json" },
35
- body: JSON.stringify({ displayName }),
36
- signal,
37
- });
38
- if (!response.ok)
39
- throw new Error(`Cloud registration failed (${response.status})`);
40
- return authorizationSchema.parse(await response.json());
41
- }
42
- catch (error) {
43
- if (signal.aborted) {
44
- throw new Error("Cloud registration start timed out", { cause: error });
45
- }
46
- throw error;
47
- }
48
- }
49
- async poll(hubUrl, deviceCode, timeoutMilliseconds) {
50
- const signal = AbortSignal.timeout(timeoutMilliseconds);
51
- let response;
52
- try {
53
- response = await fetch(endpoint(hubUrl, "/api/device-authorizations/poll"), {
54
- method: "POST",
55
- headers: { "content-type": "application/json" },
56
- body: JSON.stringify({ deviceCode }),
57
- signal,
58
- });
59
- }
60
- catch {
61
- return { status: "retry_later" };
62
- }
63
- if ([408, 425, 429].includes(response.status) || response.status >= 500) {
64
- return { status: "retry_later" };
65
- }
66
- if (!response.ok)
67
- throw new Error(`Cloud registration poll failed (${response.status})`);
68
- let body;
69
- try {
70
- body = await response.json();
71
- }
72
- catch (error) {
73
- if (signal.aborted || error instanceof TypeError)
74
- return { status: "retry_later" };
75
- throw error;
76
- }
77
- return pollSchema.parse(body);
78
- }
79
- }
80
- function endpoint(hubUrl, pathname) {
81
- const url = new URL(hubUrl);
82
- if (!["http:", "https:"].includes(url.protocol) ||
83
- url.username ||
84
- url.password ||
85
- url.search ||
86
- url.hash) {
87
- throw new Error("Hub URL must be an HTTP or HTTPS origin without credentials or a query");
88
- }
89
- url.pathname = `${url.pathname.replace(/\/$/u, "")}${pathname}`;
90
- return url.toString();
91
- }
92
- //# sourceMappingURL=cloud-device-authorization.js.map
@@ -1,17 +0,0 @@
1
- export interface HubDeployPartial {
2
- path: string;
3
- content: string;
4
- }
5
- export interface HubDeployInput {
6
- projectSlug: string;
7
- yaml: string;
8
- partials?: readonly HubDeployPartial[];
9
- }
10
- interface ResolveHubDeployInput {
11
- cwd: string;
12
- file?: string;
13
- project?: string;
14
- }
15
- export declare function resolveHubDeployInput(input: ResolveHubDeployInput): Promise<HubDeployInput>;
16
- export {};
17
- //# sourceMappingURL=deploy-input.d.ts.map