xaq-cli 0.0.0 → 0.1.0-nightly.71

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 (227) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +79 -0
  3. package/dist/admin-5gThRwgj.js +162 -0
  4. package/dist/admin-5gThRwgj.js.map +1 -0
  5. package/dist/admin-Btrm8mCd.js +218 -0
  6. package/dist/admin-Btrm8mCd.js.map +1 -0
  7. package/dist/admin-CWofnT_Q.js +2 -0
  8. package/dist/api-BFpElwqK.js +89 -0
  9. package/dist/api-BFpElwqK.js.map +1 -0
  10. package/dist/audit-BB7jK9Z5.js +2 -0
  11. package/dist/audit-BVYknW2i.js +79 -0
  12. package/dist/audit-BVYknW2i.js.map +1 -0
  13. package/dist/auth-CXmBdMqw.js +2 -0
  14. package/dist/auth-D-GmwNv-.js +550 -0
  15. package/dist/auth-D-GmwNv-.js.map +1 -0
  16. package/dist/brand--ZB8jTn1.js +32 -0
  17. package/dist/brand--ZB8jTn1.js.map +1 -0
  18. package/dist/bus-Cz0flS37.js +12 -0
  19. package/dist/bus-Cz0flS37.js.map +1 -0
  20. package/dist/bus-OKIGut72.js +2 -0
  21. package/dist/cli.js +234 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/commands-BNVLjYXA.js +167 -0
  24. package/dist/commands-BNVLjYXA.js.map +1 -0
  25. package/dist/commands-CdA6-WE7.js +112 -0
  26. package/dist/commands-CdA6-WE7.js.map +1 -0
  27. package/dist/config-C9XmYZWO.js +94 -0
  28. package/dist/config-C9XmYZWO.js.map +1 -0
  29. package/dist/config-CNVi0v5t.js +2 -0
  30. package/dist/connect-TtJ9n0Rw.js +362 -0
  31. package/dist/connect-TtJ9n0Rw.js.map +1 -0
  32. package/dist/content-C1lKMxFS.js +1170 -0
  33. package/dist/content-C1lKMxFS.js.map +1 -0
  34. package/dist/content-worker.js +28 -0
  35. package/dist/content-worker.js.map +1 -0
  36. package/dist/crypto-fv2fj3S8.js +75 -0
  37. package/dist/crypto-fv2fj3S8.js.map +1 -0
  38. package/dist/db-BEUEUPyP.js +561 -0
  39. package/dist/db-BEUEUPyP.js.map +1 -0
  40. package/dist/db-Q5BQuwga.js +2 -0
  41. package/dist/errors-FbMS3QBo.js +39 -0
  42. package/dist/errors-FbMS3QBo.js.map +1 -0
  43. package/dist/filter-Ck6OMxvu.js +158 -0
  44. package/dist/filter-Ck6OMxvu.js.map +1 -0
  45. package/dist/hermes-CKyzt1mH.js +3 -0
  46. package/dist/hermes-DHnDTYJp.js +1023 -0
  47. package/dist/hermes-DHnDTYJp.js.map +1 -0
  48. package/dist/import-DsN5NZT3.js +910 -0
  49. package/dist/import-DsN5NZT3.js.map +1 -0
  50. package/dist/instance-CwWbFbJ8.js +2 -0
  51. package/dist/instance-Dj9TpJB2.js +195 -0
  52. package/dist/instance-Dj9TpJB2.js.map +1 -0
  53. package/dist/listen-B9iO7HgQ.js +1568 -0
  54. package/dist/listen-B9iO7HgQ.js.map +1 -0
  55. package/dist/listen-CXVKG9XD.js +2 -0
  56. package/dist/manage-Bo6COB4p.js +477 -0
  57. package/dist/manage-Bo6COB4p.js.map +1 -0
  58. package/dist/manage-DoXqvjnU.js +2 -0
  59. package/dist/mcpheader-B8c5YO1B.js +2 -0
  60. package/dist/mcpheader-C9H4vudu.js +185 -0
  61. package/dist/mcpheader-C9H4vudu.js.map +1 -0
  62. package/dist/mcpsetup-BnHudwpq.js +2 -0
  63. package/dist/mcpsetup-DXXo2qjf.js +1053 -0
  64. package/dist/mcpsetup-DXXo2qjf.js.map +1 -0
  65. package/dist/node-check-CjTk6VNL.js +24 -0
  66. package/dist/node-check-CjTk6VNL.js.map +1 -0
  67. package/dist/paths-d-C2kdjo.js +2 -0
  68. package/dist/paths-yzOKD6ow.js +46 -0
  69. package/dist/paths-yzOKD6ow.js.map +1 -0
  70. package/dist/profile-CcMZ4hn7.js +2 -0
  71. package/dist/profile-NmMKAczz.js +222 -0
  72. package/dist/profile-NmMKAczz.js.map +1 -0
  73. package/dist/prompt-CKMQx_MJ.js +114 -0
  74. package/dist/prompt-CKMQx_MJ.js.map +1 -0
  75. package/dist/recipes-C7TIDlRj.js +3 -0
  76. package/dist/recipes-DG_-doGq.js +314 -0
  77. package/dist/recipes-DG_-doGq.js.map +1 -0
  78. package/dist/send-Dk-t8ia-.js +108 -0
  79. package/dist/send-Dk-t8ia-.js.map +1 -0
  80. package/dist/server-CDqDp1q3.js +20640 -0
  81. package/dist/server-CDqDp1q3.js.map +1 -0
  82. package/dist/service-BVn3soZZ.js +766 -0
  83. package/dist/service-BVn3soZZ.js.map +1 -0
  84. package/dist/service-BaWGPmSd.js +2 -0
  85. package/dist/service-C7jfo-Ex.js +457 -0
  86. package/dist/service-C7jfo-Ex.js.map +1 -0
  87. package/dist/service-DxDyKDQ-.js +2 -0
  88. package/dist/settings-B5qSHxRM.js +134 -0
  89. package/dist/settings-B5qSHxRM.js.map +1 -0
  90. package/dist/settings-DQvZaMN1.js +2 -0
  91. package/dist/setup-token-CwuSzfLK.js +48 -0
  92. package/dist/setup-token-CwuSzfLK.js.map +1 -0
  93. package/dist/skill/SKILL.md +445 -0
  94. package/dist/skill-1UQj3qgW.js +69 -0
  95. package/dist/skill-1UQj3qgW.js.map +1 -0
  96. package/dist/skill-pelq18JQ.js +2 -0
  97. package/dist/ssrf-BlVpGZ7C.js +181 -0
  98. package/dist/ssrf-BlVpGZ7C.js.map +1 -0
  99. package/dist/types-BhJDbSzE.js +135 -0
  100. package/dist/types-BhJDbSzE.js.map +1 -0
  101. package/dist/ui-B8Sd4Y7Y.js +81 -0
  102. package/dist/ui-B8Sd4Y7Y.js.map +1 -0
  103. package/dist/urls-Dp8pBGMU.js +2 -0
  104. package/dist/urls-U_LfYV61.js +27 -0
  105. package/dist/urls-U_LfYV61.js.map +1 -0
  106. package/dist/version-BxH7OuWD.js +20 -0
  107. package/dist/version-BxH7OuWD.js.map +1 -0
  108. package/dist/web/assets/_agentId-DonOCOlC.js +1 -0
  109. package/dist/web/assets/_app-B7t5lEia.js +1 -0
  110. package/dist/web/assets/_app-DMTGqYpM.js +65 -0
  111. package/dist/web/assets/_connectionId-DR5vFXOg.js +1 -0
  112. package/dist/web/assets/_webhookId-LfUlsULp.js +1 -0
  113. package/dist/web/assets/account-status-CEszs13C.js +1 -0
  114. package/dist/web/assets/accounts-5m7aiXuZ.js +1 -0
  115. package/dist/web/assets/accounts-list-YfJzThZa.js +1 -0
  116. package/dist/web/assets/activity-DOIe7SAg.js +1 -0
  117. package/dist/web/assets/add-connection-C8JR-13R.js +1 -0
  118. package/dist/web/assets/agent-create-form-CPxnPYH4.js +1 -0
  119. package/dist/web/assets/agents-B2Qj5KxT.js +1 -0
  120. package/dist/web/assets/approvals-BGaVaoFy.js +1 -0
  121. package/dist/web/assets/approve._id-BLrQnzPM.js +1 -0
  122. package/dist/web/assets/arrow-left-DZVAXoKj.js +1 -0
  123. package/dist/web/assets/arrow-right-C2zcqRr2.js +1 -0
  124. package/dist/web/assets/attention-gO9Nw5uW.js +1 -0
  125. package/dist/web/assets/audit-BPXXre8S.js +1 -0
  126. package/dist/web/assets/audit-bits-CGyIprzK.js +1 -0
  127. package/dist/web/assets/bell-ring-ig3zn1iS.js +1 -0
  128. package/dist/web/assets/bot-Zk76q_39.js +1 -0
  129. package/dist/web/assets/calendar-notice-DsCfq3VJ.js +1 -0
  130. package/dist/web/assets/calendar-plus-Cycfkk0y.js +1 -0
  131. package/dist/web/assets/calendar-setup-Pn61Wj1n.js +2 -0
  132. package/dist/web/assets/card-GSO5o-Ug.js +1 -0
  133. package/dist/web/assets/check-check-Ds1bPIGv.js +1 -0
  134. package/dist/web/assets/checkbox-B937U-Fd.js +1 -0
  135. package/dist/web/assets/chevron-right-Cqh4mDk1.js +1 -0
  136. package/dist/web/assets/chips-input-2xWDofmE.js +1 -0
  137. package/dist/web/assets/choice-cards-CgAIqBGX.js +1 -0
  138. package/dist/web/assets/circle-x-DcU-0zVh.js +1 -0
  139. package/dist/web/assets/command-khhto70y.js +1 -0
  140. package/dist/web/assets/common-BPZV8TFb.js +1 -0
  141. package/dist/web/assets/connect-agent-guide-CJdw31p2.js +1 -0
  142. package/dist/web/assets/connect-host-lr2c3xWh.js +6 -0
  143. package/dist/web/assets/connection-row-DYx_5o0c.js +1 -0
  144. package/dist/web/assets/connections-C4NOFb5R.js +1 -0
  145. package/dist/web/assets/data-table-kW1pkRB5.js +1 -0
  146. package/dist/web/assets/empty-DzTDioBP.js +1 -0
  147. package/dist/web/assets/events-C9zJnPKK.js +1 -0
  148. package/dist/web/assets/eye-B9gT1QSq.js +1 -0
  149. package/dist/web/assets/eye-off-Diktqz_g.js +1 -0
  150. package/dist/web/assets/field-C6ejurju.js +1 -0
  151. package/dist/web/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  152. package/dist/web/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  153. package/dist/web/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  154. package/dist/web/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  155. package/dist/web/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  156. package/dist/web/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  157. package/dist/web/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  158. package/dist/web/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  159. package/dist/web/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  160. package/dist/web/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  161. package/dist/web/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  162. package/dist/web/assets/get-started-C38bq1gZ.js +2 -0
  163. package/dist/web/assets/hidden-chars-Dr9TxfvF.js +1 -0
  164. package/dist/web/assets/index-DGzo3kGh.js +11 -0
  165. package/dist/web/assets/index-zKOCQLGX.css +2 -0
  166. package/dist/web/assets/input-CWwJgozn.js +1 -0
  167. package/dist/web/assets/input-group-HG8OXcJ4.js +1 -0
  168. package/dist/web/assets/label-multi-select-sH8mllw8.js +1 -0
  169. package/dist/web/assets/labels-B5UqVwFo.js +1 -0
  170. package/dist/web/assets/laptop-BxJ4Nbj7.js +1 -0
  171. package/dist/web/assets/last-call-D-O5O94z.js +1 -0
  172. package/dist/web/assets/listener-handled-HNCuVrQ7.js +1 -0
  173. package/dist/web/assets/login-DaeKclcf.js +1 -0
  174. package/dist/web/assets/mail-C5fm2pTC.js +1 -0
  175. package/dist/web/assets/mcp-call-UoOTPFyh.js +1 -0
  176. package/dist/web/assets/mcp-call-card-Cr-OEDX2.js +3 -0
  177. package/dist/web/assets/message-square-quote-se8Bf3RP.js +1 -0
  178. package/dist/web/assets/mutations-CLPqJ6cj.js +1 -0
  179. package/dist/web/assets/network-igNw0VVx.js +1 -0
  180. package/dist/web/assets/pairing-XjuaVr2u.js +1 -0
  181. package/dist/web/assets/pairing-notifier-KPzOEZSO.js +1 -0
  182. package/dist/web/assets/paperclip-znS4iTrg.js +1 -0
  183. package/dist/web/assets/password-input-DV3aqcNf.js +1 -0
  184. package/dist/web/assets/pause-o-dK3khK.js +1 -0
  185. package/dist/web/assets/pencil-DkPFAhEq.js +1 -0
  186. package/dist/web/assets/play-DvCHND93.js +1 -0
  187. package/dist/web/assets/plug-CXAniEiR.js +1 -0
  188. package/dist/web/assets/plug-zap-BwR-l5wb.js +1 -0
  189. package/dist/web/assets/plus-B_TUslu3.js +1 -0
  190. package/dist/web/assets/preload-helper-Cc_aKyUb.js +1 -0
  191. package/dist/web/assets/public-url-rF2Xjyel.js +1 -0
  192. package/dist/web/assets/queries-Cv3nXx0U.js +42 -0
  193. package/dist/web/assets/refresh-cw-Ch5FNrby.js +1 -0
  194. package/dist/web/assets/revealed-keys-C_9NtJPY.js +1 -0
  195. package/dist/web/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  196. package/dist/web/assets/rotate-ccw-B-mzPDk0.js +1 -0
  197. package/dist/web/assets/search-CTVKGomS.js +1 -0
  198. package/dist/web/assets/select-Bb806bpq.js +1 -0
  199. package/dist/web/assets/send-DuMVuYs1.js +1 -0
  200. package/dist/web/assets/settings-BWauhfFf.js +1 -0
  201. package/dist/web/assets/setup-B7bNKQOp.js +1 -0
  202. package/dist/web/assets/sheet-CYPwpUsH.js +1 -0
  203. package/dist/web/assets/shield-alert-CSYB-ThV.js +1 -0
  204. package/dist/web/assets/shield-check-BulpsYqK.js +1 -0
  205. package/dist/web/assets/sparkles-CUTiob4K.js +1 -0
  206. package/dist/web/assets/stamp-BNXUGNa3.js +1 -0
  207. package/dist/web/assets/step-url-51aMNak-.js +1 -0
  208. package/dist/web/assets/stream-Du7fY5_Y.js +1 -0
  209. package/dist/web/assets/tag-I5_-1jFL.js +1 -0
  210. package/dist/web/assets/terminal-BvxDFTJc.js +1 -0
  211. package/dist/web/assets/test-email-button-DYi7V_6X.js +1 -0
  212. package/dist/web/assets/toggle-group-Bdo1gmQ1.js +1 -0
  213. package/dist/web/assets/trash-Ci0aICEl.js +1 -0
  214. package/dist/web/assets/use-delivery-speed-BBh7W2q6.js +1 -0
  215. package/dist/web/assets/use-label-names-BXicesnP.js +1 -0
  216. package/dist/web/assets/use-sign-out-CPrY_oVO.js +1 -0
  217. package/dist/web/assets/useInfiniteQuery-DJLIM8yJ.js +1 -0
  218. package/dist/web/assets/useQuery-MrTwwNy5.js +1 -0
  219. package/dist/web/assets/useRouterState-D4OBK8l5.js +1 -0
  220. package/dist/web/assets/webhook-DjeeZiNC.js +1 -0
  221. package/dist/web/assets/webhook-bits-jw-y2D3u.js +1 -0
  222. package/dist/web/assets/webhook-sheet-B8h0skDe.js +34 -0
  223. package/dist/web/assets/webhooks-Cfsdpoyd.js +1 -0
  224. package/dist/web/assets/x-MF2TZ9aG.js +1 -0
  225. package/dist/web/favicon.svg +1 -0
  226. package/dist/web/index.html +27 -0
  227. package/package.json +98 -1
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env node
2
+ import { t as AdminApiError } from "./admin-5gThRwgj.js";
3
+ //#region server/connections-cli/api.ts
4
+ /** The routes aren't there: an older daemon, or brokerUpstreams is off. */
5
+ var BrokerOffError = class extends Error {
6
+ constructor() {
7
+ super("This xaq doesn't have connections turned on yet (the brokerUpstreams setting), or is older than this CLI. Update it, turn connections on in the console's Settings, then run this again.");
8
+ this.name = "BrokerOffError";
9
+ }
10
+ };
11
+ const enc = encodeURIComponent;
12
+ var ConnectionsApi = class {
13
+ channel;
14
+ constructor(channel) {
15
+ this.channel = channel;
16
+ }
17
+ async call(method, path, body) {
18
+ try {
19
+ return await this.channel.request(method, path, body);
20
+ } catch (err) {
21
+ if (err instanceof AdminApiError && err.status === 404 && err.code === "not_found" && path.startsWith("/api/connections")) throw new BrokerOffError();
22
+ throw err;
23
+ }
24
+ }
25
+ list() {
26
+ return this.call("GET", "/api/connections");
27
+ }
28
+ presets() {
29
+ return this.call("GET", "/api/connections/presets");
30
+ }
31
+ /** With `connectionId`, the probe uses that connection's private-target allow (when it covers the URL). */
32
+ probe(url, connectionId) {
33
+ return this.call("POST", "/api/connections/probe", connectionId ? {
34
+ url,
35
+ connectionId
36
+ } : { url });
37
+ }
38
+ create(input) {
39
+ return this.call("POST", "/api/connections", input);
40
+ }
41
+ get(id) {
42
+ return this.call("GET", `/api/connections/${enc(id)}`);
43
+ }
44
+ /** Stores a static header (and connects), or starts OAuth and returns the authorize URL. */
45
+ connect(id, input = {}) {
46
+ return this.call("POST", `/api/connections/${enc(id)}/connect`, input);
47
+ }
48
+ /** The admin-only private-target allow, pinned server-side to the URL's exact scheme://host:port. */
49
+ allowPrivateTarget(id, allow) {
50
+ return this.call("PUT", `/api/connections/${enc(id)}/private-target`, { allow });
51
+ }
52
+ /** The kill switch: disabled at once, pending calls cancelled, credentials deleted. */
53
+ kill(id) {
54
+ return this.call("POST", `/api/connections/${enc(id)}/kill`, {});
55
+ }
56
+ remove(id) {
57
+ return this.call("DELETE", `/api/connections/${enc(id)}`);
58
+ }
59
+ async bySlug(slug) {
60
+ const all = await this.list();
61
+ const found = all.find((c) => c.slug === slug);
62
+ if (!found) throw new Error(`No connection "${slug}". ${all.length ? `There are: ${all.map((c) => c.slug).join(", ")}.` : "There are none yet."}`);
63
+ return found;
64
+ }
65
+ grants(id) {
66
+ return this.call("GET", `/api/connections/${enc(id)}/grants`);
67
+ }
68
+ /** The full list: agents not in it lose access. */
69
+ setGrants(id, grants) {
70
+ return this.call("PUT", `/api/connections/${enc(id)}/grants`, { grants });
71
+ }
72
+ agents() {
73
+ return this.channel.request("GET", "/api/agents");
74
+ }
75
+ /** Paste mode: the address the browser landed on after approving (the daemon checks state and issuer). */
76
+ async finish(url) {
77
+ try {
78
+ return await this.call("POST", "/api/connections/finish", { url });
79
+ } catch (err) {
80
+ const body = err instanceof AdminApiError ? err.body : null;
81
+ if (body?.status === "error") return body;
82
+ throw err;
83
+ }
84
+ }
85
+ };
86
+ //#endregion
87
+ export { ConnectionsApi };
88
+
89
+ //# sourceMappingURL=api-BFpElwqK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-BFpElwqK.js","names":[],"sources":["../server/connections-cli/api.ts"],"sourcesContent":["import type {\n AccessLevel,\n Agent,\n ConnectionGrant,\n ConnectionProbe,\n ConnectionView,\n CreateConnectionInput,\n PresetView,\n StartConnectInput,\n StartConnectResult,\n} from \"../../shared/types.ts\";\nimport { AdminApiError, type AdminChannel } from \"./admin.ts\";\n\n/**\n * The admin connections API (server/api/connections.ts, DTOs in shared/types.ts) as the CLI uses it. While the\n * `brokerUpstreams` setting is off every /api/connections route answers 404; the CLI says so in plain words.\n */\n\nexport type { ConnectionProbe, ConnectionView, PresetView, StartConnectResult };\n\n/** The routes aren't there: an older daemon, or brokerUpstreams is off. */\nexport class BrokerOffError extends Error {\n constructor() {\n super(\n \"This xaq doesn't have connections turned on yet (the brokerUpstreams setting), or is older than this CLI. \" +\n \"Update it, turn connections on in the console's Settings, then run this again.\",\n );\n this.name = \"BrokerOffError\";\n }\n}\n\nconst enc = encodeURIComponent;\n\nexport class ConnectionsApi {\n constructor(readonly channel: AdminChannel) {}\n\n private async call<T>(method: string, path: string, body?: unknown): Promise<T> {\n try {\n return await this.channel.request<T>(method, path, body);\n } catch (err) {\n if (err instanceof AdminApiError && err.status === 404 && err.code === \"not_found\" && path.startsWith(\"/api/connections\")) throw new BrokerOffError();\n throw err;\n }\n }\n\n list(): Promise<ConnectionView[]> {\n return this.call(\"GET\", \"/api/connections\");\n }\n presets(): Promise<PresetView[]> {\n return this.call(\"GET\", \"/api/connections/presets\");\n }\n /** With `connectionId`, the probe uses that connection's private-target allow (when it covers the URL). */\n probe(url: string, connectionId?: string): Promise<ConnectionProbe> {\n return this.call(\"POST\", \"/api/connections/probe\", connectionId ? { url, connectionId } : { url });\n }\n create(input: CreateConnectionInput): Promise<ConnectionView> {\n return this.call(\"POST\", \"/api/connections\", input);\n }\n get(id: string): Promise<ConnectionView> {\n return this.call(\"GET\", `/api/connections/${enc(id)}`);\n }\n /** Stores a static header (and connects), or starts OAuth and returns the authorize URL. */\n connect(id: string, input: StartConnectInput = {}): Promise<StartConnectResult> {\n return this.call(\"POST\", `/api/connections/${enc(id)}/connect`, input);\n }\n /** The admin-only private-target allow, pinned server-side to the URL's exact scheme://host:port. */\n allowPrivateTarget(id: string, allow: boolean): Promise<ConnectionView> {\n return this.call(\"PUT\", `/api/connections/${enc(id)}/private-target`, { allow });\n }\n /** The kill switch: disabled at once, pending calls cancelled, credentials deleted. */\n kill(id: string): Promise<void> {\n return this.call(\"POST\", `/api/connections/${enc(id)}/kill`, {});\n }\n remove(id: string): Promise<void> {\n return this.call(\"DELETE\", `/api/connections/${enc(id)}`);\n }\n async bySlug(slug: string): Promise<ConnectionView> {\n const all = await this.list();\n const found = all.find((c) => c.slug === slug);\n if (!found) throw new Error(`No connection \"${slug}\". ${all.length ? `There are: ${all.map((c) => c.slug).join(\", \")}.` : \"There are none yet.\"}`);\n return found;\n }\n grants(id: string): Promise<ConnectionGrant[]> {\n return this.call(\"GET\", `/api/connections/${enc(id)}/grants`);\n }\n /** The full list: agents not in it lose access. */\n setGrants(id: string, grants: { agentId: string; level: AccessLevel }[]): Promise<ConnectionGrant[]> {\n return this.call(\"PUT\", `/api/connections/${enc(id)}/grants`, { grants });\n }\n agents(): Promise<Agent[]> {\n return this.channel.request(\"GET\", \"/api/agents\");\n }\n\n /** Paste mode: the address the browser landed on after approving (the daemon checks state and issuer). */\n async finish(url: string): Promise<StartConnectResult> {\n try {\n return await this.call<StartConnectResult>(\"POST\", \"/api/connections/finish\", { url });\n } catch (err) {\n // A refused sign-in is a 400 carrying a StartConnectResult, not the usual error envelope.\n const body = err instanceof AdminApiError ? (err.body as StartConnectResult | null) : null;\n if (body?.status === \"error\") return body;\n throw err;\n }\n }\n}\n"],"mappings":";;;;AAqBA,IAAa,iBAAb,cAAoC,MAAM;CACxC,cAAc;EACZ,MACE,0LAEF;EACA,KAAK,OAAO;CACd;AACF;AAEA,MAAM,MAAM;AAEZ,IAAa,iBAAb,MAA4B;CACL;CAArB,YAAY,SAAgC;EAAvB,KAAA,UAAA;CAAwB;CAE7C,MAAc,KAAQ,QAAgB,MAAc,MAA4B;EAC9E,IAAI;GACF,OAAO,MAAM,KAAK,QAAQ,QAAW,QAAQ,MAAM,IAAI;EACzD,SAAS,KAAK;GACZ,IAAI,eAAe,iBAAiB,IAAI,WAAW,OAAO,IAAI,SAAS,eAAe,KAAK,WAAW,kBAAkB,GAAG,MAAM,IAAI,eAAe;GACpJ,MAAM;EACR;CACF;CAEA,OAAkC;EAChC,OAAO,KAAK,KAAK,OAAO,kBAAkB;CAC5C;CACA,UAAiC;EAC/B,OAAO,KAAK,KAAK,OAAO,0BAA0B;CACpD;;CAEA,MAAM,KAAa,cAAiD;EAClE,OAAO,KAAK,KAAK,QAAQ,0BAA0B,eAAe;GAAE;GAAK;EAAa,IAAI,EAAE,IAAI,CAAC;CACnG;CACA,OAAO,OAAuD;EAC5D,OAAO,KAAK,KAAK,QAAQ,oBAAoB,KAAK;CACpD;CACA,IAAI,IAAqC;EACvC,OAAO,KAAK,KAAK,OAAO,oBAAoB,IAAI,EAAE,GAAG;CACvD;;CAEA,QAAQ,IAAY,QAA2B,CAAC,GAAgC;EAC9E,OAAO,KAAK,KAAK,QAAQ,oBAAoB,IAAI,EAAE,EAAE,WAAW,KAAK;CACvE;;CAEA,mBAAmB,IAAY,OAAyC;EACtE,OAAO,KAAK,KAAK,OAAO,oBAAoB,IAAI,EAAE,EAAE,kBAAkB,EAAE,MAAM,CAAC;CACjF;;CAEA,KAAK,IAA2B;EAC9B,OAAO,KAAK,KAAK,QAAQ,oBAAoB,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;CACjE;CACA,OAAO,IAA2B;EAChC,OAAO,KAAK,KAAK,UAAU,oBAAoB,IAAI,EAAE,GAAG;CAC1D;CACA,MAAM,OAAO,MAAuC;EAClD,MAAM,MAAM,MAAM,KAAK,KAAK;EAC5B,MAAM,QAAQ,IAAI,MAAM,MAAM,EAAE,SAAS,IAAI;EAC7C,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,kBAAkB,KAAK,KAAK,IAAI,SAAS,cAAc,IAAI,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,KAAK,uBAAuB;EACjJ,OAAO;CACT;CACA,OAAO,IAAwC;EAC7C,OAAO,KAAK,KAAK,OAAO,oBAAoB,IAAI,EAAE,EAAE,QAAQ;CAC9D;;CAEA,UAAU,IAAY,QAA+E;EACnG,OAAO,KAAK,KAAK,OAAO,oBAAoB,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC;CAC1E;CACA,SAA2B;EACzB,OAAO,KAAK,QAAQ,QAAQ,OAAO,aAAa;CAClD;;CAGA,MAAM,OAAO,KAA0C;EACrD,IAAI;GACF,OAAO,MAAM,KAAK,KAAyB,QAAQ,2BAA2B,EAAE,IAAI,CAAC;EACvF,SAAS,KAAK;GAEZ,MAAM,OAAO,eAAe,gBAAiB,IAAI,OAAqC;GACtF,IAAI,MAAM,WAAW,SAAS,OAAO;GACrC,MAAM;EACR;CACF;AACF"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export { t as AuditLog } from "./audit-BVYknW2i.js";
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env node
2
+ import { i as now, r as json } from "./db-BEUEUPyP.js";
3
+ //#region server/audit.ts
4
+ /**
5
+ * SQL condition for an MCP tool call in audit_log: an agent actor and an action without a "." (tool
6
+ * names are like "send_message"; "pairing.key_delivered" and console actions have a dot). The same
7
+ * rule as isMcpToolAction in shared/types.ts (used by the console). `t` is the table alias, if any.
8
+ *
9
+ * Every outcome counts, including calls rejected before a tool ran (unknown tool, invalid arguments,
10
+ * a malformed tools/call): those are recorded with outcome "error" (see rejectedCall in
11
+ * server/mcp/server.ts), so the Overview's "Tool calls" counts them. Anything that needs proof that
12
+ * an agent works (anyAgentVerified, the wizard's checks) adds `outcome = 'ok'`.
13
+ */
14
+ function mcpToolCallSql(t) {
15
+ const c = t ? `${t}.` : "";
16
+ return `${c}actor_type = 'agent' AND instr(${c}action, '.') = 0`;
17
+ }
18
+ const SELECT = `SELECT a.*, CASE a.actor_type WHEN 'agent' THEN ag.name WHEN 'admin' THEN 'admin' ELSE NULL END AS actor_name
19
+ FROM audit_log a LEFT JOIN agents ag ON a.actor_type = 'agent' AND ag.id = a.actor_id`;
20
+ const toEntry = (r) => ({
21
+ id: r.id,
22
+ ts: r.ts,
23
+ actorType: r.actor_type,
24
+ actorId: r.actor_id,
25
+ actorName: r.actor_name,
26
+ action: r.action,
27
+ accountId: r.account_id,
28
+ target: r.target,
29
+ outcome: r.outcome,
30
+ reason: r.reason,
31
+ durationMs: r.duration_ms,
32
+ detail: json.parse(r.detail, null)
33
+ });
34
+ /** Append-only audit log. Every agent tool call and every admin mutation is recorded. */
35
+ var AuditLog = class {
36
+ db;
37
+ bus;
38
+ constructor(db, bus) {
39
+ this.db = db;
40
+ this.bus = bus;
41
+ }
42
+ record(input) {
43
+ const { lastInsertRowid } = this.db.run(`INSERT INTO audit_log (ts, actor_type, actor_id, action, account_id, target, outcome, reason, duration_ms, detail)
44
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, now(), input.actorType, input.actorId ?? null, input.action, input.accountId ?? null, input.target ?? null, input.outcome, input.reason ?? null, input.durationMs ?? null, input.detail ? json.str(input.detail) : null);
45
+ const entry = toEntry(this.db.get(`${SELECT} WHERE a.id = ?`, lastInsertRowid));
46
+ this.bus.emit("audit", entry);
47
+ return entry;
48
+ }
49
+ /** Newest first. */
50
+ list(q = {}) {
51
+ const where = [];
52
+ const params = [];
53
+ const add = (clause, value) => {
54
+ where.push(clause);
55
+ params.push(value);
56
+ };
57
+ if (q.agentId) add("a.actor_id = ?", q.agentId);
58
+ if (q.accountId) add("a.account_id = ?", q.accountId);
59
+ if (q.outcome) add("a.outcome = ?", q.outcome);
60
+ if (q.action) add("a.action = ?", q.action);
61
+ const before = Number(q.cursor);
62
+ if (q.cursor && Number.isInteger(before)) add("a.id < ?", before);
63
+ const limit = Math.min(Math.max(q.limit ?? 50, 1), 200);
64
+ const rows = this.db.all(`${SELECT} ${where.length ? "WHERE " + where.join(" AND ") : ""} ORDER BY a.id DESC LIMIT ?`, ...params, limit + 1);
65
+ const items = rows.slice(0, limit).map(toEntry);
66
+ return {
67
+ items,
68
+ nextCursor: rows.length > limit ? String(items.at(-1).id) : null
69
+ };
70
+ }
71
+ /** Deletes entries older than `beforeIso`. Returns the number removed. */
72
+ prune(beforeIso) {
73
+ return this.db.run("DELETE FROM audit_log WHERE ts < ?", beforeIso).changes;
74
+ }
75
+ };
76
+ //#endregion
77
+ export { mcpToolCallSql as n, AuditLog as t };
78
+
79
+ //# sourceMappingURL=audit-BVYknW2i.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-BVYknW2i.js","names":[],"sources":["../server/audit.ts"],"sourcesContent":["import type { ActorType, AuditEntry, AuditOutcome, Page } from \"../shared/types.ts\";\nimport type { Bus } from \"./bus.ts\";\nimport { type Db, json, now } from \"./db/index.ts\";\n\nexport interface AuditInput {\n actorType: ActorType;\n actorId?: string | null;\n /** MCP tool name or console action, e.g. \"send_message\", \"agent.create\", \"account.connect\". */\n action: string;\n accountId?: string | null;\n target?: string | null;\n outcome: AuditOutcome;\n /** Required for denials: the guardrail that blocked it (\"allow_to\", \"label_scope\", \"rate_limit\", …). */\n reason?: string | null;\n durationMs?: number | null;\n /** Small, non-sensitive context. Never message bodies, keys or tokens. */\n detail?: Record<string, unknown> | null;\n}\n\n/**\n * SQL condition for an MCP tool call in audit_log: an agent actor and an action without a \".\" (tool\n * names are like \"send_message\"; \"pairing.key_delivered\" and console actions have a dot). The same\n * rule as isMcpToolAction in shared/types.ts (used by the console). `t` is the table alias, if any.\n *\n * Every outcome counts, including calls rejected before a tool ran (unknown tool, invalid arguments,\n * a malformed tools/call): those are recorded with outcome \"error\" (see rejectedCall in\n * server/mcp/server.ts), so the Overview's \"Tool calls\" counts them. Anything that needs proof that\n * an agent works (anyAgentVerified, the wizard's checks) adds `outcome = 'ok'`.\n */\nexport function mcpToolCallSql(t?: string): string {\n const c = t ? `${t}.` : \"\";\n return `${c}actor_type = 'agent' AND instr(${c}action, '.') = 0`;\n}\n\nexport interface AuditQuery {\n agentId?: string;\n accountId?: string;\n outcome?: AuditOutcome;\n action?: string;\n /** Opaque cursor from a previous page. */\n cursor?: string | null;\n limit?: number;\n}\n\ninterface AuditRow {\n id: number;\n ts: string;\n actor_type: ActorType;\n actor_id: string | null;\n actor_name: string | null;\n action: string;\n account_id: string | null;\n target: string | null;\n outcome: AuditOutcome;\n reason: string | null;\n duration_ms: number | null;\n detail: string | null;\n}\n\nconst SELECT = `SELECT a.*, CASE a.actor_type WHEN 'agent' THEN ag.name WHEN 'admin' THEN 'admin' ELSE NULL END AS actor_name\n FROM audit_log a LEFT JOIN agents ag ON a.actor_type = 'agent' AND ag.id = a.actor_id`;\n\nconst toEntry = (r: AuditRow): AuditEntry => ({\n id: r.id,\n ts: r.ts,\n actorType: r.actor_type,\n actorId: r.actor_id,\n actorName: r.actor_name,\n action: r.action,\n accountId: r.account_id,\n target: r.target,\n outcome: r.outcome,\n reason: r.reason,\n durationMs: r.duration_ms,\n detail: json.parse<Record<string, unknown> | null>(r.detail, null),\n});\n\n/** Append-only audit log. Every agent tool call and every admin mutation is recorded. */\nexport class AuditLog {\n constructor(\n private readonly db: Db,\n private readonly bus: Bus,\n ) {}\n\n record(input: AuditInput): AuditEntry {\n const { lastInsertRowid } = this.db.run(\n `INSERT INTO audit_log (ts, actor_type, actor_id, action, account_id, target, outcome, reason, duration_ms, detail)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n now(),\n input.actorType,\n input.actorId ?? null,\n input.action,\n input.accountId ?? null,\n input.target ?? null,\n input.outcome,\n input.reason ?? null,\n input.durationMs ?? null,\n input.detail ? json.str(input.detail) : null,\n );\n const entry = toEntry(this.db.get<AuditRow>(`${SELECT} WHERE a.id = ?`, lastInsertRowid)!);\n this.bus.emit(\"audit\", entry);\n return entry;\n }\n\n /** Newest first. */\n list(q: AuditQuery = {}): Page<AuditEntry> {\n const where: string[] = [];\n const params: (string | number)[] = [];\n const add = (clause: string, value: string | number) => {\n where.push(clause);\n params.push(value);\n };\n if (q.agentId) add(\"a.actor_id = ?\", q.agentId);\n if (q.accountId) add(\"a.account_id = ?\", q.accountId);\n if (q.outcome) add(\"a.outcome = ?\", q.outcome);\n if (q.action) add(\"a.action = ?\", q.action);\n const before = Number(q.cursor);\n if (q.cursor && Number.isInteger(before)) add(\"a.id < ?\", before);\n const limit = Math.min(Math.max(q.limit ?? 50, 1), 200);\n const rows = this.db.all<AuditRow>(\n `${SELECT} ${where.length ? \"WHERE \" + where.join(\" AND \") : \"\"} ORDER BY a.id DESC LIMIT ?`,\n ...params,\n limit + 1,\n );\n const items = rows.slice(0, limit).map(toEntry);\n return { items, nextCursor: rows.length > limit ? String(items.at(-1)!.id) : null };\n }\n\n /** Deletes entries older than `beforeIso`. Returns the number removed. */\n prune(beforeIso: string): number {\n return this.db.run(\"DELETE FROM audit_log WHERE ts < ?\", beforeIso).changes;\n }\n}\n"],"mappings":";;;;;;;;;;;;;AA6BA,SAAgB,eAAe,GAAoB;CACjD,MAAM,IAAI,IAAI,GAAG,EAAE,KAAK;CACxB,OAAO,GAAG,EAAE,iCAAiC,EAAE;AACjD;AA2BA,MAAM,SAAS;;AAGf,MAAM,WAAW,OAA6B;CAC5C,IAAI,EAAE;CACN,IAAI,EAAE;CACN,WAAW,EAAE;CACb,SAAS,EAAE;CACX,WAAW,EAAE;CACb,QAAQ,EAAE;CACV,WAAW,EAAE;CACb,QAAQ,EAAE;CACV,SAAS,EAAE;CACX,QAAQ,EAAE;CACV,YAAY,EAAE;CACd,QAAQ,KAAK,MAAsC,EAAE,QAAQ,IAAI;AACnE;;AAGA,IAAa,WAAb,MAAsB;CAED;CACA;CAFnB,YACE,IACA,KACA;EAFiB,KAAA,KAAA;EACA,KAAA,MAAA;CAChB;CAEH,OAAO,OAA+B;EACpC,MAAM,EAAE,oBAAoB,KAAK,GAAG,IAClC;+CAEA,IAAI,GACJ,MAAM,WACN,MAAM,WAAW,MACjB,MAAM,QACN,MAAM,aAAa,MACnB,MAAM,UAAU,MAChB,MAAM,SACN,MAAM,UAAU,MAChB,MAAM,cAAc,MACpB,MAAM,SAAS,KAAK,IAAI,MAAM,MAAM,IAAI,IAC1C;EACA,MAAM,QAAQ,QAAQ,KAAK,GAAG,IAAc,GAAG,OAAO,kBAAkB,eAAe,CAAE;EACzF,KAAK,IAAI,KAAK,SAAS,KAAK;EAC5B,OAAO;CACT;;CAGA,KAAK,IAAgB,CAAC,GAAqB;EACzC,MAAM,QAAkB,CAAC;EACzB,MAAM,SAA8B,CAAC;EACrC,MAAM,OAAO,QAAgB,UAA2B;GACtD,MAAM,KAAK,MAAM;GACjB,OAAO,KAAK,KAAK;EACnB;EACA,IAAI,EAAE,SAAS,IAAI,kBAAkB,EAAE,OAAO;EAC9C,IAAI,EAAE,WAAW,IAAI,oBAAoB,EAAE,SAAS;EACpD,IAAI,EAAE,SAAS,IAAI,iBAAiB,EAAE,OAAO;EAC7C,IAAI,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM;EAC1C,MAAM,SAAS,OAAO,EAAE,MAAM;EAC9B,IAAI,EAAE,UAAU,OAAO,UAAU,MAAM,GAAG,IAAI,YAAY,MAAM;EAChE,MAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,EAAE,SAAS,IAAI,CAAC,GAAG,GAAG;EACtD,MAAM,OAAO,KAAK,GAAG,IACnB,GAAG,OAAO,GAAG,MAAM,SAAS,WAAW,MAAM,KAAK,OAAO,IAAI,GAAG,8BAChE,GAAG,QACH,QAAQ,CACV;EACA,MAAM,QAAQ,KAAK,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,OAAO;EAC9C,OAAO;GAAE;GAAO,YAAY,KAAK,SAAS,QAAQ,OAAO,MAAM,GAAG,EAAE,CAAC,CAAE,EAAE,IAAI;EAAK;CACpF;;CAGA,MAAM,WAA2B;EAC/B,OAAO,KAAK,GAAG,IAAI,sCAAsC,SAAS,CAAC,CAAC;CACtE;AACF"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export { l as currentSetupToken, f as isClaimed, g as resetAdminPassword } from "./auth-D-GmwNv-.js";