# HiveOps Browser: Agent Download & Properties File Features ## Summary Add two new menu items to the File menu: 1. **Download Agent** - Downloads hiveops-agent binary from API endpoint 2. **Create Agent Properties** - Opens popup to create hiveops.properties and ext/ej.properties files --- ## Files to Modify | File | Changes | |------|---------| | `src/main/main.js` | Add menu items, window handlers, IPC handlers | | `src/main/preload.js` | Add IPC bridge methods | | `src/main/api-client.js` | Add `downloadAgent()` method | ## New Files to Create | File | Purpose | |------|---------| | `src/renderer/agent-properties.html` | Properties form dialog UI (tabbed) | | `src/renderer/agent-properties.js` | Properties form logic | | `src/renderer/download-progress.html` | Download progress dialog | --- ## Feature 1: Download Agent ### Menu Item - Location: File menu, after "License Management" - Label: "Download Agent" ### Behavior 1. Auto-detect platform (Windows/Linux/macOS) 2. Show native save dialog with default filename 3. Download from API: `GET /api/v1/agent/download?platform={platform}` 4. Show progress dialog during download 5. Set executable permissions on Linux/macOS 6. Show success/error message --- ## Feature 2: Create Agent Properties ### Menu Item - Location: File menu, after "Download Agent" - Label: "Create Agent Properties" ### UI Design: Tabbed Dialog Two tabs: **Main Config** and **Journal Extension** --- ### Tab 1: Main Config (hiveops.properties) #### Section: HiveOps Management Server | Field | Default | Description | |-------|---------|-------------| | `mgmt.endpoint` | `https://mgmt.directlx.dev/` | HiveOps management server URL | | `mgmt.api.key` | (empty) | API key for management server | #### Section: SmartJournal Server (Journal Upload) | Field | Default | Description | |-------|---------|-------------| | `server.endpoint` | (required) | SmartJournal server URL | | `server.host` | (empty) | Override HTTP host header | | `server.to.connect` | `10000` | Connection timeout (ms) | | `server.to.read` | `10000` | Read timeout (ms) | | `heartbeat.interval` | `5` | Heartbeat interval (minutes) | #### Section: ATM Identification | Field | Default | Description | |-------|---------|-------------| | `atm.id` | (required) | ATM identifier (4-40 chars) | | `atm.transit` | (empty) | ATM transit code | | `country` | `US` | ISO 3166-1 country code (2 chars) | #### Section: Windows Registry (collapsible, optional) | Field | Default | Description | |-------|---------|-------------| | `atm.idRegistryKey` | (empty) | Registry key for ATM ID | | `atm.idRegistryValue` | (empty) | Registry value for ATM ID | | `atm.transitRegistryKey` | (empty) | Registry key for transit | | `atm.transitRegistryValue` | (empty) | Registry value for transit | #### Section: Incident Integration | Field | Default | Description | |-------|---------|-------------| | `incident.endpoint` | `http://localhost:8080` | Incident server URL | | `incident.events.enabled` | `true` | Enable event reporting | | `incident.events.recheck.delay.msec` | `5000` | Recheck delay (ms) | | `incident.events.batch.size` | `100` | Event batch size | | `incident.to.connect` | `10000` | Incident connect timeout | | `incident.to.read` | `30000` | Incident read timeout | #### Section: Task Settings | Field | Default | Description | |-------|---------|-------------| | `task.network.cap` | `0.5` | Network utilization cap (0-1) | | `task.network.retries` | `5` | Upload retry attempts | #### Section: Directories | Field | Default | Description | |-------|---------|-------------| | `ext.directory` | `ext` | Extensions directory | | `script.directory` | (empty) | Scripts directory | | `modules.disabled` | (empty) | Comma-separated disabled modules | --- ### Tab 2: Journal Extension (ext/ej.properties) #### Section: Journal Location | Field | Default | Description | |-------|---------|-------------| | `journal.dir` | `/opt/hiveops/journal` | Journal directory path | | `type` | `MAINJOURNAL` | Journal type identifier | #### Section: Journal Format | Field | Default | Description | |-------|---------|-------------| | `journal.jrntype` | (dropdown) | Journal parser type | | `filename.format` | `{YYYY}{MM}{DD}.jrn` | Filename pattern | | `file.format` | `UTF8` | File encoding (UTF8/UTF16LE) | **journal.jrntype options:** - PT - SCOTIABANK_CB - SCOTIABANK - HYOSUNG_HIP - HYOSUNG_FIS #### Section: Upload Settings | Field | Default | Description | |-------|---------|-------------| | `chunk.max` | `100000` | Max chunk size (bytes) | | `chunk.delay.msec` | `0` | Delay between chunks (ms) | | `update.delay.msec` | `300000` | Verification delay (ms) | --- ### Save Behavior 1. User clicks "Save Properties" 2. Show folder picker dialog 3. Create selected folder structure: ``` chosen-folder/ ├── hiveops.properties └── ext/ └── ej.properties ``` 4. Show success message with path --- ## Implementation Order 1. **api-client.js** - Add `downloadAgent()` method 2. **preload.js** - Add IPC bridge methods 3. **main.js** - Add menu items, windows, IPC handlers 4. **download-progress.html** - Progress bar UI 5. **agent-properties.html** - Tabbed form with all fields 6. **agent-properties.js** - Form handling, validation, save logic --- ## Verification 1. Launch app: `npm start` 2. File menu should show "Download Agent" and "Create Agent Properties" 3. Test Download Agent: - Verify save dialog appears - Verify progress bar during download - Verify executable permissions set (Linux/macOS) 4. Test Create Agent Properties: - Verify tabbed dialog opens - Fill required fields (atm.id, server.endpoint, mgmt.endpoint) - Click Save, choose folder - Verify `hiveops.properties` and `ext/ej.properties` created with correct content