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.
- package/CHANGELOG.md +23 -0
- package/README.md +194 -146
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +446 -379
- package/dist/cli/index.js.map +1 -1
- package/dist/coffeeshop/client.d.ts +158 -0
- package/dist/coffeeshop/client.d.ts.map +1 -0
- package/dist/coffeeshop/client.js +293 -0
- package/dist/coffeeshop/client.js.map +1 -0
- package/dist/coffeeshop/index.d.ts +2 -0
- package/dist/coffeeshop/index.d.ts.map +1 -0
- package/dist/coffeeshop/index.js +2 -0
- package/dist/coffeeshop/index.js.map +1 -0
- package/dist/discovery/agent-card.schema.d.ts +37 -109
- package/dist/discovery/agent-card.schema.d.ts.map +1 -1
- package/dist/discovery/discovery-query.schema.d.ts +6 -15
- package/dist/discovery/discovery-query.schema.d.ts.map +1 -1
- package/dist/discovery/index.d.ts +1 -1
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +1 -1
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/intro-decision.schema.d.ts +9 -11
- package/dist/discovery/intro-decision.schema.d.ts.map +1 -1
- package/dist/discovery/intro-request.schema.d.ts +2 -14
- package/dist/discovery/intro-request.schema.d.ts.map +1 -1
- package/dist/discovery/session-bootstrap.schema.d.ts +86 -66
- package/dist/discovery/session-bootstrap.schema.d.ts.map +1 -1
- package/dist/discovery/session-bootstrap.schema.js +84 -8
- package/dist/discovery/session-bootstrap.schema.js.map +1 -1
- package/dist/mcp-server/index.d.ts +4 -0
- package/dist/mcp-server/index.d.ts.map +1 -0
- package/dist/mcp-server/index.js +4 -0
- package/dist/mcp-server/index.js.map +1 -0
- package/dist/mcp-server/persistence.d.ts +37 -0
- package/dist/mcp-server/persistence.d.ts.map +1 -0
- package/dist/mcp-server/persistence.js +309 -0
- package/dist/mcp-server/persistence.js.map +1 -0
- package/dist/mcp-server/resources.d.ts +20 -0
- package/dist/mcp-server/resources.d.ts.map +1 -0
- package/dist/mcp-server/resources.js +49 -0
- package/dist/mcp-server/resources.js.map +1 -0
- package/dist/mcp-server/server.d.ts +33 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +220 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/state.d.ts +43 -0
- package/dist/mcp-server/state.d.ts.map +1 -0
- package/dist/mcp-server/state.js +111 -0
- package/dist/mcp-server/state.js.map +1 -0
- package/dist/mcp-server/tools/common.d.ts +225 -0
- package/dist/mcp-server/tools/common.d.ts.map +1 -0
- package/dist/mcp-server/tools/common.js +11 -0
- package/dist/mcp-server/tools/common.js.map +1 -0
- package/dist/mcp-server/tools/discovery.d.ts +3 -0
- package/dist/mcp-server/tools/discovery.d.ts.map +1 -0
- package/dist/mcp-server/tools/discovery.js +48 -0
- package/dist/mcp-server/tools/discovery.js.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +4 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/index.js +13 -0
- package/dist/mcp-server/tools/index.js.map +1 -0
- package/dist/mcp-server/tools/intro.d.ts +3 -0
- package/dist/mcp-server/tools/intro.d.ts.map +1 -0
- package/dist/mcp-server/tools/intro.js +53 -0
- package/dist/mcp-server/tools/intro.js.map +1 -0
- package/dist/mcp-server/tools/protocol.d.ts +3 -0
- package/dist/mcp-server/tools/protocol.d.ts.map +1 -0
- package/dist/mcp-server/tools/protocol.js +73 -0
- package/dist/mcp-server/tools/protocol.js.map +1 -0
- package/dist/mcp-server/tools/talent.d.ts +3 -0
- package/dist/mcp-server/tools/talent.d.ts.map +1 -0
- package/dist/mcp-server/tools/talent.js +226 -0
- package/dist/mcp-server/tools/talent.js.map +1 -0
- package/dist/openclaw/index.d.ts +2 -0
- package/dist/openclaw/index.d.ts.map +1 -0
- package/dist/openclaw/index.js +2 -0
- package/dist/openclaw/index.js.map +1 -0
- package/dist/openclaw/skill.d.ts +13 -0
- package/dist/openclaw/skill.d.ts.map +1 -0
- package/dist/openclaw/skill.js +18 -0
- package/dist/openclaw/skill.js.map +1 -0
- package/dist/protocol/consent.schema.d.ts +18 -48
- package/dist/protocol/consent.schema.d.ts.map +1 -1
- package/dist/protocol/consent.schema.js +1 -1
- package/dist/protocol/consent.schema.js.map +1 -1
- package/dist/protocol/dialogue.schema.d.ts +21 -177
- package/dist/protocol/dialogue.schema.d.ts.map +1 -1
- package/dist/protocol/envelope.schema.d.ts +46 -28
- package/dist/protocol/envelope.schema.d.ts.map +1 -1
- package/dist/protocol/errors.d.ts +8 -1
- package/dist/protocol/errors.d.ts.map +1 -1
- package/dist/protocol/handshake.schema.d.ts +130 -385
- package/dist/protocol/handshake.schema.d.ts.map +1 -1
- package/dist/protocol/handshake.schema.js +1 -0
- package/dist/protocol/handshake.schema.js.map +1 -1
- package/dist/protocol/identity.schema.d.ts +44 -94
- package/dist/protocol/identity.schema.d.ts.map +1 -1
- package/dist/protocol/index.d.ts +1 -0
- package/dist/protocol/index.d.ts.map +1 -1
- package/dist/protocol/index.js +1 -0
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/message-types.d.ts +14 -1
- package/dist/protocol/message-types.d.ts.map +1 -1
- package/dist/protocol/message.schema.d.ts +100 -715
- package/dist/protocol/message.schema.d.ts.map +1 -1
- package/dist/protocol/resolution.schema.d.ts +22 -268
- package/dist/protocol/resolution.schema.d.ts.map +1 -1
- package/dist/protocol/resolution.schema.js +1 -1
- package/dist/protocol/resolution.schema.js.map +1 -1
- package/dist/protocol/state-machine.d.ts +10 -1
- package/dist/protocol/state-machine.d.ts.map +1 -1
- package/dist/protocol/talent.schema.d.ts +106 -0
- package/dist/protocol/talent.schema.d.ts.map +1 -0
- package/dist/protocol/talent.schema.js +47 -0
- package/dist/protocol/talent.schema.js.map +1 -0
- package/dist/protocol/transport.schema.d.ts +16 -18
- package/dist/protocol/transport.schema.d.ts.map +1 -1
- package/dist/transport/client.d.ts +32 -0
- package/dist/transport/client.d.ts.map +1 -0
- package/dist/transport/client.js +155 -0
- package/dist/transport/client.js.map +1 -0
- package/dist/transport/dedup.d.ts +9 -0
- package/dist/transport/dedup.d.ts.map +1 -0
- package/dist/transport/dedup.js +36 -0
- package/dist/transport/dedup.js.map +1 -0
- package/dist/transport/handler.d.ts +9 -0
- package/dist/transport/handler.d.ts.map +1 -0
- package/dist/transport/handler.js +105 -0
- package/dist/transport/handler.js.map +1 -0
- package/dist/transport/hmac.d.ts +3 -0
- package/dist/transport/hmac.d.ts.map +1 -0
- package/dist/transport/hmac.js +43 -0
- package/dist/transport/hmac.js.map +1 -0
- package/dist/transport/index.d.ts +6 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +6 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/reference-runner.d.ts +37 -0
- package/dist/transport/reference-runner.d.ts.map +1 -0
- package/dist/transport/reference-runner.js +372 -0
- package/dist/transport/reference-runner.js.map +1 -0
- package/package.json +19 -31
- package/dist/agent/archiver.d.ts +0 -8
- package/dist/agent/archiver.d.ts.map +0 -1
- package/dist/agent/archiver.js +0 -48
- package/dist/agent/archiver.js.map +0 -1
- package/dist/agent/capabilities.d.ts +0 -23
- package/dist/agent/capabilities.d.ts.map +0 -1
- package/dist/agent/capabilities.js +0 -87
- package/dist/agent/capabilities.js.map +0 -1
- package/dist/agent/config.d.ts +0 -60
- package/dist/agent/config.d.ts.map +0 -1
- package/dist/agent/config.js +0 -84
- package/dist/agent/config.js.map +0 -1
- package/dist/agent/context-provider.d.ts +0 -12
- package/dist/agent/context-provider.d.ts.map +0 -1
- package/dist/agent/context-provider.js +0 -34
- package/dist/agent/context-provider.js.map +0 -1
- package/dist/agent/context.d.ts +0 -9
- package/dist/agent/context.d.ts.map +0 -1
- package/dist/agent/context.js +0 -80
- package/dist/agent/context.js.map +0 -1
- package/dist/agent/events.d.ts +0 -62
- package/dist/agent/events.d.ts.map +0 -1
- package/dist/agent/events.js +0 -21
- package/dist/agent/events.js.map +0 -1
- package/dist/agent/index.d.ts +0 -32
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js +0 -28
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/mcp.d.ts +0 -16
- package/dist/agent/mcp.d.ts.map +0 -1
- package/dist/agent/mcp.js +0 -69
- package/dist/agent/mcp.js.map +0 -1
- package/dist/agent/notifications/decision-parser.d.ts +0 -10
- package/dist/agent/notifications/decision-parser.d.ts.map +0 -1
- package/dist/agent/notifications/decision-parser.js +0 -21
- package/dist/agent/notifications/decision-parser.js.map +0 -1
- package/dist/agent/notifications/index.d.ts +0 -4
- package/dist/agent/notifications/index.d.ts.map +0 -1
- package/dist/agent/notifications/index.js +0 -3
- package/dist/agent/notifications/index.js.map +0 -1
- package/dist/agent/notifications/opportunity-templates.d.ts +0 -14
- package/dist/agent/notifications/opportunity-templates.d.ts.map +0 -1
- package/dist/agent/notifications/opportunity-templates.js +0 -21
- package/dist/agent/notifications/opportunity-templates.js.map +0 -1
- package/dist/agent/notifications/types.d.ts +0 -16
- package/dist/agent/notifications/types.d.ts.map +0 -1
- package/dist/agent/notifications/types.js +0 -2
- package/dist/agent/notifications/types.js.map +0 -1
- package/dist/agent/providers.d.ts +0 -9
- package/dist/agent/providers.d.ts.map +0 -1
- package/dist/agent/providers.js +0 -29
- package/dist/agent/providers.js.map +0 -1
- package/dist/agent/runtime.d.ts +0 -63
- package/dist/agent/runtime.d.ts.map +0 -1
- package/dist/agent/runtime.js +0 -395
- package/dist/agent/runtime.js.map +0 -1
- package/dist/agent/scanning/index.d.ts +0 -3
- package/dist/agent/scanning/index.d.ts.map +0 -1
- package/dist/agent/scanning/index.js +0 -3
- package/dist/agent/scanning/index.js.map +0 -1
- package/dist/agent/scanning/opportunity-scorer.d.ts +0 -24
- package/dist/agent/scanning/opportunity-scorer.d.ts.map +0 -1
- package/dist/agent/scanning/opportunity-scorer.js +0 -90
- package/dist/agent/scanning/opportunity-scorer.js.map +0 -1
- package/dist/agent/scanning/types.d.ts +0 -65
- package/dist/agent/scanning/types.d.ts.map +0 -1
- package/dist/agent/scanning/types.js +0 -32
- package/dist/agent/scanning/types.js.map +0 -1
- package/dist/agent/scheduler.d.ts +0 -38
- package/dist/agent/scheduler.d.ts.map +0 -1
- package/dist/agent/scheduler.js +0 -125
- package/dist/agent/scheduler.js.map +0 -1
- package/dist/agent/session.d.ts +0 -20
- package/dist/agent/session.d.ts.map +0 -1
- package/dist/agent/session.js +0 -88
- package/dist/agent/session.js.map +0 -1
- package/dist/agent/stores.d.ts +0 -48
- package/dist/agent/stores.d.ts.map +0 -1
- package/dist/agent/stores.js +0 -2
- package/dist/agent/stores.js.map +0 -1
- package/dist/agent/tools/browser/ats-patterns.d.ts +0 -20
- package/dist/agent/tools/browser/ats-patterns.d.ts.map +0 -1
- package/dist/agent/tools/browser/ats-patterns.js +0 -226
- package/dist/agent/tools/browser/ats-patterns.js.map +0 -1
- package/dist/agent/tools/browser/index.d.ts +0 -14
- package/dist/agent/tools/browser/index.d.ts.map +0 -1
- package/dist/agent/tools/browser/index.js +0 -126
- package/dist/agent/tools/browser/index.js.map +0 -1
- package/dist/agent/tools/browser/operator-runtime.d.ts +0 -35
- package/dist/agent/tools/browser/operator-runtime.d.ts.map +0 -1
- package/dist/agent/tools/browser/operator-runtime.js +0 -93
- package/dist/agent/tools/browser/operator-runtime.js.map +0 -1
- package/dist/agent/tools/browser/providers/chrome-mcp.d.ts +0 -3
- package/dist/agent/tools/browser/providers/chrome-mcp.d.ts.map +0 -1
- package/dist/agent/tools/browser/providers/chrome-mcp.js +0 -164
- package/dist/agent/tools/browser/providers/chrome-mcp.js.map +0 -1
- package/dist/agent/tools/browser/providers/playwright.d.ts +0 -7
- package/dist/agent/tools/browser/providers/playwright.d.ts.map +0 -1
- package/dist/agent/tools/browser/providers/playwright.js +0 -619
- package/dist/agent/tools/browser/providers/playwright.js.map +0 -1
- package/dist/agent/tools/browser/types.d.ts +0 -22
- package/dist/agent/tools/browser/types.d.ts.map +0 -1
- package/dist/agent/tools/browser/types.js +0 -15
- package/dist/agent/tools/browser/types.js.map +0 -1
- package/dist/agent/tools/cancel-task.d.ts +0 -4
- package/dist/agent/tools/cancel-task.d.ts.map +0 -1
- package/dist/agent/tools/cancel-task.js +0 -29
- package/dist/agent/tools/cancel-task.js.map +0 -1
- package/dist/agent/tools/career-advice.d.ts +0 -3
- package/dist/agent/tools/career-advice.d.ts.map +0 -1
- package/dist/agent/tools/career-advice.js +0 -49
- package/dist/agent/tools/career-advice.js.map +0 -1
- package/dist/agent/tools/index.d.ts +0 -15
- package/dist/agent/tools/index.d.ts.map +0 -1
- package/dist/agent/tools/index.js +0 -94
- package/dist/agent/tools/index.js.map +0 -1
- package/dist/agent/tools/job-search.d.ts +0 -3
- package/dist/agent/tools/job-search.d.ts.map +0 -1
- package/dist/agent/tools/job-search.js +0 -77
- package/dist/agent/tools/job-search.js.map +0 -1
- package/dist/agent/tools/list-tasks.d.ts +0 -4
- package/dist/agent/tools/list-tasks.d.ts.map +0 -1
- package/dist/agent/tools/list-tasks.js +0 -24
- package/dist/agent/tools/list-tasks.js.map +0 -1
- package/dist/agent/tools/market-data.d.ts +0 -8
- package/dist/agent/tools/market-data.d.ts.map +0 -1
- package/dist/agent/tools/market-data.js +0 -133
- package/dist/agent/tools/market-data.js.map +0 -1
- package/dist/agent/tools/memory-write.d.ts +0 -3
- package/dist/agent/tools/memory-write.d.ts.map +0 -1
- package/dist/agent/tools/memory-write.js +0 -48
- package/dist/agent/tools/memory-write.js.map +0 -1
- package/dist/agent/tools/resume.d.ts +0 -3
- package/dist/agent/tools/resume.d.ts.map +0 -1
- package/dist/agent/tools/resume.js +0 -70
- package/dist/agent/tools/resume.js.map +0 -1
- package/dist/agent/tools/schedule-task.d.ts +0 -4
- package/dist/agent/tools/schedule-task.d.ts.map +0 -1
- package/dist/agent/tools/schedule-task.js +0 -39
- package/dist/agent/tools/schedule-task.js.map +0 -1
- package/dist/agent/tools/shell.d.ts +0 -6
- package/dist/agent/tools/shell.d.ts.map +0 -1
- package/dist/agent/tools/shell.js +0 -66
- package/dist/agent/tools/shell.js.map +0 -1
- package/dist/agent/tools/web-search.d.ts +0 -6
- package/dist/agent/tools/web-search.d.ts.map +0 -1
- package/dist/agent/tools/web-search.js +0 -73
- package/dist/agent/tools/web-search.js.map +0 -1
- package/dist/agent/types.d.ts +0 -103
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/agent/types.js +0 -11
- package/dist/agent/types.js.map +0 -1
- package/dist/channels/index.d.ts +0 -10
- package/dist/channels/index.d.ts.map +0 -1
- package/dist/channels/index.js +0 -15
- package/dist/channels/index.js.map +0 -1
- package/dist/channels/telegram.d.ts +0 -21
- package/dist/channels/telegram.d.ts.map +0 -1
- package/dist/channels/telegram.js +0 -255
- package/dist/channels/telegram.js.map +0 -1
- package/dist/channels/types.d.ts +0 -24
- package/dist/channels/types.d.ts.map +0 -1
- package/dist/channels/types.js +0 -2
- package/dist/channels/types.js.map +0 -1
- package/dist/cli/templates/HEARTBEAT.md +0 -6
- package/dist/cli/templates/MEMORY.md +0 -6
- package/dist/cli/templates/PREFERENCES.md +0 -40
- package/dist/cli/templates/PROFILE.md +0 -26
- package/dist/cli/templates/SOUL.md +0 -23
- package/dist/connectors/google-calendar.d.ts +0 -8
- package/dist/connectors/google-calendar.d.ts.map +0 -1
- package/dist/connectors/google-calendar.js +0 -23
- package/dist/connectors/google-calendar.js.map +0 -1
- package/dist/connectors/google-gmail.d.ts +0 -8
- package/dist/connectors/google-gmail.d.ts.map +0 -1
- package/dist/connectors/google-gmail.js +0 -30
- package/dist/connectors/google-gmail.js.map +0 -1
- package/dist/connectors/google-oauth.d.ts +0 -17
- package/dist/connectors/google-oauth.d.ts.map +0 -1
- package/dist/connectors/google-oauth.js +0 -52
- package/dist/connectors/google-oauth.js.map +0 -1
- package/dist/connectors/index.d.ts +0 -5
- package/dist/connectors/index.d.ts.map +0 -1
- package/dist/connectors/index.js +0 -5
- package/dist/connectors/index.js.map +0 -1
- package/dist/connectors/types.d.ts +0 -20
- package/dist/connectors/types.d.ts.map +0 -1
- package/dist/connectors/types.js +0 -5
- 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, "&")
|
|
250
|
-
.replace(/</g, "<")
|
|
251
|
-
.replace(/>/g, ">")
|
|
252
|
-
.replace(/"/g, """)
|
|
253
|
-
.replace(/'/g, "'");
|
|
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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"}
|
package/dist/channels/types.d.ts
DELETED
|
@@ -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"}
|
package/dist/channels/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/channels/types.ts"],"names":[],"mappings":""}
|
|
@@ -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 +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 +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"}
|
package/dist/connectors/index.js
DELETED
|
@@ -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"}
|