@helyx/cli 1.1.0 → 1.2.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/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 00d33b3: Add the Testing Moderation and Auto Moderation modules, including accountable
8
+ staff cases, private violation threads, Discord-native rule ownership, bounded
9
+ rule imports, deterministic repeat-offender actions and shared Hosted and
10
+ Self-Hosted Enhanced matching. Add the private Helyx Ecko transport, operational
11
+ gate, aggregate health reporting, content-free scanner telemetry and portable
12
+ Self-Hosted composition while preserving Standard native enforcement as the
13
+ failure fallback.
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [00d33b3]
18
+ - @helyx/bot@1.2.0
19
+ - @helyx/config@1.2.0
20
+ - @helyx/database@2.2.0
21
+
22
+ ## 1.1.2
23
+
24
+ ### Patch Changes
25
+
26
+ - Refresh public package artifacts for the current dependency graph and ship the updated self-host catalogue.
27
+ - Generate the explicit `self-hosted` runtime profile required by reviewed
28
+ feature-scoped adapters.
29
+
30
+ ## 1.1.1
31
+
32
+ ### Patch Changes
33
+
34
+ - Refresh the embedded self-host catalogue for the Analytics 1.0.4
35
+ large-server report fix.
36
+
3
37
  ## 1.1.0
4
38
 
5
39
  ### Minor Changes
package/README.md CHANGED
@@ -16,6 +16,10 @@ helyx self-host update --confirm
16
16
 
17
17
  `self-host init` retrieves the current reviewed catalogue from the fixed Helyx API endpoint, validates a downloaded build manifest against it, creates a new starter-project directory, pins the runtime and selected official modules, generates a lockfile with lifecycle scripts disabled, and writes checksums. The request has strict timeout, response-size, JSON-schema and official-package checks; no arbitrary catalogue URL or stale bundled fallback is accepted. Add `--install` only when the dependencies should also be installed locally. Unknown, unpublished, duplicated, stale or modified package selections fail closed.
18
18
 
19
+ The generated environment identifies itself explicitly as `self-hosted` so
20
+ deployment-neutral feature access can select embedded adapters without relying
21
+ on billing or hosting-provider variables.
22
+
19
23
  Generated projects include `DOCUMENTATION.md`, which points to the
20
24
  version-matched public documentation bundled with the installed `@helyx/bot`
21
25
  package.
@@ -16,7 +16,7 @@ export interface GeneratedSelfHostProject {
16
16
  files: string[];
17
17
  }
18
18
  export declare function generateSelfHostProject(options: GenerateSelfHostProjectOptions): Promise<GeneratedSelfHostProject>;
19
- type HostedOnlyBotEnvironment = "HELYX_SUPPORT_SERVICE_SECRET" | "HELYX_SUPPORT_STAFF_CHANNEL_ID" | "HELYX_VERIFICATION_ENABLED" | "HELYX_VERIFICATION_INSTALLATION_ID" | "HELYX_VERIFICATION_URL" | "HELYX_VERIFICATION_INTERNAL_SECRET" | "HELYX_VERIFICATION_SIGNING_PUBLIC_KEYS" | "STRIPE_ENVIRONMENT";
19
+ type HostedOnlyBotEnvironment = "HELYX_SUPPORT_SERVICE_SECRET" | "HELYX_SUPPORT_STAFF_CHANNEL_ID" | "HELYX_VERIFICATION_ENABLED" | "HELYX_VERIFICATION_INSTALLATION_ID" | "HELYX_VERIFICATION_URL" | "HELYX_VERIFICATION_INTERNAL_SECRET" | "HELYX_VERIFICATION_SIGNING_PUBLIC_KEYS" | "HELYX_ECKO_TRANSPORT_SECRET" | "HELYX_ECKO_TRANSPORT_PREVIOUS_SECRET" | "STRIPE_ENVIRONMENT";
20
20
  type EnvironmentExample = Record<Exclude<keyof BotEnvironmentInput, HostedOnlyBotEnvironment>, {
21
21
  value: string;
22
22
  optional: boolean;
@@ -273,9 +273,22 @@ export const selfHostEnvironmentContract = {
273
273
  optional: false,
274
274
  },
275
275
  DATABASE_SSL: { value: "disable", optional: false },
276
+ HELYX_RUNTIME_PROFILE: { value: "self-hosted", optional: false },
277
+ HELYX_DEPLOYMENT_ENVIRONMENT: { value: "self-hosted", optional: false },
276
278
  DISCORD_TOKEN: { value: "replace-me", optional: false },
277
279
  DISCORD_CLIENT_ID: { value: "12345678901234567", optional: false },
278
280
  HELYX_MESSAGE_CONTENT_ENABLED: { value: "false", optional: false },
281
+ HELYX_AUTOMOD_EMBEDDED_WORKERS: { value: "1", optional: false },
282
+ HELYX_AUTOMOD_EMBEDDED_QUEUE_ITEMS: { value: "5000", optional: true },
283
+ HELYX_AUTOMOD_EMBEDDED_QUEUE_BYTES: { value: "67108864", optional: true },
284
+ HELYX_AUTOMOD_EMBEDDED_QUEUE_ITEMS_PER_GUILD: {
285
+ value: "100",
286
+ optional: true,
287
+ },
288
+ HELYX_AUTOMOD_EMBEDDED_REFRESH_SECONDS: {
289
+ value: "300",
290
+ optional: true,
291
+ },
279
292
  DISCORD_INTERNAL_GUILD_ID: {
280
293
  value: "12345678901234567",
281
294
  optional: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helyx/cli",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Command-line tools for running and generating self-hosted Helyx deployments.",
5
5
  "keywords": [
6
6
  "helyx",
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
- "catalogueVersion": 62,
3
+ "catalogueVersion": 67,
4
4
  "core": {
5
5
  "package": "@helyx/bot",
6
- "version": "1.1.0",
6
+ "version": "1.2.0",
7
7
  "availability": "published"
8
8
  },
9
9
  "generator": {
10
10
  "package": "@helyx/cli",
11
- "version": "1.1.0",
11
+ "version": "1.2.0",
12
12
  "command": "helyx",
13
13
  "availability": "published"
14
14
  },
@@ -16,7 +16,7 @@
16
16
  {
17
17
  "id": "helyx.feedback",
18
18
  "package": "@helyx/module-feedback",
19
- "version": "1.2.1",
19
+ "version": "1.2.3",
20
20
  "name": "Feedback",
21
21
  "description": "Collects simple feedback from Discord server members.",
22
22
  "category": "Community",
@@ -34,7 +34,7 @@
34
34
  {
35
35
  "id": "helyx.welcome",
36
36
  "package": "@helyx/module-welcome",
37
- "version": "1.2.3",
37
+ "version": "1.2.4",
38
38
  "name": "Welcome",
39
39
  "description": "Greets new members and can give them a starting role.",
40
40
  "category": "Community",
@@ -52,7 +52,7 @@
52
52
  {
53
53
  "id": "helyx.suggestions",
54
54
  "package": "@helyx/module-suggestions",
55
- "version": "1.2.1",
55
+ "version": "1.2.2",
56
56
  "name": "Suggestions",
57
57
  "description": "Collects community ideas with configurable reaction or button voting.",
58
58
  "category": "Community",
@@ -70,7 +70,7 @@
70
70
  {
71
71
  "id": "helyx.polls",
72
72
  "package": "@helyx/module-polls",
73
- "version": "1.1.1",
73
+ "version": "1.1.2",
74
74
  "name": "Polls",
75
75
  "description": "Run clear single or multiple-choice polls.",
76
76
  "category": "Community",
@@ -88,7 +88,7 @@
88
88
  {
89
89
  "id": "helyx.starboard",
90
90
  "package": "@helyx/module-starboard",
91
- "version": "1.0.7",
91
+ "version": "1.0.8",
92
92
  "name": "Starboard",
93
93
  "description": "Highlight messages your community values.",
94
94
  "category": "Community",
@@ -106,7 +106,7 @@
106
106
  {
107
107
  "id": "helyx.levels",
108
108
  "package": "@helyx/module-levels",
109
- "version": "1.1.2",
109
+ "version": "1.1.3",
110
110
  "name": "Levels",
111
111
  "description": "Optional participation levels and rewards.",
112
112
  "category": "Community",
@@ -214,43 +214,43 @@
214
214
  {
215
215
  "id": "helyx.moderation",
216
216
  "package": "@helyx/module-moderation",
217
- "version": null,
217
+ "version": "1.0.1",
218
218
  "name": "Moderation",
219
- "description": "Warnings, timeouts, kicks and bans with audit context.",
219
+ "description": "Apply accountable staff moderation actions and review durable cases.",
220
220
  "category": "Safety",
221
- "availability": "planned",
222
- "releaseStatus": "planned",
221
+ "availability": "unpublished",
222
+ "releaseStatus": "testing",
223
223
  "dependencies": [],
224
224
  "moduleKind": "customer_feature",
225
225
  "customerSelectable": true,
226
226
  "countsAsInstalledModule": true,
227
227
  "healthExposure": "direct",
228
- "deploymentSupport": "unclassified",
229
- "credentialRisk": "unclassified",
230
- "deploymentReason": "No canonical v0.4 manifest exists; deployment and credential policy remain undecided."
228
+ "deploymentSupport": "both",
229
+ "credentialRisk": "none",
230
+ "deploymentReason": "Hosted and Self-Hosted installations use only Helyx runtime and Discord capabilities available inside the selected installation."
231
231
  },
232
232
  {
233
233
  "id": "helyx.automod",
234
234
  "package": "@helyx/module-automod",
235
- "version": null,
236
- "name": "Auto moderation",
237
- "description": "Apply transparent rules to spam and unsafe content.",
235
+ "version": "1.0.1",
236
+ "name": "Auto Moderation",
237
+ "description": "Manage transparent Discord-native Auto Moderation rules and structural enforcement receipts.",
238
238
  "category": "Safety",
239
- "availability": "planned",
240
- "releaseStatus": "planned",
239
+ "availability": "unpublished",
240
+ "releaseStatus": "testing",
241
241
  "dependencies": [],
242
242
  "moduleKind": "customer_feature",
243
243
  "customerSelectable": true,
244
244
  "countsAsInstalledModule": true,
245
245
  "healthExposure": "direct",
246
- "deploymentSupport": "unclassified",
247
- "credentialRisk": "unclassified",
248
- "deploymentReason": "No canonical v0.4 manifest exists; deployment and credential policy remain undecided."
246
+ "deploymentSupport": "both",
247
+ "credentialRisk": "none",
248
+ "deploymentReason": "Standard rules use Discord and Helyx runtime capabilities available in both Hosted and Self-Hosted installations."
249
249
  },
250
250
  {
251
251
  "id": "helyx.account-gate",
252
252
  "package": "@helyx/module-account-gate",
253
- "version": "2.0.0",
253
+ "version": "2.0.2",
254
254
  "name": "Access Control",
255
255
  "description": "Require new members to complete configurable Discord interaction checks before gaining access.",
256
256
  "category": "Safety",
@@ -304,7 +304,7 @@
304
304
  {
305
305
  "id": "helyx.forms",
306
306
  "package": "@helyx/module-forms",
307
- "version": "2.0.0",
307
+ "version": "2.0.1",
308
308
  "name": "Forms",
309
309
  "description": "Collect reusable structured responses through Discord modals.",
310
310
  "category": "Support & Staff",
@@ -322,7 +322,7 @@
322
322
  {
323
323
  "id": "helyx.faq",
324
324
  "package": "@helyx/module-faq",
325
- "version": "1.0.6",
325
+ "version": "1.0.7",
326
326
  "name": "FAQ",
327
327
  "description": "Create reusable server answers with exact text triggers.",
328
328
  "category": "Support & Staff",
@@ -448,7 +448,7 @@
448
448
  {
449
449
  "id": "helyx.auto-message",
450
450
  "package": "@helyx/module-auto-message",
451
- "version": "1.0.2",
451
+ "version": "1.0.3",
452
452
  "name": "Auto-message",
453
453
  "description": "Publish rich Discord messages on bounded recurring schedules.",
454
454
  "category": "Auto Tools",
@@ -466,7 +466,7 @@
466
466
  {
467
467
  "id": "helyx.message-embedder",
468
468
  "package": "@helyx/module-message-embedder",
469
- "version": "1.0.2",
469
+ "version": "1.0.3",
470
470
  "name": "Message Embedder Builder",
471
471
  "description": "Create and maintain Helyx-owned rich Discord messages.",
472
472
  "category": "Automation",
@@ -502,7 +502,7 @@
502
502
  {
503
503
  "id": "helyx.afk",
504
504
  "package": "@helyx/module-afk",
505
- "version": "2.0.0",
505
+ "version": "2.0.1",
506
506
  "name": "AFK",
507
507
  "description": "Set server-specific away statuses and bounded mention notices.",
508
508
  "category": "Automation",
@@ -520,7 +520,7 @@
520
520
  {
521
521
  "id": "helyx.reactionroles",
522
522
  "package": "@helyx/module-reactionroles",
523
- "version": "1.0.18",
523
+ "version": "1.0.19",
524
524
  "name": "Reaction Roles",
525
525
  "description": "Let members select approved roles themselves.",
526
526
  "category": "Automation",
@@ -538,7 +538,7 @@
538
538
  {
539
539
  "id": "helyx.reminders",
540
540
  "package": "@helyx/module-reminders",
541
- "version": "1.0.2",
541
+ "version": "1.0.3",
542
542
  "name": "Reminders",
543
543
  "description": "Schedule bounded one-time personal and server reminders.",
544
544
  "category": "Automation",
@@ -574,7 +574,7 @@
574
574
  {
575
575
  "id": "helyx.scheduler",
576
576
  "package": "@helyx/module-scheduler",
577
- "version": "1.0.2",
577
+ "version": "1.0.3",
578
578
  "name": "Scheduler",
579
579
  "description": "Run reviewed message and role actions on bounded schedules.",
580
580
  "category": "Automation",
@@ -610,7 +610,7 @@
610
610
  {
611
611
  "id": "helyx.tags",
612
612
  "package": "@helyx/module-tags",
613
- "version": "1.0.6",
613
+ "version": "1.0.7",
614
614
  "name": "Tags",
615
615
  "description": "Save and share short server snippets.",
616
616
  "category": "Automation",
@@ -628,7 +628,7 @@
628
628
  {
629
629
  "id": "helyx.sticky-messages",
630
630
  "package": "@helyx/module-sticky-messages",
631
- "version": "1.0.2",
631
+ "version": "1.0.3",
632
632
  "name": "Sticky Messages",
633
633
  "description": "Keep one rich message near the bottom of selected channels.",
634
634
  "category": "Automation",
@@ -646,7 +646,7 @@
646
646
  {
647
647
  "id": "helyx.role-expiry",
648
648
  "package": "@helyx/module-role-expiry",
649
- "version": "1.0.2",
649
+ "version": "1.0.3",
650
650
  "name": "Role Expiry",
651
651
  "description": "Grant and safely remove time-limited Discord roles.",
652
652
  "category": "Automation",
@@ -682,7 +682,7 @@
682
682
  {
683
683
  "id": "helyx.events",
684
684
  "package": "@helyx/module-events",
685
- "version": "1.0.2",
685
+ "version": "1.0.3",
686
686
  "name": "Events",
687
687
  "description": "Publish server events, collect RSVPs and record explicit attendance.",
688
688
  "category": "Engagement",
@@ -700,7 +700,7 @@
700
700
  {
701
701
  "id": "helyx.community-goals",
702
702
  "package": "@helyx/module-community-goals",
703
- "version": "1.0.2",
703
+ "version": "1.0.3",
704
704
  "name": "Community Goals",
705
705
  "description": "Run shared, measurable community challenges with reviewed member progress.",
706
706
  "category": "Community",
@@ -718,7 +718,7 @@
718
718
  {
719
719
  "id": "helyx.giveaways",
720
720
  "package": "@helyx/module-giveaways",
721
- "version": "2.0.0",
721
+ "version": "2.0.1",
722
722
  "name": "Giveaways",
723
723
  "description": "Run auditable giveaways with eligibility rules.",
724
724
  "category": "Engagement",
@@ -736,7 +736,7 @@
736
736
  {
737
737
  "id": "helyx.birthdays",
738
738
  "package": "@helyx/module-birthdays",
739
- "version": "1.0.2",
739
+ "version": "1.0.3",
740
740
  "name": "Birthdays",
741
741
  "description": "Celebrate explicit member birthday opt-ins without storing birth years or ages.",
742
742
  "category": "Engagement",
@@ -754,7 +754,7 @@
754
754
  {
755
755
  "id": "helyx.counting",
756
756
  "package": "@helyx/module-counting",
757
- "version": "1.0.8",
757
+ "version": "1.0.9",
758
758
  "name": "Counting",
759
759
  "description": "A focused, server-scoped Discord counting game.",
760
760
  "category": "Gaming",
@@ -772,7 +772,7 @@
772
772
  {
773
773
  "id": "helyx.trivia",
774
774
  "package": "@helyx/module-trivia",
775
- "version": "1.1.1",
775
+ "version": "1.1.2",
776
776
  "name": "Trivia",
777
777
  "description": "Play private trivia rounds from a saved question catalogue.",
778
778
  "category": "Gaming",
@@ -880,7 +880,7 @@
880
880
  {
881
881
  "id": "helyx.achievements",
882
882
  "package": "@helyx/module-achievements",
883
- "version": "2.0.0",
883
+ "version": "2.0.1",
884
884
  "name": "Achievements",
885
885
  "description": "Configurable member milestones, scores and optional rewards.",
886
886
  "category": "Gaming",
@@ -916,7 +916,7 @@
916
916
  {
917
917
  "id": "helyx.logging",
918
918
  "package": "@helyx/module-logging",
919
- "version": "1.1.18",
919
+ "version": "1.1.19",
920
920
  "name": "Logging",
921
921
  "description": "Posts configurable activity records from enabled Helyx modules.",
922
922
  "category": "Insights",
@@ -934,7 +934,7 @@
934
934
  {
935
935
  "id": "helyx.analytics",
936
936
  "package": "@helyx/module-analytics",
937
- "version": "1.0.3",
937
+ "version": "1.0.6",
938
938
  "name": "Analytics",
939
939
  "description": "Generate private, bounded analytics reports from current Discord metadata.",
940
940
  "category": "Insights",
@@ -952,7 +952,7 @@
952
952
  {
953
953
  "id": "helyx.invite-tracking",
954
954
  "package": "@helyx/module-invite-tracking",
955
- "version": "1.0.2",
955
+ "version": "1.0.3",
956
956
  "name": "Invite Tracking",
957
957
  "description": "Attribute observed member joins through bounded Discord invite-use snapshots.",
958
958
  "category": "Insights",
@@ -970,7 +970,7 @@
970
970
  {
971
971
  "id": "helyx.health",
972
972
  "package": "@helyx/module-health",
973
- "version": "1.0.7",
973
+ "version": "1.0.8",
974
974
  "name": "Server Health",
975
975
  "description": "Scan your Discord server for configuration, safety and capacity issues.",
976
976
  "category": "Insights",
@@ -1060,7 +1060,7 @@
1060
1060
  {
1061
1061
  "id": "helyx.nexus-core",
1062
1062
  "package": "@helyx/module-nexus-core",
1063
- "version": "2.0.0",
1063
+ "version": "2.0.1",
1064
1064
  "name": "Nexus Core",
1065
1065
  "description": "Provides the shared Nexus balance, ledger, terminology and command namespace.",
1066
1066
  "category": "Gaming",
@@ -1078,7 +1078,7 @@
1078
1078
  {
1079
1079
  "id": "helyx.nexus-rewards",
1080
1080
  "package": "@helyx/module-nexus-rewards",
1081
- "version": "1.0.7",
1081
+ "version": "1.0.8",
1082
1082
  "name": "Nexus Rewards",
1083
1083
  "description": "Configure Daily Claim and approved ways members earn Nexus units.",
1084
1084
  "category": "Community",
@@ -1101,7 +1101,7 @@
1101
1101
  {
1102
1102
  "id": "helyx.nexus-economy",
1103
1103
  "package": "@helyx/module-nexus-economy",
1104
- "version": "1.0.8",
1104
+ "version": "1.0.9",
1105
1105
  "name": "Nexus Economy",
1106
1106
  "description": "Run a Nexus Exchange with server rewards and member inventory.",
1107
1107
  "category": "Gaming",
@@ -1,11 +1,23 @@
1
1
  # REQUIRED — EDIT THESE VALUES
2
2
 
3
+ HELYX_RUNTIME_PROFILE=self-hosted
4
+ HELYX_DEPLOYMENT_ENVIRONMENT=self-hosted
5
+
3
6
  # Discord
4
7
  DISCORD_TOKEN=replace-me
5
8
  DISCORD_CLIENT_ID=12345678901234567
6
9
  # Explicit privileged gateway opt-in. Keep false unless a reviewed loaded module
7
10
  # requires message content and it is enabled in the Discord developer portal.
8
11
  HELYX_MESSAGE_CONTENT_ENABLED=false
12
+ # Enhanced Auto Moderation stays inside this bot process. One worker is the
13
+ # recommended default; increase only after measuring local CPU and memory.
14
+ HELYX_AUTOMOD_EMBEDDED_WORKERS=1
15
+ # Optional conservative queue overrides (hard ceilings: 5000 items, 64 MiB,
16
+ # 100 items per server). Defaults are used when these remain commented.
17
+ # HELYX_AUTOMOD_EMBEDDED_QUEUE_ITEMS=5000
18
+ # HELYX_AUTOMOD_EMBEDDED_QUEUE_BYTES=67108864
19
+ # HELYX_AUTOMOD_EMBEDDED_QUEUE_ITEMS_PER_GUILD=100
20
+ # HELYX_AUTOMOD_EMBEDDED_REFRESH_SECONDS=300
9
21
  # Enable only when member inspection modules are loaded and the Discord Server
10
22
  # Members Intent is enabled in the Discord developer portal.
11
23
  HELYX_GUILD_MEMBERS_ENABLED=false
@@ -58,6 +58,15 @@ If a provider cannot run `npm ci`, execute `npm start`, or connect to PostgreSQL
58
58
  2. Copy the application ID into `DISCORD_CLIENT_ID`. Generate a bot token and place it directly in `.env` or the host's variables panel; never place that token in Discord, Git, screenshots or support messages.
59
59
  3. Install the bot using both the `bot` and `applications.commands` scopes. Review the permissions required by your selected modules and grant only what you intend; administrator access is convenient but not required by Helyx core.
60
60
 
61
+ If Auto Moderation Enhanced mode is selected, also enable the privileged Message
62
+ Content intent in the developer portal and set
63
+ `HELYX_MESSAGE_CONTENT_ENABLED=true`. Enhanced scanning uses bounded worker
64
+ threads inside this same bot and the same PostgreSQL database. Keep the default
65
+ one worker until host CPU and memory measurements justify a value from two to
66
+ four. No separate Ecko service, Redis instance, public endpoint or second
67
+ database is required; unhealthy workers fall back to Discord-native Standard
68
+ coverage.
69
+
61
70
  `npm start` validates the environment, connects to PostgreSQL, applies core and selected-module migrations safely, validates installed modules, synchronises Discord commands and then reports readiness. Do not run a separate migration command before every start. `npm run migrate` is available when you deliberately need to apply core migrations without starting Discord.
62
71
 
63
72
  `npm run doctor` validates the environment, PostgreSQL connection, existing migration history and selected packages without signing in to Discord or modifying the database. On a new database it reports migrations that `npm start` will apply automatically.