@0xmaxma/claude-gateway 1.8.9 → 1.8.11
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/README.md +46 -6
- package/config.template.json +2 -1
- package/dist/agent/runner.d.ts +86 -1
- package/dist/agent/runner.d.ts.map +1 -1
- package/dist/agent/runner.js +396 -9
- package/dist/agent/runner.js.map +1 -1
- package/dist/api/router.d.ts.map +1 -1
- package/dist/api/router.js +1028 -6
- package/dist/api/router.js.map +1 -1
- package/dist/api/share-router.d.ts.map +1 -1
- package/dist/api/share-router.js +24 -0
- package/dist/api/share-router.js.map +1 -1
- package/dist/api/webhooks-router.d.ts +2 -0
- package/dist/api/webhooks-router.d.ts.map +1 -1
- package/dist/api/webhooks-router.js +2 -0
- package/dist/api/webhooks-router.js.map +1 -1
- package/dist/api/whatsapp-access.d.ts +123 -0
- package/dist/api/whatsapp-access.d.ts.map +1 -0
- package/dist/api/whatsapp-access.js +135 -0
- package/dist/api/whatsapp-access.js.map +1 -0
- package/dist/api/whatsapp-cloud-access.d.ts +48 -0
- package/dist/api/whatsapp-cloud-access.d.ts.map +1 -0
- package/dist/api/whatsapp-cloud-access.js +58 -0
- package/dist/api/whatsapp-cloud-access.js.map +1 -0
- package/dist/api/whatsapp-cloud-client.d.ts +143 -0
- package/dist/api/whatsapp-cloud-client.d.ts.map +1 -0
- package/dist/api/whatsapp-cloud-client.js +298 -0
- package/dist/api/whatsapp-cloud-client.js.map +1 -0
- package/dist/api/whatsapp-cloud-webhook-router.d.ts +132 -0
- package/dist/api/whatsapp-cloud-webhook-router.d.ts.map +1 -0
- package/dist/api/whatsapp-cloud-webhook-router.js +494 -0
- package/dist/api/whatsapp-cloud-webhook-router.js.map +1 -0
- package/dist/cli/args.d.ts +34 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +55 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/commands/app.d.ts +28 -0
- package/dist/cli/commands/app.d.ts.map +1 -0
- package/dist/cli/commands/app.js +411 -0
- package/dist/cli/commands/app.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +77 -16
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/service.d.ts.map +1 -1
- package/dist/cli/commands/service.js +373 -56
- package/dist/cli/commands/service.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +1 -17
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/http-client.d.ts +8 -0
- package/dist/cli/http-client.d.ts.map +1 -1
- package/dist/cli/http-client.js +5 -2
- package/dist/cli/http-client.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +16 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/prompt.d.ts +17 -2
- package/dist/cli/prompt.d.ts.map +1 -1
- package/dist/cli/prompt.js +33 -2
- package/dist/cli/prompt.js.map +1 -1
- package/dist/config/loader.d.ts +8 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +22 -4
- package/dist/config/loader.js.map +1 -1
- package/dist/config/watcher.d.ts.map +1 -1
- package/dist/config/watcher.js +12 -0
- package/dist/config/watcher.js.map +1 -1
- package/dist/config/whatsapp-accounts.d.ts +77 -0
- package/dist/config/whatsapp-accounts.d.ts.map +1 -0
- package/dist/config/whatsapp-accounts.js +218 -0
- package/dist/config/whatsapp-accounts.js.map +1 -0
- package/dist/history/db.d.ts.map +1 -1
- package/dist/history/db.js +43 -11
- package/dist/history/db.js.map +1 -1
- package/dist/history/types.d.ts +18 -1
- package/dist/history/types.d.ts.map +1 -1
- package/dist/history/types.js +1 -1
- package/dist/history/types.js.map +1 -1
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -1
- package/dist/session/process.d.ts.map +1 -1
- package/dist/session/process.js +37 -0
- package/dist/session/process.js.map +1 -1
- package/dist/session/store.d.ts +3 -2
- package/dist/session/store.d.ts.map +1 -1
- package/dist/session/store.js +1 -1
- package/dist/session/store.js.map +1 -1
- package/dist/share/session-video-catalog.d.ts +19 -0
- package/dist/share/session-video-catalog.d.ts.map +1 -0
- package/dist/share/session-video-catalog.js +119 -0
- package/dist/share/session-video-catalog.js.map +1 -0
- package/dist/shared/image-optimize.d.ts +32 -0
- package/dist/shared/image-optimize.d.ts.map +1 -0
- package/dist/shared/image-optimize.js +197 -0
- package/dist/shared/image-optimize.js.map +1 -0
- package/dist/shared/image-sniff.d.ts +9 -0
- package/dist/shared/image-sniff.d.ts.map +1 -1
- package/dist/shared/image-sniff.js +13 -0
- package/dist/shared/image-sniff.js.map +1 -1
- package/dist/shared/text-chunk.d.ts +37 -0
- package/dist/shared/text-chunk.d.ts.map +1 -0
- package/dist/shared/text-chunk.js +105 -0
- package/dist/shared/text-chunk.js.map +1 -0
- package/dist/shared/whatsapp-ack.d.ts +13 -0
- package/dist/shared/whatsapp-ack.d.ts.map +1 -0
- package/dist/shared/whatsapp-ack.js +16 -0
- package/dist/shared/whatsapp-ack.js.map +1 -0
- package/dist/types.d.ts +183 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/whatsapp/manager.d.ts +173 -0
- package/dist/whatsapp/manager.d.ts.map +1 -0
- package/dist/whatsapp/manager.js +838 -0
- package/dist/whatsapp/manager.js.map +1 -0
- package/mcp/server.ts +4 -0
- package/mcp/tools/image/module.ts +6 -1
- package/mcp/tools/telegram/receiver-server.ts +15 -8
- package/mcp/tools/telegram/reply-attachment.ts +81 -0
- package/mcp/tools/video/module.ts +6 -1
- package/mcp/tools/whatsapp/module.ts +162 -0
- package/mcp/tools/whatsapp-cloud/module.ts +536 -0
- package/package.json +7 -2
package/dist/config/loader.js
CHANGED
|
@@ -40,6 +40,7 @@ const fs = __importStar(require("fs"));
|
|
|
40
40
|
const os = __importStar(require("os"));
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
42
|
const public_url_1 = require("./public-url");
|
|
43
|
+
const whatsapp_accounts_1 = require("./whatsapp-accounts");
|
|
43
44
|
class ConfigValidationError extends Error {
|
|
44
45
|
constructor(message) {
|
|
45
46
|
super(message);
|
|
@@ -230,6 +231,12 @@ function loadConfig(configPath, options) {
|
|
|
230
231
|
skipAgent(String(agent.id || `index ${i}`), error);
|
|
231
232
|
continue;
|
|
232
233
|
}
|
|
234
|
+
// Normalize a legacy flat `whatsapp` block into the multi-account
|
|
235
|
+
// `{ accounts: [...] }` shape BEFORE anything downstream reads it, so
|
|
236
|
+
// runtime is always correct even when the write-back at boot
|
|
237
|
+
// (upgradeWhatsAppAccountsFile) couldn't persist — e.g. a read-only
|
|
238
|
+
// config volume. Idempotent: an already-upgraded agent is untouched.
|
|
239
|
+
(0, whatsapp_accounts_1.upgradeAgentWhatsAppAccounts)(agent);
|
|
233
240
|
validAgents.push(agent);
|
|
234
241
|
}
|
|
235
242
|
// Check for duplicate IDs among valid agents
|
|
@@ -269,13 +276,24 @@ function loadConfig(configPath, options) {
|
|
|
269
276
|
// Interpolate gateway config (fatal if env vars missing here)
|
|
270
277
|
const interpolatedGateway = interpolateObject(config.gateway);
|
|
271
278
|
const rawPublicUrl = interpolatedGateway.publicUrl;
|
|
272
|
-
if (typeof rawPublicUrl === 'string' && !rawPublicUrl.trim()) {
|
|
273
|
-
// Blank/whitespace-only is "not configured", not "invalid". Normalize
|
|
274
|
-
// undefined so downstream consumers see a single unset representation and
|
|
279
|
+
if (rawPublicUrl === undefined || (typeof rawPublicUrl === 'string' && !rawPublicUrl.trim())) {
|
|
280
|
+
// Blank/whitespace-only/absent is "not configured", not "invalid". Normalize
|
|
281
|
+
// to undefined so downstream consumers see a single unset representation and
|
|
275
282
|
// report "not configured" rather than throwing or emitting a broken link.
|
|
283
|
+
//
|
|
284
|
+
// Warn once here rather than staying silent: nothing else in the load path
|
|
285
|
+
// reports this gap, and it otherwise surfaces only much later as an
|
|
286
|
+
// unrelated-looking failure inside generate_image (#472). This is a
|
|
287
|
+
// capability limitation, not a misconfiguration — LINE-only and
|
|
288
|
+
// localhost-only deployments are legitimately fine without the key — so it
|
|
289
|
+
// is a warning, never a thrown error.
|
|
290
|
+
console.warn('[gateway] gateway.publicUrl is not set — public share links are disabled.\n' +
|
|
291
|
+
' generate_image reference edits, share_file, and /cli will not work.\n' +
|
|
292
|
+
' See README "gateway.publicUrl".');
|
|
293
|
+
options?.onPublicUrlUnset?.();
|
|
276
294
|
interpolatedGateway.publicUrl = undefined;
|
|
277
295
|
}
|
|
278
|
-
else
|
|
296
|
+
else {
|
|
279
297
|
const normalizedPublicUrl = (0, public_url_1.resolveGatewayPublicUrl)(rawPublicUrl);
|
|
280
298
|
if (!normalizedPublicUrl) {
|
|
281
299
|
throw new ConfigValidationError('gateway.publicUrl must be an HTTPS URL ending in /gateway with no credentials, query, or fragment ' +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAK9D,QAAA,MAAM,2BAA2B,EAAE,MAAM,EAYxC,CAAC;AA8BF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB;AAOD,qBAAa,aAAc,SAAQ,YAAY;IAe3C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAE3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAhBzB,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IACrH,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IACtE,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IACtF,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAMxF,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAGhB,UAAU,EAAE,MAAM,EACnC,aAAa,EAAE,aAAa,EACX,MAAM,EAAE,MAAM;IAOjC,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAKZ,kCAAkC;IAClC,SAAS,IAAI,aAAa;IAI1B,MAAM,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAK9D,QAAA,MAAM,2BAA2B,EAAE,MAAM,EAYxC,CAAC;AA8BF,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;CACxB;AAOD,qBAAa,aAAc,SAAQ,YAAY;IAe3C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAE3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAhBzB,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IACrH,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI;IACtE,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IACtF,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAMxF,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAGhB,UAAU,EAAE,MAAM,EACnC,aAAa,EAAE,aAAa,EACX,MAAM,EAAE,MAAM;IAOjC,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAKZ,kCAAkC;IAClC,SAAS,IAAI,aAAa;IAI1B,MAAM,IAAI,IAAI;IA4Gd,OAAO,CAAC,UAAU;CAyEnB;AAED,2EAA2E;AAC3E,iBAAS,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAoBlD;AAGD,OAAO,EAAE,SAAS,IAAI,UAAU,EAAE,2BAA2B,EAAE,CAAC"}
|
package/dist/config/watcher.js
CHANGED
|
@@ -89,9 +89,11 @@ class ConfigWatcher extends events_1.EventEmitter {
|
|
|
89
89
|
(0, agent_env_1.loadAgentEnvFiles)(this.agentsDir);
|
|
90
90
|
let newConfig;
|
|
91
91
|
const skipped = [];
|
|
92
|
+
let publicUrlUnset = false;
|
|
92
93
|
try {
|
|
93
94
|
newConfig = (0, loader_1.loadConfig)(this.configPath, {
|
|
94
95
|
onSkippedAgent: (s) => skipped.push(s),
|
|
96
|
+
onPublicUrlUnset: () => { publicUrlUnset = true; },
|
|
95
97
|
});
|
|
96
98
|
newConfig.gateway.logDir = (0, paths_1.expandHome)(newConfig.gateway.logDir);
|
|
97
99
|
}
|
|
@@ -104,6 +106,16 @@ class ConfigWatcher extends events_1.EventEmitter {
|
|
|
104
106
|
// Report drops before the no-change bail-out below: a silently dropped
|
|
105
107
|
// agent produces exactly zero diff, so this is the only trace it leaves.
|
|
106
108
|
(0, loader_1.logSkippedAgents)(this.logger, skipped, 'Agent skipped during config reload');
|
|
109
|
+
// Same #427 rationale as skipped agents (#472): the console.warn inside
|
|
110
|
+
// loadConfig never reaches logs/gateway.log on its own. Gated on the
|
|
111
|
+
// transition (was set, now unset) rather than firing on every reload: a
|
|
112
|
+
// LINE-only/localhost-only deployment intentionally keeps this unset, and
|
|
113
|
+
// every unrelated config.json edit (adding an agent, tuning a timeout)
|
|
114
|
+
// would otherwise re-log the same fact forever, burying genuinely new
|
|
115
|
+
// warnings.
|
|
116
|
+
if (publicUrlUnset && this.currentConfig.gateway.publicUrl !== undefined) {
|
|
117
|
+
this.logger.warn('gateway.publicUrl became unset on reload — public share links are now disabled');
|
|
118
|
+
}
|
|
107
119
|
const { fieldChanges, addedAgents } = this.diffConfig(this.currentConfig, newConfig);
|
|
108
120
|
if (fieldChanges.length === 0 && addedAgents.length === 0) {
|
|
109
121
|
this.logger.info('Config file changed but no effective differences detected');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { WhatsAppAccountConfig } from '../types';
|
|
2
|
+
/** Reserved id of the pre-multi-account session — see the module doc above. */
|
|
3
|
+
export declare const DEFAULT_WHATSAPP_ACCOUNT_ID = "default";
|
|
4
|
+
/** Bare state directory name; also the 'default' account's directory verbatim. */
|
|
5
|
+
export declare const WHATSAPP_STATE_DIR = ".whatsapp-state";
|
|
6
|
+
/**
|
|
7
|
+
* Account ids double as on-disk directory names and as MCP `account_id`
|
|
8
|
+
* values, so they're restricted to a conservative slug: lowercase
|
|
9
|
+
* alphanumerics plus `-`/`_`, never a path traversal or a dotfile.
|
|
10
|
+
*/
|
|
11
|
+
export declare const WHATSAPP_ACCOUNT_ID_RE: RegExp;
|
|
12
|
+
/**
|
|
13
|
+
* Resolve the Baileys state directory for one account.
|
|
14
|
+
*
|
|
15
|
+
* 'default' deliberately uses the BARE `.whatsapp-state/` path rather than
|
|
16
|
+
* `.whatsapp-state/default/`: that is the directory a pre-multi-account
|
|
17
|
+
* gateway already linked into, and moving it is the one operation that could
|
|
18
|
+
* lose a live session. Every other account nests one level below it, which
|
|
19
|
+
* cannot collide with Baileys' own files (it writes `creds.json` and
|
|
20
|
+
* `<key-type>-<id>.json`, never a directory).
|
|
21
|
+
*/
|
|
22
|
+
export declare function whatsAppStateDir(workspace: string, accountId: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* The accounts an agent actually runs, given its (possibly absent) config.
|
|
25
|
+
*
|
|
26
|
+
* An absent/empty array resolves to a lone 'default' account so an agent that
|
|
27
|
+
* has never touched WhatsApp still gets a linkable manager — exactly the
|
|
28
|
+
* pre-multi-account behavior, where AgentRunner constructed a WhatsAppManager
|
|
29
|
+
* unconditionally because there was no config field to gate on.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveWhatsAppAccounts(cfg: {
|
|
32
|
+
accounts?: WhatsAppAccountConfig[];
|
|
33
|
+
} | undefined): WhatsAppAccountConfig[];
|
|
34
|
+
/** Look up one account's config by id (undefined when it isn't configured). */
|
|
35
|
+
export declare function findWhatsAppAccount(cfg: {
|
|
36
|
+
accounts?: WhatsAppAccountConfig[];
|
|
37
|
+
} | undefined, accountId: string): WhatsAppAccountConfig | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* True when `block` is a `whatsapp` config in the OLD flat shape — i.e. an
|
|
40
|
+
* object that has no `accounts` array. An empty `{}` counts as legacy (it
|
|
41
|
+
* upgrades to a bare 'default' account); anything already carrying `accounts`
|
|
42
|
+
* does not.
|
|
43
|
+
*/
|
|
44
|
+
export declare function isLegacyWhatsAppBlock(block: unknown): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Convert an old flat `whatsapp` block into the new `{ accounts: [...] }`
|
|
47
|
+
* shape, lifting every legacy access-control field onto a single account
|
|
48
|
+
* whose id is 'default' (which keeps the existing on-disk session — see the
|
|
49
|
+
* module doc). Absent fields stay absent rather than being materialized as
|
|
50
|
+
* explicit undefineds, so the rewritten JSON stays as small as the original.
|
|
51
|
+
*/
|
|
52
|
+
export declare function upgradeWhatsAppBlock(block: Record<string, unknown>): {
|
|
53
|
+
accounts: WhatsAppAccountConfig[];
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Upgrade one agent entry in place. Returns true when it was rewritten.
|
|
57
|
+
* Safe to call repeatedly — an already-upgraded agent is left untouched.
|
|
58
|
+
*/
|
|
59
|
+
export declare function upgradeAgentWhatsAppAccounts(agent: Record<string, unknown>): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Upgrade every agent in a parsed config object in place. Returns the ids of
|
|
62
|
+
* the agents that were rewritten (empty when nothing needed upgrading).
|
|
63
|
+
*/
|
|
64
|
+
export declare function upgradeWhatsAppAccountsInConfig(config: Record<string, unknown>): string[];
|
|
65
|
+
/**
|
|
66
|
+
* Read config.json, upgrade any legacy `whatsapp` blocks, and atomically
|
|
67
|
+
* write it back so the migration is permanent (a later save from the API
|
|
68
|
+
* would otherwise re-persist the old shape from whatever was last read).
|
|
69
|
+
*
|
|
70
|
+
* Best-effort by design: a missing/unreadable/invalid config is left alone
|
|
71
|
+
* and reported as "nothing upgraded" — boot continues into loadConfig, which
|
|
72
|
+
* produces the real, user-facing error for a broken config. The in-memory
|
|
73
|
+
* normalization in loadConfig means runtime is correct even if this write
|
|
74
|
+
* fails (e.g. read-only filesystem).
|
|
75
|
+
*/
|
|
76
|
+
export declare function upgradeWhatsAppAccountsFile(configPath: string): string[];
|
|
77
|
+
//# sourceMappingURL=whatsapp-accounts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp-accounts.d.ts","sourceRoot":"","sources":["../../src/config/whatsapp-accounts.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAGtD,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,YAAY,CAAC;AAErD,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AAEpD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAA+B,CAAC;AAmBnE;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG7E;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE;IAAE,QAAQ,CAAC,EAAE,qBAAqB,EAAE,CAAA;CAAE,GAAG,SAAS,GACtD,qBAAqB,EAAE,CAIzB;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE;IAAE,QAAQ,CAAC,EAAE,qBAAqB,EAAE,CAAA;CAAE,GAAG,SAAS,EACvD,SAAS,EAAE,MAAM,GAChB,qBAAqB,GAAG,SAAS,CAEnC;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG7D;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IACpE,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC,CAMA;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAKpF;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAUzF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBxE"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.WHATSAPP_ACCOUNT_ID_RE = exports.WHATSAPP_STATE_DIR = exports.DEFAULT_WHATSAPP_ACCOUNT_ID = void 0;
|
|
37
|
+
exports.whatsAppStateDir = whatsAppStateDir;
|
|
38
|
+
exports.resolveWhatsAppAccounts = resolveWhatsAppAccounts;
|
|
39
|
+
exports.findWhatsAppAccount = findWhatsAppAccount;
|
|
40
|
+
exports.isLegacyWhatsAppBlock = isLegacyWhatsAppBlock;
|
|
41
|
+
exports.upgradeWhatsAppBlock = upgradeWhatsAppBlock;
|
|
42
|
+
exports.upgradeAgentWhatsAppAccounts = upgradeAgentWhatsAppAccounts;
|
|
43
|
+
exports.upgradeWhatsAppAccountsInConfig = upgradeWhatsAppAccountsInConfig;
|
|
44
|
+
exports.upgradeWhatsAppAccountsFile = upgradeWhatsAppAccountsFile;
|
|
45
|
+
/**
|
|
46
|
+
* WhatsApp multi-account config shape — normalization, back-compat upgrade,
|
|
47
|
+
* and the on-disk state-directory rule.
|
|
48
|
+
*
|
|
49
|
+
* Phase 1 of the WhatsApp feature-parity plan replaced `AgentConfig.whatsapp`'s
|
|
50
|
+
* single flat block:
|
|
51
|
+
*
|
|
52
|
+
* "whatsapp": { "dmPolicy": "allowlist", "dmAllowlist": ["…"] }
|
|
53
|
+
*
|
|
54
|
+
* with an array of per-number accounts:
|
|
55
|
+
*
|
|
56
|
+
* "whatsapp": { "accounts": [ { "id": "default", "dmPolicy": "allowlist", … } ] }
|
|
57
|
+
*
|
|
58
|
+
* A gateway upgraded in place will have live config.json files (and a LIVE
|
|
59
|
+
* linked Baileys session on disk) in the old shape, so:
|
|
60
|
+
*
|
|
61
|
+
* 1. {@link upgradeAgentWhatsAppAccounts} rewrites the old shape into the new
|
|
62
|
+
* one in memory, and {@link upgradeWhatsAppAccountsFile} writes it back so
|
|
63
|
+
* the config self-heals permanently on first load.
|
|
64
|
+
* 2. The synthesized account is always `id: 'default'`, and 'default' is
|
|
65
|
+
* special-cased in {@link whatsAppStateDir} to keep using the historical
|
|
66
|
+
* BARE `<workspace>/.whatsapp-state/` directory. Nothing on disk moves, so
|
|
67
|
+
* an already-linked number stays linked across the upgrade. Only NEW
|
|
68
|
+
* accounts get a `<workspace>/.whatsapp-state/<id>/` subdirectory.
|
|
69
|
+
*/
|
|
70
|
+
const fs = __importStar(require("fs"));
|
|
71
|
+
const path = __importStar(require("path"));
|
|
72
|
+
const config_write_lock_1 = require("./config-write-lock");
|
|
73
|
+
/** Reserved id of the pre-multi-account session — see the module doc above. */
|
|
74
|
+
exports.DEFAULT_WHATSAPP_ACCOUNT_ID = 'default';
|
|
75
|
+
/** Bare state directory name; also the 'default' account's directory verbatim. */
|
|
76
|
+
exports.WHATSAPP_STATE_DIR = '.whatsapp-state';
|
|
77
|
+
/**
|
|
78
|
+
* Account ids double as on-disk directory names and as MCP `account_id`
|
|
79
|
+
* values, so they're restricted to a conservative slug: lowercase
|
|
80
|
+
* alphanumerics plus `-`/`_`, never a path traversal or a dotfile.
|
|
81
|
+
*/
|
|
82
|
+
exports.WHATSAPP_ACCOUNT_ID_RE = /^[a-z0-9][a-z0-9_-]{0,31}$/;
|
|
83
|
+
/** The legacy flat fields that get lifted onto the synthesized 'default' account. */
|
|
84
|
+
const LEGACY_ACCESS_FIELDS = [
|
|
85
|
+
'dmPolicy',
|
|
86
|
+
'dmAllowlist',
|
|
87
|
+
'groupPolicy',
|
|
88
|
+
'groupAllowlist',
|
|
89
|
+
'requireMention',
|
|
90
|
+
'pairing',
|
|
91
|
+
// Phase 2 behaviour flags. They postdate the flat shape, so a genuine
|
|
92
|
+
// pre-Phase-1 config never carries them — but a hand-edited config.json can
|
|
93
|
+
// still have them sitting in a flat block, and lifting them costs nothing
|
|
94
|
+
// (absent fields stay absent, so an untouched config still upgrades to the
|
|
95
|
+
// exact same JSON it did before).
|
|
96
|
+
'sendReadReceipts',
|
|
97
|
+
'reactionLevel',
|
|
98
|
+
];
|
|
99
|
+
/**
|
|
100
|
+
* Resolve the Baileys state directory for one account.
|
|
101
|
+
*
|
|
102
|
+
* 'default' deliberately uses the BARE `.whatsapp-state/` path rather than
|
|
103
|
+
* `.whatsapp-state/default/`: that is the directory a pre-multi-account
|
|
104
|
+
* gateway already linked into, and moving it is the one operation that could
|
|
105
|
+
* lose a live session. Every other account nests one level below it, which
|
|
106
|
+
* cannot collide with Baileys' own files (it writes `creds.json` and
|
|
107
|
+
* `<key-type>-<id>.json`, never a directory).
|
|
108
|
+
*/
|
|
109
|
+
function whatsAppStateDir(workspace, accountId) {
|
|
110
|
+
const base = path.join(workspace, exports.WHATSAPP_STATE_DIR);
|
|
111
|
+
return accountId === exports.DEFAULT_WHATSAPP_ACCOUNT_ID ? base : path.join(base, accountId);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The accounts an agent actually runs, given its (possibly absent) config.
|
|
115
|
+
*
|
|
116
|
+
* An absent/empty array resolves to a lone 'default' account so an agent that
|
|
117
|
+
* has never touched WhatsApp still gets a linkable manager — exactly the
|
|
118
|
+
* pre-multi-account behavior, where AgentRunner constructed a WhatsAppManager
|
|
119
|
+
* unconditionally because there was no config field to gate on.
|
|
120
|
+
*/
|
|
121
|
+
function resolveWhatsAppAccounts(cfg) {
|
|
122
|
+
const accounts = cfg?.accounts;
|
|
123
|
+
if (Array.isArray(accounts) && accounts.length > 0)
|
|
124
|
+
return accounts;
|
|
125
|
+
return [{ id: exports.DEFAULT_WHATSAPP_ACCOUNT_ID }];
|
|
126
|
+
}
|
|
127
|
+
/** Look up one account's config by id (undefined when it isn't configured). */
|
|
128
|
+
function findWhatsAppAccount(cfg, accountId) {
|
|
129
|
+
return resolveWhatsAppAccounts(cfg).find((a) => a.id === accountId);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* True when `block` is a `whatsapp` config in the OLD flat shape — i.e. an
|
|
133
|
+
* object that has no `accounts` array. An empty `{}` counts as legacy (it
|
|
134
|
+
* upgrades to a bare 'default' account); anything already carrying `accounts`
|
|
135
|
+
* does not.
|
|
136
|
+
*/
|
|
137
|
+
function isLegacyWhatsAppBlock(block) {
|
|
138
|
+
if (!block || typeof block !== 'object' || Array.isArray(block))
|
|
139
|
+
return false;
|
|
140
|
+
return !Array.isArray(block.accounts);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Convert an old flat `whatsapp` block into the new `{ accounts: [...] }`
|
|
144
|
+
* shape, lifting every legacy access-control field onto a single account
|
|
145
|
+
* whose id is 'default' (which keeps the existing on-disk session — see the
|
|
146
|
+
* module doc). Absent fields stay absent rather than being materialized as
|
|
147
|
+
* explicit undefineds, so the rewritten JSON stays as small as the original.
|
|
148
|
+
*/
|
|
149
|
+
function upgradeWhatsAppBlock(block) {
|
|
150
|
+
const account = { id: exports.DEFAULT_WHATSAPP_ACCOUNT_ID };
|
|
151
|
+
for (const field of LEGACY_ACCESS_FIELDS) {
|
|
152
|
+
if (block[field] !== undefined)
|
|
153
|
+
account[field] = block[field];
|
|
154
|
+
}
|
|
155
|
+
return { accounts: [account] };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Upgrade one agent entry in place. Returns true when it was rewritten.
|
|
159
|
+
* Safe to call repeatedly — an already-upgraded agent is left untouched.
|
|
160
|
+
*/
|
|
161
|
+
function upgradeAgentWhatsAppAccounts(agent) {
|
|
162
|
+
const block = agent.whatsapp;
|
|
163
|
+
if (!isLegacyWhatsAppBlock(block))
|
|
164
|
+
return false;
|
|
165
|
+
agent.whatsapp = upgradeWhatsAppBlock(block);
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Upgrade every agent in a parsed config object in place. Returns the ids of
|
|
170
|
+
* the agents that were rewritten (empty when nothing needed upgrading).
|
|
171
|
+
*/
|
|
172
|
+
function upgradeWhatsAppAccountsInConfig(config) {
|
|
173
|
+
const agents = config.agents;
|
|
174
|
+
if (!Array.isArray(agents))
|
|
175
|
+
return [];
|
|
176
|
+
const upgraded = [];
|
|
177
|
+
for (const agent of agents) {
|
|
178
|
+
if (!agent || typeof agent !== 'object' || Array.isArray(agent))
|
|
179
|
+
continue;
|
|
180
|
+
const entry = agent;
|
|
181
|
+
if (upgradeAgentWhatsAppAccounts(entry))
|
|
182
|
+
upgraded.push(String(entry.id ?? '<unknown>'));
|
|
183
|
+
}
|
|
184
|
+
return upgraded;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Read config.json, upgrade any legacy `whatsapp` blocks, and atomically
|
|
188
|
+
* write it back so the migration is permanent (a later save from the API
|
|
189
|
+
* would otherwise re-persist the old shape from whatever was last read).
|
|
190
|
+
*
|
|
191
|
+
* Best-effort by design: a missing/unreadable/invalid config is left alone
|
|
192
|
+
* and reported as "nothing upgraded" — boot continues into loadConfig, which
|
|
193
|
+
* produces the real, user-facing error for a broken config. The in-memory
|
|
194
|
+
* normalization in loadConfig means runtime is correct even if this write
|
|
195
|
+
* fails (e.g. read-only filesystem).
|
|
196
|
+
*/
|
|
197
|
+
function upgradeWhatsAppAccountsFile(configPath) {
|
|
198
|
+
let config;
|
|
199
|
+
try {
|
|
200
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return [];
|
|
204
|
+
}
|
|
205
|
+
if (!config || typeof config !== 'object' || Array.isArray(config))
|
|
206
|
+
return [];
|
|
207
|
+
const upgraded = upgradeWhatsAppAccountsInConfig(config);
|
|
208
|
+
if (upgraded.length === 0)
|
|
209
|
+
return [];
|
|
210
|
+
// Reuse the project-wide hardened writer (mode 0600 + randomUUID() tmp
|
|
211
|
+
// suffix — both load-bearing, see config-write-lock.ts's own doc comment
|
|
212
|
+
// and issue #460) instead of a bespoke writeFileSync/renameSync pair that
|
|
213
|
+
// would silently downgrade config.json's permissions on the very first
|
|
214
|
+
// legacy-block upgrade.
|
|
215
|
+
(0, config_write_lock_1.writeConfigAtomicSync)(configPath, config);
|
|
216
|
+
return upgraded;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=whatsapp-accounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp-accounts.js","sourceRoot":"","sources":["../../src/config/whatsapp-accounts.ts"],"names":[],"mappings":"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"}
|
package/dist/history/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/history/db.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,EACX,cAAc,EAEd,WAAW,EAEX,cAAc,EACd,UAAU,EACV,cAAc,EACd,UAAU,EAEV,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAWtC,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO;IAcP,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS;IAWlE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS;IAS3D,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1D,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxD,OAAO,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/history/db.ts"],"names":[],"mappings":"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"}
|
package/dist/history/db.js
CHANGED
|
@@ -58,8 +58,8 @@ class HistoryDB {
|
|
|
58
58
|
this.db.exec('PRAGMA synchronous=NORMAL');
|
|
59
59
|
this.db.exec('PRAGMA foreign_keys=ON');
|
|
60
60
|
this._initSchema();
|
|
61
|
-
this.insertStmt = this.db.prepare(`INSERT INTO messages (chat_id, session_id, source, role, content, sender_name, sender_id, platform_message_id, media_files, image_refs, ts)
|
|
62
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
61
|
+
this.insertStmt = this.db.prepare(`INSERT INTO messages (chat_id, session_id, source, role, content, sender_name, sender_id, platform_message_id, media_files, image_refs, replied_to_message_id, replied_to_text, replied_to_user, ts)
|
|
62
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
63
63
|
}
|
|
64
64
|
static forAgent(agentsBaseDir, agentId) {
|
|
65
65
|
const key = `${agentsBaseDir}::${agentId}`;
|
|
@@ -99,6 +99,9 @@ class HistoryDB {
|
|
|
99
99
|
platform_message_id TEXT,
|
|
100
100
|
media_files TEXT,
|
|
101
101
|
image_refs TEXT,
|
|
102
|
+
replied_to_message_id TEXT,
|
|
103
|
+
replied_to_text TEXT,
|
|
104
|
+
replied_to_user TEXT,
|
|
102
105
|
ts INTEGER NOT NULL,
|
|
103
106
|
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
104
107
|
);
|
|
@@ -167,18 +170,36 @@ class HistoryDB {
|
|
|
167
170
|
CREATE INDEX IF NOT EXISTS idx_skill_review_runs_ts ON skill_review_runs(ts);
|
|
168
171
|
|
|
169
172
|
`);
|
|
170
|
-
//
|
|
171
|
-
// touch them, so migrate with an explicit existence check. Only
|
|
172
|
-
// column is genuinely absent — a blanket try/catch would also
|
|
173
|
-
// failures (disk full, corruption) as if the column already
|
|
173
|
+
// Additive column migrations. These postdate existing DBs: CREATE TABLE IF NOT
|
|
174
|
+
// EXISTS won't touch them, so migrate with an explicit existence check. Only
|
|
175
|
+
// ALTER when the column is genuinely absent — a blanket try/catch would also
|
|
176
|
+
// swallow real failures (disk full, corruption) as if the column already
|
|
177
|
+
// existed. Reading table_info once and filtering makes the whole step
|
|
178
|
+
// idempotent: a second startup sees every column present and ALTERs nothing.
|
|
179
|
+
//
|
|
180
|
+
// image_refs (#74) — catalog refs a user turn pointed at
|
|
181
|
+
// replied_to_message_id / replied_to_text / replied_to_user (WhatsApp Phase 2)
|
|
182
|
+
// — quoted-message context, so the dashboard can render "in reply to X".
|
|
183
|
+
//
|
|
184
|
+
// All nullable, so SQLite's ADD COLUMN is an O(1) schema-only rewrite and
|
|
185
|
+
// existing rows keep their history with NULLs in the new columns.
|
|
186
|
+
const ADDITIVE_MESSAGE_COLUMNS = [
|
|
187
|
+
['image_refs', 'TEXT'],
|
|
188
|
+
['replied_to_message_id', 'TEXT'],
|
|
189
|
+
['replied_to_text', 'TEXT'],
|
|
190
|
+
['replied_to_user', 'TEXT'],
|
|
191
|
+
];
|
|
174
192
|
const messageCols = this.db.prepare('PRAGMA table_info(messages)').all();
|
|
175
|
-
|
|
176
|
-
|
|
193
|
+
const present = new Set(messageCols.map((c) => c.name));
|
|
194
|
+
for (const [name, ddlType] of ADDITIVE_MESSAGE_COLUMNS) {
|
|
195
|
+
if (!present.has(name)) {
|
|
196
|
+
this.db.exec(`ALTER TABLE messages ADD COLUMN ${name} ${ddlType}`);
|
|
197
|
+
}
|
|
177
198
|
}
|
|
178
199
|
}
|
|
179
200
|
insertMessage(msg) {
|
|
180
201
|
try {
|
|
181
|
-
this.insertStmt.run(msg.chatId, msg.sessionId, msg.source, msg.role, msg.content, msg.senderName ?? null, msg.senderId ?? null, msg.platformMessageId ?? null, msg.mediaFiles ? JSON.stringify(msg.mediaFiles) : null, msg.imageRefs?.length ? JSON.stringify(msg.imageRefs) : null, msg.ts);
|
|
202
|
+
this.insertStmt.run(msg.chatId, msg.sessionId, msg.source, msg.role, msg.content, msg.senderName ?? null, msg.senderId ?? null, msg.platformMessageId ?? null, msg.mediaFiles ? JSON.stringify(msg.mediaFiles) : null, msg.imageRefs?.length ? JSON.stringify(msg.imageRefs) : null, msg.repliedToMessageId ?? null, msg.repliedToText ?? null, msg.repliedToUser ?? null, msg.ts);
|
|
182
203
|
}
|
|
183
204
|
catch (err) {
|
|
184
205
|
// Non-fatal — history is best-effort
|
|
@@ -461,7 +482,8 @@ class HistoryDB {
|
|
|
461
482
|
// skipped or repeated when the caller passes the cursor's id component back.
|
|
462
483
|
const sql = `
|
|
463
484
|
SELECT id, chat_id, session_id, source, role, content, sender_name, sender_id,
|
|
464
|
-
platform_message_id, media_files, image_refs,
|
|
485
|
+
platform_message_id, media_files, image_refs,
|
|
486
|
+
replied_to_message_id, replied_to_text, replied_to_user, ts
|
|
465
487
|
FROM messages
|
|
466
488
|
WHERE ${conditions.join(' AND ')}
|
|
467
489
|
ORDER BY ts ${order}, id ${order}
|
|
@@ -499,7 +521,9 @@ class HistoryDB {
|
|
|
499
521
|
SELECT
|
|
500
522
|
messages.id, messages.chat_id, messages.session_id, messages.source,
|
|
501
523
|
messages.role, messages.content, messages.sender_name, messages.sender_id,
|
|
502
|
-
messages.platform_message_id, messages.media_files,
|
|
524
|
+
messages.platform_message_id, messages.media_files,
|
|
525
|
+
messages.replied_to_message_id, messages.replied_to_text,
|
|
526
|
+
messages.replied_to_user, messages.ts,
|
|
503
527
|
snippet(messages_fts, 0, '<b>', '</b>', '...', 32) AS snippet
|
|
504
528
|
FROM messages_fts
|
|
505
529
|
JOIN messages ON messages.id = messages_fts.rowid
|
|
@@ -677,6 +701,14 @@ class HistoryDB {
|
|
|
677
701
|
platformMessageId: r['platform_message_id'] ?? undefined,
|
|
678
702
|
mediaFiles,
|
|
679
703
|
...(imageRefs?.length ? { imageRefs } : {}),
|
|
704
|
+
// Reply context (WhatsApp Phase 2). Conditionally spread like imageRefs, so a
|
|
705
|
+
// message that never quoted anything carries no repliedTo* keys at all — the
|
|
706
|
+
// frontend can treat "key absent" as "not a reply" rather than probing for
|
|
707
|
+
// null. Cloud API rows legitimately have the id but not text/user, so each
|
|
708
|
+
// key is independently gated.
|
|
709
|
+
...(r['replied_to_message_id'] ? { repliedToMessageId: r['replied_to_message_id'] } : {}),
|
|
710
|
+
...(r['replied_to_text'] ? { repliedToText: r['replied_to_text'] } : {}),
|
|
711
|
+
...(r['replied_to_user'] ? { repliedToUser: r['replied_to_user'] } : {}),
|
|
680
712
|
ts: r['ts'],
|
|
681
713
|
};
|
|
682
714
|
}
|