exempclaw 0.4.0

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 (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +306 -0
  3. package/dist/agent/agent.d.ts +91 -0
  4. package/dist/agent/agent.js +258 -0
  5. package/dist/agent/agent.js.map +1 -0
  6. package/dist/agent/config.d.ts +49 -0
  7. package/dist/agent/config.js +58 -0
  8. package/dist/agent/config.js.map +1 -0
  9. package/dist/agent/persona.d.ts +39 -0
  10. package/dist/agent/persona.js +81 -0
  11. package/dist/agent/persona.js.map +1 -0
  12. package/dist/agents/registry.d.ts +21 -0
  13. package/dist/agents/registry.js +51 -0
  14. package/dist/agents/registry.js.map +1 -0
  15. package/dist/cli/approve.d.ts +17 -0
  16. package/dist/cli/approve.js +50 -0
  17. package/dist/cli/approve.js.map +1 -0
  18. package/dist/cli/chat.d.ts +16 -0
  19. package/dist/cli/chat.js +148 -0
  20. package/dist/cli/chat.js.map +1 -0
  21. package/dist/cli/demo.d.ts +7 -0
  22. package/dist/cli/demo.js +82 -0
  23. package/dist/cli/demo.js.map +1 -0
  24. package/dist/cli/init.d.ts +17 -0
  25. package/dist/cli/init.js +89 -0
  26. package/dist/cli/init.js.map +1 -0
  27. package/dist/cli/live.d.ts +10 -0
  28. package/dist/cli/live.js +109 -0
  29. package/dist/cli/live.js.map +1 -0
  30. package/dist/cli/offline.d.ts +23 -0
  31. package/dist/cli/offline.js +236 -0
  32. package/dist/cli/offline.js.map +1 -0
  33. package/dist/cli/probe.d.ts +23 -0
  34. package/dist/cli/probe.js +140 -0
  35. package/dist/cli/probe.js.map +1 -0
  36. package/dist/cli/render.d.ts +15 -0
  37. package/dist/cli/render.js +50 -0
  38. package/dist/cli/render.js.map +1 -0
  39. package/dist/cli/tui.d.ts +101 -0
  40. package/dist/cli/tui.js +334 -0
  41. package/dist/cli/tui.js.map +1 -0
  42. package/dist/config/index.d.ts +33 -0
  43. package/dist/config/index.js +48 -0
  44. package/dist/config/index.js.map +1 -0
  45. package/dist/connectors/connector.d.ts +58 -0
  46. package/dist/connectors/connector.js +30 -0
  47. package/dist/connectors/connector.js.map +1 -0
  48. package/dist/connectors/email/email-connector.d.ts +43 -0
  49. package/dist/connectors/email/email-connector.js +364 -0
  50. package/dist/connectors/email/email-connector.js.map +1 -0
  51. package/dist/connectors/github/github-connector.d.ts +52 -0
  52. package/dist/connectors/github/github-connector.js +271 -0
  53. package/dist/connectors/github/github-connector.js.map +1 -0
  54. package/dist/connectors/http.d.ts +34 -0
  55. package/dist/connectors/http.js +78 -0
  56. package/dist/connectors/http.js.map +1 -0
  57. package/dist/connectors/index.d.ts +34 -0
  58. package/dist/connectors/index.js +86 -0
  59. package/dist/connectors/index.js.map +1 -0
  60. package/dist/connectors/notion/notion-connector.d.ts +45 -0
  61. package/dist/connectors/notion/notion-connector.js +222 -0
  62. package/dist/connectors/notion/notion-connector.js.map +1 -0
  63. package/dist/connectors/slack/slack-connector.d.ts +43 -0
  64. package/dist/connectors/slack/slack-connector.js +291 -0
  65. package/dist/connectors/slack/slack-connector.js.map +1 -0
  66. package/dist/core/errors.d.ts +36 -0
  67. package/dist/core/errors.js +40 -0
  68. package/dist/core/errors.js.map +1 -0
  69. package/dist/core/logger.d.ts +14 -0
  70. package/dist/core/logger.js +44 -0
  71. package/dist/core/logger.js.map +1 -0
  72. package/dist/core/run-log.d.ts +37 -0
  73. package/dist/core/run-log.js +37 -0
  74. package/dist/core/run-log.js.map +1 -0
  75. package/dist/core/usage.d.ts +22 -0
  76. package/dist/core/usage.js +58 -0
  77. package/dist/core/usage.js.map +1 -0
  78. package/dist/dashboard/data.d.ts +62 -0
  79. package/dist/dashboard/data.js +84 -0
  80. package/dist/dashboard/data.js.map +1 -0
  81. package/dist/dashboard/page.d.ts +9 -0
  82. package/dist/dashboard/page.js +421 -0
  83. package/dist/dashboard/page.js.map +1 -0
  84. package/dist/dashboard/server.d.ts +19 -0
  85. package/dist/dashboard/server.js +44 -0
  86. package/dist/dashboard/server.js.map +1 -0
  87. package/dist/demo/bootstrap.d.ts +25 -0
  88. package/dist/demo/bootstrap.js +60 -0
  89. package/dist/demo/bootstrap.js.map +1 -0
  90. package/dist/demo/claude.d.ts +31 -0
  91. package/dist/demo/claude.js +230 -0
  92. package/dist/demo/claude.js.map +1 -0
  93. package/dist/demo/demo-connector.d.ts +19 -0
  94. package/dist/demo/demo-connector.js +168 -0
  95. package/dist/demo/demo-connector.js.map +1 -0
  96. package/dist/demo/world.d.ts +60 -0
  97. package/dist/demo/world.js +117 -0
  98. package/dist/demo/world.js.map +1 -0
  99. package/dist/index.d.ts +2 -0
  100. package/dist/index.js +396 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/ingest/ingest.d.ts +63 -0
  103. package/dist/ingest/ingest.js +258 -0
  104. package/dist/ingest/ingest.js.map +1 -0
  105. package/dist/llm/claude.d.ts +97 -0
  106. package/dist/llm/claude.js +163 -0
  107. package/dist/llm/claude.js.map +1 -0
  108. package/dist/memory/compaction.d.ts +22 -0
  109. package/dist/memory/compaction.js +79 -0
  110. package/dist/memory/compaction.js.map +1 -0
  111. package/dist/memory/file-store.d.ts +28 -0
  112. package/dist/memory/file-store.js +110 -0
  113. package/dist/memory/file-store.js.map +1 -0
  114. package/dist/memory/store.d.ts +32 -0
  115. package/dist/memory/store.js +2 -0
  116. package/dist/memory/store.js.map +1 -0
  117. package/dist/orchestrator/orchestrator.d.ts +63 -0
  118. package/dist/orchestrator/orchestrator.js +181 -0
  119. package/dist/orchestrator/orchestrator.js.map +1 -0
  120. package/dist/orchestrator/scheduler.d.ts +33 -0
  121. package/dist/orchestrator/scheduler.js +67 -0
  122. package/dist/orchestrator/scheduler.js.map +1 -0
  123. package/dist/orchestrator/seen-events.d.ts +21 -0
  124. package/dist/orchestrator/seen-events.js +71 -0
  125. package/dist/orchestrator/seen-events.js.map +1 -0
  126. package/dist/plugins/apply.d.ts +9 -0
  127. package/dist/plugins/apply.js +17 -0
  128. package/dist/plugins/apply.js.map +1 -0
  129. package/dist/plugins/define.d.ts +29 -0
  130. package/dist/plugins/define.js +30 -0
  131. package/dist/plugins/define.js.map +1 -0
  132. package/dist/plugins/loader.d.ts +31 -0
  133. package/dist/plugins/loader.js +61 -0
  134. package/dist/plugins/loader.js.map +1 -0
  135. package/dist/plugins/scaffold.d.ts +5 -0
  136. package/dist/plugins/scaffold.js +72 -0
  137. package/dist/plugins/scaffold.js.map +1 -0
  138. package/dist/tools/builtin.d.ts +8 -0
  139. package/dist/tools/builtin.js +63 -0
  140. package/dist/tools/builtin.js.map +1 -0
  141. package/dist/tools/tool.d.ts +84 -0
  142. package/dist/tools/tool.js +70 -0
  143. package/dist/tools/tool.js.map +1 -0
  144. package/dist/ui/agent-view.test.d.ts +1 -0
  145. package/dist/ui/agent-view.test.js +54 -0
  146. package/dist/ui/agent-view.test.js.map +1 -0
  147. package/dist/ui/agents-data.d.ts +7 -0
  148. package/dist/ui/agents-data.js +25 -0
  149. package/dist/ui/agents-data.js.map +1 -0
  150. package/dist/ui/app.d.ts +24 -0
  151. package/dist/ui/app.js +59 -0
  152. package/dist/ui/app.js.map +1 -0
  153. package/dist/ui/app.test.d.ts +1 -0
  154. package/dist/ui/app.test.js +47 -0
  155. package/dist/ui/app.test.js.map +1 -0
  156. package/dist/ui/components/key-hints.d.ts +4 -0
  157. package/dist/ui/components/key-hints.js +6 -0
  158. package/dist/ui/components/key-hints.js.map +1 -0
  159. package/dist/ui/components/menu.d.ts +11 -0
  160. package/dist/ui/components/menu.js +20 -0
  161. package/dist/ui/components/menu.js.map +1 -0
  162. package/dist/ui/create-wizard.test.d.ts +1 -0
  163. package/dist/ui/create-wizard.test.js +58 -0
  164. package/dist/ui/create-wizard.test.js.map +1 -0
  165. package/dist/ui/doctor-data.d.ts +6 -0
  166. package/dist/ui/doctor-data.js +29 -0
  167. package/dist/ui/doctor-data.js.map +1 -0
  168. package/dist/ui/history-data.d.ts +2 -0
  169. package/dist/ui/history-data.js +18 -0
  170. package/dist/ui/history-data.js.map +1 -0
  171. package/dist/ui/screens/agent.d.ts +8 -0
  172. package/dist/ui/screens/agent.js +95 -0
  173. package/dist/ui/screens/agent.js.map +1 -0
  174. package/dist/ui/screens/agents.d.ts +7 -0
  175. package/dist/ui/screens/agents.js +47 -0
  176. package/dist/ui/screens/agents.js.map +1 -0
  177. package/dist/ui/screens/create.d.ts +7 -0
  178. package/dist/ui/screens/create.js +141 -0
  179. package/dist/ui/screens/create.js.map +1 -0
  180. package/dist/ui/screens/doctor.d.ts +5 -0
  181. package/dist/ui/screens/doctor.js +13 -0
  182. package/dist/ui/screens/doctor.js.map +1 -0
  183. package/dist/ui/screens/history.d.ts +7 -0
  184. package/dist/ui/screens/history.js +50 -0
  185. package/dist/ui/screens/history.js.map +1 -0
  186. package/dist/ui/screens/home.d.ts +8 -0
  187. package/dist/ui/screens/home.js +35 -0
  188. package/dist/ui/screens/home.js.map +1 -0
  189. package/dist/ui/screens/plugins.d.ts +7 -0
  190. package/dist/ui/screens/plugins.js +40 -0
  191. package/dist/ui/screens/plugins.js.map +1 -0
  192. package/dist/ui/services.d.ts +33 -0
  193. package/dist/ui/services.js +67 -0
  194. package/dist/ui/services.js.map +1 -0
  195. package/dist/ui/start.d.ts +1 -0
  196. package/dist/ui/start.js +16 -0
  197. package/dist/ui/start.js.map +1 -0
  198. package/dist/ui/theme.d.ts +6 -0
  199. package/dist/ui/theme.js +26 -0
  200. package/dist/ui/theme.js.map +1 -0
  201. package/package.json +69 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/cli/tui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import type { LogLevel } from "../core/logger.js";
3
+ /** Outward-action policy: how aggressively agents may act on the world. */
4
+ export declare const ActionPolicy: z.ZodEnum<{
5
+ ask: "ask";
6
+ auto: "auto";
7
+ deny: "deny";
8
+ }>;
9
+ export type ActionPolicy = z.infer<typeof ActionPolicy>;
10
+ /** Config available without an Anthropic key (offline CLI commands). */
11
+ export interface OfflineConfig {
12
+ anthropicApiKey?: string;
13
+ defaultModel: string;
14
+ dataDir: string;
15
+ logLevel: LogLevel;
16
+ actionPolicy: ActionPolicy;
17
+ contextBudgetTokens: number;
18
+ }
19
+ /** Full runtime config; the API key is guaranteed present. */
20
+ export interface RuntimeConfig extends OfflineConfig {
21
+ anthropicApiKey: string;
22
+ }
23
+ /**
24
+ * Loads config from the environment without requiring the API key. Used by
25
+ * commands that only touch local state (memory, history, costs, doctor).
26
+ */
27
+ export declare function loadOfflineConfig(env?: NodeJS.ProcessEnv): OfflineConfig;
28
+ /**
29
+ * Loads and validates the full runtime config. Throws a ConfigError with a
30
+ * readable message if anything required is missing — this is the single place
31
+ * env vars are read, so the rest of the code takes typed config.
32
+ */
33
+ export declare function loadConfig(env?: NodeJS.ProcessEnv): RuntimeConfig;
@@ -0,0 +1,48 @@
1
+ import { config as loadDotenv } from "dotenv";
2
+ import { z } from "zod";
3
+ import { ConfigError } from "../core/errors.js";
4
+ loadDotenv({ quiet: true });
5
+ /** Outward-action policy: how aggressively agents may act on the world. */
6
+ export const ActionPolicy = z.enum(["ask", "auto", "deny"]);
7
+ const EnvSchema = z.object({
8
+ ANTHROPIC_API_KEY: z.string().optional(),
9
+ EXEMPCLAW_MODEL: z.string().default("claude-opus-4-8"),
10
+ EXEMPCLAW_DATA_DIR: z.string().default("./data"),
11
+ EXEMPCLAW_LOG_LEVEL: z.enum(["debug", "info", "warn", "error"]).default("info"),
12
+ EXEMPCLAW_ACTION_POLICY: ActionPolicy.default("ask"),
13
+ /** Compact an agent's history once its prompt exceeds this many tokens. */
14
+ EXEMPCLAW_CONTEXT_BUDGET_TOKENS: z.coerce.number().int().min(20_000).default(200_000),
15
+ });
16
+ /**
17
+ * Loads config from the environment without requiring the API key. Used by
18
+ * commands that only touch local state (memory, history, costs, doctor).
19
+ */
20
+ export function loadOfflineConfig(env = process.env) {
21
+ const parsed = EnvSchema.safeParse(env);
22
+ if (!parsed.success) {
23
+ const issues = parsed.error.issues.map((i) => ` - ${i.path.join(".")}: ${i.message}`).join("\n");
24
+ throw new ConfigError(`Invalid configuration:\n${issues}`);
25
+ }
26
+ const e = parsed.data;
27
+ return {
28
+ anthropicApiKey: e.ANTHROPIC_API_KEY,
29
+ defaultModel: e.EXEMPCLAW_MODEL,
30
+ dataDir: e.EXEMPCLAW_DATA_DIR,
31
+ logLevel: e.EXEMPCLAW_LOG_LEVEL,
32
+ actionPolicy: e.EXEMPCLAW_ACTION_POLICY,
33
+ contextBudgetTokens: e.EXEMPCLAW_CONTEXT_BUDGET_TOKENS,
34
+ };
35
+ }
36
+ /**
37
+ * Loads and validates the full runtime config. Throws a ConfigError with a
38
+ * readable message if anything required is missing — this is the single place
39
+ * env vars are read, so the rest of the code takes typed config.
40
+ */
41
+ export function loadConfig(env = process.env) {
42
+ const offline = loadOfflineConfig(env);
43
+ if (!offline.anthropicApiKey) {
44
+ throw new ConfigError("ANTHROPIC_API_KEY is required. Set it in your environment or .env (see .env.example).");
45
+ }
46
+ return { ...offline, anthropicApiKey: offline.anthropicApiKey };
47
+ }
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE5B,2EAA2E;AAC3E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAG5D,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACxC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACtD,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;IAChD,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/E,uBAAuB,EAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;IACpD,2EAA2E;IAC3E,+BAA+B,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;CACtF,CAAC,CAAC;AAiBH;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClG,MAAM,IAAI,WAAW,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;IACtB,OAAO;QACL,eAAe,EAAE,CAAC,CAAC,iBAAiB;QACpC,YAAY,EAAE,CAAC,CAAC,eAAe;QAC/B,OAAO,EAAE,CAAC,CAAC,kBAAkB;QAC7B,QAAQ,EAAE,CAAC,CAAC,mBAAmB;QAC/B,YAAY,EAAE,CAAC,CAAC,uBAAuB;QACvC,mBAAmB,EAAE,CAAC,CAAC,+BAA+B;KACvD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC7D,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7B,MAAM,IAAI,WAAW,CACnB,uFAAuF,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC;AAClE,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { Logger } from "../core/logger.js";
2
+ import type { Tool } from "../tools/tool.js";
3
+ /**
4
+ * A connector integrates one external system (email, Slack, Notion, GitHub).
5
+ * It contributes two things to an agent:
6
+ *
7
+ * 1. **Tools** — capabilities the agent can call (read a thread, send a reply).
8
+ * 2. **Events** — inbound triggers (a new email, a Slack mention) the
9
+ * orchestrator routes to the right agent's run loop.
10
+ *
11
+ * Connectors are the primary extension point. Adding an integration means
12
+ * implementing this interface; nothing in the core changes.
13
+ */
14
+ export interface Connector {
15
+ /** Stable identifier, e.g. "email", "slack". */
16
+ readonly id: string;
17
+ /** Establish credentials/sessions. Called once before the connector is used. */
18
+ init(ctx: ConnectorContext): Promise<void>;
19
+ /** Tools this connector exposes to agents. */
20
+ tools(): Tool[];
21
+ /**
22
+ * Begin listening for inbound events, delivering each to `onEvent`. Optional —
23
+ * a write-only connector (e.g. a metrics sink) can omit it. Runs until
24
+ * `signal` aborts; the returned promise resolves when listening has stopped.
25
+ */
26
+ listen?(onEvent: (event: InboundEvent) => void, signal: AbortSignal): Promise<void>;
27
+ /** Release resources. */
28
+ shutdown?(): Promise<void>;
29
+ }
30
+ export interface ConnectorContext {
31
+ log: Logger;
32
+ /** Connector-specific credentials/config, already validated by the loader. */
33
+ config: Record<string, string>;
34
+ }
35
+ /** A normalized inbound trigger produced by a connector. */
36
+ export interface InboundEvent {
37
+ connector: string;
38
+ /** e.g. "email.received", "slack.mention". */
39
+ type: string;
40
+ /**
41
+ * Unique id of this occurrence, used for at-least-once dedup across
42
+ * restarts. Use the upstream system's id (message id, event ts, …).
43
+ */
44
+ eventId: string;
45
+ /** Stable identifier of the conversation/thread, for routing + replies. */
46
+ threadId: string;
47
+ /** Human-readable summary used as the agent's user-turn input. */
48
+ summary: string;
49
+ /** Raw payload for tools that need full fidelity. */
50
+ payload: unknown;
51
+ receivedAt: string;
52
+ }
53
+ /** Renders an inbound event into the user-turn text fed to the agent. */
54
+ export declare function renderEventInput(event: InboundEvent): string;
55
+ /** Waits until the signal aborts. Shared by polling/listening loops. */
56
+ export declare function abortedPromise(signal: AbortSignal): Promise<void>;
57
+ /** Abortable sleep that resolves early (without throwing) when aborted. */
58
+ export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
@@ -0,0 +1,30 @@
1
+ /** Renders an inbound event into the user-turn text fed to the agent. */
2
+ export function renderEventInput(event) {
3
+ return [
4
+ `[inbound event] connector=${event.connector} type=${event.type} thread=${event.threadId} received=${event.receivedAt}`,
5
+ event.summary,
6
+ "",
7
+ "Handle this event in your role. Gather context with your tools first; reply in the originating thread if (and only if) a response is warranted.",
8
+ ].join("\n");
9
+ }
10
+ /** Waits until the signal aborts. Shared by polling/listening loops. */
11
+ export function abortedPromise(signal) {
12
+ if (signal.aborted)
13
+ return Promise.resolve();
14
+ return new Promise((resolve) => signal.addEventListener("abort", () => resolve(), { once: true }));
15
+ }
16
+ /** Abortable sleep that resolves early (without throwing) when aborted. */
17
+ export function sleep(ms, signal) {
18
+ return new Promise((resolve) => {
19
+ if (signal?.aborted)
20
+ return resolve();
21
+ const timer = setTimeout(done, ms);
22
+ function done() {
23
+ signal?.removeEventListener("abort", done);
24
+ clearTimeout(timer);
25
+ resolve();
26
+ }
27
+ signal?.addEventListener("abort", done, { once: true });
28
+ });
29
+ }
30
+ //# sourceMappingURL=connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector.js","sourceRoot":"","sources":["../../src/connectors/connector.ts"],"names":[],"mappings":"AA4DA,yEAAyE;AACzE,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,OAAO;QACL,6BAA6B,KAAK,CAAC,SAAS,SAAS,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,QAAQ,aAAa,KAAK,CAAC,UAAU,EAAE;QACvH,KAAK,CAAC,OAAO;QACb,EAAE;QACF,iJAAiJ;KAClJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,MAAmB;IAChD,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACrG,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,OAAO,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnC,SAAS,IAAI;YACX,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3C,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { ImapFlow, type FetchMessageObject, type ImapFlowOptions } from "imapflow";
2
+ import { type ParsedMail } from "mailparser";
3
+ import { type Transporter } from "nodemailer";
4
+ import { type Connector, type ConnectorContext, type InboundEvent } from "../connector.js";
5
+ import { type Tool } from "../../tools/tool.js";
6
+ /** Factories are injectable for tests. */
7
+ export interface EmailTransports {
8
+ imapFactory?: (opts: ImapFlowOptions) => ImapFlow;
9
+ smtpFactory?: (opts: Record<string, unknown>) => Transporter;
10
+ }
11
+ export declare class EmailConnector implements Connector {
12
+ readonly id = "email";
13
+ private log;
14
+ private cfg;
15
+ private toolsImap?;
16
+ private listenImap?;
17
+ private smtp?;
18
+ private readonly transports;
19
+ constructor(transports?: EmailTransports);
20
+ init(ctx: ConnectorContext): Promise<void>;
21
+ private getToolsImap;
22
+ private connectImap;
23
+ private getSmtp;
24
+ tools(): Tool[];
25
+ /**
26
+ * IDLEs on INBOX over a dedicated connection; new mail becomes events.
27
+ * Reconnects with backoff when the server drops the connection (common —
28
+ * many IMAP servers cut idle sessions every few minutes).
29
+ */
30
+ listen(onEvent: (event: InboundEvent) => void, signal: AbortSignal): Promise<void>;
31
+ shutdown(): Promise<void>;
32
+ }
33
+ export declare function renderEnvelopeRow(msg: FetchMessageObject): string;
34
+ export declare function renderParsedMail(uid: number, mail: ParsedMail): string;
35
+ export declare function buildMailOptions(from: string, input: {
36
+ to: string[];
37
+ cc?: string[];
38
+ subject: string;
39
+ body: string;
40
+ inReplyTo?: string;
41
+ }): Record<string, unknown>;
42
+ /** Maps a parsed inbound mail to an event; self-sent mail is suppressed. */
43
+ export declare function parsedMailToInbound(uid: number, mail: ParsedMail, selfAddress: string): InboundEvent | null;
@@ -0,0 +1,364 @@
1
+ import { z } from "zod";
2
+ import { ImapFlow } from "imapflow";
3
+ import { simpleParser } from "mailparser";
4
+ import { createTransport } from "nodemailer";
5
+ import { abortedPromise, sleep } from "../connector.js";
6
+ import { ConnectorError } from "../../core/errors.js";
7
+ import { defineTool } from "../../tools/tool.js";
8
+ export class EmailConnector {
9
+ id = "email";
10
+ log;
11
+ cfg;
12
+ toolsImap;
13
+ listenImap;
14
+ smtp;
15
+ transports;
16
+ constructor(transports = {}) {
17
+ this.transports = {
18
+ imapFactory: transports.imapFactory ?? ((opts) => new ImapFlow(opts)),
19
+ smtpFactory: transports.smtpFactory ?? ((opts) => createTransport(opts)),
20
+ };
21
+ }
22
+ async init(ctx) {
23
+ this.log = ctx.log.child({ scope: "connector", connector: this.id });
24
+ const { user, password, imapHost, smtpHost } = ctx.config;
25
+ if (!user || !password) {
26
+ throw new ConnectorError(this.id, "missing EMAIL_USER / EMAIL_PASSWORD");
27
+ }
28
+ if (!imapHost && !smtpHost) {
29
+ throw new ConnectorError(this.id, "set EMAIL_IMAP_HOST (read) and/or EMAIL_SMTP_HOST (send)");
30
+ }
31
+ this.cfg = {
32
+ imapHost,
33
+ imapPort: Number(ctx.config.imapPort ?? 993),
34
+ smtpHost,
35
+ smtpPort: Number(ctx.config.smtpPort ?? 587),
36
+ user,
37
+ password,
38
+ from: ctx.config.from ?? user,
39
+ };
40
+ this.log.info("email connector ready", {
41
+ user,
42
+ imap: imapHost ?? "(disabled)",
43
+ smtp: smtpHost ?? "(disabled)",
44
+ });
45
+ }
46
+ async getToolsImap() {
47
+ if (!this.cfg.imapHost)
48
+ throw new ConnectorError(this.id, "EMAIL_IMAP_HOST is not configured");
49
+ if (this.toolsImap?.usable)
50
+ return this.toolsImap;
51
+ this.toolsImap = await this.connectImap();
52
+ return this.toolsImap;
53
+ }
54
+ async connectImap() {
55
+ const client = this.transports.imapFactory({
56
+ host: this.cfg.imapHost,
57
+ port: this.cfg.imapPort,
58
+ secure: this.cfg.imapPort === 993,
59
+ auth: { user: this.cfg.user, pass: this.cfg.password },
60
+ logger: false,
61
+ });
62
+ try {
63
+ await client.connect();
64
+ }
65
+ catch (err) {
66
+ throw new ConnectorError(this.id, `IMAP connect failed: ${err.message}`, {
67
+ retryable: true,
68
+ cause: err,
69
+ });
70
+ }
71
+ return client;
72
+ }
73
+ getSmtp() {
74
+ if (!this.cfg.smtpHost)
75
+ throw new ConnectorError(this.id, "EMAIL_SMTP_HOST is not configured");
76
+ if (!this.smtp) {
77
+ this.smtp = this.transports.smtpFactory({
78
+ host: this.cfg.smtpHost,
79
+ port: this.cfg.smtpPort,
80
+ secure: this.cfg.smtpPort === 465,
81
+ auth: { user: this.cfg.user, pass: this.cfg.password },
82
+ });
83
+ }
84
+ return this.smtp;
85
+ }
86
+ tools() {
87
+ const listInbox = defineTool({
88
+ name: "email_list_inbox",
89
+ description: "List recent inbox messages (newest first) with their uid, sender, subject, and read state.",
90
+ schema: z.object({
91
+ limit: z.number().int().min(1).max(50).default(10),
92
+ unreadOnly: z.boolean().default(false),
93
+ }),
94
+ execute: async (input) => {
95
+ const client = await this.getToolsImap();
96
+ const lock = await client.getMailboxLock("INBOX");
97
+ try {
98
+ let rows = [];
99
+ if (input.unreadOnly) {
100
+ const uids = await client.search({ seen: false }, { uid: true });
101
+ const recent = (uids || []).slice(-input.limit);
102
+ for (const uid of recent) {
103
+ const msg = await client.fetchOne(String(uid), { envelope: true, flags: true }, { uid: true });
104
+ if (msg)
105
+ rows.push(msg);
106
+ }
107
+ }
108
+ else {
109
+ const exists = client.mailbox && typeof client.mailbox === "object" ? client.mailbox.exists : 0;
110
+ if (exists > 0) {
111
+ const start = Math.max(1, exists - input.limit + 1);
112
+ for await (const msg of client.fetch(`${start}:*`, { envelope: true, flags: true, uid: true })) {
113
+ rows.push(msg);
114
+ }
115
+ }
116
+ }
117
+ rows = rows.sort((a, b) => b.uid - a.uid).slice(0, input.limit);
118
+ if (rows.length === 0)
119
+ return { content: input.unreadOnly ? "No unread messages." : "Inbox is empty." };
120
+ return { content: rows.map((m) => renderEnvelopeRow(m)).join("\n") };
121
+ }
122
+ finally {
123
+ lock.release();
124
+ }
125
+ },
126
+ });
127
+ const readMessage = defineTool({
128
+ name: "email_read_message",
129
+ description: "Read one email in full by its uid (from email_list_inbox or email_search).",
130
+ schema: z.object({ uid: z.number().int().min(1) }),
131
+ execute: async (input) => {
132
+ const client = await this.getToolsImap();
133
+ const lock = await client.getMailboxLock("INBOX");
134
+ try {
135
+ const msg = await client.fetchOne(String(input.uid), { source: true }, { uid: true });
136
+ if (!msg || !msg.source)
137
+ return { content: `No message with uid ${input.uid}.`, isError: true };
138
+ const parsed = await simpleParser(msg.source);
139
+ return { content: renderParsedMail(input.uid, parsed) };
140
+ }
141
+ finally {
142
+ lock.release();
143
+ }
144
+ },
145
+ });
146
+ const searchMail = defineTool({
147
+ name: "email_search",
148
+ description: "Search the inbox by sender, subject, body text, and/or age. Returns matching messages, newest first.",
149
+ schema: z.object({
150
+ from: z.string().optional(),
151
+ subject: z.string().optional(),
152
+ text: z.string().optional().describe("Words that must appear in the body."),
153
+ sinceDays: z.number().int().min(1).max(365).optional(),
154
+ limit: z.number().int().min(1).max(50).default(10),
155
+ }),
156
+ execute: async (input) => {
157
+ if (!input.from && !input.subject && !input.text && !input.sinceDays) {
158
+ return { content: "Give at least one of from / subject / text / sinceDays.", isError: true };
159
+ }
160
+ const client = await this.getToolsImap();
161
+ const lock = await client.getMailboxLock("INBOX");
162
+ try {
163
+ const uids = await client.search({
164
+ ...(input.from ? { from: input.from } : {}),
165
+ ...(input.subject ? { subject: input.subject } : {}),
166
+ ...(input.text ? { body: input.text } : {}),
167
+ ...(input.sinceDays ? { since: new Date(Date.now() - input.sinceDays * 86_400_000) } : {}),
168
+ }, { uid: true });
169
+ const recent = (uids || []).slice(-input.limit).reverse();
170
+ if (recent.length === 0)
171
+ return { content: "No matching messages." };
172
+ const rows = [];
173
+ for (const uid of recent) {
174
+ const msg = await client.fetchOne(String(uid), { envelope: true, flags: true }, { uid: true });
175
+ if (msg)
176
+ rows.push(renderEnvelopeRow(msg));
177
+ }
178
+ return { content: rows.join("\n") };
179
+ }
180
+ finally {
181
+ lock.release();
182
+ }
183
+ },
184
+ });
185
+ const markRead = defineTool({
186
+ name: "email_mark_read",
187
+ description: "Mark a message as read (seen) by uid once you've handled it, so it stops showing up as unread in future triage passes.",
188
+ schema: z.object({ uid: z.number().int().min(1) }),
189
+ execute: async (input) => {
190
+ const client = await this.getToolsImap();
191
+ const lock = await client.getMailboxLock("INBOX");
192
+ try {
193
+ const ok = await client.messageFlagsAdd(String(input.uid), ["\\Seen"], { uid: true });
194
+ return ok
195
+ ? { content: `Marked uid ${input.uid} as read.` }
196
+ : { content: `Could not mark uid ${input.uid} as read.`, isError: true };
197
+ }
198
+ finally {
199
+ lock.release();
200
+ }
201
+ },
202
+ });
203
+ const sendEmail = defineTool({
204
+ name: "email_send",
205
+ description: "Send an email. To reply within a thread, pass the original message's messageId as inReplyTo. Acts outward; requires approval.",
206
+ outward: true,
207
+ schema: z.object({
208
+ to: z.array(z.string().email()).min(1),
209
+ cc: z.array(z.string().email()).default([]),
210
+ subject: z.string().min(1),
211
+ body: z.string().min(1),
212
+ inReplyTo: z.string().optional().describe("messageId of the email being replied to."),
213
+ }),
214
+ execute: async (input) => {
215
+ const info = await this.getSmtp().sendMail(buildMailOptions(this.cfg.from, input));
216
+ return { content: `Sent "${input.subject}" to ${input.to.join(", ")} (id ${info.messageId ?? "?"}).` };
217
+ },
218
+ });
219
+ return [listInbox, readMessage, searchMail, markRead, sendEmail];
220
+ }
221
+ /**
222
+ * IDLEs on INBOX over a dedicated connection; new mail becomes events.
223
+ * Reconnects with backoff when the server drops the connection (common —
224
+ * many IMAP servers cut idle sessions every few minutes).
225
+ */
226
+ async listen(onEvent, signal) {
227
+ if (!this.cfg.imapHost) {
228
+ this.log.warn("EMAIL_IMAP_HOST not set — email inbound events disabled (send still works)");
229
+ return;
230
+ }
231
+ let backoffMs = 2000;
232
+ while (!signal.aborted) {
233
+ try {
234
+ const client = await this.connectImap();
235
+ this.listenImap = client;
236
+ const closed = new Promise((resolve) => client.on("close", () => resolve()));
237
+ const mailbox = await client.mailboxOpen("INBOX");
238
+ let lastSeen = mailbox.exists;
239
+ this.log.info("email listening", { inbox: mailbox.exists });
240
+ backoffMs = 2000; // healthy session — reset backoff
241
+ client.on("exists", (data) => {
242
+ void (async () => {
243
+ const from = lastSeen + 1;
244
+ lastSeen = data.count;
245
+ for (let seq = from; seq <= data.count; seq++) {
246
+ try {
247
+ const msg = await client.fetchOne(String(seq), { source: true, uid: true });
248
+ if (!msg || !msg.source)
249
+ continue;
250
+ const parsed = await simpleParser(msg.source);
251
+ const event = parsedMailToInbound(msg.uid, parsed, this.cfg.user);
252
+ if (event)
253
+ onEvent(event);
254
+ }
255
+ catch (err) {
256
+ this.log.warn("failed to process incoming email", { seq, error: err.message });
257
+ }
258
+ }
259
+ })();
260
+ });
261
+ await Promise.race([abortedPromise(signal), closed]);
262
+ await client.logout().catch(() => undefined);
263
+ if (!signal.aborted)
264
+ this.log.warn("imap connection closed; reconnecting");
265
+ }
266
+ catch (err) {
267
+ if (signal.aborted)
268
+ break;
269
+ this.log.warn("imap listener error; reconnecting", { error: err.message });
270
+ }
271
+ if (!signal.aborted) {
272
+ await sleep(backoffMs, signal);
273
+ backoffMs = Math.min(backoffMs * 2, 60_000);
274
+ }
275
+ }
276
+ }
277
+ async shutdown() {
278
+ await this.toolsImap?.logout().catch(() => undefined);
279
+ await this.listenImap?.logout().catch(() => undefined);
280
+ this.smtp?.close();
281
+ }
282
+ }
283
+ export function renderEnvelopeRow(msg) {
284
+ const env = msg.envelope;
285
+ const from = (env?.from ?? []).map((a) => formatAddress(a)).join(", ") || "?";
286
+ const unread = msg.flags && !msg.flags.has("\\Seen") ? " [unread]" : "";
287
+ const date = env?.date ? new Date(env.date).toISOString() : "?";
288
+ return `uid=${msg.uid}${unread} ${date} from ${from} — ${env?.subject ?? "(no subject)"}${env?.messageId ? ` messageId=${env.messageId}` : ""}`;
289
+ }
290
+ function formatAddress(addr) {
291
+ if (addr.name && addr.address)
292
+ return `${addr.name} <${addr.address}>`;
293
+ return addr.address ?? addr.name ?? "?";
294
+ }
295
+ export function renderParsedMail(uid, mail) {
296
+ const body = (mail.text ?? stripHtml(typeof mail.html === "string" ? mail.html : "") ?? "").trim();
297
+ return [
298
+ `uid=${uid}`,
299
+ `From: ${mail.from?.text ?? "?"}`,
300
+ `To: ${addressText(mail.to)}`,
301
+ mail.cc ? `Cc: ${addressText(mail.cc)}` : "",
302
+ `Date: ${mail.date?.toISOString() ?? "?"}`,
303
+ `Subject: ${mail.subject ?? "(no subject)"}`,
304
+ mail.messageId ? `messageId: ${mail.messageId}` : "",
305
+ mail.inReplyTo ? `inReplyTo: ${mail.inReplyTo}` : "",
306
+ "",
307
+ truncate(body || "(empty body)", 20_000),
308
+ ]
309
+ .filter((line) => line !== "")
310
+ .join("\n");
311
+ }
312
+ function addressText(value) {
313
+ if (!value)
314
+ return "?";
315
+ if (Array.isArray(value))
316
+ return value.map((v) => v.text).join(", ");
317
+ return value.text;
318
+ }
319
+ export function buildMailOptions(from, input) {
320
+ return {
321
+ from,
322
+ to: input.to.join(", "),
323
+ ...(input.cc && input.cc.length > 0 ? { cc: input.cc.join(", ") } : {}),
324
+ subject: input.subject,
325
+ text: input.body,
326
+ ...(input.inReplyTo ? { inReplyTo: input.inReplyTo, references: input.inReplyTo } : {}),
327
+ };
328
+ }
329
+ /** Maps a parsed inbound mail to an event; self-sent mail is suppressed. */
330
+ export function parsedMailToInbound(uid, mail, selfAddress) {
331
+ const fromAddress = mail.from?.value?.[0]?.address ?? "";
332
+ if (fromAddress.toLowerCase() === selfAddress.toLowerCase())
333
+ return null;
334
+ const references = Array.isArray(mail.references) ? mail.references : mail.references ? [mail.references] : [];
335
+ const threadId = references[0] ?? mail.messageId ?? `uid:${uid}`;
336
+ const snippet = (mail.text ?? "").trim().slice(0, 800);
337
+ return {
338
+ connector: "email",
339
+ type: "email.received",
340
+ eventId: mail.messageId ?? `uid:${uid}`,
341
+ threadId,
342
+ summary: [
343
+ `Email from ${mail.from?.text ?? "?"} — "${mail.subject ?? "(no subject)"}" (uid=${uid}${mail.messageId ? `, messageId=${mail.messageId}` : ""}).`,
344
+ `To reply in-thread, use email_send with inReplyTo="${mail.messageId ?? ""}".`,
345
+ "",
346
+ snippet,
347
+ ].join("\n"),
348
+ payload: { uid, subject: mail.subject, from: mail.from?.text, messageId: mail.messageId },
349
+ receivedAt: new Date().toISOString(),
350
+ };
351
+ }
352
+ function stripHtml(html) {
353
+ return html
354
+ .replace(/<style[\s\S]*?<\/style>/gi, "")
355
+ .replace(/<script[\s\S]*?<\/script>/gi, "")
356
+ .replace(/<[^>]+>/g, " ")
357
+ .replace(/&nbsp;/g, " ")
358
+ .replace(/\s+/g, " ")
359
+ .trim();
360
+ }
361
+ function truncate(text, max) {
362
+ return text.length > max ? `${text.slice(0, max)}…` : text;
363
+ }
364
+ //# sourceMappingURL=email-connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-connector.js","sourceRoot":"","sources":["../../../src/connectors/email/email-connector.ts"],"names":[],"mappings":"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"}