@3ns/cli 1.0.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 (51) hide show
  1. package/README.md +459 -0
  2. package/SKILL.md +154 -0
  3. package/dist/apiClient.d.ts +16 -0
  4. package/dist/apiClient.d.ts.map +1 -0
  5. package/dist/apiClient.js +115 -0
  6. package/dist/apiClient.js.map +1 -0
  7. package/dist/commands/agents.d.ts +3 -0
  8. package/dist/commands/agents.d.ts.map +1 -0
  9. package/dist/commands/agents.js +74 -0
  10. package/dist/commands/agents.js.map +1 -0
  11. package/dist/commands/auth.d.ts +3 -0
  12. package/dist/commands/auth.d.ts.map +1 -0
  13. package/dist/commands/auth.js +66 -0
  14. package/dist/commands/auth.js.map +1 -0
  15. package/dist/commands/chats.d.ts +3 -0
  16. package/dist/commands/chats.d.ts.map +1 -0
  17. package/dist/commands/chats.js +73 -0
  18. package/dist/commands/chats.js.map +1 -0
  19. package/dist/commands/config.d.ts +3 -0
  20. package/dist/commands/config.d.ts.map +1 -0
  21. package/dist/commands/config.js +117 -0
  22. package/dist/commands/config.js.map +1 -0
  23. package/dist/commands/exportImport.d.ts +3 -0
  24. package/dist/commands/exportImport.d.ts.map +1 -0
  25. package/dist/commands/exportImport.js +84 -0
  26. package/dist/commands/exportImport.js.map +1 -0
  27. package/dist/commands/files.d.ts +3 -0
  28. package/dist/commands/files.d.ts.map +1 -0
  29. package/dist/commands/files.js +110 -0
  30. package/dist/commands/files.js.map +1 -0
  31. package/dist/commands/links.d.ts +3 -0
  32. package/dist/commands/links.d.ts.map +1 -0
  33. package/dist/commands/links.js +91 -0
  34. package/dist/commands/links.js.map +1 -0
  35. package/dist/commands/models.d.ts +3 -0
  36. package/dist/commands/models.d.ts.map +1 -0
  37. package/dist/commands/models.js +32 -0
  38. package/dist/commands/models.js.map +1 -0
  39. package/dist/commands/openclaw.d.ts +3 -0
  40. package/dist/commands/openclaw.d.ts.map +1 -0
  41. package/dist/commands/openclaw.js +63 -0
  42. package/dist/commands/openclaw.js.map +1 -0
  43. package/dist/commands/skins.d.ts +3 -0
  44. package/dist/commands/skins.d.ts.map +1 -0
  45. package/dist/commands/skins.js +169 -0
  46. package/dist/commands/skins.js.map +1 -0
  47. package/dist/index.d.ts +3 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +31 -0
  50. package/dist/index.js.map +1 -0
  51. package/package.json +47 -0
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loadConfig = loadConfig;
37
+ exports.saveConfig = saveConfig;
38
+ exports.getApiKey = getApiKey;
39
+ exports.getBaseUrl = getBaseUrl;
40
+ exports.api = api;
41
+ exports.printJson = printJson;
42
+ exports.printTable = printTable;
43
+ const fs = __importStar(require("fs"));
44
+ const path = __importStar(require("path"));
45
+ const os = __importStar(require("os"));
46
+ const RC_PATH = path.join(os.homedir(), ".3nsrc");
47
+ const DEFAULT_BASE_URL = process.env.THREENS_API_URL ||
48
+ "https://us-central1-prod3ns.cloudfunctions.net/openclaw/openclaw";
49
+ function loadConfig() {
50
+ try {
51
+ if (!fs.existsSync(RC_PATH))
52
+ return null;
53
+ const raw = fs.readFileSync(RC_PATH, "utf8");
54
+ return JSON.parse(raw);
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ function saveConfig(config) {
61
+ fs.writeFileSync(RC_PATH, JSON.stringify(config, null, 2), "utf8");
62
+ fs.chmodSync(RC_PATH, 0o600);
63
+ }
64
+ function getApiKey() {
65
+ const config = loadConfig();
66
+ if (!config?.apiKey) {
67
+ console.error("Not authenticated. Run: 3ns auth login");
68
+ process.exit(1);
69
+ }
70
+ return config.apiKey;
71
+ }
72
+ function getBaseUrl() {
73
+ const config = loadConfig();
74
+ return config?.baseUrl || DEFAULT_BASE_URL;
75
+ }
76
+ async function api(method, endpoint, body) {
77
+ const apiKey = getApiKey();
78
+ const baseUrl = getBaseUrl();
79
+ const url = `${baseUrl}${endpoint}`;
80
+ const options = {
81
+ method,
82
+ headers: {
83
+ "Content-Type": "application/json",
84
+ Authorization: `Bearer ${apiKey}`,
85
+ },
86
+ };
87
+ if (body)
88
+ options.body = JSON.stringify(body);
89
+ const res = await fetch(url, options);
90
+ const data = await res.json().catch(() => null);
91
+ if (!res.ok) {
92
+ const msg = data?.error || `HTTP ${res.status}`;
93
+ throw new Error(msg);
94
+ }
95
+ return { status: res.status, data: data };
96
+ }
97
+ function printJson(data) {
98
+ console.log(JSON.stringify(data, null, 2));
99
+ }
100
+ function printTable(rows, columns) {
101
+ if (rows.length === 0) {
102
+ console.log("(no results)");
103
+ return;
104
+ }
105
+ const cols = columns || Object.keys(rows[0]);
106
+ const widths = cols.map((c) => Math.max(c.length, ...rows.map((r) => String(r[c] ?? "").length)));
107
+ const header = cols.map((c, i) => c.padEnd(widths[i])).join(" ");
108
+ const sep = widths.map((w) => "-".repeat(w)).join(" ");
109
+ console.log(header);
110
+ console.log(sep);
111
+ for (const row of rows) {
112
+ console.log(cols.map((c, i) => String(row[c] ?? "").padEnd(widths[i])).join(" "));
113
+ }
114
+ }
115
+ //# sourceMappingURL=apiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiClient.js","sourceRoot":"","sources":["../src/apiClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAgentsCommands(program: Command): void;
3
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0E7D"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAgentsCommands = registerAgentsCommands;
4
+ const apiClient_1 = require("../apiClient");
5
+ function registerAgentsCommands(program) {
6
+ const agents = program.command("agents").description("Discover and interact with other agents");
7
+ agents
8
+ .command("search")
9
+ .description("Search for published agents")
10
+ .argument("<query>", "Search query")
11
+ .option("--json", "Output as JSON")
12
+ .action(async (query, opts) => {
13
+ const { data } = await (0, apiClient_1.api)("GET", `/agents/search?q=${encodeURIComponent(query)}`);
14
+ if (opts.json) {
15
+ (0, apiClient_1.printJson)(data.agents);
16
+ }
17
+ else {
18
+ (0, apiClient_1.printTable)(data.agents.map((a) => ({
19
+ spaceId: a.spaceId,
20
+ name: a.name || "(unnamed)",
21
+ description: (a.description || "").substring(0, 60),
22
+ })), ["spaceId", "name", "description"]);
23
+ }
24
+ });
25
+ agents
26
+ .command("card")
27
+ .description("View an agent's capability card")
28
+ .argument("<space-id>", "Target agent's space ID")
29
+ .option("--json", "Output as JSON")
30
+ .action(async (spaceId, opts) => {
31
+ const { data } = await (0, apiClient_1.api)("GET", `/agents/${spaceId}/card`);
32
+ if (opts.json) {
33
+ (0, apiClient_1.printJson)(data.agent);
34
+ }
35
+ else {
36
+ const a = data.agent;
37
+ console.log(`Name: ${a.name}`);
38
+ console.log(`Description: ${a.description || "(none)"}`);
39
+ if (a.agentCard) {
40
+ console.log(`\n--- Agent Card ---`);
41
+ console.log(a.agentCard);
42
+ }
43
+ }
44
+ });
45
+ agents
46
+ .command("chat")
47
+ .description("Send a message to another agent (A2A)")
48
+ .argument("<space-id>", "Target agent's space ID")
49
+ .argument("<message>", "Message to send")
50
+ .action(async (spaceId, message) => {
51
+ const { data } = await (0, apiClient_1.api)("POST", `/agents/${spaceId}/chat`, { message });
52
+ console.log(`Message sent: ${data.messageId}`);
53
+ if (data.note)
54
+ console.log(data.note);
55
+ });
56
+ agents
57
+ .command("list")
58
+ .description("List your own agent spaces")
59
+ .option("--json", "Output as JSON")
60
+ .action(async (opts) => {
61
+ const { data } = await (0, apiClient_1.api)("GET", "/spaces");
62
+ if (opts.json) {
63
+ (0, apiClient_1.printJson)(data.spaces);
64
+ }
65
+ else {
66
+ (0, apiClient_1.printTable)(data.spaces.map((s) => ({
67
+ id: s.id,
68
+ userId: s.userId,
69
+ status: s.status || "active",
70
+ })), ["id", "userId", "status"]);
71
+ }
72
+ });
73
+ }
74
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAuthCommands(program: Command): void;
3
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6D3D"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerAuthCommands = registerAuthCommands;
4
+ const apiClient_1 = require("../apiClient");
5
+ function registerAuthCommands(program) {
6
+ const auth = program.command("auth").description("Manage authentication");
7
+ auth
8
+ .command("login")
9
+ .description("Store your 3NS API key")
10
+ .argument("<api-key>", "Your 3NS API key")
11
+ .option("--base-url <url>", "Custom API base URL")
12
+ .action(async (apiKey, opts) => {
13
+ (0, apiClient_1.saveConfig)({ apiKey, baseUrl: opts.baseUrl });
14
+ console.log("API key saved to ~/.3nsrc");
15
+ // Verify the key works
16
+ try {
17
+ const { data } = await (0, apiClient_1.api)("GET", "/profile");
18
+ const name = data?.profile?.metadata?.name || "Unknown";
19
+ console.log(`Authenticated as: ${name}`);
20
+ }
21
+ catch {
22
+ console.warn("Warning: Could not verify the key. Check it is correct.");
23
+ }
24
+ });
25
+ auth
26
+ .command("whoami")
27
+ .description("Show current authentication status")
28
+ .action(async () => {
29
+ const config = (0, apiClient_1.loadConfig)();
30
+ if (!config?.apiKey) {
31
+ console.log("Not authenticated. Run: 3ns auth login <api-key>");
32
+ return;
33
+ }
34
+ console.log(`API key: ${config.apiKey.substring(0, 8)}...`);
35
+ if (config.baseUrl)
36
+ console.log(`Base URL: ${config.baseUrl}`);
37
+ try {
38
+ const { data } = await (0, apiClient_1.api)("GET", "/profile");
39
+ const meta = data?.profile?.metadata;
40
+ if (meta) {
41
+ console.log(`Agent name: ${meta.name || "Not set"}`);
42
+ console.log(`Description: ${meta.description || "Not set"}`);
43
+ }
44
+ }
45
+ catch (err) {
46
+ console.error(`Auth check failed: ${err.message}`);
47
+ }
48
+ });
49
+ auth
50
+ .command("logout")
51
+ .description("Remove stored credentials")
52
+ .action(() => {
53
+ const fs = require("fs");
54
+ const path = require("path");
55
+ const os = require("os");
56
+ const rcPath = path.join(os.homedir(), ".3nsrc");
57
+ if (fs.existsSync(rcPath)) {
58
+ fs.unlinkSync(rcPath);
59
+ console.log("Logged out. ~/.3nsrc removed.");
60
+ }
61
+ else {
62
+ console.log("No credentials found.");
63
+ }
64
+ });
65
+ }
66
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerChatsCommands(program: Command): void;
3
+ //# sourceMappingURL=chats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqE5D"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerChatsCommands = registerChatsCommands;
4
+ const apiClient_1 = require("../apiClient");
5
+ function registerChatsCommands(program) {
6
+ const chats = program.command("chats").description("Manage chat conversations");
7
+ chats
8
+ .command("list")
9
+ .description("List chat summaries")
10
+ .option("--json", "Output as JSON")
11
+ .action(async (opts) => {
12
+ const { data } = await (0, apiClient_1.api)("GET", "/chats");
13
+ if (opts.json) {
14
+ (0, apiClient_1.printJson)(data.chats);
15
+ }
16
+ else {
17
+ (0, apiClient_1.printTable)(data.chats.map((c) => ({
18
+ chatId: c.agent_chat_id,
19
+ type: c.agentType || "NORM",
20
+ summary: (c.summary || "").substring(0, 60),
21
+ })), ["chatId", "type", "summary"]);
22
+ }
23
+ });
24
+ chats
25
+ .command("history")
26
+ .description("View messages in a chat")
27
+ .argument("<chat-id>", "Numeric chat ID")
28
+ .option("--json", "Output as JSON")
29
+ .action(async (chatId, opts) => {
30
+ const { data } = await (0, apiClient_1.api)("GET", `/chats/${chatId}`);
31
+ if (opts.json) {
32
+ (0, apiClient_1.printJson)(data.messages);
33
+ }
34
+ else {
35
+ for (const msg of data.messages) {
36
+ const role = msg.role === "user" ? "You" : "Agent";
37
+ const text = msg.content?.map((c) => c.text).join("") || "";
38
+ console.log(`[${role}] ${text.substring(0, 200)}`);
39
+ }
40
+ }
41
+ });
42
+ chats
43
+ .command("send")
44
+ .description("Send a message to start or continue a chat")
45
+ .requiredOption("--folder <id>", "Folder ID for the chat")
46
+ .argument("<message>", "Message text")
47
+ .option("--agent-type <type>", "Agent type (NORM, AMPS, CUST)", "NORM")
48
+ .option("--model <model>", "AI model to use (e.g. openai/gpt-5.2). Run '3ns models' to see options.")
49
+ .action(async (message, opts) => {
50
+ const body = {
51
+ folderId: opts.folder,
52
+ message,
53
+ agentType: opts.agentType,
54
+ };
55
+ if (opts.model)
56
+ body.model = opts.model;
57
+ const { data } = await (0, apiClient_1.api)("POST", "/chats", body);
58
+ console.log(`Message sent to chat ${data.chatId}`);
59
+ if (data.model)
60
+ console.log(`Model: ${data.model}`);
61
+ if (data.note)
62
+ console.log(data.note);
63
+ });
64
+ chats
65
+ .command("delete")
66
+ .description("Delete a chat and all its messages")
67
+ .argument("<chat-id>", "Numeric chat ID")
68
+ .action(async (chatId) => {
69
+ const { data } = await (0, apiClient_1.api)("DELETE", `/chats/${chatId}`);
70
+ console.log(`Chat ${chatId} deleted (${data.deletedMessages} messages removed).`);
71
+ });
72
+ }
73
+ //# sourceMappingURL=chats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chats.js","sourceRoot":"","sources":["../../src/commands/chats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerConfigCommands(program: Command): void;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmF7D"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerConfigCommands = registerConfigCommands;
37
+ const fs = __importStar(require("fs"));
38
+ const apiClient_1 = require("../apiClient");
39
+ function registerConfigCommands(program) {
40
+ const config = program.command("config").description("Manage agent configuration (MD instruction files)");
41
+ config
42
+ .command("folders")
43
+ .description("List all folders")
44
+ .option("--json", "Output as JSON")
45
+ .action(async (opts) => {
46
+ const { data } = await (0, apiClient_1.api)("GET", "/config/folders");
47
+ if (opts.json) {
48
+ (0, apiClient_1.printJson)(data.folders);
49
+ }
50
+ else {
51
+ (0, apiClient_1.printTable)(data.folders.map((f) => ({
52
+ id: f.id,
53
+ name: f.folderName,
54
+ docs: (f.documentIds || []).length,
55
+ chats: (f.chatIds || []).length,
56
+ })), ["id", "name", "docs", "chats"]);
57
+ }
58
+ });
59
+ config
60
+ .command("read")
61
+ .description("Read a document by ID")
62
+ .argument("<doc-id>", "Document ID")
63
+ .option("--json", "Output raw JSON")
64
+ .action(async (docId, opts) => {
65
+ const { data } = await (0, apiClient_1.api)("GET", `/config/documents/${docId}`);
66
+ if (opts.json) {
67
+ (0, apiClient_1.printJson)(data.document);
68
+ }
69
+ else {
70
+ console.log(`--- ${data.document.fileName} (${data.document.fileType}) ---`);
71
+ console.log(data.document.content || "(empty)");
72
+ }
73
+ });
74
+ config
75
+ .command("write")
76
+ .description("Update a document's content")
77
+ .argument("<doc-id>", "Document ID")
78
+ .option("--content <text>", "New content (inline)")
79
+ .option("--file <path>", "Read content from a local file")
80
+ .action(async (docId, opts) => {
81
+ let content = opts.content;
82
+ if (opts.file) {
83
+ content = fs.readFileSync(opts.file, "utf8");
84
+ }
85
+ if (!content) {
86
+ console.error("Provide --content or --file");
87
+ process.exit(1);
88
+ }
89
+ await (0, apiClient_1.api)("PUT", `/config/documents/${docId}`, { content });
90
+ console.log(`Document ${docId} updated.`);
91
+ });
92
+ config
93
+ .command("ensure")
94
+ .description("Create a document in a folder if it does not exist")
95
+ .argument("<folder-id>", "Folder ID")
96
+ .requiredOption("--name <name>", "File name (e.g. instructions.md)")
97
+ .option("--content <text>", "Initial content")
98
+ .option("--file <path>", "Read initial content from a local file")
99
+ .action(async (folderId, opts) => {
100
+ // Check if document already exists
101
+ const { data: existing } = await (0, apiClient_1.api)("GET", `/config/folders/${folderId}/documents`);
102
+ const found = existing.documents.find((d) => d.fileName === opts.name);
103
+ if (found) {
104
+ console.log(`Document "${opts.name}" already exists: ${found.id}`);
105
+ return;
106
+ }
107
+ let content = opts.content || "";
108
+ if (opts.file)
109
+ content = fs.readFileSync(opts.file, "utf8");
110
+ const { data } = await (0, apiClient_1.api)("POST", `/config/folders/${folderId}/documents`, {
111
+ fileName: opts.name,
112
+ content,
113
+ });
114
+ console.log(`Document created: ${data.docId}`);
115
+ });
116
+ }
117
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerExportImportCommands(program: Command): void;
3
+ //# sourceMappingURL=exportImport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportImport.d.ts","sourceRoot":"","sources":["../../src/commands/exportImport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgDnE"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.registerExportImportCommands = registerExportImportCommands;
37
+ const fs = __importStar(require("fs"));
38
+ const apiClient_1 = require("../apiClient");
39
+ function registerExportImportCommands(program) {
40
+ program
41
+ .command("export")
42
+ .description("Export your entire agent as JSON")
43
+ .option("--no-chats", "Exclude chat history")
44
+ .option("--no-files", "Exclude uploaded files")
45
+ .option("-o, --output <path>", "Save to file instead of stdout")
46
+ .action(async (opts) => {
47
+ const { data } = await (0, apiClient_1.api)("POST", "/export", {
48
+ includeChats: opts.chats,
49
+ includeFiles: opts.files,
50
+ });
51
+ if (opts.output) {
52
+ fs.writeFileSync(opts.output, JSON.stringify(data, null, 2), "utf8");
53
+ console.log(`Exported to: ${opts.output}`);
54
+ console.log(`Folders: ${data.manifest?.folderCount}, Docs: ${data.manifest?.documentCount}, Chats: ${data.manifest?.chatCount}`);
55
+ }
56
+ else {
57
+ (0, apiClient_1.printJson)(data);
58
+ }
59
+ });
60
+ program
61
+ .command("import")
62
+ .description("Import agent data from a JSON file")
63
+ .argument("<file>", "Path to the export JSON file")
64
+ .action(async (file) => {
65
+ const raw = fs.readFileSync(file, "utf8");
66
+ const data = JSON.parse(raw);
67
+ if (!data.manifest) {
68
+ console.error("Invalid export file - missing manifest.");
69
+ process.exit(1);
70
+ }
71
+ console.log(`Importing: ${data.manifest.folderCount} folders, ${data.manifest.documentCount} docs, ${data.manifest.chatCount} chats...`);
72
+ const { data: result } = await (0, apiClient_1.api)("POST", "/import", { data });
73
+ console.log(`Import ${result.success ? "succeeded" : "failed"}.`);
74
+ if (result.importCounts) {
75
+ for (const [key, count] of Object.entries(result.importCounts)) {
76
+ console.log(` ${key}: ${count}`);
77
+ }
78
+ }
79
+ if (result.errors?.length > 0) {
80
+ console.log(`Errors: ${result.errors.join(", ")}`);
81
+ }
82
+ });
83
+ }
84
+ //# sourceMappingURL=exportImport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportImport.js","sourceRoot":"","sources":["../../src/commands/exportImport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function registerFilesCommands(program: Command): void;
3
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4E5D"}