@rizom/ops 0.2.0-alpha.2 → 0.2.0-alpha.200

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.
Files changed (56) hide show
  1. package/README.md +9 -3
  2. package/dist/age-key-bootstrap.d.ts +17 -0
  3. package/dist/brains-ops.js +288 -173
  4. package/dist/cert-bootstrap.d.ts +24 -0
  5. package/dist/content-repo-ref.d.ts +10 -0
  6. package/dist/content-repo.d.ts +13 -0
  7. package/dist/default-user-runner.d.ts +1 -1
  8. package/dist/deploy.js +99 -166
  9. package/dist/entries/deploy.d.ts +3 -2
  10. package/dist/images.d.ts +76 -0
  11. package/dist/index.d.ts +7 -0
  12. package/dist/index.js +289 -173
  13. package/dist/load-registry.d.ts +38 -3
  14. package/dist/observed-status.d.ts +12 -0
  15. package/dist/onboard-user.d.ts +2 -2
  16. package/dist/origin-ca.d.ts +1 -0
  17. package/dist/parse-args.d.ts +4 -0
  18. package/dist/push-secrets.d.ts +2 -0
  19. package/dist/push-target.d.ts +1 -0
  20. package/dist/reconcile-all.d.ts +2 -2
  21. package/dist/reconcile-cohort.d.ts +2 -2
  22. package/dist/reconcile-lib.d.ts +4 -2
  23. package/dist/run-command.d.ts +8 -2
  24. package/dist/run-subprocess.d.ts +1 -0
  25. package/dist/schema.d.ts +68 -64
  26. package/dist/secrets-encrypt.d.ts +24 -0
  27. package/dist/secrets-push.d.ts +2 -5
  28. package/dist/ssh-key-bootstrap.d.ts +1 -0
  29. package/dist/user-add.d.ts +15 -0
  30. package/dist/user-runner.d.ts +5 -0
  31. package/dist/verify-user.d.ts +19 -0
  32. package/package.json +44 -40
  33. package/templates/rover-pilot/.env.schema +21 -2
  34. package/templates/rover-pilot/.github/workflows/build.yml +65 -17
  35. package/templates/rover-pilot/.github/workflows/deploy.yml +150 -45
  36. package/templates/rover-pilot/.github/workflows/reconcile.yml +22 -2
  37. package/templates/rover-pilot/README.md +8 -3
  38. package/templates/rover-pilot/deploy/scripts/decrypt-user-secrets.ts +119 -0
  39. package/templates/rover-pilot/deploy/scripts/helpers.ts +3 -0
  40. package/templates/rover-pilot/deploy/scripts/provision-server.ts +1 -1
  41. package/templates/rover-pilot/deploy/scripts/resolve-deploy-handles.ts +15 -4
  42. package/templates/rover-pilot/deploy/scripts/resolve-missing-images.ts +13 -0
  43. package/templates/rover-pilot/deploy/scripts/resolve-user-config.ts +68 -14
  44. package/templates/rover-pilot/deploy/scripts/sync-content-repo.ts +183 -0
  45. package/templates/rover-pilot/deploy/scripts/update-dns.ts +14 -4
  46. package/templates/rover-pilot/deploy/scripts/validate-secrets.ts +1 -1
  47. package/templates/rover-pilot/docs/onboarding-checklist.md +43 -8
  48. package/templates/rover-pilot/docs/operator-playbook.md +182 -0
  49. package/templates/rover-pilot/docs/user-onboarding.md +119 -0
  50. package/templates/rover-pilot/package.json +3 -0
  51. package/templates/rover-pilot/pilot.yaml +3 -0
  52. package/templates/rover-pilot/users/alice.yaml +5 -1
  53. package/dist/user-secret-names.d.ts +0 -6
  54. package/templates/rover-pilot/.kamal/hooks/pre-deploy +0 -9
  55. package/templates/rover-pilot/deploy/Dockerfile +0 -15
  56. package/templates/rover-pilot/deploy/kamal/deploy.yml +0 -39
@@ -0,0 +1,119 @@
1
+ # Welcome to Rover
2
+
3
+ ---
4
+
5
+ Most of us have more thinking happening than we can hold onto. Ideas show up in the wrong moment, notes land in five different places, and half of what you've figured out is effectively invisible by the time you need it again.
6
+
7
+ Rover is built for that problem. It's a private space where your thinking accumulates — notes, links, fragments, half-formed ideas — and an AI that can work with all of it. Find things you saved months ago. Connect dots across topics. Turn a rough note into a draft. The more you put in, the more useful it gets. And if another Rover user is in your network, your Rovers can talk to each other — share knowledge, work on something together — just by asking.
8
+
9
+ ---
10
+
11
+ ## What Rover is
12
+
13
+ Rover is your private knowledge companion. It holds your notes, links, and ideas — and helps you think with them, not just store them.
14
+
15
+ Ask it a question and it searches what you've saved. Give it a fragment of thinking and it can help you turn it into something.
16
+
17
+ ---
18
+
19
+ ## Getting in
20
+
21
+ We'll send you a personal URL — something like `https://<handle>.rizom.ai/`.
22
+
23
+ When you open it for the first time, you'll be asked to set a passkey. Do that once and you're in. No passwords to remember.
24
+
25
+ From there, your three main interfaces are:
26
+
27
+ - **Chat** (`/chat`) — where you talk to Rover
28
+ - **Dashboard** (`/`) — an overview of your Rover
29
+ - **CMS** (`/cms`) — a browser editor for your content
30
+
31
+ Start with Chat. Everything else follows from there.
32
+
33
+ ---
34
+
35
+ ## Your first five minutes
36
+
37
+ 1. Open your Chat URL. A good first message:
38
+ > Help me save my first note.
39
+ 2. Save something — a thought, a link, an idea. Doesn't need to be polished.
40
+ 3. Ask Rover about it. See what comes back.
41
+
42
+ That loop — save, ask, get something useful back — is the core of how Rover works.
43
+
44
+ ---
45
+
46
+ ## The Chat and the CMS: when to use which
47
+
48
+ **Chat** is for thinking out loud, asking questions, saving things quickly, and using Rover as a day-to-day thinking partner.
49
+
50
+ **CMS** is for when you want to deliberately create or edit content — browsing your notes, making clean edits, working more like an editor than a conversationalist.
51
+
52
+ Most people spend most of their time in Chat. The CMS becomes useful once you have something worth editing.
53
+
54
+ ---
55
+
56
+ ## Other ways to chat with Rover
57
+
58
+ `/chat` is the primary interface, but Rover can also be reached through messaging platforms. Discord is tested and working. Slack, WhatsApp Business, and similar should work out of the box — we'll send setup steps if that's part of your configuration.
59
+
60
+ **Talking to another Rover**
61
+
62
+ If you know another Rover user, you can add them to your contacts and call their Rover directly from your chat.
63
+
64
+ - To add: _Add jane.rizom.ai to my contacts._
65
+ - To call: _Call jane.rizom.ai and ask [your question]._
66
+ You'll need their address — in the format `name.rizom.ai` — which they can share with you directly.
67
+
68
+ ---
69
+
70
+ ## Connecting Rover to other tools
71
+
72
+ Rover can connect to external tools via MCP — a standard protocol that works in two directions: agentic AI clients (like Claude Desktop) can use it to talk to Rover, and Rover can use it to talk to productivity tools like Notion or Linear.
73
+
74
+ Plugins exist for a number of tools already, and new ones can be built quickly in response to what you actually need. If there's a tool you'd want Rover to connect to, tell us.
75
+
76
+ If MCP is part of your setup, we'll send specific instructions alongside your URL.
77
+
78
+ ---
79
+
80
+ ## A few common questions
81
+
82
+ **How do I access my data?**
83
+ Your primary interface is the CMS (`/cms`), where you can browse and edit everything you've saved. If you're set up with GitHub access, your content also lives in a private repository you can access directly.
84
+
85
+ **Does Rover connect to the internet?**
86
+ No — and that's intentional. Rover works with what you've put into it, not with whatever the internet currently says. That means its answers are grounded in your actual knowledge base, not in generic search results.
87
+
88
+ **What does this cost?**
89
+ Nothing during the pilot. We cover hosting costs while you're part of the programme.
90
+
91
+ ---
92
+
93
+ ## This is a pilot
94
+
95
+ Rover works. But it's not finished.
96
+
97
+ You'll hit rough edges. Some things you try won't work. Some things you expect to be there won't be yet. That's normal — and it's actually why you're here.
98
+
99
+ There's a ceiling on how much Rover can improve without real people using it on real problems. We've reached that ceiling on our own. Your usage is what lets the product become what it's capable of becoming. A single Rover in isolation can only do so much — the network only becomes real when there are enough active, populated Rovers in it.
100
+
101
+ Rover has a built-in wishlist. If you ask it to do something it can't do yet, it should tell you clearly and log the request — that goes back to us as a signal for where the product needs to go next.
102
+
103
+ When something breaks or falls short, tell us: what you were trying to do, what you expected, and what happened instead.
104
+
105
+ ---
106
+
107
+ ## Your access details
108
+
109
+ When we onboard you, we'll send something like:
110
+
111
+ ```
112
+ Chat URL: https://<handle>.rizom.ai/chat
113
+ Dashboard URL: https://<handle>.rizom.ai/
114
+ CMS URL: https://<handle>.rizom.ai/cms
115
+ Discord: yes/no — setup steps below if yes
116
+ MCP: enabled/not enabled — details below if enabled
117
+ ```
118
+
119
+ If anything is unclear, reply with what you're seeing and we'll help.
@@ -3,6 +3,9 @@
3
3
  "private": true,
4
4
  "type": "module",
5
5
  "packageManager": "bun@__BUN_VERSION__",
6
+ "dependencies": {
7
+ "age-encryption": "^0.3.0"
8
+ },
6
9
  "devDependencies": {
7
10
  "@rizom/ops": "__BRAINS_OPS_VERSION__"
8
11
  }
@@ -6,3 +6,6 @@ contentRepoPrefix: rover-
6
6
  domainSuffix: .rizom.ai
7
7
  preset: core
8
8
  aiApiKey: AI_API_KEY
9
+ gitSyncToken: GIT_SYNC_TOKEN
10
+ contentRepoAdminToken: CONTENT_REPO_ADMIN_TOKEN
11
+ agePublicKey: age1replace-with-your-public-key
@@ -1,3 +1,7 @@
1
1
  handle: alice
2
+ anchorProfile:
3
+ name: Alice Example
4
+ description: Replace this with Alice's real public profile summary.
2
5
  discord:
3
- enabled: false
6
+ enabled: true
7
+ # anchorUserId: "123456789012345678"
@@ -1,6 +0,0 @@
1
- export interface UserSecretNames {
2
- gitSyncTokenSecretName: string;
3
- mcpAuthTokenSecretName: string;
4
- discordBotTokenSecretName: string;
5
- }
6
- export declare function deriveUserSecretNames(handle: string): UserSecretNames;
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
-
4
- BRAIN_FILE="${BRAIN_YAML_PATH:-brain.yaml}"
5
- SSH_USER="$(ruby -e 'require "yaml"; config = YAML.load_file("deploy/kamal/deploy.yml") || {}; puts(config.dig("ssh", "user") || "root")')"
6
- IFS=',' read -ra HOSTS <<< "$KAMAL_HOSTS"
7
- for host in "${HOSTS[@]}"; do
8
- scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null "$BRAIN_FILE" "${SSH_USER}@${host}:/opt/brain.yaml"
9
- done
@@ -1,15 +0,0 @@
1
- ARG BUN_VERSION=1.3.10
2
- FROM oven/bun:${BUN_VERSION}-slim
3
-
4
- ARG BRAIN_VERSION
5
- WORKDIR /app
6
-
7
- RUN test -n "$BRAIN_VERSION" \
8
- && printf '{"name":"rover-pilot-runtime","private":true}\n' > package.json \
9
- && bun add @rizom/brain@$BRAIN_VERSION
10
-
11
- ENV XDG_DATA_HOME=/data
12
- ENV XDG_CONFIG_HOME=/config
13
- RUN mkdir -p /app/brain-data /data /config && chmod -R 777 /app/brain-data /data /config
14
-
15
- CMD ["sh", "-c", "exec ./node_modules/.bin/brain start"]
@@ -1,39 +0,0 @@
1
- service: rover
2
- image: <%= ENV['IMAGE_REPOSITORY'] %>
3
-
4
- servers:
5
- mcp:
6
- hosts:
7
- - <%= ENV['SERVER_IP'] %>
8
-
9
- proxy:
10
- ssl:
11
- certificate_pem: CERTIFICATE_PEM
12
- private_key_pem: PRIVATE_KEY_PEM
13
- hosts:
14
- - <%= ENV['BRAIN_DOMAIN'] %>
15
- app_port: 3333
16
- healthcheck:
17
- path: /health
18
-
19
- registry:
20
- server: ghcr.io
21
- username: <%= ENV['REGISTRY_USERNAME'] %>
22
- password:
23
- - KAMAL_REGISTRY_PASSWORD
24
-
25
- builder:
26
- arch: amd64
27
-
28
- env:
29
- clear:
30
- NODE_ENV: production
31
- secret:
32
- - AI_API_KEY
33
- - GIT_SYNC_TOKEN
34
- - MCP_AUTH_TOKEN
35
- - DISCORD_BOT_TOKEN
36
-
37
- volumes:
38
- - /opt/brain-data:/app/brain-data
39
- - /opt/brain.yaml:/app/brain.yaml