@hivemagnus/magnus-server 1.1.12 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/.env.example +5 -0
  2. package/README.md +4 -0
  3. package/agent-version.json +1 -1
  4. package/dist/cli/env-catalog.js +3 -0
  5. package/dist/config/env.js +4 -5
  6. package/dist/config/features.js +1 -1
  7. package/dist/db/generated/prisma/internal/class.js +4 -4
  8. package/dist/db/generated/prisma/internal/prismaNamespace.js +12 -1
  9. package/dist/db/generated/prisma/internal/prismaNamespaceBrowser.js +12 -1
  10. package/dist/db/generated/prisma/models/CindertraceResponse.js +2 -0
  11. package/dist/index.js +1 -16
  12. package/dist/openapi/spec.js +7 -2
  13. package/dist/queue/workers.js +0 -65
  14. package/dist/routes/cindertrace-response.js +183 -0
  15. package/dist/routes/heartbeat.js +1 -6
  16. package/dist/routes/security-fusion.js +15 -600
  17. package/dist/sdk/node-api-client.js +12 -0
  18. package/dist/security/cindertrace-response.js +14 -0
  19. package/dist/security/native-completion-registry.js +12 -0
  20. package/dist/server.js +3 -14
  21. package/dist/services/command-resource-leases.js +2 -4
  22. package/dist/services/security-export.js +4 -6
  23. package/package.json +3 -3
  24. package/prisma/migrations/20261103000000_cindertrace_response_bridge/migration-impact.json +128 -0
  25. package/prisma/migrations/20261103000000_cindertrace_response_bridge/migration.sql +6 -0
  26. package/prisma/schema.prisma +13 -0
  27. package/dist/services/security-fusion-actions.js +0 -22
  28. package/dist/services/security-fusion-evidence-integrity.js +0 -144
  29. package/dist/services/security-fusion-ingest.js +0 -101
  30. package/dist/services/security-fusion-outbox.js +0 -185
  31. package/dist/services/security-fusion-receipt-chain.js +0 -134
  32. package/dist/services/security-fusion-service.js +0 -751
  33. package/dist/services/security-fusion-verification.js +0 -50
package/.env.example CHANGED
@@ -200,3 +200,8 @@ CORS_ORIGIN=https://magnus.example.com:3000
200
200
  # MAGNUS_AGENT_UPGRADE_MAX_FAILURES=2
201
201
  # The retired git-checkout self-update endpoints (source installs only).
202
202
  # MAGNUS_LEGACY_GIT_SELF_UPDATE=false
203
+
204
+ # Optional Cindertrace response bridge. Configure a new dedicated secret.
205
+ # CINDERTRACE_RESPONSE_SECRET=
206
+ # CINDERTRACE_RESTART_ALLOWLIST=
207
+ # CINDERTRACE_PROTECTED_TARGET_IDS=
package/README.md CHANGED
@@ -187,3 +187,7 @@ migrations are never edited.
187
187
  ## License
188
188
 
189
189
  Apache-2.0. See [LICENSE](LICENSE).
190
+
191
+ ## Cindertrace
192
+
193
+ Embedded Security Fusion is retired. See [migration and response configuration](../../docs/CINDERTRACE_MIGRATION.md). CINDERTRACE_RESPONSE_SECRET, CINDERTRACE_RESTART_ALLOWLIST, and CINDERTRACE_PROTECTED_TARGET_IDS configure the optional managed response adapter.
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "1.1.12"
2
+ "version": "2.0.0"
3
3
  }
@@ -60,6 +60,9 @@ export const ENV_CATALOG = [
60
60
  { name: 'MAGNUS_LESSONS_HIVEMEM_URL', group: 'hivemem', description: 'Optional HiveMem URL for operational lessons.' },
61
61
  { name: 'MAGNUS_LESSONS_HIVEMEM_TOKEN', group: 'hivemem', secret: true, description: 'Token for MAGNUS_LESSONS_HIVEMEM_URL.' },
62
62
  // ── Security Fusion / external security console ──
63
+ { name: 'CINDERTRACE_RESPONSE_SECRET', group: 'security', description: 'Dedicated HMAC credential for the optional Cindertrace managed response bridge.' },
64
+ { name: 'CINDERTRACE_RESTART_ALLOWLIST', group: 'security', description: 'Comma-separated allowlisted response service names; empty by default.' },
65
+ { name: 'CINDERTRACE_PROTECTED_TARGET_IDS', group: 'security', description: 'Comma-separated node IDs that Cindertrace must never isolate.' },
63
66
  { name: 'SECURITY_FUSION_MODE', group: 'security', default: 'off', description: 'off (feature disabled), local (cases and evidence in this server) or remote (export to an external security console).' },
64
67
  { name: 'SECURITY_FUSION_RECEIPT_SIGNING_KEY', group: 'security', secret: true, requiredWhen: 'SECURITY_FUSION_MODE=local', description: 'Dedicated key that signs Security Fusion deletion receipts (min 32 chars).' },
65
68
  { name: 'SECURITY_FUSION_EVIDENCE_DIR', group: 'security', description: 'Private evidence directory (local mode).' },
@@ -55,7 +55,10 @@ export const envSchema = z.object({
55
55
  .regex(/^\s*[a-z0-9](?:[a-z0-9.-]{0,98}[a-z0-9])?\s*(?:,\s*[a-z0-9](?:[a-z0-9.-]{0,98}[a-z0-9])?\s*)*$/, 'must list domain prefixes made of a-z, 0-9, "." and "-", separated by commas')
56
56
  .optional(),
57
57
  // Security Fusion: off (default) | local (in-process) | remote (external security console).
58
- SECURITY_FUSION_MODE: z.enum(['off', 'local', 'remote']).default('off'),
58
+ SECURITY_FUSION_MODE: z.enum(['off', 'remote'], { error: 'Embedded Security Fusion local mode is retired; export and import state into Cindertrace before selecting remote mode (docs/CINDERTRACE_MIGRATION.md)' }).default('off'),
59
+ CINDERTRACE_RESPONSE_SECRET: z.string().min(32).optional(),
60
+ CINDERTRACE_RESTART_ALLOWLIST: z.string().optional(),
61
+ CINDERTRACE_PROTECTED_TARGET_IDS: z.string().optional(),
59
62
  SECURITY_FUSION_API_URL: z.string().url().optional(),
60
63
  MAGNUS_SECURITY_CONSOLE_URL: z.string().url().optional(),
61
64
  SECURITY_APPROVAL_BRIDGE_TOKEN: z.string().min(32).optional(),
@@ -246,10 +249,6 @@ export const envSchema = z.object({
246
249
  message: 'AGENT_DISCOVERY_SECRET is required when ENABLE_AGENT_DISCOVERY=true',
247
250
  });
248
251
  }
249
- if (env.SECURITY_FUSION_MODE === 'local' && !env.SECURITY_FUSION_RECEIPT_SIGNING_KEY) {
250
- ctx.addIssue({ code: z.ZodIssueCode.custom, path: ['SECURITY_FUSION_RECEIPT_SIGNING_KEY'],
251
- message: 'SECURITY_FUSION_RECEIPT_SIGNING_KEY is required when SECURITY_FUSION_MODE=local' });
252
- }
253
252
  if (env.MAGNUS_PLUGIN_API_ENABLED) {
254
253
  if (!env.MAGNUS_PLUGIN_READ_TOKEN_DIGESTS_JSON)
255
254
  ctx.addIssue({ code: z.ZodIssueCode.custom, path: ['MAGNUS_PLUGIN_READ_TOKEN_DIGESTS_JSON'],
@@ -5,7 +5,7 @@ export function featureFlags(env = process.env) {
5
5
  iam: Boolean(env['IAM_CORE_URL']),
6
6
  router: Boolean(env['MAGNUS_ROUTER_URL'] || env['HIVE_ROUTER_URL']),
7
7
  hivemem: Boolean(env['HIVEMEM_URL']),
8
- securityFusion: mode === 'local' || mode === 'remote' ? mode : 'off',
8
+ securityFusion: mode === 'remote' ? mode : 'off',
9
9
  securityConsoleUrl: env['MAGNUS_SECURITY_CONSOLE_URL'] || null,
10
10
  pluginApi: truthy(env['MAGNUS_PLUGIN_API_ENABLED']),
11
11
  hermesRegistry: truthy(env['MAGNUS_HERMES_REGISTRY_ENABLED']),