feat: implement modular lab tool structure with working CLI

- Add lab/ module structure (core, machines, deployment, monitoring)
- Add mcp/ server stub for future MCP integration
- Update main.scm to use new modular architecture
- Fix utils/config.scm to export get-current-config function
- Create comprehensive test suite with all modules passing
- Update TODO.md with completed high priority tasks

Key improvements:
- Modular design following K.I.S.S principles
- Working CLI interface for status, machines, deploy commands
- Infrastructure status checking functional
- All module tests passing
- Clean separation of pure/impure functions

CLI now works: ./main.scm status, ./main.scm machines, ./main.scm deploy <machine>
This commit is contained in:
Geir Okkenhaug Jerstad 2025-06-16 14:29:00 +02:00
parent fb4361d938
commit 564faaa479
12 changed files with 196 additions and 427 deletions

15
packages/lab-tool/main.scm Normal file → Executable file
View file

@ -9,7 +9,10 @@
(use-modules (ice-9 match)
(ice-9 format)
(utils config)
(utils logging))
(utils logging)
(lab core)
(lab machines)
(lab deployment))
;; Initialize logging
(set-log-level! 'info)
@ -68,17 +71,23 @@ Home lab root: ~a
(define (cmd-status)
"Show infrastructure status"
(log-info "Checking infrastructure status...")
(let* ((machines (get-all-machines))
(let* ((machines (list-machines))
(status (get-infrastructure-status))
(config (get-current-config))
(status-text (format-status-info machines config)))
(display status-text)
(newline)
(for-each (lambda (machine-status)
(let ((machine (assoc-ref machine-status 'machine))
(status (assoc-ref machine-status 'status)))
(format #t " ~a: ~a\n" machine status)))
status)
(log-success "Status check complete")))
(define (cmd-machines)
"List all configured machines"
(log-info "Listing configured machines...")
(let* ((machines (get-all-machines))
(let* ((machines (list-machines))
(machine-list (format-machine-list machines)))
(format #t "Configured Machines:\n~a\n" machine-list)
(log-success "Machine list complete")))