@moltzap/client 2026.414.0 → 2026.425.1

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 (215) hide show
  1. package/dist/channel-core.d.ts +28 -15
  2. package/dist/channel-core.d.ts.map +1 -1
  3. package/dist/channel-core.js +113 -74
  4. package/dist/channel-core.js.map +1 -1
  5. package/dist/channel-core.test.js +126 -34
  6. package/dist/channel-core.test.js.map +1 -1
  7. package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts +2 -0
  8. package/dist/cli/__tests__/cli-multi-agent.int.test.d.ts.map +1 -0
  9. package/dist/cli/__tests__/cli-multi-agent.int.test.js +26 -0
  10. package/dist/cli/__tests__/cli-multi-agent.int.test.js.map +1 -0
  11. package/dist/cli/commands/agents.d.ts +13 -2
  12. package/dist/cli/commands/agents.d.ts.map +1 -1
  13. package/dist/cli/commands/agents.js +30 -18
  14. package/dist/cli/commands/agents.js.map +1 -1
  15. package/dist/cli/commands/apps.d.ts +96 -0
  16. package/dist/cli/commands/apps.d.ts.map +1 -0
  17. package/dist/cli/commands/apps.js +193 -0
  18. package/dist/cli/commands/apps.js.map +1 -0
  19. package/dist/cli/commands/apps.test.d.ts +2 -0
  20. package/dist/cli/commands/apps.test.d.ts.map +1 -0
  21. package/dist/cli/commands/apps.test.js +220 -0
  22. package/dist/cli/commands/apps.test.js.map +1 -0
  23. package/dist/cli/commands/contacts.d.ts +18 -2
  24. package/dist/cli/commands/contacts.d.ts.map +1 -1
  25. package/dist/cli/commands/contacts.js +44 -52
  26. package/dist/cli/commands/contacts.js.map +1 -1
  27. package/dist/cli/commands/conversations-v2.test.d.ts +2 -0
  28. package/dist/cli/commands/conversations-v2.test.d.ts.map +1 -0
  29. package/dist/cli/commands/conversations-v2.test.js +92 -0
  30. package/dist/cli/commands/conversations-v2.test.js.map +1 -0
  31. package/dist/cli/commands/conversations.d.ts +73 -3
  32. package/dist/cli/commands/conversations.d.ts.map +1 -1
  33. package/dist/cli/commands/conversations.js +157 -108
  34. package/dist/cli/commands/conversations.js.map +1 -1
  35. package/dist/cli/commands/invite.d.ts +6 -2
  36. package/dist/cli/commands/invite.d.ts.map +1 -1
  37. package/dist/cli/commands/invite.js +8 -6
  38. package/dist/cli/commands/invite.js.map +1 -1
  39. package/dist/cli/commands/messages.d.ts +48 -0
  40. package/dist/cli/commands/messages.d.ts.map +1 -0
  41. package/dist/cli/commands/messages.js +68 -0
  42. package/dist/cli/commands/messages.js.map +1 -0
  43. package/dist/cli/commands/messages.test.d.ts +2 -0
  44. package/dist/cli/commands/messages.test.d.ts.map +1 -0
  45. package/dist/cli/commands/messages.test.js +73 -0
  46. package/dist/cli/commands/messages.test.js.map +1 -0
  47. package/dist/cli/commands/permissions.d.ts +66 -0
  48. package/dist/cli/commands/permissions.d.ts.map +1 -0
  49. package/dist/cli/commands/permissions.js +101 -0
  50. package/dist/cli/commands/permissions.js.map +1 -0
  51. package/dist/cli/commands/permissions.test.d.ts +2 -0
  52. package/dist/cli/commands/permissions.test.d.ts.map +1 -0
  53. package/dist/cli/commands/permissions.test.js +126 -0
  54. package/dist/cli/commands/permissions.test.js.map +1 -0
  55. package/dist/cli/commands/ping.d.ts +6 -2
  56. package/dist/cli/commands/ping.d.ts.map +1 -1
  57. package/dist/cli/commands/ping.js +21 -20
  58. package/dist/cli/commands/ping.js.map +1 -1
  59. package/dist/cli/commands/presence.d.ts +10 -2
  60. package/dist/cli/commands/presence.d.ts.map +1 -1
  61. package/dist/cli/commands/presence.js +27 -15
  62. package/dist/cli/commands/presence.js.map +1 -1
  63. package/dist/cli/commands/register.d.ts +24 -2
  64. package/dist/cli/commands/register.d.ts.map +1 -1
  65. package/dist/cli/commands/register.js +123 -47
  66. package/dist/cli/commands/register.js.map +1 -1
  67. package/dist/cli/commands/register.test.js +45 -27
  68. package/dist/cli/commands/register.test.js.map +1 -1
  69. package/dist/cli/commands/send.d.ts +43 -2
  70. package/dist/cli/commands/send.d.ts.map +1 -1
  71. package/dist/cli/commands/send.js +55 -13
  72. package/dist/cli/commands/send.js.map +1 -1
  73. package/dist/cli/commands/send.test.js +20 -19
  74. package/dist/cli/commands/send.test.js.map +1 -1
  75. package/dist/cli/commands/status.d.ts +6 -2
  76. package/dist/cli/commands/status.d.ts.map +1 -1
  77. package/dist/cli/commands/status.js +16 -10
  78. package/dist/cli/commands/status.js.map +1 -1
  79. package/dist/cli/commands/whoami.d.ts +7 -2
  80. package/dist/cli/commands/whoami.d.ts.map +1 -1
  81. package/dist/cli/commands/whoami.js +13 -7
  82. package/dist/cli/commands/whoami.js.map +1 -1
  83. package/dist/cli/config.d.ts +24 -8
  84. package/dist/cli/config.d.ts.map +1 -1
  85. package/dist/cli/config.js +65 -39
  86. package/dist/cli/config.js.map +1 -1
  87. package/dist/cli/config.test.js +12 -10
  88. package/dist/cli/config.test.js.map +1 -1
  89. package/dist/cli/http-client.d.ts +6 -2
  90. package/dist/cli/http-client.d.ts.map +1 -1
  91. package/dist/cli/http-client.js +25 -24
  92. package/dist/cli/http-client.js.map +1 -1
  93. package/dist/cli/index.d.ts +16 -1
  94. package/dist/cli/index.d.ts.map +1 -1
  95. package/dist/cli/index.js +160 -27
  96. package/dist/cli/index.js.map +1 -1
  97. package/dist/cli/profile.d.ts +134 -0
  98. package/dist/cli/profile.d.ts.map +1 -0
  99. package/dist/cli/profile.js +217 -0
  100. package/dist/cli/profile.js.map +1 -0
  101. package/dist/cli/profile.test.d.ts +2 -0
  102. package/dist/cli/profile.test.d.ts.map +1 -0
  103. package/dist/cli/profile.test.js +263 -0
  104. package/dist/cli/profile.test.js.map +1 -0
  105. package/dist/cli/runtime.d.ts +34 -0
  106. package/dist/cli/runtime.d.ts.map +1 -0
  107. package/dist/cli/runtime.js +94 -0
  108. package/dist/cli/runtime.js.map +1 -0
  109. package/dist/cli/socket-client.d.ts +15 -12
  110. package/dist/cli/socket-client.d.ts.map +1 -1
  111. package/dist/cli/socket-client.js +72 -75
  112. package/dist/cli/socket-client.js.map +1 -1
  113. package/dist/cli/transport.d.ts +181 -0
  114. package/dist/cli/transport.d.ts.map +1 -0
  115. package/dist/cli/transport.js +324 -0
  116. package/dist/cli/transport.js.map +1 -0
  117. package/dist/cli/transport.test.d.ts +2 -0
  118. package/dist/cli/transport.test.d.ts.map +1 -0
  119. package/dist/cli/transport.test.js +197 -0
  120. package/dist/cli/transport.test.js.map +1 -0
  121. package/dist/index.d.ts +6 -2
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +1 -0
  124. package/dist/index.js.map +1 -1
  125. package/dist/runtime/close-info.d.ts +94 -0
  126. package/dist/runtime/close-info.d.ts.map +1 -0
  127. package/dist/runtime/close-info.js +109 -0
  128. package/dist/runtime/close-info.js.map +1 -0
  129. package/dist/runtime/close-info.test.d.ts +2 -0
  130. package/dist/runtime/close-info.test.d.ts.map +1 -0
  131. package/dist/runtime/close-info.test.js +102 -0
  132. package/dist/runtime/close-info.test.js.map +1 -0
  133. package/dist/runtime/errors.d.ts +47 -0
  134. package/dist/runtime/errors.d.ts.map +1 -0
  135. package/dist/runtime/errors.js +20 -0
  136. package/dist/runtime/errors.js.map +1 -0
  137. package/dist/runtime/errors.test.d.ts +2 -0
  138. package/dist/runtime/errors.test.d.ts.map +1 -0
  139. package/dist/runtime/errors.test.js +66 -0
  140. package/dist/runtime/errors.test.js.map +1 -0
  141. package/dist/runtime/frame.d.ts +25 -0
  142. package/dist/runtime/frame.d.ts.map +1 -0
  143. package/dist/runtime/frame.js +106 -0
  144. package/dist/runtime/frame.js.map +1 -0
  145. package/dist/runtime/frame.test.d.ts +2 -0
  146. package/dist/runtime/frame.test.d.ts.map +1 -0
  147. package/dist/runtime/frame.test.js +32 -0
  148. package/dist/runtime/frame.test.js.map +1 -0
  149. package/dist/runtime/index.d.ts +3 -0
  150. package/dist/runtime/index.d.ts.map +1 -0
  151. package/dist/runtime/index.js +3 -0
  152. package/dist/runtime/index.js.map +1 -0
  153. package/dist/runtime/refs.d.ts +10 -0
  154. package/dist/runtime/refs.d.ts.map +1 -0
  155. package/dist/runtime/refs.js +10 -0
  156. package/dist/runtime/refs.js.map +1 -0
  157. package/dist/runtime/runtime.test.d.ts +2 -0
  158. package/dist/runtime/runtime.test.d.ts.map +1 -0
  159. package/dist/runtime/runtime.test.js +29 -0
  160. package/dist/runtime/runtime.test.js.map +1 -0
  161. package/dist/runtime/subscribers.d.ts +157 -0
  162. package/dist/runtime/subscribers.d.ts.map +1 -0
  163. package/dist/runtime/subscribers.js +131 -0
  164. package/dist/runtime/subscribers.js.map +1 -0
  165. package/dist/runtime/subscribers.test.d.ts +2 -0
  166. package/dist/runtime/subscribers.test.d.ts.map +1 -0
  167. package/dist/runtime/subscribers.test.js +155 -0
  168. package/dist/runtime/subscribers.test.js.map +1 -0
  169. package/dist/service.d.ts +68 -17
  170. package/dist/service.d.ts.map +1 -1
  171. package/dist/service.js +461 -307
  172. package/dist/service.js.map +1 -1
  173. package/dist/service.test.js +266 -77
  174. package/dist/service.test.js.map +1 -1
  175. package/dist/test/index.d.ts +33 -0
  176. package/dist/test/index.d.ts.map +1 -0
  177. package/dist/test/index.js +44 -0
  178. package/dist/test/index.js.map +1 -0
  179. package/dist/test-utils/channel-service-fixture.d.ts +2 -1
  180. package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
  181. package/dist/test-utils/channel-service-fixture.js +31 -11
  182. package/dist/test-utils/channel-service-fixture.js.map +1 -1
  183. package/dist/test-utils/conformance-adapter.d.ts +50 -0
  184. package/dist/test-utils/conformance-adapter.d.ts.map +1 -0
  185. package/dist/test-utils/conformance-adapter.js +206 -0
  186. package/dist/test-utils/conformance-adapter.js.map +1 -0
  187. package/dist/test-utils/fake-service.d.ts +85 -0
  188. package/dist/test-utils/fake-service.d.ts.map +1 -0
  189. package/dist/test-utils/fake-service.js +103 -0
  190. package/dist/test-utils/fake-service.js.map +1 -0
  191. package/dist/test-utils/index.d.ts +2 -0
  192. package/dist/test-utils/index.d.ts.map +1 -1
  193. package/dist/test-utils/index.js +3 -2
  194. package/dist/test-utils/index.js.map +1 -1
  195. package/dist/ws-client.d.ts +157 -18
  196. package/dist/ws-client.d.ts.map +1 -1
  197. package/dist/ws-client.js +432 -94
  198. package/dist/ws-client.js.map +1 -1
  199. package/dist/ws-client.test.d.ts +2 -0
  200. package/dist/ws-client.test.d.ts.map +1 -0
  201. package/dist/ws-client.test.js +672 -0
  202. package/dist/ws-client.test.js.map +1 -0
  203. package/package.json +17 -8
  204. package/dist/__tests__/service.integration.test.d.ts +0 -2
  205. package/dist/__tests__/service.integration.test.d.ts.map +0 -1
  206. package/dist/__tests__/service.integration.test.js +0 -1087
  207. package/dist/__tests__/service.integration.test.js.map +0 -1
  208. package/dist/cli/commands/delete.d.ts +0 -3
  209. package/dist/cli/commands/delete.d.ts.map +0 -1
  210. package/dist/cli/commands/delete.js +0 -10
  211. package/dist/cli/commands/delete.js.map +0 -1
  212. package/dist/cli/commands/react.d.ts +0 -3
  213. package/dist/cli/commands/react.d.ts.map +0 -1
  214. package/dist/cli/commands/react.js +0 -18
  215. package/dist/cli/commands/react.js.map +0 -1
@@ -0,0 +1,96 @@
1
+ import { Command } from "@effect/cli";
2
+ import { Effect, Option } from "effect";
3
+ import { type Transport, type TransportError } from "../transport.js";
4
+ /**
5
+ * Error union for the apps subcommand surface. Additional tags must be
6
+ * declared here, not thrown ad-hoc (Principle 3).
7
+ */
8
+ export type AppsCommandError = TransportError | AppsInputError;
9
+ /** CLI argument parsing rejected a value (e.g. `--manifest` points to a missing file). */
10
+ export declare class AppsInputError extends Error {
11
+ readonly reason: string;
12
+ readonly _tag: "AppsInputError";
13
+ constructor(reason: string);
14
+ }
15
+ /** `moltzap apps register --manifest <file>` — spec §5.3 bullet 1. */
16
+ export interface AppsRegisterArgs {
17
+ readonly manifestPath: string;
18
+ }
19
+ /**
20
+ * `moltzap apps create --app <id> --invite <agentId>...` — spec §5.3 bullet 2.
21
+ * `invitedAgentIds` is `--invite` repeated per Assumption §6.4.
22
+ */
23
+ export interface AppsCreateArgs {
24
+ readonly appId: string;
25
+ readonly invitedAgentIds: ReadonlyArray<string>;
26
+ }
27
+ /**
28
+ * `moltzap apps list [--app <id>] [--status waiting|active|closed]` —
29
+ * spec §5.3 bullet 3. `status` is a discriminated union so impl and
30
+ * tests branch exhaustively.
31
+ */
32
+ export interface AppsListArgs {
33
+ readonly appId?: string;
34
+ readonly status?: AppSessionStatus;
35
+ readonly limit?: number;
36
+ }
37
+ /** Mirror of the protocol's `apps/listSessions.params.status` enum. */
38
+ export type AppSessionStatus = "waiting" | "active" | "closed";
39
+ /** `moltzap apps get <sessionId>` — spec §5.3 bullet 4. */
40
+ export interface AppsGetArgs {
41
+ readonly sessionId: string;
42
+ }
43
+ /** `moltzap apps close <sessionId>` — spec §5.3 bullet 5. */
44
+ export interface AppsCloseArgs {
45
+ readonly sessionId: string;
46
+ }
47
+ /**
48
+ * `moltzap apps attest-skill --session <id> --skill <id>` — spec §5.3 bullet 6.
49
+ *
50
+ * ESCALATED (Q-AS-1, spec rev 4). The stub remains here so the module
51
+ * compiles; impl-staff does NOT wire a `Command.make` for this subcommand.
52
+ */
53
+ export interface AppsAttestSkillArgs {
54
+ readonly challengeId: string;
55
+ readonly skillUrl: string;
56
+ readonly version: string;
57
+ }
58
+ /** Wraps `apps/register`. Prints the registered app id to stdout. */
59
+ export declare const appsRegisterHandler: (args: AppsRegisterArgs) => Effect.Effect<void, AppsCommandError, Transport>;
60
+ /** Wraps `apps/create`. Prints `session.id` to stdout. */
61
+ export declare const appsCreateHandler: (args: AppsCreateArgs) => Effect.Effect<void, AppsCommandError, Transport>;
62
+ /** Wraps `apps/listSessions`. Emits one session per line. */
63
+ export declare const appsListHandler: (args: AppsListArgs) => Effect.Effect<void, AppsCommandError, Transport>;
64
+ /** Wraps `apps/getSession`. Prints the session record as JSON. */
65
+ export declare const appsGetHandler: (args: AppsGetArgs) => Effect.Effect<void, AppsCommandError, Transport>;
66
+ /** Wraps `apps/closeSession`. Prints the closed session id. */
67
+ export declare const appsCloseHandler: (args: AppsCloseArgs) => Effect.Effect<void, AppsCommandError, Transport>;
68
+ /**
69
+ * Wraps `apps/attestSkill` — spec rev 4 addendum §3 (Q-AS-1 resolved).
70
+ *
71
+ * All three flags are required; the RPC result is `{}`.
72
+ * Exit 0 on success with no stdout payload (Invariant §4.6; result is void).
73
+ */
74
+ export declare const appsAttestSkillHandler: (args: AppsAttestSkillArgs) => Effect.Effect<void, AppsCommandError, Transport>;
75
+ /** `moltzap apps [register|create|list|get|close|attest-skill]` — subcommand group. */
76
+ export declare const appsCommand: Command.Command<"apps", Transport, never, {
77
+ readonly subcommand: Option.Option<{
78
+ readonly manifest: string;
79
+ } | {
80
+ readonly app: string;
81
+ readonly invite: string[];
82
+ } | {
83
+ readonly app: Option.Option<string>;
84
+ readonly status: Option.Option<"closed" | "active" | "waiting">;
85
+ readonly limit: Option.Option<number>;
86
+ } | {
87
+ readonly sessionId: string;
88
+ } | {
89
+ readonly sessionId: string;
90
+ } | {
91
+ readonly challengeId: string;
92
+ readonly skillUrl: string;
93
+ readonly version: string;
94
+ }>;
95
+ }>;
96
+ //# sourceMappingURL=apps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/apps.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAQ,OAAO,EAAW,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,iBAAiB,CAAC;AAIzB;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,cAAc,GAAG,cAAc,CAAC;AAE/D,0FAA0F;AAC1F,qBAAa,cAAe,SAAQ,KAAK;IAE3B,QAAQ,CAAC,MAAM,EAAE,MAAM;IADnC,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;gBACrB,MAAM,EAAE,MAAM;CAGpC;AAID,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACjD;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,uEAAuE;AACvE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/D,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,6DAA6D;AAC7D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAID,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,GAC9B,MAAM,gBAAgB,KACrB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAgC9C,CAAC;AAEL,0DAA0D;AAC1D,eAAO,MAAM,iBAAiB,GAC5B,MAAM,cAAc,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAS9C,CAAC;AAEL,6DAA6D;AAC7D,eAAO,MAAM,eAAe,GAC1B,MAAM,YAAY,KACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAkB9C,CAAC;AAEL,kEAAkE;AAClE,eAAO,MAAM,cAAc,GACzB,MAAM,WAAW,KAChB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAQ9C,CAAC;AAEL,+DAA+D;AAC/D,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,KAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAQ9C,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,mBAAmB,KACxB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAK1B,CAAC;AAuIzB,uFAAuF;AACvF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;EAqBvB,CAAC"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * `moltzap apps <subcommand>` — handlers for spec sbd#177 rev 3 §5.3.
3
+ *
4
+ * Six subcommands, each a one-to-one wrap of a JSON-RPC method defined in
5
+ * `packages/protocol/src/schema/methods/apps.ts`:
6
+ *
7
+ * apps register → apps/register
8
+ * apps create → apps/create
9
+ * apps list → apps/listSessions
10
+ * apps get → apps/getSession
11
+ * apps close → apps/closeSession
12
+ * apps attest-skill → apps/attestSkill (ESCALATED Q-AS-1, stub only)
13
+ *
14
+ * Every handler is an Effect requiring the {@link Transport} tag; impl-staff
15
+ * wires each into `Command.make(...)` per the existing `@effect/cli` pattern
16
+ * already used by `commands/conversations.ts` and adds the top-level
17
+ * `appsCommand` to `cli/index.ts`.
18
+ *
19
+ * Invariant §4.6 (exit codes): success ⇒ exit 0, structural output on stdout.
20
+ * RPC errors ⇒ non-zero exit, message on stderr, no silent swallow.
21
+ */
22
+ import * as fs from "node:fs";
23
+ import { Args, Command, Options } from "@effect/cli";
24
+ import { Effect, Option } from "effect";
25
+ import { rpc, runHandler, } from "../transport.js";
26
+ /** CLI argument parsing rejected a value (e.g. `--manifest` points to a missing file). */
27
+ export class AppsInputError extends Error {
28
+ reason;
29
+ _tag = "AppsInputError";
30
+ constructor(reason) {
31
+ super(reason);
32
+ this.reason = reason;
33
+ }
34
+ }
35
+ // ─── Handlers ──────────────────────────────────────────────────────────────
36
+ /** Wraps `apps/register`. Prints the registered app id to stdout. */
37
+ export const appsRegisterHandler = (args) => Effect.gen(function* () {
38
+ let manifestText;
39
+ try {
40
+ manifestText = fs.readFileSync(args.manifestPath, "utf-8");
41
+ }
42
+ catch (err) {
43
+ return yield* Effect.fail(new AppsInputError(`manifest not readable at ${args.manifestPath}: ${err instanceof Error ? err.message : String(err)}`));
44
+ }
45
+ let manifest;
46
+ try {
47
+ manifest = JSON.parse(manifestText);
48
+ }
49
+ catch (err) {
50
+ return yield* Effect.fail(new AppsInputError(`manifest at ${args.manifestPath} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`));
51
+ }
52
+ const result = yield* rpc("apps/register", {
53
+ manifest,
54
+ });
55
+ yield* Effect.sync(() => {
56
+ console.log(result.appId);
57
+ });
58
+ });
59
+ /** Wraps `apps/create`. Prints `session.id` to stdout. */
60
+ export const appsCreateHandler = (args) => Effect.gen(function* () {
61
+ const result = yield* rpc("apps/create", {
62
+ appId: args.appId,
63
+ invitedAgentIds: [...args.invitedAgentIds],
64
+ });
65
+ yield* Effect.sync(() => {
66
+ console.log(result.session.id);
67
+ });
68
+ });
69
+ /** Wraps `apps/listSessions`. Emits one session per line. */
70
+ export const appsListHandler = (args) => Effect.gen(function* () {
71
+ const params = {};
72
+ if (args.appId !== undefined)
73
+ params.appId = args.appId;
74
+ if (args.status !== undefined)
75
+ params.status = args.status;
76
+ if (args.limit !== undefined)
77
+ params.limit = args.limit;
78
+ const result = yield* rpc("apps/listSessions", params);
79
+ yield* Effect.sync(() => {
80
+ for (const s of result.sessions) {
81
+ console.log(`${s.id}\t${s.appId}\t${s.status}`);
82
+ }
83
+ });
84
+ });
85
+ /** Wraps `apps/getSession`. Prints the session record as JSON. */
86
+ export const appsGetHandler = (args) => Effect.gen(function* () {
87
+ const result = yield* rpc("apps/getSession", {
88
+ sessionId: args.sessionId,
89
+ });
90
+ yield* Effect.sync(() => {
91
+ console.log(JSON.stringify(result.session, null, 2));
92
+ });
93
+ });
94
+ /** Wraps `apps/closeSession`. Prints the closed session id. */
95
+ export const appsCloseHandler = (args) => Effect.gen(function* () {
96
+ yield* rpc("apps/closeSession", {
97
+ sessionId: args.sessionId,
98
+ });
99
+ yield* Effect.sync(() => {
100
+ console.log(args.sessionId);
101
+ });
102
+ });
103
+ /**
104
+ * Wraps `apps/attestSkill` — spec rev 4 addendum §3 (Q-AS-1 resolved).
105
+ *
106
+ * All three flags are required; the RPC result is `{}`.
107
+ * Exit 0 on success with no stdout payload (Invariant §4.6; result is void).
108
+ */
109
+ export const appsAttestSkillHandler = (args) => rpc("apps/attestSkill", {
110
+ challengeId: args.challengeId,
111
+ skillUrl: args.skillUrl,
112
+ version: args.version,
113
+ }).pipe(Effect.asVoid);
114
+ // ─── CLI commands ──────────────────────────────────────────────────────────
115
+ const manifestOption = Options.file("manifest").pipe(Options.withDescription("App manifest file"));
116
+ const appsRegisterCommand = Command.make("register", { manifest: manifestOption }, ({ manifest }) => runHandler(appsRegisterHandler({ manifestPath: manifest }))).pipe(Command.withDescription("Register an app via apps/register"));
117
+ const appOption = Options.text("app").pipe(Options.withDescription("App id — matches the `appId` field in the manifest previously " +
118
+ "submitted via `moltzap apps register --manifest ...`."));
119
+ const inviteOption = Options.text("invite").pipe(Options.withDescription("Invited agent id (UUID, not the friendly agent-name). " +
120
+ "Get it from the `Agent ID:` line printed by `moltzap register` or " +
121
+ "from `moltzap whoami` on the peer's host. Repeat the flag to invite " +
122
+ "multiple agents: --invite <uuid1> --invite <uuid2>."), Options.repeated);
123
+ /**
124
+ * `moltzap apps create --app <appId> --invite <agentId>...`
125
+ *
126
+ * Initiator is the CALLER: whichever identity the transport layer resolves
127
+ * from the global `--as` / `--profile` flags (or the default profile when
128
+ * neither is given) becomes `initiatorAgentId` on the server side — see
129
+ * `apps/create` handler at packages/server/src/app/handlers/apps.handlers.ts
130
+ * (uses `ctx.agentId`). The initiator is NOT passed as a CLI argument and
131
+ * does NOT appear in `--invite`.
132
+ *
133
+ * Typical multi-agent flow:
134
+ * # as the initiator (e.g. alice):
135
+ * moltzap --profile alice apps create --app myapp \
136
+ * --invite $BOB_AGENT_ID --invite $CAROL_AGENT_ID
137
+ *
138
+ * Prints the new session id to stdout (one line) on success.
139
+ */
140
+ const appsCreateCommand = Command.make("create", { app: appOption, invite: inviteOption }, ({ app, invite }) => runHandler(appsCreateHandler({ appId: app, invitedAgentIds: invite }))).pipe(Command.withDescription("Create a new app session. Caller becomes the initiator; --invite " +
141
+ "takes an agent id (UUID) and is repeatable."));
142
+ const appFilterOption = Options.text("app").pipe(Options.withDescription("Filter by app id"), Options.optional);
143
+ const statusOption = Options.choice("status", [
144
+ "waiting",
145
+ "active",
146
+ "closed",
147
+ ]).pipe(Options.optional);
148
+ const limitOption = Options.integer("limit").pipe(Options.optional);
149
+ const appsListCommand = Command.make("list", {
150
+ app: appFilterOption,
151
+ status: statusOption,
152
+ limit: limitOption,
153
+ }, ({ app, status, limit }) => {
154
+ const args = {
155
+ ...(Option.isSome(app) ? { appId: app.value } : {}),
156
+ ...(Option.isSome(status) ? { status: status.value } : {}),
157
+ ...(Option.isSome(limit) ? { limit: limit.value } : {}),
158
+ };
159
+ return runHandler(appsListHandler(args));
160
+ }).pipe(Command.withDescription("List app sessions"));
161
+ const sessionIdArg = Args.text({ name: "sessionId" }).pipe(Args.withDescription("Session id"));
162
+ const appsGetCommand = Command.make("get", { sessionId: sessionIdArg }, ({ sessionId }) => runHandler(appsGetHandler({ sessionId }))).pipe(Command.withDescription("Get an app session as JSON"));
163
+ const appsCloseCommand = Command.make("close", { sessionId: sessionIdArg }, ({ sessionId }) => runHandler(appsCloseHandler({ sessionId }))).pipe(Command.withDescription("Close an app session"));
164
+ const challengeIdOption = Options.text("challenge-id").pipe(Options.withDescription("Challenge id (UUID) from the attestation challenge"));
165
+ const skillUrlOption = Options.text("skill-url").pipe(Options.withDescription("Skill URL being attested"));
166
+ const versionOption = Options.text("version").pipe(Options.withDescription("Skill version string"));
167
+ /**
168
+ * `moltzap apps attest-skill --challenge-id <id> --skill-url <url> --version <v>`
169
+ *
170
+ * Wraps `apps/attestSkill`. All three flags required.
171
+ * Exits 0 on success with no stdout; error to stderr with non-zero exit
172
+ * (spec rev 4 addendum §3 Q-AS-1; Invariant §4.6).
173
+ */
174
+ const appsAttestSkillCommand = Command.make("attest-skill", {
175
+ challengeId: challengeIdOption,
176
+ skillUrl: skillUrlOption,
177
+ version: versionOption,
178
+ }, ({ challengeId, skillUrl, version }) => runHandler(appsAttestSkillHandler({ challengeId, skillUrl, version }))).pipe(Command.withDescription("Attest a skill for a session. All three flags are required."));
179
+ /** `moltzap apps [register|create|list|get|close|attest-skill]` — subcommand group. */
180
+ export const appsCommand = Command.make("apps", {}, () => Effect.sync(() => {
181
+ console.log("Usage: moltzap apps <register|create|list|get|close|attest-skill> [options]");
182
+ })).pipe(Command.withDescription("Manage MoltZap apps and sessions. Every subcommand runs as the " +
183
+ "identity selected by the global --as / --profile flags (see " +
184
+ "`moltzap --help`); in particular `apps create` makes the caller " +
185
+ "the session initiator."), Command.withSubcommands([
186
+ appsRegisterCommand,
187
+ appsCreateCommand,
188
+ appsListCommand,
189
+ appsGetCommand,
190
+ appsCloseCommand,
191
+ appsAttestSkillCommand,
192
+ ]));
193
+ //# sourceMappingURL=apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.js","sourceRoot":"","sources":["../../../src/cli/commands/apps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=apps.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/apps.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Unit tests for `moltzap apps <subcommand>` handlers. Provides a fake
3
+ * `Transport` via `Effect.provideService(Transport, fake)`; asserts on
4
+ * (method, params) tuples recorded by the fake.
5
+ *
6
+ * Spec test-coverage floor (sbd#177 §"Cross-cutting acceptance floors"):
7
+ * at least one success path and one RPC-failure path per handler.
8
+ */
9
+ import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
10
+ import { tmpdir } from "node:os";
11
+ import { join } from "node:path";
12
+ import { Effect } from "effect";
13
+ import { afterEach, beforeEach, describe, expect, it, vi, } from "vitest";
14
+ import { AppsInputError, appsAttestSkillHandler, appsCloseHandler, appsCreateHandler, appsGetHandler, appsListHandler, appsRegisterHandler, } from "./apps.js";
15
+ import { Transport, TransportRpcError, } from "../transport.js";
16
+ const makeFakeTransport = (respond) => {
17
+ const calls = [];
18
+ const transport = {
19
+ kind: "test",
20
+ rpc: (method, params) => {
21
+ calls.push({ method, params });
22
+ const out = respond({ method, params });
23
+ if (out instanceof Error) {
24
+ return Effect.fail(new TransportRpcError({
25
+ method,
26
+ code: -32000,
27
+ message: out.message,
28
+ }));
29
+ }
30
+ return Effect.succeed(out);
31
+ },
32
+ };
33
+ return { calls, transport };
34
+ };
35
+ describe("apps register", () => {
36
+ let tmp;
37
+ let stdout;
38
+ let stderr;
39
+ beforeEach(() => {
40
+ tmp = mkdtempSync(join(tmpdir(), "moltzap-apps-"));
41
+ stdout = vi.spyOn(console, "log").mockImplementation(() => { });
42
+ stderr = vi.spyOn(console, "error").mockImplementation(() => { });
43
+ });
44
+ afterEach(() => {
45
+ rmSync(tmp, { recursive: true, force: true });
46
+ stdout.mockRestore();
47
+ stderr.mockRestore();
48
+ });
49
+ it("calls apps/register with the manifest body and prints appId", async () => {
50
+ const manifestPath = join(tmp, "m.json");
51
+ writeFileSync(manifestPath, JSON.stringify({ name: "demo-app" }));
52
+ const { calls, transport } = makeFakeTransport(() => ({
53
+ appId: "app-xyz",
54
+ }));
55
+ await Effect.runPromise(appsRegisterHandler({ manifestPath }).pipe(Effect.provideService(Transport, transport)));
56
+ expect(calls).toEqual([
57
+ { method: "apps/register", params: { manifest: { name: "demo-app" } } },
58
+ ]);
59
+ expect(stdout).toHaveBeenCalledWith("app-xyz");
60
+ });
61
+ it("rejects a missing manifest file with AppsInputError", async () => {
62
+ const { transport } = makeFakeTransport(() => ({ appId: "never" }));
63
+ const result = await Effect.runPromiseExit(appsRegisterHandler({ manifestPath: join(tmp, "missing.json") }).pipe(Effect.provideService(Transport, transport)));
64
+ expect(result._tag).toBe("Failure");
65
+ if (result._tag === "Failure") {
66
+ // Effect failure cause wraps the AppsInputError.
67
+ const s = JSON.stringify(result.cause);
68
+ expect(s).toMatch(/AppsInputError/);
69
+ }
70
+ });
71
+ it("surfaces TransportRpcError as a failure", async () => {
72
+ const manifestPath = join(tmp, "m.json");
73
+ writeFileSync(manifestPath, JSON.stringify({}));
74
+ const { transport } = makeFakeTransport(() => new Error("invalid manifest"));
75
+ const result = await Effect.runPromiseExit(appsRegisterHandler({ manifestPath }).pipe(Effect.provideService(Transport, transport)));
76
+ expect(result._tag).toBe("Failure");
77
+ });
78
+ });
79
+ describe("apps create", () => {
80
+ let stdout;
81
+ beforeEach(() => {
82
+ stdout = vi.spyOn(console, "log").mockImplementation(() => { });
83
+ });
84
+ afterEach(() => stdout.mockRestore());
85
+ it("calls apps/create with appId and invitedAgentIds and prints session.id", async () => {
86
+ const { calls, transport } = makeFakeTransport(() => ({
87
+ session: { id: "sess-1" },
88
+ }));
89
+ await Effect.runPromise(appsCreateHandler({
90
+ appId: "app-1",
91
+ invitedAgentIds: ["agent-a", "agent-b"],
92
+ }).pipe(Effect.provideService(Transport, transport)));
93
+ expect(calls).toEqual([
94
+ {
95
+ method: "apps/create",
96
+ params: { appId: "app-1", invitedAgentIds: ["agent-a", "agent-b"] },
97
+ },
98
+ ]);
99
+ expect(stdout).toHaveBeenCalledWith("sess-1");
100
+ });
101
+ it("surfaces TransportRpcError", async () => {
102
+ const { transport } = makeFakeTransport(() => new Error("nope"));
103
+ const result = await Effect.runPromiseExit(appsCreateHandler({ appId: "app-1", invitedAgentIds: [] }).pipe(Effect.provideService(Transport, transport)));
104
+ expect(result._tag).toBe("Failure");
105
+ });
106
+ });
107
+ describe("apps list", () => {
108
+ let stdout;
109
+ beforeEach(() => {
110
+ stdout = vi.spyOn(console, "log").mockImplementation(() => { });
111
+ });
112
+ afterEach(() => stdout.mockRestore());
113
+ it("calls apps/listSessions with optional filters and prints one per line", async () => {
114
+ const { calls, transport } = makeFakeTransport(() => ({
115
+ sessions: [
116
+ { id: "s1", appId: "app-1", status: "active" },
117
+ { id: "s2", appId: "app-1", status: "closed" },
118
+ ],
119
+ }));
120
+ await Effect.runPromise(appsListHandler({ appId: "app-1", status: "active", limit: 10 }).pipe(Effect.provideService(Transport, transport)));
121
+ expect(calls).toEqual([
122
+ {
123
+ method: "apps/listSessions",
124
+ params: { appId: "app-1", status: "active", limit: 10 },
125
+ },
126
+ ]);
127
+ expect(stdout).toHaveBeenCalledTimes(2);
128
+ });
129
+ it("omits absent filters from the params object", async () => {
130
+ const { calls, transport } = makeFakeTransport(() => ({ sessions: [] }));
131
+ await Effect.runPromise(appsListHandler({}).pipe(Effect.provideService(Transport, transport)));
132
+ expect(calls[0]?.params).toEqual({});
133
+ });
134
+ it("surfaces TransportRpcError", async () => {
135
+ const { transport } = makeFakeTransport(() => new Error("boom"));
136
+ const result = await Effect.runPromiseExit(appsListHandler({}).pipe(Effect.provideService(Transport, transport)));
137
+ expect(result._tag).toBe("Failure");
138
+ });
139
+ });
140
+ describe("apps get", () => {
141
+ let stdout;
142
+ beforeEach(() => {
143
+ stdout = vi.spyOn(console, "log").mockImplementation(() => { });
144
+ });
145
+ afterEach(() => stdout.mockRestore());
146
+ it("calls apps/getSession and prints session as JSON", async () => {
147
+ const sessionObj = { id: "s1", appId: "app-1", status: "active" };
148
+ const { calls, transport } = makeFakeTransport(() => ({
149
+ session: sessionObj,
150
+ }));
151
+ await Effect.runPromise(appsGetHandler({ sessionId: "s1" }).pipe(Effect.provideService(Transport, transport)));
152
+ expect(calls[0]).toEqual({
153
+ method: "apps/getSession",
154
+ params: { sessionId: "s1" },
155
+ });
156
+ expect(stdout).toHaveBeenCalledWith(JSON.stringify(sessionObj, null, 2));
157
+ });
158
+ it("surfaces TransportRpcError", async () => {
159
+ const { transport } = makeFakeTransport(() => new Error("404"));
160
+ const result = await Effect.runPromiseExit(appsGetHandler({ sessionId: "s1" }).pipe(Effect.provideService(Transport, transport)));
161
+ expect(result._tag).toBe("Failure");
162
+ });
163
+ });
164
+ describe("apps close", () => {
165
+ let stdout;
166
+ beforeEach(() => {
167
+ stdout = vi.spyOn(console, "log").mockImplementation(() => { });
168
+ });
169
+ afterEach(() => stdout.mockRestore());
170
+ it("calls apps/closeSession and prints the closed session id", async () => {
171
+ const { calls, transport } = makeFakeTransport(() => ({ closed: true }));
172
+ await Effect.runPromise(appsCloseHandler({ sessionId: "s-42" }).pipe(Effect.provideService(Transport, transport)));
173
+ expect(calls[0]).toEqual({
174
+ method: "apps/closeSession",
175
+ params: { sessionId: "s-42" },
176
+ });
177
+ expect(stdout).toHaveBeenCalledWith("s-42");
178
+ });
179
+ it("surfaces TransportRpcError", async () => {
180
+ const { transport } = makeFakeTransport(() => new Error("nope"));
181
+ const result = await Effect.runPromiseExit(appsCloseHandler({ sessionId: "s-42" }).pipe(Effect.provideService(Transport, transport)));
182
+ expect(result._tag).toBe("Failure");
183
+ });
184
+ });
185
+ describe("apps attest-skill", () => {
186
+ let stdout;
187
+ beforeEach(() => {
188
+ stdout = vi.spyOn(console, "log").mockImplementation(() => { });
189
+ });
190
+ afterEach(() => stdout.mockRestore());
191
+ it("calls apps/attestSkill with challengeId, skillUrl, version and emits no stdout", async () => {
192
+ const { calls, transport } = makeFakeTransport(() => ({}));
193
+ await Effect.runPromise(appsAttestSkillHandler({
194
+ challengeId: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
195
+ skillUrl: "https://example.com/skills/my-skill",
196
+ version: "1.0.0",
197
+ }).pipe(Effect.provideService(Transport, transport)));
198
+ expect(calls).toEqual([
199
+ {
200
+ method: "apps/attestSkill",
201
+ params: {
202
+ challengeId: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
203
+ skillUrl: "https://example.com/skills/my-skill",
204
+ version: "1.0.0",
205
+ },
206
+ },
207
+ ]);
208
+ expect(stdout).not.toHaveBeenCalled();
209
+ });
210
+ it("surfaces TransportRpcError on RPC failure", async () => {
211
+ const { transport } = makeFakeTransport(() => new Error("attestation rejected"));
212
+ const result = await Effect.runPromiseExit(appsAttestSkillHandler({
213
+ challengeId: "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
214
+ skillUrl: "https://example.com/skills/my-skill",
215
+ version: "1.0.0",
216
+ }).pipe(Effect.provideService(Transport, transport)));
217
+ expect(result._tag).toBe("Failure");
218
+ });
219
+ });
220
+ //# sourceMappingURL=apps.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apps.test.js","sourceRoot":"","sources":["../../../src/cli/commands/apps.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,MAAM,EACN,EAAE,EACF,EAAE,GAEH,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,SAAS,EACT,iBAAiB,GAGlB,MAAM,iBAAiB,CAAC;AAIzB,MAAM,iBAAiB,GAAG,CACxB,OAAwC,EACa,EAAE;IACvD,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAqB;QAClC,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,CACH,MAAc,EACd,MAA+B,EACQ,EAAE;YACzC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACxC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;gBACzB,OAAO,MAAM,CAAC,IAAI,CAChB,IAAI,iBAAiB,CAAC;oBACpB,MAAM;oBACN,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC,OAAO,CAAC,GAAa,CAAC,CAAC;QACvC,CAAC;KACF,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC9B,CAAC,CAAC;AAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,GAAW,CAAC;IAChB,IAAI,MAAoB,CAAC;IACzB,IAAI,MAAoB,CAAC;IAEzB,UAAU,CAAC,GAAG,EAAE;QACd,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;QACnD,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,WAAW,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC;YACpD,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC,CAAC;QACJ,MAAM,MAAM,CAAC,UAAU,CACrB,mBAAmB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAC5C,CACF,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;SACxE,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CACxC,mBAAmB,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,IAAI,CACnE,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAC5C,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,iDAAiD;YACjD,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CACrC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CACpC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CACxC,mBAAmB,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,CACxC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAC5C,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,MAAoB,CAAC;IACzB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAEtC,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;SAC1B,CAAC,CAAC,CAAC;QACJ,MAAM,MAAM,CAAC,UAAU,CACrB,iBAAiB,CAAC;YAChB,KAAK,EAAE,OAAO;YACd,eAAe,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;SACxC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CACrD,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB;gBACE,MAAM,EAAE,aAAa;gBACrB,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;aACpE;SACF,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CACxC,iBAAiB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAC7D,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAC5C,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,MAAoB,CAAC;IACzB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAEtC,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC;YACpD,QAAQ,EAAE;gBACR,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC9C,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;aAC/C;SACF,CAAC,CAAC,CAAC;QACJ,MAAM,MAAM,CAAC,UAAU,CACrB,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CACnE,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAC5C,CACF,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB;gBACE,MAAM,EAAE,mBAAmB;gBAC3B,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;aACxD;SACF,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,MAAM,CAAC,UAAU,CACrB,eAAe,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CACtE,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CACxC,eAAe,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CACtE,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,MAAoB,CAAC;IACzB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAEtC,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,UAAU,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAClE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,EAAE,UAAU;SACpB,CAAC,CAAC,CAAC;QACJ,MAAM,MAAM,CAAC,UAAU,CACrB,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACtC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAC5C,CACF,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACvB,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;SAC5B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CACxC,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CACtC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAC5C,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,MAAoB,CAAC;IACzB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAEtC,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,MAAM,CAAC,UAAU,CACrB,gBAAgB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAC1C,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAC5C,CACF,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACvB,MAAM,EAAE,mBAAmB;YAC3B,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;SAC9B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CACxC,gBAAgB,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAC1C,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAC5C,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,IAAI,MAAoB,CAAC;IACzB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAEtC,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,MAAM,MAAM,CAAC,UAAU,CACrB,sBAAsB,CAAC;YACrB,WAAW,EAAE,sCAAsC;YACnD,QAAQ,EAAE,qCAAqC;YAC/C,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CACrD,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB;gBACE,MAAM,EAAE,kBAAkB;gBAC1B,MAAM,EAAE;oBACN,WAAW,EAAE,sCAAsC;oBACnD,QAAQ,EAAE,qCAAqC;oBAC/C,OAAO,EAAE,OAAO;iBACjB;aACF;SACF,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CACrC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CACxC,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CACxC,sBAAsB,CAAC;YACrB,WAAW,EAAE,sCAAsC;YACnD,QAAQ,EAAE,qCAAqC;YAC/C,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CACrD,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,3 +1,19 @@
1
- import { Command } from "commander";
2
- export declare const contactsCommand: Command;
1
+ import { Command } from "@effect/cli";
2
+ /**
3
+ * `moltzap contacts [list|add|accept|block|remove]` — contact CRUD over the
4
+ * local Unix socket. Addresses by phone (+E.164 prefix) or explicit user id.
5
+ */
6
+ export declare const contactsCommand: Command.Command<"contacts", never, never, {
7
+ readonly subcommand: import("effect/Option").Option<{
8
+ readonly json: boolean;
9
+ } | {
10
+ readonly identifier: string;
11
+ } | {
12
+ readonly contactId: string;
13
+ } | {
14
+ readonly contactId: string;
15
+ } | {
16
+ readonly contactId: string;
17
+ }>;
18
+ }>;
3
19
  //# sourceMappingURL=contacts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,eAAe,SAE3B,CAAC"}
1
+ {"version":3,"file":"contacts.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/contacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAW,MAAM,aAAa,CAAC;AAgHrD;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;EAW3B,CAAC"}