Skip to content

Commit 72ee7b8

Browse files
hyperpolymathclaude
andcommitted
feat: add V-triple connectors for 10 services + Groove dodeca-API bridge
V-connectors for: VeriSimDB (full CRUD), Hypatia, Burble, BoJ-Server, Gossamer, Stapeln, ECHIDNA, IDApTIK, AmbientOps, Reposystem. Each has Groove-aware discovery (snap-on/snap-off). Groove bridge implements all 12 dodeca-API surface types (REST, gRPC, GraphQL, JSON-RPC, WebSocket, MQTT, AMQP, CoAP, SOAP, Cap'n Proto, SSE, Groove native). Service discovery scans PORT-REGISTRY ports + Groove range (6460-6500). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 6e2ba3e commit 72ee7b8

File tree

11 files changed

+1076
-0
lines changed

11 files changed

+1076
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
//
4+
// V-ambientops — V-lang connector for ambientops API.
5+
// Groove-aware: supports snap-on/snap-off discovery.
6+
7+
module v_ambientops
8+
9+
import net.http
10+
import json
11+
12+
// Configuration
13+
pub struct Config {
14+
pub mut:
15+
base_url string = 'http://localhost:4050'
16+
}
17+
18+
pub fn new_config(port int) Config {
19+
return Config{ base_url: 'http://localhost:${port}' }
20+
}
21+
22+
// Client
23+
pub struct Client {
24+
config Config
25+
}
26+
27+
pub fn new_client(config Config) &Client {
28+
return &Client{ config: config }
29+
}
30+
31+
pub fn new_default() &Client {
32+
return new_client(Config{})
33+
}
34+
35+
// Health check
36+
pub fn (c &Client) health() !string {
37+
resp := http.get('${c.config.base_url}/health') or {
38+
return error('ambientops unreachable: ${err}')
39+
}
40+
if resp.status_code != 200 {
41+
return error('ambientops unhealthy: HTTP ${resp.status_code}')
42+
}
43+
return resp.body
44+
}
45+
46+
// Groove discovery — scan known ports for ambientops
47+
pub fn discover(ports ...int) ?&Client {
48+
scan_ports := if ports.len > 0 { ports } else { [4050] }
49+
for port in scan_ports {
50+
client := new_client(new_config(port))
51+
if _ := client.health() {
52+
return client
53+
}
54+
}
55+
return none
56+
}
57+
58+
// Groove manifest
59+
pub struct GrooveManifest {
60+
pub:
61+
service string = 'ambientops'
62+
version string = '0.1.0'
63+
api_types []string = ['rest', 'grpc', 'graphql']
64+
endpoints []string = ['health', 'services', 'envelopes', 'diagnostics']
65+
}
66+
67+
pub fn groove_manifest() GrooveManifest {
68+
return GrooveManifest{}
69+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
//
4+
// V-boj — V-lang connector for boj API.
5+
// Groove-aware: supports snap-on/snap-off discovery.
6+
7+
module v_boj
8+
9+
import net.http
10+
import json
11+
12+
// Configuration
13+
pub struct Config {
14+
pub mut:
15+
base_url string = 'http://localhost:7700'
16+
}
17+
18+
pub fn new_config(port int) Config {
19+
return Config{ base_url: 'http://localhost:${port}' }
20+
}
21+
22+
// Client
23+
pub struct Client {
24+
config Config
25+
}
26+
27+
pub fn new_client(config Config) &Client {
28+
return &Client{ config: config }
29+
}
30+
31+
pub fn new_default() &Client {
32+
return new_client(Config{})
33+
}
34+
35+
// Health check
36+
pub fn (c &Client) health() !string {
37+
resp := http.get('${c.config.base_url}/health') or {
38+
return error('boj unreachable: ${err}')
39+
}
40+
if resp.status_code != 200 {
41+
return error('boj unhealthy: HTTP ${resp.status_code}')
42+
}
43+
return resp.body
44+
}
45+
46+
// Groove discovery — scan known ports for boj
47+
pub fn discover(ports ...int) ?&Client {
48+
scan_ports := if ports.len > 0 { ports } else { [7700] }
49+
for port in scan_ports {
50+
client := new_client(new_config(port))
51+
if _ := client.health() {
52+
return client
53+
}
54+
}
55+
return none
56+
}
57+
58+
// Groove manifest
59+
pub struct GrooveManifest {
60+
pub:
61+
service string = 'boj'
62+
version string = '0.1.0'
63+
api_types []string = ['rest', 'grpc', 'graphql']
64+
endpoints []string = ['health', 'menu', 'cartridges', 'browser', 'research']
65+
}
66+
67+
pub fn groove_manifest() GrooveManifest {
68+
return GrooveManifest{}
69+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
//
4+
// V-burble — V-lang connector for burble API.
5+
// Groove-aware: supports snap-on/snap-off discovery.
6+
7+
module v_burble
8+
9+
import net.http
10+
import json
11+
12+
// Configuration
13+
pub struct Config {
14+
pub mut:
15+
base_url string = 'http://localhost:4020'
16+
}
17+
18+
pub fn new_config(port int) Config {
19+
return Config{ base_url: 'http://localhost:${port}' }
20+
}
21+
22+
// Client
23+
pub struct Client {
24+
config Config
25+
}
26+
27+
pub fn new_client(config Config) &Client {
28+
return &Client{ config: config }
29+
}
30+
31+
pub fn new_default() &Client {
32+
return new_client(Config{})
33+
}
34+
35+
// Health check
36+
pub fn (c &Client) health() !string {
37+
resp := http.get('${c.config.base_url}/health') or {
38+
return error('burble unreachable: ${err}')
39+
}
40+
if resp.status_code != 200 {
41+
return error('burble unhealthy: HTTP ${resp.status_code}')
42+
}
43+
return resp.body
44+
}
45+
46+
// Groove discovery — scan known ports for burble
47+
pub fn discover(ports ...int) ?&Client {
48+
scan_ports := if ports.len > 0 { ports } else { [4020] }
49+
for port in scan_ports {
50+
client := new_client(new_config(port))
51+
if _ := client.health() {
52+
return client
53+
}
54+
}
55+
return none
56+
}
57+
58+
// Groove manifest
59+
pub struct GrooveManifest {
60+
pub:
61+
service string = 'burble'
62+
version string = '0.1.0'
63+
api_types []string = ['rest', 'grpc', 'graphql']
64+
endpoints []string = ['health', 'rooms', 'channels', 'media', 'webrtc']
65+
}
66+
67+
pub fn groove_manifest() GrooveManifest {
68+
return GrooveManifest{}
69+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
//
4+
// V-echidna — V-lang connector for echidna API.
5+
// Groove-aware: supports snap-on/snap-off discovery.
6+
7+
module v_echidna
8+
9+
import net.http
10+
import json
11+
12+
// Configuration
13+
pub struct Config {
14+
pub mut:
15+
base_url string = 'http://localhost:8081'
16+
}
17+
18+
pub fn new_config(port int) Config {
19+
return Config{ base_url: 'http://localhost:${port}' }
20+
}
21+
22+
// Client
23+
pub struct Client {
24+
config Config
25+
}
26+
27+
pub fn new_client(config Config) &Client {
28+
return &Client{ config: config }
29+
}
30+
31+
pub fn new_default() &Client {
32+
return new_client(Config{})
33+
}
34+
35+
// Health check
36+
pub fn (c &Client) health() !string {
37+
resp := http.get('${c.config.base_url}/health') or {
38+
return error('echidna unreachable: ${err}')
39+
}
40+
if resp.status_code != 200 {
41+
return error('echidna unhealthy: HTTP ${resp.status_code}')
42+
}
43+
return resp.body
44+
}
45+
46+
// Groove discovery — scan known ports for echidna
47+
pub fn discover(ports ...int) ?&Client {
48+
scan_ports := if ports.len > 0 { ports } else { [8081] }
49+
for port in scan_ports {
50+
client := new_client(new_config(port))
51+
if _ := client.health() {
52+
return client
53+
}
54+
}
55+
return none
56+
}
57+
58+
// Groove manifest
59+
pub struct GrooveManifest {
60+
pub:
61+
service string = 'echidna'
62+
version string = '0.1.0'
63+
api_types []string = ['rest', 'grpc', 'graphql']
64+
endpoints []string = ['health', 'prove', 'verify', 'backends', 'explain']
65+
}
66+
67+
pub fn groove_manifest() GrooveManifest {
68+
return GrooveManifest{}
69+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath)
3+
//
4+
// V-gossamer — V-lang connector for gossamer API.
5+
// Groove-aware: supports snap-on/snap-off discovery.
6+
7+
module v_gossamer
8+
9+
import net.http
10+
import json
11+
12+
// Configuration
13+
pub struct Config {
14+
pub mut:
15+
base_url string = 'http://localhost:4040'
16+
}
17+
18+
pub fn new_config(port int) Config {
19+
return Config{ base_url: 'http://localhost:${port}' }
20+
}
21+
22+
// Client
23+
pub struct Client {
24+
config Config
25+
}
26+
27+
pub fn new_client(config Config) &Client {
28+
return &Client{ config: config }
29+
}
30+
31+
pub fn new_default() &Client {
32+
return new_client(Config{})
33+
}
34+
35+
// Health check
36+
pub fn (c &Client) health() !string {
37+
resp := http.get('${c.config.base_url}/health') or {
38+
return error('gossamer unreachable: ${err}')
39+
}
40+
if resp.status_code != 200 {
41+
return error('gossamer unhealthy: HTTP ${resp.status_code}')
42+
}
43+
return resp.body
44+
}
45+
46+
// Groove discovery — scan known ports for gossamer
47+
pub fn discover(ports ...int) ?&Client {
48+
scan_ports := if ports.len > 0 { ports } else { [4040] }
49+
for port in scan_ports {
50+
client := new_client(new_config(port))
51+
if _ := client.health() {
52+
return client
53+
}
54+
}
55+
return none
56+
}
57+
58+
// Groove manifest
59+
pub struct GrooveManifest {
60+
pub:
61+
service string = 'gossamer'
62+
version string = '0.1.0'
63+
api_types []string = ['rest', 'grpc', 'graphql']
64+
endpoints []string = ['health', 'panels', 'ipc', 'state']
65+
}
66+
67+
pub fn groove_manifest() GrooveManifest {
68+
return GrooveManifest{}
69+
}

0 commit comments

Comments
 (0)