@sealant/mend 0.28.0 → 0.29.0

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 (75) hide show
  1. package/README.md +4 -3
  2. package/dist/{chunk-7JPOKREB.js → chunk-F6AJNFVE.js} +238 -8
  3. package/dist/{dashboard-4WQC5MZ4.js → dashboard-ZKCPU2QJ.js} +1 -1
  4. package/dist/main.js +1470 -662
  5. package/man/mend-accounts.1 +1 -1
  6. package/man/mend-adopt.1 +8 -2
  7. package/man/mend-attach.1 +1 -1
  8. package/man/mend-codex.1 +1 -1
  9. package/man/mend-completions.1 +1 -1
  10. package/man/mend-connect.1 +9 -4
  11. package/man/mend-continue.1 +1 -1
  12. package/man/mend-doctor.1 +1 -1
  13. package/man/mend-dotfiles-sync.1 +1 -1
  14. package/man/mend-dotfiles.1 +1 -1
  15. package/man/mend-env-cluster.1 +1 -1
  16. package/man/mend-env-load.1 +1 -1
  17. package/man/mend-env-show.1 +1 -1
  18. package/man/mend-folder-create.1 +11 -0
  19. package/man/mend-folder-list.1 +11 -0
  20. package/man/mend-folder-push.1 +18 -0
  21. package/man/mend-folder-rm.1 +11 -0
  22. package/man/mend-help.1 +1 -1
  23. package/man/mend-invite.1 +26 -0
  24. package/man/mend-keys-init.1 +1 -1
  25. package/man/mend-keys-mode.1 +1 -1
  26. package/man/mend-keys-share.1 +1 -1
  27. package/man/mend-keys-show.1 +1 -1
  28. package/man/mend-login.1 +1 -1
  29. package/man/mend-logout.1 +1 -1
  30. package/man/mend-man.1 +1 -1
  31. package/man/mend-members.1 +11 -0
  32. package/man/mend-operator-exposure.1 +11 -0
  33. package/man/mend-operator-gate.1 +11 -0
  34. package/man/mend-operator-grant-owner.1 +11 -0
  35. package/man/mend-operator-org-create.1 +11 -0
  36. package/man/mend-operator-org-invite-owner.1 +15 -0
  37. package/man/mend-operator-org-list.1 +11 -0
  38. package/man/mend-operator-org-rename.1 +11 -0
  39. package/man/mend-operator-reset-link.1 +11 -0
  40. package/man/mend-pair.1 +1 -1
  41. package/man/mend-projects.1 +1 -1
  42. package/man/mend-refresh.1 +1 -1
  43. package/man/mend-rejoin.1 +1 -1
  44. package/man/mend-resume.1 +1 -1
  45. package/man/mend-run.1 +1 -1
  46. package/man/mend-server-logs.1 +1 -1
  47. package/man/mend-server-restart.1 +1 -1
  48. package/man/mend-server-setup.1 +2 -2
  49. package/man/mend-server-start.1 +1 -1
  50. package/man/mend-server-status.1 +1 -1
  51. package/man/mend-server-stop.1 +1 -1
  52. package/man/mend-server-upgrade.1 +1 -1
  53. package/man/mend-server.1 +1 -1
  54. package/man/mend-service-add.1 +1 -1
  55. package/man/mend-service-connect.1 +1 -1
  56. package/man/mend-service-init.1 +1 -1
  57. package/man/mend-service-list.1 +1 -1
  58. package/man/mend-service-logs.1 +1 -1
  59. package/man/mend-service-restart.1 +1 -1
  60. package/man/mend-service-run.1 +1 -1
  61. package/man/mend-service-stop.1 +1 -1
  62. package/man/mend-session-share.1 +14 -0
  63. package/man/mend-sessions.1 +1 -1
  64. package/man/mend-shell.1 +1 -1
  65. package/man/mend-skills-push.1 +1 -1
  66. package/man/mend-skills.1 +1 -1
  67. package/man/mend-ssh-setup.1 +1 -1
  68. package/man/mend-ssh.1 +1 -1
  69. package/man/mend-stop.1 +1 -1
  70. package/man/mend-ui.1 +1 -1
  71. package/man/mend-uninstall.1 +1 -1
  72. package/man/mend-version.1 +1 -1
  73. package/man/mend-worktrees.1 +1 -1
  74. package/man/mend.1 +48 -2
  75. package/package.json +1 -1
package/README.md CHANGED
@@ -107,8 +107,9 @@ mend doctor
107
107
 
108
108
  Reads, and changes nothing: server reachable, token accepted, the Sealant connection, each connected
109
109
  account, adopted projects, the `claude` / `codex` / `gh` CLIs on PATH and whether their credentials
110
- exist on this machine, and the tailnet address. One line per fact — `✓` observed, `○` not set up
111
- yet, `✗` a blocker — and every line that needs an action ends with the one command that takes it:
110
+ exist on this machine, and how the instance is exposed: what its operator declared and what the
111
+ server observed. One line per fact — `✓` observed, `○` not set up yet, `✗` a blocker — and every
112
+ line that needs an action ends with the one command that takes it:
112
113
 
113
114
  ```text
114
115
  ✓ server http://localhost:3105 · mend 0.5.0
@@ -118,7 +119,7 @@ yet, `✗` a blocker — and every line that needs an action ends with the one c
118
119
  ○ codex not connected → mend connect codex
119
120
  ✓ projects 2 adopted
120
121
  ○ gh cli on PATH · no credential here → gh auth login
121
- ○ tailnet not detected
122
+ ✓ exposure declared loopback · http origin
122
123
  ```
123
124
 
124
125
  It exits 1 when a `✗` is printed, so a setup script can gate on it. No request waits longer than 3s.
@@ -4,6 +4,64 @@ var __export = (target, all3) => {
4
4
  __defProp(target, name, { get: all3[name], enumerable: true });
5
5
  };
6
6
 
7
+ // ../../packages/domain/src/workbench/connected-credential.ts
8
+ var CLAUDE_GRANT_SECTION = "claudeAiOauth";
9
+ var narrowCredential = (provider, secret) => {
10
+ if (provider !== "claude") return { kind: "unchanged", secret };
11
+ const parsed = parseDocument(secret);
12
+ if (parsed === null) return { kind: "unchanged", secret };
13
+ const grant = parsed[CLAUDE_GRANT_SECTION];
14
+ if (grant === void 0) return { kind: "unchanged", secret };
15
+ const dropped = Object.keys(parsed).filter((key) => key !== CLAUDE_GRANT_SECTION).toSorted();
16
+ return {
17
+ kind: "narrowed",
18
+ // Two spaces and a trailing newline: the shape Claude Code writes, so a round trip through
19
+ // Mend leaves a file a person can still read.
20
+ secret: `${JSON.stringify({ [CLAUDE_GRANT_SECTION]: grant }, null, 2)}
21
+ `,
22
+ dropped
23
+ };
24
+ };
25
+ var parseDocument = (secret) => {
26
+ const trimmed = secret.trim();
27
+ if (!trimmed.startsWith("{")) return null;
28
+ try {
29
+ const value3 = JSON.parse(trimmed);
30
+ return typeof value3 === "object" && value3 !== null && !Array.isArray(value3) ? value3 : null;
31
+ } catch {
32
+ return null;
33
+ }
34
+ };
35
+ var claudeGrantFacts = (secret) => {
36
+ const parsed = parseDocument(secret);
37
+ const grant = parsed?.[CLAUDE_GRANT_SECTION];
38
+ if (typeof grant !== "object" || grant === null) return null;
39
+ const record3 = { ...grant };
40
+ const refreshToken = record3["refreshToken"];
41
+ return {
42
+ accessExpiresAt: asDate(record3["expiresAt"]),
43
+ refreshExpiresAt: asDate(record3["refreshTokenExpiresAt"]),
44
+ subscriptionType: typeof record3["subscriptionType"] === "string" ? record3["subscriptionType"] : null,
45
+ hasRefreshToken: typeof refreshToken === "string" && refreshToken !== ""
46
+ };
47
+ };
48
+ var asDate = (value3) => {
49
+ if (typeof value3 !== "number" || !Number.isFinite(value3) || value3 <= 0) return null;
50
+ const date2 = new Date(value3);
51
+ return Number.isNaN(date2.getTime()) ? null : date2;
52
+ };
53
+ var sameGrant = (left, right) => {
54
+ const token = (secret) => {
55
+ const grant = parseDocument(secret)?.[CLAUDE_GRANT_SECTION];
56
+ if (typeof grant !== "object" || grant === null) return null;
57
+ const value3 = grant["refreshToken"];
58
+ return typeof value3 === "string" && value3 !== "" ? value3 : null;
59
+ };
60
+ const a = token(left);
61
+ const b = token(right);
62
+ return a !== null && b !== null && a === b;
63
+ };
64
+
7
65
  // ../../node_modules/.pnpm/effect@4.0.0-beta.93/node_modules/effect/dist/Pipeable.js
8
66
  var pipeArguments = (self, args2) => {
9
67
  switch (args2.length) {
@@ -26436,6 +26494,11 @@ var ProjectEnvironmentVariableId = Schema_exports.String.pipe(
26436
26494
  );
26437
26495
  var ProjectSecretId = Schema_exports.String.pipe(Schema_exports.brand("ProjectSecretId"));
26438
26496
  var ProjectClusterBindingId = Schema_exports.String.pipe(Schema_exports.brand("ProjectClusterBindingId"));
26497
+ var OrganizationId = Schema_exports.String.pipe(Schema_exports.brand("OrganizationId"));
26498
+ var InvitationId = Schema_exports.String.pipe(Schema_exports.brand("InvitationId"));
26499
+ var FolderId = Schema_exports.String.pipe(Schema_exports.brand("FolderId"));
26500
+ var AuditEventId = Schema_exports.String.pipe(Schema_exports.brand("AuditEventId"));
26501
+ var SessionControlEventId = Schema_exports.String.pipe(Schema_exports.brand("SessionControlEventId"));
26439
26502
 
26440
26503
  // ../../packages/domain/src/settings.ts
26441
26504
  var PrMode = Schema_exports.Literals(["draft-immediately", "pr-on-approval"]);
@@ -26563,6 +26626,45 @@ var Timestamp = Schema_exports.Union([
26563
26626
  ]);
26564
26627
  var SequenceNumber = Schema_exports.Union([Schema_exports.BigIntFromString, Schema_exports.BigInt]);
26565
26628
 
26629
+ // ../../packages/domain/src/workbench/organization.ts
26630
+ var OrganizationRole = Schema_exports.Literals(["owner", "member"]);
26631
+ var InstanceRole = Schema_exports.Literals(["operator"]);
26632
+ var TenancyMode = Schema_exports.Literals(["single", "multi"]);
26633
+ var ProjectVisibility = Schema_exports.Literals(["private", "shared"]);
26634
+ var Organization = class extends Schema_exports.Class("Organization")({
26635
+ id: OrganizationId,
26636
+ /** Display name, unique per instance after trimming and case folding. */
26637
+ name: Schema_exports.String,
26638
+ /** The account that created it; null for the organization the upgrade created. */
26639
+ createdByUserId: Schema_exports.NullOr(Schema_exports.String),
26640
+ createdAt: Timestamp,
26641
+ updatedAt: Timestamp
26642
+ }) {
26643
+ };
26644
+ var OrganizationMember = class extends Schema_exports.Class("OrganizationMember")({
26645
+ organizationId: OrganizationId,
26646
+ userId: Schema_exports.String,
26647
+ name: Schema_exports.String,
26648
+ email: Schema_exports.String,
26649
+ role: OrganizationRole,
26650
+ joinedAt: Timestamp
26651
+ }) {
26652
+ };
26653
+ var Invitation = class extends Schema_exports.Class("Invitation")({
26654
+ id: InvitationId,
26655
+ organizationId: OrganizationId,
26656
+ role: OrganizationRole,
26657
+ /** When set, only the account with this email can accept. */
26658
+ email: Schema_exports.NullOr(Schema_exports.String),
26659
+ createdByUserId: Schema_exports.String,
26660
+ createdAt: Timestamp,
26661
+ expiresAt: Timestamp,
26662
+ acceptedByUserId: Schema_exports.NullOr(Schema_exports.String),
26663
+ acceptedAt: Schema_exports.NullOr(Timestamp),
26664
+ revokedAt: Schema_exports.NullOr(Timestamp)
26665
+ }) {
26666
+ };
26667
+
26566
26668
  // ../../packages/domain/src/workbench/project.ts
26567
26669
  var AutomationChoice = Schema_exports.Literals(["inherit", "on", "off"]);
26568
26670
  var GitAuthMode = Schema_exports.Literals(["ambient", "mend-key", "bridge"]);
@@ -26586,7 +26688,10 @@ var repositoryCloneUrlIssue = (value3) => {
26586
26688
  } catch {
26587
26689
  return REPOSITORY_CLONE_URL_GUIDANCE;
26588
26690
  }
26589
- if (url.protocol !== "http:" && url.protocol !== "https:" && url.protocol !== "ssh:" && url.protocol !== "git:" || url.hostname === "" || url.pathname === "" || url.pathname === "/") {
26691
+ if (url.protocol !== "http:" && url.protocol !== "https:" && url.protocol !== "ssh:" && url.protocol !== "git:" || url.hostname === "" || url.pathname === "" || url.pathname === "/" || // A host is a DNS name or an IP literal. `ssh:` is not a special scheme, so URL keeps any
26692
+ // code point in its host; a `$`, backtick or `;` there would reach a shell through
26693
+ // GIT_SSH_COMMAND.
26694
+ !/^(?:[a-z0-9_-]+(?:\.[a-z0-9_-]+)*\.?|\[[0-9a-f:.]+\])$/i.test(url.hostname)) {
26590
26695
  return REPOSITORY_CLONE_URL_GUIDANCE;
26591
26696
  }
26592
26697
  return null;
@@ -26597,11 +26702,20 @@ var RepositoryCloneUrl = Schema_exports.String.pipe(
26597
26702
  );
26598
26703
  var Project = class extends Schema_exports.Class("Project")({
26599
26704
  id: ProjectId,
26600
- /** Short name; also the store directory name. */
26705
+ /** Short name, unique within the organization. */
26601
26706
  name: Schema_exports.String,
26707
+ /** The organization that owns the project (docs/adr/0003-organizations-and-tenancy.md). */
26708
+ organizationId: OrganizationId,
26709
+ /** `private`: its creator only. `shared`: every member of its organization. */
26710
+ visibility: ProjectVisibility,
26711
+ /** The account that adopted it; the creator a private project is visible to. */
26712
+ createdByUserId: Schema_exports.NullOr(Schema_exports.String),
26602
26713
  /** Network Git URL used for adoption. Null only for legacy bare-created repositories. */
26603
26714
  originUrl: Schema_exports.NullOr(Schema_exports.String),
26604
- /** Absolute path of the bare repo inside the store: `<storeRoot>/<name>/repo.git`. */
26715
+ /**
26716
+ * Absolute path of the bare repo inside the store: `<storeRoot>/<projectId>/repo.git` for
26717
+ * projects adopted after organizations, `<storeRoot>/<name>/repo.git` before.
26718
+ */
26605
26719
  storePath: Schema_exports.String,
26606
26720
  defaultBranch: Schema_exports.String,
26607
26721
  /** HEAD of the default branch at adoption — display only; git is the source of truth. */
@@ -26653,6 +26767,45 @@ var Project = class extends Schema_exports.Class("Project")({
26653
26767
  }) {
26654
26768
  };
26655
26769
 
26770
+ // ../../packages/domain/src/workbench/audit.ts
26771
+ var AuditAction = Schema_exports.Literals([
26772
+ "invitation.created",
26773
+ "invitation.revoked",
26774
+ "invitation.accepted",
26775
+ "member.role_changed",
26776
+ "member.removed",
26777
+ "project.visibility_changed",
26778
+ "project.taken_over",
26779
+ "folder.created",
26780
+ "folder.removed",
26781
+ "reference.added",
26782
+ "reference.removed",
26783
+ "session.shared_control_on",
26784
+ "session.shared_control_off",
26785
+ "member.password_reset_issued",
26786
+ "organization.created",
26787
+ "organization.renamed",
26788
+ "recovery.owner_granted",
26789
+ "recovery.password_reset_issued"
26790
+ ]);
26791
+ var AuditData = Schema_exports.Record(
26792
+ Schema_exports.String,
26793
+ Schema_exports.Union([Schema_exports.String, Schema_exports.Number, Schema_exports.Boolean, Schema_exports.Null])
26794
+ );
26795
+ var AuditEvent = class extends Schema_exports.Class("AuditEvent")({
26796
+ id: AuditEventId,
26797
+ organizationId: OrganizationId,
26798
+ /** The account that acted. */
26799
+ actorUserId: Schema_exports.String,
26800
+ action: AuditAction,
26801
+ /** What the action touched: `member`, `invitation`, `project`, `session`, `folder` or `reference`. */
26802
+ subjectType: Schema_exports.String,
26803
+ subjectId: Schema_exports.String,
26804
+ data: AuditData,
26805
+ createdAt: Timestamp
26806
+ }) {
26807
+ };
26808
+
26656
26809
  // ../../packages/domain/src/workbench/agent-protocol.ts
26657
26810
  var AgentLaunchMode = Schema_exports.Literals(["pty", "protocol"]);
26658
26811
  var AgentTurnStatus = Schema_exports.Literals([
@@ -26888,6 +27041,36 @@ var ContextSnapshot = class extends Schema_exports.Class("ContextSnapshot")({
26888
27041
  }) {
26889
27042
  };
26890
27043
 
27044
+ // ../../packages/domain/src/workbench/folder.ts
27045
+ var Folder = class extends Schema_exports.Class("Folder")({
27046
+ id: FolderId,
27047
+ organizationId: OrganizationId,
27048
+ /** Short name, unique within the organization; the default mount directory name. */
27049
+ name: Schema_exports.String,
27050
+ /** Absolute path of the directory inside the store: `_organizations/<org>/folders/<id>`. */
27051
+ path: Schema_exports.String,
27052
+ createdByUserId: Schema_exports.NullOr(Schema_exports.String),
27053
+ createdAt: Timestamp,
27054
+ updatedAt: Timestamp
27055
+ }) {
27056
+ };
27057
+ var ProjectFolder = class extends Schema_exports.Class("ProjectFolder")({
27058
+ projectId: ProjectId,
27059
+ folderId: FolderId,
27060
+ /** Mount directory under `/workspace/home/`. */
27061
+ name: Schema_exports.String,
27062
+ readOnly: Schema_exports.Boolean,
27063
+ createdAt: Timestamp
27064
+ }) {
27065
+ };
27066
+ var FolderFile = class extends Schema_exports.Class("FolderFile")({
27067
+ path: Schema_exports.String,
27068
+ bytes: Schema_exports.Int
27069
+ }) {
27070
+ };
27071
+ var FOLDER_MAX_FILE_BYTES = 1024 * 1024;
27072
+ var FOLDER_MAX_REQUEST_BYTES = 4 * 1024 * 1024;
27073
+
26891
27074
  // ../../packages/domain/src/workbench/review-slice.ts
26892
27075
  var DiffDigest = Schema_exports.String.pipe(
26893
27076
  Schema_exports.check(Schema_exports.isPattern(/^[0-9a-f]{64}$/)),
@@ -26966,11 +27149,22 @@ var SessionExtraMount = class extends Schema_exports.Class("SessionExtraMount")(
26966
27149
  // ../../packages/domain/src/workbench/reference.ts
26967
27150
  var Reference2 = class extends Schema_exports.Class("Reference")({
26968
27151
  id: ReferenceId,
26969
- /** Short name; also the clone directory and the mount directory name. */
27152
+ /** Short name, unique within the organization; also the mount directory name. */
26970
27153
  name: Schema_exports.String,
27154
+ /** The organization that owns the reference (docs/adr/0003-organizations-and-tenancy.md). */
27155
+ organizationId: OrganizationId,
27156
+ /**
27157
+ * The account that added it. References added before organizations are credited to the oldest
27158
+ * account; null only on an instance that had no account yet.
27159
+ */
27160
+ createdByUserId: Schema_exports.NullOr(Schema_exports.String),
26971
27161
  /** Where the clone comes from — a remote URL or a local path. */
26972
27162
  originUrl: Schema_exports.String,
26973
- /** Absolute path of the clone inside the store: `<storeRoot>/_references/<name>`. */
27163
+ /**
27164
+ * Absolute path of the clone inside the store:
27165
+ * `<storeRoot>/_organizations/<organizationId>/references/<id>`, or
27166
+ * `<storeRoot>/_references/<name>` for references added before organizations.
27167
+ */
26974
27168
  path: Schema_exports.String,
26975
27169
  /** Branch or tag the clone is held at; null = the remote's default branch. */
26976
27170
  pinnedRef: Schema_exports.NullOr(Schema_exports.String),
@@ -27062,6 +27256,16 @@ var Session = class extends Schema_exports.Class("Session")({
27062
27256
  dotfiles: Schema_exports.NullOr(SessionDotfiles),
27063
27257
  /** Who provisioned the session — whose dotfiles apply. Null for pre-column rows. */
27064
27258
  ownerUserId: Schema_exports.NullOr(Schema_exports.String),
27259
+ /**
27260
+ * Shared control (docs/adr/0003-organizations-and-tenancy.md): when set, anyone who can see the
27261
+ * session may steer it, still on the owner's credentials. Who turned it on, and when.
27262
+ */
27263
+ sharedControlEnabledByUserId: Schema_exports.NullOr(Schema_exports.String).pipe(
27264
+ Schema_exports.withConstructorDefault(Effect_exports.succeed(null))
27265
+ ),
27266
+ sharedControlEnabledAt: Schema_exports.NullOr(Timestamp).pipe(
27267
+ Schema_exports.withConstructorDefault(Effect_exports.succeed(null))
27268
+ ),
27065
27269
  /**
27066
27270
  * Whether the harness left a conversation behind — a transcript Mend captured at settle or
27067
27271
  * found in the live harness home. False is a dead end: nothing to resume, nothing to hand
@@ -27105,8 +27309,11 @@ var HotWorkspace = class extends Schema_exports.Class("HotWorkspace")({
27105
27309
  * launch. Rows from before still carry the pre-created worktree the drain must remove.
27106
27310
  */
27107
27311
  worktreeId: Schema_exports.NullOr(WorktreeId),
27108
- /** Whose dotfiles were resolved at prewarm. Null when no user has dotfiles configured. */
27109
- ownerUserId: Schema_exports.NullOr(Schema_exports.String),
27312
+ /**
27313
+ * The account the workspace was provisioned as: its connected accounts, dotfiles and signer.
27314
+ * Only that account's sessions claim it (docs/adr/0003-organizations-and-tenancy.md).
27315
+ */
27316
+ ownerUserId: Schema_exports.String,
27110
27317
  status: HotWorkspaceStatus,
27111
27318
  /** Why provisioning failed, when it did — surfaced on the project setup page. */
27112
27319
  error: Schema_exports.NullOr(Schema_exports.String),
@@ -27188,7 +27395,7 @@ var ProjectClusterBindingsSnapshot = class extends Schema_exports.Class(
27188
27395
  }) {
27189
27396
  };
27190
27397
 
27191
- // ../../node_modules/.pnpm/@sealant+api-contracts@0.33.0_effect@4.0.0-beta.93/node_modules/@sealant/api-contracts/dist/workspace-environment.js
27398
+ // ../../node_modules/.pnpm/@sealant+api-contracts@0.36.0_effect@4.0.0-beta.93/node_modules/@sealant/api-contracts/dist/workspace-environment.js
27192
27399
  var RESERVED_NAMES = new Map([
27193
27400
  // Identity/process roots the daemon and shells own.
27194
27401
  ...[
@@ -27523,6 +27730,26 @@ var ServiceView = class extends Schema_exports.Class("ServiceView")({
27523
27730
  }) {
27524
27731
  };
27525
27732
 
27733
+ // ../../packages/domain/src/workbench/session-control.ts
27734
+ var SessionControlKind = Schema_exports.Literals([
27735
+ "interrupt",
27736
+ "terminal-attach",
27737
+ "shell-open",
27738
+ "stop",
27739
+ "shared-control-on",
27740
+ "shared-control-off"
27741
+ ]);
27742
+ var SessionControlEvent = class extends Schema_exports.Class("SessionControlEvent")({
27743
+ id: SessionControlEventId,
27744
+ sessionId: SessionId,
27745
+ actorUserId: Schema_exports.String,
27746
+ kind: SessionControlKind,
27747
+ /** The turn, process or Service the act concerned, when it concerned one. */
27748
+ refId: Schema_exports.NullOr(Schema_exports.String),
27749
+ createdAt: Timestamp
27750
+ }) {
27751
+ };
27752
+
27526
27753
  // ../../packages/domain/src/workbench/session-run.ts
27527
27754
  var SessionRun = class extends Schema_exports.Class("SessionRun")({
27528
27755
  sealantRunId: SealantRunId,
@@ -27879,6 +28106,9 @@ var trackBracketedPaste = (output, current) => {
27879
28106
  var pasteBytes = (text, bracketed) => Buffer.from(bracketed ? `\x1B[200~${text}\x1B[201~` : text, "utf8");
27880
28107
 
27881
28108
  export {
28109
+ narrowCredential,
28110
+ claudeGrantFacts,
28111
+ sameGrant,
27882
28112
  repositoryCloneUrlIssue,
27883
28113
  RepositoryCloneUrl,
27884
28114
  HARNESS_COMMANDS,
@@ -8,7 +8,7 @@ import {
8
8
  normalizeProjectName,
9
9
  pendingId,
10
10
  repositoryCloneUrlIssue
11
- } from "./chunk-7JPOKREB.js";
11
+ } from "./chunk-F6AJNFVE.js";
12
12
 
13
13
  // src/dashboard.tsx
14
14
  import { CliRenderEvents, createCliRenderer } from "@opentui/core";