wattetheria 0.2.5 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.env.release ADDED
@@ -0,0 +1,67 @@
1
+ # Coordinated release image set
2
+ RELEASE_TAG=1.0.11
3
+
4
+ WATTETHERIA_KERNEL_IMAGE=ghcr.io/wattetheria/wattetheria-kernel:${RELEASE_TAG}
5
+ WATTSWARM_KERNEL_IMAGE=ghcr.io/wattetheria/wattswarm-kernel:${RELEASE_TAG}
6
+ WATTSWARM_RUNTIME_IMAGE=ghcr.io/wattetheria/wattswarm-runtime:${RELEASE_TAG}
7
+ WATTSWARM_WORKER_IMAGE=ghcr.io/wattetheria/wattswarm-worker:${RELEASE_TAG}
8
+
9
+ # Host bindings
10
+ WATTETHERIA_CONTROL_PLANE_BIND_HOST=127.0.0.1
11
+ WATTETHERIA_CONTROL_PLANE_PORT=7777
12
+ WATTSWARM_UI_BIND_HOST=127.0.0.1
13
+ WATTSWARM_UI_PORT=7788
14
+ WATTSWARM_SYNC_GRPC_BIND_HOST=127.0.0.1
15
+ WATTSWARM_SYNC_GRPC_PORT=7791
16
+ WATTSWARM_P2P_HOST_PORT=4001
17
+ WATTSWARM_UDP_ANNOUNCE_HOST_PORT=37931
18
+
19
+ # Host-mounted state directories for local agent access
20
+ WATTETHERIA_HOST_STATE_DIR=./data/wattetheria
21
+ WATTSWARM_HOST_STATE_DIR=./data/wattswarm
22
+ WATTETHERIA_COMPOSE_ENV_FILE=.env.release.local
23
+ WATTETHERIA_DEPLOY_DIR=.
24
+ WATTETHERIA_RUNTIME_ENV_FILE=/var/lib/wattetheria-deploy/.env.release.local
25
+
26
+ # Internal service endpoints used by the Wattetheria kernel and Wattswarm containers
27
+ WATTETHERIA_WATTSWARM_UI_BASE_URL=http://wattswarm-kernel:7788
28
+ WATTETHERIA_WATTSWARM_SYNC_GRPC_ENDPOINT=http://wattswarm-kernel:7791
29
+ WATTETHERIA_WATTSWARM_AGENT_EVENT_CALLBACK_BASE_URL=http://kernel:7777
30
+ WATTETHERIA_GATEWAY_URLS=
31
+ WATTETHERIA_GATEWAY_CONFIG_PATH=/var/lib/wattswarm/startup_config.json
32
+
33
+ # Agent-facing endpoints written into .agent-participation/manifest.json
34
+ WATTETHERIA_AGENT_CONTROL_PLANE_ENDPOINT=http://127.0.0.1:7777
35
+ WATTETHERIA_AGENT_WATTSWARM_UI_BASE_URL=http://127.0.0.1:7788
36
+ WATTETHERIA_AGENT_WATTSWARM_SYNC_GRPC_ENDPOINT=http://127.0.0.1:7791
37
+ WATTETHERIA_AGENT_HOST_DATA_DIR=./data/wattetheria
38
+
39
+ # Wattetheria runtime
40
+ WATTETHERIA_BRAIN_PROVIDER_KIND=rules
41
+ WATTETHERIA_BRAIN_BASE_URL=
42
+ WATTETHERIA_BRAIN_MODEL=
43
+ WATTETHERIA_BRAIN_API_KEY_ENV=
44
+ WATTETHERIA_BRAIN_API_KEY=
45
+ WATTETHERIA_SERVICENET_BASE_URL=
46
+ WATTETHERIA_AUTONOMY_ENABLED=false
47
+ WATTETHERIA_AUTONOMY_INTERVAL_SEC=30
48
+
49
+ # Wattswarm database
50
+ WATTSWARM_PG_DB=wattswarm
51
+ WATTSWARM_PG_USER=postgres
52
+ WATTSWARM_PG_PASSWORD=replace-with-strong-password
53
+
54
+ # Wattswarm runtime and network
55
+ WATTSWARM_P2P_ENABLED=true
56
+ WATTSWARM_P2P_MDNS=true
57
+ WATTSWARM_P2P_PORT=4001
58
+ WATTSWARM_IROH_RELAY_URLS=https://relay.wattetheria.com
59
+ WATTSWARM_IROH_PUBLISH_DIRECT_ADDRS=false
60
+ WATTSWARM_IROH_DATA_PLANE_START_TIMEOUT_MS=120000
61
+ WATTSWARM_WORKER_CONCURRENCY=16
62
+ WATTSWARM_WORKER_POLL_MS=250
63
+ WATTSWARM_WORKER_LEASE_MS=30000
64
+ WATTSWARM_UDP_ANNOUNCE_ENABLED=false
65
+ WATTSWARM_UDP_ANNOUNCE_MODE=multicast
66
+ WATTSWARM_UDP_ANNOUNCE_ADDR=239.255.42.99
67
+ WATTSWARM_UDP_ANNOUNCE_PORT=37931
package/README.md CHANGED
@@ -625,7 +625,7 @@ pwsh ./scripts/deploy-release.ps1
625
625
  - `docker-compose.yml` is the local `wattetheria`-only development stack
626
626
  - `docker-compose.full.yml` is the local joint development stack for `wattetheria` + `wattswarm`
627
627
  - `docker-compose.release.yml` is the image-based release deployment asset used by the CLI and fallback scripts
628
- - the CLI now generates deployment environment defaults internally and resolves the latest published image release during install and update
628
+ - `.env.release` is the single release environment template; the CLI reads it when generating or merging deployment `.env` files and resolves the latest published image release during install and update
629
629
  - `scripts/deploy-release.ps1` is a cross-platform fallback deployment entry point
630
630
  - this repository does not include `wattetheria-gateway`; gateway is a separate project and deployment unit
631
631
  - The Docker entrypoint lives in `scripts/docker-kernel-entrypoint.sh`
@@ -710,6 +710,8 @@ WATTETHERIA_BRAIN_MODEL=openclaw
710
710
  WATTETHERIA_BRAIN_API_KEY_ENV=WATTETHERIA_BRAIN_API_KEY
711
711
  WATTETHERIA_BRAIN_API_KEY=<secret>
712
712
  WATTETHERIA_GATEWAY_URLS=http://gateway.example.com:8080
713
+ WATTETHERIA_GATEWAY_CONFIG_PATH=/var/lib/wattswarm/startup_config.json
714
+ WATTSWARM_IROH_DATA_PLANE_START_TIMEOUT_MS=120000
713
715
  ```
714
716
 
715
717
  `docker-compose.release.yml` also mounts `${WATTSWARM_HOST_STATE_DIR}/startup_config.json` into the
@@ -116,6 +116,7 @@ services:
116
116
  WATTSWARM_UDP_ANNOUNCE_PORT: ${WATTSWARM_UDP_ANNOUNCE_PORT:-37931}
117
117
  WATTSWARM_IROH_RELAY_URLS: ${WATTSWARM_IROH_RELAY_URLS:-https://relay.wattetheria.com}
118
118
  WATTSWARM_IROH_PUBLISH_DIRECT_ADDRS: ${WATTSWARM_IROH_PUBLISH_DIRECT_ADDRS:-false}
119
+ WATTSWARM_IROH_DATA_PLANE_START_TIMEOUT_MS: ${WATTSWARM_IROH_DATA_PLANE_START_TIMEOUT_MS:-120000}
119
120
  WATTSWARM_PUBLIC_BOOTSTRAP_URLS: ${WATTSWARM_PUBLIC_BOOTSTRAP_URLS:-}
120
121
  WATTSWARM_PUBLIC_BOOTSTRAP_CONTACTS: ${WATTSWARM_PUBLIC_BOOTSTRAP_CONTACTS:-}
121
122
  WATTSWARM_PUBLIC_GATEWAY_URLS: ${WATTSWARM_PUBLIC_GATEWAY_URLS:-}
package/lib/cli.js CHANGED
@@ -11,12 +11,7 @@ const PACKAGE_JSON = require(path.join(PACKAGE_ROOT, "package.json"));
11
11
  const DEFAULT_DEPLOY_DIR = path.join(os.homedir(), ".wattetheria", "deploy");
12
12
  const DEFAULT_PROJECT_NAME = "wattetheria";
13
13
  const DEFAULT_COMMAND = "help";
14
- const DEFAULT_IMAGE_REFS = new Map([
15
- ["WATTETHERIA_KERNEL_IMAGE", "ghcr.io/wattetheria/wattetheria-kernel:latest"],
16
- ["WATTSWARM_KERNEL_IMAGE", "ghcr.io/wattetheria/wattswarm-kernel:latest"],
17
- ["WATTSWARM_RUNTIME_IMAGE", "ghcr.io/wattetheria/wattswarm-runtime:latest"],
18
- ["WATTSWARM_WORKER_IMAGE", "ghcr.io/wattetheria/wattswarm-worker:latest"]
19
- ]);
14
+ const RELEASE_ENV_TEMPLATE_PATH = path.join(PACKAGE_ROOT, ".env.release");
20
15
  const IMAGE_KEYS = [
21
16
  "WATTETHERIA_KERNEL_IMAGE",
22
17
  "WATTSWARM_KERNEL_IMAGE",
@@ -25,48 +20,6 @@ const IMAGE_KEYS = [
25
20
  ];
26
21
  const HOST_STATE_DIR_KEYS = ["WATTETHERIA_HOST_STATE_DIR", "WATTSWARM_HOST_STATE_DIR"];
27
22
  const REGISTRY_TAG_PAGE_SIZE = 1000;
28
- const DEFAULT_ENV_ENTRIES = [
29
- ...DEFAULT_IMAGE_REFS.entries(),
30
- ["WATTETHERIA_CONTROL_PLANE_BIND_HOST", "127.0.0.1"],
31
- ["WATTETHERIA_CONTROL_PLANE_PORT", "7777"],
32
- ["WATTSWARM_UI_BIND_HOST", "127.0.0.1"],
33
- ["WATTSWARM_UI_PORT", "7788"],
34
- ["WATTSWARM_SYNC_GRPC_BIND_HOST", "127.0.0.1"],
35
- ["WATTSWARM_SYNC_GRPC_PORT", "7791"],
36
- ["WATTSWARM_P2P_HOST_PORT", "4001"],
37
- ["WATTSWARM_UDP_ANNOUNCE_HOST_PORT", "37931"],
38
- ["WATTETHERIA_HOST_STATE_DIR", "./data/wattetheria"],
39
- ["WATTSWARM_HOST_STATE_DIR", "./data/wattswarm"],
40
- ["WATTETHERIA_COMPOSE_ENV_FILE", ".env.release.local"],
41
- ["WATTETHERIA_DEPLOY_DIR", "."],
42
- ["WATTETHERIA_RUNTIME_ENV_FILE", "/var/lib/wattetheria-deploy/.env.release.local"],
43
- ["WATTETHERIA_AGENT_CONTROL_PLANE_ENDPOINT", "http://127.0.0.1:7777"],
44
- ["WATTETHERIA_AGENT_WATTSWARM_UI_BASE_URL", "http://127.0.0.1:7788"],
45
- ["WATTETHERIA_AGENT_WATTSWARM_SYNC_GRPC_ENDPOINT", "http://127.0.0.1:7791"],
46
- ["WATTETHERIA_AGENT_HOST_DATA_DIR", "./data/wattetheria"],
47
- ["WATTETHERIA_BRAIN_PROVIDER_KIND", "rules"],
48
- ["WATTETHERIA_BRAIN_BASE_URL", ""],
49
- ["WATTETHERIA_BRAIN_MODEL", ""],
50
- ["WATTETHERIA_BRAIN_API_KEY_ENV", ""],
51
- ["WATTETHERIA_SERVICENET_BASE_URL", ""],
52
- ["WATTETHERIA_AUTONOMY_ENABLED", "false"],
53
- ["WATTETHERIA_AUTONOMY_INTERVAL_SEC", "30"],
54
- ["WATTSWARM_PG_DB", "wattswarm"],
55
- ["WATTSWARM_PG_USER", "postgres"],
56
- ["WATTSWARM_PG_PASSWORD", "replace-with-strong-password"],
57
- ["WATTSWARM_P2P_ENABLED", "true"],
58
- ["WATTSWARM_P2P_MDNS", "true"],
59
- ["WATTSWARM_P2P_PORT", "4001"],
60
- ["WATTSWARM_IROH_RELAY_URLS", "https://relay.wattetheria.com"],
61
- ["WATTSWARM_IROH_PUBLISH_DIRECT_ADDRS", "false"],
62
- ["WATTSWARM_WORKER_CONCURRENCY", "16"],
63
- ["WATTSWARM_WORKER_POLL_MS", "250"],
64
- ["WATTSWARM_WORKER_LEASE_MS", "30000"],
65
- ["WATTSWARM_UDP_ANNOUNCE_ENABLED", "false"],
66
- ["WATTSWARM_UDP_ANNOUNCE_MODE", "multicast"],
67
- ["WATTSWARM_UDP_ANNOUNCE_ADDR", "239.255.42.99"],
68
- ["WATTSWARM_UDP_ANNOUNCE_PORT", "37931"]
69
- ];
70
23
  const DOCKER_INSTALL_URLS = {
71
24
  darwin: "https://www.docker.com/products/docker-desktop/",
72
25
  win32: "https://www.docker.com/products/docker-desktop/",
@@ -468,7 +421,10 @@ function getReleaseImageMapFromEnv(envMap) {
468
421
  }
469
422
 
470
423
  function defaultEnvMap() {
471
- return new Map(DEFAULT_ENV_ENTRIES);
424
+ if (!fs.existsSync(RELEASE_ENV_TEMPLATE_PATH)) {
425
+ throw new Error(`Release env template is missing: ${RELEASE_ENV_TEMPLATE_PATH}`);
426
+ }
427
+ return readEnvFile(RELEASE_ENV_TEMPLATE_PATH);
472
428
  }
473
429
 
474
430
  function getReleaseSource(options) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wattetheria",
3
- "version": "0.2.5",
3
+ "version": "0.2.6",
4
4
  "description": "Wattetheria deployment CLI",
5
5
  "license": "Apache-2.0",
6
6
  "type": "commonjs",
@@ -8,6 +8,7 @@
8
8
  "files": [
9
9
  "bin/",
10
10
  "lib/",
11
+ ".env.release",
11
12
  "docker-compose.release.yml",
12
13
  "README.md",
13
14
  "LICENSE"