@overdeck/contracts 0.61.0 → 0.62.1

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/index.mjs CHANGED
@@ -16,7 +16,8 @@ const BackendPane = Schema.Struct({
16
16
  "test",
17
17
  "uat",
18
18
  "strike",
19
- "plan"
19
+ "plan",
20
+ "conversation"
20
21
  ]),
21
22
  harness: Schema.String,
22
23
  model: Schema.String,
@@ -147,9 +148,17 @@ const MEMBERSHIP_UNAVAILABLE_REASONS = [
147
148
  "repo_unavailable",
148
149
  "default_branch_unresolved",
149
150
  "forge_unavailable",
151
+ "forge_transient",
150
152
  "tracker_unconfigured",
151
153
  "gather_failed"
152
154
  ];
155
+ /**
156
+ * PAN-3527 — the membership snapshot has not been gathered yet (a freshly
157
+ * restarted server warming its cache). Sent with HTTP 503 and a `Retry-After`
158
+ * header. Unlike `PipelineMembershipUnavailableBody` (a settled answer about
159
+ * the project), this is a temporary state: callers retry it.
160
+ */
161
+ const PIPELINE_MEMBERSHIP_LOADING_CODE = "snapshot_loading";
153
162
  const AgentId = Schema.String;
154
163
  const SequenceNumber = Schema.Number;
155
164
  const AgentStatus = Schema.Literals([
@@ -328,6 +337,12 @@ const AgentSnapshot = Schema.Struct({
328
337
  phase: Schema.optional(Schema.String),
329
338
  workType: Schema.optional(Schema.String),
330
339
  roleRunHead: Schema.optional(Schema.String),
340
+ /** The agent has a live pane on its terminal backend (Herdr or tmux). */
341
+ hasLivePane: Schema.optional(Schema.Boolean),
342
+ /**
343
+ * @deprecated Misnamed alias of `hasLivePane`: true for a live pane on either
344
+ * backend, not only a tmux session. Still populated for compatibility (#4105).
345
+ */
331
346
  hasLiveTmuxSession: Schema.optional(Schema.Boolean),
332
347
  stoppedByUser: Schema.optional(Schema.Boolean),
333
348
  paused: Schema.optional(Schema.Boolean),
@@ -442,6 +457,39 @@ const ProjectCiSnapshot = Schema.Struct({
442
457
  /** Newest `observedAt` folded into this record. */
443
458
  updatedAt: Schema.String
444
459
  });
460
+ /**
461
+ * Where an in-flight dashboard self-deploy (`pan reload`) stands.
462
+ *
463
+ * `building` the reload holds the restart lock and is building from origin/main;
464
+ * `awaiting-approval` the build is ready and the reload waits on the restart gate;
465
+ * `restarting` the operator approved and the old dashboard is being replaced;
466
+ * `failed` the last reload recorded a failure (visible for a short window).
467
+ */
468
+ const ProjectDeployPhase = Schema.Literals([
469
+ "building",
470
+ "awaiting-approval",
471
+ "restarting",
472
+ "failed"
473
+ ]);
474
+ /**
475
+ * One project's deploy, derived on the server from live runtime files: the
476
+ * restart lock, the restart gate, the restart-status journal and the reload
477
+ * process's own stdout. Nothing here is stored; a server restart re-derives it.
478
+ */
479
+ const ProjectDeploySnapshot = Schema.Struct({
480
+ projectKey: Schema.String,
481
+ trigger: Schema.String,
482
+ phase: ProjectDeployPhase,
483
+ /** The deploying process, while it is alive. */
484
+ pid: Schema.optional(Schema.Number),
485
+ /** When the server first observed this deploy (for `failed`, when it failed). */
486
+ startedAt: Schema.String,
487
+ error: Schema.optional(Schema.String),
488
+ /** The reload's output file, when its stdout is a regular file. */
489
+ logPath: Schema.optional(Schema.String),
490
+ /** Last lines of `logPath`. */
491
+ logTail: Schema.optional(Schema.Array(Schema.String))
492
+ });
445
493
  /** What kind of process asked for the voluntary dashboard restart. */
446
494
  const RestartGateKind = Schema.Literals([
447
495
  "deploy",
@@ -511,6 +559,8 @@ const DashboardSnapshot = Schema.Struct({
511
559
  embedProgressBySessionId: Schema.optional(Schema.Record(Schema.String, EmbedProgressSnapshot)),
512
560
  ciByProjectKey: Schema.optional(Schema.Record(Schema.String, ProjectCiSnapshot)),
513
561
  restartGate: Schema.optional(RestartGateSnapshot),
562
+ /** PAN-3751 — in-flight deploys keyed by project key. */
563
+ deployByProjectKey: Schema.optional(Schema.Record(Schema.String, ProjectDeploySnapshot)),
514
564
  timestamp: Schema.String
515
565
  });
516
566
  const ResourceStats = Schema.Struct({ containers: Schema.Array(Schema.Struct({
@@ -765,6 +815,95 @@ const ScanResult = Schema.Struct({
765
815
  durationMs: Schema.Number
766
816
  });
767
817
  //#endregion
818
+ //#region src/pull-request-links.ts
819
+ const PullRequestLinkSource = Schema.Literals([
820
+ "manual",
821
+ "agent",
822
+ "created",
823
+ "branch"
824
+ ]);
825
+ const PullRequestKey = Schema.Struct({
826
+ host: Schema.String,
827
+ repository: Schema.String,
828
+ number: Schema.Number
829
+ });
830
+ const PullRequestState = Schema.Literals([
831
+ "open",
832
+ "merged",
833
+ "closed"
834
+ ]);
835
+ const PullRequestSnapshot = Schema.Struct({
836
+ state: PullRequestState,
837
+ isDraft: Schema.Boolean,
838
+ title: Schema.String,
839
+ headBranch: Schema.NullOr(Schema.String),
840
+ baseBranch: Schema.NullOr(Schema.String),
841
+ reviewState: PrReviewState,
842
+ checks: PrChecksState,
843
+ mergeable: Schema.NullOr(Schema.Boolean),
844
+ additions: Schema.NullOr(Schema.Number),
845
+ deletions: Schema.NullOr(Schema.Number),
846
+ changedFiles: Schema.NullOr(Schema.Number),
847
+ author: Schema.NullOr(Schema.String),
848
+ /** Forge timestamp, ISO. */
849
+ updatedAt: Schema.NullOr(Schema.String),
850
+ mergedAt: Schema.NullOr(Schema.String),
851
+ closedAt: Schema.NullOr(Schema.String),
852
+ /** When Overdeck last read the PR, ISO. */
853
+ syncedAt: Schema.String
854
+ });
855
+ const PullRequestLink = Schema.Struct({
856
+ ...PullRequestKey.fields,
857
+ url: Schema.String,
858
+ source: PullRequestLinkSource,
859
+ linkedAt: Schema.String,
860
+ dismissedAt: Schema.NullOr(Schema.String),
861
+ snapshot: Schema.NullOr(PullRequestSnapshot)
862
+ });
863
+ const ConversationPullRequests = Schema.Struct({
864
+ links: Schema.Array(PullRequestLink),
865
+ effective: Schema.NullOr(PullRequestLink)
866
+ });
867
+ /** One conversation linked to a PR — the reverse index (PR → conversations). */
868
+ const PullRequestLinkedConversation = Schema.Struct({
869
+ /** The /conv/<id> number. */
870
+ id: Schema.Number,
871
+ name: Schema.String,
872
+ title: Schema.NullOr(Schema.String),
873
+ source: PullRequestLinkSource,
874
+ linkedAt: Schema.String
875
+ });
876
+ /** One live link across all conversations, for the Pull requests list. */
877
+ const PullRequestLinkListing = Schema.Struct({
878
+ ...PullRequestLink.fields,
879
+ conversationId: Schema.Number,
880
+ conversationName: Schema.String,
881
+ conversationTitle: Schema.NullOr(Schema.String),
882
+ /** The conversation's effective project, or null when none resolves. */
883
+ projectKey: Schema.NullOr(Schema.String)
884
+ });
885
+ function stateRank(link) {
886
+ if (link.snapshot === null) return 1;
887
+ if (link.snapshot.state === "open") return 0;
888
+ if (link.snapshot.state === "merged") return 2;
889
+ return 3;
890
+ }
891
+ function recency(link) {
892
+ return Date.parse(link.snapshot?.updatedAt ?? link.linkedAt) || 0;
893
+ }
894
+ /**
895
+ * The one PR shown on a conversation: explicit links before branch links,
896
+ * open before merged before closed, most recently updated among equals.
897
+ * Dismissed links never count.
898
+ */
899
+ function resolveEffectivePullRequest(links) {
900
+ const live = links.filter((link) => link.dismissedAt === null);
901
+ const explicit = live.filter((link) => link.source !== "branch");
902
+ const pool = explicit.length > 0 ? explicit : live;
903
+ if (pool.length === 0) return null;
904
+ return [...pool].sort((a, b) => stateRank(a) - stateRank(b) || recency(b) - recency(a))[0] ?? null;
905
+ }
906
+ //#endregion
768
907
  //#region src/memory.ts
769
908
  const MemoryAgentRole = Schema.Union([Role, Schema.Literal("conversation")]);
770
909
  const MemoryIdentity = Schema.Struct({
@@ -1022,6 +1161,9 @@ const AgentHealthSnapshot = Schema.Struct({
1022
1161
  kind: Schema.optional(AgentHealthKind),
1023
1162
  status: AgentHealthStatus,
1024
1163
  lifecycle: Schema.optional(SpecialistLifecycle),
1164
+ /** The agent has a live pane on the selected terminal backend (Herdr or tmux). */
1165
+ hasLivePane: Schema.optional(Schema.Boolean),
1166
+ /** @deprecated Alias of `hasLivePane` kept for existing readers; true on either backend, not only tmux. */
1025
1167
  tmuxActive: Schema.optional(Schema.Boolean),
1026
1168
  memoryBytes: Schema.optional(Schema.Number),
1027
1169
  memoryGb: Schema.optional(Schema.Number),
@@ -1289,6 +1431,20 @@ const RestartGateChangedEvent = Schema.Struct({
1289
1431
  timestamp: Schema.String,
1290
1432
  payload: RestartGateSnapshot
1291
1433
  });
1434
+ /**
1435
+ * The set of in-flight project deploys changed (PAN-3751).
1436
+ *
1437
+ * The payload is the COMPLETE projection keyed by project key, so the reducer
1438
+ * is a plain replace. The server derives it from runtime files (restart lock,
1439
+ * restart gate, restart-status journal) and emits it in-memory only, like
1440
+ * `restart_gate.changed`: it is never persisted and never replayed at boot.
1441
+ */
1442
+ const ProjectDeployChangedEvent = Schema.Struct({
1443
+ type: Schema.Literal("project.deploy_changed"),
1444
+ sequence: SequenceNumber,
1445
+ timestamp: Schema.String,
1446
+ payload: Schema.Struct({ deploys: Schema.Record(Schema.String, ProjectDeploySnapshot) })
1447
+ });
1292
1448
  /** Replaces socket.io `agents:changed` (event: 'started') */
1293
1449
  const AgentStartedEvent = Schema.Struct({
1294
1450
  type: Schema.Literal("agent.started"),
@@ -1378,6 +1534,9 @@ const AgentStatusChangedEvent = Schema.Struct({
1378
1534
  workspaceId: Schema.optional(Schema.String),
1379
1535
  status: AgentStatus,
1380
1536
  previousStatus: Schema.optional(AgentStatus),
1537
+ /** The agent has a live pane on its terminal backend (Herdr or tmux). */
1538
+ hasLivePane: Schema.optional(Schema.Boolean),
1539
+ /** @deprecated Alias of `hasLivePane`, kept for events written before it existed (#4105). */
1381
1540
  hasLiveTmuxSession: Schema.optional(Schema.Boolean),
1382
1541
  stoppedByUser: Schema.optional(Schema.Boolean),
1383
1542
  stoppedByPause: Schema.optional(Schema.Boolean),
@@ -2444,6 +2603,17 @@ const ConversationTitleChangedEvent = Schema.Struct({
2444
2603
  titleSource: Schema.String
2445
2604
  })
2446
2605
  });
2606
+ /** Emitted (in-memory only) when a conversation's pull-request links or their
2607
+ * snapshots change (PAN-3822), so the list and open panel refresh the badge. */
2608
+ const ConversationPullRequestsChangedEvent = Schema.Struct({
2609
+ type: Schema.Literal("conversation.pull_requests_changed"),
2610
+ sequence: SequenceNumber,
2611
+ timestamp: Schema.String,
2612
+ payload: Schema.Struct({
2613
+ conversationName: Schema.String,
2614
+ effective: Schema.NullOr(PullRequestLink)
2615
+ })
2616
+ });
2447
2617
  /** Emitted (in-memory only) when a PermissionRequest hook fires or resolves for a conversation. */
2448
2618
  const ConversationPermissionChangedEvent = Schema.Struct({
2449
2619
  type: Schema.Literal("conversation.permission_changed"),
@@ -2578,6 +2748,7 @@ const DomainEvent = Schema.Union([
2578
2748
  ProjectCiSuiteObservedEvent,
2579
2749
  ProjectCiHeadObservedEvent,
2580
2750
  RestartGateChangedEvent,
2751
+ ProjectDeployChangedEvent,
2581
2752
  AgentCreatedEvent,
2582
2753
  AgentEnrichmentChangedEvent,
2583
2754
  AgentStartedEvent,
@@ -2668,6 +2839,7 @@ const DomainEvent = Schema.Union([
2668
2839
  ConversationCreatedEvent,
2669
2840
  ConversationMovedEvent,
2670
2841
  ConversationTitleChangedEvent,
2842
+ ConversationPullRequestsChangedEvent,
2671
2843
  ConversationPermissionChangedEvent,
2672
2844
  ScanStartedEvent,
2673
2845
  ScanProgressEvent,
@@ -3481,6 +3653,7 @@ const INITIAL_READ_MODEL_STATE = {
3481
3653
  embedProgressBySessionId: {},
3482
3654
  ciByProjectKey: {},
3483
3655
  restartGate: null,
3656
+ deployByProjectKey: {},
3484
3657
  agentIdBySessionId: {},
3485
3658
  dashboardLifecycle: {
3486
3659
  active: false,
@@ -3611,14 +3784,29 @@ function syncSnapshot(state, snapshot) {
3611
3784
  embedProgressBySessionId: snapshot.embedProgressBySessionId ?? {},
3612
3785
  ciByProjectKey: snapshot.ciByProjectKey ?? state.ciByProjectKey,
3613
3786
  restartGate: snapshot.restartGate ?? state.restartGate,
3787
+ deployByProjectKey: snapshot.deployByProjectKey ?? state.deployByProjectKey,
3614
3788
  agentIdBySessionId
3615
3789
  };
3616
3790
  }
3791
+ /**
3792
+ * #4105 — `hasLivePane` and its deprecated alias `hasLiveTmuxSession` carry one
3793
+ * fact. An agent snapshot from a stored event may carry only the old name; fill
3794
+ * whichever one is missing so readers of either name agree.
3795
+ */
3796
+ function withPaneLivenessAlias(agent) {
3797
+ const pane = agent.hasLivePane ?? agent.hasLiveTmuxSession;
3798
+ if (pane === void 0 || agent.hasLivePane === pane && agent.hasLiveTmuxSession === pane) return agent;
3799
+ return {
3800
+ ...agent,
3801
+ hasLivePane: pane,
3802
+ hasLiveTmuxSession: pane
3803
+ };
3804
+ }
3617
3805
  function applyEvent(state, event) {
3618
3806
  switch (event.type) {
3619
3807
  case "agent.created": {
3620
3808
  const existing = state.agentsById[event.payload.agentId];
3621
- const agent = event.payload.agent;
3809
+ const agent = withPaneLivenessAlias(event.payload.agent);
3622
3810
  const nextAgentIdBySessionId = agent.sessionId ? {
3623
3811
  ...state.agentIdBySessionId,
3624
3812
  [agent.sessionId]: agent.id
@@ -3637,7 +3825,7 @@ function applyEvent(state, event) {
3637
3825
  };
3638
3826
  }
3639
3827
  case "agent.started": {
3640
- const agent = event.payload.agent;
3828
+ const agent = withPaneLivenessAlias(event.payload.agent);
3641
3829
  const nextAgentIdBySessionId = agent.sessionId ? {
3642
3830
  ...state.agentIdBySessionId,
3643
3831
  [agent.sessionId]: agent.id
@@ -3687,6 +3875,7 @@ function applyEvent(state, event) {
3687
3875
  [event.payload.agentId]: {
3688
3876
  ...stoppedAgent,
3689
3877
  status: "stopped",
3878
+ hasLivePane: false,
3690
3879
  hasLiveTmuxSession: false,
3691
3880
  lastActivity: event.timestamp
3692
3881
  }
@@ -3748,6 +3937,7 @@ function applyEvent(state, event) {
3748
3937
  status: event.payload.status
3749
3938
  };
3750
3939
  for (const field of [
3940
+ "hasLivePane",
3751
3941
  "hasLiveTmuxSession",
3752
3942
  "stoppedByUser",
3753
3943
  "stoppedByPause",
@@ -3792,7 +3982,15 @@ function applyEvent(state, event) {
3792
3982
  if (value === null || value === void 0) delete base[field];
3793
3983
  else base[field] = value;
3794
3984
  }
3795
- const sessionAlive = event.payload.hasLiveTmuxSession === true;
3985
+ const payloadPane = event.payload.hasLivePane ?? event.payload.hasLiveTmuxSession;
3986
+ if ("hasLivePane" in event.payload || "hasLiveTmuxSession" in event.payload) if (payloadPane === null || payloadPane === void 0) {
3987
+ delete base["hasLivePane"];
3988
+ delete base["hasLiveTmuxSession"];
3989
+ } else {
3990
+ base["hasLivePane"] = payloadPane;
3991
+ base["hasLiveTmuxSession"] = payloadPane;
3992
+ }
3993
+ const sessionAlive = payloadPane === true;
3796
3994
  if (event.payload.status !== "running" && event.payload.status !== "starting" && !sessionAlive) {
3797
3995
  delete base["hasPendingQuestion"];
3798
3996
  delete base["pendingQuestionCount"];
@@ -4001,6 +4199,11 @@ function applyEvent(state, event) {
4001
4199
  ...event.payload.lastOutcome === void 0 ? {} : { lastOutcome: event.payload.lastOutcome }
4002
4200
  }
4003
4201
  };
4202
+ case "project.deploy_changed": return {
4203
+ ...state,
4204
+ sequence: Math.max(state.sequence, event.sequence),
4205
+ deployByProjectKey: event.payload.deploys
4206
+ };
4004
4207
  case "resources.updated": return {
4005
4208
  ...state,
4006
4209
  sequence: Math.max(state.sequence, event.sequence),
@@ -4713,6 +4916,10 @@ function applyEvent(state, event) {
4713
4916
  ...state,
4714
4917
  conversationsListRevision: state.conversationsListRevision + 1
4715
4918
  };
4919
+ case "conversation.pull_requests_changed": return {
4920
+ ...state,
4921
+ conversationsListRevision: state.conversationsListRevision + 1
4922
+ };
4716
4923
  case "conversation.permission_changed": {
4717
4924
  const { conversationName, waiting } = event.payload;
4718
4925
  if (!waiting) {
@@ -6762,6 +6969,20 @@ const COMPOSER_COMMAND_MANIFEST = [
6762
6969
  "aliases": [],
6763
6970
  "category": "Lifecycle"
6764
6971
  },
6972
+ {
6973
+ "id": "pan-untroubled",
6974
+ "path": ["untroubled"],
6975
+ "display": "/pan untroubled",
6976
+ "description": "Clear an agent troubled gate without spawning it",
6977
+ "args": [{
6978
+ "name": "id",
6979
+ "required": true,
6980
+ "variadic": false
6981
+ }],
6982
+ "options": [],
6983
+ "aliases": [],
6984
+ "category": "Lifecycle"
6985
+ },
6765
6986
  {
6766
6987
  "id": "pan-fork",
6767
6988
  "path": ["fork"],
@@ -6842,10 +7063,16 @@ const COMPOSER_COMMAND_MANIFEST = [
6842
7063
  },
6843
7064
  {
6844
7065
  "flags": "--issue <id>",
6845
- "description": "Issue ID to associate with the new conversation",
7066
+ "description": "Issue ID to associate with the new conversation; without --cwd the new conversation starts in the issue workspace when it exists",
6846
7067
  "required": true,
6847
7068
  "valueHint": "id"
6848
7069
  },
7070
+ {
7071
+ "flags": "--role <role>",
7072
+ "description": "Pane role for the new conversation: conversation (default), work, review, test, plan. With --issue, review makes the handoff the issue's Review row",
7073
+ "required": true,
7074
+ "valueHint": "role"
7075
+ },
6849
7076
  {
6850
7077
  "flags": "--title <title>",
6851
7078
  "description": "Title for the new conversation; defaults to \"Handoff: <focus>\" (first ~70 chars) or \"Handoff: <source title>\" without focus",
@@ -7254,7 +7481,7 @@ const COMPOSER_COMMAND_MANIFEST = [
7254
7481
  },
7255
7482
  {
7256
7483
  "flags": "--force",
7257
- "description": "Clear paused and pending-operator-decision gates and start anyway",
7484
+ "description": "Clear paused, troubled, and pending-operator-decision gates and start anyway",
7258
7485
  "required": false,
7259
7486
  "valueHint": null
7260
7487
  },
@@ -8209,7 +8436,7 @@ const COMPOSER_COMMAND_MANIFEST = [
8209
8436
  "id": "pan-workspace-reap",
8210
8437
  "path": ["workspace", "reap"],
8211
8438
  "display": "/pan workspace reap",
8212
- "description": "List or remove orphaned unhealthy workspace Docker stacks",
8439
+ "description": "List or remove orphaned unhealthy workspace Docker stacks and orphaned workspace networks",
8213
8440
  "args": [],
8214
8441
  "options": [
8215
8442
  {
@@ -8220,7 +8447,7 @@ const COMPOSER_COMMAND_MANIFEST = [
8220
8447
  },
8221
8448
  {
8222
8449
  "flags": "--apply",
8223
- "description": "Run docker compose down -v --remove-orphans for candidates",
8450
+ "description": "Run docker compose down -v --remove-orphans for stack candidates and remove orphaned workspace networks",
8224
8451
  "required": false,
8225
8452
  "valueHint": null
8226
8453
  },
@@ -10037,87 +10264,6 @@ const COMPOSER_COMMAND_MANIFEST = [
10037
10264
  "aliases": [],
10038
10265
  "category": "Admin"
10039
10266
  },
10040
- {
10041
- "id": "pan-admin-specialists-logs",
10042
- "path": [
10043
- "admin",
10044
- "specialists",
10045
- "logs"
10046
- ],
10047
- "display": "/pan admin specialists logs",
10048
- "description": "View specialist run logs",
10049
- "args": [
10050
- {
10051
- "name": "project",
10052
- "required": false,
10053
- "variadic": false
10054
- },
10055
- {
10056
- "name": "type",
10057
- "required": false,
10058
- "variadic": false
10059
- },
10060
- {
10061
- "name": "runId",
10062
- "required": false,
10063
- "variadic": false
10064
- }
10065
- ],
10066
- "options": [
10067
- {
10068
- "flags": "--json",
10069
- "description": "Output in JSON format",
10070
- "required": false,
10071
- "valueHint": null
10072
- },
10073
- {
10074
- "flags": "--limit <count>",
10075
- "description": "Number of runs to show (default: 10)",
10076
- "required": true,
10077
- "valueHint": "count"
10078
- },
10079
- {
10080
- "flags": "--tail",
10081
- "description": "Follow active run log in real-time",
10082
- "required": false,
10083
- "valueHint": null
10084
- }
10085
- ],
10086
- "aliases": [],
10087
- "category": "Admin"
10088
- },
10089
- {
10090
- "id": "pan-admin-specialists-cleanup-logs",
10091
- "path": [
10092
- "admin",
10093
- "specialists",
10094
- "cleanup-logs"
10095
- ],
10096
- "display": "/pan admin specialists cleanup-logs",
10097
- "description": "Clean up old specialist logs",
10098
- "args": [{
10099
- "name": "project",
10100
- "required": false,
10101
- "variadic": false
10102
- }, {
10103
- "name": "type",
10104
- "required": false,
10105
- "variadic": false
10106
- }],
10107
- "options": [{
10108
- "flags": "--force",
10109
- "description": "Skip confirmation prompt",
10110
- "required": false,
10111
- "valueHint": null
10112
- }, {
10113
- "flags": "--all",
10114
- "description": "Clean up logs for all projects",
10115
- "required": false,
10116
- "valueHint": null
10117
- }],
10118
- "aliases": [],
10119
- "category": "Admin"
10120
- },
10121
10267
  {
10122
10268
  "id": "pan-admin-remote",
10123
10269
  "path": ["admin", "remote"],
@@ -11008,6 +11154,80 @@ const COMPOSER_COMMAND_MANIFEST = [
11008
11154
  "aliases": [],
11009
11155
  "category": "Conversation"
11010
11156
  },
11157
+ {
11158
+ "id": "pan-conversations-link-pr",
11159
+ "path": ["conversations", "link-pr"],
11160
+ "display": "/pan conversations link-pr",
11161
+ "description": "Link a pull request (URL, #42, or owner/repo#42) to a conversation",
11162
+ "args": [{
11163
+ "name": "query",
11164
+ "required": true,
11165
+ "variadic": false
11166
+ }, {
11167
+ "name": "ref",
11168
+ "required": true,
11169
+ "variadic": false
11170
+ }],
11171
+ "options": [{
11172
+ "flags": "--source <source>",
11173
+ "description": "agent or manual (default: agent inside an agent, else manual)",
11174
+ "required": true,
11175
+ "valueHint": "source"
11176
+ }],
11177
+ "aliases": [],
11178
+ "category": "Conversation"
11179
+ },
11180
+ {
11181
+ "id": "pan-conversations-unlink-pr",
11182
+ "path": ["conversations", "unlink-pr"],
11183
+ "display": "/pan conversations unlink-pr",
11184
+ "description": "Unlink a pull request from a conversation (the sweep will not re-add it)",
11185
+ "args": [{
11186
+ "name": "query",
11187
+ "required": true,
11188
+ "variadic": false
11189
+ }, {
11190
+ "name": "ref",
11191
+ "required": true,
11192
+ "variadic": false
11193
+ }],
11194
+ "options": [],
11195
+ "aliases": [],
11196
+ "category": "Conversation"
11197
+ },
11198
+ {
11199
+ "id": "pan-conversations-prs",
11200
+ "path": ["conversations", "prs"],
11201
+ "display": "/pan conversations prs",
11202
+ "description": "List the pull requests linked to a conversation (* = the one shown)",
11203
+ "args": [{
11204
+ "name": "query",
11205
+ "required": true,
11206
+ "variadic": false
11207
+ }],
11208
+ "options": [{
11209
+ "flags": "--json",
11210
+ "description": "Output { links, effective } as JSON",
11211
+ "required": false,
11212
+ "valueHint": null
11213
+ }],
11214
+ "aliases": [],
11215
+ "category": "Conversation"
11216
+ },
11217
+ {
11218
+ "id": "pan-conversations-auto-archive-on-merge",
11219
+ "path": ["conversations", "auto-archive-on-merge"],
11220
+ "display": "/pan conversations auto-archive-on-merge",
11221
+ "description": "Show or set (on|off) archiving operator conversations once all their linked PRs are merged or closed (default off)",
11222
+ "args": [{
11223
+ "name": "value",
11224
+ "required": false,
11225
+ "variadic": false
11226
+ }],
11227
+ "options": [],
11228
+ "aliases": [],
11229
+ "category": "Conversation"
11230
+ },
11011
11231
  {
11012
11232
  "id": "pan-conversations-heal",
11013
11233
  "path": ["conversations", "heal"],
@@ -12317,9 +12537,27 @@ const COMPOSER_COMMAND_MANIFEST = [
12317
12537
  "required": true,
12318
12538
  "valueHint": "duration"
12319
12539
  },
12540
+ {
12541
+ "flags": "--deacon",
12542
+ "description": "Start Cloister/Deacon on the reloaded dashboard (always on after a reload)",
12543
+ "required": false,
12544
+ "valueHint": null
12545
+ },
12320
12546
  {
12321
12547
  "flags": "--no-deacon",
12322
- "description": "Skip Cloister/Deacon auto-start after reload",
12548
+ "description": "Refused: a Deacon-off dashboard is a peer and cannot hold the host dashboard port",
12549
+ "required": false,
12550
+ "valueHint": null
12551
+ },
12552
+ {
12553
+ "flags": "--resume",
12554
+ "description": "Enable agent auto-resume on the reloaded dashboard (default: keep the running dashboard's resume gate)",
12555
+ "required": false,
12556
+ "valueHint": null
12557
+ },
12558
+ {
12559
+ "flags": "--no-resume",
12560
+ "description": "Disable agent auto-resume on the reloaded dashboard (default: keep the running dashboard's resume gate)",
12323
12561
  "required": false,
12324
12562
  "valueHint": null
12325
12563
  }
@@ -13161,9 +13399,7 @@ const COMPOSER_COMMAND_MANIFEST = [
13161
13399
  ];
13162
13400
  const COMPOSER_COMMAND_INSERT_OVERRIDES = {
13163
13401
  "plan finalize": "/pan plan finalize ",
13164
- "admin specialists done": "/pan admin specialists done",
13165
- "admin specialists logs": "/pan admin specialists logs",
13166
- "admin specialists cleanup-logs": "/pan admin specialists cleanup-logs"
13402
+ "admin specialists done": "/pan admin specialists done"
13167
13403
  };
13168
13404
  const COMPOSER_COMMAND_VARIANTS = [
13169
13405
  {
@@ -13341,7 +13577,8 @@ const AGENT_ROLES = [
13341
13577
  "test",
13342
13578
  "uat",
13343
13579
  "strike",
13344
- "plan"
13580
+ "plan",
13581
+ "conversation"
13345
13582
  ];
13346
13583
  function isTerminalBackendName(value) {
13347
13584
  return typeof value === "string" && TERMINAL_BACKEND_NAMES.includes(value);
@@ -13395,6 +13632,16 @@ const DirectoryTranscriptRef = Schema.Union([
13395
13632
  })
13396
13633
  ]);
13397
13634
  const DirectoryEntryLocation = Schema.Literals(["local", "remote"]);
13635
+ const DirectoryPauseBy = Schema.Literals([
13636
+ "operator",
13637
+ "scheduler",
13638
+ "machine"
13639
+ ]);
13640
+ const DirectoryPause = Schema.Struct({
13641
+ by: DirectoryPauseBy,
13642
+ reason: Schema.NullOr(Schema.String),
13643
+ since: Schema.NullOr(Schema.String)
13644
+ });
13398
13645
  const DirectoryEntry = Schema.Struct({
13399
13646
  id: Schema.String,
13400
13647
  kind: DirectoryEntryKind,
@@ -13417,11 +13664,19 @@ const DirectoryEntry = Schema.Struct({
13417
13664
  lastActivityAt: Schema.NullOr(Schema.String),
13418
13665
  costUsd: Schema.NullOr(Schema.Number),
13419
13666
  source: DirectoryEntrySource,
13420
- transcript: Schema.NullOr(DirectoryTranscriptRef)
13667
+ transcript: Schema.NullOr(DirectoryTranscriptRef),
13668
+ /** The pause gate from state.json, native agents only (PAN-4197). */
13669
+ pause: Schema.optional(DirectoryPause)
13421
13670
  });
13671
+ /**
13672
+ * `window`: live entries plus finished ones active inside `windowHours`.
13673
+ * `live` (PAN-4197): what is running or waiting now; `windowHours` is 0.
13674
+ */
13675
+ const DirectoryScope = Schema.Literals(["window", "live"]);
13422
13676
  const AgentDirectoryResponse = Schema.Struct({
13423
13677
  generatedAt: Schema.String,
13424
13678
  windowHours: Schema.Number,
13679
+ scope: Schema.optional(DirectoryScope),
13425
13680
  entries: Schema.Array(DirectoryEntry)
13426
13681
  });
13427
13682
  //#endregion
@@ -13441,6 +13696,73 @@ function companionTerminalKindFor(conversation) {
13441
13696
  const COMPANION_TERMINAL_OPEN_BODY_KEYS = [];
13442
13697
  const COMPANION_TERMINAL_CLOSE_BODY_KEYS = ["generation"];
13443
13698
  //#endregion
13444
- export { ACP_BEHAVIOR, AGENT_ROLES, Activity, ActivityDetailedEvent, ActivityEntryEvent, ActivityTtsEvent, ActivityUpdatedEvent, AdmissionState, AgentActivityChangedEvent, AgentChannelReply, AgentChannelReplyEvent, AgentCompletedEvent, AgentContextSaturationChangedEvent, AgentCreatedEvent, AgentCurrentIssueSetEvent, AgentDirectoryResponse, AgentEnrichmentChangedEvent, AgentHealthKind, AgentHealthSnapshot, AgentHealthStatus, AgentHeartbeatDeadEvent, AgentHookFiredEvent, AgentId, AgentMessageReceivedEvent, AgentModelSetEvent, AgentOutput, AgentOutputReceivedEvent, AgentPermissionRequestedEvent, AgentPermissionResolvedEvent, AgentResolution, AgentResolutionChangedEvent, AgentRuntimeSnapshot, AgentSnapshot, AgentStartedEvent, AgentStateRestoredEvent, AgentStatus, AgentStatusChangedEvent, AgentStoppedEvent, AgentThinkingStartedEvent, AgentThinkingStoppedEvent, AgentTurnDiffCompletedEvent, AgentWaitingClearedEvent, AgentWaitingStartedEvent, ArtifactAgentHarness, ArtifactAgentRole, ArtifactCreateResponse, ArtifactDetailResponse, ArtifactHash, ArtifactId, ArtifactLifecycleState, ArtifactListEntry, ArtifactListResponse, ArtifactMetadata, ArtifactPublishResponse, ArtifactSlug, ArtifactStatusResponse, ArtifactUnshareResponse, ArtifactUrls, ArtifactValidationCode, ArtifactValidationFinding, ArtifactValidationResult, BackendPane, BackendPaneChangedEvent, BackendPaneRemovedEvent, BeadsFreshnessChangedEvent, CHANNEL_REPLY_KIND_VALUES, CLAUDE_CODE_BEHAVIOR, CODEX_BEHAVIOR, COMPANION_TERMINAL_CLOSE_BODY_KEYS, COMPANION_TERMINAL_OPEN_BODY_KEYS, COMPOSER_COMMAND_INSERT_OVERRIDES, COMPOSER_COMMAND_MANIFEST, COMPOSER_COMMAND_VARIANTS, CONTEXT_LAYER_KINDS, CONTEXT_PREVIEW_HARNESSES, ChannelPermissionRequestSnapshot, ChannelReplyArtifactRef, ChannelReplyKind, ChatMessage, ClaudeChannelPermissionBehavior, CompactBoundary, ContextEditableLayerRecord, ContextHarnessPreviews, ContextLayerDraft, ContextLayerKind, ContextLayerSaveRequest, ContextLayerSaveResponse, ContextLayerTarget, ContextLayersResponse, ContextPreviewDiagnostic, ContextPreviewHarness, ContextPreviewRequest, ContextPreviewResponse, ContextProjectSummary, ContextSyncRequest, ContextSyncResponse, ContextSyncTarget, ContextUsage, ContextWorkspaceSummary, ConversationCompactingChangedEvent, ConversationCostSummary, ConversationCreatedEvent, ConversationEvent, ConversationFilter, ConversationMovedEvent, ConversationPermissionChangedEvent, ConversationResponse, ConversationTitleChangedEvent, CostEventRecordedEvent, DEFAULT_MAX_MEMORY_OBSERVATIONS_PER_ISSUE, DEFAULT_MAX_TURN_DIFF_SUMMARIES_PER_AGENT, DashboardLifecycleCompletedEvent, DashboardLifecycleFailedEvent, DashboardLifecycleStartedEvent, DashboardSnapshot, DeepWipeRpc, DeployStalenessSnapshot, DerivedBranchState, DerivedIssueState, DerivedPrState, DirectoryEntry, DirectoryEntryKind, DirectoryEntryLocation, DirectoryEntrySource, DirectoryEntryState, DirectoryTranscriptRef, DiscoveredSessionSnapshot, DomainEvent, EDITORS, EditorIdSchema, EmbedProgressEvent, EmbedProgressSnapshot, EmbedSessionsRpc, EnrichCompleteEvent, EnrichProgressEvent, EnrichProgressSnapshot, EnrichSessionsRpc, EnrichStatsSnapshot, ExtractionProviderConfig, ExtractionProviderTarget, FeatureNode, FeatureRegistryEntry, FeatureRegistryStatus, FlywheelAgent, FlywheelAgentStatus, FlywheelBugRateCriterion, FlywheelConversationSummary, FlywheelDerivedStatus, FlywheelEffort, FlywheelFreshness, FlywheelHarness, FlywheelHeadline, FlywheelHttpUrl, FlywheelInFlightRow, FlywheelJournalSummary, FlywheelLastTick, FlywheelOrchestrator, FlywheelOrderBookSummary, FlywheelOrders, FlywheelP0Criterion, FlywheelParkedItem, FlywheelPipelineItem, FlywheelPipelineStatus, FlywheelPipelineVerb, FlywheelPolicies, FlywheelRunId, FlywheelRunState, FlywheelScope, FlywheelStats, FlywheelStatsCriterionStatus, FlywheelStatsTrend, FlywheelStatsWindow, FlywheelStatus, FlywheelSubstrateBug, FlywheelSubstrateBugRow, FlywheelSubstrateBugStatus, FlywheelSubstrateSeverity, FlywheelSuggestion, FlywheelSuggestionAction, FlywheelSuggestionPriority, FlywheelSystemStatus, GetAvailableEditorsRpc, GetConversationCostByWorkspaceRpc, GetConversationCostRpc, GetConversationStatsRpc, GetDiscoveredSessionRpc, GetSessionsFeedFacetsRpc, GetSnapshotRpc, GlobalContextLayerRecord, GlobalContextLayerTarget, HOOK_INVENTORY, HealthReason, HealthState, HostHealthMetrics, HostPlatform, HygieneFinding, HygienePullRequest, HygieneReport, INITIAL_READ_MODEL_STATE, ISSUE_ATTENTIONS, ISSUE_STATES, ISSUE_STATE_PRECEDENCE, IssueAttention, IssueId, IssueState, IssueStateChangedEvent, IssueStatusChangedEvent, IssueTransitionedEvent, IssuesDeltaEvent, IssuesSnapshotEvent, IssuesUpdatedEvent, KIMI_CODE_BEHAVIOR, KNOWN_HARNESSES, LegacySystemHealthSummary, LegacyWebhookRelaySummary, LinearMcpAuthCallbackRelayedEvent, LinearMcpAuthHealthyEvent, LinearMcpAuthNotifiedEvent, LinearMcpAuthRequiredEvent, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, MAX_CHANNEL_REPLY_ARTIFACT_LABEL_LENGTH, MAX_CHANNEL_REPLY_ARTIFACT_REFS, MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH, MAX_CHANNEL_REPLY_SUMMARY_LENGTH, MEMBERSHIP_UNAVAILABLE_REASONS, MUSE_BEHAVIOR, MemoryAgentRole, MemoryHealthChangedEvent, MemoryIdentity, MemoryObservation, MemoryObservationCreatedEvent, MemoryResetMarkerCreatedEvent, MemoryRollupTriggeredEvent, MemoryStatus, MemoryStatusPhase, MemoryStatusUpdatedEvent, MemoryTokenUsage, MergeReadyEvent, ModelOrigin, ModelOriginEntry, OHMYPI_BEHAVIOR, OPENCODE_BEHAVIOR, OVERDECK_AGENT_PROTOCOL_VERSION, OVERDECK_DASHBOARD_PROTOCOL_VERSION, OpenInEditorInput, OperatorInterventionEvent, OrderBook, OrderBookIndexEntry, OrderBookItem, OrderBookLane, OrderBookPosture, OrderBookSettings, OrderBookStatus, PanRpcError, PanRpcGroup, PendingTurn, PipelineReviewCompletedEvent, PipelineReviewStartedEvent, PipelineTestCompletedEvent, PipelineTestStartedEvent, PipelineVerificationFailedEvent, PipelineVerificationStartedEvent, PlanItemStatusChangedEvent, PlanItemsUnblockedEvent, PlanSubitemStatusChangedEvent, PlanningFailedEvent, PlanningStartedEvent, PlanningSyncEvent, PrChecksState, PrReviewState, ProjectCiHeadObservedEvent, ProjectCiSnapshot, ProjectCiSuite, ProjectCiSuiteObservedEvent, ProjectContextLayerRecord, ProjectContextLayerTarget, ProjectSessionTree, ProposedPlan, RagDecision, RagDecisionSource, ReadFileAtPathInput, ReadFileAtPathResult, ReadFileAtPathRpc, ReadWorkspaceFileInput, ReadWorkspaceFileResult, ReadWorkspaceFileRpc, ReplayEventsRpc, ResetMarker, ResetMarkerScope, ResizeTerminalRpc, ResolveFilePathExistsInput, ResolveFilePathExistsResult, ResolveFilePathExistsRpc, ResourceStats, ResourcesUpdatedEvent, RestartGateChangedEvent, RestartGateKind, RestartGateOutcome, RestartGateRequest, RestartGateSnapshot, ReviewApprovedEvent, ReviewCoordinatorDiedEvent, ReviewCoordinatorStartedEvent, ReviewReviewerCompletedEvent, ReviewReviewerStartedEvent, ReviewSpecialistTimedOutEvent, ReviewVerdictDispatchedEvent, ReviewVerdictRejectedEvent, ReviewVerdictRestoreBlockedEvent, ReviewerRoundMetadata, ReviewerRoundSummary, Role, ScanCompleteEvent, ScanConversationsRpc, ScanProgressEvent, ScanProgressSnapshot, ScanResult, ScanStartedEvent, SearchConversationsRpc, SendTerminalInputRpc, SequenceNumber, ServiceHealthSnapshot, ServiceHealthStatus, SessionNode, SessionNodePresence, SessionNodeType, SessionTreeDelta, SessionsFeedFacetsSnapshot, SessionsFeedRowSnapshot, SessionsFeedSource, ShadowInferenceUpdateEvent, ShellOpenInEditorRpc, SpecialistCompletedEvent, SpecialistFailedEvent, SpecialistLifecycle, SpecialistStartedEvent, StartAgentRpc, StartPlanningRpc, SubagentSummary, SubscribeAgentOutputRpc, SubscribeConversationMessagesRpc, SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeProjectSessionTreeRpc, SubscribeTerminalRpc, SubstrateBugFiledEvent, SweepEscalatedEvent, SweepRecommendationEvent, SweepScanEvent, SystemHealthConsumer, SystemHealthSeverityChangedEvent, SystemHealthSnapshot, SystemHeartbeatEvent, TELEMETRY_CLI_VERBS, TELEMETRY_EVENT_CATALOG, TELEMETRY_EVENT_NAMES, TELEMETRY_PROPERTY_DOMAINS, TERMINAL_BACKEND_NAMES, TerminalCloseRpc, TerminalOpenRpc, TerminalOutput, TerminalResizeRpc, TerminalWriteRpc, TestPassedEvent, ThinkingState, TickMarker, TickMarkerPhase, TurnDiffFileChange, TurnDiffSummary, WIRED_HOOK_INVENTORY, WIRED_HOOK_NAMES, WS_METHODS, WaitingReason, WaitingState, WorkCompletedEvent, WorkLogEntry, WorkspaceAbortedEvent, WorkspaceArtifactsResponse, WorkspaceContextLayerRecord, WorkspaceContextLayerTarget, WorkspaceCreatedEvent, WorkspaceDeletedEvent, WorkspaceDestroyedEvent, WorkspaceWipeStartedEvent, WriteFileAtPathInput, WriteFileAtPathResult, WriteFileAtPathRpc, applyEvent, applyEvents, applyIssueDelta, companionTerminalKindFor, compareIssueIds, createIssueDelta, decodeFlywheelDerivedStatus, decodeFlywheelStats, deriveProjectCi, encodeFlywheelStats, getHarness, getHarnessBehavior, getMaxMemoryObservationsPerIssue, getMaxTurnDiffSummariesPerAgent, getRuntimeBehavior, isAgentRole, isAgentSessionName, isChannelReplyKind, isIssueAttention, isIssueState, isTerminalBackendName, isTerminalTurnDiffSummaryStatus, normalizeChannelReplyPayload, omitTurnDiffSummariesForAgent, projectLegacySystemHealthSummary, syncSnapshot, trimMemoryObservations, trimTurnDiffSummaries };
13699
+ //#region src/pull-request-ref.ts
13700
+ const SCHEME = String.raw`(?:https?:\/\/)?`;
13701
+ const HOST = String.raw`([a-z0-9.-]+(?::\d+)?)`;
13702
+ const TAIL = String.raw`(?:\/[^?#]*)?(?:[?#].*)?$`;
13703
+ const GITLAB_MR = new RegExp(String.raw`^${SCHEME}${HOST}\/((?:[\w.-]+\/)+[\w.-]+)\/-\/merge_requests\/(\d+)${TAIL}`, "i");
13704
+ const GITHUB_PR = new RegExp(String.raw`^${SCHEME}${HOST}\/([\w.-]+\/[\w.-]+)\/pull\/(\d+)${TAIL}`, "i");
13705
+ const GITLAB_MR_LEGACY = new RegExp(String.raw`^${SCHEME}${HOST}\/((?:[\w.-]+\/)+[\w.-]+)\/merge_requests\/(\d+)${TAIL}`, "i");
13706
+ const SHORT_REF = /^(?:((?:[\w.-]+\/)+[\w.-]+))?[#!](\d+)$/;
13707
+ function canonicalPullRequestUrl(key, forge) {
13708
+ return forge === "gitlab" ? `https://${key.host}/${key.repository}/-/merge_requests/${key.number}` : `https://${key.host}/${key.repository}/pull/${key.number}`;
13709
+ }
13710
+ function build(host, repository, number, forge) {
13711
+ if (!Number.isSafeInteger(number) || number <= 0) return null;
13712
+ const key = {
13713
+ host: host.toLowerCase(),
13714
+ repository: repository.toLowerCase().replace(/\.git$/, ""),
13715
+ number
13716
+ };
13717
+ return {
13718
+ ...key,
13719
+ forge,
13720
+ url: canonicalPullRequestUrl(key, forge)
13721
+ };
13722
+ }
13723
+ /**
13724
+ * Accepts a full PR/MR URL, `#42`, or `owner/repo#42` (`!42` for GitLab MRs).
13725
+ * The short forms need `defaultRepo` for host and forge (`#42` for the
13726
+ * repository too) and return null without it. Anything else returns null.
13727
+ */
13728
+ function parsePullRequestRef(input, defaultRepo) {
13729
+ const text = input.trim();
13730
+ if (!text) return null;
13731
+ for (const [pattern, forge] of [
13732
+ [GITLAB_MR, "gitlab"],
13733
+ [GITHUB_PR, "github"],
13734
+ [GITLAB_MR_LEGACY, "gitlab"]
13735
+ ]) {
13736
+ const match = pattern.exec(text);
13737
+ if (match) return build(match[1], match[2], Number(match[3]), forge);
13738
+ }
13739
+ const short = SHORT_REF.exec(text);
13740
+ if (!short || !defaultRepo) return null;
13741
+ return build(defaultRepo.host, short[1] ?? defaultRepo.repository, Number(short[2]), defaultRepo.forge);
13742
+ }
13743
+ /**
13744
+ * The repository behind a git remote URL (https, ssh://, or scp-style), or null
13745
+ * when the host names neither GitHub nor GitLab.
13746
+ */
13747
+ function repoFromRemoteUrl(remote) {
13748
+ if (!remote) return null;
13749
+ const text = remote.trim();
13750
+ const match = /^[a-z][a-z0-9+.-]*:\/\/(?:[^@/]*@)?([^/:]+)(?::\d+)?\/(.+?)(?:\.git)?\/?$/i.exec(text) ?? /^(?:[^@/]+@)?([^/:]+):(.+?)(?:\.git)?\/?$/i.exec(text);
13751
+ if (!match) return null;
13752
+ const host = match[1].toLowerCase();
13753
+ const forge = host.includes("gitlab") ? "gitlab" : host.includes("github") ? "github" : null;
13754
+ if (!forge) return null;
13755
+ return {
13756
+ host,
13757
+ repository: match[2].toLowerCase(),
13758
+ forge
13759
+ };
13760
+ }
13761
+ /** True when the ref's host and repository match one of the configured repos. */
13762
+ function isConfiguredPullRequestRepo(ref, repos) {
13763
+ return repos.some((repo) => repo.host === ref.host && repo.repository === ref.repository);
13764
+ }
13765
+ //#endregion
13766
+ export { ACP_BEHAVIOR, AGENT_ROLES, Activity, ActivityDetailedEvent, ActivityEntryEvent, ActivityTtsEvent, ActivityUpdatedEvent, AdmissionState, AgentActivityChangedEvent, AgentChannelReply, AgentChannelReplyEvent, AgentCompletedEvent, AgentContextSaturationChangedEvent, AgentCreatedEvent, AgentCurrentIssueSetEvent, AgentDirectoryResponse, AgentEnrichmentChangedEvent, AgentHealthKind, AgentHealthSnapshot, AgentHealthStatus, AgentHeartbeatDeadEvent, AgentHookFiredEvent, AgentId, AgentMessageReceivedEvent, AgentModelSetEvent, AgentOutput, AgentOutputReceivedEvent, AgentPermissionRequestedEvent, AgentPermissionResolvedEvent, AgentResolution, AgentResolutionChangedEvent, AgentRuntimeSnapshot, AgentSnapshot, AgentStartedEvent, AgentStateRestoredEvent, AgentStatus, AgentStatusChangedEvent, AgentStoppedEvent, AgentThinkingStartedEvent, AgentThinkingStoppedEvent, AgentTurnDiffCompletedEvent, AgentWaitingClearedEvent, AgentWaitingStartedEvent, ArtifactAgentHarness, ArtifactAgentRole, ArtifactCreateResponse, ArtifactDetailResponse, ArtifactHash, ArtifactId, ArtifactLifecycleState, ArtifactListEntry, ArtifactListResponse, ArtifactMetadata, ArtifactPublishResponse, ArtifactSlug, ArtifactStatusResponse, ArtifactUnshareResponse, ArtifactUrls, ArtifactValidationCode, ArtifactValidationFinding, ArtifactValidationResult, BackendPane, BackendPaneChangedEvent, BackendPaneRemovedEvent, BeadsFreshnessChangedEvent, CHANNEL_REPLY_KIND_VALUES, CLAUDE_CODE_BEHAVIOR, CODEX_BEHAVIOR, COMPANION_TERMINAL_CLOSE_BODY_KEYS, COMPANION_TERMINAL_OPEN_BODY_KEYS, COMPOSER_COMMAND_INSERT_OVERRIDES, COMPOSER_COMMAND_MANIFEST, COMPOSER_COMMAND_VARIANTS, CONTEXT_LAYER_KINDS, CONTEXT_PREVIEW_HARNESSES, ChannelPermissionRequestSnapshot, ChannelReplyArtifactRef, ChannelReplyKind, ChatMessage, ClaudeChannelPermissionBehavior, CompactBoundary, ContextEditableLayerRecord, ContextHarnessPreviews, ContextLayerDraft, ContextLayerKind, ContextLayerSaveRequest, ContextLayerSaveResponse, ContextLayerTarget, ContextLayersResponse, ContextPreviewDiagnostic, ContextPreviewHarness, ContextPreviewRequest, ContextPreviewResponse, ContextProjectSummary, ContextSyncRequest, ContextSyncResponse, ContextSyncTarget, ContextUsage, ContextWorkspaceSummary, ConversationCompactingChangedEvent, ConversationCostSummary, ConversationCreatedEvent, ConversationEvent, ConversationFilter, ConversationMovedEvent, ConversationPermissionChangedEvent, ConversationPullRequests, ConversationPullRequestsChangedEvent, ConversationResponse, ConversationTitleChangedEvent, CostEventRecordedEvent, DEFAULT_MAX_MEMORY_OBSERVATIONS_PER_ISSUE, DEFAULT_MAX_TURN_DIFF_SUMMARIES_PER_AGENT, DashboardLifecycleCompletedEvent, DashboardLifecycleFailedEvent, DashboardLifecycleStartedEvent, DashboardSnapshot, DeepWipeRpc, DeployStalenessSnapshot, DerivedBranchState, DerivedIssueState, DerivedPrState, DirectoryEntry, DirectoryEntryKind, DirectoryEntryLocation, DirectoryEntrySource, DirectoryEntryState, DirectoryPause, DirectoryPauseBy, DirectoryScope, DirectoryTranscriptRef, DiscoveredSessionSnapshot, DomainEvent, EDITORS, EditorIdSchema, EmbedProgressEvent, EmbedProgressSnapshot, EmbedSessionsRpc, EnrichCompleteEvent, EnrichProgressEvent, EnrichProgressSnapshot, EnrichSessionsRpc, EnrichStatsSnapshot, ExtractionProviderConfig, ExtractionProviderTarget, FeatureNode, FeatureRegistryEntry, FeatureRegistryStatus, FlywheelAgent, FlywheelAgentStatus, FlywheelBugRateCriterion, FlywheelConversationSummary, FlywheelDerivedStatus, FlywheelEffort, FlywheelFreshness, FlywheelHarness, FlywheelHeadline, FlywheelHttpUrl, FlywheelInFlightRow, FlywheelJournalSummary, FlywheelLastTick, FlywheelOrchestrator, FlywheelOrderBookSummary, FlywheelOrders, FlywheelP0Criterion, FlywheelParkedItem, FlywheelPipelineItem, FlywheelPipelineStatus, FlywheelPipelineVerb, FlywheelPolicies, FlywheelRunId, FlywheelRunState, FlywheelScope, FlywheelStats, FlywheelStatsCriterionStatus, FlywheelStatsTrend, FlywheelStatsWindow, FlywheelStatus, FlywheelSubstrateBug, FlywheelSubstrateBugRow, FlywheelSubstrateBugStatus, FlywheelSubstrateSeverity, FlywheelSuggestion, FlywheelSuggestionAction, FlywheelSuggestionPriority, FlywheelSystemStatus, GetAvailableEditorsRpc, GetConversationCostByWorkspaceRpc, GetConversationCostRpc, GetConversationStatsRpc, GetDiscoveredSessionRpc, GetSessionsFeedFacetsRpc, GetSnapshotRpc, GlobalContextLayerRecord, GlobalContextLayerTarget, HOOK_INVENTORY, HealthReason, HealthState, HostHealthMetrics, HostPlatform, HygieneFinding, HygienePullRequest, HygieneReport, INITIAL_READ_MODEL_STATE, ISSUE_ATTENTIONS, ISSUE_STATES, ISSUE_STATE_PRECEDENCE, IssueAttention, IssueId, IssueState, IssueStateChangedEvent, IssueStatusChangedEvent, IssueTransitionedEvent, IssuesDeltaEvent, IssuesSnapshotEvent, IssuesUpdatedEvent, KIMI_CODE_BEHAVIOR, KNOWN_HARNESSES, LegacySystemHealthSummary, LegacyWebhookRelaySummary, LinearMcpAuthCallbackRelayedEvent, LinearMcpAuthHealthyEvent, LinearMcpAuthNotifiedEvent, LinearMcpAuthRequiredEvent, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, MAX_CHANNEL_REPLY_ARTIFACT_LABEL_LENGTH, MAX_CHANNEL_REPLY_ARTIFACT_REFS, MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH, MAX_CHANNEL_REPLY_SUMMARY_LENGTH, MEMBERSHIP_UNAVAILABLE_REASONS, MUSE_BEHAVIOR, MemoryAgentRole, MemoryHealthChangedEvent, MemoryIdentity, MemoryObservation, MemoryObservationCreatedEvent, MemoryResetMarkerCreatedEvent, MemoryRollupTriggeredEvent, MemoryStatus, MemoryStatusPhase, MemoryStatusUpdatedEvent, MemoryTokenUsage, MergeReadyEvent, ModelOrigin, ModelOriginEntry, OHMYPI_BEHAVIOR, OPENCODE_BEHAVIOR, OVERDECK_AGENT_PROTOCOL_VERSION, OVERDECK_DASHBOARD_PROTOCOL_VERSION, OpenInEditorInput, OperatorInterventionEvent, OrderBook, OrderBookIndexEntry, OrderBookItem, OrderBookLane, OrderBookPosture, OrderBookSettings, OrderBookStatus, PIPELINE_MEMBERSHIP_LOADING_CODE, PanRpcError, PanRpcGroup, PendingTurn, PipelineReviewCompletedEvent, PipelineReviewStartedEvent, PipelineTestCompletedEvent, PipelineTestStartedEvent, PipelineVerificationFailedEvent, PipelineVerificationStartedEvent, PlanItemStatusChangedEvent, PlanItemsUnblockedEvent, PlanSubitemStatusChangedEvent, PlanningFailedEvent, PlanningStartedEvent, PlanningSyncEvent, PrChecksState, PrReviewState, ProjectCiHeadObservedEvent, ProjectCiSnapshot, ProjectCiSuite, ProjectCiSuiteObservedEvent, ProjectContextLayerRecord, ProjectContextLayerTarget, ProjectDeployChangedEvent, ProjectDeployPhase, ProjectDeploySnapshot, ProjectSessionTree, ProposedPlan, PullRequestKey, PullRequestLink, PullRequestLinkListing, PullRequestLinkSource, PullRequestLinkedConversation, PullRequestSnapshot, PullRequestState, RagDecision, RagDecisionSource, ReadFileAtPathInput, ReadFileAtPathResult, ReadFileAtPathRpc, ReadWorkspaceFileInput, ReadWorkspaceFileResult, ReadWorkspaceFileRpc, ReplayEventsRpc, ResetMarker, ResetMarkerScope, ResizeTerminalRpc, ResolveFilePathExistsInput, ResolveFilePathExistsResult, ResolveFilePathExistsRpc, ResourceStats, ResourcesUpdatedEvent, RestartGateChangedEvent, RestartGateKind, RestartGateOutcome, RestartGateRequest, RestartGateSnapshot, ReviewApprovedEvent, ReviewCoordinatorDiedEvent, ReviewCoordinatorStartedEvent, ReviewReviewerCompletedEvent, ReviewReviewerStartedEvent, ReviewSpecialistTimedOutEvent, ReviewVerdictDispatchedEvent, ReviewVerdictRejectedEvent, ReviewVerdictRestoreBlockedEvent, ReviewerRoundMetadata, ReviewerRoundSummary, Role, ScanCompleteEvent, ScanConversationsRpc, ScanProgressEvent, ScanProgressSnapshot, ScanResult, ScanStartedEvent, SearchConversationsRpc, SendTerminalInputRpc, SequenceNumber, ServiceHealthSnapshot, ServiceHealthStatus, SessionNode, SessionNodePresence, SessionNodeType, SessionTreeDelta, SessionsFeedFacetsSnapshot, SessionsFeedRowSnapshot, SessionsFeedSource, ShadowInferenceUpdateEvent, ShellOpenInEditorRpc, SpecialistCompletedEvent, SpecialistFailedEvent, SpecialistLifecycle, SpecialistStartedEvent, StartAgentRpc, StartPlanningRpc, SubagentSummary, SubscribeAgentOutputRpc, SubscribeConversationMessagesRpc, SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeProjectSessionTreeRpc, SubscribeTerminalRpc, SubstrateBugFiledEvent, SweepEscalatedEvent, SweepRecommendationEvent, SweepScanEvent, SystemHealthConsumer, SystemHealthSeverityChangedEvent, SystemHealthSnapshot, SystemHeartbeatEvent, TELEMETRY_CLI_VERBS, TELEMETRY_EVENT_CATALOG, TELEMETRY_EVENT_NAMES, TELEMETRY_PROPERTY_DOMAINS, TERMINAL_BACKEND_NAMES, TerminalCloseRpc, TerminalOpenRpc, TerminalOutput, TerminalResizeRpc, TerminalWriteRpc, TestPassedEvent, ThinkingState, TickMarker, TickMarkerPhase, TurnDiffFileChange, TurnDiffSummary, WIRED_HOOK_INVENTORY, WIRED_HOOK_NAMES, WS_METHODS, WaitingReason, WaitingState, WorkCompletedEvent, WorkLogEntry, WorkspaceAbortedEvent, WorkspaceArtifactsResponse, WorkspaceContextLayerRecord, WorkspaceContextLayerTarget, WorkspaceCreatedEvent, WorkspaceDeletedEvent, WorkspaceDestroyedEvent, WorkspaceWipeStartedEvent, WriteFileAtPathInput, WriteFileAtPathResult, WriteFileAtPathRpc, applyEvent, applyEvents, applyIssueDelta, canonicalPullRequestUrl, companionTerminalKindFor, compareIssueIds, createIssueDelta, decodeFlywheelDerivedStatus, decodeFlywheelStats, deriveProjectCi, encodeFlywheelStats, getHarness, getHarnessBehavior, getMaxMemoryObservationsPerIssue, getMaxTurnDiffSummariesPerAgent, getRuntimeBehavior, isAgentRole, isAgentSessionName, isChannelReplyKind, isConfiguredPullRequestRepo, isIssueAttention, isIssueState, isTerminalBackendName, isTerminalTurnDiffSummaryStatus, normalizeChannelReplyPayload, omitTurnDiffSummariesForAgent, parsePullRequestRef, projectLegacySystemHealthSummary, repoFromRemoteUrl, resolveEffectivePullRequest, syncSnapshot, trimMemoryObservations, trimTurnDiffSummaries, withPaneLivenessAlias };
13445
13767
 
13446
13768
  //# sourceMappingURL=index.mjs.map