@overdeck/contracts 0.47.1 → 0.49.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.
package/dist/index.cjs CHANGED
@@ -116,7 +116,8 @@ const KNOWN_HARNESSES = new Set([
116
116
  "claude-code",
117
117
  "ohmypi",
118
118
  "codex",
119
- "acp"
119
+ "acp",
120
+ "kimi-code"
120
121
  ]);
121
122
  /**
122
123
  * Normalize a snapshot's runtime field to a known Harness value.
@@ -719,13 +720,14 @@ const ScanResult = effect.Schema.Struct({
719
720
  });
720
721
  //#endregion
721
722
  //#region src/memory.ts
723
+ const MemoryAgentRole = effect.Schema.Union([Role, effect.Schema.Literal("conversation")]);
722
724
  const MemoryIdentity = effect.Schema.Struct({
723
725
  projectId: effect.Schema.String,
724
726
  workspaceId: effect.Schema.String,
725
- issueId: IssueId,
727
+ issueId: effect.Schema.NullOr(IssueId),
726
728
  runId: effect.Schema.String,
727
729
  sessionId: effect.Schema.String,
728
- agentRole: Role,
730
+ agentRole: MemoryAgentRole,
729
731
  agentHarness: effect.Schema.String
730
732
  });
731
733
  const MemoryTokenUsage = effect.Schema.Struct({
@@ -738,10 +740,10 @@ const MemoryObservation = effect.Schema.Struct({
738
740
  timestamp: effect.Schema.String,
739
741
  projectId: effect.Schema.String,
740
742
  workspaceId: effect.Schema.String,
741
- issueId: IssueId,
743
+ issueId: effect.Schema.NullOr(IssueId),
742
744
  runId: effect.Schema.String,
743
745
  sessionId: effect.Schema.String,
744
- agentRole: Role,
746
+ agentRole: MemoryAgentRole,
745
747
  agentHarness: effect.Schema.String,
746
748
  gitBranch: effect.Schema.String,
747
749
  sourceTranscriptOffset: effect.Schema.Number,
@@ -1179,6 +1181,7 @@ const AgentStartedEvent = effect.Schema.Struct({
1179
1181
  payload: effect.Schema.Struct({
1180
1182
  agentId: AgentId,
1181
1183
  issueId: IssueId,
1184
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1182
1185
  agent: AgentSnapshot
1183
1186
  })
1184
1187
  });
@@ -1190,6 +1193,7 @@ const AgentStoppedEvent = effect.Schema.Struct({
1190
1193
  payload: effect.Schema.Struct({
1191
1194
  agentId: AgentId,
1192
1195
  issueId: IssueId,
1196
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1193
1197
  sessionId: effect.Schema.optional(effect.Schema.String)
1194
1198
  })
1195
1199
  });
@@ -1200,6 +1204,7 @@ const AgentHeartbeatDeadEvent = effect.Schema.Struct({
1200
1204
  payload: effect.Schema.Struct({
1201
1205
  agentId: AgentId,
1202
1206
  issueId: effect.Schema.optional(IssueId),
1207
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1203
1208
  sessionId: effect.Schema.optional(effect.Schema.String)
1204
1209
  })
1205
1210
  });
@@ -1210,6 +1215,7 @@ const WorkCompletedEvent = effect.Schema.Struct({
1210
1215
  timestamp: effect.Schema.String,
1211
1216
  payload: effect.Schema.Struct({
1212
1217
  issueId: IssueId,
1218
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1213
1219
  agentId: effect.Schema.optional(AgentId)
1214
1220
  })
1215
1221
  });
@@ -1220,6 +1226,7 @@ const AgentCompletedEvent = effect.Schema.Struct({
1220
1226
  timestamp: effect.Schema.String,
1221
1227
  payload: effect.Schema.Struct({
1222
1228
  issueId: IssueId,
1229
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1223
1230
  agentId: effect.Schema.optional(AgentId),
1224
1231
  role: effect.Schema.optional(Role)
1225
1232
  })
@@ -1229,14 +1236,20 @@ const ReviewApprovedEvent = effect.Schema.Struct({
1229
1236
  type: effect.Schema.Literal("review.approved"),
1230
1237
  sequence: SequenceNumber,
1231
1238
  timestamp: effect.Schema.String,
1232
- payload: effect.Schema.Struct({ issueId: IssueId })
1239
+ payload: effect.Schema.Struct({
1240
+ issueId: IssueId,
1241
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1242
+ })
1233
1243
  });
1234
1244
  /** Role lifecycle — tests passed and shipping should prepare the branch. */
1235
1245
  const TestPassedEvent = effect.Schema.Struct({
1236
1246
  type: effect.Schema.Literal("test.passed"),
1237
1247
  sequence: SequenceNumber,
1238
1248
  timestamp: effect.Schema.String,
1239
- payload: effect.Schema.Struct({ issueId: IssueId })
1249
+ payload: effect.Schema.Struct({
1250
+ issueId: IssueId,
1251
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1252
+ })
1240
1253
  });
1241
1254
  /** Replaces socket.io `godview:status-change` */
1242
1255
  const AgentStatusChangedEvent = effect.Schema.Struct({
@@ -1246,6 +1259,7 @@ const AgentStatusChangedEvent = effect.Schema.Struct({
1246
1259
  payload: effect.Schema.Struct({
1247
1260
  agentId: AgentId,
1248
1261
  issueId: effect.Schema.optional(IssueId),
1262
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1249
1263
  status: AgentStatus,
1250
1264
  previousStatus: effect.Schema.optional(AgentStatus),
1251
1265
  hasLiveTmuxSession: effect.Schema.optional(effect.Schema.Boolean),
@@ -1306,6 +1320,8 @@ const AgentEnrichmentChangedEvent = effect.Schema.Struct({
1306
1320
  timestamp: effect.Schema.String,
1307
1321
  payload: effect.Schema.Struct({
1308
1322
  agentId: AgentId,
1323
+ issueId: effect.Schema.optional(IssueId),
1324
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1309
1325
  role: effect.Schema.optional(Role),
1310
1326
  hasPendingQuestion: effect.Schema.optional(effect.Schema.Boolean),
1311
1327
  pendingQuestionCount: effect.Schema.optional(effect.Schema.Number),
@@ -1343,6 +1359,7 @@ const AgentCreatedEvent = effect.Schema.Struct({
1343
1359
  payload: effect.Schema.Struct({
1344
1360
  agentId: AgentId,
1345
1361
  issueId: IssueId,
1362
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1346
1363
  agent: AgentSnapshot
1347
1364
  })
1348
1365
  });
@@ -1353,7 +1370,19 @@ const AgentActivityChangedEvent = effect.Schema.Struct({
1353
1370
  payload: effect.Schema.Struct({
1354
1371
  agentId: AgentId,
1355
1372
  activity: Activity,
1356
- currentTool: effect.Schema.optional(effect.Schema.String)
1373
+ currentTool: effect.Schema.optional(effect.Schema.String),
1374
+ hookName: effect.Schema.optional(effect.Schema.String)
1375
+ })
1376
+ });
1377
+ /** A registered harness hook fired without implying an agent activity transition. */
1378
+ const AgentHookFiredEvent = effect.Schema.Struct({
1379
+ type: effect.Schema.Literal("agent.hook_fired"),
1380
+ sequence: SequenceNumber,
1381
+ timestamp: effect.Schema.String,
1382
+ payload: effect.Schema.Struct({
1383
+ agentId: AgentId,
1384
+ hookName: effect.Schema.String,
1385
+ tool: effect.Schema.optional(effect.Schema.String)
1357
1386
  })
1358
1387
  });
1359
1388
  const AgentThinkingStartedEvent = effect.Schema.Struct({
@@ -1417,6 +1446,7 @@ const AgentPermissionResolvedEvent = effect.Schema.Struct({
1417
1446
  requestId: effect.Schema.String,
1418
1447
  agentId: AgentId,
1419
1448
  issueId: effect.Schema.optional(IssueId),
1449
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1420
1450
  behavior: ClaudeChannelPermissionBehavior
1421
1451
  })
1422
1452
  });
@@ -1525,6 +1555,7 @@ const PlanningStartedEvent = effect.Schema.Struct({
1525
1555
  timestamp: effect.Schema.String,
1526
1556
  payload: effect.Schema.Struct({
1527
1557
  issueId: IssueId,
1558
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1528
1559
  sessionName: effect.Schema.String,
1529
1560
  harness: effect.Schema.optional(effect.Schema.String)
1530
1561
  })
@@ -1536,6 +1567,7 @@ const PlanningFailedEvent = effect.Schema.Struct({
1536
1567
  timestamp: effect.Schema.String,
1537
1568
  payload: effect.Schema.Struct({
1538
1569
  issueId: IssueId,
1570
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1539
1571
  error: effect.Schema.String
1540
1572
  })
1541
1573
  });
@@ -1546,6 +1578,7 @@ const PlanningSyncEvent = effect.Schema.Struct({
1546
1578
  timestamp: effect.Schema.String,
1547
1579
  payload: effect.Schema.Struct({
1548
1580
  issueId: IssueId,
1581
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1549
1582
  status: effect.Schema.String,
1550
1583
  progress: effect.Schema.optional(effect.Schema.Number),
1551
1584
  message: effect.Schema.optional(effect.Schema.String)
@@ -1558,6 +1591,7 @@ const PlanItemStatusChangedEvent = effect.Schema.Struct({
1558
1591
  timestamp: effect.Schema.String,
1559
1592
  payload: effect.Schema.Struct({
1560
1593
  issueId: IssueId,
1594
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1561
1595
  itemId: effect.Schema.String,
1562
1596
  status: effect.Schema.String
1563
1597
  })
@@ -1569,6 +1603,7 @@ const PlanSubitemStatusChangedEvent = effect.Schema.Struct({
1569
1603
  timestamp: effect.Schema.String,
1570
1604
  payload: effect.Schema.Struct({
1571
1605
  issueId: IssueId,
1606
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1572
1607
  itemId: effect.Schema.String,
1573
1608
  subItemId: effect.Schema.String,
1574
1609
  status: effect.Schema.String
@@ -1581,6 +1616,7 @@ const PlanItemsUnblockedEvent = effect.Schema.Struct({
1581
1616
  timestamp: effect.Schema.String,
1582
1617
  payload: effect.Schema.Struct({
1583
1618
  issueId: IssueId,
1619
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1584
1620
  items: effect.Schema.Array(effect.Schema.String)
1585
1621
  })
1586
1622
  });
@@ -1591,6 +1627,7 @@ const PipelineStatusChangedEvent = effect.Schema.Struct({
1591
1627
  timestamp: effect.Schema.String,
1592
1628
  payload: effect.Schema.Struct({
1593
1629
  issueId: IssueId,
1630
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1594
1631
  status: ReviewStatusSnapshot
1595
1632
  })
1596
1633
  });
@@ -1599,7 +1636,10 @@ const MergeReadyEvent = effect.Schema.Struct({
1599
1636
  type: effect.Schema.Literal("merge.ready"),
1600
1637
  sequence: SequenceNumber,
1601
1638
  timestamp: effect.Schema.String,
1602
- payload: effect.Schema.Struct({ issueId: IssueId })
1639
+ payload: effect.Schema.Struct({
1640
+ issueId: IssueId,
1641
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1642
+ })
1603
1643
  });
1604
1644
  /** New — review status changed */
1605
1645
  const ReviewStatusChangedEvent = effect.Schema.Struct({
@@ -1608,6 +1648,7 @@ const ReviewStatusChangedEvent = effect.Schema.Struct({
1608
1648
  timestamp: effect.Schema.String,
1609
1649
  payload: effect.Schema.Struct({
1610
1650
  issueId: IssueId,
1651
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1611
1652
  status: ReviewStatusSnapshot
1612
1653
  })
1613
1654
  });
@@ -1616,7 +1657,10 @@ const PipelineReviewStartedEvent = effect.Schema.Struct({
1616
1657
  type: effect.Schema.Literal("pipeline.review-started"),
1617
1658
  sequence: SequenceNumber,
1618
1659
  timestamp: effect.Schema.String,
1619
- payload: effect.Schema.Struct({ issueId: IssueId })
1660
+ payload: effect.Schema.Struct({
1661
+ issueId: IssueId,
1662
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1663
+ })
1620
1664
  });
1621
1665
  /** New — review specialist finished (passed or failed) */
1622
1666
  const PipelineReviewCompletedEvent = effect.Schema.Struct({
@@ -1625,6 +1669,7 @@ const PipelineReviewCompletedEvent = effect.Schema.Struct({
1625
1669
  timestamp: effect.Schema.String,
1626
1670
  payload: effect.Schema.Struct({
1627
1671
  issueId: IssueId,
1672
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1628
1673
  passed: effect.Schema.Boolean
1629
1674
  })
1630
1675
  });
@@ -1633,7 +1678,10 @@ const PipelineTestStartedEvent = effect.Schema.Struct({
1633
1678
  type: effect.Schema.Literal("pipeline.test-started"),
1634
1679
  sequence: SequenceNumber,
1635
1680
  timestamp: effect.Schema.String,
1636
- payload: effect.Schema.Struct({ issueId: IssueId })
1681
+ payload: effect.Schema.Struct({
1682
+ issueId: IssueId,
1683
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1684
+ })
1637
1685
  });
1638
1686
  /** New — test specialist finished (passed or failed) */
1639
1687
  const PipelineTestCompletedEvent = effect.Schema.Struct({
@@ -1642,6 +1690,7 @@ const PipelineTestCompletedEvent = effect.Schema.Struct({
1642
1690
  timestamp: effect.Schema.String,
1643
1691
  payload: effect.Schema.Struct({
1644
1692
  issueId: IssueId,
1693
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1645
1694
  passed: effect.Schema.Boolean
1646
1695
  })
1647
1696
  });
@@ -1650,7 +1699,10 @@ const PipelineVerificationStartedEvent = effect.Schema.Struct({
1650
1699
  type: effect.Schema.Literal("pipeline.verification-started"),
1651
1700
  sequence: SequenceNumber,
1652
1701
  timestamp: effect.Schema.String,
1653
- payload: effect.Schema.Struct({ issueId: IssueId })
1702
+ payload: effect.Schema.Struct({
1703
+ issueId: IssueId,
1704
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1705
+ })
1654
1706
  });
1655
1707
  /** New — verification gate failed (carries failedCheck for gate failures, message for infra errors) */
1656
1708
  const PipelineVerificationFailedEvent = effect.Schema.Struct({
@@ -1659,6 +1711,7 @@ const PipelineVerificationFailedEvent = effect.Schema.Struct({
1659
1711
  timestamp: effect.Schema.String,
1660
1712
  payload: effect.Schema.Struct({
1661
1713
  issueId: IssueId,
1714
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1662
1715
  failedCheck: effect.Schema.optional(effect.Schema.String),
1663
1716
  message: effect.Schema.optional(effect.Schema.String)
1664
1717
  })
@@ -1672,6 +1725,7 @@ const IssueTransitionedEvent = effect.Schema.Struct({
1672
1725
  timestamp: effect.Schema.String,
1673
1726
  payload: effect.Schema.Struct({
1674
1727
  issueId: IssueId,
1728
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1675
1729
  state: effect.Schema.String
1676
1730
  })
1677
1731
  });
@@ -1681,6 +1735,7 @@ const OperatorInterventionEvent = effect.Schema.Struct({
1681
1735
  timestamp: effect.Schema.String,
1682
1736
  payload: effect.Schema.Struct({
1683
1737
  issueId: IssueId,
1738
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1684
1739
  kind: effect.Schema.Literals([
1685
1740
  "tell",
1686
1741
  "pause",
@@ -1745,6 +1800,7 @@ const SubstrateBugFiledEvent = effect.Schema.Struct({
1745
1800
  timestamp: effect.Schema.String,
1746
1801
  payload: effect.Schema.Struct({
1747
1802
  issueId: IssueId,
1803
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1748
1804
  runId: effect.Schema.optional(effect.Schema.String),
1749
1805
  filedBy: effect.Schema.Literals(["agent", "operator"]),
1750
1806
  discoveredIn: effect.Schema.optional(IssueId),
@@ -1766,6 +1822,7 @@ const ReviewReviewerStartedEvent = effect.Schema.Struct({
1766
1822
  timestamp: effect.Schema.String,
1767
1823
  payload: effect.Schema.Struct({
1768
1824
  issueId: IssueId,
1825
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1769
1826
  role: effect.Schema.String,
1770
1827
  sessionName: effect.Schema.String
1771
1828
  })
@@ -1780,6 +1837,7 @@ const ReviewReviewerCompletedEvent = effect.Schema.Struct({
1780
1837
  timestamp: effect.Schema.String,
1781
1838
  payload: effect.Schema.Struct({
1782
1839
  issueId: IssueId,
1840
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1783
1841
  role: effect.Schema.String
1784
1842
  })
1785
1843
  });
@@ -1794,6 +1852,7 @@ const ReviewSpecialistTimedOutEvent = effect.Schema.Struct({
1794
1852
  timestamp: effect.Schema.String,
1795
1853
  payload: effect.Schema.Struct({
1796
1854
  issueId: IssueId,
1855
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1797
1856
  role: effect.Schema.String,
1798
1857
  sessionName: effect.Schema.String,
1799
1858
  attempt: effect.Schema.Number,
@@ -1812,6 +1871,7 @@ const ReviewCoordinatorStartedEvent = effect.Schema.Struct({
1812
1871
  timestamp: effect.Schema.String,
1813
1872
  payload: effect.Schema.Struct({
1814
1873
  issueId: IssueId,
1874
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1815
1875
  sessionName: effect.Schema.String
1816
1876
  })
1817
1877
  });
@@ -1822,10 +1882,62 @@ const ReviewCoordinatorDiedEvent = effect.Schema.Struct({
1822
1882
  timestamp: effect.Schema.String,
1823
1883
  payload: effect.Schema.Struct({
1824
1884
  issueId: IssueId,
1885
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1825
1886
  sessionName: effect.Schema.String,
1826
1887
  reason: effect.Schema.String
1827
1888
  })
1828
1889
  });
1890
+ /** A terminal review verdict was rejected due to stale evidence. */
1891
+ const ReviewVerdictRejectedEvent = effect.Schema.Struct({
1892
+ type: effect.Schema.Literal("review.verdict_rejected"),
1893
+ sequence: SequenceNumber,
1894
+ timestamp: effect.Schema.String,
1895
+ payload: effect.Schema.Struct({
1896
+ issueId: IssueId,
1897
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1898
+ writer: effect.Schema.String,
1899
+ verdict: effect.Schema.String,
1900
+ evidenceHead: effect.Schema.String,
1901
+ rowHead: effect.Schema.String,
1902
+ reason: effect.Schema.String
1903
+ })
1904
+ });
1905
+ /** A terminal review verdict was landed and dispatched with a fresh evidence head. */
1906
+ const ReviewVerdictDispatchedEvent = effect.Schema.Struct({
1907
+ type: effect.Schema.Literal("review.verdict_dispatched"),
1908
+ sequence: SequenceNumber,
1909
+ timestamp: effect.Schema.String,
1910
+ payload: effect.Schema.Struct({
1911
+ issueId: IssueId,
1912
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1913
+ writer: effect.Schema.String,
1914
+ verdict: effect.Schema.String,
1915
+ evidenceHead: effect.Schema.String,
1916
+ rowHead: effect.Schema.String,
1917
+ classification: effect.Schema.String,
1918
+ testGateReset: effect.Schema.Boolean
1919
+ })
1920
+ });
1921
+ /**
1922
+ * A recovery path found a fresh verdict artifact but declined to restore it,
1923
+ * because the artifact's head evidence disagrees with the row's anchor. The
1924
+ * verdict is NOT lost silently — it is reported here so the operator can see a
1925
+ * finished review that recovery refused to write (PAN-3511).
1926
+ */
1927
+ const ReviewVerdictRestoreBlockedEvent = effect.Schema.Struct({
1928
+ type: effect.Schema.Literal("review.verdict_restore_blocked"),
1929
+ sequence: SequenceNumber,
1930
+ timestamp: effect.Schema.String,
1931
+ payload: effect.Schema.Struct({
1932
+ issueId: IssueId,
1933
+ /** Recovery path that attempted the restore (orphan-reset, sweeper, …). */
1934
+ caller: effect.Schema.String,
1935
+ verdict: effect.Schema.String,
1936
+ artifactHead: effect.Schema.String,
1937
+ rowHead: effect.Schema.String,
1938
+ reason: effect.Schema.String
1939
+ })
1940
+ });
1829
1941
  const SpecialistLifecycleState = effect.Schema.Literals([
1830
1942
  "active",
1831
1943
  "sleeping",
@@ -1851,7 +1963,8 @@ const SpecialistCompletedEvent = effect.Schema.Struct({
1851
1963
  timestamp: effect.Schema.String,
1852
1964
  payload: effect.Schema.Struct({
1853
1965
  name: Role,
1854
- issueId: effect.Schema.optional(IssueId)
1966
+ issueId: effect.Schema.optional(IssueId),
1967
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1855
1968
  })
1856
1969
  });
1857
1970
  /** New — role-backed specialist failed */
@@ -1862,6 +1975,7 @@ const SpecialistFailedEvent = effect.Schema.Struct({
1862
1975
  payload: effect.Schema.Struct({
1863
1976
  name: Role,
1864
1977
  issueId: effect.Schema.optional(IssueId),
1978
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1865
1979
  error: effect.Schema.String
1866
1980
  })
1867
1981
  });
@@ -1901,7 +2015,10 @@ const IssuesUpdatedEvent = effect.Schema.Struct({
1901
2015
  type: effect.Schema.Literal("issues.updated"),
1902
2016
  sequence: SequenceNumber,
1903
2017
  timestamp: effect.Schema.String,
1904
- payload: effect.Schema.Struct({ issueId: effect.Schema.optional(IssueId) })
2018
+ payload: effect.Schema.Struct({
2019
+ issueId: effect.Schema.optional(IssueId),
2020
+ workspaceId: effect.Schema.optional(effect.Schema.String)
2021
+ })
1905
2022
  });
1906
2023
  /** Patch a single issue's status in the read model without a full snapshot refresh. */
1907
2024
  const IssueStatusChangedEvent = effect.Schema.Struct({
@@ -1910,6 +2027,7 @@ const IssueStatusChangedEvent = effect.Schema.Struct({
1910
2027
  timestamp: effect.Schema.String,
1911
2028
  payload: effect.Schema.Struct({
1912
2029
  issueId: IssueId,
2030
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1913
2031
  status: effect.Schema.String,
1914
2032
  canonicalStatus: effect.Schema.String,
1915
2033
  labels: effect.Schema.optional(effect.Schema.Array(effect.Schema.String))
@@ -1942,6 +2060,7 @@ const ActivityEntryEvent = effect.Schema.Struct({
1942
2060
  details: effect.Schema.optional(effect.Schema.String),
1943
2061
  output: effect.Schema.optional(effect.Schema.String),
1944
2062
  issueId: effect.Schema.optional(IssueId),
2063
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1945
2064
  /** Dashboard route the feed navigates to on click (e.g. /conv/<name>, /flywheel). */
1946
2065
  link: effect.Schema.optional(effect.Schema.String),
1947
2066
  /** PAN-1862 (FR-12): fire a desktop notification for this entry (operator-facing warnings). */
@@ -1960,6 +2079,7 @@ const ActivityDetailedEvent = effect.Schema.Struct({
1960
2079
  message: effect.Schema.String,
1961
2080
  details: effect.Schema.optional(effect.Schema.String),
1962
2081
  issueId: effect.Schema.optional(IssueId),
2082
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1963
2083
  triggeringEvent: effect.Schema.optional(effect.Schema.String)
1964
2084
  })
1965
2085
  });
@@ -1973,6 +2093,7 @@ const ActivityTtsEvent = effect.Schema.Struct({
1973
2093
  utterance: effect.Schema.String,
1974
2094
  priority: effect.Schema.optional(effect.Schema.Number),
1975
2095
  issueId: effect.Schema.optional(IssueId),
2096
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1976
2097
  source: effect.Schema.optional(effect.Schema.String),
1977
2098
  eventType: effect.Schema.optional(effect.Schema.String)
1978
2099
  })
@@ -1985,6 +2106,7 @@ const DashboardLifecycleStartedEvent = effect.Schema.Struct({
1985
2106
  payload: effect.Schema.Struct({
1986
2107
  reason: effect.Schema.String,
1987
2108
  issueId: effect.Schema.optional(IssueId),
2109
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1988
2110
  trigger: effect.Schema.String
1989
2111
  })
1990
2112
  });
@@ -1996,6 +2118,7 @@ const DashboardLifecycleCompletedEvent = effect.Schema.Struct({
1996
2118
  payload: effect.Schema.Struct({
1997
2119
  reason: effect.Schema.String,
1998
2120
  issueId: effect.Schema.optional(IssueId),
2121
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1999
2122
  durationMs: effect.Schema.Number
2000
2123
  })
2001
2124
  });
@@ -2007,6 +2130,7 @@ const DashboardLifecycleFailedEvent = effect.Schema.Struct({
2007
2130
  payload: effect.Schema.Struct({
2008
2131
  reason: effect.Schema.String,
2009
2132
  issueId: effect.Schema.optional(IssueId),
2133
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2010
2134
  error: effect.Schema.String
2011
2135
  })
2012
2136
  });
@@ -2017,6 +2141,7 @@ const ShadowInferenceUpdateEvent = effect.Schema.Struct({
2017
2141
  timestamp: effect.Schema.String,
2018
2142
  payload: effect.Schema.Struct({
2019
2143
  issueId: IssueId,
2144
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2020
2145
  content: effect.Schema.String
2021
2146
  })
2022
2147
  });
@@ -2027,6 +2152,7 @@ const WorkspaceCreatedEvent = effect.Schema.Struct({
2027
2152
  timestamp: effect.Schema.String,
2028
2153
  payload: effect.Schema.Struct({
2029
2154
  issueId: IssueId,
2155
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2030
2156
  workspacePath: effect.Schema.String
2031
2157
  })
2032
2158
  });
@@ -2035,21 +2161,30 @@ const WorkspaceWipeStartedEvent = effect.Schema.Struct({
2035
2161
  type: effect.Schema.Literal("workspace.wipe_started"),
2036
2162
  sequence: SequenceNumber,
2037
2163
  timestamp: effect.Schema.String,
2038
- payload: effect.Schema.Struct({ issueId: IssueId })
2164
+ payload: effect.Schema.Struct({
2165
+ issueId: IssueId,
2166
+ workspaceId: effect.Schema.optional(effect.Schema.String)
2167
+ })
2039
2168
  });
2040
2169
  /** New — deep-wipe completed, workspace fully destroyed */
2041
2170
  const WorkspaceDestroyedEvent = effect.Schema.Struct({
2042
2171
  type: effect.Schema.Literal("workspace.destroyed"),
2043
2172
  sequence: SequenceNumber,
2044
2173
  timestamp: effect.Schema.String,
2045
- payload: effect.Schema.Struct({ issueId: IssueId })
2174
+ payload: effect.Schema.Struct({
2175
+ issueId: IssueId,
2176
+ workspaceId: effect.Schema.optional(effect.Schema.String)
2177
+ })
2046
2178
  });
2047
2179
  /** New — cleanup-workspace completed, workspace directory removed */
2048
2180
  const WorkspaceDeletedEvent = effect.Schema.Struct({
2049
2181
  type: effect.Schema.Literal("workspace.deleted"),
2050
2182
  sequence: SequenceNumber,
2051
2183
  timestamp: effect.Schema.String,
2052
- payload: effect.Schema.Struct({ issueId: IssueId })
2184
+ payload: effect.Schema.Struct({
2185
+ issueId: IssueId,
2186
+ workspaceId: effect.Schema.optional(effect.Schema.String)
2187
+ })
2053
2188
  });
2054
2189
  /** New — planning aborted, workspace returned to idle state */
2055
2190
  const WorkspaceAbortedEvent = effect.Schema.Struct({
@@ -2058,6 +2193,7 @@ const WorkspaceAbortedEvent = effect.Schema.Struct({
2058
2193
  timestamp: effect.Schema.String,
2059
2194
  payload: effect.Schema.Struct({
2060
2195
  issueId: IssueId,
2196
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2061
2197
  sessionName: effect.Schema.optional(effect.Schema.String)
2062
2198
  })
2063
2199
  });
@@ -2107,6 +2243,7 @@ const MemoryHealthChangedEvent = effect.Schema.Struct({
2107
2243
  payload: effect.Schema.Struct({
2108
2244
  projectId: effect.Schema.String,
2109
2245
  issueId: IssueId,
2246
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2110
2247
  status: effect.Schema.Literals([
2111
2248
  "healthy",
2112
2249
  "degraded",
@@ -2125,6 +2262,7 @@ const CostEventRecordedEvent = effect.Schema.Struct({
2125
2262
  payload: effect.Schema.Struct({
2126
2263
  agentId: AgentId,
2127
2264
  issueId: IssueId,
2265
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2128
2266
  cost: effect.Schema.Number,
2129
2267
  inputTokens: effect.Schema.Number,
2130
2268
  outputTokens: effect.Schema.Number
@@ -2148,6 +2286,18 @@ const ConversationCreatedEvent = effect.Schema.Struct({
2148
2286
  timestamp: effect.Schema.String,
2149
2287
  payload: effect.Schema.Struct({ conversationName: effect.Schema.String })
2150
2288
  });
2289
+ /** Emitted (in-memory only, not persisted) when a conversation's project
2290
+ * assignment override changes, so the sidebar can re-group it live instead of
2291
+ * waiting for its poll tick. */
2292
+ const ConversationMovedEvent = effect.Schema.Struct({
2293
+ type: effect.Schema.Literal("conversation.moved"),
2294
+ sequence: SequenceNumber,
2295
+ timestamp: effect.Schema.String,
2296
+ payload: effect.Schema.Struct({
2297
+ conversationName: effect.Schema.String,
2298
+ projectKey: effect.Schema.String
2299
+ })
2300
+ });
2151
2301
  /** Emitted (in-memory only) when a conversation title changes, so the sidebar
2152
2302
  * list can refresh immediately instead of waiting for its poll tick. */
2153
2303
  const ConversationTitleChangedEvent = effect.Schema.Struct({
@@ -2248,6 +2398,45 @@ const EmbedProgressEvent = effect.Schema.Struct({
2248
2398
  error: effect.Schema.optional(effect.Schema.String)
2249
2399
  })
2250
2400
  });
2401
+ /** The parked population changed — carries the full new population (compact rows). */
2402
+ const SweepScanEvent = effect.Schema.Struct({
2403
+ type: effect.Schema.Literal("sweep.scan"),
2404
+ sequence: SequenceNumber,
2405
+ timestamp: effect.Schema.String,
2406
+ payload: effect.Schema.Struct({
2407
+ issueCount: effect.Schema.Number,
2408
+ rowCount: effect.Schema.Number,
2409
+ rows: effect.Schema.Array(effect.Schema.Struct({
2410
+ issueId: effect.Schema.String,
2411
+ orbit: effect.Schema.String,
2412
+ parkedAt: effect.Schema.String
2413
+ }))
2414
+ })
2415
+ });
2416
+ /** A parked row was (re-)surfaced to the operator — gates respected, TTL re-surface, or exhaustion. */
2417
+ const SweepEscalatedEvent = effect.Schema.Struct({
2418
+ type: effect.Schema.Literal("sweep.escalated"),
2419
+ sequence: SequenceNumber,
2420
+ timestamp: effect.Schema.String,
2421
+ payload: effect.Schema.Struct({
2422
+ issueId: effect.Schema.String,
2423
+ orbit: effect.Schema.String,
2424
+ reason: effect.Schema.String
2425
+ })
2426
+ });
2427
+ /** The sweeper recommended a remedy for a parked row (observability-only — never an action, PAN-3551). */
2428
+ const SweepRecommendationEvent = effect.Schema.Struct({
2429
+ type: effect.Schema.Literal("sweep.recommendation"),
2430
+ sequence: SequenceNumber,
2431
+ timestamp: effect.Schema.String,
2432
+ payload: effect.Schema.Struct({
2433
+ issueId: effect.Schema.String,
2434
+ orbit: effect.Schema.String,
2435
+ recommendation: effect.Schema.String,
2436
+ recurring: effect.Schema.optional(effect.Schema.Boolean),
2437
+ agentId: effect.Schema.optional(effect.Schema.String)
2438
+ })
2439
+ });
2251
2440
  /** All domain events — the shape streamed via subscribeDomainEvents RPC */
2252
2441
  const DomainEvent = effect.Schema.Union([
2253
2442
  SystemHeartbeatEvent,
@@ -2264,6 +2453,7 @@ const DomainEvent = effect.Schema.Union([
2264
2453
  AgentStatusChangedEvent,
2265
2454
  AgentOutputReceivedEvent,
2266
2455
  AgentActivityChangedEvent,
2456
+ AgentHookFiredEvent,
2267
2457
  AgentThinkingStartedEvent,
2268
2458
  AgentThinkingStoppedEvent,
2269
2459
  AgentWaitingStartedEvent,
@@ -2305,6 +2495,9 @@ const DomainEvent = effect.Schema.Union([
2305
2495
  ReviewSpecialistTimedOutEvent,
2306
2496
  ReviewCoordinatorStartedEvent,
2307
2497
  ReviewCoordinatorDiedEvent,
2498
+ ReviewVerdictRejectedEvent,
2499
+ ReviewVerdictDispatchedEvent,
2500
+ ReviewVerdictRestoreBlockedEvent,
2308
2501
  SpecialistStartedEvent,
2309
2502
  SpecialistCompletedEvent,
2310
2503
  SpecialistFailedEvent,
@@ -2334,6 +2527,7 @@ const DomainEvent = effect.Schema.Union([
2334
2527
  DashboardLifecycleFailedEvent,
2335
2528
  ConversationCompactingChangedEvent,
2336
2529
  ConversationCreatedEvent,
2530
+ ConversationMovedEvent,
2337
2531
  ConversationTitleChangedEvent,
2338
2532
  ConversationPermissionChangedEvent,
2339
2533
  ScanStartedEvent,
@@ -2341,7 +2535,10 @@ const DomainEvent = effect.Schema.Union([
2341
2535
  ScanCompleteEvent,
2342
2536
  EnrichProgressEvent,
2343
2537
  EnrichCompleteEvent,
2344
- EmbedProgressEvent
2538
+ EmbedProgressEvent,
2539
+ SweepScanEvent,
2540
+ SweepEscalatedEvent,
2541
+ SweepRecommendationEvent
2345
2542
  ]);
2346
2543
  //#endregion
2347
2544
  //#region src/editor.ts
@@ -2516,7 +2713,8 @@ const FlywheelHarness = effect.Schema.Literals([
2516
2713
  "pi",
2517
2714
  "ohmypi",
2518
2715
  "codex",
2519
- "acp"
2716
+ "acp",
2717
+ "kimi-code"
2520
2718
  ]);
2521
2719
  const FlywheelEffort = effect.Schema.Literals([
2522
2720
  "low",
@@ -2709,6 +2907,8 @@ const WS_METHODS = {
2709
2907
  replayEvents: "pan.replayEvents",
2710
2908
  getWorkspaceDetail: "pan.getWorkspaceDetail",
2711
2909
  readWorkspaceFile: "pan.readWorkspaceFile",
2910
+ readFileAtPath: "pan.readFileAtPath",
2911
+ writeFileAtPath: "pan.writeFileAtPath",
2712
2912
  resolveFilePathExists: "pan.resolveFilePathExists",
2713
2913
  terminalOpen: "pan.terminalOpen",
2714
2914
  terminalWrite: "pan.terminalWrite",
@@ -2854,12 +3054,17 @@ const SessionTreeDelta = effect.Schema.Struct({
2854
3054
  "session_added",
2855
3055
  "session_removed",
2856
3056
  "presence_changed",
2857
- "status_changed"
3057
+ "status_changed",
3058
+ "pending_input_changed"
2858
3059
  ]),
2859
3060
  issueId: effect.Schema.String,
2860
3061
  sessionId: effect.Schema.String,
2861
3062
  presence: effect.Schema.optional(SessionNodePresence),
2862
3063
  status: effect.Schema.optional(AgentStatus),
3064
+ awaitingInput: effect.Schema.optional(effect.Schema.Boolean),
3065
+ awaitingInputPrompt: effect.Schema.optional(effect.Schema.String),
3066
+ awaitingInputReason: effect.Schema.optional(effect.Schema.String),
3067
+ pendingInputKinds: effect.Schema.optional(effect.Schema.Array(effect.Schema.String)),
2863
3068
  timestamp: effect.Schema.String
2864
3069
  });
2865
3070
  /** 1. Subscribe to the live domain event stream (stream) */
@@ -2960,6 +3165,44 @@ const ReadWorkspaceFileRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.readWorkspa
2960
3165
  success: ReadWorkspaceFileResult,
2961
3166
  error: PanRpcError
2962
3167
  });
3168
+ const ReadFileAtPathInput = effect.Schema.Struct({ path: effect.Schema.String });
3169
+ const ReadFileAtPathResult = effect.Schema.Struct({
3170
+ text: effect.Schema.String,
3171
+ lang: effect.Schema.String,
3172
+ mtimeMs: effect.Schema.Number,
3173
+ totalLines: effect.Schema.Number
3174
+ });
3175
+ /**
3176
+ * 10b-2. Read an allowlisted markdown file by absolute path (PAN-3260).
3177
+ *
3178
+ * Unlike ReadWorkspaceFileRpc this takes no issueId — the internal markdown
3179
+ * editor pane opens files reached from surfaces with no workspace context
3180
+ * (e.g. a repo-root file chip inside a conversation). The server validates
3181
+ * `path` against registered project roots + OVERDECK_HOME before reading.
3182
+ */
3183
+ const ReadFileAtPathRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.readFileAtPath, {
3184
+ payload: ReadFileAtPathInput,
3185
+ success: ReadFileAtPathResult,
3186
+ error: PanRpcError
3187
+ });
3188
+ const WriteFileAtPathInput = effect.Schema.Struct({
3189
+ path: effect.Schema.String,
3190
+ content: effect.Schema.String,
3191
+ expectedMtimeMs: effect.Schema.optional(effect.Schema.Number)
3192
+ });
3193
+ const WriteFileAtPathResult = effect.Schema.Struct({ mtimeMs: effect.Schema.Number });
3194
+ /**
3195
+ * 10b-3. Write an allowlisted markdown file by absolute path (PAN-3260).
3196
+ *
3197
+ * `expectedMtimeMs` enables optimistic concurrency: a stale value is
3198
+ * rejected with a PanRpcError code of WRITE_CONFLICT and nothing is
3199
+ * written. Omitting it (e.g. an explicit Overwrite action) skips the check.
3200
+ */
3201
+ const WriteFileAtPathRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.writeFileAtPath, {
3202
+ payload: WriteFileAtPathInput,
3203
+ success: WriteFileAtPathResult,
3204
+ error: PanRpcError
3205
+ });
2963
3206
  /**
2964
3207
  * 10c. Resolve whether a file path candidate exists on disk (PAN-1457).
2965
3208
  *
@@ -2977,7 +3220,7 @@ const ReadWorkspaceFileRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.readWorkspa
2977
3220
  * chat happens outside any single workspace.
2978
3221
  */
2979
3222
  const ResolveFilePathExistsInput = effect.Schema.Struct({
2980
- cwd: effect.Schema.String,
3223
+ cwd: effect.Schema.optional(effect.Schema.String),
2981
3224
  path: effect.Schema.String
2982
3225
  });
2983
3226
  const ResolveFilePathExistsResult = effect.Schema.Struct({
@@ -3234,7 +3477,7 @@ const GetConversationStatsRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.getConve
3234
3477
  error: PanRpcError
3235
3478
  });
3236
3479
  /** All Overdeck WebSocket RPC methods */
3237
- const PanRpcGroup = effect_unstable_rpc_RpcGroup.make(SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeTerminalRpc, SubscribeAgentOutputRpc, GetSnapshotRpc, ReplayEventsRpc, GetWorkspaceDetailRpc, ReadWorkspaceFileRpc, ResolveFilePathExistsRpc, TerminalOpenRpc, TerminalWriteRpc, TerminalResizeRpc, TerminalCloseRpc, StartPlanningRpc, StartAgentRpc, DeepWipeRpc, SendTerminalInputRpc, ResizeTerminalRpc, SubscribeConversationMessagesRpc, SubscribeProjectSessionTreeRpc, SubscribeFlywheelStatusRpc, ShellOpenInEditorRpc, GetAvailableEditorsRpc, ScanConversationsRpc, SearchConversationsRpc, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, GetSessionsFeedFacetsRpc, GetDiscoveredSessionRpc, EnrichSessionsRpc, EmbedSessionsRpc, GetConversationCostRpc, GetConversationCostByWorkspaceRpc, GetConversationStatsRpc);
3480
+ const PanRpcGroup = effect_unstable_rpc_RpcGroup.make(SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeTerminalRpc, SubscribeAgentOutputRpc, GetSnapshotRpc, ReplayEventsRpc, GetWorkspaceDetailRpc, ReadWorkspaceFileRpc, ReadFileAtPathRpc, WriteFileAtPathRpc, ResolveFilePathExistsRpc, TerminalOpenRpc, TerminalWriteRpc, TerminalResizeRpc, TerminalCloseRpc, StartPlanningRpc, StartAgentRpc, DeepWipeRpc, SendTerminalInputRpc, ResizeTerminalRpc, SubscribeConversationMessagesRpc, SubscribeProjectSessionTreeRpc, SubscribeFlywheelStatusRpc, ShellOpenInEditorRpc, GetAvailableEditorsRpc, ScanConversationsRpc, SearchConversationsRpc, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, GetSessionsFeedFacetsRpc, GetDiscoveredSessionRpc, EnrichSessionsRpc, EmbedSessionsRpc, GetConversationCostRpc, GetConversationCostByWorkspaceRpc, GetConversationStatsRpc);
3238
3481
  //#endregion
3239
3482
  //#region src/event-reducers.ts
3240
3483
  const INITIAL_READ_MODEL_STATE = {
@@ -3891,7 +4134,8 @@ function applyEvent(state, event) {
3891
4134
  };
3892
4135
  case "memory.observation_created": {
3893
4136
  const observation = event.payload.observation;
3894
- const existing = state.observationsByIssueId[observation.issueId] ?? [];
4137
+ const observationKey = observation.issueId ?? observation.workspaceId;
4138
+ const existing = state.observationsByIssueId[observationKey] ?? [];
3895
4139
  const index = existing.findIndex((entry) => entry.id === observation.id);
3896
4140
  const updated = trimMemoryObservations(index === -1 ? [...existing, observation] : existing.map((entry, entryIndex) => entryIndex === index ? observation : entry));
3897
4141
  return {
@@ -3899,7 +4143,7 @@ function applyEvent(state, event) {
3899
4143
  sequence: Math.max(state.sequence, event.sequence),
3900
4144
  observationsByIssueId: {
3901
4145
  ...state.observationsByIssueId,
3902
- [observation.issueId]: updated
4146
+ [observationKey]: updated
3903
4147
  }
3904
4148
  };
3905
4149
  }
@@ -3968,6 +4212,10 @@ function applyEvent(state, event) {
3968
4212
  }
3969
4213
  };
3970
4214
  }
4215
+ case "agent.hook_fired": return {
4216
+ ...state,
4217
+ sequence: Math.max(state.sequence, event.sequence)
4218
+ };
3971
4219
  case "agent.activity_changed": {
3972
4220
  const { agentId, activity, currentTool } = event.payload;
3973
4221
  const prev = state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence);
@@ -4425,6 +4673,10 @@ function applyEvent(state, event) {
4425
4673
  ...state,
4426
4674
  conversationsListRevision: state.conversationsListRevision + 1
4427
4675
  };
4676
+ case "conversation.moved": return {
4677
+ ...state,
4678
+ conversationsListRevision: state.conversationsListRevision + 1
4679
+ };
4428
4680
  case "conversation.title_changed": return {
4429
4681
  ...state,
4430
4682
  conversationsListRevision: state.conversationsListRevision + 1
@@ -4666,7 +4918,8 @@ const CONTEXT_PREVIEW_HARNESSES = [
4666
4918
  "claude-code",
4667
4919
  "ohmypi",
4668
4920
  "codex",
4669
- "acp"
4921
+ "acp",
4922
+ "kimi-code"
4670
4923
  ];
4671
4924
  const ContextLayerKind = effect.Schema.Literals(CONTEXT_LAYER_KINDS);
4672
4925
  const ContextPreviewHarness = effect.Schema.Literals(CONTEXT_PREVIEW_HARNESSES);
@@ -4774,6 +5027,7 @@ const ContextHarnessPreviews = effect.Schema.Struct({
4774
5027
  ohmypi: effect.Schema.String,
4775
5028
  codex: effect.Schema.String,
4776
5029
  acp: effect.Schema.String,
5030
+ "kimi-code": effect.Schema.String,
4777
5031
  fullPrompt: effect.Schema.String
4778
5032
  });
4779
5033
  const ContextPreviewDiagnostic = effect.Schema.Struct({
@@ -4829,6 +5083,7 @@ const ArtifactAgentHarness = effect.Schema.Literals([
4829
5083
  "ohmypi",
4830
5084
  "codex",
4831
5085
  "acp",
5086
+ "kimi-code",
4832
5087
  "user"
4833
5088
  ]);
4834
5089
  const ArtifactLifecycleState = effect.Schema.Literals([
@@ -5062,16 +5317,40 @@ const ACP_BEHAVIOR = {
5062
5317
  workAgentMode: "acp-host",
5063
5318
  readyTimeoutSeconds: 30
5064
5319
  };
5320
+ const KIMI_CODE_BEHAVIOR = {
5321
+ displayName: "Kimi Code",
5322
+ nativeCommands: [],
5323
+ executableName: "kimi",
5324
+ processNames: ["kimi"],
5325
+ launchCommandKind: "kimi-code-tui",
5326
+ deliveryKind: "pty-supervisor",
5327
+ readinessKind: "kimi-session-signal",
5328
+ transcriptKind: "kimi-wire-jsonl",
5329
+ sessionIdSource: "kimi-session-newest",
5330
+ contextLayerKind: "kimi-code",
5331
+ feedKind: "kimi_code",
5332
+ supportsPtySupervisor: true,
5333
+ supportsChannelsBridge: false,
5334
+ supportsConversationStreaming: true,
5335
+ supportsPatchProjection: false,
5336
+ usesRpcFifo: false,
5337
+ usesCodexHome: false,
5338
+ injectsPromptTimeMemory: false,
5339
+ workAgentMode: "kimi-code-tui",
5340
+ readyTimeoutSeconds: 60
5341
+ };
5065
5342
  const BEHAVIORS = {
5066
5343
  "claude-code": CLAUDE_CODE_BEHAVIOR,
5067
5344
  ohmypi: OHMYPI_BEHAVIOR,
5068
5345
  codex: CODEX_BEHAVIOR,
5069
- acp: ACP_BEHAVIOR
5346
+ acp: ACP_BEHAVIOR,
5347
+ "kimi-code": KIMI_CODE_BEHAVIOR
5070
5348
  };
5071
5349
  function getHarnessBehavior(harness) {
5072
5350
  if (harness === "ohmypi" || harness === "pi") return OHMYPI_BEHAVIOR;
5073
5351
  if (harness === "codex") return CODEX_BEHAVIOR;
5074
5352
  if (harness === "acp") return ACP_BEHAVIOR;
5353
+ if (harness === "kimi-code") return KIMI_CODE_BEHAVIOR;
5075
5354
  return CLAUDE_CODE_BEHAVIOR;
5076
5355
  }
5077
5356
  function getRuntimeBehavior(runtime) {
@@ -5285,7 +5564,8 @@ const TELEMETRY_PROPERTY_DOMAINS = {
5285
5564
  "god-view",
5286
5565
  "deacon",
5287
5566
  "sessions",
5288
- "awaiting-merge"
5567
+ "awaiting-merge",
5568
+ "workspace"
5289
5569
  ],
5290
5570
  decision_subject: ["agent", "conversation"],
5291
5571
  duration_bucket: [
@@ -5304,7 +5584,8 @@ const TELEMETRY_PROPERTY_DOMAINS = {
5304
5584
  "claude-code",
5305
5585
  "ohmypi",
5306
5586
  "codex",
5307
- "acp"
5587
+ "acp",
5588
+ "kimi-code"
5308
5589
  ],
5309
5590
  merge_kind: ["pipeline"],
5310
5591
  model_family: [
@@ -5818,29 +6099,11 @@ const COMPOSER_COMMAND_MANIFEST = [
5818
6099
  "aliases": [],
5819
6100
  "category": "Review"
5820
6101
  },
5821
- {
5822
- "id": "pan-review-scope",
5823
- "path": ["review", "scope"],
5824
- "display": "/pan review scope",
5825
- "description": "Set per-issue re-review scope (all, changed, or blockers) — which convoy reviewers re-run (PAN-1874)",
5826
- "args": [{
5827
- "name": "id",
5828
- "required": true,
5829
- "variadic": false
5830
- }, {
5831
- "name": "scope",
5832
- "required": true,
5833
- "variadic": false
5834
- }],
5835
- "options": [],
5836
- "aliases": [],
5837
- "category": "Review"
5838
- },
5839
6102
  {
5840
6103
  "id": "pan-review-restart",
5841
6104
  "path": ["review", "restart"],
5842
6105
  "display": "/pan review restart",
5843
- "description": "Kill running reviewers and dispatch fresh review pipeline",
6106
+ "description": "Resume review and re-dispatch reviewers missing a report",
5844
6107
  "args": [{
5845
6108
  "name": "id",
5846
6109
  "required": true,
@@ -5965,7 +6228,7 @@ const COMPOSER_COMMAND_MANIFEST = [
5965
6228
  },
5966
6229
  {
5967
6230
  "flags": "--harness <harness>",
5968
- "description": "Coding-agent harness: claude-code | pi | codex | acp (defaults to role/provider settings)",
6231
+ "description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code (defaults to role/provider settings)",
5969
6232
  "required": true,
5970
6233
  "valueHint": "harness"
5971
6234
  },
@@ -6069,6 +6332,24 @@ const COMPOSER_COMMAND_MANIFEST = [
6069
6332
  "aliases": [],
6070
6333
  "category": "Lifecycle"
6071
6334
  },
6335
+ {
6336
+ "id": "pan-answer",
6337
+ "path": ["answer"],
6338
+ "display": "/pan answer",
6339
+ "description": "Show a pending pane choice, or answer its numbered option",
6340
+ "args": [{
6341
+ "name": "id",
6342
+ "required": true,
6343
+ "variadic": false
6344
+ }, {
6345
+ "name": "option",
6346
+ "required": false,
6347
+ "variadic": false
6348
+ }],
6349
+ "options": [],
6350
+ "aliases": [],
6351
+ "category": "CLI"
6352
+ },
6072
6353
  {
6073
6354
  "id": "pan-monitor",
6074
6355
  "path": ["monitor"],
@@ -6140,6 +6421,20 @@ const COMPOSER_COMMAND_MANIFEST = [
6140
6421
  "aliases": [],
6141
6422
  "category": "Lifecycle"
6142
6423
  },
6424
+ {
6425
+ "id": "pan-reset-session",
6426
+ "path": ["reset-session"],
6427
+ "display": "/pan reset-session",
6428
+ "description": "Clear saved session pointers so the next start creates a fresh session",
6429
+ "args": [{
6430
+ "name": "id",
6431
+ "required": true,
6432
+ "variadic": false
6433
+ }],
6434
+ "options": [],
6435
+ "aliases": [],
6436
+ "category": "Lifecycle"
6437
+ },
6143
6438
  {
6144
6439
  "id": "pan-pause",
6145
6440
  "path": ["pause"],
@@ -6187,6 +6482,20 @@ const COMPOSER_COMMAND_MANIFEST = [
6187
6482
  "aliases": [],
6188
6483
  "category": "Lifecycle"
6189
6484
  },
6485
+ {
6486
+ "id": "pan-unstick",
6487
+ "path": ["unstick"],
6488
+ "display": "/pan unstick",
6489
+ "description": "Clear an issue stuck gate without resetting a merged lifecycle",
6490
+ "args": [{
6491
+ "name": "id",
6492
+ "required": true,
6493
+ "variadic": false
6494
+ }],
6495
+ "options": [],
6496
+ "aliases": [],
6497
+ "category": "CLI"
6498
+ },
6190
6499
  {
6191
6500
  "id": "pan-fork",
6192
6501
  "path": ["fork"],
@@ -6210,6 +6519,12 @@ const COMPOSER_COMMAND_MANIFEST = [
6210
6519
  "required": true,
6211
6520
  "valueHint": "path"
6212
6521
  },
6522
+ {
6523
+ "flags": "--project <key>",
6524
+ "description": "Project (yaml key or display name) for the new conversation; defaults to inheriting the source conversation's project",
6525
+ "required": true,
6526
+ "valueHint": "key"
6527
+ },
6213
6528
  {
6214
6529
  "flags": "--plain",
6215
6530
  "description": "Skip summary generation and copy raw conversation history",
@@ -6253,6 +6568,12 @@ const COMPOSER_COMMAND_MANIFEST = [
6253
6568
  "required": true,
6254
6569
  "valueHint": "path"
6255
6570
  },
6571
+ {
6572
+ "flags": "--project <key>",
6573
+ "description": "Project (yaml key or display name) for the new conversation; defaults to inheriting the source conversation's project",
6574
+ "required": true,
6575
+ "valueHint": "key"
6576
+ },
6256
6577
  {
6257
6578
  "flags": "--issue <id>",
6258
6579
  "description": "Issue ID to associate with the new conversation",
@@ -6571,9 +6892,15 @@ const COMPOSER_COMMAND_MANIFEST = [
6571
6892
  "required": false,
6572
6893
  "valueHint": null
6573
6894
  },
6895
+ {
6896
+ "flags": "--accept-ship",
6897
+ "description": "Accept a missed DoD row 7 (Version strings propagated) — recorded as an explicit override in the close-out record",
6898
+ "required": false,
6899
+ "valueHint": null
6900
+ },
6574
6901
  {
6575
6902
  "flags": "--accept-deploy",
6576
- "description": "Accept a missed DoD row 7 (Deployed) — recorded as an explicit override in the close-out record",
6903
+ "description": "Accept a missed DoD row 8 (Deployed) — recorded as an explicit override in the close-out record",
6577
6904
  "required": false,
6578
6905
  "valueHint": null
6579
6906
  },
@@ -6582,6 +6909,12 @@ const COMPOSER_COMMAND_MANIFEST = [
6582
6909
  "description": "Record an abandoned disposition (PAN-3211): skip the DoD gate and close without landing evidence. Operator-conversation only; cannot be combined with --accept-* flags",
6583
6910
  "required": true,
6584
6911
  "valueHint": "reason"
6912
+ },
6913
+ {
6914
+ "flags": "--residue <reason>",
6915
+ "description": "Record a residue disposition (PAN-3396): close stale convention PRs/MRs, skip the DoD gate with verified evidence, and mark terminal without merge claim. Operator-conversation only; cannot be combined with --abandon or --accept-* flags",
6916
+ "required": true,
6917
+ "valueHint": "reason"
6585
6918
  }
6586
6919
  ],
6587
6920
  "aliases": [],
@@ -6624,7 +6957,7 @@ const COMPOSER_COMMAND_MANIFEST = [
6624
6957
  },
6625
6958
  {
6626
6959
  "flags": "--harness <harness>",
6627
- "description": "Coding-agent harness: claude-code | pi | codex | acp (defaults to role/provider settings)",
6960
+ "description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code (defaults to role/provider settings)",
6628
6961
  "required": true,
6629
6962
  "valueHint": "harness"
6630
6963
  },
@@ -6690,7 +7023,7 @@ const COMPOSER_COMMAND_MANIFEST = [
6690
7023
  },
6691
7024
  {
6692
7025
  "flags": "--force",
6693
- "description": "Clear a paused agent gate and start anyway",
7026
+ "description": "Clear paused and pending-operator-decision gates and start anyway",
6694
7027
  "required": false,
6695
7028
  "valueHint": null
6696
7029
  },
@@ -6741,7 +7074,7 @@ const COMPOSER_COMMAND_MANIFEST = [
6741
7074
  },
6742
7075
  {
6743
7076
  "flags": "--harness <harness>",
6744
- "description": "Coding-agent harness: claude-code | pi | codex | acp (defaults to role/provider settings)",
7077
+ "description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code (defaults to role/provider settings)",
6745
7078
  "required": true,
6746
7079
  "valueHint": "harness"
6747
7080
  },
@@ -7390,17 +7723,32 @@ const COMPOSER_COMMAND_MANIFEST = [
7390
7723
  "display": "/pan workspace list",
7391
7724
  "description": "List all workspaces",
7392
7725
  "args": [],
7393
- "options": [{
7394
- "flags": "--json",
7395
- "description": "Output as JSON",
7396
- "required": false,
7397
- "valueHint": null
7398
- }, {
7399
- "flags": "--all",
7400
- "description": "List workspaces across all registered projects",
7401
- "required": false,
7402
- "valueHint": null
7403
- }],
7726
+ "options": [
7727
+ {
7728
+ "flags": "--json",
7729
+ "description": "Output as JSON",
7730
+ "required": false,
7731
+ "valueHint": null
7732
+ },
7733
+ {
7734
+ "flags": "--all",
7735
+ "description": "List workspaces across all registered projects",
7736
+ "required": false,
7737
+ "valueHint": null
7738
+ },
7739
+ {
7740
+ "flags": "--kind <kind>",
7741
+ "description": "Filter by workspace kind (main|issue|scratch), reading through the resolver",
7742
+ "required": true,
7743
+ "valueHint": "kind"
7744
+ },
7745
+ {
7746
+ "flags": "--archived",
7747
+ "description": "Include archived workspaces (only applies with --kind)",
7748
+ "required": false,
7749
+ "valueHint": null
7750
+ }
7751
+ ],
7404
7752
  "aliases": [],
7405
7753
  "category": "Workspace"
7406
7754
  },
@@ -7414,25 +7762,160 @@ const COMPOSER_COMMAND_MANIFEST = [
7414
7762
  "required": true,
7415
7763
  "variadic": false
7416
7764
  }],
7417
- "options": [{
7418
- "flags": "--force",
7419
- "description": "Force removal even with uncommitted changes",
7420
- "required": false,
7421
- "valueHint": null
7422
- }, {
7423
- "flags": "--project <path>",
7424
- "description": "Explicit project path (overrides registry)",
7425
- "required": true,
7426
- "valueHint": "path"
7427
- }],
7765
+ "options": [
7766
+ {
7767
+ "flags": "--force",
7768
+ "description": "Force removal even with uncommitted changes",
7769
+ "required": false,
7770
+ "valueHint": null
7771
+ },
7772
+ {
7773
+ "flags": "--project <path>",
7774
+ "description": "Explicit project path (overrides registry)",
7775
+ "required": true,
7776
+ "valueHint": "path"
7777
+ },
7778
+ {
7779
+ "flags": "--purge-memory",
7780
+ "description": "Also permanently delete the workspace's memory home (irreversible)",
7781
+ "required": false,
7782
+ "valueHint": null
7783
+ }
7784
+ ],
7428
7785
  "aliases": [],
7429
7786
  "category": "Workspace"
7430
7787
  },
7431
7788
  {
7432
- "id": "pan-workspace-render-devcontainer",
7433
- "path": ["workspace", "render-devcontainer"],
7434
- "display": "/pan workspace render-devcontainer",
7435
- "description": "Re-render <workspace>/.devcontainer/ from the project compose template",
7789
+ "id": "pan-workspace-new",
7790
+ "path": ["workspace", "new"],
7791
+ "display": "/pan workspace new",
7792
+ "description": "Create a scratch workspace (shared dir by default; --isolated for a git worktree)",
7793
+ "args": [{
7794
+ "name": "name",
7795
+ "required": true,
7796
+ "variadic": false
7797
+ }],
7798
+ "options": [
7799
+ {
7800
+ "flags": "--project <key>",
7801
+ "description": "Registered project key (defaults to the sole project, or the one resolved from cwd)",
7802
+ "required": true,
7803
+ "valueHint": "key"
7804
+ },
7805
+ {
7806
+ "flags": "--isolated",
7807
+ "description": "Create an isolated git worktree instead of sharing the project directory",
7808
+ "required": false,
7809
+ "valueHint": null
7810
+ },
7811
+ {
7812
+ "flags": "--parent-branch <branch>",
7813
+ "description": "Parent branch for the isolated worktree (default: inferred from the project's current branch)",
7814
+ "required": true,
7815
+ "valueHint": "branch"
7816
+ },
7817
+ {
7818
+ "flags": "--target-path <dir>",
7819
+ "description": "Target an existing directory as the workspace path (rejects --isolated)",
7820
+ "required": true,
7821
+ "valueHint": "dir"
7822
+ },
7823
+ {
7824
+ "flags": "--dry-run",
7825
+ "description": "Print the resolved intent as JSON and create nothing",
7826
+ "required": false,
7827
+ "valueHint": null
7828
+ }
7829
+ ],
7830
+ "aliases": [],
7831
+ "category": "Workspace"
7832
+ },
7833
+ {
7834
+ "id": "pan-workspace-main",
7835
+ "path": ["workspace", "main"],
7836
+ "display": "/pan workspace main",
7837
+ "description": "Resolve or create the project's singleton main workspace",
7838
+ "args": [],
7839
+ "options": [{
7840
+ "flags": "--project <key>",
7841
+ "description": "Registered project key (defaults to the sole project, or the one resolved from cwd)",
7842
+ "required": true,
7843
+ "valueHint": "key"
7844
+ }],
7845
+ "aliases": [],
7846
+ "category": "Workspace"
7847
+ },
7848
+ {
7849
+ "id": "pan-workspace-get",
7850
+ "path": ["workspace", "get"],
7851
+ "display": "/pan workspace get",
7852
+ "description": "Show a workspace row by id",
7853
+ "args": [{
7854
+ "name": "ws",
7855
+ "required": true,
7856
+ "variadic": false
7857
+ }],
7858
+ "options": [],
7859
+ "aliases": [],
7860
+ "category": "Workspace"
7861
+ },
7862
+ {
7863
+ "id": "pan-workspace-activate",
7864
+ "path": ["workspace", "activate"],
7865
+ "display": "/pan workspace activate",
7866
+ "description": "Touch a workspace's last-accessed time and print its layout hint",
7867
+ "args": [{
7868
+ "name": "ws",
7869
+ "required": true,
7870
+ "variadic": false
7871
+ }],
7872
+ "options": [],
7873
+ "aliases": [],
7874
+ "category": "Workspace"
7875
+ },
7876
+ {
7877
+ "id": "pan-workspace-archive",
7878
+ "path": ["workspace", "archive"],
7879
+ "display": "/pan workspace archive",
7880
+ "description": "Archive a workspace (reversible; refuses kind=main)",
7881
+ "args": [{
7882
+ "name": "ws",
7883
+ "required": true,
7884
+ "variadic": false
7885
+ }],
7886
+ "options": [],
7887
+ "aliases": [],
7888
+ "category": "Workspace"
7889
+ },
7890
+ {
7891
+ "id": "pan-workspace-relocate",
7892
+ "path": ["workspace", "relocate"],
7893
+ "display": "/pan workspace relocate",
7894
+ "description": "Point a workspace at a new path (refuses kind=issue; kind=main requires --force)",
7895
+ "args": [{
7896
+ "name": "ws",
7897
+ "required": true,
7898
+ "variadic": false
7899
+ }],
7900
+ "options": [{
7901
+ "flags": "--path <dir>",
7902
+ "description": "New path (must be an existing directory)",
7903
+ "required": true,
7904
+ "valueHint": "dir"
7905
+ }, {
7906
+ "flags": "--force",
7907
+ "description": "Allow relocating the main workspace, diverging it from projects.yaml",
7908
+ "required": false,
7909
+ "valueHint": null
7910
+ }],
7911
+ "aliases": [],
7912
+ "category": "Workspace"
7913
+ },
7914
+ {
7915
+ "id": "pan-workspace-render-devcontainer",
7916
+ "path": ["workspace", "render-devcontainer"],
7917
+ "display": "/pan workspace render-devcontainer",
7918
+ "description": "Re-render <workspace>/.devcontainer/ from the project compose template",
7436
7919
  "args": [{
7437
7920
  "name": "featureName",
7438
7921
  "required": true,
@@ -8061,10 +8544,10 @@ const COMPOSER_COMMAND_MANIFEST = [
8061
8544
  "valueHint": "id"
8062
8545
  },
8063
8546
  {
8064
- "flags": "--workspace <id>",
8065
- "description": "Workspace ID",
8547
+ "flags": "--workspace <id|name>",
8548
+ "description": "Workspace id or name",
8066
8549
  "required": true,
8067
- "valueHint": "id"
8550
+ "valueHint": "id|name"
8068
8551
  },
8069
8552
  {
8070
8553
  "flags": "--issue <id>",
@@ -8084,6 +8567,18 @@ const COMPOSER_COMMAND_MANIFEST = [
8084
8567
  "required": false,
8085
8568
  "valueHint": null
8086
8569
  },
8570
+ {
8571
+ "flags": "--global",
8572
+ "description": "Search across all registered projects instead of just one",
8573
+ "required": false,
8574
+ "valueHint": null
8575
+ },
8576
+ {
8577
+ "flags": "--target [path]",
8578
+ "description": "Search all workspaces whose path targets a directory (bare flag = cwd); mutually exclusive with --workspace/--issue/--global",
8579
+ "required": false,
8580
+ "valueHint": "path"
8581
+ },
8087
8582
  {
8088
8583
  "flags": "--include-archived",
8089
8584
  "description": "Include observations hidden by reset markers",
@@ -8110,23 +8605,106 @@ const COMPOSER_COMMAND_MANIFEST = [
8110
8605
  "id": "pan-memory-status",
8111
8606
  "path": ["memory", "status"],
8112
8607
  "display": "/pan memory status",
8113
- "description": "Show current memory status for an issue",
8608
+ "description": "Show current memory status for an issue, a workspace, or the current directory",
8114
8609
  "args": [{
8115
8610
  "name": "issue",
8116
- "required": true,
8611
+ "required": false,
8117
8612
  "variadic": false
8118
8613
  }],
8119
- "options": [{
8120
- "flags": "--project <id>",
8121
- "description": "Project ID",
8614
+ "options": [
8615
+ {
8616
+ "flags": "--project <id>",
8617
+ "description": "Project ID",
8618
+ "required": true,
8619
+ "valueHint": "id"
8620
+ },
8621
+ {
8622
+ "flags": "--workspace <id|name>",
8623
+ "description": "Workspace id or name instead of an issue positional",
8624
+ "required": true,
8625
+ "valueHint": "id|name"
8626
+ },
8627
+ {
8628
+ "flags": "--history <n>",
8629
+ "description": "Also print up to N archived statuses, newest first (max 50)",
8630
+ "required": true,
8631
+ "valueHint": "n"
8632
+ },
8633
+ {
8634
+ "flags": "--json",
8635
+ "description": "Output JSON",
8636
+ "required": false,
8637
+ "valueHint": null
8638
+ }
8639
+ ],
8640
+ "aliases": [],
8641
+ "category": "Observation"
8642
+ },
8643
+ {
8644
+ "id": "pan-memory-timeline",
8645
+ "path": ["memory", "timeline"],
8646
+ "display": "/pan memory timeline",
8647
+ "description": "Print chronological observations for a workspace or the current directory",
8648
+ "args": [],
8649
+ "options": [
8650
+ {
8651
+ "flags": "--workspace <id|name>",
8652
+ "description": "Workspace id or name (defaults to the workspace owning the cwd)",
8653
+ "required": true,
8654
+ "valueHint": "id|name"
8655
+ },
8656
+ {
8657
+ "flags": "--days <n>",
8658
+ "description": "Most recent N days, today counting as day 1 (default 7)",
8659
+ "required": true,
8660
+ "valueHint": "n"
8661
+ },
8662
+ {
8663
+ "flags": "--limit <n>",
8664
+ "description": "Maximum observation rows",
8665
+ "required": true,
8666
+ "valueHint": "n"
8667
+ },
8668
+ {
8669
+ "flags": "--json",
8670
+ "description": "Output JSON",
8671
+ "required": false,
8672
+ "valueHint": null
8673
+ }
8674
+ ],
8675
+ "aliases": [],
8676
+ "category": "Observation"
8677
+ },
8678
+ {
8679
+ "id": "pan-memory-read",
8680
+ "path": ["memory", "read"],
8681
+ "display": "/pan memory read",
8682
+ "description": "Print a file from a workspace's memory home (path is relative to that home)",
8683
+ "args": [{
8684
+ "name": "path",
8122
8685
  "required": true,
8123
- "valueHint": "id"
8124
- }, {
8125
- "flags": "--json",
8126
- "description": "Output JSON",
8127
- "required": false,
8128
- "valueHint": null
8686
+ "variadic": false
8129
8687
  }],
8688
+ "options": [
8689
+ {
8690
+ "flags": "--workspace <id|name>",
8691
+ "description": "Workspace id or name (defaults to the workspace owning the cwd)",
8692
+ "required": true,
8693
+ "valueHint": "id|name"
8694
+ },
8695
+ {
8696
+ "flags": "--from <n>",
8697
+ "description": "First line to print, 1-based",
8698
+ "required": true,
8699
+ "valueHint": "n"
8700
+ },
8701
+ {
8702
+ "flags": "--lines <n>",
8703
+ "description": "Maximum number of lines to print",
8704
+ "required": true,
8705
+ "valueHint": "n"
8706
+ }
8707
+ ],
8130
8708
  "aliases": [],
8131
8709
  "category": "Observation"
8132
8710
  },
@@ -8177,10 +8755,10 @@ const COMPOSER_COMMAND_MANIFEST = [
8177
8755
  "id": "pan-memory-summary",
8178
8756
  "path": ["memory", "summary"],
8179
8757
  "display": "/pan memory summary",
8180
- "description": "Generate a daily markdown memory summary",
8758
+ "description": "Generate a daily markdown memory summary for an issue, a workspace, or the current directory",
8181
8759
  "args": [{
8182
8760
  "name": "issue",
8183
- "required": true,
8761
+ "required": false,
8184
8762
  "variadic": false
8185
8763
  }],
8186
8764
  "options": [
@@ -8190,6 +8768,12 @@ const COMPOSER_COMMAND_MANIFEST = [
8190
8768
  "required": true,
8191
8769
  "valueHint": "id"
8192
8770
  },
8771
+ {
8772
+ "flags": "--workspace <id|name>",
8773
+ "description": "Workspace id or name instead of an issue positional",
8774
+ "required": true,
8775
+ "valueHint": "id|name"
8776
+ },
8193
8777
  {
8194
8778
  "flags": "--date <yyyy-mm-dd>",
8195
8779
  "description": "Summary date",
@@ -8226,6 +8810,136 @@ const COMPOSER_COMMAND_MANIFEST = [
8226
8810
  "aliases": [],
8227
8811
  "category": "Observation"
8228
8812
  },
8813
+ {
8814
+ "id": "pan-memory-backfill",
8815
+ "path": ["memory", "backfill"],
8816
+ "display": "/pan memory backfill",
8817
+ "description": "Backfill memory observations from historical Claude Code JSONL transcripts",
8818
+ "args": [],
8819
+ "options": [
8820
+ {
8821
+ "flags": "--workspace <id>",
8822
+ "description": "Only backfill sessions resolved to this workspace id",
8823
+ "required": true,
8824
+ "valueHint": "id"
8825
+ },
8826
+ {
8827
+ "flags": "--project <id>",
8828
+ "description": "Only backfill sessions resolved to this project id",
8829
+ "required": true,
8830
+ "valueHint": "id"
8831
+ },
8832
+ {
8833
+ "flags": "--dry-run",
8834
+ "description": "Report matched sessions without extracting or writing anything",
8835
+ "required": false,
8836
+ "valueHint": null
8837
+ },
8838
+ {
8839
+ "flags": "--json",
8840
+ "description": "Output JSON",
8841
+ "required": false,
8842
+ "valueHint": null
8843
+ }
8844
+ ],
8845
+ "aliases": [],
8846
+ "category": "Observation"
8847
+ },
8848
+ {
8849
+ "id": "pan-memory-pin",
8850
+ "path": ["memory", "pin"],
8851
+ "display": "/pan memory pin",
8852
+ "description": "Pin a doc for prompt-time memory injection (path is stored project-relative)",
8853
+ "args": [{
8854
+ "name": "doc-path",
8855
+ "required": true,
8856
+ "variadic": false
8857
+ }],
8858
+ "options": [
8859
+ {
8860
+ "flags": "--project <id>",
8861
+ "description": "Project key to pin at project scope",
8862
+ "required": true,
8863
+ "valueHint": "id"
8864
+ },
8865
+ {
8866
+ "flags": "--workspace <id>",
8867
+ "description": "Workspace id to pin at workspace scope (overrides --project)",
8868
+ "required": true,
8869
+ "valueHint": "id"
8870
+ },
8871
+ {
8872
+ "flags": "--json",
8873
+ "description": "Output JSON",
8874
+ "required": false,
8875
+ "valueHint": null
8876
+ }
8877
+ ],
8878
+ "aliases": [],
8879
+ "category": "Observation"
8880
+ },
8881
+ {
8882
+ "id": "pan-memory-unpin",
8883
+ "path": ["memory", "unpin"],
8884
+ "display": "/pan memory unpin",
8885
+ "description": "Remove a pinned doc",
8886
+ "args": [{
8887
+ "name": "doc-path",
8888
+ "required": true,
8889
+ "variadic": false
8890
+ }],
8891
+ "options": [
8892
+ {
8893
+ "flags": "--project <id>",
8894
+ "description": "Project key the pin was made at project scope",
8895
+ "required": true,
8896
+ "valueHint": "id"
8897
+ },
8898
+ {
8899
+ "flags": "--workspace <id>",
8900
+ "description": "Workspace id the pin was made at workspace scope (overrides --project)",
8901
+ "required": true,
8902
+ "valueHint": "id"
8903
+ },
8904
+ {
8905
+ "flags": "--json",
8906
+ "description": "Output JSON",
8907
+ "required": false,
8908
+ "valueHint": null
8909
+ }
8910
+ ],
8911
+ "aliases": [],
8912
+ "category": "Observation"
8913
+ },
8914
+ {
8915
+ "id": "pan-memory-pins",
8916
+ "path": ["memory", "pins"],
8917
+ "display": "/pan memory pins",
8918
+ "description": "List pinned docs for a project or workspace",
8919
+ "args": [],
8920
+ "options": [
8921
+ {
8922
+ "flags": "--project <id>",
8923
+ "description": "Project key to list project-scoped pins for",
8924
+ "required": true,
8925
+ "valueHint": "id"
8926
+ },
8927
+ {
8928
+ "flags": "--workspace <id>",
8929
+ "description": "Workspace id to list workspace-scoped pins for (overrides --project)",
8930
+ "required": true,
8931
+ "valueHint": "id"
8932
+ },
8933
+ {
8934
+ "flags": "--json",
8935
+ "description": "Output JSON",
8936
+ "required": false,
8937
+ "valueHint": null
8938
+ }
8939
+ ],
8940
+ "aliases": [],
8941
+ "category": "Observation"
8942
+ },
8229
8943
  {
8230
8944
  "id": "pan-memory-config",
8231
8945
  "path": ["memory", "config"],
@@ -8464,7 +9178,12 @@ const COMPOSER_COMMAND_MANIFEST = [
8464
9178
  "required": true,
8465
9179
  "variadic": false
8466
9180
  }],
8467
- "options": [],
9181
+ "options": [{
9182
+ "flags": "--project <key>",
9183
+ "description": "Resolve the order book in another registered project",
9184
+ "required": true,
9185
+ "valueHint": "key"
9186
+ }],
8468
9187
  "aliases": [],
8469
9188
  "category": "Flywheel"
8470
9189
  },
@@ -8474,7 +9193,12 @@ const COMPOSER_COMMAND_MANIFEST = [
8474
9193
  "display": "/pan orders list",
8475
9194
  "description": "List order books",
8476
9195
  "args": [],
8477
- "options": [],
9196
+ "options": [{
9197
+ "flags": "--project <key>",
9198
+ "description": "Resolve the order book in another registered project",
9199
+ "required": true,
9200
+ "valueHint": "key"
9201
+ }],
8478
9202
  "aliases": [],
8479
9203
  "category": "Flywheel"
8480
9204
  },
@@ -8488,7 +9212,12 @@ const COMPOSER_COMMAND_MANIFEST = [
8488
9212
  "required": true,
8489
9213
  "variadic": false
8490
9214
  }],
8491
- "options": [],
9215
+ "options": [{
9216
+ "flags": "--project <key>",
9217
+ "description": "Resolve the order book in another registered project",
9218
+ "required": true,
9219
+ "valueHint": "key"
9220
+ }],
8492
9221
  "aliases": [],
8493
9222
  "category": "Flywheel"
8494
9223
  },
@@ -8524,6 +9253,12 @@ const COMPOSER_COMMAND_MANIFEST = [
8524
9253
  "description": "Require PRD re-verification before pickup",
8525
9254
  "required": false,
8526
9255
  "valueHint": null
9256
+ },
9257
+ {
9258
+ "flags": "--project <key>",
9259
+ "description": "Resolve the order book in another registered project",
9260
+ "required": true,
9261
+ "valueHint": "key"
8527
9262
  }
8528
9263
  ],
8529
9264
  "aliases": [],
@@ -8543,7 +9278,12 @@ const COMPOSER_COMMAND_MANIFEST = [
8543
9278
  "required": true,
8544
9279
  "variadic": false
8545
9280
  }],
8546
- "options": [],
9281
+ "options": [{
9282
+ "flags": "--project <key>",
9283
+ "description": "Resolve the order book in another registered project",
9284
+ "required": true,
9285
+ "valueHint": "key"
9286
+ }],
8547
9287
  "aliases": [],
8548
9288
  "category": "Flywheel"
8549
9289
  },
@@ -8561,16 +9301,44 @@ const COMPOSER_COMMAND_MANIFEST = [
8561
9301
  "required": true,
8562
9302
  "variadic": false
8563
9303
  }],
8564
- "options": [{
8565
- "flags": "--lane <lane>",
8566
- "description": "Target lane: A or B",
9304
+ "options": [
9305
+ {
9306
+ "flags": "--lane <lane>",
9307
+ "description": "Target lane: A or B",
9308
+ "required": true,
9309
+ "valueHint": "lane"
9310
+ },
9311
+ {
9312
+ "flags": "--order <n>",
9313
+ "description": "One-based position in the target lane",
9314
+ "required": true,
9315
+ "valueHint": "n"
9316
+ },
9317
+ {
9318
+ "flags": "--project <key>",
9319
+ "description": "Resolve the order book in another registered project",
9320
+ "required": true,
9321
+ "valueHint": "key"
9322
+ }
9323
+ ],
9324
+ "aliases": [],
9325
+ "category": "Flywheel"
9326
+ },
9327
+ {
9328
+ "id": "pan-orders-queue",
9329
+ "path": ["orders", "queue"],
9330
+ "display": "/pan orders queue",
9331
+ "description": "Mark a draft order book ready for dispatch",
9332
+ "args": [{
9333
+ "name": "id",
8567
9334
  "required": true,
8568
- "valueHint": "lane"
8569
- }, {
8570
- "flags": "--order <n>",
8571
- "description": "One-based position in the target lane",
9335
+ "variadic": false
9336
+ }],
9337
+ "options": [{
9338
+ "flags": "--project <key>",
9339
+ "description": "Resolve the order book in another registered project",
8572
9340
  "required": true,
8573
- "valueHint": "n"
9341
+ "valueHint": "key"
8574
9342
  }],
8575
9343
  "aliases": [],
8576
9344
  "category": "Flywheel"
@@ -8585,10 +9353,59 @@ const COMPOSER_COMMAND_MANIFEST = [
8585
9353
  "required": true,
8586
9354
  "variadic": false
8587
9355
  }],
8588
- "options": [],
9356
+ "options": [{
9357
+ "flags": "--project <key>",
9358
+ "description": "Resolve the order book in another registered project",
9359
+ "required": true,
9360
+ "valueHint": "key"
9361
+ }],
8589
9362
  "aliases": [],
8590
9363
  "category": "Flywheel"
8591
9364
  },
9365
+ {
9366
+ "id": "pan-parked",
9367
+ "path": ["parked"],
9368
+ "display": "/pan parked",
9369
+ "description": "List every issue parked in a stall orbit (stuck flags, gates, failed merges, zombies), oldest first, with why + release condition",
9370
+ "args": [],
9371
+ "options": [{
9372
+ "flags": "--json",
9373
+ "description": "Print the raw parked rows as JSON",
9374
+ "required": false,
9375
+ "valueHint": null
9376
+ }],
9377
+ "aliases": [],
9378
+ "category": "CLI"
9379
+ },
9380
+ {
9381
+ "id": "pan-parked-ack",
9382
+ "path": ["parked", "ack"],
9383
+ "display": "/pan parked ack",
9384
+ "description": "Batch-acknowledge parked rows (default orbit: needs-you), then print the flywheel hand-off",
9385
+ "args": [],
9386
+ "options": [
9387
+ {
9388
+ "flags": "--orbit <orbit>",
9389
+ "description": "Parked orbit to acknowledge",
9390
+ "required": true,
9391
+ "valueHint": "orbit"
9392
+ },
9393
+ {
9394
+ "flags": "--older-than <days>",
9395
+ "description": "Only rows parked at least this many days",
9396
+ "required": true,
9397
+ "valueHint": "days"
9398
+ },
9399
+ {
9400
+ "flags": "--dry-run",
9401
+ "description": "List what would be acknowledged without writing",
9402
+ "required": false,
9403
+ "valueHint": null
9404
+ }
9405
+ ],
9406
+ "aliases": [],
9407
+ "category": "CLI"
9408
+ },
8592
9409
  {
8593
9410
  "id": "pan-docs",
8594
9411
  "path": ["docs"],
@@ -8764,6 +9581,29 @@ const COMPOSER_COMMAND_MANIFEST = [
8764
9581
  "aliases": [],
8765
9582
  "category": "Admin"
8766
9583
  },
9584
+ {
9585
+ "id": "pan-admin-state-backfill-agents",
9586
+ "path": [
9587
+ "admin",
9588
+ "state",
9589
+ "backfill-agents"
9590
+ ],
9591
+ "display": "/pan admin state backfill-agents",
9592
+ "description": "Reconstruct durable agent runtime records from local and retained state",
9593
+ "args": [{
9594
+ "name": "project",
9595
+ "required": false,
9596
+ "variadic": false
9597
+ }],
9598
+ "options": [{
9599
+ "flags": "--dry-run",
9600
+ "description": "Report the records and sessions that would be written",
9601
+ "required": false,
9602
+ "valueHint": null
9603
+ }],
9604
+ "aliases": [],
9605
+ "category": "Admin"
9606
+ },
8767
9607
  {
8768
9608
  "id": "pan-admin-reconcile-labels",
8769
9609
  "path": ["admin", "reconcile-labels"],
@@ -8779,6 +9619,35 @@ const COMPOSER_COMMAND_MANIFEST = [
8779
9619
  "aliases": [],
8780
9620
  "category": "Admin"
8781
9621
  },
9622
+ {
9623
+ "id": "pan-admin-migrate-legacy-agent-dirs",
9624
+ "path": ["admin", "migrate-legacy-agent-dirs"],
9625
+ "display": "/pan admin migrate-legacy-agent-dirs",
9626
+ "description": "Copy pre-rebrand conv-* agent dirs into the configured Overdeck home without overwriting",
9627
+ "args": [],
9628
+ "options": [],
9629
+ "aliases": [],
9630
+ "category": "Admin"
9631
+ },
9632
+ {
9633
+ "id": "pan-admin-seed-uat-fixtures",
9634
+ "path": ["admin", "seed-uat-fixtures"],
9635
+ "display": "/pan admin seed-uat-fixtures",
9636
+ "description": "Seed the obviously-fake FIX-1 issue fixture into a workspace container for UI UAT. Host mode: `pan admin seed-uat-fixtures <issue-id>` seeds and restarts that issue's workspace container from the host. `--local` runs the seed itself against the current OVERDECK_HOME — used by the host wrapper, or manually inside a container.",
9637
+ "args": [{
9638
+ "name": "issue-id",
9639
+ "required": false,
9640
+ "variadic": false
9641
+ }],
9642
+ "options": [{
9643
+ "flags": "--local",
9644
+ "description": "Seed the current (container-local) OVERDECK_HOME directly, without a host wrapper step",
9645
+ "required": false,
9646
+ "valueHint": null
9647
+ }],
9648
+ "aliases": [],
9649
+ "category": "Admin"
9650
+ },
8782
9651
  {
8783
9652
  "id": "pan-admin-cloister",
8784
9653
  "path": ["admin", "cloister"],
@@ -8977,28 +9846,6 @@ const COMPOSER_COMMAND_MANIFEST = [
8977
9846
  "aliases": [],
8978
9847
  "category": "Admin"
8979
9848
  },
8980
- {
8981
- "id": "pan-admin-specialists-discovery-ready",
8982
- "path": [
8983
- "admin",
8984
- "specialists",
8985
- "discovery-ready"
8986
- ],
8987
- "display": "/pan admin specialists discovery-ready",
8988
- "description": "Signal that the review parent finished shared discovery — forks + launches the convoy (PAN-1862)",
8989
- "args": [{
8990
- "name": "type",
8991
- "required": true,
8992
- "variadic": false
8993
- }, {
8994
- "name": "issueId",
8995
- "required": true,
8996
- "variadic": false
8997
- }],
8998
- "options": [],
8999
- "aliases": [],
9000
- "category": "Admin"
9001
- },
9002
9849
  {
9003
9850
  "id": "pan-admin-specialists-done",
9004
9851
  "path": [
@@ -9037,16 +9884,22 @@ const COMPOSER_COMMAND_MANIFEST = [
9037
9884
  "valueHint": "notes"
9038
9885
  },
9039
9886
  {
9040
- "flags": "--run-id <runId>",
9041
- "description": "Review cycle ID used to deduplicate review feedback",
9887
+ "flags": "--uat-status <status>",
9888
+ "description": "Test only: required browser UAT result (passed or failed)",
9042
9889
  "required": true,
9043
- "valueHint": "runId"
9890
+ "valueHint": "status"
9891
+ },
9892
+ {
9893
+ "flags": "--uat-notes <notes>",
9894
+ "description": "Test only: browser UAT evidence or blocking condition",
9895
+ "required": true,
9896
+ "valueHint": "notes"
9044
9897
  },
9045
9898
  {
9046
- "flags": "--reviewers <verdicts>",
9047
- "description": "PAN-1862 (review only): per-reviewer verdicts, e.g. \"security=passed,correctness=blocked\"",
9899
+ "flags": "--run-id <runId>",
9900
+ "description": "Review cycle ID used to deduplicate review feedback",
9048
9901
  "required": true,
9049
- "valueHint": "verdicts"
9902
+ "valueHint": "runId"
9050
9903
  }
9051
9904
  ],
9052
9905
  "aliases": [],
@@ -9411,6 +10264,30 @@ const COMPOSER_COMMAND_MANIFEST = [
9411
10264
  "aliases": [],
9412
10265
  "category": "Admin"
9413
10266
  },
10267
+ {
10268
+ "id": "pan-admin-db-rebuild-workspaces",
10269
+ "path": [
10270
+ "admin",
10271
+ "db",
10272
+ "rebuild-workspaces"
10273
+ ],
10274
+ "display": "/pan admin db rebuild-workspaces",
10275
+ "description": "Rebuild the projects/workspaces tables from projects.yaml, worktree scan, and memory-home identity records (PAN-1990)",
10276
+ "args": [],
10277
+ "options": [{
10278
+ "flags": "--dry-run",
10279
+ "description": "Show what would be created without writing",
10280
+ "required": false,
10281
+ "valueHint": null
10282
+ }, {
10283
+ "flags": "--verbose",
10284
+ "description": "Log each processed workspace",
10285
+ "required": false,
10286
+ "valueHint": null
10287
+ }],
10288
+ "aliases": [],
10289
+ "category": "Admin"
10290
+ },
9414
10291
  {
9415
10292
  "id": "pan-admin-db-gc-agents",
9416
10293
  "path": [
@@ -10104,6 +10981,24 @@ const COMPOSER_COMMAND_MANIFEST = [
10104
10981
  "aliases": ["transcript"],
10105
10982
  "category": "Conversation"
10106
10983
  },
10984
+ {
10985
+ "id": "pan-conversations-move",
10986
+ "path": ["conversations", "move"],
10987
+ "display": "/pan conversations move",
10988
+ "description": "Reassign a conversation to a different project (exact name, then fuzzy title match)",
10989
+ "args": [{
10990
+ "name": "query",
10991
+ "required": true,
10992
+ "variadic": false
10993
+ }, {
10994
+ "name": "projectKey",
10995
+ "required": true,
10996
+ "variadic": false
10997
+ }],
10998
+ "options": [],
10999
+ "aliases": [],
11000
+ "category": "Conversation"
11001
+ },
10107
11002
  {
10108
11003
  "id": "pan-conversations-current",
10109
11004
  "path": ["conversations", "current"],
@@ -10717,7 +11612,7 @@ const COMPOSER_COMMAND_MANIFEST = [
10717
11612
  "id": "pan-flywheel-report",
10718
11613
  "path": ["flywheel", "report"],
10719
11614
  "display": "/pan flywheel report",
10720
- "description": "Finalize the active Flywheel run: write report.md, commit FLYWHEEL-STATE.md changes, and clear the active-run gate. Refuses to run while the orchestrator session is alive (pause or abort first).",
11615
+ "description": "Finalize the active Flywheel run: write report.md, compact over-threshold FLYWHEEL-STATE.md history, commit State changes, and clear the active-run gate. Refuses to run while the orchestrator session is alive (pause or abort first).",
10721
11616
  "args": [],
10722
11617
  "options": [{
10723
11618
  "flags": "--force",
@@ -10828,7 +11723,7 @@ const COMPOSER_COMMAND_MANIFEST = [
10828
11723
  },
10829
11724
  {
10830
11725
  "flags": "--agent-harness <harness>",
10831
- "description": "Agent harness: claude-code, pi, codex, acp, or user",
11726
+ "description": "Agent harness: claude-code, pi, ohmypi, codex, acp, kimi-code, or user",
10832
11727
  "required": true,
10833
11728
  "valueHint": "harness"
10834
11729
  },
@@ -11403,6 +12298,30 @@ const COMPOSER_COMMAND_MANIFEST = [
11403
12298
  "aliases": [],
11404
12299
  "category": "Project"
11405
12300
  },
12301
+ {
12302
+ "id": "pan-project-add-target",
12303
+ "path": ["project", "add-target"],
12304
+ "display": "/pan project add-target",
12305
+ "description": "Add a secondary target path for a registered project",
12306
+ "args": [{
12307
+ "name": "project",
12308
+ "required": true,
12309
+ "variadic": false
12310
+ }],
12311
+ "options": [{
12312
+ "flags": "--path <path>",
12313
+ "description": "Target path to add",
12314
+ "required": true,
12315
+ "valueHint": "path"
12316
+ }, {
12317
+ "flags": "--primary",
12318
+ "description": "Make this the primary target (demotes any existing primary)",
12319
+ "required": false,
12320
+ "valueHint": null
12321
+ }],
12322
+ "aliases": [],
12323
+ "category": "Project"
12324
+ },
11406
12325
  {
11407
12326
  "id": "pan-projects",
11408
12327
  "path": ["projects"],
@@ -11523,6 +12442,30 @@ const COMPOSER_COMMAND_MANIFEST = [
11523
12442
  "aliases": [],
11524
12443
  "category": "Project"
11525
12444
  },
12445
+ {
12446
+ "id": "pan-projects-add-target",
12447
+ "path": ["projects", "add-target"],
12448
+ "display": "/pan projects add-target",
12449
+ "description": "Add a secondary target path for a registered project",
12450
+ "args": [{
12451
+ "name": "project",
12452
+ "required": true,
12453
+ "variadic": false
12454
+ }],
12455
+ "options": [{
12456
+ "flags": "--path <path>",
12457
+ "description": "Target path to add",
12458
+ "required": true,
12459
+ "valueHint": "path"
12460
+ }, {
12461
+ "flags": "--primary",
12462
+ "description": "Make this the primary target (demotes any existing primary)",
12463
+ "required": false,
12464
+ "valueHint": null
12465
+ }],
12466
+ "aliases": [],
12467
+ "category": "Project"
12468
+ },
11526
12469
  {
11527
12470
  "id": "pan-health",
11528
12471
  "path": ["health"],
@@ -11933,6 +12876,106 @@ const COMPOSER_COMMAND_VARIANTS = [
11933
12876
  }
11934
12877
  ];
11935
12878
  //#endregion
12879
+ //#region src/hook-inventory.ts
12880
+ const HOOK_INVENTORY = [
12881
+ {
12882
+ name: "PreToolUse",
12883
+ wired: true,
12884
+ color: "#00d4ff"
12885
+ },
12886
+ {
12887
+ name: "PostToolUse",
12888
+ wired: true,
12889
+ color: "#39ff14"
12890
+ },
12891
+ {
12892
+ name: "PostToolUseFailure",
12893
+ wired: true,
12894
+ color: "#ff4444"
12895
+ },
12896
+ {
12897
+ name: "Stop",
12898
+ wired: true,
12899
+ color: "#ff2d7c"
12900
+ },
12901
+ {
12902
+ name: "SessionStart",
12903
+ wired: true,
12904
+ color: "#9d4edd"
12905
+ },
12906
+ {
12907
+ name: "Notification",
12908
+ wired: true,
12909
+ color: "#ffb800"
12910
+ },
12911
+ {
12912
+ name: "UserPromptSubmit",
12913
+ wired: true,
12914
+ color: "#00d4ff"
12915
+ },
12916
+ {
12917
+ name: "PreCompact",
12918
+ wired: true,
12919
+ color: "#ff7700"
12920
+ },
12921
+ {
12922
+ name: "PostCompact",
12923
+ wired: true,
12924
+ color: "#ff7700"
12925
+ },
12926
+ {
12927
+ name: "PermissionRequest",
12928
+ wired: true,
12929
+ color: "#ffb800"
12930
+ },
12931
+ {
12932
+ name: "SessionEnd",
12933
+ wired: false
12934
+ },
12935
+ {
12936
+ name: "SubagentStart",
12937
+ wired: false
12938
+ },
12939
+ {
12940
+ name: "SubagentStop",
12941
+ wired: false
12942
+ },
12943
+ {
12944
+ name: "StopFailure",
12945
+ wired: false
12946
+ },
12947
+ {
12948
+ name: "PermissionDenied",
12949
+ wired: false
12950
+ },
12951
+ {
12952
+ name: "TaskCreated",
12953
+ wired: false
12954
+ },
12955
+ {
12956
+ name: "TaskCompleted",
12957
+ wired: false
12958
+ },
12959
+ {
12960
+ name: "TeammateIdle",
12961
+ wired: false
12962
+ },
12963
+ {
12964
+ name: "ConfigChange",
12965
+ wired: false
12966
+ },
12967
+ {
12968
+ name: "WorktreeCreate",
12969
+ wired: false
12970
+ },
12971
+ {
12972
+ name: "InstructionsLoaded",
12973
+ wired: false
12974
+ }
12975
+ ];
12976
+ const WIRED_HOOK_INVENTORY = HOOK_INVENTORY.filter((hook) => hook.wired);
12977
+ const WIRED_HOOK_NAMES = WIRED_HOOK_INVENTORY.map((hook) => hook.name);
12978
+ //#endregion
11936
12979
  exports.ACP_BEHAVIOR = ACP_BEHAVIOR;
11937
12980
  exports.Activity = Activity;
11938
12981
  exports.ActivityDetailedEvent = ActivityDetailedEvent;
@@ -11952,6 +12995,7 @@ exports.AgentHealthKind = AgentHealthKind;
11952
12995
  exports.AgentHealthSnapshot = AgentHealthSnapshot;
11953
12996
  exports.AgentHealthStatus = AgentHealthStatus;
11954
12997
  exports.AgentHeartbeatDeadEvent = AgentHeartbeatDeadEvent;
12998
+ exports.AgentHookFiredEvent = AgentHookFiredEvent;
11955
12999
  exports.AgentId = AgentId;
11956
13000
  exports.AgentMessageReceivedEvent = AgentMessageReceivedEvent;
11957
13001
  exports.AgentModelSetEvent = AgentModelSetEvent;
@@ -12029,6 +13073,7 @@ exports.ConversationCostSummary = ConversationCostSummary;
12029
13073
  exports.ConversationCreatedEvent = ConversationCreatedEvent;
12030
13074
  exports.ConversationEvent = ConversationEvent;
12031
13075
  exports.ConversationFilter = ConversationFilter;
13076
+ exports.ConversationMovedEvent = ConversationMovedEvent;
12032
13077
  exports.ConversationPermissionChangedEvent = ConversationPermissionChangedEvent;
12033
13078
  exports.ConversationResponse = ConversationResponse;
12034
13079
  exports.ConversationTitleChangedEvent = ConversationTitleChangedEvent;
@@ -12096,6 +13141,7 @@ exports.GetSnapshotRpc = GetSnapshotRpc;
12096
13141
  exports.GetWorkspaceDetailRpc = GetWorkspaceDetailRpc;
12097
13142
  exports.GlobalContextLayerRecord = GlobalContextLayerRecord;
12098
13143
  exports.GlobalContextLayerTarget = GlobalContextLayerTarget;
13144
+ exports.HOOK_INVENTORY = HOOK_INVENTORY;
12099
13145
  exports.HealthReason = HealthReason;
12100
13146
  exports.HealthState = HealthState;
12101
13147
  exports.HostHealthMetrics = HostHealthMetrics;
@@ -12109,6 +13155,8 @@ exports.IssueStatusChangedEvent = IssueStatusChangedEvent;
12109
13155
  exports.IssueTransitionedEvent = IssueTransitionedEvent;
12110
13156
  exports.IssuesSnapshotEvent = IssuesSnapshotEvent;
12111
13157
  exports.IssuesUpdatedEvent = IssuesUpdatedEvent;
13158
+ exports.KIMI_CODE_BEHAVIOR = KIMI_CODE_BEHAVIOR;
13159
+ exports.KNOWN_HARNESSES = KNOWN_HARNESSES;
12112
13160
  exports.LegacySystemHealthSummary = LegacySystemHealthSummary;
12113
13161
  exports.LegacyWebhookRelaySummary = LegacyWebhookRelaySummary;
12114
13162
  exports.LinearMcpAuthCallbackRelayedEvent = LinearMcpAuthCallbackRelayedEvent;
@@ -12122,6 +13170,7 @@ exports.MAX_CHANNEL_REPLY_ARTIFACT_REFS = MAX_CHANNEL_REPLY_ARTIFACT_REFS;
12122
13170
  exports.MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH = MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH;
12123
13171
  exports.MAX_CHANNEL_REPLY_SUMMARY_LENGTH = MAX_CHANNEL_REPLY_SUMMARY_LENGTH;
12124
13172
  exports.MEMBERSHIP_UNAVAILABLE_REASONS = MEMBERSHIP_UNAVAILABLE_REASONS;
13173
+ exports.MemoryAgentRole = MemoryAgentRole;
12125
13174
  exports.MemoryHealthChangedEvent = MemoryHealthChangedEvent;
12126
13175
  exports.MemoryIdentity = MemoryIdentity;
12127
13176
  exports.MemoryObservation = MemoryObservation;
@@ -12170,6 +13219,9 @@ exports.ProjectSessionTree = ProjectSessionTree;
12170
13219
  exports.ProposedPlan = ProposedPlan;
12171
13220
  exports.RagDecision = RagDecision;
12172
13221
  exports.RagDecisionSource = RagDecisionSource;
13222
+ exports.ReadFileAtPathInput = ReadFileAtPathInput;
13223
+ exports.ReadFileAtPathResult = ReadFileAtPathResult;
13224
+ exports.ReadFileAtPathRpc = ReadFileAtPathRpc;
12173
13225
  exports.ReadWorkspaceFileInput = ReadWorkspaceFileInput;
12174
13226
  exports.ReadWorkspaceFileResult = ReadWorkspaceFileResult;
12175
13227
  exports.ReadWorkspaceFileRpc = ReadWorkspaceFileRpc;
@@ -12193,6 +13245,9 @@ exports.ReviewSpecialistTimedOutEvent = ReviewSpecialistTimedOutEvent;
12193
13245
  exports.ReviewStatusChangedEvent = ReviewStatusChangedEvent;
12194
13246
  exports.ReviewStatusSnapshot = ReviewStatusSnapshot;
12195
13247
  exports.ReviewStatusValue = ReviewStatusValue;
13248
+ exports.ReviewVerdictDispatchedEvent = ReviewVerdictDispatchedEvent;
13249
+ exports.ReviewVerdictRejectedEvent = ReviewVerdictRejectedEvent;
13250
+ exports.ReviewVerdictRestoreBlockedEvent = ReviewVerdictRestoreBlockedEvent;
12196
13251
  exports.ReviewerRoundMetadata = ReviewerRoundMetadata;
12197
13252
  exports.ReviewerRoundSummary = ReviewerRoundSummary;
12198
13253
  exports.Role = Role;
@@ -12231,6 +13286,9 @@ exports.SubscribeIssueEventsRpc = SubscribeIssueEventsRpc;
12231
13286
  exports.SubscribeProjectSessionTreeRpc = SubscribeProjectSessionTreeRpc;
12232
13287
  exports.SubscribeTerminalRpc = SubscribeTerminalRpc;
12233
13288
  exports.SubstrateBugFiledEvent = SubstrateBugFiledEvent;
13289
+ exports.SweepEscalatedEvent = SweepEscalatedEvent;
13290
+ exports.SweepRecommendationEvent = SweepRecommendationEvent;
13291
+ exports.SweepScanEvent = SweepScanEvent;
12234
13292
  exports.SystemHealthConsumer = SystemHealthConsumer;
12235
13293
  exports.SystemHealthSeverityChangedEvent = SystemHealthSeverityChangedEvent;
12236
13294
  exports.SystemHealthSnapshot = SystemHealthSnapshot;
@@ -12251,6 +13309,8 @@ exports.TurnDiffFileChange = TurnDiffFileChange;
12251
13309
  exports.TurnDiffSummary = TurnDiffSummary;
12252
13310
  exports.UatStatusValue = UatStatusValue;
12253
13311
  exports.VerificationStatusValue = VerificationStatusValue;
13312
+ exports.WIRED_HOOK_INVENTORY = WIRED_HOOK_INVENTORY;
13313
+ exports.WIRED_HOOK_NAMES = WIRED_HOOK_NAMES;
12254
13314
  exports.WS_METHODS = WS_METHODS;
12255
13315
  exports.WaitingReason = WaitingReason;
12256
13316
  exports.WaitingState = WaitingState;
@@ -12265,6 +13325,9 @@ exports.WorkspaceDeletedEvent = WorkspaceDeletedEvent;
12265
13325
  exports.WorkspaceDestroyedEvent = WorkspaceDestroyedEvent;
12266
13326
  exports.WorkspaceDetail = WorkspaceDetail;
12267
13327
  exports.WorkspaceWipeStartedEvent = WorkspaceWipeStartedEvent;
13328
+ exports.WriteFileAtPathInput = WriteFileAtPathInput;
13329
+ exports.WriteFileAtPathResult = WriteFileAtPathResult;
13330
+ exports.WriteFileAtPathRpc = WriteFileAtPathRpc;
12268
13331
  exports.applyEvent = applyEvent;
12269
13332
  exports.applyEvents = applyEvents;
12270
13333
  exports.compareIssueIds = compareIssueIds;