@sealant/mend 0.36.0-next.663 → 0.36.0-next.675

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.
Files changed (92) hide show
  1. package/dist/{chunk-VOP6USOZ.js → chunk-TP4A72RF.js} +43 -2
  2. package/dist/{dashboard-CEJN6IOO.js → dashboard-RAZDVFR7.js} +8 -2
  3. package/dist/main.js +1521 -175
  4. package/man/mend-accounts.1 +1 -1
  5. package/man/mend-adopt.1 +1 -1
  6. package/man/mend-attach.1 +1 -1
  7. package/man/mend-codex.1 +1 -1
  8. package/man/mend-completions.1 +1 -1
  9. package/man/mend-connect-pi.1 +1 -1
  10. package/man/mend-connect.1 +1 -1
  11. package/man/mend-continue.1 +1 -1
  12. package/man/mend-doctor.1 +1 -1
  13. package/man/mend-dotfiles-repo.1 +1 -1
  14. package/man/mend-dotfiles-sync.1 +1 -1
  15. package/man/mend-dotfiles.1 +1 -1
  16. package/man/mend-env-cluster.1 +1 -1
  17. package/man/mend-env-load.1 +1 -1
  18. package/man/mend-env-show.1 +1 -1
  19. package/man/mend-folder-create.1 +1 -1
  20. package/man/mend-folder-list.1 +1 -1
  21. package/man/mend-folder-push.1 +1 -1
  22. package/man/mend-folder-rm.1 +1 -1
  23. package/man/mend-git-author.1 +1 -1
  24. package/man/mend-help.1 +1 -1
  25. package/man/mend-invite.1 +1 -1
  26. package/man/mend-keys-init.1 +1 -1
  27. package/man/mend-keys-mode.1 +1 -1
  28. package/man/mend-keys-share.1 +1 -1
  29. package/man/mend-keys-show.1 +1 -1
  30. package/man/mend-land.1 +1 -1
  31. package/man/mend-login.1 +1 -1
  32. package/man/mend-logout.1 +1 -1
  33. package/man/mend-logs.1 +13 -2
  34. package/man/mend-man.1 +1 -1
  35. package/man/mend-members.1 +1 -1
  36. package/man/mend-memory-import.1 +1 -1
  37. package/man/mend-memory-rm.1 +1 -1
  38. package/man/mend-memory-show.1 +1 -1
  39. package/man/mend-memory.1 +1 -1
  40. package/man/mend-models.1 +1 -1
  41. package/man/mend-operator-exposure.1 +2 -2
  42. package/man/mend-operator-gate.1 +1 -1
  43. package/man/mend-operator-grant-owner.1 +1 -1
  44. package/man/mend-operator-org-create.1 +1 -1
  45. package/man/mend-operator-org-invite-owner.1 +1 -1
  46. package/man/mend-operator-org-list.1 +1 -1
  47. package/man/mend-operator-org-rename.1 +1 -1
  48. package/man/mend-operator-reset-link.1 +1 -1
  49. package/man/mend-pair.1 +1 -1
  50. package/man/mend-projects.1 +1 -1
  51. package/man/mend-pull.1 +1 -1
  52. package/man/mend-refresh.1 +1 -1
  53. package/man/mend-rejoin.1 +1 -1
  54. package/man/mend-resume.1 +1 -1
  55. package/man/mend-run.1 +2 -2
  56. package/man/mend-secrets-add.1 +1 -1
  57. package/man/mend-secrets-rm.1 +1 -1
  58. package/man/mend-secrets.1 +1 -1
  59. package/man/mend-server-logs.1 +1 -1
  60. package/man/mend-server-restart.1 +1 -1
  61. package/man/mend-server-setup.1 +42 -2
  62. package/man/mend-server-start.1 +1 -1
  63. package/man/mend-server-status.1 +4 -2
  64. package/man/mend-server-stop.1 +2 -2
  65. package/man/mend-server-upgrade.1 +1 -1
  66. package/man/mend-server.1 +1 -1
  67. package/man/mend-service-add.1 +1 -1
  68. package/man/mend-service-connect.1 +1 -1
  69. package/man/mend-service-init.1 +1 -1
  70. package/man/mend-service-list.1 +10 -4
  71. package/man/mend-service-logs.1 +1 -1
  72. package/man/mend-service-restart.1 +1 -1
  73. package/man/mend-service-run.1 +13 -6
  74. package/man/mend-service-stop.1 +1 -1
  75. package/man/mend-session-share.1 +1 -1
  76. package/man/mend-sessions.1 +1 -1
  77. package/man/mend-shell.1 +1 -1
  78. package/man/mend-skills-push.1 +1 -1
  79. package/man/mend-skills.1 +1 -1
  80. package/man/mend-snake.1 +1 -1
  81. package/man/mend-ssh-setup.1 +1 -1
  82. package/man/mend-ssh.1 +1 -1
  83. package/man/mend-stop.1 +1 -1
  84. package/man/mend-ui.1 +1 -1
  85. package/man/mend-uninstall.1 +1 -1
  86. package/man/mend-version.1 +1 -1
  87. package/man/mend-wait.1 +5 -5
  88. package/man/mend-workspace-replace.1 +1 -1
  89. package/man/mend-worktrees-rm.1 +1 -1
  90. package/man/mend-worktrees.1 +1 -1
  91. package/man/mend.1 +3 -3
  92. package/package.json +2 -2
@@ -27627,6 +27627,7 @@ var AgentEvent = Schema_exports.Union([
27627
27627
  var CaptureDrainReason = Schema_exports.Literals(["stop", "relaunch", "replacement"]);
27628
27628
  var FALLBACK_REPLACEMENT_AGE_SECONDS = 7 * 60 * 60 + 30 * 60;
27629
27629
  var CAPTURE_EXECUTOR_RETAINED = "retained";
27630
+ var CAPTURE_SEAL_UNRESTORABLE = "unrestorable";
27630
27631
  var CAPTURE_COMPLETION_UNREPORTED = "unreported";
27631
27632
  var captureDurationWords = (ms) => {
27632
27633
  const seconds2 = Math.max(0, Math.floor(ms / 1e3));
@@ -27686,6 +27687,8 @@ var captureIncompleteWords = (reason) => {
27686
27687
  return "executor error";
27687
27688
  case CAPTURE_EXECUTOR_RETAINED:
27688
27689
  return "executor kept for recovery";
27690
+ case CAPTURE_SEAL_UNRESTORABLE:
27691
+ return "final seal refused \xB7 git section failed verification";
27689
27692
  default:
27690
27693
  return reason;
27691
27694
  }
@@ -27788,6 +27791,18 @@ var CheckpointTrigger = Schema_exports.Literals([
27788
27791
  "review-open",
27789
27792
  "user-mark"
27790
27793
  ]);
27794
+ var CheckpointSourceKind = Schema_exports.Literals(["stop-final", "stop-reading"]);
27795
+ var CheckpointSource = class extends Schema_exports.Class("CheckpointSource")({
27796
+ kind: CheckpointSourceKind,
27797
+ captureN: Schema_exports.NullOr(Schema_exports.Int),
27798
+ observedAt: Timestamp
27799
+ }) {
27800
+ };
27801
+ var checkpointSourceWords = (source, at) => [
27802
+ source.kind === "stop-final" ? "from the Stop's final save" : "from a Stop reading that did not save",
27803
+ ...source.captureN === null ? [] : [`capture ${source.captureN}`],
27804
+ at
27805
+ ].join(" \xB7 ");
27791
27806
  var Checkpoint = class extends Schema_exports.Class("Checkpoint")({
27792
27807
  id: CheckpointId,
27793
27808
  worktreeId: WorktreeId,
@@ -27810,7 +27825,9 @@ var Checkpoint = class extends Schema_exports.Class("Checkpoint")({
27810
27825
  /** Record sequence the supervisor had seen when the snapshot was taken. */
27811
27826
  seq: SequenceNumber,
27812
27827
  trigger: CheckpointTrigger,
27813
- createdAt: Timestamp
27828
+ createdAt: Timestamp,
27829
+ /** Absent when the checkpoint observed the executor itself (`CheckpointSource`). */
27830
+ source: Schema_exports.optionalKey(CheckpointSource)
27814
27831
  }) {
27815
27832
  };
27816
27833
 
@@ -28227,6 +28244,19 @@ var Session = class extends Schema_exports.Class("Session")({
28227
28244
  Schema_exports.withDecodingDefaultKey(Effect_exports.succeed(null)),
28228
28245
  Schema_exports.withConstructorDefault(Effect_exports.succeed(null))
28229
28246
  ),
28247
+ /**
28248
+ * Who launched the session's executor: the owner of the session whose own launch made it
28249
+ * (`SessionsRepo.executorSessionOf`), which a joined session is not. Remote-SSH into the workspace
28250
+ * admits that person only (docs/adr/0016), in either harness layout, so an editor asks before it
28251
+ * opens. Filled on every API read that hands sessions out (the session list, retained additions
28252
+ * included, the session view and the project view): the view reads in their own statement, the
28253
+ * plain reads from one batched read (`SessionsRepo.launchersOf`). Null with no executor, on the
28254
+ * repository's other reads, and from older servers.
28255
+ */
28256
+ workspaceLauncherUserId: Schema_exports.NullOr(Schema_exports.String).pipe(
28257
+ Schema_exports.withDecodingDefaultKey(Effect_exports.succeed(null)),
28258
+ Schema_exports.withConstructorDefault(Effect_exports.succeed(null))
28259
+ ),
28230
28260
  /**
28231
28261
  * Whether the harness left a conversation behind — a transcript Mend captured at settle or
28232
28262
  * found in the live harness home. False is a dead end: nothing to resume, nothing to hand
@@ -28371,6 +28401,7 @@ var HotWorkspaceEnvironment = Schema_exports.Struct({
28371
28401
  clusterBindingNames: Schema_exports.optional(Schema_exports.Array(Schema_exports.String)),
28372
28402
  clusterServiceAccount: Schema_exports.optional(Schema_exports.NullOr(Schema_exports.String))
28373
28403
  });
28404
+ var RemoteSsh = Schema_exports.Literals(["owner", "unbound", "not-taken"]);
28374
28405
  var HotWorkspace = class extends Schema_exports.Class("HotWorkspace")({
28375
28406
  id: SessionId,
28376
28407
  projectId: ProjectId,
@@ -28397,6 +28428,13 @@ var HotWorkspace = class extends Schema_exports.Class("HotWorkspace")({
28397
28428
  * `shared`.
28398
28429
  */
28399
28430
  harnessLayout: HarnessLayout,
28431
+ /**
28432
+ * Who Remote-SSH into the standby runs as (docs/adr/0016, decision 10), decided at its create and
28433
+ * kept for its claim: `owner` its owner's own user; `unbound` root, because Core could not bind
28434
+ * the owner's person; `not-taken` root, because Core runs no SSH session as a user. Rows from
28435
+ * before it are `not-taken`.
28436
+ */
28437
+ remoteSsh: RemoteSsh,
28400
28438
  /** Worktree directory name inside the project's store (derived from `id`). */
28401
28439
  worktree: Schema_exports.NullOr(Schema_exports.String),
28402
28440
  /** The pre-created session branch the worktree is on. */
@@ -28544,7 +28582,7 @@ var ProjectClusterBindingsSnapshot = class extends Schema_exports.Class(
28544
28582
  }) {
28545
28583
  };
28546
28584
 
28547
- // ../../node_modules/.pnpm/@sealant+api-contracts-next@0.39.0-next.707_effect@4.0.0-beta.93/node_modules/@sealant/api-contracts-next/dist/workspace-environment.js
28585
+ // ../../node_modules/.pnpm/@sealant+api-contracts-next@0.39.0-next.712_effect@4.0.0-beta.93/node_modules/@sealant/api-contracts-next/dist/workspace-environment.js
28548
28586
  var RESERVED_NAMES = new Map([
28549
28587
  // Identity/process roots the daemon and shells own.
28550
28588
  ...[
@@ -29013,6 +29051,7 @@ var ServiceView = class extends Schema_exports.Class("ServiceView")({
29013
29051
  previousEndpoints: Schema_exports.Array(ServiceEndpoint)
29014
29052
  }) {
29015
29053
  };
29054
+ var serviceStartCorrelation = (serviceId, startId) => `service-start:${serviceId}:${startId}`;
29016
29055
 
29017
29056
  // ../../packages/domain/src/workbench/session-control.ts
29018
29057
  var SessionControlKind = Schema_exports.Literals([
@@ -29875,6 +29914,7 @@ export {
29875
29914
  AGENT_MEMORY_MAX_FILE_BYTES,
29876
29915
  AGENT_MEMORY_MAX_DATABASE_BYTES,
29877
29916
  agentMemoryNameOf,
29917
+ checkpointSourceWords,
29878
29918
  narrowCredential,
29879
29919
  claudeGrantFacts,
29880
29920
  sameGrant,
@@ -29891,6 +29931,7 @@ export {
29891
29931
  validatePiProfile,
29892
29932
  servicesHoldLine,
29893
29933
  validateSecretFilePath,
29934
+ serviceStartCorrelation,
29894
29935
  terminalReadOnlyLine,
29895
29936
  sharedControlLine,
29896
29937
  sharedControlConfirm,
@@ -5,6 +5,7 @@ import {
5
5
  agentIsLive,
6
6
  agentOutcome,
7
7
  captureLineOf,
8
+ checkpointSourceWords,
8
9
  createSseParser,
9
10
  cwdFacts,
10
11
  eventFamilies,
@@ -23,7 +24,7 @@ import {
23
24
  workspaceReadsOf,
24
25
  worktreeJoinLine,
25
26
  wrapWords
26
- } from "./chunk-VOP6USOZ.js";
27
+ } from "./chunk-TP4A72RF.js";
27
28
 
28
29
  // src/dashboard.tsx
29
30
  import { CliRenderEvents, createCliRenderer } from "@opentui/core";
@@ -1120,6 +1121,7 @@ var SYNTAX_FUNCTION = "#ffcd66";
1120
1121
 
1121
1122
  // src/review.tsx
1122
1123
  import { Fragment, jsx, jsxs } from "@opentui/react/jsx-runtime";
1124
+ var clockOf = (iso) => new Date(iso).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", hour12: false });
1123
1125
  var REVIEW_KEY = (changeId) => ["review", changeId];
1124
1126
  var EDITOR_KEY_BINDINGS = [{ name: "return", ctrl: true, action: "submit" }];
1125
1127
  var syntaxStyle = SyntaxStyle.fromStyles({
@@ -1165,6 +1167,7 @@ var fetchReview = async (ctx, changeId) => {
1165
1167
  sliceId: pinned.slice.id,
1166
1168
  checkpointAId: pinned.checkpointA.id,
1167
1169
  checkpointBId: pinned.checkpointB.id,
1170
+ checkpointSource: pinned.checkpointB.source ?? null,
1168
1171
  diffDigest: pinned.slice.diffDigest,
1169
1172
  anchorFiles: pinned.anchorFiles,
1170
1173
  files: buildReviewFiles(wire.diff, wire.files),
@@ -1998,7 +2001,10 @@ function ReviewScreen({
1998
2001
  session.id.slice(0, 8)
1999
2002
  ] }),
2000
2003
  isFetching ? /* @__PURE__ */ jsx("span", { fg: FAINT, children: " \xB7 syncing" }) : null,
2001
- /* @__PURE__ */ jsx("span", { fg: checkpointState === "failed" ? MUTED : FAINT, children: checkpointState === "recording" ? " \xB7 checkpointing" : checkpointState === "failed" ? " \xB7 checkpoint incomplete" : " \xB7 checkpoint recorded" })
2004
+ /* @__PURE__ */ jsx("span", { fg: checkpointState === "failed" ? MUTED : FAINT, children: checkpointState === "recording" ? " \xB7 checkpointing" : checkpointState === "failed" ? " \xB7 checkpoint incomplete" : data.checkpointSource === null ? " \xB7 checkpoint recorded" : ` \xB7 checkpoint ${checkpointSourceWords(
2005
+ data.checkpointSource,
2006
+ clockOf(data.checkpointSource.observedAt)
2007
+ )}` })
2002
2008
  ] }),
2003
2009
  /* @__PURE__ */ jsxs("text", { height: 1, bg: "transparent", children: [
2004
2010
  /* @__PURE__ */ jsxs("span", { fg: FAINT, children: [