@wipcomputer/wip-ldm-os 0.4.85-alpha.3 → 0.4.85-alpha.30

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 (43) hide show
  1. package/README.md +22 -2
  2. package/SKILL.md +136 -14
  3. package/bin/ldm.js +422 -75
  4. package/docs/universal-installer/SPEC.md +16 -3
  5. package/docs/universal-installer/TECHNICAL.md +4 -4
  6. package/lib/deploy.mjs +104 -20
  7. package/lib/detect.mjs +35 -4
  8. package/lib/registry-migrations.mjs +296 -0
  9. package/package.json +17 -2
  10. package/scripts/test-crc-agentid-tenant-boundary.mjs +80 -0
  11. package/scripts/test-crc-e2ee-key-persistence.mjs +150 -0
  12. package/scripts/test-crc-e2ee-session-route.mjs +129 -0
  13. package/scripts/test-crc-pair-login-flow.mjs +40 -0
  14. package/scripts/test-crc-pair-relink-audit-and-rotation.mjs +164 -0
  15. package/scripts/test-crc-pair-status-poll-token.mjs +73 -0
  16. package/scripts/test-crc-websocket-abuse-limits.mjs +128 -0
  17. package/scripts/test-install-prompt-policy.mjs +84 -0
  18. package/scripts/test-installer-skill-directory.mjs +55 -0
  19. package/scripts/test-installer-skill-dry-run-destinations.mjs +100 -0
  20. package/scripts/test-installer-target-self-update.mjs +131 -0
  21. package/scripts/test-ldm-status-concurrency.mjs +118 -0
  22. package/scripts/test-ldm-status-timeout.mjs +96 -0
  23. package/scripts/test-legacy-npm-sources-migration.mjs +460 -0
  24. package/scripts/test-readme-install-prompt.mjs +66 -0
  25. package/shared/templates/install-prompt.md +20 -2
  26. package/src/hosted-mcp/README.md +37 -0
  27. package/src/hosted-mcp/app/footer.js +74 -0
  28. package/src/hosted-mcp/app/kaleidoscope-login.html +846 -0
  29. package/src/hosted-mcp/app/pair.html +165 -57
  30. package/src/hosted-mcp/app/sprites.png +0 -0
  31. package/src/hosted-mcp/codex-relay-e2ee-registry.mjs +208 -0
  32. package/src/hosted-mcp/codex-relay-ws-abuse-limits.mjs +140 -0
  33. package/src/hosted-mcp/demo/index.html +3 -7
  34. package/src/hosted-mcp/demo/login.html +318 -20
  35. package/src/hosted-mcp/deploy.sh +308 -56
  36. package/src/hosted-mcp/docs/self-host.md +268 -0
  37. package/src/hosted-mcp/nginx/codex-relay.conf +25 -0
  38. package/src/hosted-mcp/nginx/conf.d/redact-logs.conf +60 -0
  39. package/src/hosted-mcp/nginx/mcp-oauth.conf +58 -0
  40. package/src/hosted-mcp/nginx/wip.computer.conf +25 -1
  41. package/src/hosted-mcp/scripts/audit-logs.sh +205 -0
  42. package/src/hosted-mcp/scripts/verify-deploy.sh +102 -0
  43. package/src/hosted-mcp/server.mjs +1034 -146
package/README.md CHANGED
@@ -22,7 +22,19 @@ Open your AI and paste this:
22
22
  ```
23
23
  Read https://wip.computer/install/wip-ldm-os.txt
24
24
 
25
- Check if LDM OS is already installed. If it is, run ldm install --dry-run and show me what I have and what's new.
25
+ Use the install document and live local checks as the source of truth.
26
+ Do not search memory or prior notes for this install. Do not pre-load context from `MEMORY.md`, `crystal_search`, local skill dev guides, or other local memory before fetching the install document.
27
+ Do not run GitHub commands during this install flow. Do not run or request approval for `gh release`, `gh api`, or `gh search`. If release notes are not available from local or npm metadata, say that and do not fetch them from GitHub.
28
+
29
+ Check if LDM OS is installed (`which ldm && ldm --version`). Branch.
30
+
31
+ If installed: run `ldm status`, check available npm tracks from the install document, and show me the version table, what's new for each component, and which stable/current, beta, and alpha versions are available. Then ask:
32
+ - Do you have questions?
33
+ - Want to see a dry run?
34
+
35
+ If yes to dry run, use the selected track's dry-run path from the install document.
36
+
37
+ If I say install, use the selected track's install path from the install document, then run `ldm doctor`.
26
38
 
27
39
  If not, walk me through setup and explain:
28
40
 
@@ -35,7 +47,13 @@ Then ask:
35
47
  - Do you have questions?
36
48
  - Want to see a dry run?
37
49
 
38
- If I say yes: Install the CLI first (npm install -g @wipcomputer/wip-ldm-os) and then run ldm install --dry-run.
50
+ If yes to dry run, install the CLI first using the selected track's bootstrap command from the install document.
51
+
52
+ Then run:
53
+ `ldm init --dry-run`
54
+
55
+ If I say install, run:
56
+ `ldm init`
39
57
 
40
58
  Show me exactly what will change. Don't install anything until I say "install".
41
59
  ```
@@ -105,6 +123,8 @@ The OS connects your AIs. Add-ons are what they actually use. Each one is a full
105
123
  ## More Info
106
124
 
107
125
  - [Architecture, principles, and technical details](TECHNICAL.md)
126
+ - [Hosted MCP and relay source](src/hosted-mcp/README.md)
127
+ - [Hosted relay self-host guide](src/hosted-mcp/docs/self-host.md)
108
128
 
109
129
  ## License
110
130
 
package/SKILL.md CHANGED
@@ -27,6 +27,102 @@ metadata:
27
27
 
28
28
  # LDM OS
29
29
 
30
+ ## Source of truth
31
+
32
+ Memory policy for install flows: do not consult `MEMORY.md`, do not run `crystal_search`, and do not search prior notes when this skill is invoked, including in any parallel or batched exploration step. The only context sources for this install flow are `https://wip.computer/install/wip-ldm-os.txt` and the live local commands that document prescribes. Read that document and run those commands. Do not pre-load other context.
33
+
34
+ Use this install document and live local checks as the source of truth. Do not search memory or prior notes for this install.
35
+
36
+ Do not run GitHub commands during the install-state flow. Do not run or request approval for `gh release list`, `gh release view`, `gh api repos/*`, `gh search`, or any other GitHub query unless the user explicitly asks for release notes. Install-state answers should come from local commands, `ldm status`, and npm package metadata.
37
+
38
+ ## Tracks
39
+
40
+ LDM OS ships on three npm dist-tags. Each tag is just a name pointing at a specific version. Show the user the installed version and the available tracks in plain English. Do not paste raw JSON.
41
+
42
+ - **stable** (`ldm install`) ... npm `@latest`. Use this only when `@latest` resolves to a non-prerelease version. Default for production releases.
43
+ - **beta** (`ldm install --beta`) ... npm `@beta`. Prerelease track. Stabilization candidates.
44
+ - **alpha** (`ldm install --alpha`) ... npm `@alpha`. Canary track. Earliest access; expect breakage.
45
+
46
+ ### Pick the right track
47
+
48
+ Run this to get the dist-tags. Read the output and translate it into track names and versions.
49
+
50
+ ```bash
51
+ npm view @wipcomputer/wip-ldm-os dist-tags --json
52
+ ```
53
+
54
+ The npm `latest` tag is the stable/current track for user language. It is not guaranteed to be the newest prerelease. If `latest` points at a prerelease, explain that a stable release is not available yet.
55
+
56
+ User language maps to tracks like this:
57
+
58
+ - `stable`, `current`, or `latest` means `ldm install`
59
+ - `beta` or `latest beta` means `ldm install --beta`
60
+ - `alpha` or `latest alpha` means `ldm install --alpha`
61
+
62
+ Dry-run commands use the same selected track:
63
+
64
+ - stable/current/latest: `ldm install --dry-run`
65
+ - beta/latest beta: `ldm install --beta --dry-run`
66
+ - alpha/latest alpha: `ldm install --alpha --dry-run`
67
+
68
+ Install commands use the same selected track:
69
+
70
+ - stable/current/latest: `ldm install`
71
+ - beta/latest beta: `ldm install --beta`
72
+ - alpha/latest alpha: `ldm install --alpha`
73
+
74
+ First-time CLI bootstrap commands use the same selected track:
75
+
76
+ - stable/current/latest: `npm install -g @wipcomputer/wip-ldm-os`
77
+ - beta/latest beta: `npm install -g @wipcomputer/wip-ldm-os@beta`
78
+ - alpha/latest alpha: `npm install -g @wipcomputer/wip-ldm-os@alpha`
79
+
80
+ The `ldm install --<track>` command self-updates the LDM CLI to the matching npm dist-tag before running the install. **Do not run `npm install -g @wipcomputer/wip-ldm-os@latest` ahead of an alpha or beta install:** `@latest` resolves to the stable dist-tag and will downgrade an alpha-pinned CLI to stable.
81
+
82
+ If the user already named a track, do not force a generic chooser. Show the exact package, available version, track, and command you will run. Then wait for dry-run or install consent as appropriate.
83
+
84
+ If the user has not named a track, show what is installed and what is available, then ask which track they want to dry run or install.
85
+
86
+ Never pin a specific prerelease version in an install command, such as `@wipcomputer/wip-ldm-os@0.4.85-alpha.29`. Use the moving track flags.
87
+
88
+ ### How to phrase the track to the user
89
+
90
+ The README prompt should stay short. This install document owns the detailed track rules.
91
+
92
+ When the user asks for install state, say this first:
93
+
94
+ > You have `<LOCAL>` installed. Available: stable/current `<NPM_LATEST_OR_NONE>`, beta `<NPM_BETA_OR_NONE>`, alpha `<NPM_ALPHA_OR_NONE>`.
95
+
96
+ If no local install exists, say:
97
+
98
+ > LDM OS is not installed. Available: stable/current `<NPM_LATEST_OR_NONE>`, beta `<NPM_BETA_OR_NONE>`, alpha `<NPM_ALPHA_OR_NONE>`.
99
+
100
+ Then continue with the setup explanation and ask whether the user has questions or wants a dry run.
101
+
102
+ If the user named a track, answer directly:
103
+
104
+ > You asked for `<TRACK>`. The available `<TRACK>` version is `<VERSION>`. The dry-run command is `<COMMAND>`.
105
+
106
+ If the user says `stable`, `current`, or `latest` and npm `@latest` is a prerelease, say:
107
+
108
+ > Stable is not available yet. The stable/current track currently points at prerelease `<NPM_LATEST>`. Available prerelease tracks are beta `<NPM_BETA_OR_NONE>` and alpha `<NPM_ALPHA_OR_NONE>`. Which track do you want?
109
+
110
+ Do not treat public install docs as beta-only or alpha-only. Alpha, beta, and stable are all public npm tracks. Disclose risk and let the user choose.
111
+
112
+ Track risk language:
113
+
114
+ - stable/current/latest: normal public path, once it is a real non-prerelease release.
115
+ - beta: public prerelease path.
116
+ - alpha: canary path, likely rougher, but installable if the user asks for it.
117
+
118
+ #### Anti-patterns ... do NOT print any of these.
119
+
120
+ - Do not print raw `npm view ... dist-tags` JSON.
121
+ - Do not use `latest` as a synonym for newest prerelease.
122
+ - Do not give a hardcoded single-track recommendation when the user asked what is available.
123
+ - Do not force a generic chooser after the user already said `latest alpha`, `alpha`, `latest beta`, `beta`, `stable`, `current`, or `latest`.
124
+ - Do not run `gh release list` during install-state detection.
125
+
30
126
  ## Step 1: Check if installed
31
127
 
32
128
  ```bash
@@ -62,12 +158,16 @@ Always a table. Every component with an update gets its own row.
62
158
 
63
159
  **Do NOT skip this step.**
64
160
 
65
- ```bash
66
- gh release list --repo wipcomputer/<repo-name> --limit 5 --json tagName,name --jq '.[]'
67
- gh release view <tag> --repo wipcomputer/<repo-name> --json body --jq .body
68
- ```
161
+ Use the output of `ldm status`, installed package metadata, and npm metadata. Do not use GitHub commands here.
162
+
163
+ If npm metadata for a package does not include release notes:
164
+ - Show the version difference, for example `wip-repos v1.9.69 -> v1.9.70`.
165
+ - Say "release notes not available from local metadata."
166
+ - Do not fetch from GitHub. Do not run `gh release`, `gh api`, `gh search`, or any other GitHub query.
167
+ - Do not infer release-note content from package descriptions, commit messages, or repo READMEs.
168
+ - If the user wants release-note details, wait for an explicit request in plain language. An approval dialog is not a user request.
69
169
 
70
- Translate release notes to user language. Every bullet answers "what changed for ME?"
170
+ Translate available update information to user language. Every bullet answers "what changed for ME?" If the status output does not include enough detail for a component, say that clearly and do not invent release notes.
71
171
 
72
172
  Good: "Your AIs now explain what LDM OS actually does when you ask them to install it"
73
173
  Bad: "Restored rich product content to SKILL.md"
@@ -83,15 +183,23 @@ Show 2-3 bullets per component. Then:
83
183
 
84
184
  Do you have questions? Want to see a dry run?
85
185
 
86
- ```bash
87
- ldm install --dry-run
88
- ```
186
+ Use the selected track from **Pick the right track**:
187
+
188
+ - stable/current/latest: `ldm install --dry-run`
189
+ - beta/latest beta: `ldm install --beta --dry-run`
190
+ - alpha/latest alpha: `ldm install --alpha --dry-run`
89
191
 
90
192
  Don't install until the user says "install".
91
193
 
194
+ Use the selected track from **Pick the right track**:
195
+
196
+ - stable/current/latest: `ldm install`
197
+ - beta/latest beta: `ldm install --beta`
198
+ - alpha/latest alpha: `ldm install --alpha`
199
+
200
+ Then verify with:
201
+
92
202
  ```bash
93
- npm install -g @wipcomputer/wip-ldm-os@latest
94
- ldm install
95
203
  ldm doctor
96
204
  ```
97
205
 
@@ -117,10 +225,11 @@ Read [references/SKILLS-CATALOG.md](references/SKILLS-CATALOG.md). Present the i
117
225
 
118
226
  Do you have questions? Want to see a dry run?
119
227
 
120
- Install the CLI first:
121
- ```bash
122
- npm install -g @wipcomputer/wip-ldm-os
123
- ```
228
+ Install the CLI first using the selected track from **Pick the right track**:
229
+
230
+ - stable/current/latest: `npm install -g @wipcomputer/wip-ldm-os`
231
+ - beta/latest beta: `npm install -g @wipcomputer/wip-ldm-os@beta`
232
+ - alpha/latest alpha: `npm install -g @wipcomputer/wip-ldm-os@alpha`
124
233
 
125
234
  If npm/node is not installed: Node.js 18+ from https://nodejs.org first.
126
235
 
@@ -161,6 +270,19 @@ ldm doctor --fix
161
270
  - **Dry-run first.** Always. Only install when the user says "install".
162
271
  - **Never touch sacred data.** crystal.db, agent data, secrets, state files are never overwritten.
163
272
 
273
+ ## Track caveats
274
+
275
+ Tell the user, scaled to the track they're on:
276
+
277
+ - **alpha**: canary path, earliest access, breakage possible. Use only when the user explicitly opts in.
278
+ - **beta**: stabilization candidate. Same shape as alpha but feature-frozen for the cut.
279
+ - **stable**: production. The user should be on this unless they've asked otherwise.
280
+
281
+ Roadmap caveats that apply to every track right now:
282
+
283
+ - Registry source-type migration is mid-flight. After Phase 2 ships, `ldm status` will categorize every extension by source type (`npm` / `git` / `bundled` / `private`). Until then, some entries appear under "Untracked extensions" with a `ldm doctor --reclassify-sources` remediation pointer.
284
+ - LDM OS is the canonical pattern source for child packages (Codex Remote Control, future tools). Install-prompt structure changes here propagate downstream; child packages should not lead the parent.
285
+
164
286
  ## Reference files
165
287
 
166
288
  For detailed information, read these on demand (not on every activation):