@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.
- package/README.md +22 -2
- package/SKILL.md +136 -14
- package/bin/ldm.js +422 -75
- package/docs/universal-installer/SPEC.md +16 -3
- package/docs/universal-installer/TECHNICAL.md +4 -4
- package/lib/deploy.mjs +104 -20
- package/lib/detect.mjs +35 -4
- package/lib/registry-migrations.mjs +296 -0
- package/package.json +17 -2
- package/scripts/test-crc-agentid-tenant-boundary.mjs +80 -0
- package/scripts/test-crc-e2ee-key-persistence.mjs +150 -0
- package/scripts/test-crc-e2ee-session-route.mjs +129 -0
- package/scripts/test-crc-pair-login-flow.mjs +40 -0
- package/scripts/test-crc-pair-relink-audit-and-rotation.mjs +164 -0
- package/scripts/test-crc-pair-status-poll-token.mjs +73 -0
- package/scripts/test-crc-websocket-abuse-limits.mjs +128 -0
- package/scripts/test-install-prompt-policy.mjs +84 -0
- package/scripts/test-installer-skill-directory.mjs +55 -0
- package/scripts/test-installer-skill-dry-run-destinations.mjs +100 -0
- package/scripts/test-installer-target-self-update.mjs +131 -0
- package/scripts/test-ldm-status-concurrency.mjs +118 -0
- package/scripts/test-ldm-status-timeout.mjs +96 -0
- package/scripts/test-legacy-npm-sources-migration.mjs +460 -0
- package/scripts/test-readme-install-prompt.mjs +66 -0
- package/shared/templates/install-prompt.md +20 -2
- package/src/hosted-mcp/README.md +37 -0
- package/src/hosted-mcp/app/footer.js +74 -0
- package/src/hosted-mcp/app/kaleidoscope-login.html +846 -0
- package/src/hosted-mcp/app/pair.html +165 -57
- package/src/hosted-mcp/app/sprites.png +0 -0
- package/src/hosted-mcp/codex-relay-e2ee-registry.mjs +208 -0
- package/src/hosted-mcp/codex-relay-ws-abuse-limits.mjs +140 -0
- package/src/hosted-mcp/demo/index.html +3 -7
- package/src/hosted-mcp/demo/login.html +318 -20
- package/src/hosted-mcp/deploy.sh +308 -56
- package/src/hosted-mcp/docs/self-host.md +268 -0
- package/src/hosted-mcp/nginx/codex-relay.conf +25 -0
- package/src/hosted-mcp/nginx/conf.d/redact-logs.conf +60 -0
- package/src/hosted-mcp/nginx/mcp-oauth.conf +58 -0
- package/src/hosted-mcp/nginx/wip.computer.conf +25 -1
- package/src/hosted-mcp/scripts/audit-logs.sh +205 -0
- package/src/hosted-mcp/scripts/verify-deploy.sh +102 -0
- 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
|
-
|
|
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
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
|
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
|
-
|
|
87
|
-
|
|
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
|
-
|
|
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):
|