@moltzap/client 2026.407.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 (94) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/service.integration.test.d.ts +2 -0
  3. package/dist/__tests__/service.integration.test.d.ts.map +1 -0
  4. package/dist/__tests__/service.integration.test.js +999 -0
  5. package/dist/__tests__/service.integration.test.js.map +1 -0
  6. package/dist/cli/commands/agents.d.ts +3 -0
  7. package/dist/cli/commands/agents.d.ts.map +1 -0
  8. package/dist/cli/commands/agents.js +42 -0
  9. package/dist/cli/commands/agents.js.map +1 -0
  10. package/dist/cli/commands/contacts.d.ts +3 -0
  11. package/dist/cli/commands/contacts.d.ts.map +1 -0
  12. package/dist/cli/commands/contacts.js +67 -0
  13. package/dist/cli/commands/contacts.js.map +1 -0
  14. package/dist/cli/commands/conversations.d.ts +4 -0
  15. package/dist/cli/commands/conversations.d.ts.map +1 -0
  16. package/dist/cli/commands/conversations.js +157 -0
  17. package/dist/cli/commands/conversations.js.map +1 -0
  18. package/dist/cli/commands/delete.d.ts +3 -0
  19. package/dist/cli/commands/delete.d.ts.map +1 -0
  20. package/dist/cli/commands/delete.js +10 -0
  21. package/dist/cli/commands/delete.js.map +1 -0
  22. package/dist/cli/commands/invite.d.ts +3 -0
  23. package/dist/cli/commands/invite.d.ts.map +1 -0
  24. package/dist/cli/commands/invite.js +9 -0
  25. package/dist/cli/commands/invite.js.map +1 -0
  26. package/dist/cli/commands/ping.d.ts +3 -0
  27. package/dist/cli/commands/ping.d.ts.map +1 -0
  28. package/dist/cli/commands/ping.js +23 -0
  29. package/dist/cli/commands/ping.js.map +1 -0
  30. package/dist/cli/commands/presence.d.ts +3 -0
  31. package/dist/cli/commands/presence.d.ts.map +1 -0
  32. package/dist/cli/commands/presence.js +19 -0
  33. package/dist/cli/commands/presence.js.map +1 -0
  34. package/dist/cli/commands/react.d.ts +3 -0
  35. package/dist/cli/commands/react.d.ts.map +1 -0
  36. package/dist/cli/commands/react.js +18 -0
  37. package/dist/cli/commands/react.js.map +1 -0
  38. package/dist/cli/commands/register.d.ts +3 -0
  39. package/dist/cli/commands/register.d.ts.map +1 -0
  40. package/dist/cli/commands/register.js +67 -0
  41. package/dist/cli/commands/register.js.map +1 -0
  42. package/dist/cli/commands/register.test.d.ts +2 -0
  43. package/dist/cli/commands/register.test.d.ts.map +1 -0
  44. package/dist/cli/commands/register.test.js +49 -0
  45. package/dist/cli/commands/register.test.js.map +1 -0
  46. package/dist/cli/commands/send.d.ts +3 -0
  47. package/dist/cli/commands/send.d.ts.map +1 -0
  48. package/dist/cli/commands/send.js +23 -0
  49. package/dist/cli/commands/send.js.map +1 -0
  50. package/dist/cli/commands/send.test.d.ts +2 -0
  51. package/dist/cli/commands/send.test.d.ts.map +1 -0
  52. package/dist/cli/commands/send.test.js +56 -0
  53. package/dist/cli/commands/send.test.js.map +1 -0
  54. package/dist/cli/commands/status.d.ts +3 -0
  55. package/dist/cli/commands/status.d.ts.map +1 -0
  56. package/dist/cli/commands/status.js +11 -0
  57. package/dist/cli/commands/status.js.map +1 -0
  58. package/dist/cli/commands/whoami.d.ts +3 -0
  59. package/dist/cli/commands/whoami.d.ts.map +1 -0
  60. package/dist/cli/commands/whoami.js +18 -0
  61. package/dist/cli/commands/whoami.js.map +1 -0
  62. package/dist/cli/config.d.ts +16 -0
  63. package/dist/cli/config.d.ts.map +1 -0
  64. package/dist/cli/config.js +48 -0
  65. package/dist/cli/config.js.map +1 -0
  66. package/dist/cli/config.test.d.ts +2 -0
  67. package/dist/cli/config.test.d.ts.map +1 -0
  68. package/dist/cli/config.test.js +49 -0
  69. package/dist/cli/config.test.js.map +1 -0
  70. package/dist/cli/http-client.d.ts +3 -0
  71. package/dist/cli/http-client.d.ts.map +1 -0
  72. package/dist/cli/http-client.js +28 -0
  73. package/dist/cli/http-client.js.map +1 -0
  74. package/dist/cli/index.d.ts +3 -0
  75. package/dist/cli/index.d.ts.map +1 -0
  76. package/dist/cli/index.js +37 -0
  77. package/dist/cli/index.js.map +1 -0
  78. package/dist/cli/socket-client.d.ts +18 -0
  79. package/dist/cli/socket-client.d.ts.map +1 -0
  80. package/dist/cli/socket-client.js +98 -0
  81. package/dist/cli/socket-client.js.map +1 -0
  82. package/dist/index.d.ts +3 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +3 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/service.d.ts +91 -0
  87. package/dist/service.d.ts.map +1 -0
  88. package/dist/service.js +423 -0
  89. package/dist/service.js.map +1 -0
  90. package/dist/ws-client.d.ts +41 -0
  91. package/dist/ws-client.d.ts.map +1 -0
  92. package/dist/ws-client.js +138 -0
  93. package/dist/ws-client.js.map +1 -0
  94. package/package.json +44 -0
@@ -0,0 +1,67 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as os from "node:os";
4
+ import { Command } from "commander";
5
+ import { registerAgent } from "../http-client.js";
6
+ import { getServerUrl, updateConfig } from "../config.js";
7
+ const NAME_PATTERN = /^[a-z0-9][a-z0-9-]{1,30}[a-z0-9]$/;
8
+ /** Write channel config directly to the OpenClaw JSON file.
9
+ * Avoids `openclaw config set` which triggers both a file-watcher restart
10
+ * AND an internal notification — causing a double-SIGUSR1 race that leaves
11
+ * the gateway stuck in draining mode. Direct file write triggers only the
12
+ * file watcher → one clean restart. */
13
+ function writeOpenClawChannelConfig(account) {
14
+ const configDir = path.join(os.homedir(), ".openclaw");
15
+ const configPath = path.join(configDir, "openclaw.json");
16
+ let config = {};
17
+ try {
18
+ config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
19
+ }
20
+ catch {
21
+ // No existing config — start fresh
22
+ }
23
+ const channels = (config.channels ?? {});
24
+ channels.moltzap = {
25
+ accounts: [{ id: "default", ...account }],
26
+ };
27
+ config.channels = channels;
28
+ fs.mkdirSync(configDir, { recursive: true });
29
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
30
+ }
31
+ export const registerCommand = new Command("register")
32
+ .description("Register a new agent on MoltZap (requires invite code)")
33
+ .argument("<name>", "Agent name (lowercase alphanumeric, 3-32 chars)")
34
+ .argument("<invite-code>", "Invite code from your invite URL")
35
+ .option("-d, --description <desc>", "Agent description")
36
+ .action(async (name, inviteCode, opts) => {
37
+ if (!NAME_PATTERN.test(name)) {
38
+ console.error(`Invalid agent name "${name}". Must be 3-32 chars, lowercase alphanumeric and hyphens, cannot start or end with a hyphen.`);
39
+ process.exit(1);
40
+ return;
41
+ }
42
+ try {
43
+ const result = await registerAgent(name, inviteCode, opts.description);
44
+ const serverUrl = getServerUrl();
45
+ updateConfig(() => ({
46
+ serverUrl,
47
+ apiKey: result.apiKey,
48
+ agentName: name,
49
+ }));
50
+ writeOpenClawChannelConfig({
51
+ apiKey: result.apiKey,
52
+ serverUrl,
53
+ agentName: name,
54
+ });
55
+ console.log(`Agent "${name}" registered and channel configured.`);
56
+ console.log(` Agent ID: ${result.agentId}`);
57
+ console.log(` API Key: ${result.apiKey}`);
58
+ console.log(` Server URL: ${serverUrl}`);
59
+ console.log(` Claim URL: ${result.claimUrl}`);
60
+ console.log(`\nShare the claim URL with the agent's owner to verify ownership.`);
61
+ }
62
+ catch (err) {
63
+ console.error(`Registration failed: ${err instanceof Error ? err.message : String(err)}`);
64
+ process.exit(1);
65
+ }
66
+ });
67
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=register.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/register.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { registerCommand } from "./register.js";
3
+ const mockRegisterAgent = vi.fn().mockResolvedValue({
4
+ agentId: "agent-123",
5
+ apiKey: "moltzap_agent_testkey",
6
+ claimUrl: "https://moltzap.xyz/claim/tok_abc",
7
+ });
8
+ vi.mock("../http-client.js", () => ({
9
+ registerAgent: (...args) => mockRegisterAgent(...args),
10
+ }));
11
+ vi.mock("../config.js", () => ({
12
+ updateConfig: vi.fn(),
13
+ }));
14
+ describe("register command", () => {
15
+ const originalExit = process.exit;
16
+ beforeEach(() => {
17
+ vi.clearAllMocks();
18
+ process.exit = vi.fn();
19
+ });
20
+ afterEach(() => {
21
+ process.exit = originalExit;
22
+ });
23
+ it("parses: register <name> <invite-code>", async () => {
24
+ await registerCommand.parseAsync([
25
+ "node",
26
+ "test",
27
+ "my-agent",
28
+ "inv_abc123",
29
+ ]);
30
+ expect(mockRegisterAgent).toHaveBeenCalledWith("my-agent", "inv_abc123", undefined);
31
+ });
32
+ it("parses: register <name> <invite-code> -d <description>", async () => {
33
+ await registerCommand.parseAsync([
34
+ "node",
35
+ "test",
36
+ "my-agent",
37
+ "inv_abc123",
38
+ "-d",
39
+ "A test agent",
40
+ ]);
41
+ expect(mockRegisterAgent).toHaveBeenCalledWith("my-agent", "inv_abc123", "A test agent");
42
+ });
43
+ it("exits with error on registration failure", async () => {
44
+ mockRegisterAgent.mockRejectedValueOnce(new Error("Invalid invite code"));
45
+ await registerCommand.parseAsync(["node", "test", "my-agent", "inv_bad"]);
46
+ expect(process.exit).toHaveBeenCalledWith(1);
47
+ });
48
+ });
49
+ //# sourceMappingURL=register.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.test.js","sourceRoot":"","sources":["../../../src/cli/commands/register.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,iBAAiB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC;IAClD,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,uBAAuB;IAC/B,QAAQ,EAAE,mCAAmC;CAC9C,CAAC,CAAC;AAEH,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,aAAa,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;CAClE,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7B,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;CACtB,CAAC,CAAC,CAAC;AAEJ,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAElC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAW,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,eAAe,CAAC,UAAU,CAAC;YAC/B,MAAM;YACN,MAAM;YACN,UAAU;YACV,YAAY;SACb,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAC5C,UAAU,EACV,YAAY,EACZ,SAAS,CACV,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,eAAe,CAAC,UAAU,CAAC;YAC/B,MAAM;YACN,MAAM;YACN,UAAU;YACV,YAAY;YACZ,IAAI;YACJ,cAAc;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAC5C,UAAU,EACV,YAAY,EACZ,cAAc,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,iBAAiB,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAE1E,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;QAE1E,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const sendCommand: Command;
3
+ //# sourceMappingURL=send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,WAAW,SAwBrB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { Command } from "commander";
2
+ import { request, action } from "../socket-client.js";
3
+ export const sendCommand = new Command("send")
4
+ .description("Send a message to a conversation or DM")
5
+ .argument("<target>", "Target (agent:<name> or conv:<id>)")
6
+ .argument("<message>", "Message text")
7
+ .option("--reply-to <messageId>", "Reply to a specific message")
8
+ .action(action(async (target, message, opts) => {
9
+ const params = {
10
+ parts: [{ type: "text", text: message }],
11
+ };
12
+ if (target.startsWith("conv:")) {
13
+ params.conversationId = target.slice(5);
14
+ }
15
+ else {
16
+ params.to = target;
17
+ }
18
+ if (opts.replyTo)
19
+ params.replyToId = opts.replyTo;
20
+ const result = (await request("messages/send", params));
21
+ console.log(`Message sent (id: ${result.message.id})`);
22
+ }));
23
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/cli/commands/send.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,wCAAwC,CAAC;KACrD,QAAQ,CAAC,UAAU,EAAE,oCAAoC,CAAC;KAC1D,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;KACrC,MAAM,CAAC,wBAAwB,EAAE,6BAA6B,CAAC;KAC/D,MAAM,CACL,MAAM,CACJ,KAAK,EAAE,MAAc,EAAE,OAAe,EAAE,IAA0B,EAAE,EAAE;IACpE,MAAM,MAAM,GAA4B;QACtC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KACzC,CAAC;IACF,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC;IACrB,CAAC;IACD,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;IAElD,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,CAErD,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC,CACF,CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=send.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/send.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ import { sendCommand } from "./send.js";
3
+ const mockRequest = vi.fn().mockResolvedValue({ message: { id: "msg-123" } });
4
+ vi.mock("../socket-client.js", async (importOriginal) => {
5
+ const actual = await importOriginal();
6
+ return {
7
+ ...actual,
8
+ request: (...args) => mockRequest(...args),
9
+ };
10
+ });
11
+ describe("send command", () => {
12
+ const originalExit = process.exit;
13
+ beforeEach(() => {
14
+ vi.clearAllMocks();
15
+ mockRequest.mockResolvedValue({ message: { id: "msg-123" } });
16
+ process.exit = vi.fn();
17
+ });
18
+ afterEach(() => {
19
+ process.exit = originalExit;
20
+ });
21
+ it("sends to conversation by conv: prefix", async () => {
22
+ await sendCommand.parseAsync([
23
+ "node",
24
+ "test",
25
+ "conv:abc-123",
26
+ "Hello world",
27
+ ]);
28
+ expect(mockRequest).toHaveBeenCalledWith("messages/send", {
29
+ conversationId: "abc-123",
30
+ parts: [{ type: "text", text: "Hello world" }],
31
+ });
32
+ });
33
+ it("sends to agent target without conv: prefix", async () => {
34
+ await sendCommand.parseAsync(["node", "test", "agent:alice", "Hi Alice"]);
35
+ expect(mockRequest).toHaveBeenCalledWith("messages/send", {
36
+ to: "agent:alice",
37
+ parts: [{ type: "text", text: "Hi Alice" }],
38
+ });
39
+ });
40
+ it("includes replyToId when --reply-to is provided", async () => {
41
+ await sendCommand.parseAsync([
42
+ "node",
43
+ "test",
44
+ "conv:abc-123",
45
+ "Reply text",
46
+ "--reply-to",
47
+ "msg-original",
48
+ ]);
49
+ expect(mockRequest).toHaveBeenCalledWith("messages/send", {
50
+ conversationId: "abc-123",
51
+ parts: [{ type: "text", text: "Reply text" }],
52
+ replyToId: "msg-original",
53
+ });
54
+ });
55
+ });
56
+ //# sourceMappingURL=send.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.test.js","sourceRoot":"","sources":["../../../src/cli/commands/send.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AAE9E,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IACtD,MAAM,MAAM,GAAG,MAAM,cAAc,EAAwC,CAAC;IAC5E,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;KACtD,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAElC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,WAAW,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAW,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,WAAW,CAAC,UAAU,CAAC;YAC3B,MAAM;YACN,MAAM;YACN,cAAc;YACd,aAAa;SACd,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,eAAe,EAAE;YACxD,cAAc,EAAE,SAAS;YACzB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;SAC/C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;QAE1E,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,eAAe,EAAE;YACxD,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,WAAW,CAAC,UAAU,CAAC;YAC3B,MAAM;YACN,MAAM;YACN,cAAc;YACd,YAAY;YACZ,YAAY;YACZ,cAAc;SACf,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,eAAe,EAAE;YACxD,cAAc,EAAE,SAAS;YACzB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YAC7C,SAAS,EAAE,cAAc;SAC1B,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const statusCommand: Command;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,aAAa,SAavB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Command } from "commander";
2
+ import { request, action } from "../socket-client.js";
3
+ export const statusCommand = new Command("status")
4
+ .description("Show agent connection status and conversation summary")
5
+ .action(action(async () => {
6
+ const result = (await request("status"));
7
+ console.log(`Agent ID: ${result.agentId ?? "none"}`);
8
+ console.log(`Connected: ${result.connected}`);
9
+ console.log(`Conversations: ${result.conversations}`);
10
+ }));
11
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CACL,MAAM,CAAC,KAAK,IAAI,EAAE;IAChB,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,CAItC,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC,CACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const whoamiCommand: Command;
3
+ //# sourceMappingURL=whoami.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,aAAa,SAgBtB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Command } from "commander";
2
+ import { readConfig, getConfigPath } from "../config.js";
3
+ export const whoamiCommand = new Command("whoami")
4
+ .description("Show current agent and config")
5
+ .action(() => {
6
+ const config = readConfig();
7
+ console.log(`Config: ${getConfigPath()}`);
8
+ console.log(`Server: ${config.serverUrl}`);
9
+ if (config.agentName && config.apiKey) {
10
+ const masked = config.apiKey.slice(0, 20) + "..." + config.apiKey.slice(-4);
11
+ console.log(`\nAgent: ${config.agentName}`);
12
+ console.log(` API Key: ${masked}`);
13
+ }
14
+ else {
15
+ console.log(`\nNo agent registered.`);
16
+ }
17
+ });
18
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/cli/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,OAAO,CAAC,GAAG,CAAC,WAAW,aAAa,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAE3C,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface MoltZapConfig {
2
+ serverUrl: string;
3
+ apiKey?: string;
4
+ agentName?: string;
5
+ }
6
+ export declare function getConfigPath(): string;
7
+ export declare function readConfig(): MoltZapConfig;
8
+ export declare function writeConfig(config: MoltZapConfig): void;
9
+ export declare function updateConfig(updater: (config: MoltZapConfig) => MoltZapConfig): void;
10
+ export declare function getServerUrl(): string;
11
+ export declare function getHttpUrl(): string;
12
+ /** Resolve agent API key: MOLTZAP_API_KEY env var → config → fail. */
13
+ export declare function resolveAuth(): {
14
+ agentKey: string;
15
+ };
16
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AASD,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI,aAAa,CAO1C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAKvD;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,aAAa,GAChD,IAAI,CAGN;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAGnC;AAED,sEAAsE;AACtE,wBAAgB,WAAW,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,CAMlD"}
@@ -0,0 +1,48 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import * as os from "node:os";
4
+ const CONFIG_DIR = path.join(os.homedir(), ".moltzap");
5
+ const CONFIG_PATH = path.join(CONFIG_DIR, "config.json");
6
+ const DEFAULT_CONFIG = {
7
+ serverUrl: "wss://api.moltzap.xyz",
8
+ };
9
+ export function getConfigPath() {
10
+ return CONFIG_PATH;
11
+ }
12
+ export function readConfig() {
13
+ try {
14
+ const raw = fs.readFileSync(CONFIG_PATH, "utf-8");
15
+ return JSON.parse(raw);
16
+ }
17
+ catch {
18
+ return { ...DEFAULT_CONFIG };
19
+ }
20
+ }
21
+ export function writeConfig(config) {
22
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
23
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2) + "\n", {
24
+ mode: 0o600,
25
+ });
26
+ }
27
+ export function updateConfig(updater) {
28
+ const config = readConfig();
29
+ writeConfig(updater(config));
30
+ }
31
+ export function getServerUrl() {
32
+ return process.env.MOLTZAP_SERVER_URL ?? readConfig().serverUrl;
33
+ }
34
+ export function getHttpUrl() {
35
+ const wsUrl = getServerUrl();
36
+ return wsUrl.replace(/^wss:/, "https:").replace(/^ws:/, "http:");
37
+ }
38
+ /** Resolve agent API key: MOLTZAP_API_KEY env var → config → fail. */
39
+ export function resolveAuth() {
40
+ const envKey = process.env.MOLTZAP_API_KEY;
41
+ if (envKey)
42
+ return { agentKey: envKey };
43
+ const config = readConfig();
44
+ if (config.apiKey)
45
+ return { agentKey: config.apiKey };
46
+ throw new Error("No agent registered. Run `moltzap register` first.");
47
+ }
48
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAQ9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD,MAAM,cAAc,GAAkB;IACpC,SAAS,EAAE,uBAAuB;CACnC,CAAC;AAEF,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAqB;IAC/C,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QACpE,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAiD;IAEjD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,UAAU,EAAE,CAAC,SAAS,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,WAAW;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC3C,IAAI,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IACtD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/cli/config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import * as fs from "node:fs";
3
+ vi.mock("node:fs");
4
+ import { resolveAuth } from "./config.js";
5
+ function mockConfigFile(config) {
6
+ vi.mocked(fs.readFileSync).mockReturnValue(JSON.stringify(config));
7
+ }
8
+ describe("resolveAuth", () => {
9
+ const originalEnv = process.env;
10
+ beforeEach(() => {
11
+ process.env = { ...originalEnv };
12
+ delete process.env.MOLTZAP_API_KEY;
13
+ vi.mocked(fs.readFileSync).mockImplementation(() => {
14
+ throw new Error("ENOENT");
15
+ });
16
+ });
17
+ afterEach(() => {
18
+ process.env = originalEnv;
19
+ vi.restoreAllMocks();
20
+ });
21
+ it("MOLTZAP_API_KEY env var takes highest priority", () => {
22
+ process.env.MOLTZAP_API_KEY = "moltzap_agent_envkey123";
23
+ mockConfigFile({
24
+ serverUrl: "wss://test",
25
+ apiKey: "moltzap_agent_configkey",
26
+ agentName: "myagent",
27
+ });
28
+ const result = resolveAuth();
29
+ expect(result).toEqual({ agentKey: "moltzap_agent_envkey123" });
30
+ });
31
+ it("config apiKey is used when no env var", () => {
32
+ mockConfigFile({
33
+ serverUrl: "wss://test",
34
+ apiKey: "moltzap_agent_configkey",
35
+ agentName: "myagent",
36
+ });
37
+ const result = resolveAuth();
38
+ expect(result).toEqual({ agentKey: "moltzap_agent_configkey" });
39
+ });
40
+ it("throws if no env var and no config apiKey", () => {
41
+ mockConfigFile({ serverUrl: "wss://test" });
42
+ expect(() => resolveAuth()).toThrow("No agent registered");
43
+ });
44
+ it("throws if config file missing", () => {
45
+ // readFileSync throws ENOENT (set in beforeEach)
46
+ expect(() => resolveAuth()).toThrow("No agent registered");
47
+ });
48
+ });
49
+ //# sourceMappingURL=config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/cli/config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,SAAS,cAAc,CAAC,MAAc;IACpC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhC,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACnC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACjD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,GAAG,GAAG,WAAW,CAAC;QAC1B,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,yBAAyB,CAAC;QACxD,cAAc,CAAC;YACb,SAAS,EAAE,YAAY;YACvB,MAAM,EAAE,yBAAyB;YACjC,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,cAAc,CAAC;YACb,SAAS,EAAE,YAAY;YACvB,MAAM,EAAE,yBAAyB;YACjC,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,cAAc,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;QAE5C,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,iDAAiD;QACjD,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { RegisterResult } from "@moltzap/protocol";
2
+ export declare function registerAgent(name: string, inviteCode: string, description?: string): Promise<RegisterResult>;
3
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/cli/http-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAgCxD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,CAOzB"}
@@ -0,0 +1,28 @@
1
+ import { getHttpUrl, resolveAuth } from "./config.js";
2
+ function authHeaders() {
3
+ const { agentKey } = resolveAuth();
4
+ return { "X-API-Key": agentKey };
5
+ }
6
+ async function request(method, path, body, opts) {
7
+ const baseUrl = getHttpUrl();
8
+ const headers = {
9
+ "Content-Type": "application/json",
10
+ };
11
+ if (!opts?.noAuth) {
12
+ Object.assign(headers, authHeaders());
13
+ }
14
+ const res = await fetch(`${baseUrl}${path}`, {
15
+ method,
16
+ headers,
17
+ body: body ? JSON.stringify(body) : undefined,
18
+ });
19
+ if (!res.ok) {
20
+ const text = await res.text();
21
+ throw new Error(`HTTP ${res.status}: ${text}`);
22
+ }
23
+ return (await res.json());
24
+ }
25
+ export async function registerAgent(name, inviteCode, description) {
26
+ return request("POST", "/api/v1/auth/register", { name, inviteCode, description }, { noAuth: true });
27
+ }
28
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/cli/http-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAGtD,SAAS,WAAW;IAClB,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IACnC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,OAAO,CACpB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,IAA2B;IAE3B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;QAC3C,MAAM;QACN,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9C,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,UAAkB,EAClB,WAAoB;IAEpB,OAAO,OAAO,CACZ,MAAM,EACN,uBAAuB,EACvB,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,EACjC,EAAE,MAAM,EAAE,IAAI,EAAE,CACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from "node:module";
3
+ import { Command } from "commander";
4
+ import { registerCommand } from "./commands/register.js";
5
+ import { whoamiCommand } from "./commands/whoami.js";
6
+ import { sendCommand } from "./commands/send.js";
7
+ import { contactsCommand } from "./commands/contacts.js";
8
+ import { conversationsCommand, historyCommand, } from "./commands/conversations.js";
9
+ import { inviteCommand } from "./commands/invite.js";
10
+ import { reactCommand } from "./commands/react.js";
11
+ import { deleteCommand } from "./commands/delete.js";
12
+ import { presenceCommand } from "./commands/presence.js";
13
+ import { pingCommand } from "./commands/ping.js";
14
+ import { statusCommand } from "./commands/status.js";
15
+ import { agentsCommand } from "./commands/agents.js";
16
+ const require = createRequire(import.meta.url);
17
+ const { version } = require("../../package.json");
18
+ const program = new Command();
19
+ program
20
+ .name("moltzap")
21
+ .description("MoltZap CLI — messaging for OpenClaw AI agents")
22
+ .version(version);
23
+ program.addCommand(registerCommand);
24
+ program.addCommand(whoamiCommand);
25
+ program.addCommand(sendCommand);
26
+ program.addCommand(contactsCommand);
27
+ program.addCommand(conversationsCommand);
28
+ program.addCommand(historyCommand);
29
+ program.addCommand(inviteCommand);
30
+ program.addCommand(reactCommand);
31
+ program.addCommand(deleteCommand);
32
+ program.addCommand(presenceCommand);
33
+ program.addCommand(pingCommand);
34
+ program.addCommand(statusCommand);
35
+ program.addCommand(agentsCommand);
36
+ program.parse();
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,oBAAoB,EACpB,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEzE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,gDAAgD,CAAC;KAC7D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACzC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Send a request to the MoltZapService via Unix socket and return the result.
3
+ * Throws if the service is not running or the request fails.
4
+ */
5
+ export declare function request(method: string, params?: Record<string, unknown>, socketPath?: string): Promise<unknown>;
6
+ /**
7
+ * Wrap a Commander action to catch errors and exit cleanly.
8
+ * Commander's .action() accepts (...args: any[]) => void, so the
9
+ * generic signature here just preserves the caller's argument types.
10
+ */
11
+ export declare function action<A extends unknown[]>(fn: (...args: A) => Promise<void>): (...args: A) => void;
12
+ /** Resolve "agent:name" or "agent:<uuid>" to { type, id }. */
13
+ export declare function resolveParticipant(raw: string): Promise<{
14
+ type: string;
15
+ id: string;
16
+ }>;
17
+ export declare function isServiceRunning(): boolean;
18
+ //# sourceMappingURL=socket-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket-client.d.ts","sourceRoot":"","sources":["../../src/cli/socket-client.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,OAAO,CAAC,CA2DlB;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,OAAO,EAAE,EACxC,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAChC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,CAStB;AAKD,8DAA8D;AAC9D,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAYvC;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C"}