@alexberardi/jarvis-admin 0.1.88 → 0.1.90

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/public/index.html CHANGED
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <link rel="icon" type="image/png" href="/favicon.png" />
7
7
  <title>Jarvis Admin</title>
8
- <script type="module" crossorigin src="/assets/index-DJYiAt_D.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-BzdL5eEk.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-Fs0WOK9x.css">
10
10
  </head>
11
11
  <body>
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "3.0.0",
3
- "platformVersion": "0.1.88",
3
+ "platformVersion": "0.1.90",
4
4
  "services": [
5
5
  {
6
6
  "id": "jarvis-config-service",
@@ -0,0 +1,61 @@
1
+ export type Emit = (data: Record<string, unknown>) => void;
2
+ export interface NativeUpdateResult {
3
+ updated: string[];
4
+ skipped: string[];
5
+ failed: {
6
+ id: string;
7
+ error: string;
8
+ }[];
9
+ }
10
+ export interface NativeUpdateDeps {
11
+ /** ~/.jarvis/native — where managed checkouts live. */
12
+ nativeRoot: string;
13
+ /** JARVIS_ROOT, when the operator is running services from a dev tree. */
14
+ devRoot: string | null;
15
+ /** Service IDs currently installed as LaunchAgents. */
16
+ installedNativeIds: () => string[];
17
+ /** Where a service's source actually lives (dev tree or managed checkout). */
18
+ sourceDirFor: (id: string) => string;
19
+ /** True only for a checkout WE own under nativeRoot — never a dev tree. */
20
+ isManagedCheckout: (dir: string) => boolean;
21
+ /** True when the checkout is on disk with a deploy script. */
22
+ hasCheckout: (dir: string) => boolean;
23
+ run: (cmd: string, args: string[], cwd: string, env?: NodeJS.ProcessEnv) => Promise<void>;
24
+ log: {
25
+ info: (...a: unknown[]) => void;
26
+ warn: (...a: unknown[]) => void;
27
+ error: (...a: unknown[]) => void;
28
+ };
29
+ }
30
+ /**
31
+ * Bring native (non-Docker) services up to date.
32
+ *
33
+ * On macOS, whisper / tts / llm-proxy run as launchd agents out of git checkouts
34
+ * under `~/.jarvis/native/<id>` rather than as containers. The platform upgrade
35
+ * regenerates compose and pulls Docker images — and did nothing at all for these.
36
+ * A native service therefore stayed pinned to whatever `main` happened to be on
37
+ * the day it was installed, with a full wipe-and-reinstall as the only way to
38
+ * move it.
39
+ *
40
+ * The update itself is small, because the run scripts already do the hard part:
41
+ * they reinstall deps when `pyproject.toml` changes (sentinel-gated) and run
42
+ * `alembic upgrade head` on every start. So moving the source and restarting the
43
+ * agent is enough — deps and migrations self-heal.
44
+ *
45
+ * git fetch --depth 1 origin HEAD (shallow clone: `git pull` can't fast-forward)
46
+ * git reset --hard FETCH_HEAD
47
+ * bash deploy-launchd.sh (idempotent: re-materializes plist + bootstraps)
48
+ *
49
+ * Two rules:
50
+ *
51
+ * 1. **Never touch a dev checkout.** If the source resolves into `JARVIS_ROOT`,
52
+ * it's the operator's actual working repo — `git reset --hard` there would
53
+ * destroy uncommitted work. Skip it and say so.
54
+ * 2. **Per-service failures are non-fatal.** A native service that fails to
55
+ * update leaves the box on older-but-working code; taking the whole platform
56
+ * upgrade down over it (after the containers have already moved) would be
57
+ * worse. Report and continue.
58
+ */
59
+ export declare function updateNativeServices(deps: NativeUpdateDeps, emit: Emit): Promise<NativeUpdateResult>;
60
+ export declare function defaultNativeUpdateDeps(log: NativeUpdateDeps['log']): NativeUpdateDeps;
61
+ //# sourceMappingURL=native-updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-updater.d.ts","sourceRoot":"","sources":["../../../src/services/upgrade/native-updater.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAE1D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACxC;AAED,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAA;IAClB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,uDAAuD;IACvD,kBAAkB,EAAE,MAAM,MAAM,EAAE,CAAA;IAClC,8EAA8E;IAC9E,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,2EAA2E;IAC3E,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAC3C,8DAA8D;IAC9D,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IACrC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzF,GAAG,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;QAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;KAAE,CAAA;CAC5G;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,kBAAkB,CAAC,CAmD7B;AA2BD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,gBAAgB,CA4BtF"}
@@ -0,0 +1,131 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { spawn } from 'node:child_process';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { parseRegistry } from '../generators/service-registry.js';
6
+ import registryData from '../../data/service-registry.json' with { type: 'json' };
7
+ import { getComposePath } from '../compose-path.js';
8
+ /**
9
+ * Bring native (non-Docker) services up to date.
10
+ *
11
+ * On macOS, whisper / tts / llm-proxy run as launchd agents out of git checkouts
12
+ * under `~/.jarvis/native/<id>` rather than as containers. The platform upgrade
13
+ * regenerates compose and pulls Docker images — and did nothing at all for these.
14
+ * A native service therefore stayed pinned to whatever `main` happened to be on
15
+ * the day it was installed, with a full wipe-and-reinstall as the only way to
16
+ * move it.
17
+ *
18
+ * The update itself is small, because the run scripts already do the hard part:
19
+ * they reinstall deps when `pyproject.toml` changes (sentinel-gated) and run
20
+ * `alembic upgrade head` on every start. So moving the source and restarting the
21
+ * agent is enough — deps and migrations self-heal.
22
+ *
23
+ * git fetch --depth 1 origin HEAD (shallow clone: `git pull` can't fast-forward)
24
+ * git reset --hard FETCH_HEAD
25
+ * bash deploy-launchd.sh (idempotent: re-materializes plist + bootstraps)
26
+ *
27
+ * Two rules:
28
+ *
29
+ * 1. **Never touch a dev checkout.** If the source resolves into `JARVIS_ROOT`,
30
+ * it's the operator's actual working repo — `git reset --hard` there would
31
+ * destroy uncommitted work. Skip it and say so.
32
+ * 2. **Per-service failures are non-fatal.** A native service that fails to
33
+ * update leaves the box on older-but-working code; taking the whole platform
34
+ * upgrade down over it (after the containers have already moved) would be
35
+ * worse. Report and continue.
36
+ */
37
+ export async function updateNativeServices(deps, emit) {
38
+ const result = { updated: [], skipped: [], failed: [] };
39
+ const ids = deps.installedNativeIds();
40
+ if (ids.length === 0)
41
+ return result;
42
+ for (const id of ids) {
43
+ const dir = deps.sourceDirFor(id);
44
+ if (!deps.isManagedCheckout(dir)) {
45
+ // A dev tree (JARVIS_ROOT). Updating it would blow away the operator's
46
+ // uncommitted work — refuse, loudly.
47
+ deps.log.warn({ id, dir }, 'native service runs from a dev checkout — not updating it');
48
+ emit({ phase: 'native', message: `Skipping ${id} (running from a dev checkout at ${dir})` });
49
+ result.skipped.push(id);
50
+ continue;
51
+ }
52
+ if (!deps.hasCheckout(dir)) {
53
+ deps.log.warn({ id, dir }, 'native service has no checkout on disk — skipping');
54
+ emit({ phase: 'native', message: `Skipping ${id} (no checkout at ${dir})` });
55
+ result.skipped.push(id);
56
+ continue;
57
+ }
58
+ try {
59
+ emit({ phase: 'native', message: `Updating ${id}...` });
60
+ // Shallow clone → fetch + reset, not pull.
61
+ await deps.run('git', ['fetch', '--depth', '1', 'origin', 'HEAD'], dir);
62
+ await deps.run('git', ['reset', '--hard', 'FETCH_HEAD'], dir);
63
+ // Re-running the deploy script refreshes the plist (it may itself have
64
+ // changed) and restarts the agent; the run script then reinstalls deps if
65
+ // pyproject moved and applies migrations.
66
+ await deps.run('bash', [join(dir, 'deploy-launchd.sh')], dir, {
67
+ ...process.env,
68
+ ENV_FILE_PATH: join(getComposePath(), '.env'),
69
+ });
70
+ emit({ phase: 'native', message: `${id} updated` });
71
+ result.updated.push(id);
72
+ }
73
+ catch (err) {
74
+ const error = err instanceof Error ? err.message : String(err);
75
+ deps.log.error({ id, err: error }, 'native service update failed');
76
+ emit({ phase: 'native', message: `${id} failed to update: ${error}` });
77
+ result.failed.push({ id, error });
78
+ }
79
+ }
80
+ return result;
81
+ }
82
+ // ── real-world wiring ────────────────────────────────────────────────────────
83
+ const NATIVE_ROOT = join(homedir(), '.jarvis', 'native');
84
+ /** Launchd label a service's deploy script installs (llm-proxy uses a legacy short name). */
85
+ function launchdLabel(serviceId) {
86
+ if (serviceId === 'jarvis-llm-proxy-api')
87
+ return 'com.jarvis.llm-proxy';
88
+ return `com.jarvis.${serviceId.replace(/^jarvis-/, '')}`;
89
+ }
90
+ function defaultRun(cmd, args, cwd, env) {
91
+ return new Promise((resolve, reject) => {
92
+ const child = spawn(cmd, args, { cwd, env: env ?? process.env });
93
+ let stderr = '';
94
+ child.stderr.on('data', (b) => {
95
+ stderr += b.toString();
96
+ });
97
+ child.on('error', reject);
98
+ child.on('close', (code) => {
99
+ if (code === 0)
100
+ resolve();
101
+ else
102
+ reject(new Error(`${cmd} ${args.join(' ')} exited ${code}${stderr ? `: ${stderr.trim().slice(0, 300)}` : ''}`));
103
+ });
104
+ });
105
+ }
106
+ export function defaultNativeUpdateDeps(log) {
107
+ const registry = parseRegistry(registryData);
108
+ const devRoot = process.env.JARVIS_ROOT ?? null;
109
+ const sourceDirFor = (id) => {
110
+ if (devRoot && existsSync(join(devRoot, id, 'deploy-launchd.sh')))
111
+ return join(devRoot, id);
112
+ return join(NATIVE_ROOT, id);
113
+ };
114
+ return {
115
+ nativeRoot: NATIVE_ROOT,
116
+ devRoot,
117
+ // "Installed natively" = the service can run native AND its LaunchAgent
118
+ // plist exists. Reading the plists reflects what's actually on the box,
119
+ // rather than trusting a stale list in .env.
120
+ installedNativeIds: () => registry.services
121
+ .filter((s) => s.nativeCapable)
122
+ .map((s) => s.id)
123
+ .filter((id) => existsSync(join(homedir(), 'Library', 'LaunchAgents', `${launchdLabel(id)}.plist`))),
124
+ sourceDirFor,
125
+ isManagedCheckout: (dir) => dir.startsWith(NATIVE_ROOT),
126
+ hasCheckout: (dir) => existsSync(join(dir, 'deploy-launchd.sh')),
127
+ run: defaultRun,
128
+ log,
129
+ };
130
+ }
131
+ //# sourceMappingURL=native-updater.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-updater.js","sourceRoot":"","sources":["../../../src/services/upgrade/native-updater.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/upgrade/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAI9C,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAMnD;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,CAiBf;AA+BD;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC7D,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,CAqBf"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/upgrade/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAI9C,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAMnD;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,CAiBf;AAuCD;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC7D,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
@@ -47,6 +47,13 @@ async function runDockerUpgrade(targetVersion, app, emit) {
47
47
  // Restart services
48
48
  emit({ phase: 'restart', message: 'Restarting services...' });
49
49
  await restartServices(app, emit);
50
+ // Update native (non-Docker) services. On macOS whisper/tts/llm-proxy run as
51
+ // launchd agents from git checkouts, so `docker compose pull` does nothing for
52
+ // them — without this they stay frozen at whatever `main` was on install day.
53
+ // Best-effort: a native service that won't update leaves the box on
54
+ // older-but-working code, which beats failing an upgrade whose containers have
55
+ // already moved.
56
+ await updateNativeServicesStep(app, emit);
50
57
  // Verify health
51
58
  emit({ phase: 'verify', message: 'Verifying health...' });
52
59
  await verifyHealth(app, emit);
@@ -67,9 +74,44 @@ export async function resumeUpgrade(app, marker, emit) {
67
74
  // Phase 6: Restart services
68
75
  emit({ phase: 'restart', message: 'Restarting services...' });
69
76
  await restartServices(app, emit);
70
- // Phase 7: Verify health
77
+ // Phase 7: Update native (non-Docker) services. THIS is the path that matters
78
+ // for them: native services only exist on the standalone/macOS install, which
79
+ // is exactly the flow that goes through the binary swap and lands here.
80
+ await updateNativeServicesStep(app, emit);
81
+ // Phase 8: Verify health
71
82
  emit({ phase: 'verify', message: 'Verifying health...' });
72
83
  await verifyHealth(app, emit);
73
84
  emit({ phase: 'done', message: `Upgrade to v${version} complete!` });
74
85
  }
86
+ /**
87
+ * Bring launchd-managed native services (macOS: whisper / tts / llm-proxy) up to
88
+ * date. No-ops everywhere else — on Linux everything is a container.
89
+ *
90
+ * Best-effort by design: a native service that fails to update leaves the box on
91
+ * older-but-working code, and failing the whole upgrade at this point — after the
92
+ * containers have already been pulled and restarted — would be strictly worse.
93
+ * Failures are surfaced in the stream and the logs.
94
+ */
95
+ async function updateNativeServicesStep(app, emit) {
96
+ try {
97
+ const { updateNativeServices, defaultNativeUpdateDeps } = await import('./native-updater.js');
98
+ const deps = defaultNativeUpdateDeps(app.log);
99
+ if (deps.installedNativeIds().length === 0)
100
+ return;
101
+ emit({ phase: 'native', message: 'Updating native services...' });
102
+ const result = await updateNativeServices(deps, emit);
103
+ app.log.info({ result }, 'native service update finished');
104
+ if (result.failed.length > 0) {
105
+ emit({
106
+ phase: 'native',
107
+ message: `Some native services did not update: ${result.failed.map((f) => f.id).join(', ')}`,
108
+ });
109
+ }
110
+ }
111
+ catch (err) {
112
+ const message = err instanceof Error ? err.message : String(err);
113
+ app.log.error({ err: message }, 'native service update step failed');
114
+ emit({ phase: 'native', message: `Native service update failed: ${message}` });
115
+ }
116
+ }
75
117
  //# sourceMappingURL=orchestrator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/services/upgrade/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/services/upgrade/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../../src/services/upgrade/resume.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAwB9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,eAAe,EACpB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAiDf"}
1
+ {"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../../../src/services/upgrade/resume.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAwB9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,eAAe,EACpB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Df"}
@@ -58,8 +58,19 @@ export async function resumeUpgradeIfPending(app, runningVersion) {
58
58
  app.log.info({ version: marker.version }, 'resuming upgrade after binary restart');
59
59
  try {
60
60
  const { resumeUpgrade } = await import('./orchestrator.js');
61
+ // Mirror each phase into the marker as it happens. /api/update/status reads
62
+ // the marker, and it's the ONLY window the UI has into this stage — the SSE
63
+ // stream died with the old process during the binary swap. Without this the
64
+ // marker would sit at "binary-updated" for the entire resume and the client
65
+ // could only report "something is happening" until it finished.
66
+ let lastPhase = marker.phase;
61
67
  await resumeUpgrade(app, marker, (data) => {
62
68
  app.log.info({ upgrade: data }, 'upgrade progress');
69
+ const phase = typeof data.phase === 'string' ? data.phase : null;
70
+ if (phase && phase !== lastPhase) {
71
+ lastPhase = phase;
72
+ writeFileSync(MARKER(), JSON.stringify({ ...marker, phase }));
73
+ }
63
74
  });
64
75
  unlinkSync(MARKER());
65
76
  // Only now is the upgrade real: the binary AND the services are on the new
@@ -1 +1 @@
1
- {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../src/services/upgrade/resume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../src/services/upgrade/resume.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "3.0.0",
3
- "platformVersion": "0.1.88",
3
+ "platformVersion": "0.1.90",
4
4
  "services": [
5
5
  {
6
6
  "id": "jarvis-config-service",