@pleri/olam-cli 0.1.7
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/dist/__tests__/auth-status.test.d.ts +2 -0
- package/dist/__tests__/auth-status.test.d.ts.map +1 -0
- package/dist/__tests__/auth-status.test.js +290 -0
- package/dist/__tests__/auth-status.test.js.map +1 -0
- package/dist/__tests__/auth-upgrade.test.d.ts +9 -0
- package/dist/__tests__/auth-upgrade.test.d.ts.map +1 -0
- package/dist/__tests__/auth-upgrade.test.js +161 -0
- package/dist/__tests__/auth-upgrade.test.js.map +1 -0
- package/dist/__tests__/create-app-urls.test.d.ts +2 -0
- package/dist/__tests__/create-app-urls.test.d.ts.map +1 -0
- package/dist/__tests__/create-app-urls.test.js +102 -0
- package/dist/__tests__/create-app-urls.test.js.map +1 -0
- package/dist/__tests__/enter.test.d.ts +2 -0
- package/dist/__tests__/enter.test.d.ts.map +1 -0
- package/dist/__tests__/enter.test.js +90 -0
- package/dist/__tests__/enter.test.js.map +1 -0
- package/dist/__tests__/host-cp-gh-token.test.d.ts +9 -0
- package/dist/__tests__/host-cp-gh-token.test.d.ts.map +1 -0
- package/dist/__tests__/host-cp-gh-token.test.js +119 -0
- package/dist/__tests__/host-cp-gh-token.test.js.map +1 -0
- package/dist/__tests__/host-cp.test.d.ts +9 -0
- package/dist/__tests__/host-cp.test.d.ts.map +1 -0
- package/dist/__tests__/host-cp.test.js +254 -0
- package/dist/__tests__/host-cp.test.js.map +1 -0
- package/dist/__tests__/keys.test.d.ts +9 -0
- package/dist/__tests__/keys.test.d.ts.map +1 -0
- package/dist/__tests__/keys.test.js +145 -0
- package/dist/__tests__/keys.test.js.map +1 -0
- package/dist/__tests__/logs.test.d.ts +9 -0
- package/dist/__tests__/logs.test.d.ts.map +1 -0
- package/dist/__tests__/logs.test.js +124 -0
- package/dist/__tests__/logs.test.js.map +1 -0
- package/dist/__tests__/ps.test.d.ts +2 -0
- package/dist/__tests__/ps.test.d.ts.map +1 -0
- package/dist/__tests__/ps.test.js +172 -0
- package/dist/__tests__/ps.test.js.map +1 -0
- package/dist/__tests__/status-app-urls.test.d.ts +2 -0
- package/dist/__tests__/status-app-urls.test.d.ts.map +1 -0
- package/dist/__tests__/status-app-urls.test.js +125 -0
- package/dist/__tests__/status-app-urls.test.js.map +1 -0
- package/dist/__tests__/upgrade.test.d.ts +9 -0
- package/dist/__tests__/upgrade.test.d.ts.map +1 -0
- package/dist/__tests__/upgrade.test.js +262 -0
- package/dist/__tests__/upgrade.test.js.map +1 -0
- package/dist/commands/__tests__/carry-uncommitted.test.d.ts +14 -0
- package/dist/commands/__tests__/carry-uncommitted.test.d.ts.map +1 -0
- package/dist/commands/__tests__/carry-uncommitted.test.js +83 -0
- package/dist/commands/__tests__/carry-uncommitted.test.js.map +1 -0
- package/dist/commands/__tests__/openHostCpUrl.test.d.ts +2 -0
- package/dist/commands/__tests__/openHostCpUrl.test.d.ts.map +1 -0
- package/dist/commands/__tests__/openHostCpUrl.test.js +63 -0
- package/dist/commands/__tests__/openHostCpUrl.test.js.map +1 -0
- package/dist/commands/__tests__/refresh.test.d.ts +13 -0
- package/dist/commands/__tests__/refresh.test.d.ts.map +1 -0
- package/dist/commands/__tests__/refresh.test.js +170 -0
- package/dist/commands/__tests__/refresh.test.js.map +1 -0
- package/dist/commands/auth-status.d.ts +43 -0
- package/dist/commands/auth-status.d.ts.map +1 -0
- package/dist/commands/auth-status.js +208 -0
- package/dist/commands/auth-status.js.map +1 -0
- package/dist/commands/auth-upgrade.d.ts +47 -0
- package/dist/commands/auth-upgrade.d.ts.map +1 -0
- package/dist/commands/auth-upgrade.js +277 -0
- package/dist/commands/auth-upgrade.js.map +1 -0
- package/dist/commands/auth.d.ts +16 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +283 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/create.d.ts +8 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +512 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/crystallize.d.ts +8 -0
- package/dist/commands/crystallize.d.ts.map +1 -0
- package/dist/commands/crystallize.js +101 -0
- package/dist/commands/crystallize.js.map +1 -0
- package/dist/commands/destroy.d.ts +6 -0
- package/dist/commands/destroy.d.ts.map +1 -0
- package/dist/commands/destroy.js +54 -0
- package/dist/commands/destroy.js.map +1 -0
- package/dist/commands/dispatch.d.ts +9 -0
- package/dist/commands/dispatch.d.ts.map +1 -0
- package/dist/commands/dispatch.js +94 -0
- package/dist/commands/dispatch.js.map +1 -0
- package/dist/commands/enter.d.ts +63 -0
- package/dist/commands/enter.d.ts.map +1 -0
- package/dist/commands/enter.js +206 -0
- package/dist/commands/enter.js.map +1 -0
- package/dist/commands/host-cp.d.ts +191 -0
- package/dist/commands/host-cp.d.ts.map +1 -0
- package/dist/commands/host-cp.js +797 -0
- package/dist/commands/host-cp.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +143 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install.d.ts +22 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +203 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/keys.d.ts +26 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +151 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/lanes.d.ts +18 -0
- package/dist/commands/lanes.d.ts.map +1 -0
- package/dist/commands/lanes.js +122 -0
- package/dist/commands/lanes.js.map +1 -0
- package/dist/commands/list.d.ts +6 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +39 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/logs.d.ts +38 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +177 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/observe.d.ts +9 -0
- package/dist/commands/observe.d.ts.map +1 -0
- package/dist/commands/observe.js +34 -0
- package/dist/commands/observe.js.map +1 -0
- package/dist/commands/policy-check.d.ts +14 -0
- package/dist/commands/policy-check.d.ts.map +1 -0
- package/dist/commands/policy-check.js +76 -0
- package/dist/commands/policy-check.js.map +1 -0
- package/dist/commands/pr.d.ts +17 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +148 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/ps.d.ts +25 -0
- package/dist/commands/ps.d.ts.map +1 -0
- package/dist/commands/ps.js +164 -0
- package/dist/commands/ps.js.map +1 -0
- package/dist/commands/refresh-helpers.d.ts +25 -0
- package/dist/commands/refresh-helpers.d.ts.map +1 -0
- package/dist/commands/refresh-helpers.js +56 -0
- package/dist/commands/refresh-helpers.js.map +1 -0
- package/dist/commands/refresh.d.ts +23 -0
- package/dist/commands/refresh.d.ts.map +1 -0
- package/dist/commands/refresh.js +237 -0
- package/dist/commands/refresh.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +51 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/upgrade.d.ts +67 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +358 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/workspace.d.ts +23 -0
- package/dist/commands/workspace.d.ts.map +1 -0
- package/dist/commands/workspace.js +198 -0
- package/dist/commands/workspace.js.map +1 -0
- package/dist/commands/world-snapshot.d.ts +18 -0
- package/dist/commands/world-snapshot.d.ts.map +1 -0
- package/dist/commands/world-snapshot.js +327 -0
- package/dist/commands/world-snapshot.js.map +1 -0
- package/dist/context.d.ts +26 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +51 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18007 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.js +32236 -0
- package/dist/output.d.ts +10 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +31 -0
- package/dist/output.js.map +1 -0
- package/host-cp/compose.yaml +126 -0
- package/host-cp/src/auth-secret-hint.mjs +45 -0
- package/host-cp/src/auth.mjs +155 -0
- package/host-cp/src/compose-worlds-sources.mjs +170 -0
- package/host-cp/src/container-secret-fetcher.mjs +163 -0
- package/host-cp/src/docker-events.mjs +184 -0
- package/host-cp/src/local-worlds-source.mjs +83 -0
- package/host-cp/src/plan-orchestrator.mjs +829 -0
- package/host-cp/src/plan-progress.mjs +282 -0
- package/host-cp/src/pr-cache.mjs +201 -0
- package/host-cp/src/pr-merge-poller.mjs +154 -0
- package/host-cp/src/process-poller.mjs +250 -0
- package/host-cp/src/proxy.mjs +245 -0
- package/host-cp/src/pylon-worlds-source.mjs +68 -0
- package/host-cp/src/redact.mjs +67 -0
- package/host-cp/src/secret-cache.mjs +104 -0
- package/host-cp/src/server.mjs +2215 -0
- package/host-cp/src/sse-gate.mjs +117 -0
- package/host-cp/src/version-status.mjs +209 -0
- package/host-cp/src/workspace-catalog.mjs +149 -0
- package/host-cp/src/world-names-store.mjs +176 -0
- package/host-cp/src/world-pr-state.mjs +97 -0
- package/host-cp/src/world-progress.mjs +322 -0
- package/host-cp/src/world-tunnel-manager.mjs +288 -0
- package/host-cp/src/worlds-db-source.mjs +191 -0
- package/host-cp/src/worlds-source.mjs +59 -0
- package/package.json +38 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* olam refresh <world> — Hot-refresh per-world CP from the local checkout.
|
|
3
|
+
*
|
|
4
|
+
* Copies the latest packages/control-plane/standalone/ source into a running
|
|
5
|
+
* devbox container, then restarts the CP via `docker restart`.
|
|
6
|
+
*
|
|
7
|
+
* Restart mechanism: the devbox CMD is `node /opt/olam/control-plane/server.mjs`
|
|
8
|
+
* (PID 1 via entrypoint.sh's `exec "$@"`). No supervisor wrapper exists — killing
|
|
9
|
+
* PID 1 stops the container. `docker restart` is therefore the correct mechanism:
|
|
10
|
+
* it stops the container, re-runs entrypoint.sh + CMD, which reinstalls hooks
|
|
11
|
+
* and starts the CP cleanly.
|
|
12
|
+
*
|
|
13
|
+
* Side-effect: any running tmux sessions (including active claude sessions) are
|
|
14
|
+
* killed on restart. Operators should re-dispatch if needed afterward.
|
|
15
|
+
* This is the accepted tradeoff for a maintenance operation.
|
|
16
|
+
*
|
|
17
|
+
* Source parity: the file list mirrors build-devbox.sh:38-77 exactly. Any
|
|
18
|
+
* drift between this file and that script will produce a broken world.
|
|
19
|
+
*/
|
|
20
|
+
import * as fs from 'node:fs';
|
|
21
|
+
import * as os from 'node:os';
|
|
22
|
+
import * as path from 'node:path';
|
|
23
|
+
import { spawnSync } from 'node:child_process';
|
|
24
|
+
import ora from 'ora';
|
|
25
|
+
import { loadContext } from '../context.js';
|
|
26
|
+
import { printError, printInfo, printHeader, printWarning } from '../output.js';
|
|
27
|
+
import { collectCpSourceFiles, validateServerMjsPresent, } from './refresh-helpers.js';
|
|
28
|
+
// Re-export for consumers who want the pure helpers without the full command.
|
|
29
|
+
export { collectCpSourceFiles, validateServerMjsPresent } from './refresh-helpers.js';
|
|
30
|
+
// Container port 8080 maps to host port 19080 + portOffset (container.ts)
|
|
31
|
+
const HOST_CP_BASE_PORT = 19080;
|
|
32
|
+
// docker restart --time: seconds to wait for graceful stop before SIGKILL
|
|
33
|
+
const RESTART_TIMEOUT_S = 30;
|
|
34
|
+
// Health poll interval / total timeout
|
|
35
|
+
const HEALTH_POLL_MS = 500;
|
|
36
|
+
const HEALTH_TIMEOUT_MS = 30_000;
|
|
37
|
+
// ── Docker helpers ──────────────────────────────────────────────────────────
|
|
38
|
+
function docker(args) {
|
|
39
|
+
const result = spawnSync('docker', args, {
|
|
40
|
+
encoding: 'utf-8',
|
|
41
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
ok: result.status === 0 && result.error === undefined,
|
|
45
|
+
stdout: result.stdout ?? '',
|
|
46
|
+
stderr: result.stderr ?? '',
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
async function waitForCpHealth(port, timeoutMs = HEALTH_TIMEOUT_MS) {
|
|
50
|
+
const deadline = Date.now() + timeoutMs;
|
|
51
|
+
while (Date.now() < deadline) {
|
|
52
|
+
try {
|
|
53
|
+
const res = await fetch(`http://127.0.0.1:${port}/health`, {
|
|
54
|
+
signal: AbortSignal.timeout(2000),
|
|
55
|
+
});
|
|
56
|
+
if (res.ok)
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// not up yet — keep polling
|
|
61
|
+
}
|
|
62
|
+
await new Promise(r => setTimeout(r, HEALTH_POLL_MS));
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
async function refreshWorld(worldId, portOffset, standaloneDir, opts) {
|
|
67
|
+
const containerName = `olam-${worldId}-devbox`;
|
|
68
|
+
// 1. Collect + validate source files
|
|
69
|
+
let entries;
|
|
70
|
+
try {
|
|
71
|
+
entries = collectCpSourceFiles(standaloneDir);
|
|
72
|
+
if (!opts.skipBuild) {
|
|
73
|
+
validateServerMjsPresent(entries);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
return {
|
|
78
|
+
worldId,
|
|
79
|
+
ok: false,
|
|
80
|
+
error: err instanceof Error ? err.message : String(err),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// 2. Stage into a temp dir (mirrors build-devbox.sh's BUILD_DIR staging)
|
|
84
|
+
const stagingDir = fs.mkdtempSync(path.join(os.tmpdir(), `olam-refresh-${worldId}-`));
|
|
85
|
+
try {
|
|
86
|
+
const hasLib = entries.some(e => e.destRelPath.startsWith('lib/'));
|
|
87
|
+
if (hasLib) {
|
|
88
|
+
fs.mkdirSync(path.join(stagingDir, 'lib'), { recursive: true });
|
|
89
|
+
}
|
|
90
|
+
for (const { srcPath, destRelPath } of entries) {
|
|
91
|
+
fs.copyFileSync(srcPath, path.join(stagingDir, destRelPath));
|
|
92
|
+
}
|
|
93
|
+
// 3. docker cp staging contents → container
|
|
94
|
+
// Trailing /. on the source copies contents, not the dir itself.
|
|
95
|
+
const cpResult = docker([
|
|
96
|
+
'cp',
|
|
97
|
+
`${stagingDir}/.`,
|
|
98
|
+
`${containerName}:/opt/olam/control-plane/`,
|
|
99
|
+
]);
|
|
100
|
+
if (!cpResult.ok) {
|
|
101
|
+
return {
|
|
102
|
+
worldId,
|
|
103
|
+
ok: false,
|
|
104
|
+
error: `docker cp failed: ${cpResult.stderr.trim() || cpResult.stdout.trim()}`,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
fs.rmSync(stagingDir, { recursive: true, force: true });
|
|
110
|
+
}
|
|
111
|
+
// 4. Restart if requested
|
|
112
|
+
if (opts.restart) {
|
|
113
|
+
const restartResult = docker([
|
|
114
|
+
'restart', '--time', String(RESTART_TIMEOUT_S), containerName,
|
|
115
|
+
]);
|
|
116
|
+
if (!restartResult.ok) {
|
|
117
|
+
return {
|
|
118
|
+
worldId,
|
|
119
|
+
ok: false,
|
|
120
|
+
error: `docker restart failed: ${restartResult.stderr.trim() || restartResult.stdout.trim()}`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
// 5. Poll health endpoint
|
|
124
|
+
const cpPort = HOST_CP_BASE_PORT + portOffset;
|
|
125
|
+
const healthy = await waitForCpHealth(cpPort);
|
|
126
|
+
if (!healthy) {
|
|
127
|
+
// Non-fatal: files are copied and container restarted, just slow to respond
|
|
128
|
+
return { worldId, ok: true, error: `healthy but /health at :${cpPort} didn't respond within ${HEALTH_TIMEOUT_MS / 1000}s` };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return { worldId, ok: true };
|
|
132
|
+
}
|
|
133
|
+
// ── Command registration ────────────────────────────────────────────────────
|
|
134
|
+
export function registerRefresh(program) {
|
|
135
|
+
program
|
|
136
|
+
.command('refresh')
|
|
137
|
+
.description("Hot-refresh a running world's per-world CP from the local checkout")
|
|
138
|
+
.argument('[world]', 'World ID')
|
|
139
|
+
.option('--all', 'Refresh every running world sequentially (overrides positional arg)')
|
|
140
|
+
.option('--no-restart', 'Copy files but skip CP restart (for debugging)')
|
|
141
|
+
.option('--skip-build', 'Skip the prerequisite server.mjs presence check')
|
|
142
|
+
.action(async (worldId, opts) => {
|
|
143
|
+
// Validate: need world ID or --all
|
|
144
|
+
if (!opts.all && !worldId) {
|
|
145
|
+
printError('Specify a world ID or use --all to refresh all running worlds.');
|
|
146
|
+
process.exitCode = 1;
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const { ctx, error } = await loadContext();
|
|
150
|
+
if (!ctx) {
|
|
151
|
+
printError(error?.message ?? 'Olam is not configured. Run `olam init` first.');
|
|
152
|
+
process.exitCode = 1;
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Locate standalone source dir (must run from olam repo root)
|
|
156
|
+
const standaloneDir = path.join(process.cwd(), 'packages/control-plane/standalone');
|
|
157
|
+
if (!fs.existsSync(standaloneDir)) {
|
|
158
|
+
printError(`CP standalone source not found at ${standaloneDir}.\n` +
|
|
159
|
+
'Run `olam refresh` from the olam repo root.');
|
|
160
|
+
process.exitCode = 1;
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const restart = opts.restart !== false;
|
|
164
|
+
const skipBuild = opts.skipBuild === true;
|
|
165
|
+
// Collect worlds to refresh
|
|
166
|
+
const worldsToRefresh = opts.all
|
|
167
|
+
? ctx.worldManager.listWorlds({ status: 'running' })
|
|
168
|
+
: (() => {
|
|
169
|
+
const w = ctx.worldManager.getWorld(worldId);
|
|
170
|
+
if (!w) {
|
|
171
|
+
printError(`World "${worldId}" not found in registry. Run \`olam list\` to see worlds.`);
|
|
172
|
+
process.exitCode = 1;
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
if (w.status !== 'running') {
|
|
176
|
+
printError(`World "${worldId}" is ${w.status}. Only running worlds can be refreshed.`);
|
|
177
|
+
process.exitCode = 1;
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
return [w];
|
|
181
|
+
})();
|
|
182
|
+
if (!worldsToRefresh)
|
|
183
|
+
return; // error already printed above
|
|
184
|
+
if (worldsToRefresh.length === 0) {
|
|
185
|
+
printInfo('No worlds', 'No running worlds found to refresh.');
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
printHeader('olam refresh');
|
|
189
|
+
printInfo('Source', standaloneDir);
|
|
190
|
+
printInfo('Worlds', worldsToRefresh.map(w => `${w.name} (${w.id})`).join(', '));
|
|
191
|
+
printInfo('Restart', restart ? 'yes (docker restart)' : 'no (--no-restart)');
|
|
192
|
+
process.stdout.write('\n');
|
|
193
|
+
const results = [];
|
|
194
|
+
for (const world of worldsToRefresh) {
|
|
195
|
+
const spinner = ora(`${world.name}: copying CP source...`).start();
|
|
196
|
+
try {
|
|
197
|
+
const result = await refreshWorld(world.id, world.portOffset, standaloneDir, { restart, skipBuild });
|
|
198
|
+
results.push(result);
|
|
199
|
+
if (!result.ok) {
|
|
200
|
+
spinner.fail(`${world.name}: ${result.error}`);
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
// ok=true but with a warning (health timeout)
|
|
204
|
+
if (result.error) {
|
|
205
|
+
spinner.warn(`${world.name}: refreshed — ${result.error}`);
|
|
206
|
+
}
|
|
207
|
+
else if (restart) {
|
|
208
|
+
spinner.succeed(`${world.name}: refreshed and healthy`);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
spinner.succeed(`${world.name}: files copied (restart skipped)`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
216
|
+
results.push({ worldId: world.id, ok: false, error: msg });
|
|
217
|
+
spinner.fail(`${world.name}: ${msg}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Summary for --all
|
|
221
|
+
if (opts.all) {
|
|
222
|
+
const okCount = results.filter(r => r.ok).length;
|
|
223
|
+
const errCount = results.filter(r => !r.ok).length;
|
|
224
|
+
process.stdout.write('\n');
|
|
225
|
+
if (errCount > 0) {
|
|
226
|
+
printWarning(`refreshed: ${okCount}, errored: ${errCount}`);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
printInfo('Summary', `refreshed: ${okCount}`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if (results.some(r => !r.ok)) {
|
|
233
|
+
process.exitCode = 1;
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=refresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh.js","sourceRoot":"","sources":["../../src/commands/refresh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgDrD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* olam status <world> — Show detailed world status.
|
|
3
|
+
*/
|
|
4
|
+
import { loadContext } from '../context.js';
|
|
5
|
+
import { printError, printInfo, printHeader, formatAge } from '../output.js';
|
|
6
|
+
export function registerStatus(program) {
|
|
7
|
+
program
|
|
8
|
+
.command('status')
|
|
9
|
+
.description('Show detailed world status')
|
|
10
|
+
.argument('<world>', 'World ID')
|
|
11
|
+
.option('--json', 'Output as JSON')
|
|
12
|
+
.action(async (worldId, opts) => {
|
|
13
|
+
const { ctx, error } = await loadContext();
|
|
14
|
+
if (!ctx) {
|
|
15
|
+
printError(error?.message ?? 'Olam is not configured. Run `olam init` first.');
|
|
16
|
+
process.exitCode = 1;
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const world = ctx.worldManager.getWorld(worldId);
|
|
20
|
+
if (!world) {
|
|
21
|
+
printError(`World "${worldId}" not found. Run \`olam list\` to see worlds.`);
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const cost = ctx.costTracker.getWorldCost(worldId);
|
|
26
|
+
const dashboardUrl = `http://localhost:${19080 + world.portOffset}`;
|
|
27
|
+
if (opts.json) {
|
|
28
|
+
console.log(JSON.stringify({ ...world, dashboardUrl, cost }, null, 2));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
printHeader(`${world.name} (${world.id})`);
|
|
32
|
+
printInfo('Status', world.status);
|
|
33
|
+
printInfo('Repos', world.repos.join(', '));
|
|
34
|
+
printInfo('Branch', world.branch);
|
|
35
|
+
printInfo('Provider', world.computeProvider);
|
|
36
|
+
printInfo('Port Offset', String(world.portOffset));
|
|
37
|
+
printInfo('Workspace', world.workspacePath);
|
|
38
|
+
printInfo('Dashboard', dashboardUrl);
|
|
39
|
+
if (world.appPortUrls && world.appPortUrls.length > 0) {
|
|
40
|
+
world.appPortUrls.forEach((ap, i) => {
|
|
41
|
+
printInfo(i === 0 ? 'Apps' : '', `${ap.repoName} ${ap.url}`);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
printInfo('Cost', `$${cost.toFixed(4)}`);
|
|
45
|
+
printInfo('Thoughts', String(world.thoughtCount));
|
|
46
|
+
printInfo('Created', world.createdAt);
|
|
47
|
+
printInfo('Uptime', formatAge(world.createdAt));
|
|
48
|
+
printInfo('Updated', world.updatedAt);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `olam upgrade` — self-upgrade the local Olam dev stack.
|
|
3
|
+
*
|
|
4
|
+
* Runs the full manual sequence in one command:
|
|
5
|
+
* git fetch + git pull --ff-only
|
|
6
|
+
* npm install
|
|
7
|
+
* npm run build
|
|
8
|
+
* vite build (SPA)
|
|
9
|
+
* bash build-host-cp.sh (image)
|
|
10
|
+
* docker compose up -d --force-recreate
|
|
11
|
+
* wait for /health
|
|
12
|
+
*/
|
|
13
|
+
import type { Command } from 'commander';
|
|
14
|
+
export interface UpgradeOpts {
|
|
15
|
+
readonly yes: boolean;
|
|
16
|
+
readonly skipImage: boolean;
|
|
17
|
+
readonly skipInstall: boolean;
|
|
18
|
+
readonly branch: string | null;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check whether node_modules is in sync with package-lock.json.
|
|
22
|
+
*
|
|
23
|
+
* npm writes node_modules/.package-lock.json after every successful install.
|
|
24
|
+
* If its mtime is >= package-lock.json's mtime, the last install ran after
|
|
25
|
+
* the last lockfile change — node_modules is current.
|
|
26
|
+
*
|
|
27
|
+
* Returns true → skip install (node_modules reflects the current lockfile).
|
|
28
|
+
* Returns false → run install (lockfile changed or marker absent).
|
|
29
|
+
*/
|
|
30
|
+
export declare function isNodeModulesInSync(cwd: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Decide whether the npm install step should be skipped.
|
|
33
|
+
*
|
|
34
|
+
* Priority:
|
|
35
|
+
* 1. --skip-install flag → always skip
|
|
36
|
+
* 2. node_modules in sync with lockfile → skip (log reason)
|
|
37
|
+
* 3. otherwise → run install
|
|
38
|
+
*/
|
|
39
|
+
export declare function shouldSkipInstall(opts: {
|
|
40
|
+
skipInstall: boolean;
|
|
41
|
+
}, cwd: string): {
|
|
42
|
+
skip: true;
|
|
43
|
+
reason: string;
|
|
44
|
+
} | {
|
|
45
|
+
skip: false;
|
|
46
|
+
};
|
|
47
|
+
/** Check cwd looks like the olam repo root. */
|
|
48
|
+
export declare function validateRepoRoot(cwd: string): {
|
|
49
|
+
ok: true;
|
|
50
|
+
} | {
|
|
51
|
+
ok: false;
|
|
52
|
+
error: string;
|
|
53
|
+
};
|
|
54
|
+
/** Normalise raw Commander option object into typed opts. */
|
|
55
|
+
export declare function parseUpgradeOpts(raw: {
|
|
56
|
+
yes?: boolean;
|
|
57
|
+
skipImage?: boolean;
|
|
58
|
+
skipInstall?: boolean;
|
|
59
|
+
branch?: string;
|
|
60
|
+
}): UpgradeOpts;
|
|
61
|
+
/**
|
|
62
|
+
* Extract the JS bundle hash from index.html.
|
|
63
|
+
* Looks for the canonical Vite output pattern: `/assets/index-<hash>.js`.
|
|
64
|
+
*/
|
|
65
|
+
export declare function extractBundleHash(indexHtml: string): string | null;
|
|
66
|
+
export declare function registerUpgrade(program: Command): void;
|
|
67
|
+
//# sourceMappingURL=upgrade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAaxD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,EAC9B,GAAG,EAAE,MAAM,GACV;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAQlD;AAED,+CAA+C;AAC/C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAWzF;AAED,6DAA6D;AAC7D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IACpC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,WAAW,CAOd;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGlE;AAmUD,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAetD"}
|