Add Emberwake Cloud Ecosystem deploy hub with AWS and generic spread templates.
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled

Unified expandable panels with mermaid flows, ZIP export, connection tests, and Playwright smoke coverage.
This commit is contained in:
AetherForge
2026-06-07 10:03:22 -07:00
parent 20f083b111
commit 5b5fc7c01c
36 changed files with 1305 additions and 83 deletions

View File

@@ -0,0 +1,17 @@
import { describe, expect, it } from 'vitest';
import { CLOUD_SPREAD_METHODS, cloudMethodsByGroup } from './cloudSpreadMethods';
describe('cloudSpreadMethods', () => {
it('defines eight cloud deploy methods', () => {
expect(CLOUD_SPREAD_METHODS).toHaveLength(8);
expect(cloudMethodsByGroup('aws')).toHaveLength(6);
expect(cloudMethodsByGroup('generic')).toHaveLength(2);
});
it('each method has mermaid flow and zip name', () => {
for (const m of CLOUD_SPREAD_METHODS) {
expect(m.mermaid).toMatch(/flowchart/);
expect(m.zipName).toMatch(/^aetherforge-.*\.zip$/);
}
});
});

View File

@@ -0,0 +1,142 @@
/** Cloud deploy hub — AWS ecosystem + generic S3-compatible methods. */
import { SPREAD_TEMPLATES } from './spreadTemplateExport';
import { spreadTechniqueDocUrl } from './spreadTechniques';
export type CloudMethodGroup = 'aws' | 'generic';
export type CloudMethodId =
| 's3-cloudfront'
| 'ssm-document'
| 'launch-template'
| 'fargate'
| 'eventbridge'
| 'cloud-map'
| 'minio'
| 'curl-manifest';
export interface CloudSpreadMethod {
id: CloudMethodId;
group: CloudMethodGroup;
label: string;
hint: string;
docAnchor: string;
mermaid: string;
zipName: string;
connectionTest?: { kind: string; endpointKey: 'serverUrl' | 'minioEndpoint' | 'cloudfrontDomain' | 'bucketRegion' };
}
export const CLOUD_SPREAD_METHODS: CloudSpreadMethod[] = [
{
id: 's3-cloudfront',
group: 'aws',
label: 'S3 + CloudFront erasure swarm',
hint: 'Sync ReedSolomon shards to S3; agents fetch via CloudFront OAC.',
docAnchor: 'aws-s3-cloudfront',
zipName: 'aetherforge-s3-cloudfront.zip',
connectionTest: { kind: 's3', endpointKey: 'bucketRegion' },
mermaid: `flowchart LR
Deck[Command deck] -->|aws s3 sync| S3[(S3 bucket)]
S3 --> CF[CloudFront]
CF --> Agent[Agent shard fetch]`,
},
{
id: 'ssm-document',
group: 'aws',
label: 'SSM Run Command document',
hint: 'Owned EC2 — document curls install.sh from your deck.',
docAnchor: 'ssm-document',
zipName: 'aetherforge-ssm-document.zip',
mermaid: `flowchart LR
Deck[Command deck] --> Doc[SSM document]
Doc --> EC2[Managed instance]
EC2 -->|curl install.sh| Deck`,
},
{
id: 'launch-template',
group: 'aws',
label: 'EC2 Launch Template',
hint: 'ASG user-data bootstraps agents with genesis snapshot markers.',
docAnchor: 'aws-launch-template',
zipName: 'aetherforge-launch-template.zip',
mermaid: `flowchart LR
LT[Launch template] --> ASG[Auto scaling group]
ASG --> EC2[New instance]
EC2 -->|user-data curl| Deck[Command deck]`,
},
{
id: 'fargate',
group: 'aws',
label: 'Fargate burst seeder',
hint: 'Short TTL ECS tasks seed erasure shards inside VPC.',
docAnchor: 'aws-fargate-burst',
zipName: 'aetherforge-fargate.zip',
mermaid: `flowchart LR
Deck[Command deck] --> ECS[ECS RunTask]
ECS --> Task[Fargate seeder]
Task -->|shard fanout| VPC[VPC agents]`,
},
{
id: 'eventbridge',
group: 'aws',
label: 'EventBridge policy fan-out',
hint: 'Scheduled Lambda polls policy snapshot for degraded mode.',
docAnchor: 'aws-eventbridge',
zipName: 'aetherforge-eventbridge.zip',
mermaid: `flowchart LR
EB[EventBridge rule] --> Lambda[Policy relay]
Lambda -->|poll| Deck[Policy snapshot]
Lambda --> Webhook[Agent webhook]`,
},
{
id: 'cloud-map',
group: 'aws',
label: 'Cloud Map service registry',
hint: 'Register seeder DNS names for lattice shard discovery.',
docAnchor: 'aws-cloud-map',
zipName: 'aetherforge-cloud-map.zip',
mermaid: `flowchart LR
Seeder[Primary seeder] --> CM[Cloud Map]
CM --> DNS[seeder.svc.local]
DNS --> Agent[Agent manifest fetch]`,
},
{
id: 'minio',
group: 'generic',
label: 'MinIO / S3-compatible upload',
hint: 'mc mirror spread-kit to any on-prem object store.',
docAnchor: 'minio-spread-kit',
zipName: 'aetherforge-minio.zip',
connectionTest: { kind: 'minio', endpointKey: 'minioEndpoint' },
mermaid: `flowchart LR
Kit[Spread kit ZIP] --> MC[mc cp]
MC --> MinIO[(MinIO bucket)]
MinIO --> Browser[Waterhole index.html]`,
},
{
id: 'curl-manifest',
group: 'generic',
label: 'curl manifest.json',
hint: 'Portable manifest for any VPS — no cloud SDK required.',
docAnchor: 'curl-manifest',
zipName: 'aetherforge-curl-manifest.zip',
connectionTest: { kind: 'http', endpointKey: 'serverUrl' },
mermaid: `flowchart LR
VPS[Any VPS] -->|curl manifest.json| Deck[Command deck]
VPS -->|curl install.sh| Agent[Agent bootstrap]`,
},
];
export function cloudMethodsByGroup(group: CloudMethodGroup): CloudSpreadMethod[] {
return CLOUD_SPREAD_METHODS.filter((m) => m.group === group);
}
export function cloudMethodDocUrl(anchor: string): string {
return spreadTechniqueDocUrl(anchor);
}
export const RELATED_SPREAD_TEMPLATE_LINKS = SPREAD_TEMPLATES.map((t) => ({
id: t.id,
label: t.label,
docUrl: spreadTechniqueDocUrl(t.docAnchor),
}));

View File

@@ -64,9 +64,11 @@ describe('UI_HELP', () => {
'fm_encrypt_path',
'pt_path_tracer',
'pt_agent_chain',
'pt_subnet_autopsy',
'fleet_runtime_policy',
'fleet_runtime_modules',
'spread_funnel_widget',
'subnet_immune_autopsy',
'md_overview',
'md_operation_chip',
'md_spread_profile',
@@ -82,6 +84,10 @@ describe('UI_HELP', () => {
'ew_install_links',
'ew_spread_kit',
'ew_war_room',
'ew_cloud_ecosystem',
'ew_cloud_aws',
'ew_cloud_generic',
'ew_ssm_document',
'ew_supply_chain',
'ew_public_urls',
'ew_techniques',
@@ -104,6 +110,7 @@ describe('UI_HELP', () => {
'set_webhook',
'ui_color_scheme',
'crucible_section_spread_templates',
'crucible_section_launch_template',
] as const;
it('defines help for every documented UI key', () => {