overmux 0.0.7 → 0.0.9
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/CHANGELOG.md +21 -0
- package/dist/auth/.vite/manifest.json +1 -1
- package/dist/auth/THIRD_PARTY_NOTICES.md +1 -1
- package/dist/auth/assets/index-Gk_oLI4g.js +2571 -0
- package/dist/auth/index.html +1 -1
- package/dist/bin.js +66 -25
- package/dist/bin.js.map +1 -1
- package/dist/docs/100-introduction/300-why-i-built-overmux.md +1 -1
- package/dist/docs/200-getting-started/100-install-and-run-overmux.md +1 -1
- package/dist/docs/200-getting-started/200-install-overmux-desktop.md +13 -0
- package/dist/docs/400-reference/500-server/100-resources.md +25 -0
- package/dist/docs/400-reference/500-server/500-api.md +4 -2
- package/dist/docs/400-reference/600-client/010-commands.md +0 -29
- package/dist/docs/400-reference/700-cli/050-init.md +3 -1
- package/dist/exports/client.d.ts +1 -1
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +89 -25
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/{index-Cz3xkCa4.d.ts → index-Dk11nKIv.d.ts} +2 -2
- package/dist/exports/index-Dk11nKIv.d.ts.map +1 -0
- package/dist/exports/index.d.ts +1 -1
- package/dist/exports/index.js.map +1 -1
- package/dist/internal/server/coordinator/server-child.js +75 -22
- package/dist/internal/server/coordinator/server-child.js.map +1 -1
- package/docs/100-introduction/300-why-i-built-overmux.md +1 -1
- package/docs/200-getting-started/100-install-and-run-overmux.md +1 -1
- package/docs/200-getting-started/200-install-overmux-desktop.md +13 -0
- package/docs/400-reference/500-server/100-resources.md +25 -0
- package/docs/400-reference/500-server/500-api.md +4 -2
- package/docs/400-reference/600-client/010-commands.md +0 -29
- package/docs/400-reference/700-cli/050-init.md +3 -1
- package/package.json +5 -4
- package/src/internal/cli/commands/init-template.ts +3 -0
- package/src/internal/cli/commands/init.ts +16 -6
- package/src/internal/client/overmux-react.ts +121 -27
- package/src/internal/server/runtime/runtime-resources.ts +99 -20
- package/src/internal/server/websocket-connection.ts +27 -2
- package/src/public/config.ts +1 -1
- package/dist/auth/assets/index-Bc0hP5IW.js +0 -2580
- package/dist/exports/index-Cz3xkCa4.d.ts.map +0 -1
package/dist/auth/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<meta name="color-scheme" content="dark light" />
|
|
7
7
|
<title>Overmux authentication</title>
|
|
8
|
-
<script type="module" crossorigin src="/_overmux/auth-shell/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/_overmux/auth-shell/assets/index-Gk_oLI4g.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/_overmux/auth-shell/assets/index-BM9gETvx.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/dist/bin.js
CHANGED
|
@@ -2732,6 +2732,33 @@ var getInvalidatedResourceIds = (graph, resourceId) => {
|
|
|
2732
2732
|
};
|
|
2733
2733
|
//#endregion
|
|
2734
2734
|
//#region src/internal/server/runtime/runtime-resources.ts
|
|
2735
|
+
var createSubscriptionLifetime = ({ entry, invalidationListeners, lifecycle, signal }) => {
|
|
2736
|
+
const controller = new AbortController();
|
|
2737
|
+
const subscriptionSignal = AbortSignal.any([lifecycle.requestSignal(signal), controller.signal]);
|
|
2738
|
+
subscriptionSignal.throwIfAborted();
|
|
2739
|
+
const registeredEntry = {
|
|
2740
|
+
...entry,
|
|
2741
|
+
listener: () => {
|
|
2742
|
+
if (!subscriptionSignal.aborted) entry.listener();
|
|
2743
|
+
}
|
|
2744
|
+
};
|
|
2745
|
+
const disposers = [];
|
|
2746
|
+
const release = lifecycle.track(async () => {
|
|
2747
|
+
invalidationListeners.delete(registeredEntry);
|
|
2748
|
+
await lifecycle.disposeAll(disposers);
|
|
2749
|
+
}, subscriptionSignal);
|
|
2750
|
+
const dispose = () => {
|
|
2751
|
+
controller.abort(/* @__PURE__ */ new Error("Resource subscription closed"));
|
|
2752
|
+
return release();
|
|
2753
|
+
};
|
|
2754
|
+
invalidationListeners.add(registeredEntry);
|
|
2755
|
+
return {
|
|
2756
|
+
dispose,
|
|
2757
|
+
disposers,
|
|
2758
|
+
refresh: registeredEntry.listener,
|
|
2759
|
+
signal: subscriptionSignal
|
|
2760
|
+
};
|
|
2761
|
+
};
|
|
2735
2762
|
var createRuntimeResources = ({ definitions, instance, lifecycle }) => {
|
|
2736
2763
|
const graph = createResourceDependencyGraph(definitions);
|
|
2737
2764
|
const invalidationListeners = /* @__PURE__ */ new Set();
|
|
@@ -2763,44 +2790,55 @@ var createRuntimeResources = ({ definitions, instance, lifecycle }) => {
|
|
|
2763
2790
|
operationSignal.throwIfAborted();
|
|
2764
2791
|
return definition.contract.output.parse(rawOutput);
|
|
2765
2792
|
};
|
|
2766
|
-
const
|
|
2793
|
+
const activateSubscriptions = async (id, rawInput, signal, activated, disposers) => {
|
|
2794
|
+
signal.throwIfAborted();
|
|
2767
2795
|
if (activated.has(id)) return;
|
|
2768
2796
|
activated.add(id);
|
|
2769
2797
|
const definition = definitions[id];
|
|
2770
2798
|
const input = definition.contract.input.parse(rawInput);
|
|
2771
2799
|
if (definition.kind === "subscription") {
|
|
2772
|
-
const dispose = definition.subscribe(input, () =>
|
|
2800
|
+
const dispose = await definition.subscribe(input, () => {
|
|
2801
|
+
if (!signal.aborted) invalidateResource(id, input);
|
|
2802
|
+
}, context(signal));
|
|
2773
2803
|
if (typeof dispose !== "function") throw new Error(`Resource ${id} subscribe must return a disposer`);
|
|
2804
|
+
if (signal.aborted) {
|
|
2805
|
+
await dispose();
|
|
2806
|
+
signal.throwIfAborted();
|
|
2807
|
+
}
|
|
2774
2808
|
disposers.push(dispose);
|
|
2775
2809
|
return;
|
|
2776
2810
|
}
|
|
2777
|
-
if (definition.kind === "derived") graph.dependencies.get(id)
|
|
2778
|
-
activateWatchers(dependencyId, rawInput, signal, activated, disposers);
|
|
2779
|
-
});
|
|
2811
|
+
if (definition.kind === "derived") for (const dependencyId of graph.dependencies.get(id) ?? []) await activateSubscriptions(dependencyId, rawInput, signal, activated, disposers);
|
|
2780
2812
|
};
|
|
2781
2813
|
Object.keys(definitions).forEach((name) => {
|
|
2782
2814
|
resources.set(name, {
|
|
2783
2815
|
read: (input, signal) => read(name, input, signal),
|
|
2784
|
-
subscribe: (rawInput, listener, signal) => {
|
|
2816
|
+
subscribe: async (rawInput, listener, signal) => {
|
|
2785
2817
|
lifecycle.requestSignal(signal).throwIfAborted();
|
|
2786
|
-
const
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2818
|
+
const subscription = createSubscriptionLifetime({
|
|
2819
|
+
entry: {
|
|
2820
|
+
input: definitions[name].contract.input.parse(rawInput),
|
|
2821
|
+
listener,
|
|
2822
|
+
resourceId: name
|
|
2823
|
+
},
|
|
2824
|
+
invalidationListeners,
|
|
2825
|
+
lifecycle,
|
|
2826
|
+
signal
|
|
2827
|
+
});
|
|
2793
2828
|
try {
|
|
2794
|
-
|
|
2829
|
+
await activateSubscriptions(name, rawInput, subscription.signal, /* @__PURE__ */ new Set(), subscription.disposers);
|
|
2830
|
+
subscription.signal.throwIfAborted();
|
|
2831
|
+
subscription.refresh();
|
|
2832
|
+
subscription.signal.throwIfAborted();
|
|
2833
|
+
return subscription.dispose;
|
|
2795
2834
|
} catch (cause) {
|
|
2796
|
-
|
|
2797
|
-
|
|
2835
|
+
try {
|
|
2836
|
+
await subscription.dispose();
|
|
2837
|
+
} catch (cleanupError) {
|
|
2838
|
+
throw new AggregateError([cause, cleanupError], "Resource subscription setup and cleanup failed");
|
|
2839
|
+
}
|
|
2798
2840
|
throw cause;
|
|
2799
2841
|
}
|
|
2800
|
-
return lifecycle.track(async () => {
|
|
2801
|
-
invalidationListeners.delete(entry);
|
|
2802
|
-
await lifecycle.disposeAll(watcherDisposers);
|
|
2803
|
-
}, signal);
|
|
2804
2842
|
}
|
|
2805
2843
|
});
|
|
2806
2844
|
});
|
|
@@ -3882,6 +3920,7 @@ var initScaffoldPaths = [
|
|
|
3882
3920
|
"mise.toml",
|
|
3883
3921
|
"package.json",
|
|
3884
3922
|
"pnpm-lock.yaml",
|
|
3923
|
+
"pnpm-workspace.yaml",
|
|
3885
3924
|
"overmux.config.ts",
|
|
3886
3925
|
"src/server/index.ts",
|
|
3887
3926
|
"src/ui/app.tsx",
|
|
@@ -3902,7 +3941,8 @@ var packageJson = (overmuxVersion) => `${JSON.stringify({
|
|
|
3902
3941
|
dependencies: {
|
|
3903
3942
|
overmux: overmuxVersion,
|
|
3904
3943
|
react: "^19.0.0",
|
|
3905
|
-
"react-dom": "^19.0.0"
|
|
3944
|
+
"react-dom": "^19.0.0",
|
|
3945
|
+
zod: "^4.6.5"
|
|
3906
3946
|
},
|
|
3907
3947
|
devDependencies: {
|
|
3908
3948
|
"@types/react": "^19.0.0",
|
|
@@ -3922,6 +3962,7 @@ pnpm = "10"
|
|
|
3922
3962
|
"npm:overmux" = "${overmuxVersion}"
|
|
3923
3963
|
` } : {},
|
|
3924
3964
|
"package.json": packageJson(overmuxVersion),
|
|
3965
|
+
"pnpm-workspace.yaml": "onlyBuiltDependencies:\n - node-pty\n",
|
|
3925
3966
|
"overmux.config.ts": `import { defineOvermuxConfig } from "overmux";
|
|
3926
3967
|
|
|
3927
3968
|
import server from "./src/server/index";
|
|
@@ -4044,9 +4085,9 @@ var detectToolchain = (dependencies) => {
|
|
|
4044
4085
|
return "mise";
|
|
4045
4086
|
}
|
|
4046
4087
|
const pnpm = dependencies.runCommand("pnpm", ["--version"]);
|
|
4047
|
-
const major =
|
|
4048
|
-
if (!commandExists(pnpm) || pnpm.status !== 0 || !Number.isFinite(major)) throw new Error("pnpm 10 or newer is required when mise is not installed");
|
|
4049
|
-
if (major < 10) throw new Error(`pnpm 10 or newer is required when mise is not installed (found ${pnpm.stdout.trim()})`);
|
|
4088
|
+
const [major = NaN, minor = NaN] = pnpm.stdout.trim().split(".").map(Number);
|
|
4089
|
+
if (!commandExists(pnpm) || pnpm.status !== 0 || !Number.isFinite(major) || !Number.isFinite(minor)) throw new Error("pnpm 10.5.0 or newer is required when mise is not installed");
|
|
4090
|
+
if (major < 10 || major === 10 && minor < 5) throw new Error(`pnpm 10.5.0 or newer is required when mise is not installed (found ${pnpm.stdout.trim()})`);
|
|
4050
4091
|
return "pnpm";
|
|
4051
4092
|
};
|
|
4052
4093
|
var findCollisions = (directory) => {
|
|
@@ -4066,7 +4107,7 @@ var runProjectCommand = ({ args, command, cwd, dependencies }) => {
|
|
|
4066
4107
|
dependencies.stderr.write(result.stderr);
|
|
4067
4108
|
if (result.error || result.status !== 0) throw new Error(`Command failed: ${command} ${args.join(" ")}`);
|
|
4068
4109
|
};
|
|
4069
|
-
var pnpmCommands = [["install"
|
|
4110
|
+
var pnpmCommands = [["install"], [
|
|
4070
4111
|
"exec",
|
|
4071
4112
|
"overmux",
|
|
4072
4113
|
"check",
|