@wipcomputer/wip-ldm-os 0.2.1 → 0.2.2
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/SKILL.md +17 -2
- package/bin/ldm.mjs +57 -0
- package/package.json +1 -1
package/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ license: MIT
|
|
|
5
5
|
interface: [cli, skill]
|
|
6
6
|
metadata:
|
|
7
7
|
display-name: "LDM OS"
|
|
8
|
-
version: "0.2.
|
|
8
|
+
version: "0.2.2"
|
|
9
9
|
homepage: "https://github.com/wipcomputer/wip-ldm-os"
|
|
10
10
|
author: "Parker Todd Brooks"
|
|
11
11
|
category: infrastructure
|
|
@@ -89,7 +89,13 @@ LDM OS ships with a skill catalog. Show the user what's available:
|
|
|
89
89
|
|-------|-----------|--------|
|
|
90
90
|
| **Memory Crystal** (recommended) | Persistent memory. Search, capture, consolidation. | Stable |
|
|
91
91
|
| **AI DevOps Toolbox** | Release, deploy, license, repo management. | Stable |
|
|
92
|
-
| **
|
|
92
|
+
| **1Password** | 1Password secrets for AI agents. | Stable |
|
|
93
|
+
| **Markdown Viewer** | Live markdown viewer for AI pair-editing. | Stable |
|
|
94
|
+
| **xAI Grok** | xAI Grok API. Search the web, search X, generate images. | Stable |
|
|
95
|
+
| **X Platform** | X Platform API. Read posts, search tweets, post, upload media. | Stable |
|
|
96
|
+
| **OpenClaw** | AI agent platform. Run AI agents 24/7 with identity, memory, and tool access. | Stable |
|
|
97
|
+
| **Dream Weaver Protocol** | Memory consolidation protocol for AI agents. | Stable |
|
|
98
|
+
| **Bridge** | Cross-platform agent bridge. Claude Code to OpenClaw communication. | Stable |
|
|
93
99
|
|
|
94
100
|
To install a skill:
|
|
95
101
|
```bash
|
|
@@ -103,6 +109,8 @@ ldm install wipcomputer/memory-crystal
|
|
|
103
109
|
|
|
104
110
|
The installer detects what a repo supports (CLI, MCP Server, OpenClaw Plugin, Skill, CC Hook, Module) and deploys each interface to the right location automatically.
|
|
105
111
|
|
|
112
|
+
**Note:** Skills installed before LDM OS (via `crystal init`, `wip-install`, or manual setup) may not appear in the registry. Run `ldm install <org/repo>` to re-register them.
|
|
113
|
+
|
|
106
114
|
### Step 3: Verify
|
|
107
115
|
|
|
108
116
|
```bash
|
|
@@ -158,5 +166,12 @@ LDM OS is the runtime. Skills plug into it:
|
|
|
158
166
|
|
|
159
167
|
- **Memory Crystal** ... `wipcomputer/memory-crystal`
|
|
160
168
|
- **AI DevOps Toolbox** ... `wipcomputer/wip-ai-devops-toolbox`
|
|
169
|
+
- **1Password** ... `wipcomputer/wip-1password`
|
|
170
|
+
- **Markdown Viewer** ... `wipcomputer/wip-markdown-viewer`
|
|
171
|
+
- **xAI Grok** ... `wipcomputer/wip-xai-grok`
|
|
172
|
+
- **X Platform** ... `wipcomputer/wip-xai-x`
|
|
173
|
+
- **OpenClaw** ... `openclaw/openclaw`
|
|
174
|
+
- **Dream Weaver Protocol** ... `wipcomputer/dream-weaver-protocol`
|
|
175
|
+
- **Bridge** ... `wipcomputer/wip-bridge`
|
|
161
176
|
|
|
162
177
|
Run `ldm install` anytime to add more skills.
|
package/bin/ldm.mjs
CHANGED
|
@@ -349,9 +349,60 @@ async function cmdInstall() {
|
|
|
349
349
|
await installFromPath(repoPath);
|
|
350
350
|
}
|
|
351
351
|
|
|
352
|
+
// ── Auto-detect unregistered extensions ──
|
|
353
|
+
|
|
354
|
+
function autoDetectExtensions() {
|
|
355
|
+
if (!existsSync(LDM_EXTENSIONS)) return;
|
|
356
|
+
const registry = readJSON(REGISTRY_PATH);
|
|
357
|
+
if (!registry) return;
|
|
358
|
+
|
|
359
|
+
const registered = Object.keys(registry.extensions || {});
|
|
360
|
+
let found = 0;
|
|
361
|
+
|
|
362
|
+
try {
|
|
363
|
+
const dirs = readdirSync(LDM_EXTENSIONS, { withFileTypes: true });
|
|
364
|
+
for (const dir of dirs) {
|
|
365
|
+
if (!dir.isDirectory()) continue;
|
|
366
|
+
if (dir.name === '_trash' || dir.name.startsWith('.')) continue;
|
|
367
|
+
|
|
368
|
+
const extPath = join(LDM_EXTENSIONS, dir.name);
|
|
369
|
+
const pkgPath = join(extPath, 'package.json');
|
|
370
|
+
if (!existsSync(pkgPath)) continue;
|
|
371
|
+
|
|
372
|
+
// Check if already registered (by directory name or by ldmPath)
|
|
373
|
+
const alreadyRegistered = registered.some(name => {
|
|
374
|
+
const info = registry.extensions[name];
|
|
375
|
+
return name === dir.name || info?.ldmPath === extPath;
|
|
376
|
+
});
|
|
377
|
+
if (alreadyRegistered) continue;
|
|
378
|
+
|
|
379
|
+
// Auto-register
|
|
380
|
+
const pkg = readJSON(pkgPath);
|
|
381
|
+
if (!pkg) continue;
|
|
382
|
+
|
|
383
|
+
registry.extensions[dir.name] = {
|
|
384
|
+
name: dir.name,
|
|
385
|
+
version: pkg.version || '?',
|
|
386
|
+
source: null,
|
|
387
|
+
interfaces: [],
|
|
388
|
+
ldmPath: extPath,
|
|
389
|
+
updatedAt: new Date().toISOString(),
|
|
390
|
+
autoDetected: true,
|
|
391
|
+
};
|
|
392
|
+
found++;
|
|
393
|
+
}
|
|
394
|
+
} catch {}
|
|
395
|
+
|
|
396
|
+
if (found > 0) {
|
|
397
|
+
writeJSON(REGISTRY_PATH, registry);
|
|
398
|
+
}
|
|
399
|
+
return found;
|
|
400
|
+
}
|
|
401
|
+
|
|
352
402
|
// ── ldm install (bare): show catalog + update registered ──
|
|
353
403
|
|
|
354
404
|
async function cmdInstallCatalog() {
|
|
405
|
+
autoDetectExtensions();
|
|
355
406
|
const registry = readJSON(REGISTRY_PATH);
|
|
356
407
|
const installed = Object.keys(registry?.extensions || {});
|
|
357
408
|
const components = loadCatalog();
|
|
@@ -463,6 +514,12 @@ function cmdDoctor() {
|
|
|
463
514
|
console.log(' ldm doctor');
|
|
464
515
|
console.log(' ────────────────────────────────────');
|
|
465
516
|
|
|
517
|
+
// Auto-detect unregistered extensions before checking
|
|
518
|
+
const detected = autoDetectExtensions();
|
|
519
|
+
if (detected > 0) {
|
|
520
|
+
console.log(` + Auto-detected ${detected} unregistered extension(s)`);
|
|
521
|
+
}
|
|
522
|
+
|
|
466
523
|
let issues = 0;
|
|
467
524
|
|
|
468
525
|
// 1. Check LDM root
|