artemys 0.2.0 → 0.2.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 (332) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +194 -146
  3. package/dist/cli/index.d.ts +1 -1
  4. package/dist/cli/index.d.ts.map +1 -1
  5. package/dist/cli/index.js +446 -379
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/coffeeshop/client.d.ts +158 -0
  8. package/dist/coffeeshop/client.d.ts.map +1 -0
  9. package/dist/coffeeshop/client.js +293 -0
  10. package/dist/coffeeshop/client.js.map +1 -0
  11. package/dist/coffeeshop/index.d.ts +2 -0
  12. package/dist/coffeeshop/index.d.ts.map +1 -0
  13. package/dist/coffeeshop/index.js +2 -0
  14. package/dist/coffeeshop/index.js.map +1 -0
  15. package/dist/discovery/agent-card.schema.d.ts +37 -109
  16. package/dist/discovery/agent-card.schema.d.ts.map +1 -1
  17. package/dist/discovery/discovery-query.schema.d.ts +6 -15
  18. package/dist/discovery/discovery-query.schema.d.ts.map +1 -1
  19. package/dist/discovery/index.d.ts +1 -1
  20. package/dist/discovery/index.d.ts.map +1 -1
  21. package/dist/discovery/index.js +1 -1
  22. package/dist/discovery/index.js.map +1 -1
  23. package/dist/discovery/intro-decision.schema.d.ts +9 -11
  24. package/dist/discovery/intro-decision.schema.d.ts.map +1 -1
  25. package/dist/discovery/intro-request.schema.d.ts +2 -14
  26. package/dist/discovery/intro-request.schema.d.ts.map +1 -1
  27. package/dist/discovery/session-bootstrap.schema.d.ts +86 -66
  28. package/dist/discovery/session-bootstrap.schema.d.ts.map +1 -1
  29. package/dist/discovery/session-bootstrap.schema.js +84 -8
  30. package/dist/discovery/session-bootstrap.schema.js.map +1 -1
  31. package/dist/mcp-server/index.d.ts +4 -0
  32. package/dist/mcp-server/index.d.ts.map +1 -0
  33. package/dist/mcp-server/index.js +4 -0
  34. package/dist/mcp-server/index.js.map +1 -0
  35. package/dist/mcp-server/persistence.d.ts +37 -0
  36. package/dist/mcp-server/persistence.d.ts.map +1 -0
  37. package/dist/mcp-server/persistence.js +309 -0
  38. package/dist/mcp-server/persistence.js.map +1 -0
  39. package/dist/mcp-server/resources.d.ts +20 -0
  40. package/dist/mcp-server/resources.d.ts.map +1 -0
  41. package/dist/mcp-server/resources.js +49 -0
  42. package/dist/mcp-server/resources.js.map +1 -0
  43. package/dist/mcp-server/server.d.ts +33 -0
  44. package/dist/mcp-server/server.d.ts.map +1 -0
  45. package/dist/mcp-server/server.js +220 -0
  46. package/dist/mcp-server/server.js.map +1 -0
  47. package/dist/mcp-server/state.d.ts +43 -0
  48. package/dist/mcp-server/state.d.ts.map +1 -0
  49. package/dist/mcp-server/state.js +111 -0
  50. package/dist/mcp-server/state.js.map +1 -0
  51. package/dist/mcp-server/tools/common.d.ts +225 -0
  52. package/dist/mcp-server/tools/common.d.ts.map +1 -0
  53. package/dist/mcp-server/tools/common.js +11 -0
  54. package/dist/mcp-server/tools/common.js.map +1 -0
  55. package/dist/mcp-server/tools/discovery.d.ts +3 -0
  56. package/dist/mcp-server/tools/discovery.d.ts.map +1 -0
  57. package/dist/mcp-server/tools/discovery.js +48 -0
  58. package/dist/mcp-server/tools/discovery.js.map +1 -0
  59. package/dist/mcp-server/tools/index.d.ts +4 -0
  60. package/dist/mcp-server/tools/index.d.ts.map +1 -0
  61. package/dist/mcp-server/tools/index.js +13 -0
  62. package/dist/mcp-server/tools/index.js.map +1 -0
  63. package/dist/mcp-server/tools/intro.d.ts +3 -0
  64. package/dist/mcp-server/tools/intro.d.ts.map +1 -0
  65. package/dist/mcp-server/tools/intro.js +53 -0
  66. package/dist/mcp-server/tools/intro.js.map +1 -0
  67. package/dist/mcp-server/tools/protocol.d.ts +3 -0
  68. package/dist/mcp-server/tools/protocol.d.ts.map +1 -0
  69. package/dist/mcp-server/tools/protocol.js +73 -0
  70. package/dist/mcp-server/tools/protocol.js.map +1 -0
  71. package/dist/mcp-server/tools/talent.d.ts +3 -0
  72. package/dist/mcp-server/tools/talent.d.ts.map +1 -0
  73. package/dist/mcp-server/tools/talent.js +226 -0
  74. package/dist/mcp-server/tools/talent.js.map +1 -0
  75. package/dist/openclaw/index.d.ts +2 -0
  76. package/dist/openclaw/index.d.ts.map +1 -0
  77. package/dist/openclaw/index.js +2 -0
  78. package/dist/openclaw/index.js.map +1 -0
  79. package/dist/openclaw/skill.d.ts +13 -0
  80. package/dist/openclaw/skill.d.ts.map +1 -0
  81. package/dist/openclaw/skill.js +18 -0
  82. package/dist/openclaw/skill.js.map +1 -0
  83. package/dist/protocol/consent.schema.d.ts +18 -48
  84. package/dist/protocol/consent.schema.d.ts.map +1 -1
  85. package/dist/protocol/consent.schema.js +1 -1
  86. package/dist/protocol/consent.schema.js.map +1 -1
  87. package/dist/protocol/dialogue.schema.d.ts +21 -177
  88. package/dist/protocol/dialogue.schema.d.ts.map +1 -1
  89. package/dist/protocol/envelope.schema.d.ts +46 -28
  90. package/dist/protocol/envelope.schema.d.ts.map +1 -1
  91. package/dist/protocol/errors.d.ts +8 -1
  92. package/dist/protocol/errors.d.ts.map +1 -1
  93. package/dist/protocol/handshake.schema.d.ts +130 -385
  94. package/dist/protocol/handshake.schema.d.ts.map +1 -1
  95. package/dist/protocol/handshake.schema.js +1 -0
  96. package/dist/protocol/handshake.schema.js.map +1 -1
  97. package/dist/protocol/identity.schema.d.ts +44 -94
  98. package/dist/protocol/identity.schema.d.ts.map +1 -1
  99. package/dist/protocol/index.d.ts +1 -0
  100. package/dist/protocol/index.d.ts.map +1 -1
  101. package/dist/protocol/index.js +1 -0
  102. package/dist/protocol/index.js.map +1 -1
  103. package/dist/protocol/message-types.d.ts +14 -1
  104. package/dist/protocol/message-types.d.ts.map +1 -1
  105. package/dist/protocol/message.schema.d.ts +100 -715
  106. package/dist/protocol/message.schema.d.ts.map +1 -1
  107. package/dist/protocol/resolution.schema.d.ts +22 -268
  108. package/dist/protocol/resolution.schema.d.ts.map +1 -1
  109. package/dist/protocol/resolution.schema.js +1 -1
  110. package/dist/protocol/resolution.schema.js.map +1 -1
  111. package/dist/protocol/state-machine.d.ts +10 -1
  112. package/dist/protocol/state-machine.d.ts.map +1 -1
  113. package/dist/protocol/talent.schema.d.ts +106 -0
  114. package/dist/protocol/talent.schema.d.ts.map +1 -0
  115. package/dist/protocol/talent.schema.js +47 -0
  116. package/dist/protocol/talent.schema.js.map +1 -0
  117. package/dist/protocol/transport.schema.d.ts +16 -18
  118. package/dist/protocol/transport.schema.d.ts.map +1 -1
  119. package/dist/transport/client.d.ts +32 -0
  120. package/dist/transport/client.d.ts.map +1 -0
  121. package/dist/transport/client.js +155 -0
  122. package/dist/transport/client.js.map +1 -0
  123. package/dist/transport/dedup.d.ts +9 -0
  124. package/dist/transport/dedup.d.ts.map +1 -0
  125. package/dist/transport/dedup.js +36 -0
  126. package/dist/transport/dedup.js.map +1 -0
  127. package/dist/transport/handler.d.ts +9 -0
  128. package/dist/transport/handler.d.ts.map +1 -0
  129. package/dist/transport/handler.js +105 -0
  130. package/dist/transport/handler.js.map +1 -0
  131. package/dist/transport/hmac.d.ts +3 -0
  132. package/dist/transport/hmac.d.ts.map +1 -0
  133. package/dist/transport/hmac.js +43 -0
  134. package/dist/transport/hmac.js.map +1 -0
  135. package/dist/transport/index.d.ts +6 -0
  136. package/dist/transport/index.d.ts.map +1 -0
  137. package/dist/transport/index.js +6 -0
  138. package/dist/transport/index.js.map +1 -0
  139. package/dist/transport/reference-runner.d.ts +37 -0
  140. package/dist/transport/reference-runner.d.ts.map +1 -0
  141. package/dist/transport/reference-runner.js +372 -0
  142. package/dist/transport/reference-runner.js.map +1 -0
  143. package/package.json +19 -31
  144. package/dist/agent/archiver.d.ts +0 -8
  145. package/dist/agent/archiver.d.ts.map +0 -1
  146. package/dist/agent/archiver.js +0 -48
  147. package/dist/agent/archiver.js.map +0 -1
  148. package/dist/agent/capabilities.d.ts +0 -23
  149. package/dist/agent/capabilities.d.ts.map +0 -1
  150. package/dist/agent/capabilities.js +0 -87
  151. package/dist/agent/capabilities.js.map +0 -1
  152. package/dist/agent/config.d.ts +0 -60
  153. package/dist/agent/config.d.ts.map +0 -1
  154. package/dist/agent/config.js +0 -84
  155. package/dist/agent/config.js.map +0 -1
  156. package/dist/agent/context-provider.d.ts +0 -12
  157. package/dist/agent/context-provider.d.ts.map +0 -1
  158. package/dist/agent/context-provider.js +0 -34
  159. package/dist/agent/context-provider.js.map +0 -1
  160. package/dist/agent/context.d.ts +0 -9
  161. package/dist/agent/context.d.ts.map +0 -1
  162. package/dist/agent/context.js +0 -80
  163. package/dist/agent/context.js.map +0 -1
  164. package/dist/agent/events.d.ts +0 -62
  165. package/dist/agent/events.d.ts.map +0 -1
  166. package/dist/agent/events.js +0 -21
  167. package/dist/agent/events.js.map +0 -1
  168. package/dist/agent/index.d.ts +0 -32
  169. package/dist/agent/index.d.ts.map +0 -1
  170. package/dist/agent/index.js +0 -28
  171. package/dist/agent/index.js.map +0 -1
  172. package/dist/agent/mcp.d.ts +0 -16
  173. package/dist/agent/mcp.d.ts.map +0 -1
  174. package/dist/agent/mcp.js +0 -69
  175. package/dist/agent/mcp.js.map +0 -1
  176. package/dist/agent/notifications/decision-parser.d.ts +0 -10
  177. package/dist/agent/notifications/decision-parser.d.ts.map +0 -1
  178. package/dist/agent/notifications/decision-parser.js +0 -21
  179. package/dist/agent/notifications/decision-parser.js.map +0 -1
  180. package/dist/agent/notifications/index.d.ts +0 -4
  181. package/dist/agent/notifications/index.d.ts.map +0 -1
  182. package/dist/agent/notifications/index.js +0 -3
  183. package/dist/agent/notifications/index.js.map +0 -1
  184. package/dist/agent/notifications/opportunity-templates.d.ts +0 -14
  185. package/dist/agent/notifications/opportunity-templates.d.ts.map +0 -1
  186. package/dist/agent/notifications/opportunity-templates.js +0 -21
  187. package/dist/agent/notifications/opportunity-templates.js.map +0 -1
  188. package/dist/agent/notifications/types.d.ts +0 -16
  189. package/dist/agent/notifications/types.d.ts.map +0 -1
  190. package/dist/agent/notifications/types.js +0 -2
  191. package/dist/agent/notifications/types.js.map +0 -1
  192. package/dist/agent/providers.d.ts +0 -9
  193. package/dist/agent/providers.d.ts.map +0 -1
  194. package/dist/agent/providers.js +0 -29
  195. package/dist/agent/providers.js.map +0 -1
  196. package/dist/agent/runtime.d.ts +0 -63
  197. package/dist/agent/runtime.d.ts.map +0 -1
  198. package/dist/agent/runtime.js +0 -395
  199. package/dist/agent/runtime.js.map +0 -1
  200. package/dist/agent/scanning/index.d.ts +0 -3
  201. package/dist/agent/scanning/index.d.ts.map +0 -1
  202. package/dist/agent/scanning/index.js +0 -3
  203. package/dist/agent/scanning/index.js.map +0 -1
  204. package/dist/agent/scanning/opportunity-scorer.d.ts +0 -24
  205. package/dist/agent/scanning/opportunity-scorer.d.ts.map +0 -1
  206. package/dist/agent/scanning/opportunity-scorer.js +0 -90
  207. package/dist/agent/scanning/opportunity-scorer.js.map +0 -1
  208. package/dist/agent/scanning/types.d.ts +0 -65
  209. package/dist/agent/scanning/types.d.ts.map +0 -1
  210. package/dist/agent/scanning/types.js +0 -32
  211. package/dist/agent/scanning/types.js.map +0 -1
  212. package/dist/agent/scheduler.d.ts +0 -38
  213. package/dist/agent/scheduler.d.ts.map +0 -1
  214. package/dist/agent/scheduler.js +0 -125
  215. package/dist/agent/scheduler.js.map +0 -1
  216. package/dist/agent/session.d.ts +0 -20
  217. package/dist/agent/session.d.ts.map +0 -1
  218. package/dist/agent/session.js +0 -88
  219. package/dist/agent/session.js.map +0 -1
  220. package/dist/agent/stores.d.ts +0 -48
  221. package/dist/agent/stores.d.ts.map +0 -1
  222. package/dist/agent/stores.js +0 -2
  223. package/dist/agent/stores.js.map +0 -1
  224. package/dist/agent/tools/browser/ats-patterns.d.ts +0 -20
  225. package/dist/agent/tools/browser/ats-patterns.d.ts.map +0 -1
  226. package/dist/agent/tools/browser/ats-patterns.js +0 -226
  227. package/dist/agent/tools/browser/ats-patterns.js.map +0 -1
  228. package/dist/agent/tools/browser/index.d.ts +0 -14
  229. package/dist/agent/tools/browser/index.d.ts.map +0 -1
  230. package/dist/agent/tools/browser/index.js +0 -126
  231. package/dist/agent/tools/browser/index.js.map +0 -1
  232. package/dist/agent/tools/browser/operator-runtime.d.ts +0 -35
  233. package/dist/agent/tools/browser/operator-runtime.d.ts.map +0 -1
  234. package/dist/agent/tools/browser/operator-runtime.js +0 -93
  235. package/dist/agent/tools/browser/operator-runtime.js.map +0 -1
  236. package/dist/agent/tools/browser/providers/chrome-mcp.d.ts +0 -3
  237. package/dist/agent/tools/browser/providers/chrome-mcp.d.ts.map +0 -1
  238. package/dist/agent/tools/browser/providers/chrome-mcp.js +0 -164
  239. package/dist/agent/tools/browser/providers/chrome-mcp.js.map +0 -1
  240. package/dist/agent/tools/browser/providers/playwright.d.ts +0 -7
  241. package/dist/agent/tools/browser/providers/playwright.d.ts.map +0 -1
  242. package/dist/agent/tools/browser/providers/playwright.js +0 -619
  243. package/dist/agent/tools/browser/providers/playwright.js.map +0 -1
  244. package/dist/agent/tools/browser/types.d.ts +0 -22
  245. package/dist/agent/tools/browser/types.d.ts.map +0 -1
  246. package/dist/agent/tools/browser/types.js +0 -15
  247. package/dist/agent/tools/browser/types.js.map +0 -1
  248. package/dist/agent/tools/cancel-task.d.ts +0 -4
  249. package/dist/agent/tools/cancel-task.d.ts.map +0 -1
  250. package/dist/agent/tools/cancel-task.js +0 -29
  251. package/dist/agent/tools/cancel-task.js.map +0 -1
  252. package/dist/agent/tools/career-advice.d.ts +0 -3
  253. package/dist/agent/tools/career-advice.d.ts.map +0 -1
  254. package/dist/agent/tools/career-advice.js +0 -49
  255. package/dist/agent/tools/career-advice.js.map +0 -1
  256. package/dist/agent/tools/index.d.ts +0 -15
  257. package/dist/agent/tools/index.d.ts.map +0 -1
  258. package/dist/agent/tools/index.js +0 -94
  259. package/dist/agent/tools/index.js.map +0 -1
  260. package/dist/agent/tools/job-search.d.ts +0 -3
  261. package/dist/agent/tools/job-search.d.ts.map +0 -1
  262. package/dist/agent/tools/job-search.js +0 -77
  263. package/dist/agent/tools/job-search.js.map +0 -1
  264. package/dist/agent/tools/list-tasks.d.ts +0 -4
  265. package/dist/agent/tools/list-tasks.d.ts.map +0 -1
  266. package/dist/agent/tools/list-tasks.js +0 -24
  267. package/dist/agent/tools/list-tasks.js.map +0 -1
  268. package/dist/agent/tools/market-data.d.ts +0 -8
  269. package/dist/agent/tools/market-data.d.ts.map +0 -1
  270. package/dist/agent/tools/market-data.js +0 -133
  271. package/dist/agent/tools/market-data.js.map +0 -1
  272. package/dist/agent/tools/memory-write.d.ts +0 -3
  273. package/dist/agent/tools/memory-write.d.ts.map +0 -1
  274. package/dist/agent/tools/memory-write.js +0 -48
  275. package/dist/agent/tools/memory-write.js.map +0 -1
  276. package/dist/agent/tools/resume.d.ts +0 -3
  277. package/dist/agent/tools/resume.d.ts.map +0 -1
  278. package/dist/agent/tools/resume.js +0 -70
  279. package/dist/agent/tools/resume.js.map +0 -1
  280. package/dist/agent/tools/schedule-task.d.ts +0 -4
  281. package/dist/agent/tools/schedule-task.d.ts.map +0 -1
  282. package/dist/agent/tools/schedule-task.js +0 -39
  283. package/dist/agent/tools/schedule-task.js.map +0 -1
  284. package/dist/agent/tools/shell.d.ts +0 -6
  285. package/dist/agent/tools/shell.d.ts.map +0 -1
  286. package/dist/agent/tools/shell.js +0 -66
  287. package/dist/agent/tools/shell.js.map +0 -1
  288. package/dist/agent/tools/web-search.d.ts +0 -6
  289. package/dist/agent/tools/web-search.d.ts.map +0 -1
  290. package/dist/agent/tools/web-search.js +0 -73
  291. package/dist/agent/tools/web-search.js.map +0 -1
  292. package/dist/agent/types.d.ts +0 -103
  293. package/dist/agent/types.d.ts.map +0 -1
  294. package/dist/agent/types.js +0 -11
  295. package/dist/agent/types.js.map +0 -1
  296. package/dist/channels/index.d.ts +0 -10
  297. package/dist/channels/index.d.ts.map +0 -1
  298. package/dist/channels/index.js +0 -15
  299. package/dist/channels/index.js.map +0 -1
  300. package/dist/channels/telegram.d.ts +0 -21
  301. package/dist/channels/telegram.d.ts.map +0 -1
  302. package/dist/channels/telegram.js +0 -255
  303. package/dist/channels/telegram.js.map +0 -1
  304. package/dist/channels/types.d.ts +0 -24
  305. package/dist/channels/types.d.ts.map +0 -1
  306. package/dist/channels/types.js +0 -2
  307. package/dist/channels/types.js.map +0 -1
  308. package/dist/cli/templates/HEARTBEAT.md +0 -6
  309. package/dist/cli/templates/MEMORY.md +0 -6
  310. package/dist/cli/templates/PREFERENCES.md +0 -40
  311. package/dist/cli/templates/PROFILE.md +0 -26
  312. package/dist/cli/templates/SOUL.md +0 -23
  313. package/dist/connectors/google-calendar.d.ts +0 -8
  314. package/dist/connectors/google-calendar.d.ts.map +0 -1
  315. package/dist/connectors/google-calendar.js +0 -23
  316. package/dist/connectors/google-calendar.js.map +0 -1
  317. package/dist/connectors/google-gmail.d.ts +0 -8
  318. package/dist/connectors/google-gmail.d.ts.map +0 -1
  319. package/dist/connectors/google-gmail.js +0 -30
  320. package/dist/connectors/google-gmail.js.map +0 -1
  321. package/dist/connectors/google-oauth.d.ts +0 -17
  322. package/dist/connectors/google-oauth.d.ts.map +0 -1
  323. package/dist/connectors/google-oauth.js +0 -52
  324. package/dist/connectors/google-oauth.js.map +0 -1
  325. package/dist/connectors/index.d.ts +0 -5
  326. package/dist/connectors/index.d.ts.map +0 -1
  327. package/dist/connectors/index.js +0 -5
  328. package/dist/connectors/index.js.map +0 -1
  329. package/dist/connectors/types.d.ts +0 -20
  330. package/dist/connectors/types.d.ts.map +0 -1
  331. package/dist/connectors/types.js +0 -5
  332. package/dist/connectors/types.js.map +0 -1
@@ -1,255 +0,0 @@
1
- import { Bot, InlineKeyboard } from "grammy";
2
- import { nanoid } from "nanoid";
3
- export class TelegramAdapter {
4
- name = "telegram";
5
- bot;
6
- messageHandler;
7
- modelChangeHandler;
8
- pendingApprovals = new Map();
9
- constructor(token) {
10
- this.bot = new Bot(token);
11
- this.setupCommands();
12
- this.setupMessageHandler();
13
- this.setupCallbackHandler();
14
- }
15
- onMessage(handler) {
16
- this.messageHandler = handler;
17
- }
18
- onModelChange(handler) {
19
- this.modelChangeHandler = handler;
20
- }
21
- async start() {
22
- await this.bot.start();
23
- }
24
- async stop() {
25
- this.bot.stop();
26
- }
27
- async sendMessage(chatId, content, actions) {
28
- const keyboard = actions?.length ? this.buildKeyboard(actions) : undefined;
29
- await this.bot.api.sendMessage(chatId, formatTelegramHtml(content), {
30
- parse_mode: "HTML",
31
- ...(keyboard && { reply_markup: keyboard }),
32
- });
33
- }
34
- async sendApprovalRequest(chatId, toolName, args) {
35
- const id = nanoid();
36
- const argsPreview = typeof args === "string" ? args : JSON.stringify(args, null, 2);
37
- const text = [
38
- "## Decision required",
39
- "",
40
- `Artie wants to run: \`${toolName}\``,
41
- "",
42
- "```",
43
- argsPreview,
44
- "```",
45
- ].join("\n");
46
- const keyboard = new InlineKeyboard()
47
- .text("Approve", `approve:${id}`)
48
- .text("Deny", `deny:${id}`);
49
- await this.bot.api.sendMessage(chatId, formatTelegramHtml(text), {
50
- parse_mode: "HTML",
51
- reply_markup: keyboard,
52
- });
53
- return new Promise((resolve) => {
54
- this.pendingApprovals.set(id, { resolve });
55
- });
56
- }
57
- setupCommands() {
58
- this.bot.command("start", async (ctx) => {
59
- const name = ctx.from?.first_name ?? "there";
60
- await ctx.reply(formatTelegramHtml([
61
- `Hey ${name} — I'm Artie, your personal career agent.`,
62
- "",
63
- "I handle the work of career management so you don't have to: market intelligence, resume generation, interview prep, and — when the network is live — representing you in conversations with employers.",
64
- "",
65
- "You set the direction and boundaries. I handle everything else.",
66
- "",
67
- "To get started, run `artemys init` in your terminal to set up your profile and preferences. Or just send me a message and we can talk.",
68
- ].join("\n")), { parse_mode: "HTML" });
69
- });
70
- this.bot.command("profile", async (ctx) => {
71
- await this.handleWithRuntime(ctx, "Show my profile summary");
72
- });
73
- this.bot.command("preferences", async (ctx) => {
74
- await this.handleWithRuntime(ctx, "Show my current preferences");
75
- });
76
- this.bot.command("status", async (ctx) => {
77
- const pendingCount = this.pendingApprovals.size;
78
- await ctx.reply(formatTelegramHtml(`Pending decisions: ${pendingCount}\n\nSend me a message or use /help to see what I can do.`), { parse_mode: "HTML" });
79
- });
80
- this.bot.command("model", async (ctx) => {
81
- const args = ctx.message?.text?.split(/\s+/).slice(1).join(" ").trim() || null;
82
- if (!this.modelChangeHandler) {
83
- await ctx.reply("Model switching is not available.");
84
- return;
85
- }
86
- const result = await this.modelChangeHandler(String(ctx.chat.id), args);
87
- await ctx.reply(formatTelegramHtml(result), { parse_mode: "HTML" });
88
- });
89
- this.bot.command("help", async (ctx) => {
90
- await ctx.reply(formatTelegramHtml([
91
- "## Commands",
92
- "",
93
- "/start — Welcome message",
94
- "/profile — View your profile summary",
95
- "/preferences — View your current preferences",
96
- "/model — View or switch model (e.g. `/model openai:gpt-4o`)",
97
- "/status — Check pending decisions",
98
- "/help — This message",
99
- "",
100
- "Or just send me a message — I'm here to help with your career.",
101
- ].join("\n")), { parse_mode: "HTML" });
102
- });
103
- }
104
- setupMessageHandler() {
105
- this.bot.on("message:text", async (ctx) => {
106
- if (!this.messageHandler)
107
- return;
108
- const chatId = String(ctx.chat.id);
109
- const text = ctx.message.text;
110
- try {
111
- const response = await this.messageHandler(chatId, text);
112
- if (response) {
113
- await ctx.reply(formatTelegramHtml(response), { parse_mode: "HTML" });
114
- }
115
- }
116
- catch (err) {
117
- console.error("[telegram] message handler error:", err);
118
- await ctx.reply(formatTelegramHtml("Something went wrong processing your message. Please try again."), { parse_mode: "HTML" });
119
- }
120
- });
121
- }
122
- setupCallbackHandler() {
123
- this.bot.on("callback_query:data", async (ctx) => {
124
- const data = ctx.callbackQuery.data;
125
- const [action, id] = data.split(":");
126
- if (!id) {
127
- await ctx.answerCallbackQuery({ text: "Unknown action" });
128
- return;
129
- }
130
- const pending = this.pendingApprovals.get(id);
131
- if (!pending) {
132
- await ctx.answerCallbackQuery({ text: "This decision has expired." });
133
- return;
134
- }
135
- const approved = action === "approve";
136
- pending.resolve(approved);
137
- this.pendingApprovals.delete(id);
138
- await ctx.answerCallbackQuery({
139
- text: approved ? "Approved" : "Denied",
140
- });
141
- const priorText = escapeHtml(ctx.callbackQuery.message?.text ?? "");
142
- await ctx.editMessageText(`${priorText}\n\n<i>${approved ? "Approved" : "Denied"}</i>`, { parse_mode: "HTML" });
143
- });
144
- }
145
- async handleWithRuntime(ctx, text) {
146
- if (!this.messageHandler) {
147
- await ctx.reply(formatTelegramHtml("Artie isn't fully started yet. Try again in a moment."), {
148
- parse_mode: "HTML",
149
- });
150
- return;
151
- }
152
- const chatId = String(ctx.chat.id);
153
- try {
154
- const response = await this.messageHandler(chatId, text);
155
- if (response) {
156
- await ctx.reply(formatTelegramHtml(response), { parse_mode: "HTML" });
157
- }
158
- }
159
- catch (err) {
160
- console.error("[telegram] command handler error:", err);
161
- await ctx.reply(formatTelegramHtml("Something went wrong. Please try again."), {
162
- parse_mode: "HTML",
163
- });
164
- }
165
- }
166
- buildKeyboard(actions) {
167
- const keyboard = new InlineKeyboard();
168
- for (const action of actions) {
169
- keyboard.text(action.label, action.callback_data);
170
- }
171
- return keyboard;
172
- }
173
- }
174
- function formatTelegramHtml(markdown) {
175
- const lines = markdown.replace(/\r\n/g, "\n").split("\n");
176
- const formatted = [];
177
- let inCodeBlock = false;
178
- let codeLines = [];
179
- for (const line of lines) {
180
- if (line.trimStart().startsWith("```")) {
181
- if (inCodeBlock) {
182
- formatted.push(`<pre><code>${escapeHtml(codeLines.join("\n"))}</code></pre>`);
183
- inCodeBlock = false;
184
- codeLines = [];
185
- }
186
- else {
187
- inCodeBlock = true;
188
- }
189
- continue;
190
- }
191
- if (inCodeBlock) {
192
- codeLines.push(line);
193
- continue;
194
- }
195
- const heading = line.match(/^\s*#{1,6}\s+(.*)$/);
196
- if (heading) {
197
- formatted.push(`<b>${formatInlineMarkdown(heading[1].trim())}</b>`);
198
- continue;
199
- }
200
- const bullet = line.match(/^\s*[-*]\s+(.*)$/);
201
- if (bullet) {
202
- formatted.push(`• ${formatInlineMarkdown(bullet[1])}`);
203
- continue;
204
- }
205
- const ordered = line.match(/^\s*(\d+)\.\s+(.*)$/);
206
- if (ordered) {
207
- formatted.push(`${ordered[1]}. ${formatInlineMarkdown(ordered[2])}`);
208
- continue;
209
- }
210
- const quote = line.match(/^\s*>\s?(.*)$/);
211
- if (quote) {
212
- formatted.push(`| ${formatInlineMarkdown(quote[1])}`);
213
- continue;
214
- }
215
- formatted.push(formatInlineMarkdown(line));
216
- }
217
- if (inCodeBlock) {
218
- formatted.push(`<pre><code>${escapeHtml(codeLines.join("\n"))}</code></pre>`);
219
- }
220
- return formatted.join("\n");
221
- }
222
- function formatInlineMarkdown(text) {
223
- const codeTokens = [];
224
- const linkTokens = [];
225
- let output = text.replace(/`([^`\n]+)`/g, (_, code) => {
226
- const token = `@@CODE_${codeTokens.length}@@`;
227
- codeTokens.push(`<code>${escapeHtml(code)}</code>`);
228
- return token;
229
- });
230
- output = output.replace(/\[([^\]]+)\]\((https?:\/\/[^\s)]+)\)/g, (_, label, url) => {
231
- const token = `@@LINK_${linkTokens.length}@@`;
232
- linkTokens.push(`<a href="${escapeHtml(url)}">${escapeHtml(label)}</a>`);
233
- return token;
234
- });
235
- output = escapeHtml(output);
236
- output = output.replace(/\*\*([^*]+)\*\*/g, "<b>$1</b>");
237
- output = output.replace(/__([^_]+)__/g, "<b>$1</b>");
238
- output = output.replace(/~~([^~]+)~~/g, "<s>$1</s>");
239
- output = output.replace(/@@LINK_(\d+)@@/g, (_, index) => {
240
- return linkTokens[Number(index)] ?? "";
241
- });
242
- output = output.replace(/@@CODE_(\d+)@@/g, (_, index) => {
243
- return codeTokens[Number(index)] ?? "";
244
- });
245
- return output;
246
- }
247
- function escapeHtml(input) {
248
- return input
249
- .replace(/&/g, "&amp;")
250
- .replace(/</g, "&lt;")
251
- .replace(/>/g, "&gt;")
252
- .replace(/"/g, "&quot;")
253
- .replace(/'/g, "&#39;");
254
- }
255
- //# sourceMappingURL=telegram.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/channels/telegram.ts"],"names":[],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- export interface IncomingMessage {
2
- chat_id: string;
3
- text: string;
4
- from: {
5
- id: string;
6
- username?: string;
7
- first_name?: string;
8
- };
9
- timestamp: Date;
10
- raw?: unknown;
11
- }
12
- export interface OutgoingMessage {
13
- chat_id: string;
14
- text: string;
15
- parse_mode?: "Markdown" | "HTML";
16
- actions?: OutgoingMessageAction[];
17
- }
18
- export interface OutgoingMessageAction {
19
- type: "button";
20
- label: string;
21
- callback_data: string;
22
- }
23
- export type ChannelMessageHandler = (message: IncomingMessage) => Promise<OutgoingMessage | void>;
24
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAA;QACV,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,SAAS,EAAE,IAAI,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAAA;IAChC,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAA;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,qBAAqB,GAAG,CAClC,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":""}
@@ -1,6 +0,0 @@
1
- # Artie Heartbeat
2
-
3
- Scheduled checks and proactive actions.
4
- This file is updated by Artie via the memory-write tool.
5
-
6
- ---
@@ -1,6 +0,0 @@
1
- # Artie Memory
2
-
3
- Facts and preferences learned across conversations.
4
- This file is updated by Artie via the memory-write tool.
5
-
6
- ---
@@ -1,40 +0,0 @@
1
- # My Preferences
2
-
3
- > These preferences tell Artie what you're looking for and what to protect.
4
- > Artie uses these to filter opportunities and enforce your boundaries.
5
-
6
- ## Role Preferences
7
- <!-- What kinds of roles interest you? -->
8
- <!-- Example: Senior/Staff backend engineering, distributed systems, platform -->
9
-
10
-
11
- ## Location
12
- <!-- Where are you willing to work? -->
13
- <!-- Example: Remote only, or SF Bay Area hybrid OK -->
14
-
15
-
16
- ## Compensation
17
- <!-- What's your target range? -->
18
- <!-- Example: $180K-$220K base + equity -->
19
-
20
-
21
- ## Work Style
22
- <!-- What matters to you in a work environment? -->
23
- <!-- Example: Small teams, low meeting culture, async-first -->
24
-
25
-
26
- ## Consent Tiers
27
-
28
- ### Shareable (Artie can freely share)
29
- <!-- Example: skills, experience level, portfolio links -->
30
-
31
- ### Gated (share only when conditions are met)
32
- <!-- Example: identity (when employer revealed), compensation (when mutual interest) -->
33
-
34
- ### Blocked (never share)
35
- <!-- Example: current employer, references, personal details -->
36
-
37
-
38
- ## Deal Breakers
39
- <!-- What automatically disqualifies an opportunity? -->
40
- <!-- Example: No fully onsite roles, no defense contractors, no companies under 10 people -->
@@ -1,26 +0,0 @@
1
- # My Profile
2
-
3
- > Edit this file to tell Artie about yourself. The more detail you provide,
4
- > the better Artie can represent you.
5
-
6
- ## About Me
7
- <!-- Brief introduction — who you are professionally -->
8
-
9
-
10
- ## Skills
11
- <!-- List your key skills with context -->
12
- <!-- Example: TypeScript — 5 years, built distributed systems at scale -->
13
-
14
-
15
- ## Experience
16
- <!-- Your professional experience, most recent first -->
17
- <!-- Focus on what you DID, not just titles -->
18
-
19
-
20
- ## Education
21
- <!-- Relevant education, certifications, courses -->
22
-
23
-
24
- ## Projects
25
- <!-- Notable projects, open source contributions, side projects -->
26
- <!-- Include links where possible -->
@@ -1,23 +0,0 @@
1
- # Artie — Personal Career Agent
2
-
3
- You are Artie, a personal career agent built on the Artemys Protocol.
4
- You represent your human in all professional career matters.
5
-
6
- ## Core Principles
7
- - You represent your human's interests, not employers'
8
- - You enforce consent boundaries at all times (shareable, gated, blocked tiers)
9
- - You use tools to take action, not just give advice
10
- - You surface opportunities only when they pass your filters
11
- - You communicate with warmth but professionalism — you're their agent, not an assistant
12
- - When uncertain about sharing information, err on the side of protecting your human
13
-
14
- ## Communication Style
15
- - Be direct and specific — avoid generic advice
16
- - Lead with action — suggest what you'll DO, not just what they should do
17
- - Use markdown formatting for readability
18
- - Structure data clearly when presenting market info or opportunities
19
-
20
- ## Boundaries
21
- - Never share blocked-tier information under any circumstances
22
- - Never acknowledge the existence of blocked fields
23
- - Default to denial for unknown sharing requests
@@ -1,8 +0,0 @@
1
- export declare function fetchCalendarPreview(accessToken: string): Promise<{
2
- id: string;
3
- title: string;
4
- start: string | null;
5
- end: string | null;
6
- link: string | null;
7
- }[]>;
8
- //# sourceMappingURL=google-calendar.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-calendar.d.ts","sourceRoot":"","sources":["../../src/connectors/google-calendar.ts"],"names":[],"mappings":"AAAA,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM;;;;;;KAmC7D"}
@@ -1,23 +0,0 @@
1
- export async function fetchCalendarPreview(accessToken) {
2
- const now = new Date().toISOString();
3
- const url = new URL("https://www.googleapis.com/calendar/v3/calendars/primary/events");
4
- url.searchParams.set("maxResults", "5");
5
- url.searchParams.set("singleEvents", "true");
6
- url.searchParams.set("orderBy", "startTime");
7
- url.searchParams.set("timeMin", now);
8
- const response = await fetch(url.toString(), {
9
- headers: { Authorization: `Bearer ${accessToken}` },
10
- });
11
- if (!response.ok) {
12
- throw new Error(`Calendar request failed: ${await response.text()}`);
13
- }
14
- const data = (await response.json());
15
- return (data.items ?? []).map((item) => ({
16
- id: item.id,
17
- title: item.summary ?? "Untitled",
18
- start: item.start?.dateTime ?? item.start?.date ?? null,
19
- end: item.end?.dateTime ?? item.end?.date ?? null,
20
- link: item.htmlLink ?? null,
21
- }));
22
- }
23
- //# sourceMappingURL=google-calendar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-calendar.js","sourceRoot":"","sources":["../../src/connectors/google-calendar.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC5D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,iEAAiE,CAClE,CAAA;IACD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;IACvC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;IAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;IAEpC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;QAC3C,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE;KACpD,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAQlC,CAAA;IAED,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,OAAO,IAAI,UAAU;QACjC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI;QACvD,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI;QACjD,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;KAC5B,CAAC,CAAC,CAAA;AACL,CAAC"}
@@ -1,8 +0,0 @@
1
- export declare function fetchGmailPreview(accessToken: string): Promise<{
2
- id: string;
3
- subject: string;
4
- from: string;
5
- date: string | null;
6
- snippet: string;
7
- }[]>;
8
- //# sourceMappingURL=google-gmail.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-gmail.d.ts","sourceRoot":"","sources":["../../src/connectors/google-gmail.ts"],"names":[],"mappings":"AAAA,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM;QAsDjD,MAAM;aACD,MAAM;UACT,MAAM;UACN,MAAM,GAAG,IAAI;aACV,MAAM;KAGpB"}
@@ -1,30 +0,0 @@
1
- export async function fetchGmailPreview(accessToken) {
2
- const listResponse = await fetch("https://gmail.googleapis.com/gmail/v1/users/me/messages?maxResults=5", {
3
- headers: { Authorization: `Bearer ${accessToken}` },
4
- });
5
- if (!listResponse.ok) {
6
- throw new Error(`Gmail list request failed: ${await listResponse.text()}`);
7
- }
8
- const listData = (await listResponse.json());
9
- const messages = await Promise.all((listData.messages ?? []).map(async (message) => {
10
- const detailResponse = await fetch(`https://gmail.googleapis.com/gmail/v1/users/me/messages/${message.id}?format=metadata&metadataHeaders=Subject&metadataHeaders=From&metadataHeaders=Date`, {
11
- headers: { Authorization: `Bearer ${accessToken}` },
12
- });
13
- if (!detailResponse.ok)
14
- return null;
15
- const detail = (await detailResponse.json());
16
- const headers = detail.payload?.headers ?? [];
17
- const subject = headers.find((h) => h.name.toLowerCase() === "subject")?.value;
18
- const from = headers.find((h) => h.name.toLowerCase() === "from")?.value;
19
- const date = headers.find((h) => h.name.toLowerCase() === "date")?.value;
20
- return {
21
- id: detail.id,
22
- subject: subject ?? "(no subject)",
23
- from: from ?? "unknown",
24
- date: date ?? null,
25
- snippet: detail.snippet ?? "",
26
- };
27
- }));
28
- return messages.filter((message) => Boolean(message));
29
- }
30
- //# sourceMappingURL=google-gmail.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-gmail.js","sourceRoot":"","sources":["../../src/connectors/google-gmail.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,sEAAsE,EACtE;QACE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE;KACpD,CACF,CAAA;IAED,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC5E,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAE1C,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QAC9C,MAAM,cAAc,GAAG,MAAM,KAAK,CAChC,2DAA2D,OAAO,CAAC,EAAE,oFAAoF,EACzJ;YACE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE;SACpD,CACF,CAAA;QAED,IAAI,CAAC,cAAc,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QAEnC,MAAM,MAAM,GAAG,CAAC,MAAM,cAAc,CAAC,IAAI,EAAE,CAM1C,CAAA;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAA;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,EAAE,KAAK,CAAA;QAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,EAAE,KAAK,CAAA;QACxE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,EAAE,KAAK,CAAA;QAExE,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,OAAO,IAAI,cAAc;YAClC,IAAI,EAAE,IAAI,IAAI,SAAS;YACvB,IAAI,EAAE,IAAI,IAAI,IAAI;YAClB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;SAC9B,CAAA;IACH,CAAC,CAAC,CACH,CAAA;IAED,OAAO,QAAQ,CAAC,MAAM,CACpB,CACE,OAAO,EAOP,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CACtB,CAAA;AACH,CAAC"}
@@ -1,17 +0,0 @@
1
- import { type GoogleConnectorType, type GoogleOAuthConfig, type GoogleTokenResponse } from "./types.js";
2
- export declare function buildGoogleOAuthUrl(input: {
3
- config: GoogleOAuthConfig;
4
- state: string;
5
- connector: GoogleConnectorType;
6
- redirectUri: string;
7
- }): string;
8
- export declare function exchangeGoogleCodeForTokens(input: {
9
- config: GoogleOAuthConfig;
10
- code: string;
11
- redirectUri: string;
12
- }): Promise<GoogleTokenResponse>;
13
- export declare function refreshGoogleAccessToken(input: {
14
- config: GoogleOAuthConfig;
15
- refreshToken: string;
16
- }): Promise<GoogleTokenResponse>;
17
- //# sourceMappingURL=google-oauth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-oauth.d.ts","sourceRoot":"","sources":["../../src/connectors/google-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAA;AAEnB,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,MAAM,EAAE,iBAAiB,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,mBAAmB,CAAA;IAC9B,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,MAAM,CAaT;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,MAAM,EAAE,iBAAiB,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;CACpB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqB/B;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,MAAM,EAAE,iBAAiB,CAAA;IACzB,YAAY,EAAE,MAAM,CAAA;CACrB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAoB/B"}
@@ -1,52 +0,0 @@
1
- import { GOOGLE_CONNECTOR_SCOPES, } from "./types.js";
2
- export function buildGoogleOAuthUrl(input) {
3
- const scope = GOOGLE_CONNECTOR_SCOPES[input.connector].join(" ");
4
- const params = new URLSearchParams({
5
- client_id: input.config.clientId,
6
- redirect_uri: input.redirectUri,
7
- response_type: "code",
8
- access_type: "offline",
9
- prompt: "consent",
10
- state: input.state,
11
- scope,
12
- });
13
- return `https://accounts.google.com/o/oauth2/v2/auth?${params.toString()}`;
14
- }
15
- export async function exchangeGoogleCodeForTokens(input) {
16
- const payload = new URLSearchParams({
17
- code: input.code,
18
- client_id: input.config.clientId,
19
- client_secret: input.config.clientSecret,
20
- redirect_uri: input.redirectUri,
21
- grant_type: "authorization_code",
22
- });
23
- const response = await fetch("https://oauth2.googleapis.com/token", {
24
- method: "POST",
25
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
26
- body: payload,
27
- });
28
- if (!response.ok) {
29
- const errorBody = await response.text();
30
- throw new Error(`Failed to exchange Google OAuth code: ${errorBody}`);
31
- }
32
- return (await response.json());
33
- }
34
- export async function refreshGoogleAccessToken(input) {
35
- const payload = new URLSearchParams({
36
- client_id: input.config.clientId,
37
- client_secret: input.config.clientSecret,
38
- refresh_token: input.refreshToken,
39
- grant_type: "refresh_token",
40
- });
41
- const response = await fetch("https://oauth2.googleapis.com/token", {
42
- method: "POST",
43
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
44
- body: payload,
45
- });
46
- if (!response.ok) {
47
- const errorBody = await response.text();
48
- throw new Error(`Failed to refresh Google access token: ${errorBody}`);
49
- }
50
- return (await response.json());
51
- }
52
- //# sourceMappingURL=google-oauth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-oauth.js","sourceRoot":"","sources":["../../src/connectors/google-oauth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,GAIxB,MAAM,YAAY,CAAA;AAEnB,MAAM,UAAU,mBAAmB,CAAC,KAKnC;IACC,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAChE,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;QAChC,YAAY,EAAE,KAAK,CAAC,WAAW;QAC/B,aAAa,EAAE,MAAM;QACrB,WAAW,EAAE,SAAS;QACtB,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK;KACN,CAAC,CAAA;IAEF,OAAO,gDAAgD,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAA;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,KAIjD;IACC,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;QAClC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;QAChC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;QACxC,YAAY,EAAE,KAAK,CAAC,WAAW;QAC/B,UAAU,EAAE,oBAAoB;KACjC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,qCAAqC,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,OAAO;KACd,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QACvC,MAAM,IAAI,KAAK,CAAC,yCAAyC,SAAS,EAAE,CAAC,CAAA;IACvE,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAA;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAG9C;IACC,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;QAClC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ;QAChC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY;QACxC,aAAa,EAAE,KAAK,CAAC,YAAY;QACjC,UAAU,EAAE,eAAe;KAC5B,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,qCAAqC,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;QAChE,IAAI,EAAE,OAAO;KACd,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QACvC,MAAM,IAAI,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAA;IACxE,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAA;AACvD,CAAC"}
@@ -1,5 +0,0 @@
1
- export { buildGoogleOAuthUrl, exchangeGoogleCodeForTokens, refreshGoogleAccessToken, } from "./google-oauth.js";
2
- export { fetchGmailPreview } from "./google-gmail.js";
3
- export { fetchCalendarPreview } from "./google-calendar.js";
4
- export { GOOGLE_CONNECTOR_SCOPES, type GoogleConnectorType, type GoogleTokenResponse, type GoogleOAuthConfig, type TokenStore, } from "./types.js";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAE3D,OAAO,EACL,uBAAuB,EACvB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,UAAU,GAChB,MAAM,YAAY,CAAA"}
@@ -1,5 +0,0 @@
1
- export { buildGoogleOAuthUrl, exchangeGoogleCodeForTokens, refreshGoogleAccessToken, } from "./google-oauth.js";
2
- export { fetchGmailPreview } from "./google-gmail.js";
3
- export { fetchCalendarPreview } from "./google-calendar.js";
4
- export { GOOGLE_CONNECTOR_SCOPES, } from "./types.js";
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/connectors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,GACzB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAE3D,OAAO,EACL,uBAAuB,GAKxB,MAAM,YAAY,CAAA"}
@@ -1,20 +0,0 @@
1
- export declare const GOOGLE_CONNECTOR_SCOPES: {
2
- readonly gmail: readonly ["https://www.googleapis.com/auth/gmail.readonly"];
3
- readonly google_calendar: readonly ["https://www.googleapis.com/auth/calendar.readonly"];
4
- };
5
- export type GoogleConnectorType = keyof typeof GOOGLE_CONNECTOR_SCOPES;
6
- export type GoogleTokenResponse = {
7
- access_token: string;
8
- expires_in: number;
9
- refresh_token?: string;
10
- scope?: string;
11
- };
12
- export type GoogleOAuthConfig = {
13
- clientId: string;
14
- clientSecret: string;
15
- };
16
- export type TokenStore = {
17
- getAccessToken(userId: string, connector: GoogleConnectorType): Promise<string>;
18
- saveTokens(userId: string, connector: GoogleConnectorType, tokens: GoogleTokenResponse): Promise<void>;
19
- };
20
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/connectors/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB;;;CAG1B,CAAA;AAEV,MAAM,MAAM,mBAAmB,GAAG,MAAM,OAAO,uBAAuB,CAAA;AAEtE,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC/E,UAAU,CACR,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,mBAAmB,EAC9B,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAAA;CACjB,CAAA"}