@hivemagnus/magnus-server 1.1.13 → 2.1.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 (89) hide show
  1. package/.env.example +37 -0
  2. package/README.md +36 -0
  3. package/agent-version.json +1 -1
  4. package/dist/ai/TOOLS.md +1 -1
  5. package/dist/cli/args.js +3 -1
  6. package/dist/cli/env-catalog.js +16 -0
  7. package/dist/cli/migrations.js +22 -0
  8. package/dist/cli/verify-initialization.js +12 -0
  9. package/dist/cli.js +28 -0
  10. package/dist/config/console-path.js +17 -0
  11. package/dist/config/env.js +32 -5
  12. package/dist/config/features.js +4 -1
  13. package/dist/config/oathweave.js +42 -0
  14. package/dist/config/rehearsal.js +22 -0
  15. package/dist/db/generated/prisma/internal/class.js +4 -4
  16. package/dist/db/generated/prisma/internal/prismaNamespace.js +17 -1
  17. package/dist/db/generated/prisma/internal/prismaNamespaceBrowser.js +17 -1
  18. package/dist/db/generated/prisma/models/CindertraceResponse.js +2 -0
  19. package/dist/db/generated/prisma/models/ProductInitialization.js +2 -0
  20. package/dist/db/read-retry.js +5 -1
  21. package/dist/db/seed.js +8 -0
  22. package/dist/index.js +28 -37
  23. package/dist/middleware/auth.js +21 -0
  24. package/dist/middleware/error-handler.js +10 -10
  25. package/dist/middleware/oathweave-verifier.js +23 -0
  26. package/dist/middleware/oathweave.js +115 -0
  27. package/dist/middleware/rate-limit.js +12 -3
  28. package/dist/openapi/spec.js +45 -4
  29. package/dist/queue/names.js +9 -0
  30. package/dist/queue/workers.js +9 -68
  31. package/dist/routes/assistant.js +30 -12
  32. package/dist/routes/cindertrace-response.js +183 -0
  33. package/dist/routes/console.js +33 -0
  34. package/dist/routes/cron.js +8 -5
  35. package/dist/routes/events-stream.js +10 -0
  36. package/dist/routes/files.js +2 -1
  37. package/dist/routes/fleet-gateway.js +69 -0
  38. package/dist/routes/heartbeat.js +1 -6
  39. package/dist/routes/hermes.js +26 -6
  40. package/dist/routes/hiveskills.js +116 -0
  41. package/dist/routes/library.js +3 -2
  42. package/dist/routes/logs.js +5 -0
  43. package/dist/routes/metrics.js +4 -3
  44. package/dist/routes/nodes.js +45 -8
  45. package/dist/routes/ops.js +24 -6
  46. package/dist/routes/profiling.js +2 -1
  47. package/dist/routes/roles.js +17 -9
  48. package/dist/routes/security-fusion.js +15 -600
  49. package/dist/routes/stats.js +8 -5
  50. package/dist/routes/terminal-ticket.js +3 -3
  51. package/dist/routes/terminal.js +2 -2
  52. package/dist/routes/webhooks.js +15 -15
  53. package/dist/sdk/node-api-client.js +23 -1
  54. package/dist/security/cindertrace-response.js +14 -0
  55. package/dist/security/native-completion-registry.js +14 -0
  56. package/dist/server.js +11 -14
  57. package/dist/services/ai-assistant-service.js +32 -6
  58. package/dist/services/ai-tools.js +15 -8
  59. package/dist/services/ardent-scope-enrollment.js +4 -2
  60. package/dist/services/command-resource-leases.js +2 -4
  61. package/dist/services/forecast-service.js +23 -8
  62. package/dist/services/ops-service.js +20 -25
  63. package/dist/services/prediction-service.js +2 -1
  64. package/dist/services/resource-enrollment.js +57 -4
  65. package/dist/services/secret-views.js +72 -0
  66. package/dist/services/security-export.js +4 -6
  67. package/dist/services/topology-service.js +2 -1
  68. package/dist/services/webhook-security.js +10 -1
  69. package/dist/services/webhook-service.js +14 -6
  70. package/dist/utils/node-url.js +2 -1
  71. package/dist/utils/safe-errors.js +130 -0
  72. package/node_modules/@hivemagnus/magnus-oathweave/LICENSE +202 -0
  73. package/node_modules/@hivemagnus/magnus-oathweave/README.md +20 -0
  74. package/node_modules/@hivemagnus/magnus-oathweave/dist/index.d.ts +61 -0
  75. package/node_modules/@hivemagnus/magnus-oathweave/dist/index.js +148 -0
  76. package/node_modules/@hivemagnus/magnus-oathweave/package.json +54 -0
  77. package/package.json +7 -3
  78. package/prisma/migrations/20261103000000_cindertrace_response_bridge/migration-impact.json +128 -0
  79. package/prisma/migrations/20261103000000_cindertrace_response_bridge/migration.sql +6 -0
  80. package/prisma/migrations/20261105010000_base_initialization/magnus-impact.json +1 -0
  81. package/prisma/migrations/20261105010000_base_initialization/migration.sql +5 -0
  82. package/prisma/schema.prisma +22 -0
  83. package/dist/services/security-fusion-actions.js +0 -22
  84. package/dist/services/security-fusion-evidence-integrity.js +0 -144
  85. package/dist/services/security-fusion-ingest.js +0 -101
  86. package/dist/services/security-fusion-outbox.js +0 -185
  87. package/dist/services/security-fusion-receipt-chain.js +0 -134
  88. package/dist/services/security-fusion-service.js +0 -751
  89. package/dist/services/security-fusion-verification.js +0 -50
@@ -1,50 +0,0 @@
1
- import { getDb } from '../db/index.js';
2
- import { securityFusionActionSources } from './security-fusion-actions.js';
3
- /** Derive a durable verification deadline from the signed command's persisted
4
- * completion, not a process-local timer or a heartbeat preceding the action. */
5
- export async function reconcileRestartVerification(now = new Date()) {
6
- const db = getDb();
7
- const actions = await db.securityFusionAction.findMany({
8
- where: { kind: 'service_restart', status: { in: ['dispatch_pending', 'executing', 'verifying'] } },
9
- orderBy: { createdAt: 'asc' }, take: 100,
10
- });
11
- for (const action of actions) {
12
- const outbox = await db.securityFusionCommandOutbox.findFirst({ where: { actionId: action.id, operation: 'execute' } });
13
- if (!outbox?.remoteCommandId)
14
- continue;
15
- const command = await db.remoteCommand.findUnique({ where: { id: outbox.remoteCommandId }, include: { result: true } });
16
- if (!command || !['COMPLETED', 'FAILED', 'TIMEOUT', 'CANCELLED'].includes(command.status))
17
- continue;
18
- const completedAt = command.completedAt;
19
- const successful = command.status === 'COMPLETED' && command.result?.exitCode === 0;
20
- const snapshot = successful && completedAt ? await db.healthSnapshot.findFirst({
21
- where: { nodeId: action.nodeId, timestamp: { gt: completedAt, gte: new Date(now.getTime() - 120_000), lte: now } },
22
- orderBy: { timestamp: 'desc' },
23
- }) : null;
24
- let active = false;
25
- try {
26
- const services = snapshot ? JSON.parse(snapshot.services) : [];
27
- const name = action.serviceName?.replace(/\.service$/, '');
28
- active = Boolean(name && Array.isArray(services) && services.some(s => s && typeof s.name === 'string' && s.name.replace(/\.service$/, '') === name && s.status === 'active'));
29
- }
30
- catch { /* malformed evidence never proves recovery */ }
31
- const expired = !completedAt || now.getTime() - completedAt.getTime() >= 180_000;
32
- const status = !successful || expired ? 'failed' : active ? 'succeeded' : 'verifying';
33
- await db.$transaction(async (tx) => {
34
- const changed = await tx.securityFusionAction.updateMany({
35
- where: { id: action.id, status: { in: securityFusionActionSources(status) } },
36
- data: { status, resultJson: JSON.stringify({ commandId: command.id,
37
- commandCompletedAt: completedAt?.toISOString(), verificationDeadline: completedAt ? new Date(completedAt.getTime() + 180_000).toISOString() : null,
38
- serviceName: action.serviceName, serviceVerified: active, snapshotId: snapshot?.id ?? null,
39
- reason: !successful ? 'Command failed or outcome unknown' : expired ? 'Service recovery verification expired' : active ? 'Fresh service evidence passed' : 'Awaiting fresh service evidence',
40
- }) },
41
- });
42
- if (changed.count && status !== 'verifying')
43
- await tx.securityFusionCaseActivity.create({ data: {
44
- caseId: action.caseId, kind: `containment.${status}`, actorId: 'system:command-reconciler',
45
- detailJson: JSON.stringify({ actionId: action.id, commandId: command.id, serviceVerified: active, snapshotId: snapshot?.id ?? null }),
46
- } });
47
- });
48
- }
49
- }
50
- //# sourceMappingURL=security-fusion-verification.js.map