@wipcomputer/wip-ldm-os 0.4.58 → 0.4.60

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 CHANGED
@@ -9,7 +9,7 @@ license: MIT
9
9
  compatibility: Requires git, npm, node. Node.js 18+.
10
10
  metadata:
11
11
  display-name: "LDM OS"
12
- version: "0.4.58"
12
+ version: "0.4.60"
13
13
  homepage: "https://github.com/wipcomputer/wip-ldm-os"
14
14
  author: "Parker Todd Brooks"
15
15
  category: infrastructure
package/bin/ldm.js CHANGED
@@ -594,6 +594,30 @@ async function cmdInit() {
594
594
  } catch {}
595
595
  }
596
596
 
597
+ // Deploy LaunchAgents to ~/Library/LaunchAgents/
598
+ const launchSrc = join(__dirname, '..', 'shared', 'launchagents');
599
+ const launchDest = join(HOME, 'Library', 'LaunchAgents');
600
+ if (existsSync(launchSrc) && existsSync(launchDest)) {
601
+ let launchCount = 0;
602
+ for (const file of readdirSync(launchSrc)) {
603
+ if (!file.endsWith('.plist')) continue;
604
+ const src = join(launchSrc, file);
605
+ const dest = join(launchDest, file);
606
+ const srcContent = readFileSync(src, 'utf8');
607
+ const destContent = existsSync(dest) ? readFileSync(dest, 'utf8') : '';
608
+ if (srcContent !== destContent) {
609
+ // Unload old, write new, load new
610
+ try { execSync(`launchctl unload "${dest}" 2>/dev/null`, { stdio: 'pipe' }); } catch {}
611
+ cpSync(src, dest);
612
+ try { execSync(`launchctl load "${dest}" 2>/dev/null`, { stdio: 'pipe' }); } catch {}
613
+ launchCount++;
614
+ }
615
+ }
616
+ if (launchCount > 0) {
617
+ console.log(` + ${launchCount} LaunchAgent(s) deployed to ~/Library/LaunchAgents/`);
618
+ }
619
+ }
620
+
597
621
  console.log('');
598
622
  console.log(` LDM OS v${PKG_VERSION} initialized at ${LDM_ROOT}`);
599
623
  console.log('');
@@ -2703,7 +2727,7 @@ async function main() {
2703
2727
 
2704
2728
  if (sub === '--help' || sub === '-h') {
2705
2729
  console.log(`
2706
- ldm worktree add <branch> Create worktree in _worktrees/ (auto-detects repo)
2730
+ ldm worktree add <branch> Create worktree in .worktrees/ (auto-detects repo)
2707
2731
  ldm worktree list List all worktrees across repos
2708
2732
  ldm worktree clean Prune worktrees for merged branches
2709
2733
  ldm worktree remove <path> Remove a specific worktree
@@ -2732,7 +2756,7 @@ async function main() {
2732
2756
 
2733
2757
  const repoName = basename(repoRoot);
2734
2758
  const branchSuffix = branchName.replace(/\//g, '--');
2735
- const worktreesDir = join(dirname(repoRoot), '_worktrees');
2759
+ const worktreesDir = join(dirname(repoRoot), '.worktrees');
2736
2760
  const worktreePath = join(worktreesDir, `${repoName}--${branchSuffix}`);
2737
2761
 
2738
2762
  mkdirSync(worktreesDir, { recursive: true });
@@ -2777,14 +2801,14 @@ async function main() {
2777
2801
  }
2778
2802
  } catch {}
2779
2803
 
2780
- // Also check _worktrees/ dir
2781
- const worktreesDir = join(dirname(process.cwd()), '_worktrees');
2804
+ // Also check .worktrees/ dir
2805
+ const worktreesDir = join(dirname(process.cwd()), '.worktrees');
2782
2806
  if (existsSync(worktreesDir)) {
2783
2807
  try {
2784
2808
  const entries = readdirSync(worktreesDir, { withFileTypes: true })
2785
2809
  .filter(d => d.isDirectory());
2786
2810
  if (entries.length > 0) {
2787
- console.log(` _worktrees/:`);
2811
+ console.log(` .worktrees/:`);
2788
2812
  for (const d of entries) {
2789
2813
  console.log(` ${d.name}`);
2790
2814
  }
package/catalog.json CHANGED
@@ -286,7 +286,7 @@
286
286
  "id": "tavily",
287
287
  "name": "Tavily",
288
288
  "description": "Web search and content extraction via Tavily API.",
289
- "npm": "tavily",
289
+ "npm": "@wipcomputer/openclaw-tavily",
290
290
  "repo": "wipcomputer/openclaw-tavily",
291
291
  "registryMatches": [
292
292
  "tavily"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-ldm-os",
3
- "version": "0.4.58",
3
+ "version": "0.4.60",
4
4
  "type": "module",
5
5
  "description": "LDM OS: identity, memory, and sovereignty infrastructure for AI agents",
6
6
  "engines": {
@@ -0,0 +1,31 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>Label</key>
6
+ <string>ai.openclaw.ldm-backup</string>
7
+ <key>ProgramArguments</key>
8
+ <array>
9
+ <string>bash</string>
10
+ <string>/Users/lesa/.ldm/bin/ldm-backup.sh</string>
11
+ </array>
12
+ <key>StartCalendarInterval</key>
13
+ <dict>
14
+ <key>Hour</key>
15
+ <integer>3</integer>
16
+ <key>Minute</key>
17
+ <integer>0</integer>
18
+ </dict>
19
+ <key>StandardOutPath</key>
20
+ <string>/Users/lesa/.ldm/logs/backup.log</string>
21
+ <key>StandardErrorPath</key>
22
+ <string>/Users/lesa/.ldm/logs/backup.log</string>
23
+ <key>EnvironmentVariables</key>
24
+ <dict>
25
+ <key>HOME</key>
26
+ <string>/Users/lesa</string>
27
+ <key>PATH</key>
28
+ <string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin</string>
29
+ </dict>
30
+ </dict>
31
+ </plist>