@overdeck/contracts 0.47.1 → 0.48.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
  });
@@ -1417,6 +1434,7 @@ const AgentPermissionResolvedEvent = effect.Schema.Struct({
1417
1434
  requestId: effect.Schema.String,
1418
1435
  agentId: AgentId,
1419
1436
  issueId: effect.Schema.optional(IssueId),
1437
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1420
1438
  behavior: ClaudeChannelPermissionBehavior
1421
1439
  })
1422
1440
  });
@@ -1525,6 +1543,7 @@ const PlanningStartedEvent = effect.Schema.Struct({
1525
1543
  timestamp: effect.Schema.String,
1526
1544
  payload: effect.Schema.Struct({
1527
1545
  issueId: IssueId,
1546
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1528
1547
  sessionName: effect.Schema.String,
1529
1548
  harness: effect.Schema.optional(effect.Schema.String)
1530
1549
  })
@@ -1536,6 +1555,7 @@ const PlanningFailedEvent = effect.Schema.Struct({
1536
1555
  timestamp: effect.Schema.String,
1537
1556
  payload: effect.Schema.Struct({
1538
1557
  issueId: IssueId,
1558
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1539
1559
  error: effect.Schema.String
1540
1560
  })
1541
1561
  });
@@ -1546,6 +1566,7 @@ const PlanningSyncEvent = effect.Schema.Struct({
1546
1566
  timestamp: effect.Schema.String,
1547
1567
  payload: effect.Schema.Struct({
1548
1568
  issueId: IssueId,
1569
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1549
1570
  status: effect.Schema.String,
1550
1571
  progress: effect.Schema.optional(effect.Schema.Number),
1551
1572
  message: effect.Schema.optional(effect.Schema.String)
@@ -1558,6 +1579,7 @@ const PlanItemStatusChangedEvent = effect.Schema.Struct({
1558
1579
  timestamp: effect.Schema.String,
1559
1580
  payload: effect.Schema.Struct({
1560
1581
  issueId: IssueId,
1582
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1561
1583
  itemId: effect.Schema.String,
1562
1584
  status: effect.Schema.String
1563
1585
  })
@@ -1569,6 +1591,7 @@ const PlanSubitemStatusChangedEvent = effect.Schema.Struct({
1569
1591
  timestamp: effect.Schema.String,
1570
1592
  payload: effect.Schema.Struct({
1571
1593
  issueId: IssueId,
1594
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1572
1595
  itemId: effect.Schema.String,
1573
1596
  subItemId: effect.Schema.String,
1574
1597
  status: effect.Schema.String
@@ -1581,6 +1604,7 @@ const PlanItemsUnblockedEvent = effect.Schema.Struct({
1581
1604
  timestamp: effect.Schema.String,
1582
1605
  payload: effect.Schema.Struct({
1583
1606
  issueId: IssueId,
1607
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1584
1608
  items: effect.Schema.Array(effect.Schema.String)
1585
1609
  })
1586
1610
  });
@@ -1591,6 +1615,7 @@ const PipelineStatusChangedEvent = effect.Schema.Struct({
1591
1615
  timestamp: effect.Schema.String,
1592
1616
  payload: effect.Schema.Struct({
1593
1617
  issueId: IssueId,
1618
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1594
1619
  status: ReviewStatusSnapshot
1595
1620
  })
1596
1621
  });
@@ -1599,7 +1624,10 @@ const MergeReadyEvent = effect.Schema.Struct({
1599
1624
  type: effect.Schema.Literal("merge.ready"),
1600
1625
  sequence: SequenceNumber,
1601
1626
  timestamp: effect.Schema.String,
1602
- payload: effect.Schema.Struct({ issueId: IssueId })
1627
+ payload: effect.Schema.Struct({
1628
+ issueId: IssueId,
1629
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1630
+ })
1603
1631
  });
1604
1632
  /** New — review status changed */
1605
1633
  const ReviewStatusChangedEvent = effect.Schema.Struct({
@@ -1608,6 +1636,7 @@ const ReviewStatusChangedEvent = effect.Schema.Struct({
1608
1636
  timestamp: effect.Schema.String,
1609
1637
  payload: effect.Schema.Struct({
1610
1638
  issueId: IssueId,
1639
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1611
1640
  status: ReviewStatusSnapshot
1612
1641
  })
1613
1642
  });
@@ -1616,7 +1645,10 @@ const PipelineReviewStartedEvent = effect.Schema.Struct({
1616
1645
  type: effect.Schema.Literal("pipeline.review-started"),
1617
1646
  sequence: SequenceNumber,
1618
1647
  timestamp: effect.Schema.String,
1619
- payload: effect.Schema.Struct({ issueId: IssueId })
1648
+ payload: effect.Schema.Struct({
1649
+ issueId: IssueId,
1650
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1651
+ })
1620
1652
  });
1621
1653
  /** New — review specialist finished (passed or failed) */
1622
1654
  const PipelineReviewCompletedEvent = effect.Schema.Struct({
@@ -1625,6 +1657,7 @@ const PipelineReviewCompletedEvent = effect.Schema.Struct({
1625
1657
  timestamp: effect.Schema.String,
1626
1658
  payload: effect.Schema.Struct({
1627
1659
  issueId: IssueId,
1660
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1628
1661
  passed: effect.Schema.Boolean
1629
1662
  })
1630
1663
  });
@@ -1633,7 +1666,10 @@ const PipelineTestStartedEvent = effect.Schema.Struct({
1633
1666
  type: effect.Schema.Literal("pipeline.test-started"),
1634
1667
  sequence: SequenceNumber,
1635
1668
  timestamp: effect.Schema.String,
1636
- payload: effect.Schema.Struct({ issueId: IssueId })
1669
+ payload: effect.Schema.Struct({
1670
+ issueId: IssueId,
1671
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1672
+ })
1637
1673
  });
1638
1674
  /** New — test specialist finished (passed or failed) */
1639
1675
  const PipelineTestCompletedEvent = effect.Schema.Struct({
@@ -1642,6 +1678,7 @@ const PipelineTestCompletedEvent = effect.Schema.Struct({
1642
1678
  timestamp: effect.Schema.String,
1643
1679
  payload: effect.Schema.Struct({
1644
1680
  issueId: IssueId,
1681
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1645
1682
  passed: effect.Schema.Boolean
1646
1683
  })
1647
1684
  });
@@ -1650,7 +1687,10 @@ const PipelineVerificationStartedEvent = effect.Schema.Struct({
1650
1687
  type: effect.Schema.Literal("pipeline.verification-started"),
1651
1688
  sequence: SequenceNumber,
1652
1689
  timestamp: effect.Schema.String,
1653
- payload: effect.Schema.Struct({ issueId: IssueId })
1690
+ payload: effect.Schema.Struct({
1691
+ issueId: IssueId,
1692
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1693
+ })
1654
1694
  });
1655
1695
  /** New — verification gate failed (carries failedCheck for gate failures, message for infra errors) */
1656
1696
  const PipelineVerificationFailedEvent = effect.Schema.Struct({
@@ -1659,6 +1699,7 @@ const PipelineVerificationFailedEvent = effect.Schema.Struct({
1659
1699
  timestamp: effect.Schema.String,
1660
1700
  payload: effect.Schema.Struct({
1661
1701
  issueId: IssueId,
1702
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1662
1703
  failedCheck: effect.Schema.optional(effect.Schema.String),
1663
1704
  message: effect.Schema.optional(effect.Schema.String)
1664
1705
  })
@@ -1672,6 +1713,7 @@ const IssueTransitionedEvent = effect.Schema.Struct({
1672
1713
  timestamp: effect.Schema.String,
1673
1714
  payload: effect.Schema.Struct({
1674
1715
  issueId: IssueId,
1716
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1675
1717
  state: effect.Schema.String
1676
1718
  })
1677
1719
  });
@@ -1681,6 +1723,7 @@ const OperatorInterventionEvent = effect.Schema.Struct({
1681
1723
  timestamp: effect.Schema.String,
1682
1724
  payload: effect.Schema.Struct({
1683
1725
  issueId: IssueId,
1726
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1684
1727
  kind: effect.Schema.Literals([
1685
1728
  "tell",
1686
1729
  "pause",
@@ -1745,6 +1788,7 @@ const SubstrateBugFiledEvent = effect.Schema.Struct({
1745
1788
  timestamp: effect.Schema.String,
1746
1789
  payload: effect.Schema.Struct({
1747
1790
  issueId: IssueId,
1791
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1748
1792
  runId: effect.Schema.optional(effect.Schema.String),
1749
1793
  filedBy: effect.Schema.Literals(["agent", "operator"]),
1750
1794
  discoveredIn: effect.Schema.optional(IssueId),
@@ -1766,6 +1810,7 @@ const ReviewReviewerStartedEvent = effect.Schema.Struct({
1766
1810
  timestamp: effect.Schema.String,
1767
1811
  payload: effect.Schema.Struct({
1768
1812
  issueId: IssueId,
1813
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1769
1814
  role: effect.Schema.String,
1770
1815
  sessionName: effect.Schema.String
1771
1816
  })
@@ -1780,6 +1825,7 @@ const ReviewReviewerCompletedEvent = effect.Schema.Struct({
1780
1825
  timestamp: effect.Schema.String,
1781
1826
  payload: effect.Schema.Struct({
1782
1827
  issueId: IssueId,
1828
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1783
1829
  role: effect.Schema.String
1784
1830
  })
1785
1831
  });
@@ -1794,6 +1840,7 @@ const ReviewSpecialistTimedOutEvent = effect.Schema.Struct({
1794
1840
  timestamp: effect.Schema.String,
1795
1841
  payload: effect.Schema.Struct({
1796
1842
  issueId: IssueId,
1843
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1797
1844
  role: effect.Schema.String,
1798
1845
  sessionName: effect.Schema.String,
1799
1846
  attempt: effect.Schema.Number,
@@ -1812,6 +1859,7 @@ const ReviewCoordinatorStartedEvent = effect.Schema.Struct({
1812
1859
  timestamp: effect.Schema.String,
1813
1860
  payload: effect.Schema.Struct({
1814
1861
  issueId: IssueId,
1862
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1815
1863
  sessionName: effect.Schema.String
1816
1864
  })
1817
1865
  });
@@ -1822,6 +1870,7 @@ const ReviewCoordinatorDiedEvent = effect.Schema.Struct({
1822
1870
  timestamp: effect.Schema.String,
1823
1871
  payload: effect.Schema.Struct({
1824
1872
  issueId: IssueId,
1873
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1825
1874
  sessionName: effect.Schema.String,
1826
1875
  reason: effect.Schema.String
1827
1876
  })
@@ -1851,7 +1900,8 @@ const SpecialistCompletedEvent = effect.Schema.Struct({
1851
1900
  timestamp: effect.Schema.String,
1852
1901
  payload: effect.Schema.Struct({
1853
1902
  name: Role,
1854
- issueId: effect.Schema.optional(IssueId)
1903
+ issueId: effect.Schema.optional(IssueId),
1904
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1855
1905
  })
1856
1906
  });
1857
1907
  /** New — role-backed specialist failed */
@@ -1862,6 +1912,7 @@ const SpecialistFailedEvent = effect.Schema.Struct({
1862
1912
  payload: effect.Schema.Struct({
1863
1913
  name: Role,
1864
1914
  issueId: effect.Schema.optional(IssueId),
1915
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1865
1916
  error: effect.Schema.String
1866
1917
  })
1867
1918
  });
@@ -1901,7 +1952,10 @@ const IssuesUpdatedEvent = effect.Schema.Struct({
1901
1952
  type: effect.Schema.Literal("issues.updated"),
1902
1953
  sequence: SequenceNumber,
1903
1954
  timestamp: effect.Schema.String,
1904
- payload: effect.Schema.Struct({ issueId: effect.Schema.optional(IssueId) })
1955
+ payload: effect.Schema.Struct({
1956
+ issueId: effect.Schema.optional(IssueId),
1957
+ workspaceId: effect.Schema.optional(effect.Schema.String)
1958
+ })
1905
1959
  });
1906
1960
  /** Patch a single issue's status in the read model without a full snapshot refresh. */
1907
1961
  const IssueStatusChangedEvent = effect.Schema.Struct({
@@ -1910,6 +1964,7 @@ const IssueStatusChangedEvent = effect.Schema.Struct({
1910
1964
  timestamp: effect.Schema.String,
1911
1965
  payload: effect.Schema.Struct({
1912
1966
  issueId: IssueId,
1967
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1913
1968
  status: effect.Schema.String,
1914
1969
  canonicalStatus: effect.Schema.String,
1915
1970
  labels: effect.Schema.optional(effect.Schema.Array(effect.Schema.String))
@@ -1942,6 +1997,7 @@ const ActivityEntryEvent = effect.Schema.Struct({
1942
1997
  details: effect.Schema.optional(effect.Schema.String),
1943
1998
  output: effect.Schema.optional(effect.Schema.String),
1944
1999
  issueId: effect.Schema.optional(IssueId),
2000
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1945
2001
  /** Dashboard route the feed navigates to on click (e.g. /conv/<name>, /flywheel). */
1946
2002
  link: effect.Schema.optional(effect.Schema.String),
1947
2003
  /** PAN-1862 (FR-12): fire a desktop notification for this entry (operator-facing warnings). */
@@ -1960,6 +2016,7 @@ const ActivityDetailedEvent = effect.Schema.Struct({
1960
2016
  message: effect.Schema.String,
1961
2017
  details: effect.Schema.optional(effect.Schema.String),
1962
2018
  issueId: effect.Schema.optional(IssueId),
2019
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1963
2020
  triggeringEvent: effect.Schema.optional(effect.Schema.String)
1964
2021
  })
1965
2022
  });
@@ -1973,6 +2030,7 @@ const ActivityTtsEvent = effect.Schema.Struct({
1973
2030
  utterance: effect.Schema.String,
1974
2031
  priority: effect.Schema.optional(effect.Schema.Number),
1975
2032
  issueId: effect.Schema.optional(IssueId),
2033
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1976
2034
  source: effect.Schema.optional(effect.Schema.String),
1977
2035
  eventType: effect.Schema.optional(effect.Schema.String)
1978
2036
  })
@@ -1985,6 +2043,7 @@ const DashboardLifecycleStartedEvent = effect.Schema.Struct({
1985
2043
  payload: effect.Schema.Struct({
1986
2044
  reason: effect.Schema.String,
1987
2045
  issueId: effect.Schema.optional(IssueId),
2046
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1988
2047
  trigger: effect.Schema.String
1989
2048
  })
1990
2049
  });
@@ -1996,6 +2055,7 @@ const DashboardLifecycleCompletedEvent = effect.Schema.Struct({
1996
2055
  payload: effect.Schema.Struct({
1997
2056
  reason: effect.Schema.String,
1998
2057
  issueId: effect.Schema.optional(IssueId),
2058
+ workspaceId: effect.Schema.optional(effect.Schema.String),
1999
2059
  durationMs: effect.Schema.Number
2000
2060
  })
2001
2061
  });
@@ -2007,6 +2067,7 @@ const DashboardLifecycleFailedEvent = effect.Schema.Struct({
2007
2067
  payload: effect.Schema.Struct({
2008
2068
  reason: effect.Schema.String,
2009
2069
  issueId: effect.Schema.optional(IssueId),
2070
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2010
2071
  error: effect.Schema.String
2011
2072
  })
2012
2073
  });
@@ -2017,6 +2078,7 @@ const ShadowInferenceUpdateEvent = effect.Schema.Struct({
2017
2078
  timestamp: effect.Schema.String,
2018
2079
  payload: effect.Schema.Struct({
2019
2080
  issueId: IssueId,
2081
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2020
2082
  content: effect.Schema.String
2021
2083
  })
2022
2084
  });
@@ -2027,6 +2089,7 @@ const WorkspaceCreatedEvent = effect.Schema.Struct({
2027
2089
  timestamp: effect.Schema.String,
2028
2090
  payload: effect.Schema.Struct({
2029
2091
  issueId: IssueId,
2092
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2030
2093
  workspacePath: effect.Schema.String
2031
2094
  })
2032
2095
  });
@@ -2035,21 +2098,30 @@ const WorkspaceWipeStartedEvent = effect.Schema.Struct({
2035
2098
  type: effect.Schema.Literal("workspace.wipe_started"),
2036
2099
  sequence: SequenceNumber,
2037
2100
  timestamp: effect.Schema.String,
2038
- payload: effect.Schema.Struct({ issueId: IssueId })
2101
+ payload: effect.Schema.Struct({
2102
+ issueId: IssueId,
2103
+ workspaceId: effect.Schema.optional(effect.Schema.String)
2104
+ })
2039
2105
  });
2040
2106
  /** New — deep-wipe completed, workspace fully destroyed */
2041
2107
  const WorkspaceDestroyedEvent = effect.Schema.Struct({
2042
2108
  type: effect.Schema.Literal("workspace.destroyed"),
2043
2109
  sequence: SequenceNumber,
2044
2110
  timestamp: effect.Schema.String,
2045
- payload: effect.Schema.Struct({ issueId: IssueId })
2111
+ payload: effect.Schema.Struct({
2112
+ issueId: IssueId,
2113
+ workspaceId: effect.Schema.optional(effect.Schema.String)
2114
+ })
2046
2115
  });
2047
2116
  /** New — cleanup-workspace completed, workspace directory removed */
2048
2117
  const WorkspaceDeletedEvent = effect.Schema.Struct({
2049
2118
  type: effect.Schema.Literal("workspace.deleted"),
2050
2119
  sequence: SequenceNumber,
2051
2120
  timestamp: effect.Schema.String,
2052
- payload: effect.Schema.Struct({ issueId: IssueId })
2121
+ payload: effect.Schema.Struct({
2122
+ issueId: IssueId,
2123
+ workspaceId: effect.Schema.optional(effect.Schema.String)
2124
+ })
2053
2125
  });
2054
2126
  /** New — planning aborted, workspace returned to idle state */
2055
2127
  const WorkspaceAbortedEvent = effect.Schema.Struct({
@@ -2058,6 +2130,7 @@ const WorkspaceAbortedEvent = effect.Schema.Struct({
2058
2130
  timestamp: effect.Schema.String,
2059
2131
  payload: effect.Schema.Struct({
2060
2132
  issueId: IssueId,
2133
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2061
2134
  sessionName: effect.Schema.optional(effect.Schema.String)
2062
2135
  })
2063
2136
  });
@@ -2107,6 +2180,7 @@ const MemoryHealthChangedEvent = effect.Schema.Struct({
2107
2180
  payload: effect.Schema.Struct({
2108
2181
  projectId: effect.Schema.String,
2109
2182
  issueId: IssueId,
2183
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2110
2184
  status: effect.Schema.Literals([
2111
2185
  "healthy",
2112
2186
  "degraded",
@@ -2125,6 +2199,7 @@ const CostEventRecordedEvent = effect.Schema.Struct({
2125
2199
  payload: effect.Schema.Struct({
2126
2200
  agentId: AgentId,
2127
2201
  issueId: IssueId,
2202
+ workspaceId: effect.Schema.optional(effect.Schema.String),
2128
2203
  cost: effect.Schema.Number,
2129
2204
  inputTokens: effect.Schema.Number,
2130
2205
  outputTokens: effect.Schema.Number
@@ -2516,7 +2591,8 @@ const FlywheelHarness = effect.Schema.Literals([
2516
2591
  "pi",
2517
2592
  "ohmypi",
2518
2593
  "codex",
2519
- "acp"
2594
+ "acp",
2595
+ "kimi-code"
2520
2596
  ]);
2521
2597
  const FlywheelEffort = effect.Schema.Literals([
2522
2598
  "low",
@@ -2709,6 +2785,8 @@ const WS_METHODS = {
2709
2785
  replayEvents: "pan.replayEvents",
2710
2786
  getWorkspaceDetail: "pan.getWorkspaceDetail",
2711
2787
  readWorkspaceFile: "pan.readWorkspaceFile",
2788
+ readFileAtPath: "pan.readFileAtPath",
2789
+ writeFileAtPath: "pan.writeFileAtPath",
2712
2790
  resolveFilePathExists: "pan.resolveFilePathExists",
2713
2791
  terminalOpen: "pan.terminalOpen",
2714
2792
  terminalWrite: "pan.terminalWrite",
@@ -2854,12 +2932,17 @@ const SessionTreeDelta = effect.Schema.Struct({
2854
2932
  "session_added",
2855
2933
  "session_removed",
2856
2934
  "presence_changed",
2857
- "status_changed"
2935
+ "status_changed",
2936
+ "pending_input_changed"
2858
2937
  ]),
2859
2938
  issueId: effect.Schema.String,
2860
2939
  sessionId: effect.Schema.String,
2861
2940
  presence: effect.Schema.optional(SessionNodePresence),
2862
2941
  status: effect.Schema.optional(AgentStatus),
2942
+ awaitingInput: effect.Schema.optional(effect.Schema.Boolean),
2943
+ awaitingInputPrompt: effect.Schema.optional(effect.Schema.String),
2944
+ awaitingInputReason: effect.Schema.optional(effect.Schema.String),
2945
+ pendingInputKinds: effect.Schema.optional(effect.Schema.Array(effect.Schema.String)),
2863
2946
  timestamp: effect.Schema.String
2864
2947
  });
2865
2948
  /** 1. Subscribe to the live domain event stream (stream) */
@@ -2960,6 +3043,44 @@ const ReadWorkspaceFileRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.readWorkspa
2960
3043
  success: ReadWorkspaceFileResult,
2961
3044
  error: PanRpcError
2962
3045
  });
3046
+ const ReadFileAtPathInput = effect.Schema.Struct({ path: effect.Schema.String });
3047
+ const ReadFileAtPathResult = effect.Schema.Struct({
3048
+ text: effect.Schema.String,
3049
+ lang: effect.Schema.String,
3050
+ mtimeMs: effect.Schema.Number,
3051
+ totalLines: effect.Schema.Number
3052
+ });
3053
+ /**
3054
+ * 10b-2. Read an allowlisted markdown file by absolute path (PAN-3260).
3055
+ *
3056
+ * Unlike ReadWorkspaceFileRpc this takes no issueId — the internal markdown
3057
+ * editor pane opens files reached from surfaces with no workspace context
3058
+ * (e.g. a repo-root file chip inside a conversation). The server validates
3059
+ * `path` against registered project roots + OVERDECK_HOME before reading.
3060
+ */
3061
+ const ReadFileAtPathRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.readFileAtPath, {
3062
+ payload: ReadFileAtPathInput,
3063
+ success: ReadFileAtPathResult,
3064
+ error: PanRpcError
3065
+ });
3066
+ const WriteFileAtPathInput = effect.Schema.Struct({
3067
+ path: effect.Schema.String,
3068
+ content: effect.Schema.String,
3069
+ expectedMtimeMs: effect.Schema.optional(effect.Schema.Number)
3070
+ });
3071
+ const WriteFileAtPathResult = effect.Schema.Struct({ mtimeMs: effect.Schema.Number });
3072
+ /**
3073
+ * 10b-3. Write an allowlisted markdown file by absolute path (PAN-3260).
3074
+ *
3075
+ * `expectedMtimeMs` enables optimistic concurrency: a stale value is
3076
+ * rejected with a PanRpcError code of WRITE_CONFLICT and nothing is
3077
+ * written. Omitting it (e.g. an explicit Overwrite action) skips the check.
3078
+ */
3079
+ const WriteFileAtPathRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.writeFileAtPath, {
3080
+ payload: WriteFileAtPathInput,
3081
+ success: WriteFileAtPathResult,
3082
+ error: PanRpcError
3083
+ });
2963
3084
  /**
2964
3085
  * 10c. Resolve whether a file path candidate exists on disk (PAN-1457).
2965
3086
  *
@@ -3234,7 +3355,7 @@ const GetConversationStatsRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.getConve
3234
3355
  error: PanRpcError
3235
3356
  });
3236
3357
  /** 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);
3358
+ 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
3359
  //#endregion
3239
3360
  //#region src/event-reducers.ts
3240
3361
  const INITIAL_READ_MODEL_STATE = {
@@ -3891,7 +4012,8 @@ function applyEvent(state, event) {
3891
4012
  };
3892
4013
  case "memory.observation_created": {
3893
4014
  const observation = event.payload.observation;
3894
- const existing = state.observationsByIssueId[observation.issueId] ?? [];
4015
+ const observationKey = observation.issueId ?? observation.workspaceId;
4016
+ const existing = state.observationsByIssueId[observationKey] ?? [];
3895
4017
  const index = existing.findIndex((entry) => entry.id === observation.id);
3896
4018
  const updated = trimMemoryObservations(index === -1 ? [...existing, observation] : existing.map((entry, entryIndex) => entryIndex === index ? observation : entry));
3897
4019
  return {
@@ -3899,7 +4021,7 @@ function applyEvent(state, event) {
3899
4021
  sequence: Math.max(state.sequence, event.sequence),
3900
4022
  observationsByIssueId: {
3901
4023
  ...state.observationsByIssueId,
3902
- [observation.issueId]: updated
4024
+ [observationKey]: updated
3903
4025
  }
3904
4026
  };
3905
4027
  }
@@ -4666,7 +4788,8 @@ const CONTEXT_PREVIEW_HARNESSES = [
4666
4788
  "claude-code",
4667
4789
  "ohmypi",
4668
4790
  "codex",
4669
- "acp"
4791
+ "acp",
4792
+ "kimi-code"
4670
4793
  ];
4671
4794
  const ContextLayerKind = effect.Schema.Literals(CONTEXT_LAYER_KINDS);
4672
4795
  const ContextPreviewHarness = effect.Schema.Literals(CONTEXT_PREVIEW_HARNESSES);
@@ -4774,6 +4897,7 @@ const ContextHarnessPreviews = effect.Schema.Struct({
4774
4897
  ohmypi: effect.Schema.String,
4775
4898
  codex: effect.Schema.String,
4776
4899
  acp: effect.Schema.String,
4900
+ "kimi-code": effect.Schema.String,
4777
4901
  fullPrompt: effect.Schema.String
4778
4902
  });
4779
4903
  const ContextPreviewDiagnostic = effect.Schema.Struct({
@@ -4829,6 +4953,7 @@ const ArtifactAgentHarness = effect.Schema.Literals([
4829
4953
  "ohmypi",
4830
4954
  "codex",
4831
4955
  "acp",
4956
+ "kimi-code",
4832
4957
  "user"
4833
4958
  ]);
4834
4959
  const ArtifactLifecycleState = effect.Schema.Literals([
@@ -5062,16 +5187,40 @@ const ACP_BEHAVIOR = {
5062
5187
  workAgentMode: "acp-host",
5063
5188
  readyTimeoutSeconds: 30
5064
5189
  };
5190
+ const KIMI_CODE_BEHAVIOR = {
5191
+ displayName: "Kimi Code",
5192
+ nativeCommands: [],
5193
+ executableName: "kimi",
5194
+ processNames: ["kimi"],
5195
+ launchCommandKind: "kimi-code-tui",
5196
+ deliveryKind: "pty-supervisor",
5197
+ readinessKind: "kimi-session-signal",
5198
+ transcriptKind: "kimi-wire-jsonl",
5199
+ sessionIdSource: "kimi-session-newest",
5200
+ contextLayerKind: "kimi-code",
5201
+ feedKind: "kimi_code",
5202
+ supportsPtySupervisor: true,
5203
+ supportsChannelsBridge: false,
5204
+ supportsConversationStreaming: true,
5205
+ supportsPatchProjection: false,
5206
+ usesRpcFifo: false,
5207
+ usesCodexHome: false,
5208
+ injectsPromptTimeMemory: false,
5209
+ workAgentMode: "kimi-code-tui",
5210
+ readyTimeoutSeconds: 60
5211
+ };
5065
5212
  const BEHAVIORS = {
5066
5213
  "claude-code": CLAUDE_CODE_BEHAVIOR,
5067
5214
  ohmypi: OHMYPI_BEHAVIOR,
5068
5215
  codex: CODEX_BEHAVIOR,
5069
- acp: ACP_BEHAVIOR
5216
+ acp: ACP_BEHAVIOR,
5217
+ "kimi-code": KIMI_CODE_BEHAVIOR
5070
5218
  };
5071
5219
  function getHarnessBehavior(harness) {
5072
5220
  if (harness === "ohmypi" || harness === "pi") return OHMYPI_BEHAVIOR;
5073
5221
  if (harness === "codex") return CODEX_BEHAVIOR;
5074
5222
  if (harness === "acp") return ACP_BEHAVIOR;
5223
+ if (harness === "kimi-code") return KIMI_CODE_BEHAVIOR;
5075
5224
  return CLAUDE_CODE_BEHAVIOR;
5076
5225
  }
5077
5226
  function getRuntimeBehavior(runtime) {
@@ -5285,7 +5434,8 @@ const TELEMETRY_PROPERTY_DOMAINS = {
5285
5434
  "god-view",
5286
5435
  "deacon",
5287
5436
  "sessions",
5288
- "awaiting-merge"
5437
+ "awaiting-merge",
5438
+ "workspace"
5289
5439
  ],
5290
5440
  decision_subject: ["agent", "conversation"],
5291
5441
  duration_bucket: [
@@ -5304,7 +5454,8 @@ const TELEMETRY_PROPERTY_DOMAINS = {
5304
5454
  "claude-code",
5305
5455
  "ohmypi",
5306
5456
  "codex",
5307
- "acp"
5457
+ "acp",
5458
+ "kimi-code"
5308
5459
  ],
5309
5460
  merge_kind: ["pipeline"],
5310
5461
  model_family: [
@@ -5965,7 +6116,7 @@ const COMPOSER_COMMAND_MANIFEST = [
5965
6116
  },
5966
6117
  {
5967
6118
  "flags": "--harness <harness>",
5968
- "description": "Coding-agent harness: claude-code | pi | codex | acp (defaults to role/provider settings)",
6119
+ "description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code (defaults to role/provider settings)",
5969
6120
  "required": true,
5970
6121
  "valueHint": "harness"
5971
6122
  },
@@ -6069,6 +6220,24 @@ const COMPOSER_COMMAND_MANIFEST = [
6069
6220
  "aliases": [],
6070
6221
  "category": "Lifecycle"
6071
6222
  },
6223
+ {
6224
+ "id": "pan-answer",
6225
+ "path": ["answer"],
6226
+ "display": "/pan answer",
6227
+ "description": "Show a pending pane choice, or answer its numbered option",
6228
+ "args": [{
6229
+ "name": "id",
6230
+ "required": true,
6231
+ "variadic": false
6232
+ }, {
6233
+ "name": "option",
6234
+ "required": false,
6235
+ "variadic": false
6236
+ }],
6237
+ "options": [],
6238
+ "aliases": [],
6239
+ "category": "CLI"
6240
+ },
6072
6241
  {
6073
6242
  "id": "pan-monitor",
6074
6243
  "path": ["monitor"],
@@ -6624,7 +6793,7 @@ const COMPOSER_COMMAND_MANIFEST = [
6624
6793
  },
6625
6794
  {
6626
6795
  "flags": "--harness <harness>",
6627
- "description": "Coding-agent harness: claude-code | pi | codex | acp (defaults to role/provider settings)",
6796
+ "description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code (defaults to role/provider settings)",
6628
6797
  "required": true,
6629
6798
  "valueHint": "harness"
6630
6799
  },
@@ -6690,7 +6859,7 @@ const COMPOSER_COMMAND_MANIFEST = [
6690
6859
  },
6691
6860
  {
6692
6861
  "flags": "--force",
6693
- "description": "Clear a paused agent gate and start anyway",
6862
+ "description": "Clear paused and pending-operator-decision gates and start anyway",
6694
6863
  "required": false,
6695
6864
  "valueHint": null
6696
6865
  },
@@ -6741,7 +6910,7 @@ const COMPOSER_COMMAND_MANIFEST = [
6741
6910
  },
6742
6911
  {
6743
6912
  "flags": "--harness <harness>",
6744
- "description": "Coding-agent harness: claude-code | pi | codex | acp (defaults to role/provider settings)",
6913
+ "description": "Coding-agent harness: claude-code | pi | codex | acp | kimi-code (defaults to role/provider settings)",
6745
6914
  "required": true,
6746
6915
  "valueHint": "harness"
6747
6916
  },
@@ -7390,17 +7559,32 @@ const COMPOSER_COMMAND_MANIFEST = [
7390
7559
  "display": "/pan workspace list",
7391
7560
  "description": "List all workspaces",
7392
7561
  "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
- }],
7562
+ "options": [
7563
+ {
7564
+ "flags": "--json",
7565
+ "description": "Output as JSON",
7566
+ "required": false,
7567
+ "valueHint": null
7568
+ },
7569
+ {
7570
+ "flags": "--all",
7571
+ "description": "List workspaces across all registered projects",
7572
+ "required": false,
7573
+ "valueHint": null
7574
+ },
7575
+ {
7576
+ "flags": "--kind <kind>",
7577
+ "description": "Filter by workspace kind (main|issue|scratch), reading through the resolver",
7578
+ "required": true,
7579
+ "valueHint": "kind"
7580
+ },
7581
+ {
7582
+ "flags": "--archived",
7583
+ "description": "Include archived workspaces (only applies with --kind)",
7584
+ "required": false,
7585
+ "valueHint": null
7586
+ }
7587
+ ],
7404
7588
  "aliases": [],
7405
7589
  "category": "Workspace"
7406
7590
  },
@@ -7414,16 +7598,151 @@ const COMPOSER_COMMAND_MANIFEST = [
7414
7598
  "required": true,
7415
7599
  "variadic": false
7416
7600
  }],
7601
+ "options": [
7602
+ {
7603
+ "flags": "--force",
7604
+ "description": "Force removal even with uncommitted changes",
7605
+ "required": false,
7606
+ "valueHint": null
7607
+ },
7608
+ {
7609
+ "flags": "--project <path>",
7610
+ "description": "Explicit project path (overrides registry)",
7611
+ "required": true,
7612
+ "valueHint": "path"
7613
+ },
7614
+ {
7615
+ "flags": "--purge-memory",
7616
+ "description": "Also permanently delete the workspace's memory home (irreversible)",
7617
+ "required": false,
7618
+ "valueHint": null
7619
+ }
7620
+ ],
7621
+ "aliases": [],
7622
+ "category": "Workspace"
7623
+ },
7624
+ {
7625
+ "id": "pan-workspace-new",
7626
+ "path": ["workspace", "new"],
7627
+ "display": "/pan workspace new",
7628
+ "description": "Create a scratch workspace (shared dir by default; --isolated for a git worktree)",
7629
+ "args": [{
7630
+ "name": "name",
7631
+ "required": true,
7632
+ "variadic": false
7633
+ }],
7634
+ "options": [
7635
+ {
7636
+ "flags": "--project <key>",
7637
+ "description": "Registered project key (defaults to the sole project, or the one resolved from cwd)",
7638
+ "required": true,
7639
+ "valueHint": "key"
7640
+ },
7641
+ {
7642
+ "flags": "--isolated",
7643
+ "description": "Create an isolated git worktree instead of sharing the project directory",
7644
+ "required": false,
7645
+ "valueHint": null
7646
+ },
7647
+ {
7648
+ "flags": "--parent-branch <branch>",
7649
+ "description": "Parent branch for the isolated worktree (default: inferred from the project's current branch)",
7650
+ "required": true,
7651
+ "valueHint": "branch"
7652
+ },
7653
+ {
7654
+ "flags": "--target-path <dir>",
7655
+ "description": "Target an existing directory as the workspace path (rejects --isolated)",
7656
+ "required": true,
7657
+ "valueHint": "dir"
7658
+ },
7659
+ {
7660
+ "flags": "--dry-run",
7661
+ "description": "Print the resolved intent as JSON and create nothing",
7662
+ "required": false,
7663
+ "valueHint": null
7664
+ }
7665
+ ],
7666
+ "aliases": [],
7667
+ "category": "Workspace"
7668
+ },
7669
+ {
7670
+ "id": "pan-workspace-main",
7671
+ "path": ["workspace", "main"],
7672
+ "display": "/pan workspace main",
7673
+ "description": "Resolve or create the project's singleton main workspace",
7674
+ "args": [],
7417
7675
  "options": [{
7676
+ "flags": "--project <key>",
7677
+ "description": "Registered project key (defaults to the sole project, or the one resolved from cwd)",
7678
+ "required": true,
7679
+ "valueHint": "key"
7680
+ }],
7681
+ "aliases": [],
7682
+ "category": "Workspace"
7683
+ },
7684
+ {
7685
+ "id": "pan-workspace-get",
7686
+ "path": ["workspace", "get"],
7687
+ "display": "/pan workspace get",
7688
+ "description": "Show a workspace row by id",
7689
+ "args": [{
7690
+ "name": "ws",
7691
+ "required": true,
7692
+ "variadic": false
7693
+ }],
7694
+ "options": [],
7695
+ "aliases": [],
7696
+ "category": "Workspace"
7697
+ },
7698
+ {
7699
+ "id": "pan-workspace-activate",
7700
+ "path": ["workspace", "activate"],
7701
+ "display": "/pan workspace activate",
7702
+ "description": "Touch a workspace's last-accessed time and print its layout hint",
7703
+ "args": [{
7704
+ "name": "ws",
7705
+ "required": true,
7706
+ "variadic": false
7707
+ }],
7708
+ "options": [],
7709
+ "aliases": [],
7710
+ "category": "Workspace"
7711
+ },
7712
+ {
7713
+ "id": "pan-workspace-archive",
7714
+ "path": ["workspace", "archive"],
7715
+ "display": "/pan workspace archive",
7716
+ "description": "Archive a workspace (reversible; refuses kind=main)",
7717
+ "args": [{
7718
+ "name": "ws",
7719
+ "required": true,
7720
+ "variadic": false
7721
+ }],
7722
+ "options": [],
7723
+ "aliases": [],
7724
+ "category": "Workspace"
7725
+ },
7726
+ {
7727
+ "id": "pan-workspace-relocate",
7728
+ "path": ["workspace", "relocate"],
7729
+ "display": "/pan workspace relocate",
7730
+ "description": "Point a workspace at a new path (refuses kind=issue; kind=main requires --force)",
7731
+ "args": [{
7732
+ "name": "ws",
7733
+ "required": true,
7734
+ "variadic": false
7735
+ }],
7736
+ "options": [{
7737
+ "flags": "--path <dir>",
7738
+ "description": "New path (must be an existing directory)",
7739
+ "required": true,
7740
+ "valueHint": "dir"
7741
+ }, {
7418
7742
  "flags": "--force",
7419
- "description": "Force removal even with uncommitted changes",
7743
+ "description": "Allow relocating the main workspace, diverging it from projects.yaml",
7420
7744
  "required": false,
7421
7745
  "valueHint": null
7422
- }, {
7423
- "flags": "--project <path>",
7424
- "description": "Explicit project path (overrides registry)",
7425
- "required": true,
7426
- "valueHint": "path"
7427
7746
  }],
7428
7747
  "aliases": [],
7429
7748
  "category": "Workspace"
@@ -8061,10 +8380,10 @@ const COMPOSER_COMMAND_MANIFEST = [
8061
8380
  "valueHint": "id"
8062
8381
  },
8063
8382
  {
8064
- "flags": "--workspace <id>",
8065
- "description": "Workspace ID",
8383
+ "flags": "--workspace <id|name>",
8384
+ "description": "Workspace id or name",
8066
8385
  "required": true,
8067
- "valueHint": "id"
8386
+ "valueHint": "id|name"
8068
8387
  },
8069
8388
  {
8070
8389
  "flags": "--issue <id>",
@@ -8084,6 +8403,18 @@ const COMPOSER_COMMAND_MANIFEST = [
8084
8403
  "required": false,
8085
8404
  "valueHint": null
8086
8405
  },
8406
+ {
8407
+ "flags": "--global",
8408
+ "description": "Search across all registered projects instead of just one",
8409
+ "required": false,
8410
+ "valueHint": null
8411
+ },
8412
+ {
8413
+ "flags": "--target [path]",
8414
+ "description": "Search all workspaces whose path targets a directory (bare flag = cwd); mutually exclusive with --workspace/--issue/--global",
8415
+ "required": false,
8416
+ "valueHint": "path"
8417
+ },
8087
8418
  {
8088
8419
  "flags": "--include-archived",
8089
8420
  "description": "Include observations hidden by reset markers",
@@ -8110,23 +8441,106 @@ const COMPOSER_COMMAND_MANIFEST = [
8110
8441
  "id": "pan-memory-status",
8111
8442
  "path": ["memory", "status"],
8112
8443
  "display": "/pan memory status",
8113
- "description": "Show current memory status for an issue",
8444
+ "description": "Show current memory status for an issue, a workspace, or the current directory",
8114
8445
  "args": [{
8115
8446
  "name": "issue",
8116
- "required": true,
8447
+ "required": false,
8117
8448
  "variadic": false
8118
8449
  }],
8119
- "options": [{
8120
- "flags": "--project <id>",
8121
- "description": "Project ID",
8450
+ "options": [
8451
+ {
8452
+ "flags": "--project <id>",
8453
+ "description": "Project ID",
8454
+ "required": true,
8455
+ "valueHint": "id"
8456
+ },
8457
+ {
8458
+ "flags": "--workspace <id|name>",
8459
+ "description": "Workspace id or name instead of an issue positional",
8460
+ "required": true,
8461
+ "valueHint": "id|name"
8462
+ },
8463
+ {
8464
+ "flags": "--history <n>",
8465
+ "description": "Also print up to N archived statuses, newest first (max 50)",
8466
+ "required": true,
8467
+ "valueHint": "n"
8468
+ },
8469
+ {
8470
+ "flags": "--json",
8471
+ "description": "Output JSON",
8472
+ "required": false,
8473
+ "valueHint": null
8474
+ }
8475
+ ],
8476
+ "aliases": [],
8477
+ "category": "Observation"
8478
+ },
8479
+ {
8480
+ "id": "pan-memory-timeline",
8481
+ "path": ["memory", "timeline"],
8482
+ "display": "/pan memory timeline",
8483
+ "description": "Print chronological observations for a workspace or the current directory",
8484
+ "args": [],
8485
+ "options": [
8486
+ {
8487
+ "flags": "--workspace <id|name>",
8488
+ "description": "Workspace id or name (defaults to the workspace owning the cwd)",
8489
+ "required": true,
8490
+ "valueHint": "id|name"
8491
+ },
8492
+ {
8493
+ "flags": "--days <n>",
8494
+ "description": "Most recent N days, today counting as day 1 (default 7)",
8495
+ "required": true,
8496
+ "valueHint": "n"
8497
+ },
8498
+ {
8499
+ "flags": "--limit <n>",
8500
+ "description": "Maximum observation rows",
8501
+ "required": true,
8502
+ "valueHint": "n"
8503
+ },
8504
+ {
8505
+ "flags": "--json",
8506
+ "description": "Output JSON",
8507
+ "required": false,
8508
+ "valueHint": null
8509
+ }
8510
+ ],
8511
+ "aliases": [],
8512
+ "category": "Observation"
8513
+ },
8514
+ {
8515
+ "id": "pan-memory-read",
8516
+ "path": ["memory", "read"],
8517
+ "display": "/pan memory read",
8518
+ "description": "Print a file from a workspace's memory home (path is relative to that home)",
8519
+ "args": [{
8520
+ "name": "path",
8122
8521
  "required": true,
8123
- "valueHint": "id"
8124
- }, {
8125
- "flags": "--json",
8126
- "description": "Output JSON",
8127
- "required": false,
8128
- "valueHint": null
8522
+ "variadic": false
8129
8523
  }],
8524
+ "options": [
8525
+ {
8526
+ "flags": "--workspace <id|name>",
8527
+ "description": "Workspace id or name (defaults to the workspace owning the cwd)",
8528
+ "required": true,
8529
+ "valueHint": "id|name"
8530
+ },
8531
+ {
8532
+ "flags": "--from <n>",
8533
+ "description": "First line to print, 1-based",
8534
+ "required": true,
8535
+ "valueHint": "n"
8536
+ },
8537
+ {
8538
+ "flags": "--lines <n>",
8539
+ "description": "Maximum number of lines to print",
8540
+ "required": true,
8541
+ "valueHint": "n"
8542
+ }
8543
+ ],
8130
8544
  "aliases": [],
8131
8545
  "category": "Observation"
8132
8546
  },
@@ -8177,10 +8591,10 @@ const COMPOSER_COMMAND_MANIFEST = [
8177
8591
  "id": "pan-memory-summary",
8178
8592
  "path": ["memory", "summary"],
8179
8593
  "display": "/pan memory summary",
8180
- "description": "Generate a daily markdown memory summary",
8594
+ "description": "Generate a daily markdown memory summary for an issue, a workspace, or the current directory",
8181
8595
  "args": [{
8182
8596
  "name": "issue",
8183
- "required": true,
8597
+ "required": false,
8184
8598
  "variadic": false
8185
8599
  }],
8186
8600
  "options": [
@@ -8190,6 +8604,12 @@ const COMPOSER_COMMAND_MANIFEST = [
8190
8604
  "required": true,
8191
8605
  "valueHint": "id"
8192
8606
  },
8607
+ {
8608
+ "flags": "--workspace <id|name>",
8609
+ "description": "Workspace id or name instead of an issue positional",
8610
+ "required": true,
8611
+ "valueHint": "id|name"
8612
+ },
8193
8613
  {
8194
8614
  "flags": "--date <yyyy-mm-dd>",
8195
8615
  "description": "Summary date",
@@ -8226,6 +8646,136 @@ const COMPOSER_COMMAND_MANIFEST = [
8226
8646
  "aliases": [],
8227
8647
  "category": "Observation"
8228
8648
  },
8649
+ {
8650
+ "id": "pan-memory-backfill",
8651
+ "path": ["memory", "backfill"],
8652
+ "display": "/pan memory backfill",
8653
+ "description": "Backfill memory observations from historical Claude Code JSONL transcripts",
8654
+ "args": [],
8655
+ "options": [
8656
+ {
8657
+ "flags": "--workspace <id>",
8658
+ "description": "Only backfill sessions resolved to this workspace id",
8659
+ "required": true,
8660
+ "valueHint": "id"
8661
+ },
8662
+ {
8663
+ "flags": "--project <id>",
8664
+ "description": "Only backfill sessions resolved to this project id",
8665
+ "required": true,
8666
+ "valueHint": "id"
8667
+ },
8668
+ {
8669
+ "flags": "--dry-run",
8670
+ "description": "Report matched sessions without extracting or writing anything",
8671
+ "required": false,
8672
+ "valueHint": null
8673
+ },
8674
+ {
8675
+ "flags": "--json",
8676
+ "description": "Output JSON",
8677
+ "required": false,
8678
+ "valueHint": null
8679
+ }
8680
+ ],
8681
+ "aliases": [],
8682
+ "category": "Observation"
8683
+ },
8684
+ {
8685
+ "id": "pan-memory-pin",
8686
+ "path": ["memory", "pin"],
8687
+ "display": "/pan memory pin",
8688
+ "description": "Pin a doc for prompt-time memory injection (path is stored project-relative)",
8689
+ "args": [{
8690
+ "name": "doc-path",
8691
+ "required": true,
8692
+ "variadic": false
8693
+ }],
8694
+ "options": [
8695
+ {
8696
+ "flags": "--project <id>",
8697
+ "description": "Project key to pin at project scope",
8698
+ "required": true,
8699
+ "valueHint": "id"
8700
+ },
8701
+ {
8702
+ "flags": "--workspace <id>",
8703
+ "description": "Workspace id to pin at workspace scope (overrides --project)",
8704
+ "required": true,
8705
+ "valueHint": "id"
8706
+ },
8707
+ {
8708
+ "flags": "--json",
8709
+ "description": "Output JSON",
8710
+ "required": false,
8711
+ "valueHint": null
8712
+ }
8713
+ ],
8714
+ "aliases": [],
8715
+ "category": "Observation"
8716
+ },
8717
+ {
8718
+ "id": "pan-memory-unpin",
8719
+ "path": ["memory", "unpin"],
8720
+ "display": "/pan memory unpin",
8721
+ "description": "Remove a pinned doc",
8722
+ "args": [{
8723
+ "name": "doc-path",
8724
+ "required": true,
8725
+ "variadic": false
8726
+ }],
8727
+ "options": [
8728
+ {
8729
+ "flags": "--project <id>",
8730
+ "description": "Project key the pin was made at project scope",
8731
+ "required": true,
8732
+ "valueHint": "id"
8733
+ },
8734
+ {
8735
+ "flags": "--workspace <id>",
8736
+ "description": "Workspace id the pin was made at workspace scope (overrides --project)",
8737
+ "required": true,
8738
+ "valueHint": "id"
8739
+ },
8740
+ {
8741
+ "flags": "--json",
8742
+ "description": "Output JSON",
8743
+ "required": false,
8744
+ "valueHint": null
8745
+ }
8746
+ ],
8747
+ "aliases": [],
8748
+ "category": "Observation"
8749
+ },
8750
+ {
8751
+ "id": "pan-memory-pins",
8752
+ "path": ["memory", "pins"],
8753
+ "display": "/pan memory pins",
8754
+ "description": "List pinned docs for a project or workspace",
8755
+ "args": [],
8756
+ "options": [
8757
+ {
8758
+ "flags": "--project <id>",
8759
+ "description": "Project key to list project-scoped pins for",
8760
+ "required": true,
8761
+ "valueHint": "id"
8762
+ },
8763
+ {
8764
+ "flags": "--workspace <id>",
8765
+ "description": "Workspace id to list workspace-scoped pins for (overrides --project)",
8766
+ "required": true,
8767
+ "valueHint": "id"
8768
+ },
8769
+ {
8770
+ "flags": "--json",
8771
+ "description": "Output JSON",
8772
+ "required": false,
8773
+ "valueHint": null
8774
+ }
8775
+ ],
8776
+ "aliases": [],
8777
+ "category": "Observation"
8778
+ },
8229
8779
  {
8230
8780
  "id": "pan-memory-config",
8231
8781
  "path": ["memory", "config"],
@@ -9411,6 +9961,30 @@ const COMPOSER_COMMAND_MANIFEST = [
9411
9961
  "aliases": [],
9412
9962
  "category": "Admin"
9413
9963
  },
9964
+ {
9965
+ "id": "pan-admin-db-rebuild-workspaces",
9966
+ "path": [
9967
+ "admin",
9968
+ "db",
9969
+ "rebuild-workspaces"
9970
+ ],
9971
+ "display": "/pan admin db rebuild-workspaces",
9972
+ "description": "Rebuild the projects/workspaces tables from projects.yaml, worktree scan, and memory-home identity records (PAN-1990)",
9973
+ "args": [],
9974
+ "options": [{
9975
+ "flags": "--dry-run",
9976
+ "description": "Show what would be created without writing",
9977
+ "required": false,
9978
+ "valueHint": null
9979
+ }, {
9980
+ "flags": "--verbose",
9981
+ "description": "Log each processed workspace",
9982
+ "required": false,
9983
+ "valueHint": null
9984
+ }],
9985
+ "aliases": [],
9986
+ "category": "Admin"
9987
+ },
9414
9988
  {
9415
9989
  "id": "pan-admin-db-gc-agents",
9416
9990
  "path": [
@@ -10828,7 +11402,7 @@ const COMPOSER_COMMAND_MANIFEST = [
10828
11402
  },
10829
11403
  {
10830
11404
  "flags": "--agent-harness <harness>",
10831
- "description": "Agent harness: claude-code, pi, codex, acp, or user",
11405
+ "description": "Agent harness: claude-code, pi, ohmypi, codex, acp, kimi-code, or user",
10832
11406
  "required": true,
10833
11407
  "valueHint": "harness"
10834
11408
  },
@@ -11403,6 +11977,30 @@ const COMPOSER_COMMAND_MANIFEST = [
11403
11977
  "aliases": [],
11404
11978
  "category": "Project"
11405
11979
  },
11980
+ {
11981
+ "id": "pan-project-add-target",
11982
+ "path": ["project", "add-target"],
11983
+ "display": "/pan project add-target",
11984
+ "description": "Add a secondary target path for a registered project",
11985
+ "args": [{
11986
+ "name": "project",
11987
+ "required": true,
11988
+ "variadic": false
11989
+ }],
11990
+ "options": [{
11991
+ "flags": "--path <path>",
11992
+ "description": "Target path to add",
11993
+ "required": true,
11994
+ "valueHint": "path"
11995
+ }, {
11996
+ "flags": "--primary",
11997
+ "description": "Make this the primary target (demotes any existing primary)",
11998
+ "required": false,
11999
+ "valueHint": null
12000
+ }],
12001
+ "aliases": [],
12002
+ "category": "Project"
12003
+ },
11406
12004
  {
11407
12005
  "id": "pan-projects",
11408
12006
  "path": ["projects"],
@@ -11523,6 +12121,30 @@ const COMPOSER_COMMAND_MANIFEST = [
11523
12121
  "aliases": [],
11524
12122
  "category": "Project"
11525
12123
  },
12124
+ {
12125
+ "id": "pan-projects-add-target",
12126
+ "path": ["projects", "add-target"],
12127
+ "display": "/pan projects add-target",
12128
+ "description": "Add a secondary target path for a registered project",
12129
+ "args": [{
12130
+ "name": "project",
12131
+ "required": true,
12132
+ "variadic": false
12133
+ }],
12134
+ "options": [{
12135
+ "flags": "--path <path>",
12136
+ "description": "Target path to add",
12137
+ "required": true,
12138
+ "valueHint": "path"
12139
+ }, {
12140
+ "flags": "--primary",
12141
+ "description": "Make this the primary target (demotes any existing primary)",
12142
+ "required": false,
12143
+ "valueHint": null
12144
+ }],
12145
+ "aliases": [],
12146
+ "category": "Project"
12147
+ },
11526
12148
  {
11527
12149
  "id": "pan-health",
11528
12150
  "path": ["health"],
@@ -12109,6 +12731,8 @@ exports.IssueStatusChangedEvent = IssueStatusChangedEvent;
12109
12731
  exports.IssueTransitionedEvent = IssueTransitionedEvent;
12110
12732
  exports.IssuesSnapshotEvent = IssuesSnapshotEvent;
12111
12733
  exports.IssuesUpdatedEvent = IssuesUpdatedEvent;
12734
+ exports.KIMI_CODE_BEHAVIOR = KIMI_CODE_BEHAVIOR;
12735
+ exports.KNOWN_HARNESSES = KNOWN_HARNESSES;
12112
12736
  exports.LegacySystemHealthSummary = LegacySystemHealthSummary;
12113
12737
  exports.LegacyWebhookRelaySummary = LegacyWebhookRelaySummary;
12114
12738
  exports.LinearMcpAuthCallbackRelayedEvent = LinearMcpAuthCallbackRelayedEvent;
@@ -12122,6 +12746,7 @@ exports.MAX_CHANNEL_REPLY_ARTIFACT_REFS = MAX_CHANNEL_REPLY_ARTIFACT_REFS;
12122
12746
  exports.MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH = MAX_CHANNEL_REPLY_ARTIFACT_URI_LENGTH;
12123
12747
  exports.MAX_CHANNEL_REPLY_SUMMARY_LENGTH = MAX_CHANNEL_REPLY_SUMMARY_LENGTH;
12124
12748
  exports.MEMBERSHIP_UNAVAILABLE_REASONS = MEMBERSHIP_UNAVAILABLE_REASONS;
12749
+ exports.MemoryAgentRole = MemoryAgentRole;
12125
12750
  exports.MemoryHealthChangedEvent = MemoryHealthChangedEvent;
12126
12751
  exports.MemoryIdentity = MemoryIdentity;
12127
12752
  exports.MemoryObservation = MemoryObservation;
@@ -12170,6 +12795,9 @@ exports.ProjectSessionTree = ProjectSessionTree;
12170
12795
  exports.ProposedPlan = ProposedPlan;
12171
12796
  exports.RagDecision = RagDecision;
12172
12797
  exports.RagDecisionSource = RagDecisionSource;
12798
+ exports.ReadFileAtPathInput = ReadFileAtPathInput;
12799
+ exports.ReadFileAtPathResult = ReadFileAtPathResult;
12800
+ exports.ReadFileAtPathRpc = ReadFileAtPathRpc;
12173
12801
  exports.ReadWorkspaceFileInput = ReadWorkspaceFileInput;
12174
12802
  exports.ReadWorkspaceFileResult = ReadWorkspaceFileResult;
12175
12803
  exports.ReadWorkspaceFileRpc = ReadWorkspaceFileRpc;
@@ -12265,6 +12893,9 @@ exports.WorkspaceDeletedEvent = WorkspaceDeletedEvent;
12265
12893
  exports.WorkspaceDestroyedEvent = WorkspaceDestroyedEvent;
12266
12894
  exports.WorkspaceDetail = WorkspaceDetail;
12267
12895
  exports.WorkspaceWipeStartedEvent = WorkspaceWipeStartedEvent;
12896
+ exports.WriteFileAtPathInput = WriteFileAtPathInput;
12897
+ exports.WriteFileAtPathResult = WriteFileAtPathResult;
12898
+ exports.WriteFileAtPathRpc = WriteFileAtPathRpc;
12268
12899
  exports.applyEvent = applyEvent;
12269
12900
  exports.applyEvents = applyEvents;
12270
12901
  exports.compareIssueIds = compareIssueIds;