@moltzap/client 2026.511.0 → 2026.518.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 (194) hide show
  1. package/dist/auth.d.ts +12 -6
  2. package/dist/auth.d.ts.map +1 -1
  3. package/dist/auth.js +67 -29
  4. package/dist/auth.js.map +1 -1
  5. package/dist/auth.test.js +113 -76
  6. package/dist/auth.test.js.map +1 -1
  7. package/dist/channel-core-context.test.d.ts +2 -0
  8. package/dist/channel-core-context.test.d.ts.map +1 -0
  9. package/dist/channel-core-context.test.js +334 -0
  10. package/dist/channel-core-context.test.js.map +1 -0
  11. package/dist/channel-core-dispatch.test.d.ts +2 -0
  12. package/dist/channel-core-dispatch.test.d.ts.map +1 -0
  13. package/dist/channel-core-dispatch.test.js +550 -0
  14. package/dist/channel-core-dispatch.test.js.map +1 -0
  15. package/dist/channel-core-enrichment.d.ts +8 -0
  16. package/dist/channel-core-enrichment.d.ts.map +1 -0
  17. package/dist/channel-core-enrichment.js +134 -0
  18. package/dist/channel-core-enrichment.js.map +1 -0
  19. package/dist/channel-core-errors.d.ts +20 -0
  20. package/dist/channel-core-errors.d.ts.map +1 -0
  21. package/dist/channel-core-errors.js +12 -0
  22. package/dist/channel-core-errors.js.map +1 -0
  23. package/dist/channel-core-test-support.d.ts +48 -0
  24. package/dist/channel-core-test-support.d.ts.map +1 -0
  25. package/dist/channel-core-test-support.js +111 -0
  26. package/dist/channel-core-test-support.js.map +1 -0
  27. package/dist/channel-core.d.ts +30 -7
  28. package/dist/channel-core.d.ts.map +1 -1
  29. package/dist/channel-core.js +214 -237
  30. package/dist/channel-core.js.map +1 -1
  31. package/dist/channel-core.test.js +216 -1082
  32. package/dist/channel-core.test.js.map +1 -1
  33. package/dist/cli/__tests__/cli-multi-agent.int.test.js +129 -23
  34. package/dist/cli/__tests__/cli-multi-agent.int.test.js.map +1 -1
  35. package/dist/cli/commands/conversations-v2.test.js +64 -54
  36. package/dist/cli/commands/conversations-v2.test.js.map +1 -1
  37. package/dist/cli/commands/conversations.d.ts +5 -5
  38. package/dist/cli/commands/conversations.d.ts.map +1 -1
  39. package/dist/cli/commands/conversations.js +43 -36
  40. package/dist/cli/commands/conversations.js.map +1 -1
  41. package/dist/cli/commands/messages.d.ts +4 -4
  42. package/dist/cli/commands/messages.d.ts.map +1 -1
  43. package/dist/cli/commands/messages.js +4 -4
  44. package/dist/cli/commands/messages.js.map +1 -1
  45. package/dist/cli/commands/messages.test.js +61 -49
  46. package/dist/cli/commands/messages.test.js.map +1 -1
  47. package/dist/cli/commands/ping.d.ts +0 -9
  48. package/dist/cli/commands/ping.d.ts.map +1 -1
  49. package/dist/cli/commands/ping.js +1 -1
  50. package/dist/cli/commands/ping.js.map +1 -1
  51. package/dist/cli/commands/presence.d.ts +1 -1
  52. package/dist/cli/commands/presence.js +1 -1
  53. package/dist/cli/commands/register.d.ts +2 -2
  54. package/dist/cli/commands/register.d.ts.map +1 -1
  55. package/dist/cli/commands/register.js +98 -77
  56. package/dist/cli/commands/register.js.map +1 -1
  57. package/dist/cli/commands/register.test.js +63 -39
  58. package/dist/cli/commands/register.test.js.map +1 -1
  59. package/dist/cli/commands/send.d.ts +6 -6
  60. package/dist/cli/commands/send.js +6 -6
  61. package/dist/cli/commands/send.test.js +32 -28
  62. package/dist/cli/commands/send.test.js.map +1 -1
  63. package/dist/cli/commands/status.d.ts.map +1 -1
  64. package/dist/cli/commands/status.js +3 -4
  65. package/dist/cli/commands/status.js.map +1 -1
  66. package/dist/cli/config.d.ts +0 -2
  67. package/dist/cli/config.d.ts.map +1 -1
  68. package/dist/cli/config.js +86 -76
  69. package/dist/cli/config.js.map +1 -1
  70. package/dist/cli/config.test.js +80 -42
  71. package/dist/cli/config.test.js.map +1 -1
  72. package/dist/cli/index.d.ts +1 -16
  73. package/dist/cli/index.d.ts.map +1 -1
  74. package/dist/cli/index.js +50 -113
  75. package/dist/cli/index.js.map +1 -1
  76. package/dist/cli/process-argv.d.ts +2 -0
  77. package/dist/cli/process-argv.d.ts.map +1 -0
  78. package/dist/cli/process-argv.js +2 -0
  79. package/dist/cli/process-argv.js.map +1 -0
  80. package/dist/cli/profile.d.ts +3 -10
  81. package/dist/cli/profile.d.ts.map +1 -1
  82. package/dist/cli/profile.js +105 -104
  83. package/dist/cli/profile.js.map +1 -1
  84. package/dist/cli/profile.test.js +338 -232
  85. package/dist/cli/profile.test.js.map +1 -1
  86. package/dist/cli/runtime.d.ts +5 -17
  87. package/dist/cli/runtime.d.ts.map +1 -1
  88. package/dist/cli/runtime.js +6 -59
  89. package/dist/cli/runtime.js.map +1 -1
  90. package/dist/cli/socket-client.d.ts +10 -15
  91. package/dist/cli/socket-client.d.ts.map +1 -1
  92. package/dist/cli/socket-client.js +74 -89
  93. package/dist/cli/socket-client.js.map +1 -1
  94. package/dist/cli/transport.d.ts +9 -5
  95. package/dist/cli/transport.d.ts.map +1 -1
  96. package/dist/cli/transport.js +45 -42
  97. package/dist/cli/transport.js.map +1 -1
  98. package/dist/cli/transport.test.js +227 -133
  99. package/dist/cli/transport.test.js.map +1 -1
  100. package/dist/index.d.ts +4 -1
  101. package/dist/index.d.ts.map +1 -1
  102. package/dist/index.js +3 -0
  103. package/dist/index.js.map +1 -1
  104. package/dist/local-daemon-rpc.d.ts +13 -0
  105. package/dist/local-daemon-rpc.d.ts.map +1 -0
  106. package/dist/local-daemon-rpc.js +17 -0
  107. package/dist/local-daemon-rpc.js.map +1 -0
  108. package/dist/local-paths.d.ts +7 -0
  109. package/dist/local-paths.d.ts.map +1 -0
  110. package/dist/local-paths.js +20 -0
  111. package/dist/local-paths.js.map +1 -0
  112. package/dist/runtime/close-info.d.ts +3 -12
  113. package/dist/runtime/close-info.d.ts.map +1 -1
  114. package/dist/runtime/close-info.js +28 -39
  115. package/dist/runtime/close-info.js.map +1 -1
  116. package/dist/runtime/close-info.test.js +77 -70
  117. package/dist/runtime/close-info.test.js.map +1 -1
  118. package/dist/runtime/errors.test.js +42 -28
  119. package/dist/runtime/errors.test.js.map +1 -1
  120. package/dist/runtime/frame.d.ts +4 -31
  121. package/dist/runtime/frame.d.ts.map +1 -1
  122. package/dist/runtime/frame.js +7 -116
  123. package/dist/runtime/frame.js.map +1 -1
  124. package/dist/runtime/frame.test.js +41 -54
  125. package/dist/runtime/frame.test.js.map +1 -1
  126. package/dist/runtime/index.d.ts +7 -0
  127. package/dist/runtime/index.d.ts.map +1 -1
  128. package/dist/runtime/index.js +7 -11
  129. package/dist/runtime/index.js.map +1 -1
  130. package/dist/runtime/local-history.d.ts +67 -0
  131. package/dist/runtime/local-history.d.ts.map +1 -0
  132. package/dist/runtime/local-history.js +77 -0
  133. package/dist/runtime/local-history.js.map +1 -0
  134. package/dist/runtime/local-service-commands.d.ts +19 -0
  135. package/dist/runtime/local-service-commands.d.ts.map +1 -1
  136. package/dist/runtime/local-service-commands.js +23 -0
  137. package/dist/runtime/local-service-commands.js.map +1 -1
  138. package/dist/runtime/local-socket-server.d.ts +20 -0
  139. package/dist/runtime/local-socket-server.d.ts.map +1 -0
  140. package/dist/runtime/local-socket-server.js +94 -0
  141. package/dist/runtime/local-socket-server.js.map +1 -0
  142. package/dist/runtime/refs.d.ts +1 -1
  143. package/dist/runtime/refs.js +1 -1
  144. package/dist/runtime/runtime.test.js +29 -21
  145. package/dist/runtime/runtime.test.js.map +1 -1
  146. package/dist/runtime/service-helpers.d.ts +32 -0
  147. package/dist/runtime/service-helpers.d.ts.map +1 -0
  148. package/dist/runtime/service-helpers.js +85 -0
  149. package/dist/runtime/service-helpers.js.map +1 -0
  150. package/dist/runtime/subscribers.d.ts +13 -17
  151. package/dist/runtime/subscribers.d.ts.map +1 -1
  152. package/dist/runtime/subscribers.js +37 -32
  153. package/dist/runtime/subscribers.js.map +1 -1
  154. package/dist/runtime/subscribers.test.js +139 -131
  155. package/dist/runtime/subscribers.test.js.map +1 -1
  156. package/dist/service-socket-path.test.d.ts +2 -0
  157. package/dist/service-socket-path.test.d.ts.map +1 -0
  158. package/dist/service-socket-path.test.js +87 -0
  159. package/dist/service-socket-path.test.js.map +1 -0
  160. package/dist/service.d.ts +46 -20
  161. package/dist/service.d.ts.map +1 -1
  162. package/dist/service.js +243 -340
  163. package/dist/service.js.map +1 -1
  164. package/dist/service.test.js +650 -571
  165. package/dist/service.test.js.map +1 -1
  166. package/dist/test/index.d.ts +30 -14
  167. package/dist/test/index.d.ts.map +1 -1
  168. package/dist/test/index.js +25 -21
  169. package/dist/test/index.js.map +1 -1
  170. package/dist/test-utils/channel-service-fixture.d.ts +1 -0
  171. package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
  172. package/dist/test-utils/channel-service-fixture.js +139 -98
  173. package/dist/test-utils/channel-service-fixture.js.map +1 -1
  174. package/dist/test-utils/conformance-adapter.d.ts.map +1 -1
  175. package/dist/test-utils/conformance-adapter.js +145 -124
  176. package/dist/test-utils/conformance-adapter.js.map +1 -1
  177. package/dist/test-utils/fake-service.d.ts.map +1 -1
  178. package/dist/test-utils/fake-service.js +3 -3
  179. package/dist/test-utils/fake-service.js.map +1 -1
  180. package/dist/test-utils/index.d.ts +25 -0
  181. package/dist/test-utils/index.d.ts.map +1 -1
  182. package/dist/test-utils/index.js +25 -8
  183. package/dist/test-utils/index.js.map +1 -1
  184. package/dist/ws-client-test-support.d.ts +180 -0
  185. package/dist/ws-client-test-support.d.ts.map +1 -0
  186. package/dist/ws-client-test-support.js +399 -0
  187. package/dist/ws-client-test-support.js.map +1 -0
  188. package/dist/ws-client.d.ts +59 -32
  189. package/dist/ws-client.d.ts.map +1 -1
  190. package/dist/ws-client.js +272 -321
  191. package/dist/ws-client.js.map +1 -1
  192. package/dist/ws-client.test.js +388 -800
  193. package/dist/ws-client.test.js.map +1 -1
  194. package/package.json +14 -10
@@ -1,13 +1,28 @@
1
- import * as fs from "node:fs";
2
- import * as os from "node:os";
3
- import * as path from "node:path";
4
1
  import { Args, Command, Options } from "@effect/cli";
5
- import { Effect, Option } from "effect";
2
+ import { FileSystem } from "@effect/platform";
3
+ import { NodeFileSystem } from "@effect/platform-node";
4
+ import { Effect, Either, Option } from "effect";
5
+ import { getOpenClawConfigDir, getOpenClawConfigPath, } from "../../local-paths.js";
6
6
  import { getServerUrl, updateConfig } from "../config.js";
7
7
  import { registerAgent } from "../http-client.js";
8
8
  import { emitNoPersist, parseProfileName, writeProfile, } from "../profile.js";
9
9
  const NAME_PATTERN = /^[a-z0-9][a-z0-9-]{1,30}[a-z0-9]$/;
10
10
  const JSON_INDENT_SPACES = 2;
11
+ function parseOpenClawConfig(contents) {
12
+ return Effect.try({
13
+ try: () => JSON.parse(contents),
14
+ catch: (err) => err,
15
+ });
16
+ }
17
+ function readExistingOpenClawConfig(fileSystem, configPath) {
18
+ return fileSystem.exists(configPath).pipe(Effect.flatMap((exists) => {
19
+ if (!exists)
20
+ return Effect.succeed({});
21
+ return fileSystem
22
+ .readFileString(configPath, "utf-8")
23
+ .pipe(Effect.flatMap(parseOpenClawConfig));
24
+ }));
25
+ }
11
26
  /**
12
27
  * Write channel config directly to the OpenClaw JSON file.
13
28
  * Avoids `openclaw config set` which triggers both a file-watcher restart
@@ -18,42 +33,38 @@ const JSON_INDENT_SPACES = 2;
18
33
  * Per architect design rev 4 finding 2, this side effect is gated by the
19
34
  * caller: `--no-persist` skips this call entirely (Invariant §4.4).
20
35
  */
21
- const writeOpenClawChannelConfig = (account) => Effect.try({
22
- try: () => {
23
- const configDir = path.join(os.homedir(), ".openclaw");
24
- const configPath = path.join(configDir, "openclaw.json");
25
- let config = {};
26
- try {
27
- config = JSON.parse(fs.readFileSync(configPath, "utf-8"));
28
- }
29
- catch (err) {
30
- const code = err.code;
31
- if (code !== "ENOENT") {
32
- console.warn(`moltzap: existing openclaw.json unreadable, starting fresh: ${err instanceof Error ? err.message : String(err)}`);
33
- }
34
- }
35
- const channels = config.channels ?? {};
36
- channels.moltzap = {
37
- accounts: [{ id: "default", ...account }],
38
- };
39
- config.channels = channels;
40
- fs.mkdirSync(configDir, { recursive: true });
41
- fs.writeFileSync(configPath, JSON.stringify(config, null, JSON_INDENT_SPACES) + "\n");
42
- },
43
- catch: (err) => (err instanceof Error ? err : new Error(String(err))),
44
- });
36
+ const writeOpenClawChannelConfig = (account) => Effect.gen(function* () {
37
+ const fileSystem = yield* FileSystem.FileSystem;
38
+ const configDir = getOpenClawConfigDir();
39
+ const configPath = getOpenClawConfigPath();
40
+ let config = {};
41
+ const existingConfig = yield* readExistingOpenClawConfig(fileSystem, configPath).pipe(Effect.either);
42
+ yield* Either.match(existingConfig, {
43
+ onLeft: (err) => Effect.logWarning(`moltzap: existing openclaw.json unreadable, starting fresh: ${err instanceof Error ? err.message : String(err)}`),
44
+ onRight: (value) => Effect.sync(() => {
45
+ config = value;
46
+ }),
47
+ });
48
+ const channels = config.channels ?? {};
49
+ channels.moltzap = {
50
+ accounts: [{ id: "default", ...account }],
51
+ };
52
+ config.channels = channels;
53
+ yield* fileSystem.makeDirectory(configDir, { recursive: true });
54
+ yield* fileSystem.writeFileString(configPath, JSON.stringify(config, null, JSON_INDENT_SPACES) + "\n");
55
+ }).pipe(Effect.provide(NodeFileSystem.layer), Effect.either, Effect.flatMap(Either.match({
56
+ onLeft: (err) => Effect.fail(err instanceof Error ? err : new Error(String(err))),
57
+ onRight: (value) => Effect.succeed(value),
58
+ })));
45
59
  const nameArg = Args.text({ name: "name" }).pipe(Args.withDescription("Agent name (lowercase alphanumeric, 3-32 chars)"));
46
60
  const inviteCodeArg = Args.text({ name: "invite-code" }).pipe(Args.withDescription("Invite code from your invite URL"));
47
61
  const descriptionOption = Options.text("description").pipe(Options.withAlias("d"), Options.withDescription("Agent description"), Options.optional);
48
62
  // Spec sbd#177 rev 3 §5.2 barrel edits: --profile and --no-persist.
49
63
  //
50
- // NOTE on `--profile` routing: `register` is the ONE subcommand that
51
- // consumes `--profile` locally rather than letting `extractGlobalFlags`
52
- // (cli/index.ts) swallow it for transport selection. Reason: register
53
- // writes a NEW profile, so the named profile does not yet exist and the
54
- // transport resolver would reject it as missing. `extractGlobalFlags`
55
- // detects this case by inspecting argv for the `register` leaf and leaves
56
- // `--profile` in argv; `@effect/cli` binds it here.
64
+ // NOTE on `--profile` routing: `register` consumes `--profile` locally because
65
+ // it writes a NEW profile. Parent-level `moltzap --profile <name>` still means
66
+ // "load an existing profile" for transport selection, and would reject the new
67
+ // profile before this command could create it.
57
68
  const profileOption = Options.text("profile").pipe(Options.withDescription("Named profile to register under. Writes the new apiKey to " +
58
69
  "`profiles.<name>` in ~/.moltzap/config.json. Omit to overwrite the " +
59
70
  "legacy top-level record (the default profile). Other subcommands " +
@@ -63,15 +74,59 @@ const noPersistFlag = Options.boolean("no-persist").pipe(Options.withDescription
63
74
  "~/.openclaw/openclaw.json. Prints the apiKey and claim URL to stdout " +
64
75
  "so the caller can capture them (e.g. into an env var for use with " +
65
76
  "`--as $KEY`) without mutating either config tree."));
77
+ function invalidAgentName(name) {
78
+ return Effect.sync(() => {
79
+ console.error(`Invalid agent name "${name}". Must be 3-32 chars, lowercase alphanumeric and hyphens, cannot start or end with a hyphen.`);
80
+ process.exit(1);
81
+ });
82
+ }
83
+ function profileRecordFrom(name, result, serverUrl) {
84
+ return {
85
+ apiKey: result.apiKey,
86
+ agentName: name,
87
+ serverUrl,
88
+ registeredAt: new Date().toISOString(),
89
+ };
90
+ }
91
+ function printNoPersistRegistration(name, result, emitted) {
92
+ console.log(`Agent "${name}" registered (not persisted).`);
93
+ console.log(` Agent ID: ${result.agentId}`);
94
+ console.log(` API Key: ${emitted.record.apiKey}`);
95
+ console.log(` Server URL: ${emitted.record.serverUrl}`);
96
+ console.log(` Claim URL: ${result.claimUrl}`);
97
+ console.log("\nShare the claim URL with the agent's owner to verify ownership.");
98
+ }
99
+ function printPersistedRegistration(name, result, serverUrl) {
100
+ console.log(`Agent "${name}" registered and channel configured.`);
101
+ console.log(` Agent ID: ${result.agentId}`);
102
+ console.log(` API Key: ${result.apiKey}`);
103
+ console.log(` Server URL: ${serverUrl}`);
104
+ console.log(` Claim URL: ${result.claimUrl}`);
105
+ console.log("\nShare the claim URL with the agent's owner to verify ownership.");
106
+ }
107
+ function persistRegistration({ profile, record, result, serverUrl, name, }) {
108
+ if (Option.isSome(profile)) {
109
+ return parseProfileName(profile.value).pipe(Effect.flatMap((profileName) => writeProfile(profileName, record)));
110
+ }
111
+ return updateConfig(() => ({
112
+ serverUrl,
113
+ apiKey: result.apiKey,
114
+ agentName: name,
115
+ })).pipe(Effect.zipRight(writeOpenClawChannelConfig({
116
+ apiKey: result.apiKey,
117
+ serverUrl,
118
+ agentName: name,
119
+ })));
120
+ }
66
121
  /**
67
- * `moltzap register <name> <invite-code> [-d description] [--profile <name>] [--no-persist]`
122
+ * `moltzap register &lt;name> &lt;invite-code> [-d description] [--profile &lt;name>] [--no-persist]`
68
123
  *
69
124
  * POST /api/v1/auth/register, then (by default) persist the result into
70
125
  * both `~/.moltzap/config.json` and the OpenClaw channel config so the
71
126
  * channel picks it up on its next file-watcher cycle.
72
127
  *
73
128
  * Spec §5.2 extensions:
74
- * --profile <name> write under `profiles.<name>` instead of legacy top-level
129
+ * --profile &lt;name> write under `profiles.&lt;name>` instead of legacy top-level
75
130
  * --no-persist print result to stdout only; NO writes to either tree
76
131
  *
77
132
  * `--no-persist` gates BOTH the `~/.moltzap/config.json` write AND the
@@ -86,56 +141,22 @@ export const registerCommand = Command.make("register", {
86
141
  noPersist: noPersistFlag,
87
142
  }, ({ name, inviteCode, description, profile, noPersist }) => {
88
143
  if (!NAME_PATTERN.test(name)) {
89
- return Effect.sync(() => {
90
- console.error(`Invalid agent name "${name}". Must be 3-32 chars, lowercase alphanumeric and hyphens, cannot start or end with a hyphen.`);
91
- process.exit(1);
92
- });
144
+ return invalidAgentName(name);
93
145
  }
94
146
  const desc = Option.isSome(description) ? description.value : undefined;
95
147
  return Effect.gen(function* () {
96
148
  const result = yield* registerAgent(name, inviteCode, desc);
97
149
  const serverUrl = yield* getServerUrl;
98
- const record = {
99
- apiKey: result.apiKey,
100
- agentName: name,
101
- serverUrl,
102
- registeredAt: new Date().toISOString(),
103
- };
150
+ const record = profileRecordFrom(name, result, serverUrl);
104
151
  if (noPersist) {
105
152
  // Invariant §4.4: no writes to ~/.moltzap/ or ~/.openclaw/.
106
153
  const emitted = yield* emitNoPersist(record);
107
- console.log(`Agent "${name}" registered (not persisted).`);
108
- console.log(` Agent ID: ${result.agentId}`);
109
- console.log(` API Key: ${emitted.record.apiKey}`);
110
- console.log(` Server URL: ${emitted.record.serverUrl}`);
111
- console.log(` Claim URL: ${result.claimUrl}`);
112
- console.log(`\nShare the claim URL with the agent's owner to verify ownership.`);
154
+ printNoPersistRegistration(name, result, emitted);
113
155
  return;
114
156
  }
115
- if (Option.isSome(profile)) {
116
- const profileName = yield* parseProfileName(profile.value);
117
- yield* writeProfile(profileName, record);
118
- }
119
- else {
120
- // Legacy top-level persistence path (unchanged).
121
- yield* updateConfig(() => ({
122
- serverUrl,
123
- apiKey: result.apiKey,
124
- agentName: name,
125
- }));
126
- yield* writeOpenClawChannelConfig({
127
- apiKey: result.apiKey,
128
- serverUrl,
129
- agentName: name,
130
- });
131
- }
132
- console.log(`Agent "${name}" registered and channel configured.`);
133
- console.log(` Agent ID: ${result.agentId}`);
134
- console.log(` API Key: ${result.apiKey}`);
135
- console.log(` Server URL: ${serverUrl}`);
136
- console.log(` Claim URL: ${result.claimUrl}`);
137
- console.log(`\nShare the claim URL with the agent's owner to verify ownership.`);
138
- }).pipe(Effect.catchAll((err) => Effect.sync(() => {
157
+ yield* persistRegistration({ profile, record, result, serverUrl, name });
158
+ printPersistedRegistration(name, result, serverUrl);
159
+ }).pipe(Effect.withSpan("registerCommand"), Effect.catchAll((err) => Effect.sync(() => {
139
160
  const msg = err instanceof Error ? err.message : String(err);
140
161
  console.error(`Registration failed: ${msg}`);
141
162
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/cli/commands/register.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,23 @@
1
- import { Effect, Option } from "effect";
2
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
1
+ import { Data, Effect, Option } from "effect";
2
+ import { it as effectIt } from "@effect/vitest";
3
+ import { afterEach, beforeEach, describe, expect, vi } from "vitest";
3
4
  import { registerCommand } from "./register.js";
5
+ const it = effectIt.effect;
6
+ const AGENT_NAME = "my-agent";
7
+ const INVITE_CODE = "inv_abc123";
8
+ const BAD_INVITE_CODE = "inv_bad";
9
+ const DESCRIPTION = "A test agent";
10
+ const AGENT_ID = "agent-123";
11
+ const API_KEY = "moltzap_agent_testkey";
12
+ const CLAIM_URL = "https://moltzap.xyz/claim/tok_abc";
13
+ class RegisterTestFailure extends Data.TaggedError("RegisterTestFailure") {
14
+ }
4
15
  const mockRegisterAgent = vi.fn();
5
16
  vi.mock("../http-client.js", () => ({
6
- registerAgent: (name, inviteCode, description) => mockRegisterAgent(name, inviteCode, description),
17
+ registerAgent: (name, inviteCode, description) => {
18
+ const resolvedDescription = description;
19
+ return mockRegisterAgent(name, inviteCode, resolvedDescription);
20
+ },
7
21
  }));
8
22
  vi.mock("../config.js", () => ({
9
23
  updateConfig: vi.fn(() => Effect.void),
@@ -18,50 +32,60 @@ vi.mock("node:fs", () => ({
18
32
  writeFileSync: vi.fn(),
19
33
  mkdirSync: vi.fn(),
20
34
  }));
35
+ function registerHandlerInput(description) {
36
+ return {
37
+ name: AGENT_NAME,
38
+ inviteCode: INVITE_CODE,
39
+ description,
40
+ profile: Option.none(),
41
+ noPersist: false,
42
+ };
43
+ }
44
+ function successfulRegistration() {
45
+ return Effect.succeed({
46
+ agentId: AGENT_ID,
47
+ apiKey: API_KEY,
48
+ claimUrl: CLAIM_URL,
49
+ });
50
+ }
51
+ function failedRegistration() {
52
+ return Effect.fail(new RegisterTestFailure({ message: "Invalid invite code" }));
53
+ }
54
+ function passThroughWithoutDescription() {
55
+ return Effect.gen(function* () {
56
+ yield* registerCommand.handler(registerHandlerInput(Option.none()));
57
+ expect(mockRegisterAgent).toHaveBeenCalledWith(AGENT_NAME, INVITE_CODE, undefined);
58
+ });
59
+ }
60
+ function forwardsDescription() {
61
+ return Effect.gen(function* () {
62
+ yield* registerCommand.handler(registerHandlerInput(Option.some(DESCRIPTION)));
63
+ expect(mockRegisterAgent).toHaveBeenCalledWith(AGENT_NAME, INVITE_CODE, DESCRIPTION);
64
+ });
65
+ }
66
+ function exitsOnRegistrationFailure() {
67
+ return Effect.gen(function* () {
68
+ mockRegisterAgent.mockImplementationOnce(failedRegistration);
69
+ yield* registerCommand.handler({
70
+ ...registerHandlerInput(Option.none()),
71
+ inviteCode: BAD_INVITE_CODE,
72
+ description: Option.none(),
73
+ });
74
+ expect(process.exit).toHaveBeenCalledWith(1);
75
+ });
76
+ }
21
77
  describe("register command handler", () => {
22
78
  const originalExit = process.exit;
23
79
  beforeEach(() => {
24
80
  vi.clearAllMocks();
25
81
  process.exit = vi.fn();
26
- mockRegisterAgent.mockImplementation(() => Effect.succeed({
27
- agentId: "agent-123",
28
- apiKey: "moltzap_agent_testkey",
29
- claimUrl: "https://moltzap.xyz/claim/tok_abc",
30
- }));
82
+ mockRegisterAgent.mockImplementation(successfulRegistration);
31
83
  });
32
84
  afterEach(() => {
33
85
  process.exit = originalExit;
34
86
  });
35
- it("passes name, inviteCode, and description through", async () => {
36
- await Effect.runPromise(registerCommand.handler({
37
- name: "my-agent",
38
- inviteCode: "inv_abc123",
39
- description: Option.none(),
40
- profile: Option.none(),
41
- noPersist: false,
42
- }));
43
- expect(mockRegisterAgent).toHaveBeenCalledWith("my-agent", "inv_abc123", undefined);
44
- });
45
- it("forwards description option when provided", async () => {
46
- await Effect.runPromise(registerCommand.handler({
47
- name: "my-agent",
48
- inviteCode: "inv_abc123",
49
- description: Option.some("A test agent"),
50
- profile: Option.none(),
51
- noPersist: false,
52
- }));
53
- expect(mockRegisterAgent).toHaveBeenCalledWith("my-agent", "inv_abc123", "A test agent");
54
- });
55
- it("exits with error on registration failure", async () => {
56
- mockRegisterAgent.mockImplementationOnce(() => Effect.fail(new Error("Invalid invite code")));
57
- await Effect.runPromise(registerCommand.handler({
58
- name: "my-agent",
59
- inviteCode: "inv_bad",
60
- description: Option.none(),
61
- profile: Option.none(),
62
- noPersist: false,
63
- }));
64
- expect(process.exit).toHaveBeenCalledWith(1);
65
- });
87
+ it("passes name, inviteCode, and description through", passThroughWithoutDescription);
88
+ it("forwards description option when provided", forwardsDescription);
89
+ it("exits with error on registration failure", exitsOnRegistrationFailure);
66
90
  });
67
91
  //# sourceMappingURL=register.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"register.test.js","sourceRoot":"","sources":["../../../src/cli/commands/register.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.test.js","sourceRoot":"","sources":["../../../src/cli/commands/register.test.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,20 @@
1
1
  import { Command } from "@effect/cli";
2
2
  import { Option } from "effect";
3
3
  /**
4
- * `moltzap send <target> <message> [--reply-to <id>]` — socket-call into
4
+ * `moltzap send &lt;target> &lt;message> [--reply-to &lt;id>]` — socket-call into
5
5
  * the local MoltZapService to enqueue an outbound message. `conv:` prefix
6
6
  * addresses a conversation id directly; otherwise `target` is passed as a
7
- * string the service resolves (typically `agent:<name>` for direct messages
7
+ * string the service resolves (typically `agent:&lt;name>` for direct messages
8
8
  * or a bare contact name the service resolves against the caller's roster).
9
9
  *
10
- * Identity selection is driven by the GLOBAL flags pre-parsed in
11
- * `cli/index.ts` before @effect/cli sees argv (see `extractGlobalFlags`):
10
+ * Identity selection is driven by the parent `@effect/cli` options wired in
11
+ * `cli/index.ts`:
12
12
  *
13
- * --as <apiKey> Send as the agent owning the given API key.
13
+ * --as &lt;apiKey> Send as the agent owning the given API key.
14
14
  * Bypasses the local daemon socket; dials the server
15
15
  * directly. Useful in multi-agent workflows where
16
16
  * the same host registers more than one agent.
17
- * --profile <name> Load the named profile from ~/.moltzap/config.json
17
+ * --profile &lt;name> Load the named profile from ~/.moltzap/config.json
18
18
  * and send as that agent. Short for looking up the
19
19
  * apiKey out of the profile and passing it as --as.
20
20
  *
@@ -7,20 +7,20 @@ const targetArg = Args.text({ name: "target" }).pipe(Args.withDescription("Targe
7
7
  const messageArg = Args.text({ name: "message" }).pipe(Args.withDescription("Message text"));
8
8
  const replyToOption = Options.text("reply-to").pipe(Options.withDescription("Reply to a specific message"), Options.optional);
9
9
  /**
10
- * `moltzap send <target> <message> [--reply-to <id>]` — socket-call into
10
+ * `moltzap send &lt;target> &lt;message> [--reply-to &lt;id>]` — socket-call into
11
11
  * the local MoltZapService to enqueue an outbound message. `conv:` prefix
12
12
  * addresses a conversation id directly; otherwise `target` is passed as a
13
- * string the service resolves (typically `agent:<name>` for direct messages
13
+ * string the service resolves (typically `agent:&lt;name>` for direct messages
14
14
  * or a bare contact name the service resolves against the caller's roster).
15
15
  *
16
- * Identity selection is driven by the GLOBAL flags pre-parsed in
17
- * `cli/index.ts` before @effect/cli sees argv (see `extractGlobalFlags`):
16
+ * Identity selection is driven by the parent `@effect/cli` options wired in
17
+ * `cli/index.ts`:
18
18
  *
19
- * --as <apiKey> Send as the agent owning the given API key.
19
+ * --as &lt;apiKey> Send as the agent owning the given API key.
20
20
  * Bypasses the local daemon socket; dials the server
21
21
  * directly. Useful in multi-agent workflows where
22
22
  * the same host registers more than one agent.
23
- * --profile <name> Load the named profile from ~/.moltzap/config.json
23
+ * --profile &lt;name> Load the named profile from ~/.moltzap/config.json
24
24
  * and send as that agent. Short for looking up the
25
25
  * apiKey out of the profile and passing it as --as.
26
26
  *
@@ -1,15 +1,21 @@
1
1
  import { Effect, Option } from "effect";
2
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
+ import { it as effectIt } from "@effect/vitest";
3
+ import { afterEach, beforeEach, describe, expect, vi } from "vitest";
3
4
  import { sendCommand } from "./send.js";
4
5
  import { MessagesSend } from "@moltzap/protocol";
6
+ const it = effectIt.effect;
7
+ const CONV_UUID = "00000000-0000-4000-8000-00000000abc1";
8
+ const REPLY_MSG = "00000000-0000-4000-8000-0000000000a1";
9
+ const HELLO_WORLD = "Hello world";
10
+ const HI_ALICE = "Hi Alice";
11
+ const REPLY_TEXT = "Reply text";
5
12
  const mockRequest = vi.fn(() => Effect.succeed({ message: { id: "msg-123" } }));
6
- vi.mock("../socket-client.js", async (importOriginal) => {
7
- const actual = await importOriginal();
8
- return {
9
- ...actual,
10
- request: (...args) => mockRequest(...args),
11
- };
12
- });
13
+ vi.mock("../socket-client.js", () => ({
14
+ request: (...args) => mockRequest(...args),
15
+ }));
16
+ function runSendCommand(input) {
17
+ return sendCommand.handler(input);
18
+ }
13
19
  describe("send command handler", () => {
14
20
  const originalExit = process.exit;
15
21
  beforeEach(() => {
@@ -20,41 +26,39 @@ describe("send command handler", () => {
20
26
  afterEach(() => {
21
27
  process.exit = originalExit;
22
28
  });
23
- const CONV_UUID = "00000000-0000-4000-8000-00000000abc1";
24
- it("sends to conversation by conv: prefix", async () => {
25
- await Effect.runPromise(sendCommand.handler({
29
+ it("sends to conversation by conv: prefix", () => Effect.gen(function* () {
30
+ yield* runSendCommand({
26
31
  target: `conv:${CONV_UUID}`,
27
- message: "Hello world",
32
+ message: HELLO_WORLD,
28
33
  replyTo: Option.none(),
29
- }));
34
+ });
30
35
  expect(mockRequest).toHaveBeenCalledWith(MessagesSend, {
31
36
  conversationId: CONV_UUID,
32
- parts: [{ type: "text", text: "Hello world" }],
37
+ parts: [{ type: "text", text: HELLO_WORLD }],
33
38
  });
34
- });
35
- it("sends to agent target without conv: prefix", async () => {
36
- await Effect.runPromise(sendCommand.handler({
39
+ }));
40
+ it("sends to agent target without conv: prefix", () => Effect.gen(function* () {
41
+ yield* runSendCommand({
37
42
  target: "agent:alice",
38
- message: "Hi Alice",
43
+ message: HI_ALICE,
39
44
  replyTo: Option.none(),
40
- }));
45
+ });
41
46
  expect(mockRequest).toHaveBeenCalledWith(MessagesSend, {
42
47
  to: "agent:alice",
43
- parts: [{ type: "text", text: "Hi Alice" }],
48
+ parts: [{ type: "text", text: HI_ALICE }],
44
49
  });
45
- });
46
- it("includes replyToId when --reply-to is provided", async () => {
47
- const REPLY_MSG = "00000000-0000-4000-8000-0000000000a1";
48
- await Effect.runPromise(sendCommand.handler({
50
+ }));
51
+ it("includes replyToId when --reply-to is provided", () => Effect.gen(function* () {
52
+ yield* runSendCommand({
49
53
  target: `conv:${CONV_UUID}`,
50
- message: "Reply text",
54
+ message: REPLY_TEXT,
51
55
  replyTo: Option.some(REPLY_MSG),
52
- }));
56
+ });
53
57
  expect(mockRequest).toHaveBeenCalledWith(MessagesSend, {
54
58
  conversationId: CONV_UUID,
55
- parts: [{ type: "text", text: "Reply text" }],
59
+ parts: [{ type: "text", text: REPLY_TEXT }],
56
60
  replyToId: REPLY_MSG,
57
61
  });
58
- });
62
+ }));
59
63
  });
60
64
  //# sourceMappingURL=send.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"send.test.js","sourceRoot":"","sources":["../../../src/cli/commands/send.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send.test.js","sourceRoot":"","sources":["../../../src/cli/commands/send.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAUtC;;;GAGG;AACH,eAAO,MAAM,aAAa,6CAsBzB,CAAC"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAItC;;;GAGG;AACH,eAAO,MAAM,aAAa,6CAqBzB,CAAC"}
@@ -6,10 +6,9 @@ import { LocalServiceCommands, requestLocalService } from "../socket-client.js";
6
6
  * agent id, live connection state, and conversation count.
7
7
  */
8
8
  export const statusCommand = Command.make("status", {}, () => requestLocalService(LocalServiceCommands.Status).pipe(Effect.tap((result) => Effect.sync(() => {
9
- const r = result;
10
- console.log(`Agent ID: ${r.agentId ?? "none"}`);
11
- console.log(`Connected: ${r.connected}`);
12
- console.log(`Conversations: ${r.conversations}`);
9
+ console.log(`Agent ID: ${result.agentId ?? "none"}`);
10
+ console.log(`Connected: ${result.connected}`);
11
+ console.log(`Conversations: ${result.conversations}`);
13
12
  })), Effect.asVoid, Effect.catchAll((err) => Effect.sync(() => {
14
13
  console.error(`Failed: ${err.message}`);
15
14
  process.exit(1);
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQhF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAC3D,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,CACnD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACpB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;IACf,MAAM,CAAC,GAAG,MAAsB,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC,CACH,EACD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CACtB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CACH,CACF,CACF,CAAC,IAAI,CACJ,OAAO,CAAC,eAAe,CACrB,uDAAuD,CACxD,CACF,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAC3D,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,IAAI,CACnD,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACpB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;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,EACD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CACtB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;IACf,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CACH,CACF,CACF,CAAC,IAAI,CACJ,OAAO,CAAC,eAAe,CACrB,uDAAuD,CACxD,CACF,CAAC"}
@@ -52,8 +52,6 @@ export declare function getConfigPath(): string;
52
52
  * failures so callers see them instead of getting silent defaults.
53
53
  */
54
54
  export declare const loadConfig: Effect.Effect<MoltZapConfig, ConfigReadError | ConfigInvalidError>;
55
- /** Write a new config blob to disk. Used by `moltzap register` post-registration. */
56
- export declare const writeConfig: (config: MoltZapConfig) => Effect.Effect<void, ConfigWriteError>;
57
55
  /** Load-modify-write helper. */
58
56
  export declare const updateConfig: (updater: (config: MoltZapConfig) => MoltZapConfig) => Effect.Effect<void, ConfigInvalidError | ConfigReadError | ConfigWriteError>;
59
57
  /** WebSocket server URL (env-overridable). */