@sealant/mend 0.34.2 → 0.34.4
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/{chunk-JJ66V76Y.js → chunk-AAAXHRWL.js} +72 -0
- package/dist/{dashboard-OADX3PHI.js → dashboard-DWXXYFPE.js} +32 -13
- package/dist/main.js +320 -89
- package/man/mend-accounts.1 +1 -1
- package/man/mend-adopt.1 +1 -1
- package/man/mend-attach.1 +1 -1
- package/man/mend-codex.1 +1 -1
- package/man/mend-completions.1 +1 -1
- package/man/mend-connect.1 +1 -1
- package/man/mend-continue.1 +1 -1
- package/man/mend-doctor.1 +1 -1
- package/man/mend-dotfiles-repo.1 +1 -1
- package/man/mend-dotfiles-sync.1 +1 -1
- package/man/mend-dotfiles.1 +1 -1
- package/man/mend-env-cluster.1 +1 -1
- package/man/mend-env-load.1 +1 -1
- package/man/mend-env-show.1 +1 -1
- package/man/mend-folder-create.1 +1 -1
- package/man/mend-folder-list.1 +1 -1
- package/man/mend-folder-push.1 +1 -1
- package/man/mend-folder-rm.1 +1 -1
- package/man/mend-git-author.1 +1 -1
- package/man/mend-help.1 +1 -1
- package/man/mend-invite.1 +1 -1
- package/man/mend-keys-init.1 +1 -1
- package/man/mend-keys-mode.1 +1 -1
- package/man/mend-keys-share.1 +1 -1
- package/man/mend-keys-show.1 +1 -1
- package/man/mend-land.1 +1 -1
- package/man/mend-login.1 +1 -1
- package/man/mend-logout.1 +1 -1
- package/man/mend-man.1 +1 -1
- package/man/mend-members.1 +1 -1
- package/man/mend-operator-exposure.1 +1 -1
- package/man/mend-operator-gate.1 +1 -1
- package/man/mend-operator-grant-owner.1 +1 -1
- package/man/mend-operator-org-create.1 +1 -1
- package/man/mend-operator-org-invite-owner.1 +1 -1
- package/man/mend-operator-org-list.1 +1 -1
- package/man/mend-operator-org-rename.1 +1 -1
- package/man/mend-operator-reset-link.1 +1 -1
- package/man/mend-pair.1 +1 -1
- package/man/mend-projects.1 +1 -1
- package/man/mend-pull.1 +1 -1
- package/man/mend-refresh.1 +1 -1
- package/man/mend-rejoin.1 +1 -1
- package/man/mend-resume.1 +1 -1
- package/man/mend-run.1 +1 -1
- package/man/mend-server-logs.1 +1 -1
- package/man/mend-server-restart.1 +1 -1
- package/man/mend-server-setup.1 +1 -1
- package/man/mend-server-start.1 +1 -1
- package/man/mend-server-status.1 +1 -1
- package/man/mend-server-stop.1 +1 -1
- package/man/mend-server-upgrade.1 +1 -1
- package/man/mend-server.1 +1 -1
- package/man/mend-service-add.1 +1 -1
- package/man/mend-service-connect.1 +1 -1
- package/man/mend-service-init.1 +1 -1
- package/man/mend-service-list.1 +1 -1
- package/man/mend-service-logs.1 +1 -1
- package/man/mend-service-restart.1 +1 -1
- package/man/mend-service-run.1 +1 -1
- package/man/mend-service-stop.1 +1 -1
- package/man/mend-session-share.1 +1 -1
- package/man/mend-sessions.1 +1 -1
- package/man/mend-shell.1 +1 -1
- package/man/mend-skills-push.1 +1 -1
- package/man/mend-skills.1 +1 -1
- package/man/mend-snake.1 +1 -1
- package/man/mend-ssh-setup.1 +1 -1
- package/man/mend-ssh.1 +1 -1
- package/man/mend-stop.1 +1 -1
- package/man/mend-ui.1 +1 -1
- package/man/mend-uninstall.1 +1 -1
- package/man/mend-version.1 +1 -1
- package/man/mend-worktrees.1 +1 -1
- package/man/mend.1 +1 -1
- package/package.json +2 -2
|
@@ -28799,6 +28799,73 @@ var trackBracketedPaste = (output, current) => {
|
|
|
28799
28799
|
};
|
|
28800
28800
|
var pasteBytes = (text, bracketed) => Buffer.from(bracketed ? `\x1B[200~${text}\x1B[201~` : text, "utf8");
|
|
28801
28801
|
|
|
28802
|
+
// src/server-request.ts
|
|
28803
|
+
var MendRequestError = class extends Error {
|
|
28804
|
+
kind;
|
|
28805
|
+
status;
|
|
28806
|
+
constructor(kind, message, status = null) {
|
|
28807
|
+
super(message);
|
|
28808
|
+
this.name = "MendRequestError";
|
|
28809
|
+
this.kind = kind;
|
|
28810
|
+
this.status = status;
|
|
28811
|
+
}
|
|
28812
|
+
};
|
|
28813
|
+
var TIMEOUT_CODES = /* @__PURE__ */ new Set([
|
|
28814
|
+
"UND_ERR_HEADERS_TIMEOUT",
|
|
28815
|
+
"UND_ERR_BODY_TIMEOUT"
|
|
28816
|
+
]);
|
|
28817
|
+
var DROPPED_CODES = /* @__PURE__ */ new Set([
|
|
28818
|
+
"UND_ERR_SOCKET",
|
|
28819
|
+
"UND_ERR_CLOSED",
|
|
28820
|
+
"ECONNRESET",
|
|
28821
|
+
"EPIPE"
|
|
28822
|
+
]);
|
|
28823
|
+
var codeOf = (value3) => {
|
|
28824
|
+
if (typeof value3 !== "object" || value3 === null || !("code" in value3)) return null;
|
|
28825
|
+
return typeof value3.code === "string" ? value3.code : null;
|
|
28826
|
+
};
|
|
28827
|
+
var nameOf = (value3) => {
|
|
28828
|
+
if (typeof value3 !== "object" || value3 === null || !("name" in value3)) return null;
|
|
28829
|
+
return typeof value3.name === "string" ? value3.name : null;
|
|
28830
|
+
};
|
|
28831
|
+
var noAnswerOf = (error) => {
|
|
28832
|
+
const name = nameOf(error);
|
|
28833
|
+
if (name === "TimeoutError" || name === "AbortError") return "timeout";
|
|
28834
|
+
const cause = typeof error === "object" && error !== null && "cause" in error ? error.cause : null;
|
|
28835
|
+
const code = codeOf(cause) ?? codeOf(error);
|
|
28836
|
+
if (code !== null && TIMEOUT_CODES.has(code)) return "timeout";
|
|
28837
|
+
if (code !== null && DROPPED_CODES.has(code)) return "dropped";
|
|
28838
|
+
return "unreachable";
|
|
28839
|
+
};
|
|
28840
|
+
var spoken = (ms) => {
|
|
28841
|
+
const seconds2 = Math.round(ms / 1e3);
|
|
28842
|
+
if (seconds2 < 90) return `${seconds2}s`;
|
|
28843
|
+
return `${Math.round(seconds2 / 60)} min`;
|
|
28844
|
+
};
|
|
28845
|
+
var noAnswerMessage = (kind, serverUrl, call, waitedMs) => {
|
|
28846
|
+
if (kind === "unreachable")
|
|
28847
|
+
return `cannot reach the Mend server at ${serverUrl} \u2014 is it running?`;
|
|
28848
|
+
if (kind === "timeout") {
|
|
28849
|
+
return `${call} has had no answer from ${serverUrl} after ${spoken(waitedMs)} \u2014 the server accepted it and may still be working on it`;
|
|
28850
|
+
}
|
|
28851
|
+
return `the connection to ${serverUrl} closed before ${call} answered \u2014 the server may still be working on it`;
|
|
28852
|
+
};
|
|
28853
|
+
var noAnswerError = (error, serverUrl, call, waitedMs) => {
|
|
28854
|
+
const kind = noAnswerOf(error);
|
|
28855
|
+
return new MendRequestError(kind, noAnswerMessage(kind, serverUrl, call, waitedMs));
|
|
28856
|
+
};
|
|
28857
|
+
var GATEWAY_STATUSES = /* @__PURE__ */ new Set([
|
|
28858
|
+
502,
|
|
28859
|
+
503,
|
|
28860
|
+
504,
|
|
28861
|
+
520,
|
|
28862
|
+
521,
|
|
28863
|
+
522,
|
|
28864
|
+
523,
|
|
28865
|
+
524
|
|
28866
|
+
]);
|
|
28867
|
+
var mayStillBeWorking = (error) => error instanceof MendRequestError && (error.kind === "timeout" || error.kind === "dropped" || error.kind === "http" && error.status !== null && GATEWAY_STATUSES.has(error.status));
|
|
28868
|
+
|
|
28802
28869
|
// src/workbench-events.ts
|
|
28803
28870
|
var createSseParser = () => {
|
|
28804
28871
|
let buffer = "";
|
|
@@ -28879,6 +28946,11 @@ export {
|
|
|
28879
28946
|
isPasteChunk,
|
|
28880
28947
|
trackBracketedPaste,
|
|
28881
28948
|
pasteBytes,
|
|
28949
|
+
MendRequestError,
|
|
28950
|
+
spoken,
|
|
28951
|
+
noAnswerError,
|
|
28952
|
+
GATEWAY_STATUSES,
|
|
28953
|
+
mayStillBeWorking,
|
|
28882
28954
|
createSseParser,
|
|
28883
28955
|
eventFamilies
|
|
28884
28956
|
};
|
|
@@ -10,11 +10,12 @@ import {
|
|
|
10
10
|
eventFamilies,
|
|
11
11
|
isPendingId,
|
|
12
12
|
matchProjectByCwd,
|
|
13
|
+
mayStillBeWorking,
|
|
13
14
|
normalizeProjectName,
|
|
14
15
|
pendingId,
|
|
15
16
|
repositoryCloneUrlIssue,
|
|
16
17
|
servicesHoldLine
|
|
17
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-AAAXHRWL.js";
|
|
18
19
|
|
|
19
20
|
// src/dashboard.tsx
|
|
20
21
|
import { CliRenderEvents, createCliRenderer } from "@opentui/core";
|
|
@@ -2412,6 +2413,15 @@ var StatusLine = ({
|
|
|
2412
2413
|
return /* @__PURE__ */ jsx3("text", { height: 1, fg: INK_2, bg: "transparent", children: text });
|
|
2413
2414
|
};
|
|
2414
2415
|
var errorText = (error) => error instanceof Error ? error.message : String(error);
|
|
2416
|
+
var startedOrStarting = async (start, starting) => {
|
|
2417
|
+
try {
|
|
2418
|
+
return await start;
|
|
2419
|
+
} catch (error) {
|
|
2420
|
+
if (mayStillBeWorking(error)) return { ...starting, status: "starting" };
|
|
2421
|
+
throw error;
|
|
2422
|
+
}
|
|
2423
|
+
};
|
|
2424
|
+
var startedLine = (session) => session.status === "starting" ? `still starting \xB7 ${sessionDisplayName(session)} \u2014 a attaches once the row reads running` : `started \xB7 ${sessionDisplayName(session)} \u2014 a attaches`;
|
|
2415
2425
|
var keepSpanVisible = (scroll, top, height, viewRows) => {
|
|
2416
2426
|
if (scroll === null || viewRows <= 0) return;
|
|
2417
2427
|
const viewH = Math.max(1, viewRows);
|
|
@@ -2597,7 +2607,7 @@ var App = ({ ctx, onQuit }) => {
|
|
|
2597
2607
|
`).join("");
|
|
2598
2608
|
process.stdout.write(
|
|
2599
2609
|
`
|
|
2600
|
-
|
|
2610
|
+
attaching \xB7 ${session.harness} \xB7 ${short} \xB7 detach: Ctrl+]
|
|
2601
2611
|
${tunneled}
|
|
2602
2612
|
`
|
|
2603
2613
|
);
|
|
@@ -2641,7 +2651,7 @@ ${tunneled}
|
|
|
2641
2651
|
lockRef.current = false;
|
|
2642
2652
|
}
|
|
2643
2653
|
say(
|
|
2644
|
-
outcome === "unavailable" ? "attach unavailable \u2014 could not connect" : outcome === "detached" || outcome === "interrupted" ? `detached \u2014 ${short} keeps running` : outcome === "dropped" ? `disconnected \xB7 ${short} \u2014 refreshing session status` : `terminal ended \xB7 ${short} \u2014 refreshing session status`
|
|
2654
|
+
outcome === "unavailable" ? "attach unavailable \u2014 could not connect" : outcome === "no-answer" ? `no answer \u2014 the server did not open ${short}'s terminal; it keeps running \xB7 a tries again` : outcome === "detached" || outcome === "interrupted" ? `detached \u2014 ${short} keeps running` : outcome === "dropped" ? `disconnected \xB7 ${short} \u2014 refreshing session status` : `terminal ended \xB7 ${short} \u2014 refreshing session status`
|
|
2645
2655
|
);
|
|
2646
2656
|
refetch();
|
|
2647
2657
|
};
|
|
@@ -2663,8 +2673,10 @@ ${tunneled}
|
|
|
2663
2673
|
name: vars.name,
|
|
2664
2674
|
base: vars.base
|
|
2665
2675
|
});
|
|
2666
|
-
|
|
2667
|
-
|
|
2676
|
+
return startedOrStarting(
|
|
2677
|
+
ctx.api("POST", `/sessions/${session.id}/launch`, { argv }),
|
|
2678
|
+
session
|
|
2679
|
+
);
|
|
2668
2680
|
},
|
|
2669
2681
|
onMutate: async (vars) => {
|
|
2670
2682
|
await queryClient.cancelQueries({ queryKey: WORKBENCH_KEY });
|
|
@@ -2700,7 +2712,7 @@ ${tunneled}
|
|
|
2700
2712
|
);
|
|
2701
2713
|
setSessionKey((current) => current === vars.pendingKey ? session.id : current);
|
|
2702
2714
|
setBusy(null);
|
|
2703
|
-
say(
|
|
2715
|
+
say(startedLine(session));
|
|
2704
2716
|
},
|
|
2705
2717
|
onSettled: (_data, _error, vars) => {
|
|
2706
2718
|
gate.release(vars.gateKey);
|
|
@@ -2708,9 +2720,12 @@ ${tunneled}
|
|
|
2708
2720
|
}
|
|
2709
2721
|
});
|
|
2710
2722
|
const resumeMutation = useMutation2({
|
|
2711
|
-
mutationFn: (vars) =>
|
|
2712
|
-
|
|
2713
|
-
|
|
2723
|
+
mutationFn: (vars) => startedOrStarting(
|
|
2724
|
+
ctx.api("POST", `/sessions/${vars.session.id}/resume`, {
|
|
2725
|
+
harness: vars.harness
|
|
2726
|
+
}),
|
|
2727
|
+
vars.session
|
|
2728
|
+
),
|
|
2714
2729
|
onMutate: async (vars) => {
|
|
2715
2730
|
await queryClient.cancelQueries({ queryKey: WORKBENCH_KEY });
|
|
2716
2731
|
patchWorkbench(
|
|
@@ -2735,7 +2750,9 @@ ${tunneled}
|
|
|
2735
2750
|
(current) => replaceSession(current, vars.projectId, vars.session.id, resumed)
|
|
2736
2751
|
);
|
|
2737
2752
|
setBusy(null);
|
|
2738
|
-
say(
|
|
2753
|
+
say(
|
|
2754
|
+
resumed.status === "starting" ? `still resuming \xB7 ${sessionDisplayName(resumed)} \u2014 a attaches once the row reads running` : `resumed \xB7 ${sessionDisplayName(resumed)} \u2014 a attaches`
|
|
2755
|
+
);
|
|
2739
2756
|
},
|
|
2740
2757
|
onSettled: (_data, _error, vars) => {
|
|
2741
2758
|
gate.release(vars.gateKey);
|
|
@@ -2846,8 +2863,10 @@ ${tunneled}
|
|
|
2846
2863
|
harness: vars.harness,
|
|
2847
2864
|
label: null
|
|
2848
2865
|
});
|
|
2849
|
-
|
|
2850
|
-
|
|
2866
|
+
return startedOrStarting(
|
|
2867
|
+
ctx.api("POST", `/sessions/${session.id}/launch`, { argv }),
|
|
2868
|
+
session
|
|
2869
|
+
);
|
|
2851
2870
|
},
|
|
2852
2871
|
onMutate: async (vars) => {
|
|
2853
2872
|
await queryClient.cancelQueries({ queryKey: WORKBENCH_KEY });
|
|
@@ -2880,7 +2899,7 @@ ${tunneled}
|
|
|
2880
2899
|
);
|
|
2881
2900
|
setSessionKey((current) => current === vars.pendingKey ? session.id : current);
|
|
2882
2901
|
setBusy(null);
|
|
2883
|
-
say(
|
|
2902
|
+
say(startedLine(session));
|
|
2884
2903
|
},
|
|
2885
2904
|
onSettled: (_data, _error, vars) => {
|
|
2886
2905
|
gate.release(vars.gateKey);
|