@kalphq/cli 0.0.0-dev-20260513012830 → 0.0.0-dev-20260513014949
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.
- package/dist/{agents-RICTNA5H.js → agents-NN2FLBZM.js} +8 -5
- package/dist/agents-NN2FLBZM.js.map +1 -0
- package/dist/{delete-K5Z552BS.js → delete-LW2G4GCN.js} +8 -14
- package/dist/delete-LW2G4GCN.js.map +1 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/list-5RQZ3JVG.js +159 -0
- package/dist/list-5RQZ3JVG.js.map +1 -0
- package/package.json +4 -4
- package/dist/agents-RICTNA5H.js.map +0 -1
- package/dist/delete-K5Z552BS.js.map +0 -1
- package/dist/list-4HHUQLZ2.js +0 -142
- package/dist/list-4HHUQLZ2.js.map +0 -1
|
@@ -19,22 +19,25 @@ var agents_default = defineCommand({
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
subCommands: {
|
|
22
|
-
list: () => import("./list-
|
|
23
|
-
delete: () => import("./delete-
|
|
22
|
+
list: () => import("./list-5RQZ3JVG.js").then((r) => r.default),
|
|
23
|
+
delete: () => import("./delete-LW2G4GCN.js").then((r) => r.default)
|
|
24
24
|
},
|
|
25
25
|
run({ args }) {
|
|
26
|
+
const subcommand = process.argv[3];
|
|
27
|
+
if (subcommand && subcommand !== "--help" && subcommand !== "-h") {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
26
30
|
p.intro(`${LOGO} ${pc.bold("kalp agents")}`);
|
|
27
31
|
p.log.message(pc.bold("Available subcommands:"));
|
|
28
|
-
p.log.message(` ${pc.cyan("list")}
|
|
32
|
+
p.log.message(` ${pc.cyan("list")} List remote agents`);
|
|
29
33
|
p.log.message(` ${pc.cyan("delete")} Delete an agent from remote runtime`);
|
|
30
34
|
p.log.message("");
|
|
31
35
|
p.log.message(
|
|
32
36
|
`Run ${pc.cyan("kalp agents <subcommand> --help")} for more info.`
|
|
33
37
|
);
|
|
34
|
-
p.outro(args.help ? pc.dim("Done") : pc.dim("Select a subcommand above."));
|
|
35
38
|
}
|
|
36
39
|
});
|
|
37
40
|
export {
|
|
38
41
|
agents_default as default
|
|
39
42
|
};
|
|
40
|
-
//# sourceMappingURL=agents-
|
|
43
|
+
//# sourceMappingURL=agents-NN2FLBZM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/agents/index.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"agents\",\n description: \"Inspect and manage project agents\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n list: () => import(\"./list\").then((r) => r.default),\n delete: () => import(\"./delete\").then((r) => r.default),\n },\n run({ args }) {\n const subcommand = process.argv[3];\n if (subcommand && subcommand !== \"--help\" && subcommand !== \"-h\") {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp agents\")}`);\n p.log.message(pc.bold(\"Available subcommands:\"));\n p.log.message(` ${pc.cyan(\"list\")} List remote agents`);\n p.log.message(` ${pc.cyan(\"delete\")} Delete an agent from remote runtime`);\n p.log.message(\"\");\n p.log.message(\n `Run ${pc.cyan(\"kalp agents <subcommand> --help\")} for more info.`,\n );\n },\n});\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAEf,IAAM,OAAO;AAEb,IAAO,iBAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,MAAM,MAAM,OAAO,oBAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAClD,QAAQ,MAAM,OAAO,sBAAU,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,EACxD;AAAA,EACA,IAAI,EAAE,KAAK,GAAG;AACZ,UAAM,aAAa,QAAQ,KAAK,CAAC;AACjC,QAAI,cAAc,eAAe,YAAY,eAAe,MAAM;AAChE;AAAA,IACF;AAEA,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,aAAa,CAAC,EAAE;AAC3C,IAAE,MAAI,QAAQ,GAAG,KAAK,wBAAwB,CAAC;AAC/C,IAAE,MAAI,QAAQ,KAAK,GAAG,KAAK,MAAM,CAAC,wBAAwB;AAC1D,IAAE,MAAI,QAAQ,KAAK,GAAG,KAAK,QAAQ,CAAC,uCAAuC;AAC3E,IAAE,MAAI,QAAQ,EAAE;AAChB,IAAE,MAAI;AAAA,MACJ,OAAO,GAAG,KAAK,iCAAiC,CAAC;AAAA,IACnD;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -33,7 +33,7 @@ var delete_default = defineCommand({
|
|
|
33
33
|
type: "string",
|
|
34
34
|
alias: "a",
|
|
35
35
|
description: "Agent name to delete from remote runtime",
|
|
36
|
-
required:
|
|
36
|
+
required: true
|
|
37
37
|
},
|
|
38
38
|
yes: {
|
|
39
39
|
type: "boolean",
|
|
@@ -83,17 +83,12 @@ var delete_default = defineCommand({
|
|
|
83
83
|
p.outro("Done");
|
|
84
84
|
return;
|
|
85
85
|
}
|
|
86
|
-
|
|
86
|
+
const agentName = args.agent?.trim();
|
|
87
87
|
if (!agentName) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (p.isCancel(selected)) {
|
|
93
|
-
p.outro("Cancelled");
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
agentName = String(selected);
|
|
88
|
+
p.log.error(
|
|
89
|
+
`Agent name is required. Use ${pc.cyan("kalp agents delete -a <agent>")}.`
|
|
90
|
+
);
|
|
91
|
+
process.exit(1);
|
|
97
92
|
}
|
|
98
93
|
if (!remoteNames.includes(agentName)) {
|
|
99
94
|
p.log.error(`Agent ${pc.cyan(agentName)} is not deployed remotely.`);
|
|
@@ -105,7 +100,7 @@ var delete_default = defineCommand({
|
|
|
105
100
|
initialValue: false
|
|
106
101
|
});
|
|
107
102
|
if (p.isCancel(confirm2) || !confirm2) {
|
|
108
|
-
p.
|
|
103
|
+
p.log.info("Cancelled.");
|
|
109
104
|
return;
|
|
110
105
|
}
|
|
111
106
|
}
|
|
@@ -136,7 +131,6 @@ var delete_default = defineCommand({
|
|
|
136
131
|
`Local files were not changed. Delete ./agents/${agentName} manually if you no longer need it.`
|
|
137
132
|
)
|
|
138
133
|
);
|
|
139
|
-
p.outro("Done");
|
|
140
134
|
} catch (error) {
|
|
141
135
|
spinner2.stop("Failed to delete remote agent");
|
|
142
136
|
p.log.error(error instanceof Error ? error.message : String(error));
|
|
@@ -147,4 +141,4 @@ var delete_default = defineCommand({
|
|
|
147
141
|
export {
|
|
148
142
|
delete_default as default
|
|
149
143
|
};
|
|
150
|
-
//# sourceMappingURL=delete-
|
|
144
|
+
//# sourceMappingURL=delete-LW2G4GCN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/agents/delete.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport {\n readRemoteAgentPointers,\n readRemoteAgentsIndex,\n writeRemoteAgentsIndex,\n} from \"@/utils/agents-remote\";\nimport { readProjectState, writeProjectState } from \"@/utils/project-state\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete an agent from remote runtime\",\n },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name to delete from remote runtime\",\n required: true,\n },\n yes: {\n type: \"boolean\",\n alias: \"y\",\n description: \"Skip confirmation\",\n default: false,\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n async run({ args }) {\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp agents delete -a <agent>`);\n return;\n }\n\n const cwd = process.cwd();\n p.intro(`${LOGO} ${pc.bold(\"kalp agents delete\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const spinner = p.spinner();\n spinner.start(\"Loading remote agents\");\n\n try {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n const provider = resolveProvider();\n const [indexEntries, pointers] = await Promise.all([\n readRemoteAgentsIndex(cwd, configPath),\n readRemoteAgentPointers(cwd, configPath),\n ]);\n\n const indexByName = new Map(\n indexEntries.map((entry) => [entry.name, entry]),\n );\n const pointerByName = new Map(\n pointers.map((entry) => [entry.name, entry.hash]),\n );\n const remoteNames = [...new Set([...indexByName.keys(), ...pointerByName.keys()])].sort(\n (a, b) => a.localeCompare(b),\n );\n\n spinner.stop(`Found ${remoteNames.length} remote agents`);\n if (remoteNames.length === 0) {\n p.log.info(pc.dim(\"No remote agents available to delete.\"));\n p.outro(\"Done\");\n return;\n }\n\n const agentName = args.agent?.trim();\n if (!agentName) {\n p.log.error(\n `Agent name is required. Use ${pc.cyan(\"kalp agents delete -a <agent>\")}.`,\n );\n process.exit(1);\n }\n\n if (!remoteNames.includes(agentName)) {\n p.log.error(`Agent ${pc.cyan(agentName)} is not deployed remotely.`);\n process.exit(1);\n }\n\n if (!args.yes) {\n const confirm = await p.confirm({\n message: `Delete ${pc.cyan(agentName)} from remote runtime?`,\n initialValue: false,\n });\n if (p.isCancel(confirm) || !confirm) {\n p.log.info(\"Cancelled.\");\n return;\n }\n }\n\n const hashes = new Set<string>();\n const pointerHash = pointerByName.get(agentName);\n if (pointerHash) hashes.add(pointerHash);\n const indexedHash = indexByName.get(agentName)?.hash;\n if (indexedHash) hashes.add(indexedHash);\n\n spinner.start(`Deleting ${pc.cyan(agentName)} from remote runtime`);\n const latestKey = `${agentName}:latest`;\n await provider\n .deleteValue({ cwd, configPath, key: latestKey })\n .catch(() => null);\n for (const hash of hashes) {\n await provider\n .deleteValue({ cwd, configPath, key: `${agentName}:${hash}` })\n .catch(() => null);\n }\n\n const filteredIndex = indexEntries.filter(\n (entry) => entry.name !== agentName,\n );\n await writeRemoteAgentsIndex(cwd, configPath, filteredIndex);\n\n const state = await readProjectState(cwd);\n if (state?.agents?.[agentName]) {\n state.agents[agentName].lastRemoteHash = null;\n state.agents[agentName].workerUrl = null;\n await writeProjectState(cwd, state);\n }\n\n spinner.stop(`Deleted remote agent ${pc.cyan(agentName)}`);\n p.log.info(\n pc.dim(\n `Local files were not changed. Delete ./agents/${agentName} manually if you no longer need it.`,\n ),\n );\n } catch (error) {\n spinner.stop(\"Failed to delete remote agent\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":["spinner","confirm"]}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import pc from "picocolors";
|
|
|
8
8
|
// package.json
|
|
9
9
|
var package_default = {
|
|
10
10
|
name: "@kalphq/cli",
|
|
11
|
-
version: "0.0.0-dev-
|
|
11
|
+
version: "0.0.0-dev-20260513014949",
|
|
12
12
|
description: "Zero-config CLI for deploying Kalp agents",
|
|
13
13
|
type: "module",
|
|
14
14
|
license: "MIT",
|
|
@@ -95,7 +95,7 @@ var main = defineCommand({
|
|
|
95
95
|
create: () => import("./create-XC55BUCS.js").then((r) => r.default),
|
|
96
96
|
deploy: () => import("./deploy-2JMOUTWG.js").then((r) => r.default),
|
|
97
97
|
push: () => import("./push-WHPQXAY7.js").then((r) => r.default),
|
|
98
|
-
agents: () => import("./agents-
|
|
98
|
+
agents: () => import("./agents-NN2FLBZM.js").then((r) => r.default),
|
|
99
99
|
secrets: () => import("./secrets-Z53FLH56.js").then((r) => r.default),
|
|
100
100
|
login: () => import("./login-MGPA2VYV.js").then((r) => r.default),
|
|
101
101
|
logout: () => import("./logout-U5V5K775.js").then((r) => r.default),
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../package.json"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport pkg from \"../package.json\";\n\nconst LOGO = \"🦋\";\n\nconst COMMANDS = [\n [\"create\", \"Add a new agent\"],\n [\"deploy\", \"Deploy your agents runtime\"],\n [\"push\", \"Upload updated agents\"],\n [\"agents\", \"List and manage agents\"],\n [\"secrets\", \"Manage secrets\"],\n [\"login\", \"Sign in to remote runtime\"],\n [\"logout\", \"Sign out from Kalp\"],\n [\"dev\", \"Run Worker + Studio locally\"],\n] as const;\n\nfunction printHelp(): void {\n p.log.info(`${pc.bold(\"Usage\")}: kalp <command> [options]`);\n console.log(\"\");\n p.log.info(pc.bold(\"Commands\"));\n\n for (const [name, desc] of COMMANDS) {\n console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);\n }\n\n console.log(\"\");\n p.log.info(`Run ${pc.cyan(\"kalp <command> --help\")} for more info.`);\n}\n\nconst main = defineCommand({\n meta: {\n name: \"kalp\",\n version: pkg.version,\n description: \"🦋 Zero-config agent infrastructure\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n create: () => import(\"./commands/create\").then((r) => r.default),\n deploy: () => import(\"./commands/deploy\").then((r) => r.default),\n push: () => import(\"./commands/push\").then((r) => r.default),\n agents: () => import(\"./commands/agents\").then((r) => r.default),\n secrets: () => import(\"./commands/secrets\").then((r) => r.default),\n login: () => import(\"./commands/login\").then((r) => r.default),\n logout: () => import(\"./commands/logout\").then((r) => r.default),\n dev: () => import(\"./commands/dev\").then((r) => r.default),\n },\n run({ args }) {\n const firstArg = process.argv[2];\n\n if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n return;\n }\n\n if (firstArg) {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n },\n});\n\nrunMain(main);\n","{\n \"name\": \"@kalphq/cli\",\n \"version\": \"0.0.0-dev-
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../package.json"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport pkg from \"../package.json\";\n\nconst LOGO = \"🦋\";\n\nconst COMMANDS = [\n [\"create\", \"Add a new agent\"],\n [\"deploy\", \"Deploy your agents runtime\"],\n [\"push\", \"Upload updated agents\"],\n [\"agents\", \"List and manage agents\"],\n [\"secrets\", \"Manage secrets\"],\n [\"login\", \"Sign in to remote runtime\"],\n [\"logout\", \"Sign out from Kalp\"],\n [\"dev\", \"Run Worker + Studio locally\"],\n] as const;\n\nfunction printHelp(): void {\n p.log.info(`${pc.bold(\"Usage\")}: kalp <command> [options]`);\n console.log(\"\");\n p.log.info(pc.bold(\"Commands\"));\n\n for (const [name, desc] of COMMANDS) {\n console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);\n }\n\n console.log(\"\");\n p.log.info(`Run ${pc.cyan(\"kalp <command> --help\")} for more info.`);\n}\n\nconst main = defineCommand({\n meta: {\n name: \"kalp\",\n version: pkg.version,\n description: \"🦋 Zero-config agent infrastructure\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n create: () => import(\"./commands/create\").then((r) => r.default),\n deploy: () => import(\"./commands/deploy\").then((r) => r.default),\n push: () => import(\"./commands/push\").then((r) => r.default),\n agents: () => import(\"./commands/agents\").then((r) => r.default),\n secrets: () => import(\"./commands/secrets\").then((r) => r.default),\n login: () => import(\"./commands/login\").then((r) => r.default),\n logout: () => import(\"./commands/logout\").then((r) => r.default),\n dev: () => import(\"./commands/dev\").then((r) => r.default),\n },\n run({ args }) {\n const firstArg = process.argv[2];\n\n if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n return;\n }\n\n if (firstArg) {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n },\n});\n\nrunMain(main);\n","{\n \"name\": \"@kalphq/cli\",\n \"version\": \"0.0.0-dev-20260513014949\",\n \"description\": \"Zero-config CLI for deploying Kalp agents\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"author\": \"Kalp HQ\",\n \"bin\": {\n \"kalp\": \"./dist/index.js\"\n },\n \"main\": \"./dist/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup && pnpm run build:studio && pnpm run build:runtime-template\",\n \"build:studio\": \"pnpm --filter=@kalphq/studio build\",\n \"build:runtime-template\": \"node ./scripts/prepare-runtime-template.mjs\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"24.4.0\",\n \"@clack/prompts\": \"0.9.1\",\n \"@kalphq/compiler\": \"workspace:*\",\n \"@kalphq/project\": \"workspace:*\",\n \"@kalphq/sdk\": \"workspace:*\",\n \"citty\": \"0.1.6\",\n \"esbuild\": \"0.25.0\",\n \"execa\": \"^9.6.1\",\n \"jiti\": \"^2.6.1\",\n \"jose\": \"^5.10.0\",\n \"json-stable-stringify\": \"1.3.0\",\n \"open\": \"^11.0.0\",\n \"picocolors\": \"1.1.1\",\n \"zod\": \"3.25.76\"\n },\n \"devDependencies\": {\n \"@types/json-stable-stringify\": \"1.2.0\",\n \"@types/node\": \"^22.15.3\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.0.0\"\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
readRemoteAgentsIndex
|
|
4
|
+
} from "./chunk-5SZMD7E6.js";
|
|
5
|
+
import {
|
|
6
|
+
resolveSecretsRuntimeConfigPath
|
|
7
|
+
} from "./chunk-FP3ZLBYT.js";
|
|
8
|
+
import "./chunk-INB3LG6O.js";
|
|
9
|
+
import {
|
|
10
|
+
requireAuth
|
|
11
|
+
} from "./chunk-S3KAVLVM.js";
|
|
12
|
+
import "./chunk-FO24J6XL.js";
|
|
13
|
+
import "./chunk-DHCCSWJN.js";
|
|
14
|
+
|
|
15
|
+
// src/commands/agents/list.ts
|
|
16
|
+
import { access, mkdir, readFile, writeFile } from "fs/promises";
|
|
17
|
+
import { dirname, join } from "path";
|
|
18
|
+
import { defineCommand } from "citty";
|
|
19
|
+
import * as p from "@clack/prompts";
|
|
20
|
+
import pc from "picocolors";
|
|
21
|
+
var LOGO = "\u{1F98B}";
|
|
22
|
+
var CACHE_TTL_MS = 2e4;
|
|
23
|
+
function pad(value, width) {
|
|
24
|
+
return value.length >= width ? value : `${value}${" ".repeat(width - value.length)}`;
|
|
25
|
+
}
|
|
26
|
+
function renderTable(rows) {
|
|
27
|
+
const headers = {
|
|
28
|
+
name: "Agent",
|
|
29
|
+
version: "Version",
|
|
30
|
+
updated: "Updated",
|
|
31
|
+
status: "Status"
|
|
32
|
+
};
|
|
33
|
+
const widths = {
|
|
34
|
+
name: Math.max(headers.name.length, ...rows.map((r) => r.name.length), 5),
|
|
35
|
+
version: Math.max(
|
|
36
|
+
headers.version.length,
|
|
37
|
+
...rows.map((r) => (r.version ?? "\u2014").length),
|
|
38
|
+
7
|
|
39
|
+
),
|
|
40
|
+
updated: Math.max(
|
|
41
|
+
headers.updated.length,
|
|
42
|
+
...rows.map((r) => (r.updatedAt || "\u2014").length),
|
|
43
|
+
7
|
|
44
|
+
),
|
|
45
|
+
status: headers.status.length
|
|
46
|
+
};
|
|
47
|
+
const divider = ` ${"-".repeat(widths.name)} ${"-".repeat(widths.version)} ${"-".repeat(widths.updated)} ${"-".repeat(widths.status)}`;
|
|
48
|
+
console.log(
|
|
49
|
+
` ${pc.bold(pad(headers.name, widths.name))} ${pc.bold(pad(headers.version, widths.version))} ${pc.bold(pad(headers.updated, widths.updated))} ${pc.bold(pad(headers.status, widths.status))}`
|
|
50
|
+
);
|
|
51
|
+
console.log(pc.dim(divider));
|
|
52
|
+
for (const row of rows) {
|
|
53
|
+
const version = row.version ?? "\u2014";
|
|
54
|
+
const updated = row.updatedAt || "\u2014";
|
|
55
|
+
const statusText = "online";
|
|
56
|
+
const status = `${pc.green(statusText)}${" ".repeat(Math.max(0, widths.status - statusText.length))}`;
|
|
57
|
+
console.log(
|
|
58
|
+
` ${pad(row.name, widths.name)} ${pad(version, widths.version)} ${pad(updated, widths.updated)} ${status}`
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function getCachePath(cwd) {
|
|
63
|
+
return join(cwd, ".kalp", "cache", "agents-list-remote.json");
|
|
64
|
+
}
|
|
65
|
+
async function readCache(cwd) {
|
|
66
|
+
const cachePath = getCachePath(cwd);
|
|
67
|
+
try {
|
|
68
|
+
await access(cachePath);
|
|
69
|
+
} catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
const raw = await readFile(cachePath, "utf-8").catch(() => null);
|
|
73
|
+
if (!raw) return null;
|
|
74
|
+
try {
|
|
75
|
+
const parsed = JSON.parse(raw);
|
|
76
|
+
if (!parsed || !Array.isArray(parsed.entries) || !parsed.cachedAt) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return parsed;
|
|
80
|
+
} catch {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async function writeCache(cwd, entries) {
|
|
85
|
+
const cachePath = getCachePath(cwd);
|
|
86
|
+
await mkdir(dirname(cachePath), { recursive: true });
|
|
87
|
+
const payload = {
|
|
88
|
+
cachedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
89
|
+
entries
|
|
90
|
+
};
|
|
91
|
+
await writeFile(cachePath, JSON.stringify(payload, null, 2), "utf-8");
|
|
92
|
+
}
|
|
93
|
+
function isFresh(cache) {
|
|
94
|
+
const cachedAt = Date.parse(cache.cachedAt);
|
|
95
|
+
if (!Number.isFinite(cachedAt)) return false;
|
|
96
|
+
return Date.now() - cachedAt <= CACHE_TTL_MS;
|
|
97
|
+
}
|
|
98
|
+
var list_default = defineCommand({
|
|
99
|
+
meta: {
|
|
100
|
+
name: "list",
|
|
101
|
+
description: "List remote agents"
|
|
102
|
+
},
|
|
103
|
+
args: {
|
|
104
|
+
refresh: {
|
|
105
|
+
type: "boolean",
|
|
106
|
+
description: "Force refresh remote data (skip cache)",
|
|
107
|
+
default: false
|
|
108
|
+
},
|
|
109
|
+
help: {
|
|
110
|
+
type: "boolean",
|
|
111
|
+
alias: "h",
|
|
112
|
+
default: false,
|
|
113
|
+
description: "Show help"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
async run({ args }) {
|
|
117
|
+
if (args.help) {
|
|
118
|
+
p.log.info(`${pc.bold("Usage")}: kalp agents list [--refresh]`);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
const cwd = process.cwd();
|
|
122
|
+
p.intro(`${LOGO} ${pc.bold("kalp agents list")}`);
|
|
123
|
+
await requireAuth().catch(() => {
|
|
124
|
+
p.log.error("Not authenticated. Run `kalp login` first.");
|
|
125
|
+
process.exit(1);
|
|
126
|
+
});
|
|
127
|
+
const spinner2 = p.spinner();
|
|
128
|
+
spinner2.start("Loading remote agents");
|
|
129
|
+
try {
|
|
130
|
+
const cache = args.refresh ? null : await readCache(cwd);
|
|
131
|
+
let entries;
|
|
132
|
+
if (cache && isFresh(cache)) {
|
|
133
|
+
entries = cache.entries;
|
|
134
|
+
spinner2.stop(
|
|
135
|
+
`Loaded ${entries.length} agents ${pc.dim("(cached, remote)")}`
|
|
136
|
+
);
|
|
137
|
+
} else {
|
|
138
|
+
const configPath = await resolveSecretsRuntimeConfigPath(cwd);
|
|
139
|
+
entries = await readRemoteAgentsIndex(cwd, configPath);
|
|
140
|
+
await writeCache(cwd, entries).catch(() => null);
|
|
141
|
+
spinner2.stop(`Loaded ${entries.length} agents from remote runtime`);
|
|
142
|
+
}
|
|
143
|
+
const rows = [...entries].sort((a, b) => a.name.localeCompare(b.name));
|
|
144
|
+
if (rows.length === 0) {
|
|
145
|
+
p.log.info(pc.dim("No remote agents found."));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
renderTable(rows);
|
|
149
|
+
} catch (error) {
|
|
150
|
+
spinner2.stop("Failed to load remote agents");
|
|
151
|
+
p.log.error(error instanceof Error ? error.message : String(error));
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
export {
|
|
157
|
+
list_default as default
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=list-5RQZ3JVG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/agents/list.ts"],"sourcesContent":["import { access, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport {\n type RemoteAgentIndexEntry,\n readRemoteAgentsIndex,\n} from \"@/utils/agents-remote\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\nconst CACHE_TTL_MS = 20_000;\n\ninterface RemoteAgentListCache {\n cachedAt: string;\n entries: RemoteAgentIndexEntry[];\n}\n\nfunction pad(value: string, width: number): string {\n return value.length >= width\n ? value\n : `${value}${\" \".repeat(width - value.length)}`;\n}\n\nfunction renderTable(rows: RemoteAgentIndexEntry[]): void {\n const headers = {\n name: \"Agent\",\n version: \"Version\",\n updated: \"Updated\",\n status: \"Status\",\n };\n\n const widths = {\n name: Math.max(headers.name.length, ...rows.map((r) => r.name.length), 5),\n version: Math.max(\n headers.version.length,\n ...rows.map((r) => (r.version ?? \"—\").length),\n 7,\n ),\n updated: Math.max(\n headers.updated.length,\n ...rows.map((r) => (r.updatedAt || \"—\").length),\n 7,\n ),\n status: headers.status.length,\n };\n\n const divider = ` ${\"-\".repeat(widths.name)} ${\"-\".repeat(widths.version)} ${\"-\".repeat(widths.updated)} ${\"-\".repeat(widths.status)}`;\n console.log(\n ` ${pc.bold(pad(headers.name, widths.name))} ${pc.bold(pad(headers.version, widths.version))} ${pc.bold(pad(headers.updated, widths.updated))} ${pc.bold(pad(headers.status, widths.status))}`,\n );\n console.log(pc.dim(divider));\n\n for (const row of rows) {\n const version = row.version ?? \"—\";\n const updated = row.updatedAt || \"—\";\n const statusText = \"online\";\n const status = `${pc.green(statusText)}${\" \".repeat(Math.max(0, widths.status - statusText.length))}`;\n console.log(\n ` ${pad(row.name, widths.name)} ${pad(version, widths.version)} ${pad(updated, widths.updated)} ${status}`,\n );\n }\n}\n\nfunction getCachePath(cwd: string): string {\n return join(cwd, \".kalp\", \"cache\", \"agents-list-remote.json\");\n}\n\nasync function readCache(cwd: string): Promise<RemoteAgentListCache | null> {\n const cachePath = getCachePath(cwd);\n try {\n await access(cachePath);\n } catch {\n return null;\n }\n\n const raw = await readFile(cachePath, \"utf-8\").catch(() => null);\n if (!raw) return null;\n\n try {\n const parsed = JSON.parse(raw) as RemoteAgentListCache;\n if (!parsed || !Array.isArray(parsed.entries) || !parsed.cachedAt) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nasync function writeCache(\n cwd: string,\n entries: RemoteAgentIndexEntry[],\n): Promise<void> {\n const cachePath = getCachePath(cwd);\n await mkdir(dirname(cachePath), { recursive: true });\n const payload: RemoteAgentListCache = {\n cachedAt: new Date().toISOString(),\n entries,\n };\n await writeFile(cachePath, JSON.stringify(payload, null, 2), \"utf-8\");\n}\n\nfunction isFresh(cache: RemoteAgentListCache): boolean {\n const cachedAt = Date.parse(cache.cachedAt);\n if (!Number.isFinite(cachedAt)) return false;\n return Date.now() - cachedAt <= CACHE_TTL_MS;\n}\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List remote agents\",\n },\n args: {\n refresh: {\n type: \"boolean\",\n description: \"Force refresh remote data (skip cache)\",\n default: false,\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n default: false,\n description: \"Show help\",\n },\n },\n async run({ args }) {\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp agents list [--refresh]`);\n return;\n }\n\n const cwd = process.cwd();\n p.intro(`${LOGO} ${pc.bold(\"kalp agents list\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const spinner = p.spinner();\n spinner.start(\"Loading remote agents\");\n\n try {\n const cache = args.refresh ? null : await readCache(cwd);\n let entries: RemoteAgentIndexEntry[];\n\n if (cache && isFresh(cache)) {\n entries = cache.entries;\n spinner.stop(\n `Loaded ${entries.length} agents ${pc.dim(\"(cached, remote)\")}`,\n );\n } else {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n entries = await readRemoteAgentsIndex(cwd, configPath);\n await writeCache(cwd, entries).catch(() => null);\n spinner.stop(`Loaded ${entries.length} agents from remote runtime`);\n }\n\n const rows = [...entries].sort((a, b) => a.name.localeCompare(b.name));\n if (rows.length === 0) {\n p.log.info(pc.dim(\"No remote agents found.\"));\n return;\n }\n\n renderTable(rows);\n } catch (error) {\n spinner.stop(\"Failed to load remote agents\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":["spinner"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kalphq/cli",
|
|
3
|
-
"version": "0.0.0-dev-
|
|
3
|
+
"version": "0.0.0-dev-20260513014949",
|
|
4
4
|
"description": "Zero-config CLI for deploying Kalp agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,9 +27,9 @@
|
|
|
27
27
|
"open": "^11.0.0",
|
|
28
28
|
"picocolors": "1.1.1",
|
|
29
29
|
"zod": "3.25.76",
|
|
30
|
-
"@kalphq/
|
|
31
|
-
"@kalphq/project": "0.0.0-dev-
|
|
32
|
-
"@kalphq/
|
|
30
|
+
"@kalphq/compiler": "0.0.0-dev-20260513014949",
|
|
31
|
+
"@kalphq/project": "0.0.0-dev-20260513014949",
|
|
32
|
+
"@kalphq/sdk": "0.0.0-dev-20260513014949"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/json-stable-stringify": "1.2.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/agents/index.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"agents\",\n description: \"Inspect and manage project agents\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n list: () => import(\"./list\").then((r) => r.default),\n delete: () => import(\"./delete\").then((r) => r.default),\n },\n run({ args }) {\n p.intro(`${LOGO} ${pc.bold(\"kalp agents\")}`);\n p.log.message(pc.bold(\"Available subcommands:\"));\n p.log.message(` ${pc.cyan(\"list\")} Compare local and remote agent status`);\n p.log.message(` ${pc.cyan(\"delete\")} Delete an agent from remote runtime`);\n p.log.message(\"\");\n p.log.message(\n `Run ${pc.cyan(\"kalp agents <subcommand> --help\")} for more info.`,\n );\n p.outro(args.help ? pc.dim(\"Done\") : pc.dim(\"Select a subcommand above.\"));\n },\n});\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAEf,IAAM,OAAO;AAEb,IAAO,iBAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,MAAM,MAAM,OAAO,oBAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAClD,QAAQ,MAAM,OAAO,sBAAU,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,EACxD;AAAA,EACA,IAAI,EAAE,KAAK,GAAG;AACZ,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,aAAa,CAAC,EAAE;AAC3C,IAAE,MAAI,QAAQ,GAAG,KAAK,wBAAwB,CAAC;AAC/C,IAAE,MAAI,QAAQ,KAAK,GAAG,KAAK,MAAM,CAAC,2CAA2C;AAC7E,IAAE,MAAI,QAAQ,KAAK,GAAG,KAAK,QAAQ,CAAC,uCAAuC;AAC3E,IAAE,MAAI,QAAQ,EAAE;AAChB,IAAE,MAAI;AAAA,MACJ,OAAO,GAAG,KAAK,iCAAiC,CAAC;AAAA,IACnD;AACA,IAAE,QAAM,KAAK,OAAO,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,4BAA4B,CAAC;AAAA,EAC3E;AACF,CAAC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/agents/delete.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport {\n readRemoteAgentPointers,\n readRemoteAgentsIndex,\n writeRemoteAgentsIndex,\n} from \"@/utils/agents-remote\";\nimport { readProjectState, writeProjectState } from \"@/utils/project-state\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete an agent from remote runtime\",\n },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name to delete from remote runtime\",\n required: false,\n },\n yes: {\n type: \"boolean\",\n alias: \"y\",\n description: \"Skip confirmation\",\n default: false,\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n async run({ args }) {\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp agents delete -a <agent>`);\n return;\n }\n\n const cwd = process.cwd();\n p.intro(`${LOGO} ${pc.bold(\"kalp agents delete\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const spinner = p.spinner();\n spinner.start(\"Loading remote agents\");\n\n try {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n const provider = resolveProvider();\n const [indexEntries, pointers] = await Promise.all([\n readRemoteAgentsIndex(cwd, configPath),\n readRemoteAgentPointers(cwd, configPath),\n ]);\n\n const indexByName = new Map(\n indexEntries.map((entry) => [entry.name, entry]),\n );\n const pointerByName = new Map(\n pointers.map((entry) => [entry.name, entry.hash]),\n );\n const remoteNames = [...new Set([...indexByName.keys(), ...pointerByName.keys()])].sort(\n (a, b) => a.localeCompare(b),\n );\n\n spinner.stop(`Found ${remoteNames.length} remote agents`);\n if (remoteNames.length === 0) {\n p.log.info(pc.dim(\"No remote agents available to delete.\"));\n p.outro(\"Done\");\n return;\n }\n\n let agentName = args.agent?.trim();\n if (!agentName) {\n const selected = await p.select({\n message: \"Select remote agent to delete\",\n options: remoteNames.map((name) => ({ value: name, label: name })),\n });\n if (p.isCancel(selected)) {\n p.outro(\"Cancelled\");\n return;\n }\n agentName = String(selected);\n }\n\n if (!remoteNames.includes(agentName)) {\n p.log.error(`Agent ${pc.cyan(agentName)} is not deployed remotely.`);\n process.exit(1);\n }\n\n if (!args.yes) {\n const confirm = await p.confirm({\n message: `Delete ${pc.cyan(agentName)} from remote runtime?`,\n initialValue: false,\n });\n if (p.isCancel(confirm) || !confirm) {\n p.outro(\"Cancelled\");\n return;\n }\n }\n\n const hashes = new Set<string>();\n const pointerHash = pointerByName.get(agentName);\n if (pointerHash) hashes.add(pointerHash);\n const indexedHash = indexByName.get(agentName)?.hash;\n if (indexedHash) hashes.add(indexedHash);\n\n spinner.start(`Deleting ${pc.cyan(agentName)} from remote runtime`);\n const latestKey = `${agentName}:latest`;\n await provider\n .deleteValue({ cwd, configPath, key: latestKey })\n .catch(() => null);\n for (const hash of hashes) {\n await provider\n .deleteValue({ cwd, configPath, key: `${agentName}:${hash}` })\n .catch(() => null);\n }\n\n const filteredIndex = indexEntries.filter(\n (entry) => entry.name !== agentName,\n );\n await writeRemoteAgentsIndex(cwd, configPath, filteredIndex);\n\n const state = await readProjectState(cwd);\n if (state?.agents?.[agentName]) {\n state.agents[agentName].lastRemoteHash = null;\n state.agents[agentName].workerUrl = null;\n await writeProjectState(cwd, state);\n }\n\n spinner.stop(`Deleted remote agent ${pc.cyan(agentName)}`);\n p.log.info(\n pc.dim(\n `Local files were not changed. Delete ./agents/${agentName} manually if you no longer need it.`,\n ),\n );\n p.outro(\"Done\");\n } catch (error) {\n spinner.stop(\"Failed to delete remote agent\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":["spinner","confirm"]}
|
package/dist/list-4HHUQLZ2.js
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
readRemoteAgentPointers,
|
|
4
|
-
readRemoteAgentsIndex
|
|
5
|
-
} from "./chunk-5SZMD7E6.js";
|
|
6
|
-
import {
|
|
7
|
-
resolveSecretsRuntimeConfigPath
|
|
8
|
-
} from "./chunk-FP3ZLBYT.js";
|
|
9
|
-
import "./chunk-INB3LG6O.js";
|
|
10
|
-
import {
|
|
11
|
-
requireAuth
|
|
12
|
-
} from "./chunk-S3KAVLVM.js";
|
|
13
|
-
import "./chunk-FO24J6XL.js";
|
|
14
|
-
import {
|
|
15
|
-
readLocalAgentNames,
|
|
16
|
-
readProjectState
|
|
17
|
-
} from "./chunk-DHCCSWJN.js";
|
|
18
|
-
|
|
19
|
-
// src/commands/agents/list.ts
|
|
20
|
-
import { defineCommand } from "citty";
|
|
21
|
-
import * as p from "@clack/prompts";
|
|
22
|
-
import pc from "picocolors";
|
|
23
|
-
var LOGO = "\u{1F98B}";
|
|
24
|
-
function pad(value, width) {
|
|
25
|
-
return value.length >= width ? value : `${value}${" ".repeat(width - value.length)}`;
|
|
26
|
-
}
|
|
27
|
-
function renderTable(rows) {
|
|
28
|
-
const headers = {
|
|
29
|
-
name: "Agent",
|
|
30
|
-
local: "Local",
|
|
31
|
-
remote: "Remote",
|
|
32
|
-
version: "Remote Version",
|
|
33
|
-
updated: "Updated"
|
|
34
|
-
};
|
|
35
|
-
const widths = {
|
|
36
|
-
name: Math.max(headers.name.length, ...rows.map((r) => r.name.length), 5),
|
|
37
|
-
local: headers.local.length,
|
|
38
|
-
remote: headers.remote.length,
|
|
39
|
-
version: Math.max(
|
|
40
|
-
headers.version.length,
|
|
41
|
-
...rows.map((r) => r.remoteVersion.length),
|
|
42
|
-
14
|
|
43
|
-
),
|
|
44
|
-
updated: Math.max(headers.updated.length, ...rows.map((r) => r.updatedAt.length), 7)
|
|
45
|
-
};
|
|
46
|
-
const divider = ` ${"-".repeat(widths.name)} ${"-".repeat(widths.local)} ${"-".repeat(widths.remote)} ${"-".repeat(widths.version)} ${"-".repeat(widths.updated)}`;
|
|
47
|
-
console.log(
|
|
48
|
-
` ${pc.bold(pad(headers.name, widths.name))} ${pc.bold(pad(headers.local, widths.local))} ${pc.bold(pad(headers.remote, widths.remote))} ${pc.bold(pad(headers.version, widths.version))} ${pc.bold(pad(headers.updated, widths.updated))}`
|
|
49
|
-
);
|
|
50
|
-
console.log(pc.dim(divider));
|
|
51
|
-
for (const row of rows) {
|
|
52
|
-
const localText = row.localStatus === "yes" ? "yes" : "no";
|
|
53
|
-
const remoteText = row.remoteStatus === "online" ? "online" : "offline";
|
|
54
|
-
const local = row.localStatus === "yes" ? pc.green(localText) : pc.dim(localText);
|
|
55
|
-
const remote = row.remoteStatus === "online" ? pc.green(remoteText) : pc.dim(remoteText);
|
|
56
|
-
const localCell = `${local}${" ".repeat(Math.max(0, widths.local - localText.length))}`;
|
|
57
|
-
const remoteCell = `${remote}${" ".repeat(Math.max(0, widths.remote - remoteText.length))}`;
|
|
58
|
-
console.log(
|
|
59
|
-
` ${pad(row.name, widths.name)} ${localCell} ${remoteCell} ${pad(row.remoteVersion, widths.version)} ${pad(row.updatedAt, widths.updated)}`
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
var list_default = defineCommand({
|
|
64
|
-
meta: {
|
|
65
|
-
name: "list",
|
|
66
|
-
description: "List local agents and compare with remote runtime"
|
|
67
|
-
},
|
|
68
|
-
args: {
|
|
69
|
-
help: {
|
|
70
|
-
type: "boolean",
|
|
71
|
-
alias: "h",
|
|
72
|
-
default: false,
|
|
73
|
-
description: "Show help"
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
async run({ args }) {
|
|
77
|
-
if (args.help) {
|
|
78
|
-
p.log.info(`${pc.bold("Usage")}: kalp agents list`);
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
const cwd = process.cwd();
|
|
82
|
-
p.intro(`${LOGO} ${pc.bold("kalp agents list")}`);
|
|
83
|
-
await requireAuth().catch(() => {
|
|
84
|
-
p.log.error("Not authenticated. Run `kalp login` first.");
|
|
85
|
-
process.exit(1);
|
|
86
|
-
});
|
|
87
|
-
const spinner2 = p.spinner();
|
|
88
|
-
spinner2.start("Loading local and remote agent status");
|
|
89
|
-
try {
|
|
90
|
-
const configPath = await resolveSecretsRuntimeConfigPath(cwd);
|
|
91
|
-
const [localNames, state, indexEntries, remotePointers] = await Promise.all([
|
|
92
|
-
readLocalAgentNames(cwd),
|
|
93
|
-
readProjectState(cwd),
|
|
94
|
-
readRemoteAgentsIndex(cwd, configPath),
|
|
95
|
-
readRemoteAgentPointers(cwd, configPath)
|
|
96
|
-
]);
|
|
97
|
-
const localSet = new Set(localNames);
|
|
98
|
-
const remoteIndexByName = new Map(
|
|
99
|
-
indexEntries.map((entry) => [entry.name, entry])
|
|
100
|
-
);
|
|
101
|
-
const remotePointerByName = new Map(
|
|
102
|
-
remotePointers.map((entry) => [entry.name, entry.hash])
|
|
103
|
-
);
|
|
104
|
-
const names = [
|
|
105
|
-
.../* @__PURE__ */ new Set([
|
|
106
|
-
...localNames,
|
|
107
|
-
...remotePointerByName.keys(),
|
|
108
|
-
...remoteIndexByName.keys()
|
|
109
|
-
])
|
|
110
|
-
].sort((a, b) => a.localeCompare(b));
|
|
111
|
-
const rows = names.map((name) => {
|
|
112
|
-
const index = remoteIndexByName.get(name);
|
|
113
|
-
const remoteExists = remotePointerByName.has(name) || !!index;
|
|
114
|
-
const stateAgent = state?.agents?.[name];
|
|
115
|
-
const remoteVersion = index?.version ?? (typeof index?.versionNumber === "number" && index.versionNumber > 0 ? `v${index.versionNumber}` : stateAgent?.lastRemoteHash ? `v${stateAgent.currentVersion}` : "\u2014");
|
|
116
|
-
return {
|
|
117
|
-
name,
|
|
118
|
-
localStatus: localSet.has(name) ? "yes" : "no",
|
|
119
|
-
remoteStatus: remoteExists ? "online" : "offline",
|
|
120
|
-
remoteVersion,
|
|
121
|
-
updatedAt: index?.updatedAt ?? stateAgent?.lastPushedAt ?? "\u2014"
|
|
122
|
-
};
|
|
123
|
-
});
|
|
124
|
-
spinner2.stop(`Found ${rows.length} agents`);
|
|
125
|
-
if (rows.length === 0) {
|
|
126
|
-
p.log.info(pc.dim("No agents found locally or remotely."));
|
|
127
|
-
p.outro("Done");
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
renderTable(rows);
|
|
131
|
-
p.outro("Done");
|
|
132
|
-
} catch (error) {
|
|
133
|
-
spinner2.stop("Failed to load agent status");
|
|
134
|
-
p.log.error(error instanceof Error ? error.message : String(error));
|
|
135
|
-
process.exit(1);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
export {
|
|
140
|
-
list_default as default
|
|
141
|
-
};
|
|
142
|
-
//# sourceMappingURL=list-4HHUQLZ2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/agents/list.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport {\n readRemoteAgentPointers,\n readRemoteAgentsIndex,\n} from \"@/utils/agents-remote\";\nimport { readProjectState } from \"@/utils/project-state\";\nimport { readLocalAgentNames } from \"@/utils/runtime\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\ninterface AgentViewRow {\n name: string;\n localStatus: \"yes\" | \"no\";\n remoteStatus: \"online\" | \"offline\";\n remoteVersion: string;\n updatedAt: string;\n}\n\nfunction pad(value: string, width: number): string {\n return value.length >= width\n ? value\n : `${value}${\" \".repeat(width - value.length)}`;\n}\n\nfunction renderTable(rows: AgentViewRow[]): void {\n const headers = {\n name: \"Agent\",\n local: \"Local\",\n remote: \"Remote\",\n version: \"Remote Version\",\n updated: \"Updated\",\n };\n\n const widths = {\n name: Math.max(headers.name.length, ...rows.map((r) => r.name.length), 5),\n local: headers.local.length,\n remote: headers.remote.length,\n version: Math.max(\n headers.version.length,\n ...rows.map((r) => r.remoteVersion.length),\n 14,\n ),\n updated: Math.max(headers.updated.length, ...rows.map((r) => r.updatedAt.length), 7),\n };\n\n const divider = ` ${\"-\".repeat(widths.name)} ${\"-\".repeat(widths.local)} ${\"-\".repeat(widths.remote)} ${\"-\".repeat(widths.version)} ${\"-\".repeat(widths.updated)}`;\n console.log(\n ` ${pc.bold(pad(headers.name, widths.name))} ${pc.bold(pad(headers.local, widths.local))} ${pc.bold(pad(headers.remote, widths.remote))} ${pc.bold(pad(headers.version, widths.version))} ${pc.bold(pad(headers.updated, widths.updated))}`,\n );\n console.log(pc.dim(divider));\n for (const row of rows) {\n const localText = row.localStatus === \"yes\" ? \"yes\" : \"no\";\n const remoteText = row.remoteStatus === \"online\" ? \"online\" : \"offline\";\n const local =\n row.localStatus === \"yes\" ? pc.green(localText) : pc.dim(localText);\n const remote =\n row.remoteStatus === \"online\" ? pc.green(remoteText) : pc.dim(remoteText);\n const localCell = `${local}${\" \".repeat(Math.max(0, widths.local - localText.length))}`;\n const remoteCell = `${remote}${\" \".repeat(Math.max(0, widths.remote - remoteText.length))}`;\n console.log(\n ` ${pad(row.name, widths.name)} ${localCell} ${remoteCell} ${pad(row.remoteVersion, widths.version)} ${pad(row.updatedAt, widths.updated)}`,\n );\n }\n}\n\nexport default defineCommand({\n meta: {\n name: \"list\",\n description: \"List local agents and compare with remote runtime\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n default: false,\n description: \"Show help\",\n },\n },\n async run({ args }) {\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp agents list`);\n return;\n }\n\n const cwd = process.cwd();\n p.intro(`${LOGO} ${pc.bold(\"kalp agents list\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n const spinner = p.spinner();\n spinner.start(\"Loading local and remote agent status\");\n\n try {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n const [localNames, state, indexEntries, remotePointers] =\n await Promise.all([\n readLocalAgentNames(cwd),\n readProjectState(cwd),\n readRemoteAgentsIndex(cwd, configPath),\n readRemoteAgentPointers(cwd, configPath),\n ]);\n\n const localSet = new Set(localNames);\n const remoteIndexByName = new Map(\n indexEntries.map((entry) => [entry.name, entry]),\n );\n const remotePointerByName = new Map(\n remotePointers.map((entry) => [entry.name, entry.hash]),\n );\n const names = [\n ...new Set([\n ...localNames,\n ...remotePointerByName.keys(),\n ...remoteIndexByName.keys(),\n ]),\n ].sort((a, b) => a.localeCompare(b));\n\n const rows: AgentViewRow[] = names.map((name) => {\n const index = remoteIndexByName.get(name);\n const remoteExists = remotePointerByName.has(name) || !!index;\n const stateAgent = state?.agents?.[name];\n const remoteVersion =\n index?.version ??\n (typeof index?.versionNumber === \"number\" && index.versionNumber > 0\n ? `v${index.versionNumber}`\n : stateAgent?.lastRemoteHash\n ? `v${stateAgent.currentVersion}`\n : \"—\");\n return {\n name,\n localStatus: localSet.has(name) ? \"yes\" : \"no\",\n remoteStatus: remoteExists ? \"online\" : \"offline\",\n remoteVersion,\n updatedAt: index?.updatedAt ?? stateAgent?.lastPushedAt ?? \"—\",\n };\n });\n\n spinner.stop(`Found ${rows.length} agents`);\n if (rows.length === 0) {\n p.log.info(pc.dim(\"No agents found locally or remotely.\"));\n p.outro(\"Done\");\n return;\n }\n\n renderTable(rows);\n p.outro(\"Done\");\n } catch (error) {\n spinner.stop(\"Failed to load agent status\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":["spinner"]}
|