polpo-ai 0.3.4 → 0.3.6

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 (48) hide show
  1. package/dist/cli/commands/cloud/api.d.ts +18 -0
  2. package/dist/cli/commands/cloud/api.d.ts.map +1 -0
  3. package/dist/cli/commands/cloud/api.js +31 -0
  4. package/dist/cli/commands/cloud/api.js.map +1 -0
  5. package/dist/cli/commands/cloud/byok.d.ts +6 -0
  6. package/dist/cli/commands/cloud/byok.d.ts.map +1 -0
  7. package/dist/cli/commands/cloud/byok.js +125 -0
  8. package/dist/cli/commands/cloud/byok.js.map +1 -0
  9. package/dist/cli/commands/cloud/config.d.ts +9 -0
  10. package/dist/cli/commands/cloud/config.d.ts.map +1 -0
  11. package/dist/cli/commands/cloud/config.js +43 -0
  12. package/dist/cli/commands/cloud/config.js.map +1 -0
  13. package/dist/cli/commands/cloud/deploy.d.ts +3 -0
  14. package/dist/cli/commands/cloud/deploy.d.ts.map +1 -0
  15. package/dist/cli/commands/cloud/deploy.js +550 -0
  16. package/dist/cli/commands/cloud/deploy.js.map +1 -0
  17. package/dist/cli/commands/cloud/login.d.ts +6 -0
  18. package/dist/cli/commands/cloud/login.d.ts.map +1 -0
  19. package/dist/cli/commands/cloud/login.js +47 -0
  20. package/dist/cli/commands/cloud/login.js.map +1 -0
  21. package/dist/cli/commands/cloud/logout.d.ts +6 -0
  22. package/dist/cli/commands/cloud/logout.d.ts.map +1 -0
  23. package/dist/cli/commands/cloud/logout.js +11 -0
  24. package/dist/cli/commands/cloud/logout.js.map +1 -0
  25. package/dist/cli/commands/cloud/logs.d.ts +6 -0
  26. package/dist/cli/commands/cloud/logs.d.ts.map +1 -0
  27. package/dist/cli/commands/cloud/logs.js +109 -0
  28. package/dist/cli/commands/cloud/logs.js.map +1 -0
  29. package/dist/cli/commands/cloud/projects.d.ts +10 -0
  30. package/dist/cli/commands/cloud/projects.d.ts.map +1 -0
  31. package/dist/cli/commands/cloud/projects.js +84 -0
  32. package/dist/cli/commands/cloud/projects.js.map +1 -0
  33. package/dist/cli/commands/cloud/prompt.d.ts +5 -0
  34. package/dist/cli/commands/cloud/prompt.d.ts.map +1 -0
  35. package/dist/cli/commands/cloud/prompt.js +86 -0
  36. package/dist/cli/commands/cloud/prompt.js.map +1 -0
  37. package/dist/cli/commands/cloud/status.d.ts +6 -0
  38. package/dist/cli/commands/cloud/status.d.ts.map +1 -0
  39. package/dist/cli/commands/cloud/status.js +77 -0
  40. package/dist/cli/commands/cloud/status.js.map +1 -0
  41. package/dist/cli/index.js +16 -0
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/core/config.d.ts.map +1 -1
  44. package/dist/core/config.js +10 -20
  45. package/dist/core/config.js.map +1 -1
  46. package/dist/core/orchestrator.js +1 -1
  47. package/dist/core/orchestrator.js.map +1 -1
  48. package/package.json +23 -40
@@ -0,0 +1,18 @@
1
+ /**
2
+ * HTTP client for the polpo-cloud API.
3
+ *
4
+ * Wraps fetch with Authorization header and JSON handling.
5
+ */
6
+ import type { Credentials } from "./config.js";
7
+ export interface ApiResponse<T = unknown> {
8
+ status: number;
9
+ data: T;
10
+ }
11
+ export interface ApiClient {
12
+ get<T = unknown>(path: string): Promise<ApiResponse<T>>;
13
+ post<T = unknown>(path: string, body?: unknown): Promise<ApiResponse<T>>;
14
+ put<T = unknown>(path: string, body?: unknown): Promise<ApiResponse<T>>;
15
+ delete<T = unknown>(path: string): Promise<ApiResponse<T>>;
16
+ }
17
+ export declare function createApiClient(credentials: Credentials): ApiClient;
18
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cloud/api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;CAC5D;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAwCnE"}
@@ -0,0 +1,31 @@
1
+ export function createApiClient(credentials) {
2
+ const { apiKey, baseUrl } = credentials;
3
+ const headers = {
4
+ Authorization: `Bearer ${apiKey}`,
5
+ "Content-Type": "application/json",
6
+ };
7
+ async function request(method, path, body) {
8
+ const url = `${baseUrl.replace(/\/$/, "")}${path}`;
9
+ const res = await fetch(url, {
10
+ method,
11
+ headers,
12
+ body: body !== undefined ? JSON.stringify(body) : undefined,
13
+ });
14
+ let data;
15
+ const contentType = res.headers.get("content-type") ?? "";
16
+ if (contentType.includes("application/json")) {
17
+ data = (await res.json());
18
+ }
19
+ else {
20
+ data = (await res.text());
21
+ }
22
+ return { status: res.status, data };
23
+ }
24
+ return {
25
+ get: (path) => request("GET", path),
26
+ post: (path, body) => request("POST", path, body),
27
+ put: (path, body) => request("PUT", path, body),
28
+ delete: (path) => request("DELETE", path),
29
+ };
30
+ }
31
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/cli/commands/cloud/api.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,eAAe,CAAC,WAAwB;IACtD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;IAExC,MAAM,OAAO,GAA2B;QACtC,aAAa,EAAE,UAAU,MAAM,EAAE;QACjC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,KAAK,UAAU,OAAO,CACpB,MAAc,EACd,IAAY,EACZ,IAAc;QAEd,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;QAEnD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC5D,CAAC,CAAC;QAEH,IAAI,IAAO,CAAC;QACZ,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC7C,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAiB,CAAC;QAC5C,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;IACtC,CAAC;IAED,OAAO;QACL,GAAG,EAAE,CAAc,IAAY,EAAE,EAAE,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,CAAC;QAC3D,IAAI,EAAE,CAAc,IAAY,EAAE,IAAc,EAAE,EAAE,CAClD,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;QAChC,GAAG,EAAE,CAAc,IAAY,EAAE,IAAc,EAAE,EAAE,CACjD,OAAO,CAAI,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;QAC/B,MAAM,EAAE,CAAc,IAAY,EAAE,EAAE,CAAC,OAAO,CAAI,QAAQ,EAAE,IAAI,CAAC;KAClE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * polpo-cloud byok — manage BYOK (Bring Your Own Key) API keys.
3
+ */
4
+ import type { Command } from "commander";
5
+ export declare function registerByokCommand(program: Command): void;
6
+ //# sourceMappingURL=byok.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byok.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cloud/byok.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyI1D"}
@@ -0,0 +1,125 @@
1
+ import { loadCredentials } from "./config.js";
2
+ import { createApiClient } from "./api.js";
3
+ import { isTTY, promptMasked } from "./prompt.js";
4
+ export function registerByokCommand(program) {
5
+ const byok = program
6
+ .command("byok")
7
+ .description("Manage BYOK (Bring Your Own Key) API keys");
8
+ byok
9
+ .command("set <provider>")
10
+ .description("Set a BYOK key for a provider")
11
+ .option("--key <key>", "API key for the provider")
12
+ .option("--label <label>", "Optional label")
13
+ .option("--project <project-id>", "Project ID (if not in credentials)")
14
+ .action(async (provider, opts) => {
15
+ const creds = loadCredentials();
16
+ if (!creds) {
17
+ console.error("Not logged in. Run: polpo-cloud login --api-key <key>");
18
+ process.exit(1);
19
+ }
20
+ let key = opts.key;
21
+ if (!key) {
22
+ if (isTTY()) {
23
+ key = await promptMasked(`API key for ${provider}: `);
24
+ if (!key) {
25
+ console.error("Error: API key is required.");
26
+ process.exit(1);
27
+ }
28
+ }
29
+ else {
30
+ console.error("Error: --key is required.");
31
+ process.exit(1);
32
+ }
33
+ }
34
+ const client = createApiClient(creds);
35
+ try {
36
+ const res = await client.post("/v1/byok", {
37
+ provider,
38
+ key,
39
+ label: opts.label,
40
+ });
41
+ if (res.status >= 200 && res.status < 300) {
42
+ console.log(`BYOK key set for provider "${provider}".`);
43
+ }
44
+ else {
45
+ const data = res.data;
46
+ console.error("Error: " + (data?.error ?? JSON.stringify(data)));
47
+ process.exit(1);
48
+ }
49
+ }
50
+ catch (err) {
51
+ console.error("Error: " + err.message);
52
+ process.exit(1);
53
+ }
54
+ });
55
+ byok
56
+ .command("list")
57
+ .description("List BYOK keys")
58
+ .option("--project <project-id>", "Project ID (if not in credentials)")
59
+ .action(async (opts) => {
60
+ const creds = loadCredentials();
61
+ if (!creds) {
62
+ console.error("Not logged in. Run: polpo-cloud login --api-key <key>");
63
+ process.exit(1);
64
+ }
65
+ const client = createApiClient(creds);
66
+ try {
67
+ const res = await client.get("/v1/byok");
68
+ if (res.status >= 200 && res.status < 300) {
69
+ const data = res.data;
70
+ const keys = data?.data ?? [];
71
+ if (keys.length === 0) {
72
+ console.log("No BYOK keys configured.");
73
+ }
74
+ else {
75
+ console.log("BYOK keys:");
76
+ for (const k of keys) {
77
+ const label = k.label ? ` (${k.label})` : "";
78
+ console.log(` ${k.provider}: ${k.maskedKey}${label}`);
79
+ }
80
+ }
81
+ }
82
+ else {
83
+ const data = res.data;
84
+ console.error("Error: " + (data?.error ?? JSON.stringify(data)));
85
+ process.exit(1);
86
+ }
87
+ }
88
+ catch (err) {
89
+ console.error("Error: " + err.message);
90
+ process.exit(1);
91
+ }
92
+ });
93
+ byok
94
+ .command("remove <provider>")
95
+ .description("Remove a BYOK key")
96
+ .option("--project <project-id>", "Project ID (if not in credentials)")
97
+ .action(async (provider, opts) => {
98
+ const creds = loadCredentials();
99
+ if (!creds) {
100
+ console.error("Not logged in. Run: polpo-cloud login --api-key <key>");
101
+ process.exit(1);
102
+ }
103
+ const client = createApiClient(creds);
104
+ try {
105
+ const res = await client.delete(`/v1/byok/${provider}`);
106
+ if (res.status >= 200 && res.status < 300) {
107
+ console.log(`BYOK key removed for provider "${provider}".`);
108
+ }
109
+ else if (res.status === 404) {
110
+ console.error(`No BYOK key found for provider "${provider}".`);
111
+ process.exit(1);
112
+ }
113
+ else {
114
+ const data = res.data;
115
+ console.error("Error: " + (data?.error ?? JSON.stringify(data)));
116
+ process.exit(1);
117
+ }
118
+ }
119
+ catch (err) {
120
+ console.error("Error: " + err.message);
121
+ process.exit(1);
122
+ }
123
+ });
124
+ }
125
+ //# sourceMappingURL=byok.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byok.js","sourceRoot":"","sources":["../../../../src/cli/commands/cloud/byok.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export interface Credentials {
2
+ apiKey: string;
3
+ baseUrl: string;
4
+ projectId?: string;
5
+ }
6
+ export declare function saveCredentials(apiKey: string, baseUrl?: string, projectId?: string): void;
7
+ export declare function loadCredentials(): Credentials | null;
8
+ export declare function clearCredentials(): void;
9
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cloud/config.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI,CAYN;AAED,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAapD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Credential storage for the polpo-cloud CLI.
3
+ *
4
+ * Reads/writes credentials to ~/.polpo/credentials.json.
5
+ */
6
+ import * as fs from "node:fs";
7
+ import * as path from "node:path";
8
+ import * as os from "node:os";
9
+ const CONFIG_DIR = path.join(os.homedir(), ".polpo");
10
+ const CREDENTIALS_FILE = path.join(CONFIG_DIR, "credentials.json");
11
+ const DEFAULT_BASE_URL = "https://api.polpo.sh";
12
+ export function saveCredentials(apiKey, baseUrl, projectId) {
13
+ if (!fs.existsSync(CONFIG_DIR)) {
14
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
15
+ }
16
+ const creds = {
17
+ apiKey,
18
+ baseUrl: baseUrl ?? DEFAULT_BASE_URL,
19
+ ...(projectId ? { projectId } : {}),
20
+ };
21
+ fs.writeFileSync(CREDENTIALS_FILE, JSON.stringify(creds, null, 2), "utf-8");
22
+ }
23
+ export function loadCredentials() {
24
+ if (!fs.existsSync(CREDENTIALS_FILE)) {
25
+ return null;
26
+ }
27
+ try {
28
+ const raw = fs.readFileSync(CREDENTIALS_FILE, "utf-8");
29
+ const parsed = JSON.parse(raw);
30
+ if (!parsed.apiKey || !parsed.baseUrl)
31
+ return null;
32
+ return parsed;
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ export function clearCredentials() {
39
+ if (fs.existsSync(CREDENTIALS_FILE)) {
40
+ fs.unlinkSync(CREDENTIALS_FILE);
41
+ }
42
+ }
43
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/cli/commands/cloud/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AAEnE,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAQhD,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,OAAgB,EAChB,SAAkB;IAElB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,KAAK,GAAgB;QACzB,MAAM;QACN,OAAO,EAAE,OAAO,IAAI,gBAAgB;QACpC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpC,CAAC;IAEF,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACnD,OAAO,MAAqB,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ export declare function registerDeployCommand(program: Command): void;
3
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/cloud/deploy.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoYzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwI5D"}