@polpo-ai/cli 0.6.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.
Files changed (68) hide show
  1. package/LICENSE +13 -0
  2. package/dist/commands/cloud/api.js +32 -0
  3. package/dist/commands/cloud/api.js.map +1 -0
  4. package/dist/commands/cloud/byok.js +125 -0
  5. package/dist/commands/cloud/byok.js.map +1 -0
  6. package/dist/commands/cloud/config.js +42 -0
  7. package/dist/commands/cloud/config.js.map +1 -0
  8. package/dist/commands/cloud/deploy.js +752 -0
  9. package/dist/commands/cloud/deploy.js.map +1 -0
  10. package/dist/commands/cloud/login.js +99 -0
  11. package/dist/commands/cloud/login.js.map +1 -0
  12. package/dist/commands/cloud/logout.js +11 -0
  13. package/dist/commands/cloud/logout.js.map +1 -0
  14. package/dist/commands/cloud/logs.js +114 -0
  15. package/dist/commands/cloud/logs.js.map +1 -0
  16. package/dist/commands/cloud/project-context.js +17 -0
  17. package/dist/commands/cloud/project-context.js.map +1 -0
  18. package/dist/commands/cloud/projects.js +95 -0
  19. package/dist/commands/cloud/projects.js.map +1 -0
  20. package/dist/commands/cloud/prompt.js +74 -0
  21. package/dist/commands/cloud/prompt.js.map +1 -0
  22. package/dist/commands/cloud/status.js +84 -0
  23. package/dist/commands/cloud/status.js.map +1 -0
  24. package/dist/commands/create.js +286 -0
  25. package/dist/commands/create.js.map +1 -0
  26. package/dist/commands/link.js +71 -0
  27. package/dist/commands/link.js.map +1 -0
  28. package/dist/commands/models.js +60 -0
  29. package/dist/commands/models.js.map +1 -0
  30. package/dist/commands/orgs.js +42 -0
  31. package/dist/commands/orgs.js.map +1 -0
  32. package/dist/commands/update.js +95 -0
  33. package/dist/commands/update.js.map +1 -0
  34. package/dist/commands/whoami.js +62 -0
  35. package/dist/commands/whoami.js.map +1 -0
  36. package/dist/index.js +138 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/interactive-menu.js +111 -0
  39. package/dist/interactive-menu.js.map +1 -0
  40. package/dist/update-check.js +106 -0
  41. package/dist/update-check.js.map +1 -0
  42. package/dist/util/api-keys.js +21 -0
  43. package/dist/util/api-keys.js.map +1 -0
  44. package/dist/util/auth.js +71 -0
  45. package/dist/util/auth.js.map +1 -0
  46. package/dist/util/base-url.js +43 -0
  47. package/dist/util/base-url.js.map +1 -0
  48. package/dist/util/browser.js +20 -0
  49. package/dist/util/browser.js.map +1 -0
  50. package/dist/util/device-code.js +103 -0
  51. package/dist/util/device-code.js.map +1 -0
  52. package/dist/util/errors.js +13 -0
  53. package/dist/util/errors.js.map +1 -0
  54. package/dist/util/install-cli.js +68 -0
  55. package/dist/util/install-cli.js.map +1 -0
  56. package/dist/util/org.js +53 -0
  57. package/dist/util/org.js.map +1 -0
  58. package/dist/util/polpo-config.js +39 -0
  59. package/dist/util/polpo-config.js.map +1 -0
  60. package/dist/util/project.js +87 -0
  61. package/dist/util/project.js.map +1 -0
  62. package/dist/util/skills.js +53 -0
  63. package/dist/util/skills.js.map +1 -0
  64. package/dist/util/slugify.js +19 -0
  65. package/dist/util/slugify.js.map +1 -0
  66. package/dist/util/template.js +118 -0
  67. package/dist/util/template.js.map +1 -0
  68. package/package.json +38 -0
package/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2026-present Lumea Labs
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
@@ -0,0 +1,32 @@
1
+ export function createApiClient(credentials, projectId) {
2
+ const { apiKey, baseUrl } = credentials;
3
+ const headers = {
4
+ Authorization: `Bearer ${apiKey}`,
5
+ "Content-Type": "application/json",
6
+ ...(projectId ? { "x-project-id": projectId } : {}),
7
+ };
8
+ async function request(method, path, body) {
9
+ const url = `${baseUrl.replace(/\/$/, "")}${path}`;
10
+ const res = await fetch(url, {
11
+ method,
12
+ headers,
13
+ body: body !== undefined ? JSON.stringify(body) : undefined,
14
+ });
15
+ let data;
16
+ const contentType = res.headers.get("content-type") ?? "";
17
+ if (contentType.includes("application/json")) {
18
+ data = (await res.json());
19
+ }
20
+ else {
21
+ data = (await res.text());
22
+ }
23
+ return { status: res.status, data };
24
+ }
25
+ return {
26
+ get: (path) => request("GET", path),
27
+ post: (path, body) => request("POST", path, body),
28
+ put: (path, body) => request("PUT", path, body),
29
+ delete: (path) => request("DELETE", path),
30
+ };
31
+ }
32
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/commands/cloud/api.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,eAAe,CAAC,WAAwB,EAAE,SAAkB;IAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;IAExC,MAAM,OAAO,GAA2B;QACtC,aAAa,EAAE,UAAU,MAAM,EAAE;QACjC,cAAc,EAAE,kBAAkB;QAClC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,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,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 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 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 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/commands/cloud/byok.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Credential storage for the Polpo 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) {
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
+ };
20
+ fs.writeFileSync(CREDENTIALS_FILE, JSON.stringify(creds, null, 2), "utf-8");
21
+ }
22
+ export function loadCredentials() {
23
+ if (!fs.existsSync(CREDENTIALS_FILE)) {
24
+ return null;
25
+ }
26
+ try {
27
+ const raw = fs.readFileSync(CREDENTIALS_FILE, "utf-8");
28
+ const parsed = JSON.parse(raw);
29
+ if (!parsed.apiKey || !parsed.baseUrl)
30
+ return null;
31
+ return parsed;
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ }
37
+ export function clearCredentials() {
38
+ if (fs.existsSync(CREDENTIALS_FILE)) {
39
+ fs.unlinkSync(CREDENTIALS_FILE);
40
+ }
41
+ }
42
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/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;AAOhD,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,OAAgB;IAEhB,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;KACrC,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"}