InstallModelSync.ts has no Linux branch, so InstallAll exits non-zero on every Linux install

Aperta
#2,646 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 7 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
55/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
bun, linux, typescript
Ambito
cli, devops

Direzione di ricerca

Start with LIFEOS/TOOLS/InstallModelSync.ts:53 and compare its platform handling with LIFEOS/TOOLS/InstallWorkSweep.ts, which the issue says already writes systemd user units on Linux. Then inspect LIFEOS/TOOLS/InstallAll.ts and LIFEOS/TOOLS/Services.ts to trace the Linux core service targets and the launchd-only services. Reproduce on Linux with the listed InstallAll command; done means core services install successfully and macOS-only targets do not make Linux installation fail.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Version

LifeOS 8.761.0 · attestation: 1 system file(s) differ from danielmiessler/[email protected]:

  • LIFEOS/DOCUMENTATION/ARCHITECTURE_SUMMARY.md
What is broken

On Linux, com.lifeos.modelsync is a core service (optIn: false in LIFEOS/TOOLS/Services.ts), and the Setup consent text says Linux starts "the ones with a systemd unit". But InstallModelSync.ts has no Linux branch. It writes a launchd plist under ~/Library/LaunchAgents/ and then spawns launchctl, which throws ENOENT. So Services.ts install --yes reports "1 service install(s) FAILED", and InstallAll.ts --yes exits non-zero on every Linux install. That breaks its contract that it exits 0 when every core service is loaded. It also leaves a stray plist in ~/Library on a Linux home. Related: com.lifeos.pulse-menubar and com.lifeos.deriver are launchd-only by design (per the Services.ts header comment). They are still in InstallAll's core target list on Linux: the menu-bar build fails on a missing swiftc, and the deriver prints ✅ but writes no unit. Sibling installers such as InstallWorkSweep.ts already write a systemd --user unit pair on Linux, so modelsync could follow that pattern, and the macOS-only services could be filtered out of the Linux core targets.

Where (file:line)

LIFEOS/TOOLS/InstallModelSync.ts:53

Repro on a clean tree
1. On Ubuntu with systemd --user (lingering on, XDG_RUNTIME_DIR set), run `bun <skill>/Tools/InstallAll.ts --yes --json --components statusline,tooltips,spinnerverbs,agents,commands,workflows,worksweep,derivedsync`.
2. Every step through Migrate is ok; CoreServices fails: pulse-menubar (swiftc not found), modelsync (exit 1).
3. Run `bun LIFEOS/TOOLS/InstallModelSync.ts` directly: `error: Executable not found in $PATH: "launchctl"`.
Negative control

Probe: bun LIFEOS/TOOLS/InstallModelSync.ts · exit 1 · captured 2026-11-07T03:52:50.750Z

Red looks like: Executable not found in $PATH: "launchctl"

18 | const LABEL = "com.lifeos.modelsync";
19 | const TEMPLATE = lifeosPath("TOOLS", `${LABEL}.plist.template`);
20 | const TARGET = join(HOME, "Library", "LaunchAgents", `${LABEL}.plist`);
21 | 
22 | async function sh(cmd: string[]): Promise<{ exit: number; out: string }> {
23 |   const proc = Bun.spawn(cmd, { stdout: "pipe", stderr: "pipe" });
                        ^
error: Executable not found in $PATH: "launchctl"
  path: "launchctl",
 errno: -2,
  code: "ENOENT"

      at sh (~/.claude/LIFEOS/TOOLS/InstallModelSync.ts:23:20)
      at ~/.claude/LIFEOS/TOOLS/InstallModelSync.ts:54:7

Bun v1.4.4 (Linux x64)
Suggested fix

None proposed.

Environment
  • OS: Ubuntu 26.04.1 LTS (x64)
  • Harness: claude-code
  • bun: 1.4.4 · git: 2.53.0
  • Doctor broken: codex, cloudflare
Lingua principale
TypeScript
Stelle
19.7k
Fork
2.5k
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di danielmiessler/LifeOS

Tutte le issue di danielmiessler/LifeOS

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.