@leemour/cli-messaging 0.86.0 → 0.88.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.
- package/README.md +1 -0
- package/dist/background/index.d.ts +5 -0
- package/dist/background/index.d.ts.map +1 -0
- package/dist/background/index.js +5 -0
- package/dist/background/index.js.map +1 -0
- package/dist/background/lock.d.ts +17 -0
- package/dist/background/lock.d.ts.map +1 -0
- package/dist/background/lock.js +34 -0
- package/dist/background/lock.js.map +1 -0
- package/dist/background/processes.d.ts.map +1 -0
- package/dist/background/processes.js.map +1 -0
- package/dist/background/system.d.ts +20 -0
- package/dist/background/system.d.ts.map +1 -0
- package/dist/background/system.js +39 -0
- package/dist/background/system.js.map +1 -0
- package/dist/background/units.d.ts +42 -0
- package/dist/background/units.d.ts.map +1 -0
- package/dist/background/units.js +178 -0
- package/dist/background/units.js.map +1 -0
- package/dist/cli/config-command.d.ts.map +1 -1
- package/dist/cli/config-command.js +17 -5
- package/dist/cli/config-command.js.map +1 -1
- package/dist/cli/context.d.ts +3 -0
- package/dist/cli/context.d.ts.map +1 -1
- package/dist/cli/context.js.map +1 -1
- package/dist/cli/index.d.ts +5 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/account-command.d.ts +0 -3
- package/dist/cli/messenger/account-command.d.ts.map +1 -1
- package/dist/cli/messenger/account-command.js +20 -2
- package/dist/cli/messenger/account-command.js.map +1 -1
- package/dist/cli/messenger/account-sessions-command.d.ts.map +1 -1
- package/dist/cli/messenger/account-sessions-command.js +13 -0
- package/dist/cli/messenger/account-sessions-command.js.map +1 -1
- package/dist/cli/messenger/admin-moderation-command.d.ts +11 -0
- package/dist/cli/messenger/admin-moderation-command.d.ts.map +1 -0
- package/dist/cli/messenger/admin-moderation-command.js +83 -0
- package/dist/cli/messenger/admin-moderation-command.js.map +1 -0
- package/dist/cli/messenger/after.d.ts +2 -0
- package/dist/cli/messenger/after.d.ts.map +1 -1
- package/dist/cli/messenger/after.js +23 -2
- package/dist/cli/messenger/after.js.map +1 -1
- package/dist/cli/messenger/archive-commands.d.ts.map +1 -1
- package/dist/cli/messenger/archive-commands.js +4 -4
- package/dist/cli/messenger/archive-commands.js.map +1 -1
- package/dist/cli/messenger/ask.d.ts +2 -0
- package/dist/cli/messenger/ask.d.ts.map +1 -1
- package/dist/cli/messenger/ask.js +7 -0
- package/dist/cli/messenger/ask.js.map +1 -1
- package/dist/cli/messenger/backfill-command.d.ts +1 -1
- package/dist/cli/messenger/backfill-command.d.ts.map +1 -1
- package/dist/cli/messenger/backfill-command.js +27 -18
- package/dist/cli/messenger/backfill-command.js.map +1 -1
- package/dist/cli/messenger/backfill-jobs.d.ts +3 -2
- package/dist/cli/messenger/backfill-jobs.d.ts.map +1 -1
- package/dist/cli/messenger/backfill-jobs.js +1 -1
- package/dist/cli/messenger/backfill-jobs.js.map +1 -1
- package/dist/cli/messenger/chats-command.d.ts +0 -3
- package/dist/cli/messenger/chats-command.d.ts.map +1 -1
- package/dist/cli/messenger/chats-command.js +12 -25
- package/dist/cli/messenger/chats-command.js.map +1 -1
- package/dist/cli/messenger/context.d.ts +6 -1
- package/dist/cli/messenger/context.d.ts.map +1 -1
- package/dist/cli/messenger/context.js +3 -0
- package/dist/cli/messenger/context.js.map +1 -1
- package/dist/cli/messenger/download-command.js +6 -6
- package/dist/cli/messenger/download-command.js.map +1 -1
- package/dist/cli/messenger/hearing-command.d.ts +0 -2
- package/dist/cli/messenger/hearing-command.d.ts.map +1 -1
- package/dist/cli/messenger/hearing-command.js +4 -9
- package/dist/cli/messenger/hearing-command.js.map +1 -1
- package/dist/cli/messenger/inbox.d.ts +1 -8
- package/dist/cli/messenger/inbox.d.ts.map +1 -1
- package/dist/cli/messenger/inbox.js +8 -28
- package/dist/cli/messenger/inbox.js.map +1 -1
- package/dist/cli/messenger/messages-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-command.js +20 -13
- package/dist/cli/messenger/messages-command.js.map +1 -1
- package/dist/cli/messenger/port.d.ts +21 -2
- package/dist/cli/messenger/port.d.ts.map +1 -1
- package/dist/cli/messenger/port.js.map +1 -1
- package/dist/cli/messenger/review.d.ts +0 -4
- package/dist/cli/messenger/review.d.ts.map +1 -1
- package/dist/cli/messenger/review.js +8 -11
- package/dist/cli/messenger/review.js.map +1 -1
- package/dist/cli/messenger/serve-command.d.ts +1 -13
- package/dist/cli/messenger/serve-command.d.ts.map +1 -1
- package/dist/cli/messenger/serve-command.js +7 -32
- package/dist/cli/messenger/serve-command.js.map +1 -1
- package/dist/cli/messenger/server-command.d.ts +1 -17
- package/dist/cli/messenger/server-command.d.ts.map +1 -1
- package/dist/cli/messenger/server-command.js +6 -213
- package/dist/cli/messenger/server-command.js.map +1 -1
- package/dist/cli/messenger/store-maintenance-command.d.ts.map +1 -1
- package/dist/cli/messenger/store-maintenance-command.js +1 -1
- package/dist/cli/messenger/store-maintenance-command.js.map +1 -1
- package/dist/cli/messenger/transcribe-command.d.ts.map +1 -1
- package/dist/cli/messenger/transcribe-command.js +4 -1
- package/dist/cli/messenger/transcribe-command.js.map +1 -1
- package/dist/cli/settings.d.ts +25 -1
- package/dist/cli/settings.d.ts.map +1 -1
- package/dist/cli/settings.js +108 -34
- package/dist/cli/settings.js.map +1 -1
- package/dist/domain/models.d.ts +2 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/domain/send-time.d.ts +1 -1
- package/dist/domain/send-time.js +4 -4
- package/dist/domain/send-time.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +4 -3
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/account.d.ts.map +1 -1
- package/dist/mcp/tools/account.js +1 -1
- package/dist/mcp/tools/account.js.map +1 -1
- package/dist/mcp/tools/chats.d.ts.map +1 -1
- package/dist/mcp/tools/chats.js +2 -2
- package/dist/mcp/tools/chats.js.map +1 -1
- package/dist/mcp/tools/contacts-write.d.ts +1 -1
- package/dist/mcp/tools/contacts-write.d.ts.map +1 -1
- package/dist/mcp/tools/contacts-write.js +19 -1
- package/dist/mcp/tools/contacts-write.js.map +1 -1
- package/dist/mcp/tools/inbox.d.ts.map +1 -1
- package/dist/mcp/tools/inbox.js +2 -3
- package/dist/mcp/tools/inbox.js.map +1 -1
- package/dist/mcp/tools/messages.d.ts.map +1 -1
- package/dist/mcp/tools/messages.js +1 -2
- package/dist/mcp/tools/messages.js.map +1 -1
- package/dist/mcp/tools/moderation.d.ts +8 -0
- package/dist/mcp/tools/moderation.d.ts.map +1 -0
- package/dist/mcp/tools/moderation.js +36 -0
- package/dist/mcp/tools/moderation.js.map +1 -0
- package/dist/mcp/tools/review.d.ts.map +1 -1
- package/dist/mcp/tools/review.js +3 -4
- package/dist/mcp/tools/review.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +2 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/moderation/check.d.ts +83 -0
- package/dist/moderation/check.d.ts.map +1 -0
- package/dist/moderation/check.js +227 -0
- package/dist/moderation/check.js.map +1 -0
- package/dist/moderation/rules.d.ts +105 -0
- package/dist/moderation/rules.d.ts.map +1 -0
- package/dist/moderation/rules.js +158 -0
- package/dist/moderation/rules.js.map +1 -0
- package/dist/resolve.d.ts +1 -0
- package/dist/resolve.d.ts.map +1 -1
- package/dist/resolve.js +5 -5
- package/dist/resolve.js.map +1 -1
- package/dist/sends/permissions.d.ts +5 -3
- package/dist/sends/permissions.d.ts.map +1 -1
- package/dist/sends/permissions.js +29 -5
- package/dist/sends/permissions.js.map +1 -1
- package/dist/services/account.d.ts +17 -0
- package/dist/services/account.d.ts.map +1 -0
- package/dist/services/account.js +33 -0
- package/dist/services/account.js.map +1 -0
- package/dist/services/archive.d.ts +6 -3
- package/dist/services/archive.d.ts.map +1 -1
- package/dist/services/archive.js +10 -8
- package/dist/services/archive.js.map +1 -1
- package/dist/services/chats.d.ts +4 -1
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +15 -0
- package/dist/services/chats.js.map +1 -1
- package/dist/services/deps.d.ts +7 -1
- package/dist/services/deps.d.ts.map +1 -1
- package/dist/services/deps.js +2 -1
- package/dist/services/deps.js.map +1 -1
- package/dist/services/inbox.d.ts +4 -0
- package/dist/services/inbox.d.ts.map +1 -1
- package/dist/services/inbox.js +4 -0
- package/dist/services/inbox.js.map +1 -1
- package/dist/services/index.d.ts +8 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +6 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/messages.d.ts +2 -0
- package/dist/services/messages.d.ts.map +1 -1
- package/dist/services/messages.js +11 -2
- package/dist/services/messages.js.map +1 -1
- package/dist/services/moderation.d.ts +33 -0
- package/dist/services/moderation.d.ts.map +1 -0
- package/dist/services/moderation.js +99 -0
- package/dist/services/moderation.js.map +1 -0
- package/dist/services/moment.d.ts +8 -0
- package/dist/services/moment.d.ts.map +1 -0
- package/dist/services/moment.js +24 -0
- package/dist/services/moment.js.map +1 -0
- package/dist/services/people.d.ts +3 -1
- package/dist/services/people.d.ts.map +1 -1
- package/dist/services/people.js +2 -0
- package/dist/services/people.js.map +1 -1
- package/dist/speech/hearing.d.ts +2 -0
- package/dist/speech/hearing.d.ts.map +1 -1
- package/dist/speech/hearing.js +8 -0
- package/dist/speech/hearing.js.map +1 -1
- package/dist/speech/transcribe.d.ts +5 -1
- package/dist/speech/transcribe.d.ts.map +1 -1
- package/dist/speech/transcribe.js +2 -2
- package/dist/speech/transcribe.js.map +1 -1
- package/dist/store/sqlite/drizzle/bun.js +1 -1
- package/dist/store/sqlite/drizzle/core.d.ts +1 -1
- package/dist/store/sqlite/drizzle/core.d.ts.map +1 -1
- package/dist/store/sqlite/drizzle/core.js +5 -3
- package/dist/store/sqlite/drizzle/core.js.map +1 -1
- package/dist/store/sqlite/drizzle/node.js +1 -1
- package/dist/store/sqlite/drizzle/{shared-JAIU3GYB.js → shared-VIVPOB3Q.js} +5 -1
- package/dist/store/sqlite/drizzle/{shared-JAIU3GYB.js.map → shared-VIVPOB3Q.js.map} +1 -1
- package/dist/store/sqlite/manifest.d.ts.map +1 -1
- package/dist/store/sqlite/manifest.js +1 -0
- package/dist/store/sqlite/manifest.js.map +1 -1
- package/dist/store/sqlite/migrations.generated.d.ts.map +1 -1
- package/dist/store/sqlite/migrations.generated.js +15 -0
- package/dist/store/sqlite/migrations.generated.js.map +1 -1
- package/dist/store/sqlite/schema.d.ts +494 -0
- package/dist/store/sqlite/schema.d.ts.map +1 -1
- package/dist/store/sqlite/schema.js +78 -1
- package/dist/store/sqlite/schema.js.map +1 -1
- package/package.json +5 -1
- package/parity.json +191 -65
- package/dist/cli/messenger/processes.d.ts.map +0 -1
- package/dist/cli/messenger/processes.js.map +0 -1
- /package/dist/{cli/messenger → background}/processes.d.ts +0 -0
- /package/dist/{cli/messenger → background}/processes.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contacts-write.js","sourceRoot":"","sources":["../../../src/mcp/tools/contacts-write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAI5B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAgB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAE/D,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC,CAAA;AAEtG,
|
|
1
|
+
{"version":3,"file":"contacts-write.js","sourceRoot":"","sources":["../../../src/mcp/tools/contacts-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/inbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/inbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAI/D,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,YAAY,CAAA;AAKrD,eAAO,MAAM,UAAU,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAqDvE,CAAA"}
|
package/dist/mcp/tools/inbox.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
|
-
import { modelWith } from "../../cli/messenger/hearing-command.js";
|
|
3
|
-
import { momentOf } from "../../cli/messenger/inbox.js";
|
|
4
2
|
import { onlineDeps, servicesFor } from "../../services/index.js";
|
|
5
|
-
import {
|
|
3
|
+
import { momentOf } from "../../services/moment.js";
|
|
4
|
+
import { heard, hearForTool, modelWith } from "../../speech/hearing.js";
|
|
6
5
|
import { READ, tool } from "../tool.js";
|
|
7
6
|
/** Per chat: unread across many chats at a hundred each would outgrow what a client keeps of one answer. */
|
|
8
7
|
const INBOX_LIMIT = 20;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../src/mcp/tools/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../src/mcp/tools/inbox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAgB,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAErD,4GAA4G;AAC5G,MAAM,WAAW,GAAG,EAAE,CAAA;AAEtB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,SAAoB,EAA2B,EAAE;IAC1E,OAAO;QACL,KAAK,EAAE,IAAI,CAAC;YACV,KAAK,EAAE,aAAa;YACpB,WAAW,EACT,wGAAwG;gBACxG,mGAAmG;gBACnG,KAAK,SAAS,CAAC,GAAG,CAAC,OAAO,kFAAkF;gBAC5G,+GAA+G;gBAC/G,8GAA8G;gBAC9G,qCAAqC;YACvC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;gBACd,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC,CAAC;gBACxF,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,CAAC;gBACnF,KAAK,EAAE,CAAC,CAAC,QAAQ,CACf,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,CAC7G;gBACD,UAAU,EAAE,CAAC,CAAC,QAAQ,CACpB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,+DAA+D,CAAC,CAAC,CACpG;gBACD,KAAK,EAAE,CAAC,CAAC,QAAQ,CACf,CAAC,CAAC,IAAI,CACJ,CAAC,CAAC,MAAM,EAAE,EACV,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACd,CAAC,CAAC,WAAW,CAAC,2DAA2D,CAAC,CAC3E,CACF;aACF,CAAC;YACF,WAAW,EAAE,IAAI;YACjB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;gBACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,WAAW,CAAA;gBACvC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBACzF,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC7E,KAAK;oBACL,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI;iBACvB,CAAC,CAAA;gBACF,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAC7D,MAAM,OAAO,GAAG,MAAM,WAAW,CAC/B,SAAS,EACT,OAAO,EACP,QAAQ,EACR,IAAI,CAAC,UAAU,KAAK,IAAI,EACxB,QAAQ,EACR,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CACvC,CAAA;gBACD,OAAO;oBACL,GAAG,KAAK;oBACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;oBACxF,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChE,CAAA;YACH,CAAC;SACF,CAAC;KACH,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/messages.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAI/D,OAAO,EAAE,KAAK,OAAO,EAA8C,MAAM,YAAY,CAAA;AAErF,eAAO,MAAM,aAAa,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAiH1E,CAAA"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
2
|
import { afterOf, oneDirection } from "../../cli/messenger/after.js";
|
|
3
|
-
import { modelWith } from "../../cli/messenger/hearing-command.js";
|
|
4
3
|
import { capability } from "../../cli/messenger/port.js";
|
|
5
4
|
import { onlineDeps, servicesFor, storedDeps } from "../../services/index.js";
|
|
6
|
-
import { heard, hearForTool } from "../../speech/hearing.js";
|
|
5
|
+
import { heard, hearForTool, modelWith } from "../../speech/hearing.js";
|
|
7
6
|
import { chatOf, limit, message, nameOf, READ, tool } from "../tool.js";
|
|
8
7
|
export const messagesTools = (messenger) => {
|
|
9
8
|
const chat = chatOf(messenger);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAEpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/mcp/tools/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Messenger } from "../../cli/messenger/context.js";
|
|
2
|
+
import { type AnyTool } from "../tool.js";
|
|
3
|
+
/**
|
|
4
|
+
* A group's rules, and the run that acts on them. Over MCP nobody can answer a question per action,
|
|
5
|
+
* so an action whose level in the group's rules is `ask` is planned, not taken.
|
|
6
|
+
*/
|
|
7
|
+
export declare const moderationTools: (messenger: Messenger) => Record<string, AnyTool>;
|
|
8
|
+
//# sourceMappingURL=moderation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moderation.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/moderation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAG/D,OAAO,EAAE,KAAK,OAAO,EAAsC,MAAM,YAAY,CAAA;AAE7E;;;GAGG;AACH,eAAO,MAAM,eAAe,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAkC3E,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
import { onlineDeps, servicesFor } from "../../services/index.js";
|
|
3
|
+
import { momentOf } from "../../services/moment.js";
|
|
4
|
+
import { APPROVE, chatOf, READ, tool, WRITE } from "../tool.js";
|
|
5
|
+
/**
|
|
6
|
+
* A group's rules, and the run that acts on them. Over MCP nobody can answer a question per action,
|
|
7
|
+
* so an action whose level in the group's rules is `ask` is planned, not taken.
|
|
8
|
+
*/
|
|
9
|
+
export const moderationTools = (messenger) => ({
|
|
10
|
+
chats_rules_show: tool({
|
|
11
|
+
title: "A group's moderation rules",
|
|
12
|
+
description: "The rules `chats_moderate` judges a group by; the defaults, marked not saved, if it has none.",
|
|
13
|
+
input: v.object({ chat: chatOf(messenger) }),
|
|
14
|
+
annotations: READ,
|
|
15
|
+
online: (adapter, args, { guard, settings, env }) => servicesFor(onlineDeps(messenger, adapter, guard, { profile: settings.profile, env })).moderation.rules(args.chat),
|
|
16
|
+
}),
|
|
17
|
+
chats_moderate: tool({
|
|
18
|
+
title: "Apply a group's rules",
|
|
19
|
+
description: "Judge a group's new messages and members by its rules, and delete or remove where the rules' levels allow; " +
|
|
20
|
+
"an action at level ask is planned for the owner, not taken. Only when the owner asked for this group.",
|
|
21
|
+
input: v.object({
|
|
22
|
+
chat: chatOf(messenger),
|
|
23
|
+
since_time: v.optional(v.pipe(v.string(), v.description("ISO 8601, or 2h / 1d ago; the saved point stays"))),
|
|
24
|
+
dry_run: v.optional(v.pipe(v.boolean(), v.description("judge and plan; do nothing"))),
|
|
25
|
+
}),
|
|
26
|
+
annotations: WRITE,
|
|
27
|
+
_meta: APPROVE,
|
|
28
|
+
permission: "groups",
|
|
29
|
+
online: (adapter, args, { guard, settings, env }) => servicesFor(onlineDeps(messenger, adapter, guard, { profile: settings.profile, env })).moderation.moderate(args.chat, {
|
|
30
|
+
...(args.since_time === undefined ? {} : { since: momentOf(args.since_time, "since_time") }),
|
|
31
|
+
dryRun: args.dry_run === true,
|
|
32
|
+
allowDangerous: false,
|
|
33
|
+
}),
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=moderation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moderation.js","sourceRoot":"","sources":["../../../src/mcp/tools/moderation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAgB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAE7E;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAoB,EAA2B,EAAE,CAAC,CAAC;IACjF,gBAAgB,EAAE,IAAI,CAAC;QACrB,KAAK,EAAE,4BAA4B;QACnC,WAAW,EAAE,+FAA+F;QAC5G,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAClD,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CACrG,IAAI,CAAC,IAAI,CACV;KACJ,CAAC;IACF,cAAc,EAAE,IAAI,CAAC;QACnB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EACT,6GAA6G;YAC7G,uGAAuG;QACzG,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;YACvB,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,iDAAiD,CAAC,CAAC,CAAC;YAC5G,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,CAAC;SACtF,CAAC;QACF,WAAW,EAAE,KAAK;QAClB,KAAK,EAAE,OAAO;QACd,UAAU,EAAE,QAAQ;QACpB,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAClD,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CACxG,IAAI,CAAC,IAAI,EACT;YACE,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;YAC5F,MAAM,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI;YAC7B,cAAc,EAAE,KAAK;SACtB,CACF;KACJ,CAAC;CACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/review.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/review.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAK/D,OAAO,EAAE,KAAK,OAAO,EAAsB,MAAM,YAAY,CAAA;AAE7D,eAAO,MAAM,WAAW,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAqDvE,CAAA"}
|
package/dist/mcp/tools/review.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import * as v from "valibot";
|
|
2
|
-
import {
|
|
3
|
-
import { momentOf } from "../../cli/messenger/inbox.js";
|
|
4
|
-
import { REVIEW_DAYS, reviewStart, UNANSWERED_HOURS } from "../../cli/messenger/review.js";
|
|
2
|
+
import { REVIEW_DAYS, reviewStart, UNANSWERED_HOURS } from "../../services/inbox.js";
|
|
5
3
|
import { onlineDeps, servicesFor } from "../../services/index.js";
|
|
6
|
-
import {
|
|
4
|
+
import { momentOf } from "../../services/moment.js";
|
|
5
|
+
import { heard, hearForTool, modelWith } from "../../speech/hearing.js";
|
|
7
6
|
import { chatOf, READ, tool } from "../tool.js";
|
|
8
7
|
export const reviewTools = (messenger) => ({
|
|
9
8
|
review: tool({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/mcp/tools/review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/mcp/tools/review.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqBxC;;;GAGG;AACH,eAAO,MAAM,SAAS,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAWrE,CAAA;AAEF,0GAA0G;AAC1G,eAAO,MAAM,aAAa,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAA8B,CAAA;AAEzG,kHAAkH;AAClH,eAAO,MAAM,WAAW,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAkC,CAAA;AAE3G,oFAAoF;AACpF,eAAO,MAAM,SAAS,cAAe,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CASrE,CAAA"}
|
package/dist/mcp/tools.js
CHANGED
|
@@ -12,6 +12,7 @@ import { messageDeleteTools } from "./tools/messages-delete.js";
|
|
|
12
12
|
import { messagesPhotoTools } from "./tools/messages-photo.js";
|
|
13
13
|
import { messageSendTools } from "./tools/messages-send.js";
|
|
14
14
|
import { messagesTranscribeTools } from "./tools/messages-transcribe.js";
|
|
15
|
+
import { moderationTools } from "./tools/moderation.js";
|
|
15
16
|
import { pollReadTools, pollWriteTools } from "./tools/polls.js";
|
|
16
17
|
import { reactionTools } from "./tools/reactions.js";
|
|
17
18
|
import { reviewTools } from "./tools/review.js";
|
|
@@ -41,6 +42,7 @@ export const sendTools = (messenger) => ({
|
|
|
41
42
|
...adminTools(messenger),
|
|
42
43
|
...folderTools(messenger),
|
|
43
44
|
...contactWriteTools(messenger),
|
|
45
|
+
...moderationTools(messenger),
|
|
44
46
|
...messageSendTools(messenger),
|
|
45
47
|
...messageActionTools(messenger),
|
|
46
48
|
...reactionTools(messenger),
|
package/dist/mcp/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAoB,EAA2B,EAAE,CAAC,CAAC;IAC3E,GAAG,UAAU,CAAC,SAAS,CAAC;IACxB,GAAG,WAAW,CAAC,SAAS,CAAC;IACzB,GAAG,WAAW,CAAC,SAAS,CAAC;IACzB,GAAG,YAAY,CAAC,SAAS,CAAC;IAC1B,GAAG,UAAU,CAAC,SAAS,CAAC;IACxB,GAAG,aAAa,CAAC,SAAS,CAAC;IAC3B,GAAG,aAAa,CAAC,SAAS,CAAC;IAC3B,GAAG,aAAa,CAAC,SAAS,CAAC;IAC3B,GAAG,kBAAkB,CAAC,SAAS,CAAC;IAChC,GAAG,uBAAuB,CAAC,SAAS,CAAC;CACtC,CAAC,CAAA;AAEF,0GAA0G;AAC1G,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAoB,EAA2B,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;AAEzG,kHAAkH;AAClH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAAoB,EAA2B,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;AAE3G,oFAAoF;AACpF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAoB,EAA2B,EAAE,CAAC,CAAC;IAC3E,GAAG,UAAU,CAAC,SAAS,CAAC;IACxB,GAAG,WAAW,CAAC,SAAS,CAAC;IACzB,GAAG,iBAAiB,CAAC,SAAS,CAAC;IAC/B,GAAG,gBAAgB,CAAC,SAAS,CAAC;IAC9B,GAAG,kBAAkB,CAAC,SAAS,CAAC;IAChC,GAAG,aAAa,CAAC,SAAS,CAAC;IAC3B,GAAG,cAAc,CAAC,SAAS,CAAC;CAC7B,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp/tools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAoB,EAA2B,EAAE,CAAC,CAAC;IAC3E,GAAG,UAAU,CAAC,SAAS,CAAC;IACxB,GAAG,WAAW,CAAC,SAAS,CAAC;IACzB,GAAG,WAAW,CAAC,SAAS,CAAC;IACzB,GAAG,YAAY,CAAC,SAAS,CAAC;IAC1B,GAAG,UAAU,CAAC,SAAS,CAAC;IACxB,GAAG,aAAa,CAAC,SAAS,CAAC;IAC3B,GAAG,aAAa,CAAC,SAAS,CAAC;IAC3B,GAAG,aAAa,CAAC,SAAS,CAAC;IAC3B,GAAG,kBAAkB,CAAC,SAAS,CAAC;IAChC,GAAG,uBAAuB,CAAC,SAAS,CAAC;CACtC,CAAC,CAAA;AAEF,0GAA0G;AAC1G,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAoB,EAA2B,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;AAEzG,kHAAkH;AAClH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAAoB,EAA2B,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAA;AAE3G,oFAAoF;AACpF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAoB,EAA2B,EAAE,CAAC,CAAC;IAC3E,GAAG,UAAU,CAAC,SAAS,CAAC;IACxB,GAAG,WAAW,CAAC,SAAS,CAAC;IACzB,GAAG,iBAAiB,CAAC,SAAS,CAAC;IAC/B,GAAG,eAAe,CAAC,SAAS,CAAC;IAC7B,GAAG,gBAAgB,CAAC,SAAS,CAAC;IAC9B,GAAG,kBAAkB,CAAC,SAAS,CAAC;IAChC,GAAG,aAAa,CAAC,SAAS,CAAC;IAC3B,GAAG,cAAc,CAAC,SAAS,CAAC;CAC7B,CAAC,CAAA"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { MessengerAdapter } from "../cli/messenger/port.js";
|
|
2
|
+
import type { GroupMember, Id, Message } from "../domain/models.js";
|
|
3
|
+
import type { GroupRules } from "./rules.js";
|
|
4
|
+
export type Action = "report" | "delete" | "remove";
|
|
5
|
+
export type Outcome = "reported" | "done" | "planned" | "forbidden" | "declined" | "refused" | "failed" | "skipped";
|
|
6
|
+
export interface Finding {
|
|
7
|
+
/** A message, or somebody who joined. */
|
|
8
|
+
kind: "message" | "member";
|
|
9
|
+
rule: "blocked" | "invites" | "links" | "forwards" | "flood" | "newAccount";
|
|
10
|
+
personId: Id;
|
|
11
|
+
personName: string | null;
|
|
12
|
+
messageId?: Id;
|
|
13
|
+
action: Action;
|
|
14
|
+
}
|
|
15
|
+
export interface CheckRow extends Finding {
|
|
16
|
+
outcome: Outcome;
|
|
17
|
+
reason?: string;
|
|
18
|
+
/** What the owner types to do it by hand, on a row that was not done. */
|
|
19
|
+
command?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface CheckInput {
|
|
22
|
+
rules: GroupRules;
|
|
23
|
+
messages: Message[];
|
|
24
|
+
joined: GroupMember[];
|
|
25
|
+
/** The group's admins; the owner's own messages are known by `outgoing`. */
|
|
26
|
+
answerers: ReadonlySet<Id>;
|
|
27
|
+
/** Service messages — someone joined, the title changed — which no rule judges. */
|
|
28
|
+
service: ReadonlySet<Id>;
|
|
29
|
+
now: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* What the rules say about what is new. Pure: nothing here talks to a messenger. One finding per
|
|
33
|
+
* message — the rule with the strongest action — and one removal per person, whatever else they did.
|
|
34
|
+
*/
|
|
35
|
+
export declare const judge: ({ rules, messages, joined, answerers, service, now }: CheckInput) => Finding[];
|
|
36
|
+
/** The two things a check may do, whoever does them: the personal account, or a bot. */
|
|
37
|
+
export interface Moderator {
|
|
38
|
+
deleteMessage(chatId: Id, messageId: Id): Promise<void>;
|
|
39
|
+
removePerson(chatId: Id, personId: Id): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
export interface ActOptions {
|
|
42
|
+
chatId: Id;
|
|
43
|
+
rules: GroupRules;
|
|
44
|
+
/** `--allow-dangerous`: yes to every action at level `ask`. */
|
|
45
|
+
allowDangerous: boolean;
|
|
46
|
+
dryRun: boolean;
|
|
47
|
+
maxActions: number;
|
|
48
|
+
/** Asks the owner about one action: `undefined` from it, or no `confirm`, when nobody is there to answer. */
|
|
49
|
+
confirm?: (finding: Finding) => Promise<boolean | undefined>;
|
|
50
|
+
/** The program's word, for the command a row says to type by hand: `tg`, `max`. */
|
|
51
|
+
command: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Does what the findings ask, as far as the group's levels, the per-run limit and the guard let it.
|
|
55
|
+
* `deny` never acts, `readonly` only reports, `ask` asks — or `--allow-dangerous` says yes — and
|
|
56
|
+
* `allow` acts. Stops acting at the first hourly-limit refusal: the rest is `skipped`, never tried.
|
|
57
|
+
*/
|
|
58
|
+
export declare const act: (moderator: Moderator, findings: Finding[], options: ActOptions) => Promise<CheckRow[]>;
|
|
59
|
+
/** One action in words, for a question at the terminal. */
|
|
60
|
+
export declare const describe: (finding: Finding) => string;
|
|
61
|
+
export interface Gathered extends Omit<CheckInput, "rules" | "now"> {
|
|
62
|
+
/** The newest message read, ISO 8601: where the next check starts. */
|
|
63
|
+
until: string | null;
|
|
64
|
+
/** More history than one check reads. */
|
|
65
|
+
more: boolean;
|
|
66
|
+
notes: string[];
|
|
67
|
+
}
|
|
68
|
+
/** One check reads at most this many messages; the rest waits for the next. */
|
|
69
|
+
export declare const CHECK_READS = 1000;
|
|
70
|
+
/**
|
|
71
|
+
* What is new in the group since `since` (ms): its messages, who joined — from the chat's service
|
|
72
|
+
* messages — and who the admins are. Reads only.
|
|
73
|
+
*/
|
|
74
|
+
export declare const gather: (adapter: MessengerAdapter, chatId: Id, since: number) => Promise<Gathered>;
|
|
75
|
+
export declare const MAX_ACTIONS = 10;
|
|
76
|
+
/**
|
|
77
|
+
* Where the next check starts: after the newest message read, or just before the first message whose
|
|
78
|
+
* action is still undone — so it is judged again, and what came after it is still read. A person
|
|
79
|
+
* who joined and is still undone keeps the point where it was, since the join is not a row's message.
|
|
80
|
+
*/
|
|
81
|
+
export declare const nextPoint: (rows: CheckRow[], found: Gathered) => string | null;
|
|
82
|
+
export declare const someUndone: (rows: CheckRow[]) => boolean;
|
|
83
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/moderation/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { CliError } from "@leemour/cli-core";
|
|
2
|
+
const INVITE = /max\.ru\/join\/|(t|telegram)\.me\/(\+|joinchat\/)|tg:\/\/join/i;
|
|
3
|
+
const LINK = /https?:\/\/\S+/i;
|
|
4
|
+
/** Which action wins when a message breaks several rules; the first rule listed breaks a tie. */
|
|
5
|
+
const STRENGTH = { report: 0, delete: 1, remove: 2 };
|
|
6
|
+
/**
|
|
7
|
+
* What the rules say about what is new. Pure: nothing here talks to a messenger. One finding per
|
|
8
|
+
* message — the rule with the strongest action — and one removal per person, whatever else they did.
|
|
9
|
+
*/
|
|
10
|
+
export const judge = ({ rules, messages, joined, answerers, service, now }) => {
|
|
11
|
+
const trusted = new Set(rules.trusted);
|
|
12
|
+
const blocked = (id, name) => (id !== null && rules.blocked.includes(id)) ||
|
|
13
|
+
(name !== null && rules.blockedNames.some((part) => name.toLocaleLowerCase().includes(part.toLocaleLowerCase())));
|
|
14
|
+
const young = (member) => rules.newAccount.days > 0 &&
|
|
15
|
+
typeof member.registeredAt === "string" &&
|
|
16
|
+
now - Date.parse(member.registeredAt) < rules.newAccount.days * 86_400_000;
|
|
17
|
+
const found = [];
|
|
18
|
+
const add = (finding) => {
|
|
19
|
+
if (finding.action === "remove" && found.some((f) => f.action === "remove" && f.personId === finding.personId)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
found.push(finding);
|
|
23
|
+
};
|
|
24
|
+
for (const member of joined) {
|
|
25
|
+
if (trusted.has(member.id) || answerers.has(member.id))
|
|
26
|
+
continue;
|
|
27
|
+
const person = { kind: "member", personId: member.id, personName: member.name };
|
|
28
|
+
if (blocked(member.id, member.name)) {
|
|
29
|
+
add({ ...person, rule: "blocked", action: rules.blockedPeople === "remove" ? "remove" : "report" });
|
|
30
|
+
}
|
|
31
|
+
else if (young(member)) {
|
|
32
|
+
add({ ...person, rule: "newAccount", action: rules.newAccount.action });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const flooding = floodOf(messages, rules.flood);
|
|
36
|
+
for (const message of messages) {
|
|
37
|
+
const id = message.senderId;
|
|
38
|
+
if (id === null || message.outgoing === true || answerers.has(id) || trusted.has(id))
|
|
39
|
+
continue;
|
|
40
|
+
if (service.has(message.id) || message.attachments.some((attachment) => attachment.kind === "control"))
|
|
41
|
+
continue;
|
|
42
|
+
const base = { kind: "message", personId: id, personName: message.senderName, messageId: message.id };
|
|
43
|
+
const text = message.text;
|
|
44
|
+
const broken = [];
|
|
45
|
+
if (blocked(id, message.senderName))
|
|
46
|
+
broken.push(["blocked", rules.blockedPeople]);
|
|
47
|
+
if (INVITE.test(text))
|
|
48
|
+
broken.push(["invites", rules.invites]);
|
|
49
|
+
if (LINK.test(text) || message.attachments.some((attachment) => attachment.kind === "share")) {
|
|
50
|
+
broken.push(["links", rules.links]);
|
|
51
|
+
}
|
|
52
|
+
if (message.forwardedFrom !== null)
|
|
53
|
+
broken.push(["forwards", rules.forwards]);
|
|
54
|
+
if (flooding.has(message.id))
|
|
55
|
+
broken.push(["flood", rules.flood.action]);
|
|
56
|
+
const strongest = broken.reduce((best, rule) => (best === undefined || STRENGTH[rule[1]] > STRENGTH[best[1]] ? rule : best), undefined);
|
|
57
|
+
if (strongest)
|
|
58
|
+
add({ ...base, rule: strongest[0], action: strongest[1] });
|
|
59
|
+
}
|
|
60
|
+
return found;
|
|
61
|
+
};
|
|
62
|
+
/** Messages past the limit: more than `messages` from one person within `minutes`. */
|
|
63
|
+
const floodOf = (messages, flood) => {
|
|
64
|
+
const window = flood.minutes * 60_000;
|
|
65
|
+
const over = new Set();
|
|
66
|
+
const bySender = new Map();
|
|
67
|
+
for (const message of messages) {
|
|
68
|
+
if (message.senderId === null)
|
|
69
|
+
continue;
|
|
70
|
+
const times = bySender.get(message.senderId) ?? [];
|
|
71
|
+
const at = Date.parse(message.timestamp);
|
|
72
|
+
times.push(at);
|
|
73
|
+
bySender.set(message.senderId, times);
|
|
74
|
+
if (times.filter((time) => at - time < window).length > flood.messages)
|
|
75
|
+
over.add(message.id);
|
|
76
|
+
}
|
|
77
|
+
return over;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Does what the findings ask, as far as the group's levels, the per-run limit and the guard let it.
|
|
81
|
+
* `deny` never acts, `readonly` only reports, `ask` asks — or `--allow-dangerous` says yes — and
|
|
82
|
+
* `allow` acts. Stops acting at the first hourly-limit refusal: the rest is `skipped`, never tried.
|
|
83
|
+
*/
|
|
84
|
+
export const act = async (moderator, findings, options) => {
|
|
85
|
+
const { chatId, rules, allowDangerous, dryRun, maxActions, confirm, command } = options;
|
|
86
|
+
const rows = [];
|
|
87
|
+
let acted = 0;
|
|
88
|
+
let stopped;
|
|
89
|
+
for (const finding of findings) {
|
|
90
|
+
if (finding.action === "report") {
|
|
91
|
+
rows.push({ ...finding, outcome: "reported" });
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
const consent = finding.action;
|
|
95
|
+
const level = rules.consent[consent];
|
|
96
|
+
const row = (outcome, reason) => ({
|
|
97
|
+
...finding,
|
|
98
|
+
outcome,
|
|
99
|
+
...(reason ? { reason } : {}),
|
|
100
|
+
...(outcome === "done" || outcome === "reported" ? {} : { command: commandFor(command, chatId, finding) }),
|
|
101
|
+
});
|
|
102
|
+
if (level === "deny") {
|
|
103
|
+
rows.push(row("forbidden", `consent.${consent} is deny`));
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
if (level === "readonly") {
|
|
107
|
+
rows.push(row("reported", `consent.${consent} is readonly`));
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (dryRun) {
|
|
111
|
+
rows.push(row("planned", "--dry-run"));
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (stopped || acted >= maxActions) {
|
|
115
|
+
rows.push(row("skipped", stopped ?? `over the limit of ${maxActions} actions per check`));
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (level === "ask" && !allowDangerous) {
|
|
119
|
+
const yes = confirm ? await confirm(finding) : undefined;
|
|
120
|
+
if (yes === undefined) {
|
|
121
|
+
rows.push(row("planned", `consent.${consent} is ask, and nobody is there to answer — run with --allow-dangerous`));
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (!yes) {
|
|
125
|
+
rows.push(row("declined", "the answer was no"));
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
acted += 1;
|
|
130
|
+
try {
|
|
131
|
+
if (finding.action === "delete" && finding.messageId) {
|
|
132
|
+
await moderator.deleteMessage(chatId, finding.messageId);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
await moderator.removePerson(chatId, finding.personId);
|
|
136
|
+
}
|
|
137
|
+
rows.push(row("done"));
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
const failure = asCliError(error);
|
|
141
|
+
if (failure.code === "rate_limited")
|
|
142
|
+
stopped = failure.message;
|
|
143
|
+
const refused = ["rate_limited", "permission_error", "confirmation_required"].includes(failure.code);
|
|
144
|
+
rows.push(row(refused ? "refused" : "failed", failure.message));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return rows;
|
|
148
|
+
};
|
|
149
|
+
const asCliError = (error) => error instanceof CliError
|
|
150
|
+
? error
|
|
151
|
+
: new CliError("provider_error", error instanceof Error ? error.message : String(error));
|
|
152
|
+
const who = (finding) => finding.personName ?? finding.personId;
|
|
153
|
+
/** One action in words, for a question at the terminal. */
|
|
154
|
+
export const describe = (finding) => finding.action === "delete"
|
|
155
|
+
? `delete message ${finding.messageId} from ${who(finding)} for everyone (${finding.rule})`
|
|
156
|
+
: `remove ${who(finding)} from the group (${finding.rule})`;
|
|
157
|
+
const commandFor = (command, chatId, finding) => finding.action === "delete"
|
|
158
|
+
? `${command} messages delete ${chatId} ${finding.messageId} --for-everyone --allow-dangerous`
|
|
159
|
+
: finding.action === "remove"
|
|
160
|
+
? `${command} chats members remove ${chatId} ${finding.personId}`
|
|
161
|
+
: "";
|
|
162
|
+
/** One check reads at most this many messages; the rest waits for the next. */
|
|
163
|
+
export const CHECK_READS = 1000;
|
|
164
|
+
const PAGE = 100;
|
|
165
|
+
/**
|
|
166
|
+
* What is new in the group since `since` (ms): its messages, who joined — from the chat's service
|
|
167
|
+
* messages — and who the admins are. Reads only.
|
|
168
|
+
*/
|
|
169
|
+
export const gather = async (adapter, chatId, since) => {
|
|
170
|
+
const notes = [];
|
|
171
|
+
const historyAfter = adapter.historyAfter;
|
|
172
|
+
if (!historyAfter)
|
|
173
|
+
throw new CliError("validation_error", "this messenger cannot read a chat forward from a time");
|
|
174
|
+
const messages = [];
|
|
175
|
+
let more = true;
|
|
176
|
+
while (more && messages.length < CHECK_READS) {
|
|
177
|
+
const last = messages.at(-1);
|
|
178
|
+
const page = await historyAfter.call(adapter, chatId, {
|
|
179
|
+
limit: PAGE,
|
|
180
|
+
after: last ? { id: last.id } : { time: since },
|
|
181
|
+
});
|
|
182
|
+
messages.push(...page.items);
|
|
183
|
+
more = page.hasMore && page.items.length > 0;
|
|
184
|
+
}
|
|
185
|
+
const events = adapter.chatEvents ? (await adapter.chatEvents(chatId, { since })).events : [];
|
|
186
|
+
if (!adapter.chatEvents)
|
|
187
|
+
notes.push("this messenger does not say who joined, so only messages are judged");
|
|
188
|
+
const joinedIds = new Set(events
|
|
189
|
+
.filter((one) => one.event === "join" || one.event === "add")
|
|
190
|
+
.flatMap((one) => (one.people.length > 0 ? one.people.map((person) => person.id) : one.by.id ? [one.by.id] : [])));
|
|
191
|
+
const joined = joinedIds.size === 0 || !adapter.members
|
|
192
|
+
? []
|
|
193
|
+
: (await adapter.members(chatId, { offset: 0 })).items.filter((member) => joinedIds.has(member.id));
|
|
194
|
+
const admins = adapter.admins ? await adapter.admins(chatId) : null;
|
|
195
|
+
if (admins === null)
|
|
196
|
+
notes.push("the group's admins are not known, so only your own messages are exempt");
|
|
197
|
+
return {
|
|
198
|
+
messages,
|
|
199
|
+
joined,
|
|
200
|
+
answerers: new Set(admins ?? []),
|
|
201
|
+
service: new Set(events.map((one) => one.messageId)),
|
|
202
|
+
until: messages.at(-1)?.timestamp ?? null,
|
|
203
|
+
more,
|
|
204
|
+
notes,
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
export const MAX_ACTIONS = 10;
|
|
208
|
+
const undone = (row) => ["planned", "skipped", "failed"].includes(row.outcome);
|
|
209
|
+
/**
|
|
210
|
+
* Where the next check starts: after the newest message read, or just before the first message whose
|
|
211
|
+
* action is still undone — so it is judged again, and what came after it is still read. A person
|
|
212
|
+
* who joined and is still undone keeps the point where it was, since the join is not a row's message.
|
|
213
|
+
*/
|
|
214
|
+
export const nextPoint = (rows, found) => {
|
|
215
|
+
const waiting = rows.filter(undone);
|
|
216
|
+
if (waiting.some((row) => row.messageId === undefined))
|
|
217
|
+
return null;
|
|
218
|
+
const times = waiting
|
|
219
|
+
.map((row) => found.messages.find((message) => message.id === row.messageId)?.timestamp)
|
|
220
|
+
.filter((time) => time !== undefined)
|
|
221
|
+
.map(Date.parse);
|
|
222
|
+
if (times.length === 0)
|
|
223
|
+
return found.until;
|
|
224
|
+
return new Date(Math.min(...times) - 1).toISOString();
|
|
225
|
+
};
|
|
226
|
+
export const someUndone = (rows) => rows.some(undone);
|
|
227
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/moderation/check.ts"],"names":[],"mappings":"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"}
|