@rubytech/create-maxy-code 0.1.164 → 0.1.166
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/dist/index.js +17 -9
- package/package.json +1 -1
- package/payload/platform/neo4j/schema.cypher +3 -5
- package/payload/platform/plugins/email/PLUGIN.md +2 -2
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts +0 -29
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js +7 -115
- package/payload/platform/plugins/email/mcp/dist/lib/credentials.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts +7 -44
- package/payload/platform/plugins/email/mcp/dist/lib/imap.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js +24 -177
- package/payload/platform/plugins/email/mcp/dist/lib/imap.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.js +4 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-read.js.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.d.ts.map +1 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.js +4 -1
- package/payload/platform/plugins/email/mcp/dist/tools/email-search.js.map +1 -1
- package/payload/platform/plugins/email/skills/email-composition/SKILL.md +1 -1
- package/payload/platform/plugins/memory/references/schema-base.md +1 -1
- package/payload/platform/plugins/memory/references/schema-estate-agent.md +1 -1
- package/payload/platform/scripts/lib/read-brand-json.sh +1 -1
- package/payload/platform/scripts/lib/resolve-account-dir.sh +1 -1
- package/payload/platform/scripts/seed-neo4j.sh +29 -421
- package/payload/platform/scripts/setup-account.sh +370 -0
- package/payload/platform/services/claude-session-manager/dist/config.js +2 -2
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts +9 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js +74 -38
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +16 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +16 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +21 -7
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts +7 -0
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.js +10 -0
- package/payload/platform/services/claude-session-manager/dist/session-sidecar.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.d.ts +52 -10
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.js +73 -13
- package/payload/platform/services/claude-session-manager/dist/systemd-scope.js.map +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +1 -1
package/dist/index.js
CHANGED
|
@@ -2333,11 +2333,19 @@ function setupVncViewer() {
|
|
|
2333
2333
|
}
|
|
2334
2334
|
function setupAccount() {
|
|
2335
2335
|
log("10", TOTAL, "Setting up...");
|
|
2336
|
-
//
|
|
2337
|
-
//
|
|
2338
|
-
//
|
|
2339
|
-
//
|
|
2340
|
-
//
|
|
2336
|
+
// Account-side setup runs first: creates the account dir, writes the
|
|
2337
|
+
// Claude Code project settings (hooks only — no permissions.allow),
|
|
2338
|
+
// installs specialist templates, seeds account.json. Then seed-neo4j.sh
|
|
2339
|
+
// applies the schema and MERGEs the root :LocalBusiness / owner
|
|
2340
|
+
// :AdminUser nodes. setup-account.sh has no Neo4j env dependency;
|
|
2341
|
+
// seed-neo4j.sh hard-exits without NEO4J_URI, so we derive the URI +
|
|
2342
|
+
// password (a missing password file is a hard error here — the
|
|
2343
|
+
// upstream ensureNeo4jPassword() would have thrown if it couldn't
|
|
2344
|
+
// reach the brand's Neo4j).
|
|
2345
|
+
const setupScript = join(INSTALL_DIR, "platform/scripts/setup-account.sh");
|
|
2346
|
+
if (existsSync(setupScript)) {
|
|
2347
|
+
shell("bash", [setupScript], { cwd: INSTALL_DIR });
|
|
2348
|
+
}
|
|
2341
2349
|
const passwordFile = join(INSTALL_DIR, "platform/config/.neo4j-password");
|
|
2342
2350
|
if (!existsSync(passwordFile)) {
|
|
2343
2351
|
throw new Error(`Neo4j password file missing at ${passwordFile} — required by setup step.`);
|
|
@@ -2489,7 +2497,7 @@ function registerSpecialistAgents() {
|
|
|
2489
2497
|
// `installService` stamps `Environment=ACCOUNT_ID=` into the brand
|
|
2490
2498
|
// systemd unit so the writeNodeWithEdges gate has a non-undefined identity to
|
|
2491
2499
|
// compare against. Pulled from `INSTALL_DIR/data/accounts/<uuid>/account.json`
|
|
2492
|
-
// written by
|
|
2500
|
+
// written by setup-account.sh during setupAccount(). One reader, one shape, one
|
|
2493
2501
|
// source of truth.
|
|
2494
2502
|
//
|
|
2495
2503
|
// retired the installer's cron registration — `resolveInstallAccountId`
|
|
@@ -2573,7 +2581,7 @@ function installServiceDarwin() {
|
|
|
2573
2581
|
const installAccountId = resolveInstallAccountId();
|
|
2574
2582
|
if (!installAccountId) {
|
|
2575
2583
|
throw new Error(`installServiceDarwin: no account discovered at ${INSTALL_DIR}/data/accounts/<uuid>/account.json — ` +
|
|
2576
|
-
`setupAccount() (
|
|
2584
|
+
`setupAccount() (setup-account.sh) should have created one. Refusing to write .env ` +
|
|
2577
2585
|
`without ACCOUNT_ID; the boot validator would FATAL on every kickstart.`);
|
|
2578
2586
|
}
|
|
2579
2587
|
const envPath = join(persistDir, ".env");
|
|
@@ -3002,13 +3010,13 @@ function installService() {
|
|
|
3002
3010
|
// ACCOUNT_ID stamped into the brand unit so the writeNodeWithEdges
|
|
3003
3011
|
// gate at platform/lib/graph-write/src/index.ts:170 has a real identity to
|
|
3004
3012
|
// compare against (instead of process.env.ACCOUNT_ID === undefined). Resolved
|
|
3005
|
-
// here AFTER setupAccount() ran upstream —
|
|
3013
|
+
// here AFTER setupAccount() ran upstream — setup-account.sh wrote account.json,
|
|
3006
3014
|
// so an empty resolution at this point is a corrupted install (e.g. the seed
|
|
3007
3015
|
// failed silently, or accounts/ was wiped between setup and unit-write).
|
|
3008
3016
|
const installAccountId = resolveInstallAccountId();
|
|
3009
3017
|
if (!installAccountId) {
|
|
3010
3018
|
throw new Error(`installService: no account discovered at ${INSTALL_DIR}/data/accounts/<uuid>/account.json — ` +
|
|
3011
|
-
`setupAccount() (
|
|
3019
|
+
`setupAccount() (setup-account.sh) should have created one. Refusing to write a systemd unit ` +
|
|
3012
3020
|
`without ACCOUNT_ID; the boot validator would FATAL on every restart.`);
|
|
3013
3021
|
}
|
|
3014
3022
|
const serviceFile = buildMaxyUnitFile({
|
package/package.json
CHANGED
|
@@ -827,11 +827,9 @@ OPTIONS {
|
|
|
827
827
|
// accountId, email, agentAddress, imapHost, imapPort,
|
|
828
828
|
// imapSecurity, smtpHost, smtpPort, smtpSecurity, updatedAt
|
|
829
829
|
//
|
|
830
|
-
//
|
|
831
|
-
//
|
|
832
|
-
//
|
|
833
|
-
// lastRespondedUid (integer — IMAP UID high-water mark),
|
|
834
|
-
// lastPollAt (ISO 8601), consecutiveFailures (integer)
|
|
830
|
+
// Poll state (written by email-ingest after each successful fetch):
|
|
831
|
+
// agentSlug, pollIntervalMinutes, lastFetchedUid, lastPollAt,
|
|
832
|
+
// uidValidity
|
|
835
833
|
// ----------------------------------------------------------
|
|
836
834
|
|
|
837
835
|
// ----------------------------------------------------------
|
|
@@ -58,8 +58,8 @@ Manages the agent's own dedicated email account — IMAP for reading, SMTP for s
|
|
|
58
58
|
## Capabilities
|
|
59
59
|
|
|
60
60
|
- **Setup:** `email-setup` — collect credentials via rendered `form`, connect IMAP/SMTP. Supports alias addresses (`agentAddress`).
|
|
61
|
-
- **Read inbox:** `email-read` — metadata only (UID, sender, subject, date), plus a best-effort `Archive`/`Archive-Section` hint when the IMAP message's `receivedAt` falls inside a stored `:ConversationArchive {source:'email'}` section. Supports pagination (`before_uid`), folders (`inbox`/`sent`), filtering by sender/date/subject.
|
|
62
|
-
- **Search inbox:** `email-search` — live IMAP search by sender, subject, body keyword, date range. Same per-archive hint as `email-read`.
|
|
61
|
+
- **Read inbox:** `email-read` — metadata only (UID, sender, subject, date), plus a best-effort `Archive`/`Archive-Section` hint when the IMAP message's `receivedAt` falls inside a stored `:ConversationArchive {source:'email'}` section, plus an `Attachments (N): filename (mime, size); …` footer when the message carries enclosures. Supports pagination (`before_uid`), folders (`inbox`/`sent`), filtering by sender/date/subject. Metadata is derived from IMAP `bodyStructure` — no bytes downloaded.
|
|
62
|
+
- **Search inbox:** `email-search` — live IMAP search by sender, subject, body keyword, date range. Same per-archive hint and attachment footer as `email-read`.
|
|
63
63
|
- **Send:** `email-send` — new outbound email.
|
|
64
64
|
- **Reply:** `email-reply` — threaded reply to an existing email by `messageId`. Resolves the original envelope via IMAP `SEARCH HEADER Message-ID` (INBOX then `\Sent`), so threading works for any message still present on the server even if the graph never ingested it. Supports `replyAll`.
|
|
65
65
|
- **Ingestion — fetch:** `email-fetch` — list new IMAP messages since the stored high-water mark. Metadata + body preview only — including attachment names, mimetypes, and sizes so the operator sees what's attached before approving (Task 402). No bytes downloaded, no graph writes. Stages the batch in-memory for `email-ingest`.
|
|
@@ -15,16 +15,6 @@ export interface PollState {
|
|
|
15
15
|
lastPollAt: string | null;
|
|
16
16
|
uidValidity: number | null;
|
|
17
17
|
}
|
|
18
|
-
export interface AutoRespondConfig {
|
|
19
|
-
autoRespond: boolean;
|
|
20
|
-
respondingAgentSlug: string | null;
|
|
21
|
-
pollIntervalMinutes: number;
|
|
22
|
-
lastRespondedUid: number;
|
|
23
|
-
lastPollAt: string | null;
|
|
24
|
-
consecutiveFailures: number;
|
|
25
|
-
autoRespondHourlyLimit: number;
|
|
26
|
-
autoRespondDailyLimit: number;
|
|
27
|
-
}
|
|
28
18
|
export interface FullCredentials {
|
|
29
19
|
config: EmailConfig;
|
|
30
20
|
password: string;
|
|
@@ -87,25 +77,6 @@ export declare function writeBindingConfig(accountId: string, agentSlug: string,
|
|
|
87
77
|
* Returns the conflicting agentSlug if claimed, or null if available.
|
|
88
78
|
*/
|
|
89
79
|
export declare function checkAddressBinding(agentAddress: string, currentSlug: string): Promise<string | null>;
|
|
90
|
-
/**
|
|
91
|
-
* Read auto-respond config from the EmailAccount node.
|
|
92
|
-
* Returns defaults if fields are not yet set.
|
|
93
|
-
*/
|
|
94
|
-
export declare function readAutoRespondConfig(accountId: string): Promise<AutoRespondConfig | null>;
|
|
95
|
-
/**
|
|
96
|
-
* Write auto-respond config fields on the EmailAccount node.
|
|
97
|
-
* Only updates the specified fields — does not touch email/IMAP/SMTP config.
|
|
98
|
-
*/
|
|
99
|
-
export declare function writeAutoRespondConfig(accountId: string, config: Partial<AutoRespondConfig>): Promise<void>;
|
|
100
|
-
/**
|
|
101
|
-
* Read all EmailAccounts that have auto-respond enabled.
|
|
102
|
-
* Returns config + auto-respond settings for each.
|
|
103
|
-
*/
|
|
104
|
-
export declare function readAutoRespondAccounts(): Promise<Array<{
|
|
105
|
-
accountId: string;
|
|
106
|
-
config: EmailConfig;
|
|
107
|
-
autoRespond: AutoRespondConfig;
|
|
108
|
-
}>>;
|
|
109
80
|
/**
|
|
110
81
|
* Load full credentials (config + password).
|
|
111
82
|
* Returns null with a reason if either piece is missing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,KAAK,GAAG,UAAU,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,KAAK,GAAG,UAAU,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,KAAK,GAAG,UAAU,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,KAAK,GAAG,UAAU,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAarC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIpD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAMrC;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAwB/E;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CvF;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUnE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA2BhF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,WAAW,EAAE,eAAe,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAc/D"}
|
|
@@ -89,7 +89,13 @@ export async function writeConfig(accountId, config) {
|
|
|
89
89
|
e.smtpHost = $smtpHost,
|
|
90
90
|
e.smtpPort = $smtpPort,
|
|
91
91
|
e.smtpSecurity = $smtpSecurity,
|
|
92
|
-
e.updatedAt = $updatedAt
|
|
92
|
+
e.updatedAt = $updatedAt
|
|
93
|
+
REMOVE e.autoRespond,
|
|
94
|
+
e.autoRespondHourlyLimit,
|
|
95
|
+
e.autoRespondDailyLimit,
|
|
96
|
+
e.respondingAgentSlug,
|
|
97
|
+
e.lastRespondedUid,
|
|
98
|
+
e.consecutiveFailures`, {
|
|
93
99
|
accountId,
|
|
94
100
|
email: config.email,
|
|
95
101
|
agentAddress: config.agentAddress,
|
|
@@ -217,120 +223,6 @@ export async function checkAddressBinding(agentAddress, currentSlug) {
|
|
|
217
223
|
await session.close();
|
|
218
224
|
}
|
|
219
225
|
}
|
|
220
|
-
/**
|
|
221
|
-
* Read auto-respond config from the EmailAccount node.
|
|
222
|
-
* Returns defaults if fields are not yet set.
|
|
223
|
-
*/
|
|
224
|
-
export async function readAutoRespondConfig(accountId) {
|
|
225
|
-
const session = getSession();
|
|
226
|
-
try {
|
|
227
|
-
const result = await session.run(`MATCH (e:EmailAccount {accountId: $accountId}) RETURN e LIMIT 1`, { accountId });
|
|
228
|
-
if (result.records.length === 0)
|
|
229
|
-
return null;
|
|
230
|
-
const props = result.records[0].get("e").properties;
|
|
231
|
-
return {
|
|
232
|
-
autoRespond: props.autoRespond === true,
|
|
233
|
-
respondingAgentSlug: props.respondingAgentSlug ?? null,
|
|
234
|
-
pollIntervalMinutes: props.pollIntervalMinutes ? neo4j.integer.toNumber(props.pollIntervalMinutes) : 5,
|
|
235
|
-
lastRespondedUid: props.lastRespondedUid ? neo4j.integer.toNumber(props.lastRespondedUid) : 0,
|
|
236
|
-
lastPollAt: props.lastPollAt ?? null,
|
|
237
|
-
consecutiveFailures: props.consecutiveFailures ? neo4j.integer.toNumber(props.consecutiveFailures) : 0,
|
|
238
|
-
autoRespondHourlyLimit: props.autoRespondHourlyLimit ? neo4j.integer.toNumber(props.autoRespondHourlyLimit) : 20,
|
|
239
|
-
autoRespondDailyLimit: props.autoRespondDailyLimit ? neo4j.integer.toNumber(props.autoRespondDailyLimit) : 100,
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
finally {
|
|
243
|
-
await session.close();
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Write auto-respond config fields on the EmailAccount node.
|
|
248
|
-
* Only updates the specified fields — does not touch email/IMAP/SMTP config.
|
|
249
|
-
*/
|
|
250
|
-
export async function writeAutoRespondConfig(accountId, config) {
|
|
251
|
-
const session = getSession();
|
|
252
|
-
try {
|
|
253
|
-
const setClauses = [];
|
|
254
|
-
const params = { accountId };
|
|
255
|
-
if (config.autoRespond !== undefined) {
|
|
256
|
-
setClauses.push("e.autoRespond = $autoRespond");
|
|
257
|
-
params.autoRespond = config.autoRespond;
|
|
258
|
-
}
|
|
259
|
-
if (config.respondingAgentSlug !== undefined) {
|
|
260
|
-
setClauses.push("e.respondingAgentSlug = $respondingAgentSlug");
|
|
261
|
-
params.respondingAgentSlug = config.respondingAgentSlug;
|
|
262
|
-
}
|
|
263
|
-
if (config.pollIntervalMinutes !== undefined) {
|
|
264
|
-
setClauses.push("e.pollIntervalMinutes = $pollIntervalMinutes");
|
|
265
|
-
params.pollIntervalMinutes = neo4j.int(config.pollIntervalMinutes);
|
|
266
|
-
}
|
|
267
|
-
if (config.lastRespondedUid !== undefined) {
|
|
268
|
-
setClauses.push("e.lastRespondedUid = $lastRespondedUid");
|
|
269
|
-
params.lastRespondedUid = neo4j.int(config.lastRespondedUid);
|
|
270
|
-
}
|
|
271
|
-
if (config.lastPollAt !== undefined) {
|
|
272
|
-
setClauses.push("e.lastPollAt = $lastPollAt");
|
|
273
|
-
params.lastPollAt = config.lastPollAt;
|
|
274
|
-
}
|
|
275
|
-
if (config.consecutiveFailures !== undefined) {
|
|
276
|
-
setClauses.push("e.consecutiveFailures = $consecutiveFailures");
|
|
277
|
-
params.consecutiveFailures = neo4j.int(config.consecutiveFailures);
|
|
278
|
-
}
|
|
279
|
-
if (config.autoRespondHourlyLimit !== undefined) {
|
|
280
|
-
setClauses.push("e.autoRespondHourlyLimit = $autoRespondHourlyLimit");
|
|
281
|
-
params.autoRespondHourlyLimit = neo4j.int(config.autoRespondHourlyLimit);
|
|
282
|
-
}
|
|
283
|
-
if (config.autoRespondDailyLimit !== undefined) {
|
|
284
|
-
setClauses.push("e.autoRespondDailyLimit = $autoRespondDailyLimit");
|
|
285
|
-
params.autoRespondDailyLimit = neo4j.int(config.autoRespondDailyLimit);
|
|
286
|
-
}
|
|
287
|
-
if (setClauses.length === 0)
|
|
288
|
-
return;
|
|
289
|
-
await session.run(`MATCH (e:EmailAccount {accountId: $accountId}) SET ${setClauses.join(", ")}`, params);
|
|
290
|
-
}
|
|
291
|
-
finally {
|
|
292
|
-
await session.close();
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Read all EmailAccounts that have auto-respond enabled.
|
|
297
|
-
* Returns config + auto-respond settings for each.
|
|
298
|
-
*/
|
|
299
|
-
export async function readAutoRespondAccounts() {
|
|
300
|
-
const session = getSession();
|
|
301
|
-
try {
|
|
302
|
-
const result = await session.run(`MATCH (e:EmailAccount {autoRespond: true}) RETURN e`);
|
|
303
|
-
return result.records.map((record) => {
|
|
304
|
-
const props = record.get("e").properties;
|
|
305
|
-
return {
|
|
306
|
-
accountId: props.accountId,
|
|
307
|
-
config: {
|
|
308
|
-
email: props.email,
|
|
309
|
-
agentAddress: props.agentAddress ?? props.email,
|
|
310
|
-
imapHost: props.imapHost,
|
|
311
|
-
imapPort: neo4j.integer.toNumber(props.imapPort),
|
|
312
|
-
imapSecurity: props.imapSecurity,
|
|
313
|
-
smtpHost: props.smtpHost,
|
|
314
|
-
smtpPort: neo4j.integer.toNumber(props.smtpPort),
|
|
315
|
-
smtpSecurity: props.smtpSecurity,
|
|
316
|
-
},
|
|
317
|
-
autoRespond: {
|
|
318
|
-
autoRespond: true,
|
|
319
|
-
respondingAgentSlug: props.respondingAgentSlug ?? null,
|
|
320
|
-
pollIntervalMinutes: props.pollIntervalMinutes ? neo4j.integer.toNumber(props.pollIntervalMinutes) : 5,
|
|
321
|
-
lastRespondedUid: props.lastRespondedUid ? neo4j.integer.toNumber(props.lastRespondedUid) : 0,
|
|
322
|
-
lastPollAt: props.lastPollAt ?? null,
|
|
323
|
-
consecutiveFailures: props.consecutiveFailures ? neo4j.integer.toNumber(props.consecutiveFailures) : 0,
|
|
324
|
-
autoRespondHourlyLimit: props.autoRespondHourlyLimit ? neo4j.integer.toNumber(props.autoRespondHourlyLimit) : 20,
|
|
325
|
-
autoRespondDailyLimit: props.autoRespondDailyLimit ? neo4j.integer.toNumber(props.autoRespondDailyLimit) : 100,
|
|
326
|
-
},
|
|
327
|
-
};
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
finally {
|
|
331
|
-
await session.close();
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
226
|
/**
|
|
335
227
|
* Load full credentials (config + password).
|
|
336
228
|
* Returns null with a reason if either piece is missing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ export interface EmailMessage {
|
|
|
8
8
|
subject: string;
|
|
9
9
|
date: string;
|
|
10
10
|
bodyPreview: string;
|
|
11
|
+
attachments: AttachmentMeta[];
|
|
11
12
|
}
|
|
12
13
|
export interface PaginatedMessages {
|
|
13
14
|
messages: EmailMessage[];
|
|
@@ -71,6 +72,12 @@ interface BodyStructureNode {
|
|
|
71
72
|
* Inline parts without a filename (e.g. the message body) are excluded.
|
|
72
73
|
*/
|
|
73
74
|
export declare function walkAttachmentMetadata(structure: BodyStructureNode | undefined): AttachmentMeta[];
|
|
75
|
+
/**
|
|
76
|
+
* Format an AttachmentMeta[] as a single-line operator-readable footer.
|
|
77
|
+
* Returns empty string when the array is empty so callers can skip the
|
|
78
|
+
* line entirely.
|
|
79
|
+
*/
|
|
80
|
+
export declare function formatAttachmentsFooter(attachments: AttachmentMeta[]): string;
|
|
74
81
|
/**
|
|
75
82
|
* Result of attempting to fetch one attachment's bytes from IMAP.
|
|
76
83
|
* `bytes === null` indicates a non-fatal failure (oversize, short buffer,
|
|
@@ -255,49 +262,5 @@ export declare function fetchEnvelopeByMessageId(config: EmailConfig, password:
|
|
|
255
262
|
* Get the inbox message count.
|
|
256
263
|
*/
|
|
257
264
|
export declare function getInboxCount(config: EmailConfig, password: string): Promise<number>;
|
|
258
|
-
export interface AutoRespondMessage {
|
|
259
|
-
uid: number;
|
|
260
|
-
messageId: string;
|
|
261
|
-
from: string;
|
|
262
|
-
to: string[];
|
|
263
|
-
subject: string;
|
|
264
|
-
date: string;
|
|
265
|
-
inReplyTo: string | null;
|
|
266
|
-
references: string | null;
|
|
267
|
-
body: string;
|
|
268
|
-
/** True if the message has auto-reply indicators and should be skipped. */
|
|
269
|
-
isAutoReply: boolean;
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Parse raw IMAP header text into a map of lowercased header names → values.
|
|
273
|
-
* Handles multi-line continuation (lines starting with whitespace).
|
|
274
|
-
*/
|
|
275
|
-
export declare function parseRawHeaders(raw: string): Map<string, string[]>;
|
|
276
|
-
/**
|
|
277
|
-
* Detect whether a message is an auto-reply based on RFC 3834 headers.
|
|
278
|
-
*
|
|
279
|
-
* Checks:
|
|
280
|
-
* - Auto-Submitted: any value other than "no"
|
|
281
|
-
* - X-Auto-Response-Suppress: present
|
|
282
|
-
* - Precedence: bulk, junk, or list
|
|
283
|
-
* - List-Unsubscribe or List-Id: present (mailing list)
|
|
284
|
-
*/
|
|
285
|
-
export declare function detectAutoReply(headers: Map<string, string[]>): boolean;
|
|
286
|
-
/**
|
|
287
|
-
* Fetch new messages for auto-respond processing.
|
|
288
|
-
*
|
|
289
|
-
* Returns messages with UIDs greater than `sinceUid`, filtered by the
|
|
290
|
-
* agent's address (TO header). Includes envelope, body, and auto-reply
|
|
291
|
-
* detection headers in a single IMAP FETCH.
|
|
292
|
-
*
|
|
293
|
-
* Unlike fetchRecent (optimised for tool output with pagination),
|
|
294
|
-
* this function fetches everything needed for auto-respond in one pass:
|
|
295
|
-
* envelope for threading, body for agent input, headers for loop guards.
|
|
296
|
-
*/
|
|
297
|
-
export declare function fetchForAutoRespond(config: EmailConfig, password: string, options: {
|
|
298
|
-
sinceUid: number;
|
|
299
|
-
agentAddress: string;
|
|
300
|
-
limit?: number;
|
|
301
|
-
}): Promise<AutoRespondMessage[]>;
|
|
302
265
|
export {};
|
|
303
266
|
//# sourceMappingURL=imap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imap.d.ts","sourceRoot":"","sources":["../../src/lib/imap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA2B,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAuBpD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"imap.d.ts","sourceRoot":"","sources":["../../src/lib/imap.ts"],"names":[],"mappings":"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"}
|