@aria-cli/tools 1.0.11 → 1.0.13

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 (231) hide show
  1. package/dist-cjs/index.js +400 -436
  2. package/dist-cjs/network-runtime/index.js +8 -173
  3. package/package.json +6 -6
  4. package/dist-cjs/ask-user-interaction.js +0 -28
  5. package/dist-cjs/ask-user-interaction.js.map +0 -1
  6. package/dist-cjs/cache/web-cache.js +0 -71
  7. package/dist-cjs/cache/web-cache.js.map +0 -1
  8. package/dist-cjs/definitions/arion.js +0 -108
  9. package/dist-cjs/definitions/arion.js.map +0 -1
  10. package/dist-cjs/definitions/browser/browser.js +0 -422
  11. package/dist-cjs/definitions/browser/browser.js.map +0 -1
  12. package/dist-cjs/definitions/browser/index.js +0 -9
  13. package/dist-cjs/definitions/browser/index.js.map +0 -1
  14. package/dist-cjs/definitions/browser/pw-downloads.js +0 -118
  15. package/dist-cjs/definitions/browser/pw-downloads.js.map +0 -1
  16. package/dist-cjs/definitions/browser/pw-interactions.js +0 -214
  17. package/dist-cjs/definitions/browser/pw-interactions.js.map +0 -1
  18. package/dist-cjs/definitions/browser/pw-responses.js +0 -85
  19. package/dist-cjs/definitions/browser/pw-responses.js.map +0 -1
  20. package/dist-cjs/definitions/browser/pw-session.js +0 -327
  21. package/dist-cjs/definitions/browser/pw-session.js.map +0 -1
  22. package/dist-cjs/definitions/browser/pw-shared.js +0 -73
  23. package/dist-cjs/definitions/browser/pw-shared.js.map +0 -1
  24. package/dist-cjs/definitions/browser/pw-snapshot.js +0 -308
  25. package/dist-cjs/definitions/browser/pw-snapshot.js.map +0 -1
  26. package/dist-cjs/definitions/browser/pw-state.js +0 -71
  27. package/dist-cjs/definitions/browser/pw-state.js.map +0 -1
  28. package/dist-cjs/definitions/browser/types.js +0 -6
  29. package/dist-cjs/definitions/browser/types.js.map +0 -1
  30. package/dist-cjs/definitions/code-intelligence.js +0 -474
  31. package/dist-cjs/definitions/code-intelligence.js.map +0 -1
  32. package/dist-cjs/definitions/core.js +0 -134
  33. package/dist-cjs/definitions/core.js.map +0 -1
  34. package/dist-cjs/definitions/delegation.js +0 -516
  35. package/dist-cjs/definitions/delegation.js.map +0 -1
  36. package/dist-cjs/definitions/deploy.js +0 -69
  37. package/dist-cjs/definitions/deploy.js.map +0 -1
  38. package/dist-cjs/definitions/filesystem.js +0 -200
  39. package/dist-cjs/definitions/filesystem.js.map +0 -1
  40. package/dist-cjs/definitions/frg.js +0 -67
  41. package/dist-cjs/definitions/frg.js.map +0 -1
  42. package/dist-cjs/definitions/index.js +0 -44
  43. package/dist-cjs/definitions/index.js.map +0 -1
  44. package/dist-cjs/definitions/memory.js +0 -127
  45. package/dist-cjs/definitions/memory.js.map +0 -1
  46. package/dist-cjs/definitions/messaging.js +0 -632
  47. package/dist-cjs/definitions/messaging.js.map +0 -1
  48. package/dist-cjs/definitions/meta.js +0 -353
  49. package/dist-cjs/definitions/meta.js.map +0 -1
  50. package/dist-cjs/definitions/network.js +0 -163
  51. package/dist-cjs/definitions/network.js.map +0 -1
  52. package/dist-cjs/definitions/outlook.js +0 -281
  53. package/dist-cjs/definitions/outlook.js.map +0 -1
  54. package/dist-cjs/definitions/patch/apply-patch.js +0 -192
  55. package/dist-cjs/definitions/patch/apply-patch.js.map +0 -1
  56. package/dist-cjs/definitions/patch/fuzzy-match.js +0 -173
  57. package/dist-cjs/definitions/patch/fuzzy-match.js.map +0 -1
  58. package/dist-cjs/definitions/patch/index.js +0 -6
  59. package/dist-cjs/definitions/patch/index.js.map +0 -1
  60. package/dist-cjs/definitions/patch/patch-parser.js +0 -216
  61. package/dist-cjs/definitions/patch/patch-parser.js.map +0 -1
  62. package/dist-cjs/definitions/patch/sandbox-paths.js +0 -114
  63. package/dist-cjs/definitions/patch/sandbox-paths.js.map +0 -1
  64. package/dist-cjs/definitions/process/index.js +0 -9
  65. package/dist-cjs/definitions/process/index.js.map +0 -1
  66. package/dist-cjs/definitions/process/process-registry.js +0 -232
  67. package/dist-cjs/definitions/process/process-registry.js.map +0 -1
  68. package/dist-cjs/definitions/process/process.js +0 -390
  69. package/dist-cjs/definitions/process/process.js.map +0 -1
  70. package/dist-cjs/definitions/process/pty-keys.js +0 -260
  71. package/dist-cjs/definitions/process/pty-keys.js.map +0 -1
  72. package/dist-cjs/definitions/process/session-slug.js +0 -146
  73. package/dist-cjs/definitions/process/session-slug.js.map +0 -1
  74. package/dist-cjs/definitions/quip.js +0 -199
  75. package/dist-cjs/definitions/quip.js.map +0 -1
  76. package/dist-cjs/definitions/search.js +0 -64
  77. package/dist-cjs/definitions/search.js.map +0 -1
  78. package/dist-cjs/definitions/session-history.js +0 -73
  79. package/dist-cjs/definitions/session-history.js.map +0 -1
  80. package/dist-cjs/definitions/shell.js +0 -185
  81. package/dist-cjs/definitions/shell.js.map +0 -1
  82. package/dist-cjs/definitions/slack.js +0 -184
  83. package/dist-cjs/definitions/slack.js.map +0 -1
  84. package/dist-cjs/definitions/web.js +0 -113
  85. package/dist-cjs/definitions/web.js.map +0 -1
  86. package/dist-cjs/executors/apply-patch.js +0 -939
  87. package/dist-cjs/executors/apply-patch.js.map +0 -1
  88. package/dist-cjs/executors/arion.js +0 -126
  89. package/dist-cjs/executors/arion.js.map +0 -1
  90. package/dist-cjs/executors/code-intelligence.js +0 -926
  91. package/dist-cjs/executors/code-intelligence.js.map +0 -1
  92. package/dist-cjs/executors/deploy.js +0 -870
  93. package/dist-cjs/executors/deploy.js.map +0 -1
  94. package/dist-cjs/executors/filesystem.js +0 -1168
  95. package/dist-cjs/executors/filesystem.js.map +0 -1
  96. package/dist-cjs/executors/frg-freshness.js +0 -628
  97. package/dist-cjs/executors/frg-freshness.js.map +0 -1
  98. package/dist-cjs/executors/frg.js +0 -335
  99. package/dist-cjs/executors/frg.js.map +0 -1
  100. package/dist-cjs/executors/index.js +0 -144
  101. package/dist-cjs/executors/index.js.map +0 -1
  102. package/dist-cjs/executors/learning-meta.js +0 -1166
  103. package/dist-cjs/executors/learning-meta.js.map +0 -1
  104. package/dist-cjs/executors/lsp-client.js +0 -311
  105. package/dist-cjs/executors/lsp-client.js.map +0 -1
  106. package/dist-cjs/executors/memory.js +0 -797
  107. package/dist-cjs/executors/memory.js.map +0 -1
  108. package/dist-cjs/executors/meta.js +0 -227
  109. package/dist-cjs/executors/meta.js.map +0 -1
  110. package/dist-cjs/executors/process-registry.js +0 -470
  111. package/dist-cjs/executors/process-registry.js.map +0 -1
  112. package/dist-cjs/executors/pty-session-store.js +0 -35
  113. package/dist-cjs/executors/pty-session-store.js.map +0 -1
  114. package/dist-cjs/executors/pty.js +0 -313
  115. package/dist-cjs/executors/pty.js.map +0 -1
  116. package/dist-cjs/executors/restart.js +0 -156
  117. package/dist-cjs/executors/restart.js.map +0 -1
  118. package/dist-cjs/executors/search-freshness.js +0 -235
  119. package/dist-cjs/executors/search-freshness.js.map +0 -1
  120. package/dist-cjs/executors/search-types.js +0 -57
  121. package/dist-cjs/executors/search-types.js.map +0 -1
  122. package/dist-cjs/executors/search.js +0 -103
  123. package/dist-cjs/executors/search.js.map +0 -1
  124. package/dist-cjs/executors/self-diagnose.js +0 -435
  125. package/dist-cjs/executors/self-diagnose.js.map +0 -1
  126. package/dist-cjs/executors/session-history.js +0 -321
  127. package/dist-cjs/executors/session-history.js.map +0 -1
  128. package/dist-cjs/executors/shell-safety.js +0 -479
  129. package/dist-cjs/executors/shell-safety.js.map +0 -1
  130. package/dist-cjs/executors/shell.js +0 -1002
  131. package/dist-cjs/executors/shell.js.map +0 -1
  132. package/dist-cjs/executors/utils.js +0 -74
  133. package/dist-cjs/executors/utils.js.map +0 -1
  134. package/dist-cjs/executors/web.js +0 -548
  135. package/dist-cjs/executors/web.js.map +0 -1
  136. package/dist-cjs/extraction/content-extraction.js +0 -244
  137. package/dist-cjs/extraction/content-extraction.js.map +0 -1
  138. package/dist-cjs/extraction/index.js +0 -9
  139. package/dist-cjs/extraction/index.js.map +0 -1
  140. package/dist-cjs/headless-control-contract.js +0 -973
  141. package/dist-cjs/headless-control-contract.js.map +0 -1
  142. package/dist-cjs/index.js.map +0 -1
  143. package/dist-cjs/local-control-http-auth.js +0 -6
  144. package/dist-cjs/local-control-http-auth.js.map +0 -1
  145. package/dist-cjs/mcp/client.js +0 -186
  146. package/dist-cjs/mcp/client.js.map +0 -1
  147. package/dist-cjs/mcp/connection.js +0 -485
  148. package/dist-cjs/mcp/connection.js.map +0 -1
  149. package/dist-cjs/mcp/index.js +0 -31
  150. package/dist-cjs/mcp/index.js.map +0 -1
  151. package/dist-cjs/mcp/jsonrpc.js +0 -149
  152. package/dist-cjs/mcp/jsonrpc.js.map +0 -1
  153. package/dist-cjs/mcp/types.js +0 -9
  154. package/dist-cjs/mcp/types.js.map +0 -1
  155. package/dist-cjs/network-control-adapter.js +0 -78
  156. package/dist-cjs/network-control-adapter.js.map +0 -1
  157. package/dist-cjs/network-runtime/address-types.js +0 -169
  158. package/dist-cjs/network-runtime/address-types.js.map +0 -1
  159. package/dist-cjs/network-runtime/db-owner-fencing.js +0 -77
  160. package/dist-cjs/network-runtime/db-owner-fencing.js.map +0 -1
  161. package/dist-cjs/network-runtime/delivery-receipts.js +0 -277
  162. package/dist-cjs/network-runtime/delivery-receipts.js.map +0 -1
  163. package/dist-cjs/network-runtime/direct-endpoint-authority.js +0 -30
  164. package/dist-cjs/network-runtime/direct-endpoint-authority.js.map +0 -1
  165. package/dist-cjs/network-runtime/index.js.map +0 -1
  166. package/dist-cjs/network-runtime/local-control-contract.js +0 -634
  167. package/dist-cjs/network-runtime/local-control-contract.js.map +0 -1
  168. package/dist-cjs/network-runtime/node-store-contract.js +0 -39
  169. package/dist-cjs/network-runtime/node-store-contract.js.map +0 -1
  170. package/dist-cjs/network-runtime/pair-route-contract.js +0 -81
  171. package/dist-cjs/network-runtime/pair-route-contract.js.map +0 -1
  172. package/dist-cjs/network-runtime/peer-capabilities.js +0 -38
  173. package/dist-cjs/network-runtime/peer-capabilities.js.map +0 -1
  174. package/dist-cjs/network-runtime/peer-principal-ref.js +0 -16
  175. package/dist-cjs/network-runtime/peer-principal-ref.js.map +0 -1
  176. package/dist-cjs/network-runtime/peer-state-machine.js +0 -130
  177. package/dist-cjs/network-runtime/peer-state-machine.js.map +0 -1
  178. package/dist-cjs/network-runtime/protocol-schemas.js +0 -213
  179. package/dist-cjs/network-runtime/protocol-schemas.js.map +0 -1
  180. package/dist-cjs/network-runtime/runtime-bootstrap-contract.js +0 -64
  181. package/dist-cjs/network-runtime/runtime-bootstrap-contract.js.map +0 -1
  182. package/dist-cjs/outlook/desktop-session.js +0 -319
  183. package/dist-cjs/outlook/desktop-session.js.map +0 -1
  184. package/dist-cjs/policy.js +0 -156
  185. package/dist-cjs/policy.js.map +0 -1
  186. package/dist-cjs/providers/brave.js +0 -67
  187. package/dist-cjs/providers/brave.js.map +0 -1
  188. package/dist-cjs/providers/duckduckgo.js +0 -181
  189. package/dist-cjs/providers/duckduckgo.js.map +0 -1
  190. package/dist-cjs/providers/exa.js +0 -68
  191. package/dist-cjs/providers/exa.js.map +0 -1
  192. package/dist-cjs/providers/firecrawl.js +0 -60
  193. package/dist-cjs/providers/firecrawl.js.map +0 -1
  194. package/dist-cjs/providers/index.js +0 -18
  195. package/dist-cjs/providers/index.js.map +0 -1
  196. package/dist-cjs/providers/jina.js +0 -54
  197. package/dist-cjs/providers/jina.js.map +0 -1
  198. package/dist-cjs/providers/router.js +0 -101
  199. package/dist-cjs/providers/router.js.map +0 -1
  200. package/dist-cjs/providers/search-provider.js +0 -37
  201. package/dist-cjs/providers/search-provider.js.map +0 -1
  202. package/dist-cjs/providers/tavily.js +0 -59
  203. package/dist-cjs/providers/tavily.js.map +0 -1
  204. package/dist-cjs/quip/desktop-session.js +0 -354
  205. package/dist-cjs/quip/desktop-session.js.map +0 -1
  206. package/dist-cjs/registry/index.js +0 -7
  207. package/dist-cjs/registry/index.js.map +0 -1
  208. package/dist-cjs/registry/registry.js +0 -762
  209. package/dist-cjs/registry/registry.js.map +0 -1
  210. package/dist-cjs/runtime-socket-local-control-client.js +0 -368
  211. package/dist-cjs/runtime-socket-local-control-client.js.map +0 -1
  212. package/dist-cjs/security/dns-normalization.js +0 -23
  213. package/dist-cjs/security/dns-normalization.js.map +0 -1
  214. package/dist-cjs/security/dns-pinning.js +0 -161
  215. package/dist-cjs/security/dns-pinning.js.map +0 -1
  216. package/dist-cjs/security/external-content.js +0 -96
  217. package/dist-cjs/security/external-content.js.map +0 -1
  218. package/dist-cjs/security/ssrf.js +0 -222
  219. package/dist-cjs/security/ssrf.js.map +0 -1
  220. package/dist-cjs/slack/desktop-session.js +0 -367
  221. package/dist-cjs/slack/desktop-session.js.map +0 -1
  222. package/dist-cjs/tool-factory.js +0 -51
  223. package/dist-cjs/tool-factory.js.map +0 -1
  224. package/dist-cjs/types.js +0 -9
  225. package/dist-cjs/types.js.map +0 -1
  226. package/dist-cjs/utils/retry.js +0 -170
  227. package/dist-cjs/utils/retry.js.map +0 -1
  228. package/dist-cjs/utils/safe-parse-json.js +0 -165
  229. package/dist-cjs/utils/safe-parse-json.js.map +0 -1
  230. package/dist-cjs/utils/url.js +0 -24
  231. package/dist-cjs/utils/url.js.map +0 -1
@@ -1,319 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.createOutlookDesktopClient = createOutlookDesktopClient;
40
- const node_os_1 = __importDefault(require("node:os"));
41
- const node_path_1 = __importDefault(require("node:path"));
42
- const node_fs_1 = require("node:fs");
43
- const OUTLOOK_SESSION_DIR = node_path_1.default.join(node_os_1.default.homedir(), ".aria", "outlook-session");
44
- const OUTLOOK_TOKEN_CACHE = node_path_1.default.join(node_os_1.default.homedir(), ".aria", "cache", "outlook-token.json");
45
- const OUTLOOK_WEB_URL = "https://outlook.office.com/mail/";
46
- // Outlook web uses outlook.office.com-scoped tokens, not graph.microsoft.com.
47
- // The Outlook REST v2 API at outlook.office.com/api/v2.0 accepts these tokens.
48
- const OUTLOOK_REST_API_BASE = "https://outlook.office.com/api/v2.0";
49
- const DEFAULT_BOOTSTRAP_TIMEOUT_MS = 60_000;
50
- async function loadCachedToken() {
51
- try {
52
- const raw = await node_fs_1.promises.readFile(OUTLOOK_TOKEN_CACHE, "utf-8");
53
- const cached = JSON.parse(raw);
54
- // Token valid if >5 min remaining
55
- if (cached.bearerToken && cached.expiresAt > Date.now() + 5 * 60_000) {
56
- return cached;
57
- }
58
- }
59
- catch {
60
- // no cache or invalid
61
- }
62
- return null;
63
- }
64
- async function saveCachedToken(token, email) {
65
- // Decode JWT to get expiry
66
- let exp = Date.now() + 60 * 60_000; // default 1h
67
- try {
68
- const part = token.split(".")[1];
69
- if (!part)
70
- throw new Error("no payload");
71
- const payload = JSON.parse(Buffer.from(part, "base64").toString());
72
- if (payload.exp)
73
- exp = payload.exp * 1000;
74
- }
75
- catch {
76
- /* best-effort */
77
- }
78
- const cached = { bearerToken: token, accountEmail: email, expiresAt: exp };
79
- await node_fs_1.promises.mkdir(node_path_1.default.dirname(OUTLOOK_TOKEN_CACHE), { recursive: true });
80
- await node_fs_1.promises.writeFile(OUTLOOK_TOKEN_CACHE, JSON.stringify(cached, null, 2));
81
- }
82
- // Outlook REST v2 returns PascalCase keys (Subject, From, EmailAddress)
83
- // while Graph API uses camelCase (subject, from, emailAddress).
84
- // Helper to read a field with either casing.
85
- function field(obj, camelKey) {
86
- if (camelKey in obj)
87
- return obj[camelKey];
88
- const pascalKey = camelKey.charAt(0).toUpperCase() + camelKey.slice(1);
89
- return obj[pascalKey];
90
- }
91
- function fieldStr(obj, camelKey) {
92
- const v = field(obj, camelKey);
93
- return typeof v === "string" ? v : "";
94
- }
95
- function parseRecipient(recipient) {
96
- const emailAddress = field(recipient, "emailAddress") ?? null;
97
- if (!emailAddress || typeof emailAddress !== "object")
98
- return null;
99
- return {
100
- name: fieldStr(emailAddress, "name"),
101
- email: fieldStr(emailAddress, "address"),
102
- };
103
- }
104
- function parseRecipients(raw) {
105
- if (!Array.isArray(raw))
106
- return [];
107
- return raw
108
- .filter((r) => !!r && typeof r === "object")
109
- .map(parseRecipient)
110
- .filter((r) => r !== null);
111
- }
112
- function toMessageView(msg) {
113
- const fromRaw = field(msg, "from");
114
- const from = fromRaw && typeof fromRaw === "object"
115
- ? parseRecipient(fromRaw)
116
- : null;
117
- return {
118
- id: fieldStr(msg, "id") || fieldStr(msg, "Id"),
119
- subject: fieldStr(msg, "subject"),
120
- from: from ?? { name: "", email: "" },
121
- toRecipients: parseRecipients(field(msg, "toRecipients")),
122
- receivedDateTime: fieldStr(msg, "receivedDateTime"),
123
- isRead: field(msg, "isRead") === true,
124
- hasAttachments: field(msg, "hasAttachments") === true,
125
- bodyPreview: fieldStr(msg, "bodyPreview"),
126
- conversationId: fieldStr(msg, "conversationId"),
127
- };
128
- }
129
- function toMessageDetail(msg) {
130
- const view = toMessageView(msg);
131
- const bodyRaw = field(msg, "body");
132
- const body = bodyRaw && typeof bodyRaw === "object" ? bodyRaw : {};
133
- return {
134
- ...view,
135
- body: {
136
- contentType: fieldStr(body, "contentType") || "text",
137
- content: fieldStr(body, "content"),
138
- },
139
- ccRecipients: parseRecipients(field(msg, "ccRecipients")),
140
- importance: fieldStr(msg, "importance") || "normal",
141
- };
142
- }
143
- async function waitForMailBearerToken(page, timeoutMs) {
144
- return new Promise((resolve, reject) => {
145
- const timer = setTimeout(() => {
146
- page.off("request", handleRequest);
147
- reject(new Error("Timed out waiting for a Mail-scoped bearer token. " +
148
- "Ensure you are logged in to outlook.office.com."));
149
- }, timeoutMs);
150
- const seen = new Set();
151
- const handleRequest = (request) => {
152
- const authHeader = request.headers()["authorization"];
153
- if (!authHeader || !authHeader.startsWith("Bearer "))
154
- return;
155
- const bearerToken = authHeader.slice(7);
156
- const dedup = bearerToken.substring(0, 30);
157
- if (seen.has(dedup))
158
- return;
159
- seen.add(dedup);
160
- // Decode JWT payload to extract email and scopes
161
- let accountEmail = "";
162
- let scp = "";
163
- try {
164
- const payloadB64 = bearerToken.split(".")[1];
165
- if (payloadB64) {
166
- const payload = JSON.parse(Buffer.from(payloadB64, "base64url").toString("utf8"));
167
- scp = typeof payload.scp === "string" ? payload.scp : "";
168
- accountEmail =
169
- typeof payload.upn === "string"
170
- ? payload.upn
171
- : typeof payload.preferred_username === "string"
172
- ? payload.preferred_username
173
- : typeof payload.unique_name === "string"
174
- ? payload.unique_name
175
- : "";
176
- }
177
- }
178
- catch {
179
- // JWT decode is best-effort
180
- }
181
- // Only accept tokens with Mail.Read scope (from outlook.cloud.microsoft)
182
- if (!scp.includes("Mail.Read"))
183
- return;
184
- clearTimeout(timer);
185
- page.off("request", handleRequest);
186
- resolve({ bearerToken, accountEmail });
187
- };
188
- page.on("request", handleRequest);
189
- });
190
- }
191
- // Stateless client using a cached bearer token (no Playwright needed)
192
- function createStatelessClient(bearerToken, accountEmail) {
193
- const invokeApi = async (method, endpoint, body) => {
194
- const url = `${OUTLOOK_REST_API_BASE}${endpoint}`;
195
- const headers = {
196
- Authorization: `Bearer ${bearerToken}`,
197
- "Content-Type": "application/json",
198
- };
199
- const resp = await fetch(url, {
200
- method,
201
- headers,
202
- body: body ? JSON.stringify(body) : undefined,
203
- });
204
- if (resp.status === 204)
205
- return { status: 204 };
206
- const text = await resp.text();
207
- let json;
208
- try {
209
- json = JSON.parse(text);
210
- }
211
- catch {
212
- throw new Error(`Outlook API ${method} ${endpoint} returned non-JSON (HTTP ${resp.status}).`);
213
- }
214
- if (resp.status >= 400) {
215
- const error = json.error && typeof json.error === "object" ? json.error : {};
216
- const code = typeof error.code === "string" ? error.code : `http_${resp.status}`;
217
- const message = typeof error.message === "string" ? error.message : "Unknown error";
218
- throw new Error(`Outlook API ${method} ${endpoint} failed: ${code} — ${message}`);
219
- }
220
- return json;
221
- };
222
- return buildClientMethods(invokeApi, accountEmail, async () => {
223
- /* no-op close */
224
- });
225
- }
226
- async function createOutlookDesktopClient(opts) {
227
- const timeoutMs = opts?.bootstrapTimeoutMs ?? DEFAULT_BOOTSTRAP_TIMEOUT_MS;
228
- // Strategy 1: Use cached token if still valid (no Playwright needed)
229
- const cached = await loadCachedToken();
230
- if (cached) {
231
- return createStatelessClient(cached.bearerToken, cached.accountEmail);
232
- }
233
- // Strategy 2: Launch Playwright headful to get a fresh token via SSO
234
- // Must be headful — Microsoft SSO blocks headless Chromium
235
- await node_fs_1.promises.mkdir(OUTLOOK_SESSION_DIR, { recursive: true });
236
- const playwright = await Promise.resolve().then(() => __importStar(require("playwright")));
237
- const context = await playwright.chromium.launchPersistentContext(OUTLOOK_SESSION_DIR, {
238
- headless: false,
239
- args: ["--start-maximized"],
240
- viewport: null,
241
- });
242
- const page = context.pages()[0] ?? (await context.newPage());
243
- const bootstrapPromise = waitForMailBearerToken(page, timeoutMs);
244
- await page.goto(OUTLOOK_WEB_URL, {
245
- waitUntil: "domcontentloaded",
246
- timeout: timeoutMs,
247
- });
248
- const { bearerToken, accountEmail } = await bootstrapPromise;
249
- // Cache the token for subsequent calls (avoids launching Playwright)
250
- await saveCachedToken(bearerToken, accountEmail);
251
- // Close browser immediately — we have the token, use stateless client
252
- await page.close().catch(() => undefined);
253
- await context.close().catch(() => undefined);
254
- return createStatelessClient(bearerToken, accountEmail);
255
- }
256
- function buildClientMethods(invokeApi, accountEmail, closeFn) {
257
- return {
258
- getAccountEmail: () => accountEmail,
259
- listMessages: async ({ folder = "inbox", limit = 20, filter, search }) => {
260
- const params = new URLSearchParams();
261
- params.set("$top", String(Math.max(1, Math.min(limit, 50))));
262
- params.set("$select", "Id,Subject,From,ToRecipients,ReceivedDateTime,IsRead,HasAttachments,BodyPreview,ConversationId");
263
- params.set("$orderby", "ReceivedDateTime desc");
264
- if (filter)
265
- params.set("$filter", filter);
266
- if (search)
267
- params.set("$search", `"${search}"`);
268
- const endpoint = `/me/mailFolders/${encodeURIComponent(folder)}/messages?${params.toString()}`;
269
- const json = await invokeApi("GET", endpoint);
270
- const rawMessages = Array.isArray(json.value) ? json.value : [];
271
- const messages = rawMessages
272
- .filter((m) => !!m && typeof m === "object")
273
- .map(toMessageView);
274
- return {
275
- accountEmail,
276
- folder,
277
- messages,
278
- totalCount: typeof json["@odata.count"] === "number" ? json["@odata.count"] : messages.length,
279
- };
280
- },
281
- getMessage: async ({ messageId }) => {
282
- const json = await invokeApi("GET", `/me/messages/${encodeURIComponent(messageId)}`);
283
- return toMessageDetail(json);
284
- },
285
- sendMessage: async ({ to, cc, subject, body, bodyType = "text" }) => {
286
- const toRecipients = to.map((email) => ({
287
- EmailAddress: { Address: email },
288
- }));
289
- const ccRecipients = (cc ?? []).map((email) => ({
290
- EmailAddress: { Address: email },
291
- }));
292
- await invokeApi("POST", "/me/sendMail", {
293
- Message: {
294
- Subject: subject,
295
- Body: { ContentType: bodyType === "html" ? "HTML" : "Text", Content: body },
296
- ToRecipients: toRecipients,
297
- ...(ccRecipients.length > 0 ? { CcRecipients: ccRecipients } : {}),
298
- },
299
- });
300
- return { accountEmail, status: "sent" };
301
- },
302
- replyMessage: async ({ messageId, body, bodyType = "text", replyAll = false }) => {
303
- const replyMethod = replyAll ? "ReplyAll" : "Reply";
304
- await invokeApi("POST", `/me/messages/${encodeURIComponent(messageId)}/${replyMethod}`, {
305
- Comment: body,
306
- ...(bodyType === "html"
307
- ? {
308
- Message: {
309
- Body: { ContentType: "HTML", Content: body },
310
- },
311
- }
312
- : {}),
313
- });
314
- return { accountEmail, status: "sent" };
315
- },
316
- close: closeFn,
317
- };
318
- }
319
- //# sourceMappingURL=desktop-session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"desktop-session.js","sourceRoot":"","sources":["../../src/outlook/desktop-session.ts"],"names":[],"mappings":"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"}
@@ -1,156 +0,0 @@
1
- "use strict";
2
- /**
3
- * Tool Policy Engine
4
- *
5
- * Evaluates whether a tool is allowed based on allow/deny lists with group expansion.
6
- * Supports layered policy merging (intersection semantics) for arion + RunOptions policies.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.TOOL_GROUPS = void 0;
10
- exports.expandGroups = expandGroups;
11
- exports.isToolAllowed = isToolAllowed;
12
- exports.mergePolicies = mergePolicies;
13
- /** Built-in tool groups */
14
- exports.TOOL_GROUPS = {
15
- "group:memory": [
16
- "remember",
17
- "recall",
18
- "forget",
19
- "recall_knowledge",
20
- "reflect",
21
- "search",
22
- "learn",
23
- "session_history",
24
- ],
25
- "group:web": ["web_search", "web_fetch", "browse", "browser"],
26
- "group:filesystem": ["read_file", "write_file", "edit_file", "glob", "grep", "ls", "apply_patch"],
27
- "group:shell": [
28
- "bash",
29
- "exec",
30
- "spawn",
31
- "kill",
32
- "list_processes",
33
- "wait_process",
34
- "write_stdin",
35
- "process",
36
- ],
37
- "group:arion": [
38
- "hatch_arion",
39
- "wake_arion",
40
- "rest_arion",
41
- "retire_arion",
42
- "delegate_arion",
43
- "manage_network",
44
- "list_clients",
45
- "deploy",
46
- ],
47
- "group:meta": [
48
- "ask_user",
49
- "quest_update",
50
- "quest_list",
51
- "search",
52
- "learn",
53
- "learn_tool",
54
- "learn_skill",
55
- "create_tool",
56
- "create_skill",
57
- "use_skill",
58
- "restart",
59
- "spawn_worker",
60
- "check_delegation",
61
- "pause_delegation",
62
- "resume_delegation",
63
- "quest_report",
64
- "self_diagnose",
65
- ],
66
- };
67
- /**
68
- * Expand group references in a policy list.
69
- * "group:memory" → ["remember", "recall", "forget", "reflect"]
70
- * Individual tool names pass through unchanged.
71
- * Unknown group names are ignored (treated as empty).
72
- */
73
- function expandGroups(names) {
74
- const result = new Set();
75
- for (const name of names) {
76
- const lower = name.toLowerCase();
77
- if (lower.startsWith("group:")) {
78
- const members = exports.TOOL_GROUPS[lower];
79
- if (members) {
80
- for (const member of members) {
81
- result.add(member.toLowerCase());
82
- }
83
- }
84
- // Unknown group names are silently ignored
85
- }
86
- else {
87
- result.add(lower);
88
- }
89
- }
90
- return result;
91
- }
92
- /**
93
- * Evaluate whether a tool is allowed by a policy.
94
- * Rules:
95
- * 1. If allow is empty/undefined and restrictAllow is false/undefined
96
- * → all tools allowed (then check deny)
97
- * 2. If allow is non-empty OR restrictAllow=true
98
- * → only listed tools/groups allowed (empty allow + restrictAllow=true denies all)
99
- * 3. Deny always wins over allow
100
- */
101
- function isToolAllowed(toolName, policy) {
102
- const normalized = toolName.toLowerCase();
103
- // Check allow list: when restricted, tool must be in allowed set.
104
- const isAllowRestricted = policy.restrictAllow === true || (policy.allow !== undefined && policy.allow.length > 0);
105
- if (isAllowRestricted) {
106
- const allowed = expandGroups(policy.allow ?? []);
107
- if (!allowed.has(normalized)) {
108
- return false;
109
- }
110
- }
111
- // Check deny list: deny always wins
112
- if (policy.deny && policy.deny.length > 0) {
113
- const denied = expandGroups(policy.deny);
114
- if (denied.has(normalized)) {
115
- return false;
116
- }
117
- }
118
- return true;
119
- }
120
- /**
121
- * Merge two policies (intersection). Used for layered evaluation:
122
- * arion policy ∩ RunOptions policy = effective policy.
123
- * A tool must be allowed by BOTH layers.
124
- */
125
- function mergePolicies(a, b) {
126
- // Merge deny: union of both deny lists
127
- const mergedDeny = [...(a.deny ?? []), ...(b.deny ?? [])];
128
- // Merge allow with restriction semantics:
129
- // - both restricted: intersection (possibly empty = deny all)
130
- // - one restricted: inherit that restriction
131
- // - neither restricted: unrestricted
132
- const aRestricts = a.restrictAllow === true || (a.allow?.length ?? 0) > 0;
133
- const bRestricts = b.restrictAllow === true || (b.allow?.length ?? 0) > 0;
134
- let mergedAllow;
135
- let mergedRestrictAllow = false;
136
- if (aRestricts && bRestricts) {
137
- const expandedA = expandGroups(a.allow ?? []);
138
- const expandedB = expandGroups(b.allow ?? []);
139
- mergedAllow = [...expandedA].filter((name) => expandedB.has(name));
140
- mergedRestrictAllow = true;
141
- }
142
- else if (aRestricts) {
143
- mergedAllow = [...(a.allow ?? [])];
144
- mergedRestrictAllow = true;
145
- }
146
- else if (bRestricts) {
147
- mergedAllow = [...(b.allow ?? [])];
148
- mergedRestrictAllow = true;
149
- }
150
- return {
151
- ...(mergedAllow !== undefined ? { allow: mergedAllow } : {}),
152
- ...(mergedRestrictAllow ? { restrictAllow: true } : {}),
153
- ...(mergedDeny.length ? { deny: mergedDeny } : {}),
154
- };
155
- }
156
- //# sourceMappingURL=policy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BraveSearchProvider = void 0;
4
- const search_provider_js_1 = require("./search-provider.js");
5
- class BraveSearchProvider {
6
- env;
7
- name = "brave";
8
- requiresApiKey = true;
9
- priority = 1;
10
- constructor(env = process.env) {
11
- this.env = env;
12
- }
13
- isAvailable() {
14
- const apiKey = (0, search_provider_js_1.resolveSearchProviderEnv)(this.env).BRAVE_API_KEY;
15
- return Boolean(apiKey && apiKey.trim().length > 0);
16
- }
17
- async search(query, options) {
18
- const apiKey = (0, search_provider_js_1.resolveSearchProviderEnv)(this.env).BRAVE_API_KEY;
19
- if (!apiKey) {
20
- throw new Error("BRAVE_API_KEY environment variable is not set");
21
- }
22
- const limit = options?.limit ?? 5;
23
- const url = new URL("https://api.search.brave.com/res/v1/web/search");
24
- url.searchParams.set("q", query);
25
- url.searchParams.set("count", String(limit));
26
- // Handle timeRange option (map to Brave's freshness parameter)
27
- if (options?.timeRange) {
28
- const freshnessMap = {
29
- day: "pd",
30
- week: "pw",
31
- month: "pm",
32
- year: "py",
33
- };
34
- const freshness = freshnessMap[options.timeRange];
35
- if (freshness) {
36
- url.searchParams.set("freshness", freshness);
37
- }
38
- }
39
- const { signal, cleanup } = (0, search_provider_js_1.createProviderAbortSignal)(30_000, options?.signal);
40
- try {
41
- const response = await fetch(url.toString(), {
42
- method: "GET",
43
- headers: {
44
- Accept: "application/json",
45
- "X-Subscription-Token": apiKey,
46
- },
47
- signal,
48
- });
49
- if (!response.ok) {
50
- throw new Error(`Brave Search API error: ${response.status} ${response.statusText}`);
51
- }
52
- const json = await response.json();
53
- const webResults = json.web?.results || [];
54
- return webResults.map((r) => ({
55
- title: r.title,
56
- url: r.url,
57
- content: r.description,
58
- score: r.relevance_score,
59
- }));
60
- }
61
- finally {
62
- cleanup();
63
- }
64
- }
65
- }
66
- exports.BraveSearchProvider = BraveSearchProvider;
67
- //# sourceMappingURL=brave.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"brave.js","sourceRoot":"","sources":["../../src/providers/brave.ts"],"names":[],"mappings":";;;AAMA,6DAA2F;AAE3F,MAAa,mBAAmB;IAMX;IALV,IAAI,GAAG,OAAO,CAAC;IACf,cAAc,GAAG,IAAI,CAAC;IACtB,QAAQ,GAAG,CAAC,CAAC;IAEtB,YACmB,MAA8D,OAAO,CAAC,GAAG;QAAzE,QAAG,GAAH,GAAG,CAAsE;IACzF,CAAC;IAEJ,WAAW;QACT,MAAM,MAAM,GAAG,IAAA,6CAAwB,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;QAChE,OAAO,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAuB;QACjD,MAAM,MAAM,GAAG,IAAA,6CAAwB,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC;QAElC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,gDAAgD,CAAC,CAAC;QACtE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAE7C,+DAA+D;QAC/D,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,MAAM,YAAY,GAA2B;gBAC3C,GAAG,EAAE,IAAI;gBACT,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,IAAI;aACX,CAAC;YACF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,SAAS,EAAE,CAAC;gBACd,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,8CAAyB,EAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAE/E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;gBAC3C,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,MAAM,EAAE,kBAAkB;oBAC1B,sBAAsB,EAAE,MAAM;iBAC/B;gBACD,MAAM;aACP,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACvF,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAC;YAE3C,OAAO,UAAU,CAAC,GAAG,CACnB,CAAC,CAAgF,EAAE,EAAE,CAAC,CAAC;gBACrF,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,OAAO,EAAE,CAAC,CAAC,WAAW;gBACtB,KAAK,EAAE,CAAC,CAAC,eAAe;aACzB,CAAC,CACH,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAvED,kDAuEC"}