Skip to content

Commit ec2e9ab

Browse files
hyperpolymathclaude
andcommitted
feat: working CLI + TUI, VeriSimDB:6077, Gossamer IPC, nala/apt/dnf parity
- Escript binary at ~/.local/bin/opsm — install/remove/search/check/history - Forthless install (opsm install lodash auto-detects @npm) - Trust pipeline graceful degradation (never blocks on unreachable services) - Real checksum verification in opsm check (recomputes from cached tarballs) - History redo (opsm history redo) - ANSI colour module (Opsm.Colour, NO_COLOR compliant) - Download stats (size, time, speed) - VeriSimDB instance on port 6077 (GenServer, wired into installer/resolver/trust) - Gossamer IPC handler (opsm_runtime command, CLI-backed, Tauri + Gossamer + PanLL) - Panel HTML updated (tries Gossamer → Tauri → PanLL in order) - .well-known/groove/manifest.json with full capability declaration - Ratatui TUI at ~/.local/bin/opsm-tui (1.8MB, Catppuccin Mocha, SPARK contracts) - 9 property tests for TUI state invariants, all passing Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 655a992 commit ec2e9ab

23 files changed

Lines changed: 2607 additions & 183 deletions

File tree

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,32 @@
11
# SPDX-License-Identifier: PMPL-1.0-or-later
2-
# VeriSimDB Feed — Cross-Repo Analytics Data Store
2+
# VeriSimDB Integration — Dedicated OPSM Instance
3+
# Port: 6077 | Instance: opsm | Base IRI: https://verisim.db/opsm
34

45
[integration]
56
name = "verisimdb"
6-
type = "data-feed"
7+
type = "data-store"
78
repository = "https://github.com/hyperpolymath/nextgen-databases"
8-
data-store = "verisimdb-data"
9+
instance_name = "opsm"
10+
port = 6077
11+
base_iri = "https://verisim.db/opsm"
912

1013
[feed-config]
14+
emit-install-events = true
15+
emit-uninstall-events = true
16+
emit-resolution-events = true
17+
emit-trust-check-events = true
1118
emit-scan-results = true
1219
emit-build-metrics = true
1320
emit-dependency-graph = true
14-
format = "hexad"
15-
destination = "verisimdb-data/feeds/"
21+
format = "octad"
22+
destination = "verisimdb:6077"
23+
24+
[client]
25+
module = "Opsm.VeriSimDB"
26+
genserver = true
27+
graceful_degradation = true
28+
reconnect_on_failure = true
29+
30+
[octad-schema]
31+
event_types = ["install", "uninstall", "resolution", "trust_check"]
32+
modalities = ["document", "graph", "temporal", "provenance", "semantic"]

.verisimdb/config.toml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# VeriSimDB instance configuration for OPSM
3+
# Port: 6077 (dedicated OPSM instance)
4+
5+
[instance]
6+
name = "opsm"
7+
description = "OPSM package manager — install/uninstall/resolve/trust event store"
8+
version = "0.1.0"
9+
base_iri = "https://verisim.db/opsm"
10+
11+
[storage]
12+
backend = "persistent"
13+
octad_dir = ".verisimdb/octads"
14+
index_file = ".verisimdb/index.json"
15+
16+
[storage.persistent]
17+
persistence_dir = "/var/lib/verisimdb-opsm"
18+
19+
[server]
20+
host = "127.0.0.1"
21+
port = 6077
22+
grpc_port = 0
23+
enable_cors = false
24+
max_body_size = 10485760
25+
request_timeout_secs = 30
26+
max_connections = 256
27+
28+
[modalities]
29+
vector_dimension = 64
30+
31+
[ingest]
32+
sources = ["opsm-installer", "opsm-resolver", "opsm-trust-pipeline"]
33+
34+
[ingest.opsm-installer]
35+
enabled = true
36+
event_types = ["install", "uninstall"]
37+
38+
[ingest.opsm-resolver]
39+
enabled = true
40+
event_types = ["resolution"]
41+
42+
[ingest.opsm-trust-pipeline]
43+
enabled = true
44+
event_types = ["trust_check"]
45+
46+
[display]
47+
date_format = "%Y-%m-%d %H:%M"
48+
max_title_length = 80

.well-known/groove/manifest.json

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
{
2+
"groove_version": "1",
3+
"service_id": "opsm",
4+
"service_name": "OPSM — Odds and Sods Package Manager",
5+
"version": "2.0.0",
6+
"health_endpoint": "/health",
7+
"capabilities": {
8+
"package-management": {
9+
"type": "custom",
10+
"description": "Federated package install/remove/search across 101 registries",
11+
"protocol": "http",
12+
"endpoint": "/api/packages"
13+
},
14+
"trust-pipeline": {
15+
"type": "integrity",
16+
"description": "SLSA L3, PQ crypto, attestation verification",
17+
"protocol": "http",
18+
"endpoint": "/api/trust"
19+
},
20+
"panel-ui": {
21+
"type": "panel-ui",
22+
"description": "Runtime manager panel for PanLL workspaces",
23+
"protocol": "http",
24+
"endpoint": "/panels/opsm-runtime-manager"
25+
},
26+
"octad-storage": {
27+
"type": "octad-storage",
28+
"description": "Install/uninstall/resolve/trust events persisted to VeriSimDB:6077",
29+
"protocol": "http",
30+
"endpoint": "http://127.0.0.1:6077/api/v1"
31+
}
32+
},
33+
"ports": {
34+
"registry_gateway": 4050,
35+
"mobile_api": 4051,
36+
"verisimdb": 6077,
37+
"claim_forge": 7001,
38+
"checky_monkey": 7002,
39+
"palimpsest_license": 7003,
40+
"cicd_hyper_a": 7004,
41+
"oikos": 7005
42+
},
43+
"ipc": {
44+
"opsm_runtime": {
45+
"commands": ["list", "install", "remove", "set", "doctor", "search", "info", "history"],
46+
"backend": "cli",
47+
"binary": "opsm"
48+
}
49+
},
50+
"tui": {
51+
"binary": "opsm-tui",
52+
"framework": "ratatui-0.30",
53+
"features": ["split-panes", "catppuccin-theme", "vim-keys", "search", "history-undo-redo", "trust-dashboard"],
54+
"spark_contracts": true
55+
}
56+
}

opsm-ui/tui/Cargo.toml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# SPDX-FileCopyrightText: 2026 Jonathan D.A. Jewell
3+
4+
[package]
5+
name = "opsm-tui"
6+
version = "0.1.0"
7+
description = "Terminal user interface for OPSM — better than aptitude"
8+
authors = ["Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>"]
9+
license = "PMPL-1.0-or-later"
10+
repository = "https://github.com/hyperpolymath/odds-and-sods-package-manager"
11+
edition = "2021"
12+
rust-version = "1.75"
13+
14+
[[bin]]
15+
name = "opsm-tui"
16+
path = "src/main.rs"
17+
18+
[dependencies]
19+
# TUI framework (matches reposystem pattern)
20+
ratatui = { version = "0.30", features = ["crossterm"] }
21+
crossterm = "0.28"
22+
23+
# CLI argument parsing
24+
clap = { version = "4.5", features = ["derive"] }
25+
26+
# Serialization (for parsing opsm CLI JSON output)
27+
serde = { version = "1", features = ["derive"] }
28+
serde_json = "1"
29+
30+
# Error handling
31+
anyhow = "1.0"
32+
33+
[dev-dependencies]
34+
proptest = "1"

0 commit comments

Comments
 (0)