@polpo-ai/cli 0.6.4 → 0.6.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.
@@ -1,3 +1,4 @@
1
+ import * as clack from "@clack/prompts";
1
2
  import pc from "picocolors";
2
3
  import { getAuth } from "../util/auth.js";
3
4
  import { createApiClient } from "./cloud/api.js";
@@ -13,11 +14,17 @@ export function registerWhoamiCommand(program) {
13
14
  console.log(JSON.stringify({ loggedIn: false }));
14
15
  }
15
16
  else {
16
- console.log(pc.red("Not logged in.") + " Run: " + pc.bold("polpo login"));
17
+ clack.intro(pc.bold("Polpo Whoami"));
18
+ clack.outro(pc.red("Not logged in.") + " Run: " + pc.bold("polpo login"));
17
19
  }
18
20
  process.exit(1);
19
21
  }
22
+ if (!opts.json) {
23
+ clack.intro(pc.bold("Polpo — Whoami"));
24
+ }
20
25
  const client = createApiClient({ apiKey: creds.apiKey, baseUrl: creds.baseUrl });
26
+ const s = clack.spinner();
27
+ s.start("Fetching account info");
21
28
  let user = null;
22
29
  let orgs = [];
23
30
  let staleAuth = false;
@@ -37,13 +44,14 @@ export function registerWhoamiCommand(program) {
37
44
  orgs = Array.isArray(orgsRes.data) ? orgsRes.data : [];
38
45
  }
39
46
  catch { /* graceful */ }
47
+ s.stop("Account info fetched");
40
48
  if (staleAuth) {
41
49
  if (opts.json) {
42
50
  console.log(JSON.stringify({ loggedIn: false, reason: "stale_token", apiUrl: creds.baseUrl }, null, 2));
43
51
  }
44
52
  else {
45
- console.error(pc.red("Session expired or invalid."));
46
- console.error(pc.dim("Run ") + pc.bold("polpo login") + pc.dim(" to refresh."));
53
+ clack.log.error(pc.red("Session expired or invalid."));
54
+ clack.outro(pc.dim("Run ") + pc.bold("polpo login") + pc.dim(" to refresh."));
47
55
  }
48
56
  process.exit(1);
49
57
  }
@@ -56,24 +64,23 @@ export function registerWhoamiCommand(program) {
56
64
  }, null, 2));
57
65
  return;
58
66
  }
59
- console.log();
60
67
  if (user?.email) {
61
- console.log(pc.bold(" User: ") + user.email + (user.name ? pc.dim(` (${user.name})`) : ""));
68
+ clack.log.info(pc.bold("User: ") + user.email + (user.name ? pc.dim(` (${user.name})`) : ""));
62
69
  }
63
- console.log(pc.bold(" API: ") + creds.baseUrl);
70
+ clack.log.info(pc.bold("API: ") + creds.baseUrl);
64
71
  if (orgs.length === 0) {
65
- console.log(pc.bold(" Orgs: ") + pc.dim("none"));
72
+ clack.log.info(pc.bold("Orgs: ") + pc.dim("none"));
66
73
  }
67
74
  else if (orgs.length === 1) {
68
- console.log(pc.bold(" Org: ") + orgs[0].name + pc.dim(` (${orgs[0].id})`));
75
+ clack.log.info(pc.bold("Org: ") + orgs[0].name + pc.dim(` (${orgs[0].id})`));
69
76
  }
70
77
  else {
71
- console.log(pc.bold(` Orgs: ${orgs.length}`));
78
+ clack.log.info(pc.bold(`Orgs: ${orgs.length}`));
72
79
  for (const o of orgs) {
73
- console.log(pc.dim(` · ${o.name} (${o.id})`));
80
+ clack.log.info(pc.dim(` ${o.name} (${o.id})`));
74
81
  }
75
82
  }
76
- console.log();
83
+ clack.outro("Done");
77
84
  });
78
85
  }
79
86
  //# sourceMappingURL=whoami.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAajD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACvC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACzC,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAEjF,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAEjC,IAAI,IAAI,GAAgB,IAAI,CAAC;QAC7B,IAAI,IAAI,GAAU,EAAE,CAAC;QACrB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAAO,QAAQ,CAAC,CAAC;YAC/C,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;gBAAE,SAAS,GAAG,IAAI,CAAC;;gBAC9D,IAAI,GAAI,KAAK,CAAC,IAAa,IAAI,IAAI,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAQ,UAAU,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG;gBAAE,SAAS,GAAG,IAAI,CAAC;;gBAClE,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;QAE1B,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAE/B,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1G,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;gBACvD,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;YAChF,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,KAAK,CAAC,OAAO;gBACrB,IAAI;gBACJ,IAAI;aACL,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACjG,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACjD,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACrB,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Conflict resolution for pull/deploy sync operations.
3
+ *
4
+ * Compares local and remote content, prompts the user when they differ
5
+ * (interactive mode), or auto-overrides (force mode). Smart default: YES
6
+ * — the user explicitly ran pull or deploy, so they expect changes.
7
+ *
8
+ * Three variants:
9
+ * - resolveFileConflict: new string vs existing local file
10
+ * - resolveJsonConflict: new object vs existing local JSON file
11
+ * - resolveDataConflict: local data vs remote data (in-memory, no filesystem)
12
+ */
13
+ import * as fs from "node:fs";
14
+ import * as clack from "@clack/prompts";
15
+ // ── Pull direction: new content → local file ─────────────────
16
+ /**
17
+ * Compare new content against an existing file.
18
+ *
19
+ * - File doesn't exist → "write"
20
+ * - Content identical → "skip"
21
+ * - Content differs + force → "write"
22
+ * - Content differs + interactive → prompt (default YES)
23
+ * - Content differs + non-interactive → "skip"
24
+ */
25
+ export async function resolveFileConflict(filePath, newContent, label, opts) {
26
+ if (!fs.existsSync(filePath))
27
+ return "write";
28
+ const existing = fs.readFileSync(filePath, "utf-8");
29
+ if (existing === newContent)
30
+ return "skip";
31
+ return resolveConflictPrompt(`${label} differs from local version. Override local?`, opts);
32
+ }
33
+ /**
34
+ * Same as resolveFileConflict but normalizes JSON formatting before
35
+ * comparing to avoid false conflicts from whitespace differences.
36
+ */
37
+ export async function resolveJsonConflict(filePath, newData, label, opts) {
38
+ if (!fs.existsSync(filePath))
39
+ return "write";
40
+ try {
41
+ const existingRaw = fs.readFileSync(filePath, "utf-8");
42
+ const existingData = JSON.parse(existingRaw);
43
+ if (JSON.stringify(existingData) === JSON.stringify(newData))
44
+ return "skip";
45
+ }
46
+ catch {
47
+ // Can't parse existing file — treat as conflict
48
+ }
49
+ return resolveConflictPrompt(`${label} differs from local version. Override local?`, opts);
50
+ }
51
+ // ── Deploy direction: local data → remote data ───────────────
52
+ /**
53
+ * Compare local data against remote data (both in-memory). Used by deploy
54
+ * to detect when a cloud resource differs from the local version.
55
+ *
56
+ * - Remote is null/undefined → "write" (doesn't exist yet, create)
57
+ * - Data identical → "skip" (no change needed)
58
+ * - Data differs → same force/interactive/skip logic
59
+ */
60
+ export async function resolveDeployConflict(localData, remoteData, label, opts) {
61
+ if (remoteData == null)
62
+ return "write";
63
+ if (JSON.stringify(normalize(localData)) === JSON.stringify(normalize(remoteData))) {
64
+ return "skip";
65
+ }
66
+ return resolveConflictPrompt(`${label} differs from cloud version. Push local?`, opts);
67
+ }
68
+ // ── Shared prompt logic ──────────────────────────────────────
69
+ async function resolveConflictPrompt(message, opts) {
70
+ if (opts.force)
71
+ return "write";
72
+ if (opts.interactive) {
73
+ const answer = await clack.confirm({
74
+ message,
75
+ initialValue: true,
76
+ });
77
+ if (clack.isCancel(answer) || !answer)
78
+ return "skip";
79
+ return "write";
80
+ }
81
+ return "skip";
82
+ }
83
+ /**
84
+ * Normalize an object for comparison — strip undefined values and
85
+ * sort keys so field ordering doesn't cause false conflicts.
86
+ */
87
+ function normalize(data) {
88
+ return JSON.parse(JSON.stringify(data));
89
+ }
90
+ //# sourceMappingURL=conflicts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflicts.js","sourceRoot":"","sources":["../../src/util/conflicts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAWxC,gEAAgE;AAEhE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,UAAkB,EAClB,KAAa,EACb,IAAqB;IAErB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAE7C,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,QAAQ,KAAK,UAAU;QAAE,OAAO,MAAM,CAAC;IAE3C,OAAO,qBAAqB,CAAC,GAAG,KAAK,8CAA8C,EAAE,IAAI,CAAC,CAAC;AAC7F,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,QAAgB,EAChB,OAAgB,EAChB,KAAa,EACb,IAAqB;IAErB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,OAAO,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO,MAAM,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;IAED,OAAO,qBAAqB,CAAC,GAAG,KAAK,8CAA8C,EAAE,IAAI,CAAC,CAAC;AAC7F,CAAC;AAED,gEAAgE;AAEhE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,SAAkB,EAClB,UAAsC,EACtC,KAAa,EACb,IAAqB;IAErB,IAAI,UAAU,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC;IAEvC,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACnF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,qBAAqB,CAAC,GAAG,KAAK,0CAA0C,EAAE,IAAI,CAAC,CAAC;AACzF,CAAC;AAED,gEAAgE;AAEhE,KAAK,UAAU,qBAAqB,CAClC,OAAe,EACf,IAAqB;IAErB,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC;IAE/B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACjC,OAAO;YACP,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC;QACrD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,IAAa;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,286 @@
1
+ /**
2
+ * polpo pull — download cloud project state into the local .polpo/ directory.
3
+ *
4
+ * The inverse of `polpo deploy`. Fetches agents, teams, memory, skills,
5
+ * missions, playbooks, and schedules from the data plane API and writes
6
+ * them in the exact format that the CLI and FileStores expect on disk.
7
+ *
8
+ * Each resource is compared against the local version before writing.
9
+ * In interactive mode, the user is prompted per-resource when they differ.
10
+ * In force mode (--yes / --force), cloud always wins.
11
+ */
12
+ import * as fs from "node:fs";
13
+ import * as path from "node:path";
14
+ import { resolveJsonConflict, resolveFileConflict, } from "./conflicts.js";
15
+ function ensureDir(dir) {
16
+ if (!fs.existsSync(dir))
17
+ fs.mkdirSync(dir, { recursive: true });
18
+ }
19
+ function writeJson(filePath, data) {
20
+ ensureDir(path.dirname(filePath));
21
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2) + "\n", "utf-8");
22
+ }
23
+ function writeText(filePath, content) {
24
+ ensureDir(path.dirname(filePath));
25
+ fs.writeFileSync(filePath, content, "utf-8");
26
+ }
27
+ export async function pullProject(client, polpoDir, opts = { force: true, interactive: false }) {
28
+ ensureDir(polpoDir);
29
+ const result = { pulled: [], unchanged: [], skipped: [], errors: [] };
30
+ // ── Agents ──────────────────────────────────
31
+ try {
32
+ const res = await client.get("/v1/agents");
33
+ if (res.status === 200) {
34
+ const agents = res.data?.data ?? res.data ?? [];
35
+ if (Array.isArray(agents) && agents.length > 0) {
36
+ const entries = agents.map((a) => ({
37
+ agent: {
38
+ name: a.name,
39
+ role: a.role,
40
+ model: a.model,
41
+ systemPrompt: a.systemPrompt,
42
+ allowedTools: a.allowedTools,
43
+ allowedPaths: a.allowedPaths,
44
+ skills: a.skills,
45
+ maxTurns: a.maxTurns,
46
+ maxConcurrency: a.maxConcurrency,
47
+ reasoning: a.reasoning,
48
+ reportsTo: a.reportsTo,
49
+ identity: a.identity,
50
+ browserProfile: a.browserProfile,
51
+ emailAllowedDomains: a.emailAllowedDomains,
52
+ },
53
+ teamName: a.teamName ?? a.team ?? "default",
54
+ }));
55
+ const clean = JSON.parse(JSON.stringify(entries));
56
+ const filePath = path.join(polpoDir, "agents.json");
57
+ const action = await resolveJsonConflict(filePath, clean, `agents.json (${agents.length} agents)`, opts);
58
+ if (action === "write") {
59
+ writeJson(filePath, clean);
60
+ result.pulled.push(`agents (${agents.length})`);
61
+ }
62
+ else if (action === "skip") {
63
+ if (fs.existsSync(filePath))
64
+ result.skipped.push("agents (local kept)");
65
+ else
66
+ result.unchanged.push("agents");
67
+ }
68
+ }
69
+ else {
70
+ result.unchanged.push("agents (none in cloud)");
71
+ }
72
+ }
73
+ }
74
+ catch (err) {
75
+ result.errors.push(`agents: ${err.message}`);
76
+ }
77
+ // ── Teams ──────────────────────────────────
78
+ try {
79
+ const res = await client.get("/v1/agents/teams");
80
+ if (res.status === 200) {
81
+ const teams = res.data?.data ?? res.data ?? [];
82
+ if (Array.isArray(teams) && teams.length > 0) {
83
+ const clean = JSON.parse(JSON.stringify(teams.map((t) => ({ name: t.name, description: t.description }))));
84
+ const filePath = path.join(polpoDir, "teams.json");
85
+ const action = await resolveJsonConflict(filePath, clean, `teams.json (${teams.length} teams)`, opts);
86
+ if (action === "write") {
87
+ writeJson(filePath, clean);
88
+ result.pulled.push(`teams (${teams.length})`);
89
+ }
90
+ else if (action === "skip") {
91
+ result.skipped.push("teams (local kept)");
92
+ }
93
+ }
94
+ else {
95
+ result.unchanged.push("teams (none in cloud)");
96
+ }
97
+ }
98
+ }
99
+ catch (err) {
100
+ result.errors.push(`teams: ${err.message}`);
101
+ }
102
+ // ── Memory (shared) ──────────────────────────────────
103
+ try {
104
+ const res = await client.get("/v1/memory");
105
+ if (res.status === 200) {
106
+ const content = res.data?.content ?? res.data;
107
+ if (typeof content === "string" && content.trim()) {
108
+ const filePath = path.join(polpoDir, "memory.md");
109
+ const action = await resolveFileConflict(filePath, content, "memory.md (shared)", opts);
110
+ if (action === "write") {
111
+ writeText(filePath, content);
112
+ result.pulled.push("memory (shared)");
113
+ }
114
+ else {
115
+ result.skipped.push("memory (local kept)");
116
+ }
117
+ }
118
+ else {
119
+ result.unchanged.push("memory (empty)");
120
+ }
121
+ }
122
+ }
123
+ catch (err) {
124
+ result.errors.push(`memory: ${err.message}`);
125
+ }
126
+ // ── Memory (per-agent) ──────────────────────────────────
127
+ try {
128
+ const agentsRes = await client.get("/v1/agents");
129
+ const agents = agentsRes.data?.data ?? agentsRes.data ?? [];
130
+ if (Array.isArray(agents)) {
131
+ for (const a of agents) {
132
+ try {
133
+ const memRes = await client.get(`/v1/memory/agent/${encodeURIComponent(a.name)}`);
134
+ if (memRes.status === 200) {
135
+ const content = memRes.data?.content ?? memRes.data;
136
+ if (typeof content === "string" && content.trim()) {
137
+ const filePath = path.join(polpoDir, "memory", `${a.name}.md`);
138
+ const action = await resolveFileConflict(filePath, content, `memory/${a.name}.md`, opts);
139
+ if (action === "write") {
140
+ writeText(filePath, content);
141
+ result.pulled.push(`memory (${a.name})`);
142
+ }
143
+ else {
144
+ result.skipped.push(`memory/${a.name} (local kept)`);
145
+ }
146
+ }
147
+ }
148
+ }
149
+ catch { /* agent has no memory — skip */ }
150
+ }
151
+ }
152
+ }
153
+ catch { /* agents list failed — skip agent memories */ }
154
+ // ── Skills ──────────────────────────────────
155
+ try {
156
+ const res = await client.get("/v1/skills");
157
+ if (res.status === 200) {
158
+ const skills = res.data?.data ?? res.data ?? [];
159
+ if (Array.isArray(skills)) {
160
+ for (const skill of skills) {
161
+ try {
162
+ const contentRes = await client.get(`/v1/skills/${encodeURIComponent(skill.name)}/content`);
163
+ if (contentRes.status === 200) {
164
+ const content = contentRes.data?.content ?? contentRes.data;
165
+ if (typeof content === "string" && content.trim()) {
166
+ const filePath = path.join(polpoDir, "skills", skill.name, "SKILL.md");
167
+ const action = await resolveFileConflict(filePath, content, `skill "${skill.name}"`, opts);
168
+ if (action === "write") {
169
+ writeText(filePath, content);
170
+ result.pulled.push(`skill (${skill.name})`);
171
+ }
172
+ else {
173
+ result.skipped.push(`skill/${skill.name} (local kept)`);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ catch {
179
+ result.errors.push(`skill "${skill.name}": could not fetch content`);
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ catch (err) {
186
+ result.errors.push(`skills: ${err.message}`);
187
+ }
188
+ // ── Missions ──────────────────────────────────
189
+ try {
190
+ const res = await client.get("/v1/missions");
191
+ if (res.status === 200) {
192
+ const missions = res.data?.data ?? res.data ?? [];
193
+ if (Array.isArray(missions) && missions.length > 0) {
194
+ for (const m of missions) {
195
+ const filename = (m.name ?? m.id ?? "mission").replace(/[^a-zA-Z0-9._-]/g, "-");
196
+ const data = {
197
+ name: m.name,
198
+ data: m.data,
199
+ prompt: m.prompt,
200
+ status: m.status,
201
+ schedule: m.schedule,
202
+ deadline: m.deadline,
203
+ };
204
+ const filePath = path.join(polpoDir, "missions", `${filename}.json`);
205
+ const action = await resolveJsonConflict(filePath, data, `mission "${m.name ?? filename}"`, opts);
206
+ if (action === "write") {
207
+ writeJson(filePath, data);
208
+ result.pulled.push(`mission (${m.name ?? filename})`);
209
+ }
210
+ else {
211
+ result.skipped.push(`mission/${filename} (local kept)`);
212
+ }
213
+ }
214
+ }
215
+ else {
216
+ result.unchanged.push("missions (none in cloud)");
217
+ }
218
+ }
219
+ }
220
+ catch (err) {
221
+ result.errors.push(`missions: ${err.message}`);
222
+ }
223
+ // ── Playbooks ──────────────────────────────────
224
+ try {
225
+ const res = await client.get("/v1/playbooks");
226
+ if (res.status === 200) {
227
+ const playbooks = res.data?.data ?? res.data ?? [];
228
+ if (Array.isArray(playbooks) && playbooks.length > 0) {
229
+ for (const pb of playbooks) {
230
+ const dirname = (pb.name ?? "playbook").replace(/[^a-zA-Z0-9._-]/g, "-");
231
+ const data = {
232
+ name: pb.name,
233
+ description: pb.description,
234
+ mission: pb.mission,
235
+ parameters: pb.parameters,
236
+ };
237
+ const filePath = path.join(polpoDir, "playbooks", dirname, "playbook.json");
238
+ const action = await resolveJsonConflict(filePath, data, `playbook "${pb.name ?? dirname}"`, opts);
239
+ if (action === "write") {
240
+ writeJson(filePath, data);
241
+ result.pulled.push(`playbook (${pb.name ?? dirname})`);
242
+ }
243
+ else {
244
+ result.skipped.push(`playbook/${dirname} (local kept)`);
245
+ }
246
+ }
247
+ }
248
+ else {
249
+ result.unchanged.push("playbooks (none in cloud)");
250
+ }
251
+ }
252
+ }
253
+ catch (err) {
254
+ result.errors.push(`playbooks: ${err.message}`);
255
+ }
256
+ // ── Schedules ──────────────────────────────────
257
+ try {
258
+ const res = await client.get("/v1/schedules");
259
+ if (res.status === 200) {
260
+ const schedules = res.data?.data ?? res.data ?? [];
261
+ if (Array.isArray(schedules) && schedules.length > 0) {
262
+ for (const sc of schedules) {
263
+ const filename = (sc.name ?? sc.missionId ?? "schedule").replace(/[^a-zA-Z0-9._-]/g, "-");
264
+ const filePath = path.join(polpoDir, "schedules", `${filename}.json`);
265
+ const action = await resolveJsonConflict(filePath, sc, `schedule "${sc.name ?? filename}"`, opts);
266
+ if (action === "write") {
267
+ writeJson(filePath, sc);
268
+ result.pulled.push(`schedule (${sc.name ?? filename})`);
269
+ }
270
+ else {
271
+ result.skipped.push(`schedule/${filename} (local kept)`);
272
+ }
273
+ }
274
+ }
275
+ else {
276
+ result.unchanged.push("schedules (none in cloud)");
277
+ }
278
+ }
279
+ }
280
+ catch (err) {
281
+ result.errors.push(`schedules: ${err.message}`);
282
+ }
283
+ // Vault is NOT pulled — the API only returns metadata (keys, not values).
284
+ return result;
285
+ }
286
+ //# sourceMappingURL=pull.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/util/pull.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polpo-ai/cli",
3
- "version": "0.6.4",
3
+ "version": "0.6.6",
4
4
  "description": "Command-line client for Polpo — create/link/deploy cloud projects from your terminal.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -18,8 +18,8 @@
18
18
  "@clack/prompts": "^0.9.1",
19
19
  "commander": "^13.1.0",
20
20
  "picocolors": "^1.1.1",
21
- "@polpo-ai/server": "0.6.4",
22
- "@polpo-ai/vault-crypto": "0.6.4"
21
+ "@polpo-ai/server": "0.6.6",
22
+ "@polpo-ai/vault-crypto": "0.6.6"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@types/node": "^22.10.2",