@pellux/goodvibes-contracts 1.7.1 → 1.9.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.
@@ -3,7 +3,7 @@ export const OPERATOR_CONTRACT = {
3
3
  "product": {
4
4
  "id": "goodvibes",
5
5
  "surface": "operator",
6
- "version": "1.7.1"
6
+ "version": "1.9.0"
7
7
  },
8
8
  "auth": {
9
9
  "modes": [
@@ -407,7 +407,35 @@ export const OPERATOR_CONTRACT = {
407
407
  "recommendedActions": {
408
408
  "type": "array",
409
409
  "items": {
410
- "type": "string"
410
+ "type": "object",
411
+ "properties": {
412
+ "description": {
413
+ "type": "string"
414
+ },
415
+ "command": {
416
+ "type": "object",
417
+ "properties": {
418
+ "name": {
419
+ "type": "string"
420
+ },
421
+ "args": {
422
+ "type": "array",
423
+ "items": {
424
+ "type": "string"
425
+ }
426
+ }
427
+ },
428
+ "required": [
429
+ "name",
430
+ "args"
431
+ ],
432
+ "additionalProperties": false
433
+ }
434
+ },
435
+ "required": [
436
+ "description"
437
+ ],
438
+ "additionalProperties": false
411
439
  }
412
440
  },
413
441
  "routeRecords": {
@@ -496,10 +524,186 @@ export const OPERATOR_CONTRACT = {
496
524
  },
497
525
  "invokable": true
498
526
  },
527
+ {
528
+ "id": "acp.agents.list",
529
+ "title": "List Installed Third-Party Coding Agents",
530
+ "description": "READ-ONLY discovery of installed ACP-capable third-party coding agents (Claude Code, Codex CLI, opencode): existence checks over $PATH and known install directories — no process is ever executed, no registration ceremony. Returns only what is present (id, title, resolved binary path, ACP launch args); absence is a quiet empty list, never a nag.",
531
+ "category": "acp",
532
+ "source": "builtin",
533
+ "access": "authenticated",
534
+ "transport": [
535
+ "ws"
536
+ ],
537
+ "scopes": [
538
+ "read:fleet"
539
+ ],
540
+ "outputSchema": {
541
+ "type": "object",
542
+ "properties": {
543
+ "agents": {
544
+ "type": "array",
545
+ "items": {
546
+ "type": "object",
547
+ "properties": {
548
+ "id": {
549
+ "type": "string"
550
+ },
551
+ "title": {
552
+ "type": "string"
553
+ },
554
+ "binaryPath": {
555
+ "type": "string"
556
+ },
557
+ "args": {
558
+ "type": "array",
559
+ "items": {
560
+ "type": "string"
561
+ }
562
+ }
563
+ },
564
+ "required": [
565
+ "id",
566
+ "title",
567
+ "binaryPath",
568
+ "args"
569
+ ],
570
+ "additionalProperties": false
571
+ }
572
+ }
573
+ },
574
+ "required": [
575
+ "agents"
576
+ ],
577
+ "additionalProperties": false
578
+ },
579
+ "invokable": true
580
+ },
581
+ {
582
+ "id": "acp.sessions.create",
583
+ "title": "Spawn a Third-Party Coding Agent Session",
584
+ "description": "Spawn a discovered third-party agent into a working directory as a hosted daemon session in ONE act: the binary is launched in ACP stdio mode, the handshake and session creation run under a bound timeout, and the result is the hosted record — which appears as a steerable/stoppable fleet row (kind acp-agent) whose permission asks classify as waiting-on-human. A binary that fails the handshake returns the SAME record with state \"failed\" and a structured error (which binary, which stage, what happened) — an honest outcome, never a hung row and never a bare string. An optional initial prompt starts the first turn.",
585
+ "category": "acp",
586
+ "source": "builtin",
587
+ "access": "authenticated",
588
+ "transport": [
589
+ "ws"
590
+ ],
591
+ "scopes": [
592
+ "write:fleet"
593
+ ],
594
+ "inputSchema": {
595
+ "type": "object",
596
+ "properties": {
597
+ "agentId": {
598
+ "type": "string"
599
+ },
600
+ "cwd": {
601
+ "type": "string"
602
+ },
603
+ "title": {
604
+ "type": "string"
605
+ },
606
+ "prompt": {
607
+ "type": "string"
608
+ }
609
+ },
610
+ "required": [
611
+ "agentId",
612
+ "cwd"
613
+ ],
614
+ "additionalProperties": false
615
+ },
616
+ "outputSchema": {
617
+ "type": "object",
618
+ "properties": {
619
+ "hosted": {
620
+ "type": "object",
621
+ "properties": {
622
+ "id": {
623
+ "type": "string"
624
+ },
625
+ "agentId": {
626
+ "type": "string"
627
+ },
628
+ "title": {
629
+ "type": "string"
630
+ },
631
+ "binaryPath": {
632
+ "type": "string"
633
+ },
634
+ "cwd": {
635
+ "type": "string"
636
+ },
637
+ "state": {
638
+ "type": "string"
639
+ },
640
+ "startedAt": {
641
+ "type": "number"
642
+ },
643
+ "completedAt": {
644
+ "type": "number"
645
+ },
646
+ "sessionId": {
647
+ "type": "string"
648
+ },
649
+ "progress": {
650
+ "type": "string"
651
+ },
652
+ "pendingPermission": {
653
+ "type": "string"
654
+ },
655
+ "error": {
656
+ "type": "object",
657
+ "properties": {
658
+ "binary": {
659
+ "type": "string"
660
+ },
661
+ "stage": {
662
+ "type": "string"
663
+ },
664
+ "message": {
665
+ "type": "string"
666
+ }
667
+ },
668
+ "required": [
669
+ "binary",
670
+ "stage",
671
+ "message"
672
+ ],
673
+ "additionalProperties": false
674
+ },
675
+ "promptCount": {
676
+ "type": "number"
677
+ }
678
+ },
679
+ "required": [
680
+ "id",
681
+ "agentId",
682
+ "title",
683
+ "binaryPath",
684
+ "cwd",
685
+ "state",
686
+ "startedAt",
687
+ "promptCount"
688
+ ],
689
+ "additionalProperties": false
690
+ },
691
+ "started": {
692
+ "type": "boolean"
693
+ }
694
+ },
695
+ "required": [
696
+ "hosted",
697
+ "started"
698
+ ],
699
+ "additionalProperties": false
700
+ },
701
+ "invokable": true
702
+ },
499
703
  {
500
704
  "id": "approvals.approve",
501
705
  "title": "Approve Approval",
502
- "description": "Approve a pending approval. Optionally pass selectedHunks (edit-tool approvals only): the daemon filters the approval's own edit list to those hunk indices server-side, so every surface produces identical modified-edit args. Omitting selectedHunks approves the whole request (back-compat). An out-of-range index or a non-edit approval is rejected with a 400.",
706
+ "description": "Approve a pending approval. Optionally pass selectedHunks (edit-tool approvals only): the daemon filters the approval's own edit list to those hunk indices server-side, so every surface produces identical modified-edit args. Omitting selectedHunks approves the whole request (back-compat). An out-of-range index or a non-edit approval is rejected with a 400. rememberTier generalizes the decision (a generalizing tier persists a durable rule and sweeps queued asks it covers); modifiedArgs carries an argument-modifying approval — e.g. the typed answer to a command's terminal prompt — to the waiting call (selectedHunks supersedes it when both are present). The response's recorded block reports what the broker actually recorded.",
503
707
  "category": "approvals",
504
708
  "source": "builtin",
505
709
  "access": "authenticated",
@@ -531,6 +735,46 @@ export const OPERATOR_CONTRACT = {
531
735
  "items": {
532
736
  "type": "number"
533
737
  }
738
+ },
739
+ "rememberTier": {
740
+ "type": "string",
741
+ "enum": [
742
+ "session",
743
+ "exact",
744
+ "command-class",
745
+ "path",
746
+ "tool"
747
+ ]
748
+ },
749
+ "reason": {
750
+ "type": "string"
751
+ },
752
+ "modifiedArgs": {
753
+ "type": "object",
754
+ "additionalProperties": {
755
+ "anyOf": [
756
+ {
757
+ "type": "string"
758
+ },
759
+ {
760
+ "type": "number"
761
+ },
762
+ {
763
+ "type": "boolean"
764
+ },
765
+ {
766
+ "type": "null"
767
+ },
768
+ {
769
+ "type": "object",
770
+ "additionalProperties": {}
771
+ },
772
+ {
773
+ "type": "array",
774
+ "items": {}
775
+ }
776
+ ]
777
+ }
534
778
  }
535
779
  },
536
780
  "required": [
@@ -761,6 +1005,36 @@ export const OPERATOR_CONTRACT = {
761
1005
  "additionalProperties": false
762
1006
  }
763
1007
  ]
1008
+ },
1009
+ "rememberOptions": {
1010
+ "type": "array",
1011
+ "items": {
1012
+ "type": "object",
1013
+ "properties": {
1014
+ "tier": {
1015
+ "type": "string",
1016
+ "enum": [
1017
+ "session",
1018
+ "exact",
1019
+ "command-class",
1020
+ "path",
1021
+ "tool"
1022
+ ]
1023
+ },
1024
+ "label": {
1025
+ "type": "string"
1026
+ },
1027
+ "detail": {
1028
+ "type": "string"
1029
+ }
1030
+ },
1031
+ "required": [
1032
+ "tier",
1033
+ "label",
1034
+ "detail"
1035
+ ],
1036
+ "additionalProperties": false
1037
+ }
764
1038
  }
765
1039
  },
766
1040
  "required": [
@@ -799,6 +1073,19 @@ export const OPERATOR_CONTRACT = {
799
1073
  "remember": {
800
1074
  "type": "boolean"
801
1075
  },
1076
+ "rememberTier": {
1077
+ "type": "string",
1078
+ "enum": [
1079
+ "session",
1080
+ "exact",
1081
+ "command-class",
1082
+ "path",
1083
+ "tool"
1084
+ ]
1085
+ },
1086
+ "reason": {
1087
+ "type": "string"
1088
+ },
802
1089
  "modifiedArgs": {
803
1090
  "type": "object",
804
1091
  "additionalProperties": {
@@ -832,6 +1119,12 @@ export const OPERATOR_CONTRACT = {
832
1119
  ],
833
1120
  "additionalProperties": false
834
1121
  },
1122
+ "fixSessionId": {
1123
+ "type": "string"
1124
+ },
1125
+ "fixSessionError": {
1126
+ "type": "string"
1127
+ },
835
1128
  "metadata": {
836
1129
  "type": "object",
837
1130
  "additionalProperties": {
@@ -913,6 +1206,44 @@ export const OPERATOR_CONTRACT = {
913
1206
  "audit"
914
1207
  ],
915
1208
  "additionalProperties": false
1209
+ },
1210
+ "recorded": {
1211
+ "type": "object",
1212
+ "properties": {
1213
+ "approved": {
1214
+ "type": "boolean"
1215
+ },
1216
+ "rememberTier": {
1217
+ "anyOf": [
1218
+ {
1219
+ "type": "string",
1220
+ "enum": [
1221
+ "session",
1222
+ "exact",
1223
+ "command-class",
1224
+ "path",
1225
+ "tool"
1226
+ ]
1227
+ },
1228
+ {
1229
+ "type": "null"
1230
+ }
1231
+ ]
1232
+ },
1233
+ "reasonStored": {
1234
+ "type": "boolean"
1235
+ },
1236
+ "modifiedArgsDelivered": {
1237
+ "type": "boolean"
1238
+ }
1239
+ },
1240
+ "required": [
1241
+ "approved",
1242
+ "rememberTier",
1243
+ "reasonStored",
1244
+ "modifiedArgsDelivered"
1245
+ ],
1246
+ "additionalProperties": false
916
1247
  }
917
1248
  },
918
1249
  "required": [
@@ -1181,6 +1512,36 @@ export const OPERATOR_CONTRACT = {
1181
1512
  "additionalProperties": false
1182
1513
  }
1183
1514
  ]
1515
+ },
1516
+ "rememberOptions": {
1517
+ "type": "array",
1518
+ "items": {
1519
+ "type": "object",
1520
+ "properties": {
1521
+ "tier": {
1522
+ "type": "string",
1523
+ "enum": [
1524
+ "session",
1525
+ "exact",
1526
+ "command-class",
1527
+ "path",
1528
+ "tool"
1529
+ ]
1530
+ },
1531
+ "label": {
1532
+ "type": "string"
1533
+ },
1534
+ "detail": {
1535
+ "type": "string"
1536
+ }
1537
+ },
1538
+ "required": [
1539
+ "tier",
1540
+ "label",
1541
+ "detail"
1542
+ ],
1543
+ "additionalProperties": false
1544
+ }
1184
1545
  }
1185
1546
  },
1186
1547
  "required": [
@@ -1219,6 +1580,19 @@ export const OPERATOR_CONTRACT = {
1219
1580
  "remember": {
1220
1581
  "type": "boolean"
1221
1582
  },
1583
+ "rememberTier": {
1584
+ "type": "string",
1585
+ "enum": [
1586
+ "session",
1587
+ "exact",
1588
+ "command-class",
1589
+ "path",
1590
+ "tool"
1591
+ ]
1592
+ },
1593
+ "reason": {
1594
+ "type": "string"
1595
+ },
1222
1596
  "modifiedArgs": {
1223
1597
  "type": "object",
1224
1598
  "additionalProperties": {
@@ -1252,6 +1626,12 @@ export const OPERATOR_CONTRACT = {
1252
1626
  ],
1253
1627
  "additionalProperties": false
1254
1628
  },
1629
+ "fixSessionId": {
1630
+ "type": "string"
1631
+ },
1632
+ "fixSessionError": {
1633
+ "type": "string"
1634
+ },
1255
1635
  "metadata": {
1256
1636
  "type": "object",
1257
1637
  "additionalProperties": {
@@ -1333,6 +1713,44 @@ export const OPERATOR_CONTRACT = {
1333
1713
  "audit"
1334
1714
  ],
1335
1715
  "additionalProperties": false
1716
+ },
1717
+ "recorded": {
1718
+ "type": "object",
1719
+ "properties": {
1720
+ "approved": {
1721
+ "type": "boolean"
1722
+ },
1723
+ "rememberTier": {
1724
+ "anyOf": [
1725
+ {
1726
+ "type": "string",
1727
+ "enum": [
1728
+ "session",
1729
+ "exact",
1730
+ "command-class",
1731
+ "path",
1732
+ "tool"
1733
+ ]
1734
+ },
1735
+ {
1736
+ "type": "null"
1737
+ }
1738
+ ]
1739
+ },
1740
+ "reasonStored": {
1741
+ "type": "boolean"
1742
+ },
1743
+ "modifiedArgsDelivered": {
1744
+ "type": "boolean"
1745
+ }
1746
+ },
1747
+ "required": [
1748
+ "approved",
1749
+ "rememberTier",
1750
+ "reasonStored",
1751
+ "modifiedArgsDelivered"
1752
+ ],
1753
+ "additionalProperties": false
1336
1754
  }
1337
1755
  },
1338
1756
  "required": [
@@ -1595,6 +2013,36 @@ export const OPERATOR_CONTRACT = {
1595
2013
  "additionalProperties": false
1596
2014
  }
1597
2015
  ]
2016
+ },
2017
+ "rememberOptions": {
2018
+ "type": "array",
2019
+ "items": {
2020
+ "type": "object",
2021
+ "properties": {
2022
+ "tier": {
2023
+ "type": "string",
2024
+ "enum": [
2025
+ "session",
2026
+ "exact",
2027
+ "command-class",
2028
+ "path",
2029
+ "tool"
2030
+ ]
2031
+ },
2032
+ "label": {
2033
+ "type": "string"
2034
+ },
2035
+ "detail": {
2036
+ "type": "string"
2037
+ }
2038
+ },
2039
+ "required": [
2040
+ "tier",
2041
+ "label",
2042
+ "detail"
2043
+ ],
2044
+ "additionalProperties": false
2045
+ }
1598
2046
  }
1599
2047
  },
1600
2048
  "required": [
@@ -1633,6 +2081,19 @@ export const OPERATOR_CONTRACT = {
1633
2081
  "remember": {
1634
2082
  "type": "boolean"
1635
2083
  },
2084
+ "rememberTier": {
2085
+ "type": "string",
2086
+ "enum": [
2087
+ "session",
2088
+ "exact",
2089
+ "command-class",
2090
+ "path",
2091
+ "tool"
2092
+ ]
2093
+ },
2094
+ "reason": {
2095
+ "type": "string"
2096
+ },
1636
2097
  "modifiedArgs": {
1637
2098
  "type": "object",
1638
2099
  "additionalProperties": {
@@ -1666,6 +2127,12 @@ export const OPERATOR_CONTRACT = {
1666
2127
  ],
1667
2128
  "additionalProperties": false
1668
2129
  },
2130
+ "fixSessionId": {
2131
+ "type": "string"
2132
+ },
2133
+ "fixSessionError": {
2134
+ "type": "string"
2135
+ },
1669
2136
  "metadata": {
1670
2137
  "type": "object",
1671
2138
  "additionalProperties": {
@@ -1747,6 +2214,44 @@ export const OPERATOR_CONTRACT = {
1747
2214
  "audit"
1748
2215
  ],
1749
2216
  "additionalProperties": false
2217
+ },
2218
+ "recorded": {
2219
+ "type": "object",
2220
+ "properties": {
2221
+ "approved": {
2222
+ "type": "boolean"
2223
+ },
2224
+ "rememberTier": {
2225
+ "anyOf": [
2226
+ {
2227
+ "type": "string",
2228
+ "enum": [
2229
+ "session",
2230
+ "exact",
2231
+ "command-class",
2232
+ "path",
2233
+ "tool"
2234
+ ]
2235
+ },
2236
+ {
2237
+ "type": "null"
2238
+ }
2239
+ ]
2240
+ },
2241
+ "reasonStored": {
2242
+ "type": "boolean"
2243
+ },
2244
+ "modifiedArgsDelivered": {
2245
+ "type": "boolean"
2246
+ }
2247
+ },
2248
+ "required": [
2249
+ "approved",
2250
+ "rememberTier",
2251
+ "reasonStored",
2252
+ "modifiedArgsDelivered"
2253
+ ],
2254
+ "additionalProperties": false
1750
2255
  }
1751
2256
  },
1752
2257
  "required": [
@@ -1759,7 +2264,7 @@ export const OPERATOR_CONTRACT = {
1759
2264
  {
1760
2265
  "id": "approvals.deny",
1761
2266
  "title": "Deny Approval",
1762
- "description": "Deny a pending approval.",
2267
+ "description": "Deny a pending approval. rememberTier generalizes the denial (a generalizing tier persists a durable deny rule and sweeps queued asks it covers); reason is the user's free-text feedback, which rides the structured declined result so the model adapts instead of guessing. The response's recorded block reports what the broker actually recorded.",
1763
2268
  "category": "approvals",
1764
2269
  "source": "builtin",
1765
2270
  "access": "authenticated",
@@ -1785,6 +2290,19 @@ export const OPERATOR_CONTRACT = {
1785
2290
  },
1786
2291
  "remember": {
1787
2292
  "type": "boolean"
2293
+ },
2294
+ "rememberTier": {
2295
+ "type": "string",
2296
+ "enum": [
2297
+ "session",
2298
+ "exact",
2299
+ "command-class",
2300
+ "path",
2301
+ "tool"
2302
+ ]
2303
+ },
2304
+ "reason": {
2305
+ "type": "string"
1788
2306
  }
1789
2307
  },
1790
2308
  "required": [
@@ -2015,6 +2533,36 @@ export const OPERATOR_CONTRACT = {
2015
2533
  "additionalProperties": false
2016
2534
  }
2017
2535
  ]
2536
+ },
2537
+ "rememberOptions": {
2538
+ "type": "array",
2539
+ "items": {
2540
+ "type": "object",
2541
+ "properties": {
2542
+ "tier": {
2543
+ "type": "string",
2544
+ "enum": [
2545
+ "session",
2546
+ "exact",
2547
+ "command-class",
2548
+ "path",
2549
+ "tool"
2550
+ ]
2551
+ },
2552
+ "label": {
2553
+ "type": "string"
2554
+ },
2555
+ "detail": {
2556
+ "type": "string"
2557
+ }
2558
+ },
2559
+ "required": [
2560
+ "tier",
2561
+ "label",
2562
+ "detail"
2563
+ ],
2564
+ "additionalProperties": false
2565
+ }
2018
2566
  }
2019
2567
  },
2020
2568
  "required": [
@@ -2053,6 +2601,19 @@ export const OPERATOR_CONTRACT = {
2053
2601
  "remember": {
2054
2602
  "type": "boolean"
2055
2603
  },
2604
+ "rememberTier": {
2605
+ "type": "string",
2606
+ "enum": [
2607
+ "session",
2608
+ "exact",
2609
+ "command-class",
2610
+ "path",
2611
+ "tool"
2612
+ ]
2613
+ },
2614
+ "reason": {
2615
+ "type": "string"
2616
+ },
2056
2617
  "modifiedArgs": {
2057
2618
  "type": "object",
2058
2619
  "additionalProperties": {
@@ -2086,6 +2647,12 @@ export const OPERATOR_CONTRACT = {
2086
2647
  ],
2087
2648
  "additionalProperties": false
2088
2649
  },
2650
+ "fixSessionId": {
2651
+ "type": "string"
2652
+ },
2653
+ "fixSessionError": {
2654
+ "type": "string"
2655
+ },
2089
2656
  "metadata": {
2090
2657
  "type": "object",
2091
2658
  "additionalProperties": {
@@ -2167,6 +2734,44 @@ export const OPERATOR_CONTRACT = {
2167
2734
  "audit"
2168
2735
  ],
2169
2736
  "additionalProperties": false
2737
+ },
2738
+ "recorded": {
2739
+ "type": "object",
2740
+ "properties": {
2741
+ "approved": {
2742
+ "type": "boolean"
2743
+ },
2744
+ "rememberTier": {
2745
+ "anyOf": [
2746
+ {
2747
+ "type": "string",
2748
+ "enum": [
2749
+ "session",
2750
+ "exact",
2751
+ "command-class",
2752
+ "path",
2753
+ "tool"
2754
+ ]
2755
+ },
2756
+ {
2757
+ "type": "null"
2758
+ }
2759
+ ]
2760
+ },
2761
+ "reasonStored": {
2762
+ "type": "boolean"
2763
+ },
2764
+ "modifiedArgsDelivered": {
2765
+ "type": "boolean"
2766
+ }
2767
+ },
2768
+ "required": [
2769
+ "approved",
2770
+ "rememberTier",
2771
+ "reasonStored",
2772
+ "modifiedArgsDelivered"
2773
+ ],
2774
+ "additionalProperties": false
2170
2775
  }
2171
2776
  },
2172
2777
  "required": [
@@ -2267,6 +2872,8 @@ export const OPERATOR_CONTRACT = {
2267
2872
  "session_cached_approval",
2268
2873
  "session_cached_denial",
2269
2874
  "safety_guardrail",
2875
+ "user_rule_allow",
2876
+ "user_rule_deny",
2270
2877
  "user_approved",
2271
2878
  "user_denied"
2272
2879
  ]
@@ -2279,6 +2886,7 @@ export const OPERATOR_CONTRACT = {
2279
2886
  "runtime_mode",
2280
2887
  "session_override",
2281
2888
  "safety_check",
2889
+ "user_rule",
2282
2890
  "user_prompt"
2283
2891
  ]
2284
2892
  },
@@ -2551,6 +3159,36 @@ export const OPERATOR_CONTRACT = {
2551
3159
  "additionalProperties": false
2552
3160
  }
2553
3161
  ]
3162
+ },
3163
+ "rememberOptions": {
3164
+ "type": "array",
3165
+ "items": {
3166
+ "type": "object",
3167
+ "properties": {
3168
+ "tier": {
3169
+ "type": "string",
3170
+ "enum": [
3171
+ "session",
3172
+ "exact",
3173
+ "command-class",
3174
+ "path",
3175
+ "tool"
3176
+ ]
3177
+ },
3178
+ "label": {
3179
+ "type": "string"
3180
+ },
3181
+ "detail": {
3182
+ "type": "string"
3183
+ }
3184
+ },
3185
+ "required": [
3186
+ "tier",
3187
+ "label",
3188
+ "detail"
3189
+ ],
3190
+ "additionalProperties": false
3191
+ }
2554
3192
  }
2555
3193
  },
2556
3194
  "required": [
@@ -2589,6 +3227,19 @@ export const OPERATOR_CONTRACT = {
2589
3227
  "remember": {
2590
3228
  "type": "boolean"
2591
3229
  },
3230
+ "rememberTier": {
3231
+ "type": "string",
3232
+ "enum": [
3233
+ "session",
3234
+ "exact",
3235
+ "command-class",
3236
+ "path",
3237
+ "tool"
3238
+ ]
3239
+ },
3240
+ "reason": {
3241
+ "type": "string"
3242
+ },
2592
3243
  "modifiedArgs": {
2593
3244
  "type": "object",
2594
3245
  "additionalProperties": {
@@ -2622,6 +3273,12 @@ export const OPERATOR_CONTRACT = {
2622
3273
  ],
2623
3274
  "additionalProperties": false
2624
3275
  },
3276
+ "fixSessionId": {
3277
+ "type": "string"
3278
+ },
3279
+ "fixSessionError": {
3280
+ "type": "string"
3281
+ },
2625
3282
  "metadata": {
2626
3283
  "type": "object",
2627
3284
  "additionalProperties": {
@@ -3653,7 +4310,8 @@ export const OPERATOR_CONTRACT = {
3653
4310
  "running",
3654
4311
  "completed",
3655
4312
  "failed",
3656
- "cancelled"
4313
+ "cancelled",
4314
+ "missed"
3657
4315
  ]
3658
4316
  },
3659
4317
  "agentId": {
@@ -7084,6 +7742,22 @@ export const OPERATOR_CONTRACT = {
7084
7742
  ],
7085
7743
  "additionalProperties": true
7086
7744
  }
7745
+ },
7746
+ "emptyState": {
7747
+ "type": "object",
7748
+ "properties": {
7749
+ "title": {
7750
+ "type": "string"
7751
+ },
7752
+ "body": {
7753
+ "type": "string"
7754
+ }
7755
+ },
7756
+ "required": [
7757
+ "title",
7758
+ "body"
7759
+ ],
7760
+ "additionalProperties": false
7087
7761
  }
7088
7762
  },
7089
7763
  "required": [
@@ -8495,7 +9169,8 @@ export const OPERATOR_CONTRACT = {
8495
9169
  "running",
8496
9170
  "completed",
8497
9171
  "failed",
8498
- "cancelled"
9172
+ "cancelled",
9173
+ "missed"
8499
9174
  ]
8500
9175
  },
8501
9176
  "agentId": {
@@ -9485,7 +10160,8 @@ export const OPERATOR_CONTRACT = {
9485
10160
  "running",
9486
10161
  "completed",
9487
10162
  "failed",
9488
- "cancelled"
10163
+ "cancelled",
10164
+ "missed"
9489
10165
  ]
9490
10166
  },
9491
10167
  "agentId": {
@@ -10516,7 +11192,7 @@ export const OPERATOR_CONTRACT = {
10516
11192
  {
10517
11193
  "id": "automation.runs.list",
10518
11194
  "title": "List Automation Runs",
10519
- "description": "Return automation run history. Without ?limit/?cursor returns { runs: [...] } (backward compatible). With ?limit=N (1–500, default 100) and optional ?cursor=<opaque> returns a PaginatedResponse envelope { items, hasMore, nextCursor? }. Invalid cursors return HTTP 400.",
11195
+ "description": "Return automation run history. Without ?limit/?cursor returns { runs: [...] } (backward compatible). With ?limit=N (1–500, default 100) and optional ?cursor=<opaque> returns a PaginatedResponse envelope { items, hasMore, nextCursor? }. Invalid cursors return HTTP 400. Optional ?since=<epoch-ms> returns only runs active on or after that time (by queuedAt, or endedAt when set) — the host-side source an away-digest reads to report the failed, missed, completed, and delivered runs since the operator was last present.",
10520
11196
  "category": "automation",
10521
11197
  "source": "builtin",
10522
11198
  "access": "authenticated",
@@ -10539,6 +11215,9 @@ export const OPERATOR_CONTRACT = {
10539
11215
  },
10540
11216
  "cursor": {
10541
11217
  "type": "string"
11218
+ },
11219
+ "since": {
11220
+ "type": "number"
10542
11221
  }
10543
11222
  },
10544
11223
  "additionalProperties": false
@@ -10576,7 +11255,8 @@ export const OPERATOR_CONTRACT = {
10576
11255
  "running",
10577
11256
  "completed",
10578
11257
  "failed",
10579
- "cancelled"
11258
+ "cancelled",
11259
+ "missed"
10580
11260
  ]
10581
11261
  },
10582
11262
  "agentId": {
@@ -11567,7 +12247,8 @@ export const OPERATOR_CONTRACT = {
11567
12247
  "running",
11568
12248
  "completed",
11569
12249
  "failed",
11570
- "cancelled"
12250
+ "cancelled",
12251
+ "missed"
11571
12252
  ]
11572
12253
  },
11573
12254
  "agentId": {
@@ -14645,7 +15326,8 @@ export const OPERATOR_CONTRACT = {
14645
15326
  "running",
14646
15327
  "completed",
14647
15328
  "failed",
14648
- "cancelled"
15329
+ "cancelled",
15330
+ "missed"
14649
15331
  ]
14650
15332
  },
14651
15333
  "agentId": {
@@ -23720,6 +24402,15 @@ export const OPERATOR_CONTRACT = {
23720
24402
  },
23721
24403
  "fixSessionId": {
23722
24404
  "type": "string"
24405
+ },
24406
+ "fixSessionError": {
24407
+ "type": "string"
24408
+ },
24409
+ "fixSessionOffered": {
24410
+ "type": "boolean"
24411
+ },
24412
+ "retired": {
24413
+ "type": "boolean"
23723
24414
  }
23724
24415
  },
23725
24416
  "required": [
@@ -27884,7 +28575,7 @@ export const OPERATOR_CONTRACT = {
27884
28575
  {
27885
28576
  "id": "control.status",
27886
28577
  "title": "Daemon Status",
27887
- "description": "Return daemon status and version.",
28578
+ "description": "Return daemon status and version. Pass receipts=consume to also receive undelivered daemon receipts (update/crash/migration notices) and mark them delivered — exactly once across all consuming readers. Without the flag no receipts are returned or consumed, so identity probes and keepalives never eat them.",
27888
28579
  "category": "control-plane",
27889
28580
  "source": "builtin",
27890
28581
  "access": "authenticated",
@@ -27901,7 +28592,15 @@ export const OPERATOR_CONTRACT = {
27901
28592
  },
27902
28593
  "inputSchema": {
27903
28594
  "type": "object",
27904
- "properties": {},
28595
+ "properties": {
28596
+ "receipts": {
28597
+ "type": "string",
28598
+ "enum": [
28599
+ "consume"
28600
+ ],
28601
+ "description": "Set to \"consume\" to receive undelivered daemon receipts and mark them delivered. Omit for a read that never consumes receipts."
28602
+ }
28603
+ },
27905
28604
  "additionalProperties": false
27906
28605
  },
27907
28606
  "outputSchema": {
@@ -27912,6 +28611,29 @@ export const OPERATOR_CONTRACT = {
27912
28611
  },
27913
28612
  "version": {
27914
28613
  "type": "string"
28614
+ },
28615
+ "receipts": {
28616
+ "type": "array",
28617
+ "items": {
28618
+ "type": "object",
28619
+ "properties": {
28620
+ "id": {
28621
+ "type": "string"
28622
+ },
28623
+ "text": {
28624
+ "type": "string"
28625
+ },
28626
+ "at": {
28627
+ "type": "number"
28628
+ }
28629
+ },
28630
+ "required": [
28631
+ "id",
28632
+ "text",
28633
+ "at"
28634
+ ],
28635
+ "additionalProperties": false
28636
+ }
27915
28637
  }
27916
28638
  },
27917
28639
  "required": [
@@ -28046,6 +28768,32 @@ export const OPERATOR_CONTRACT = {
28046
28768
  "unpriced"
28047
28769
  ]
28048
28770
  },
28771
+ "costSource": {
28772
+ "anyOf": [
28773
+ {
28774
+ "type": "string",
28775
+ "enum": [
28776
+ "user",
28777
+ "provider",
28778
+ "catalog",
28779
+ "mixed"
28780
+ ]
28781
+ },
28782
+ {
28783
+ "type": "null"
28784
+ }
28785
+ ]
28786
+ },
28787
+ "pricingAsOf": {
28788
+ "anyOf": [
28789
+ {
28790
+ "type": "string"
28791
+ },
28792
+ {
28793
+ "type": "null"
28794
+ }
28795
+ ]
28796
+ },
28049
28797
  "pricedRecordCount": {
28050
28798
  "type": "number"
28051
28799
  },
@@ -28102,6 +28850,32 @@ export const OPERATOR_CONTRACT = {
28102
28850
  "unpriced"
28103
28851
  ]
28104
28852
  },
28853
+ "costSource": {
28854
+ "anyOf": [
28855
+ {
28856
+ "type": "string",
28857
+ "enum": [
28858
+ "user",
28859
+ "provider",
28860
+ "catalog",
28861
+ "mixed"
28862
+ ]
28863
+ },
28864
+ {
28865
+ "type": "null"
28866
+ }
28867
+ ]
28868
+ },
28869
+ "pricingAsOf": {
28870
+ "anyOf": [
28871
+ {
28872
+ "type": "string"
28873
+ },
28874
+ {
28875
+ "type": "null"
28876
+ }
28877
+ ]
28878
+ },
28105
28879
  "pricedRecordCount": {
28106
28880
  "type": "number"
28107
28881
  },
@@ -28137,6 +28911,8 @@ export const OPERATOR_CONTRACT = {
28137
28911
  "key",
28138
28912
  "costUsd",
28139
28913
  "costState",
28914
+ "costSource",
28915
+ "pricingAsOf",
28140
28916
  "pricedRecordCount",
28141
28917
  "unpricedRecordCount",
28142
28918
  "tokens"
@@ -28151,6 +28927,8 @@ export const OPERATOR_CONTRACT = {
28151
28927
  "dimension",
28152
28928
  "totalCostUsd",
28153
28929
  "costState",
28930
+ "costSource",
28931
+ "pricingAsOf",
28154
28932
  "pricedRecordCount",
28155
28933
  "unpricedRecordCount",
28156
28934
  "tokens",
@@ -28766,8 +29544,8 @@ export const OPERATOR_CONTRACT = {
28766
29544
  },
28767
29545
  {
28768
29546
  "id": "flags.graduation.report",
28769
- "title": "Feature Flag Graduation Report",
28770
- "description": "Return the feature-flag graduation report: every flag with its current default, graduation state (dark = default-off with no evidence, soaking = accumulating evidence, graduate-candidate = judged ready and awaiting a release decision, graduated = default flipped on, blocked = held off with a dated reason), and its validation evidence. Evidence is real-only: a flag with no instrumentation reports \"no evidence collected\", never a fabricated readiness; the permissions divergence simulation is the one wired instrumentation today. releaseBlockers lists every graduate-candidate flag — the release policy (bun run flags:graduation) fails while that list is non-empty, forcing each ready flag to flip on or record a dated blocker.",
29547
+ "title": "Feature Defaults Report",
29548
+ "description": "Return the feature defaults report: every platform capability with its current default, default-disposition state (dark = default-off with no evidence, soaking = accumulating evidence, graduate-candidate = judged ready and awaiting a release decision, graduated = default on, blocked = held off with a dated reason), and its validation evidence. Evidence is real-only: a capability with no instrumentation reports \"no evidence collected\", never a fabricated readiness; the permissions divergence simulation is the one wired instrumentation today. releaseBlockers lists every graduate-candidate entry — the release policy (bun run flags:graduation) fails while that list is non-empty, forcing each ready default to flip on or record a dated blocker.",
28771
29549
  "category": "flags",
28772
29550
  "source": "builtin",
28773
29551
  "access": "authenticated",
@@ -29065,6 +29843,8 @@ export const OPERATOR_CONTRACT = {
29065
29843
  "workstream",
29066
29844
  "phase",
29067
29845
  "work-item",
29846
+ "acp-agent",
29847
+ "observed-external",
29068
29848
  "code-index"
29069
29849
  ]
29070
29850
  },
@@ -29167,6 +29947,18 @@ export const OPERATOR_CONTRACT = {
29167
29947
  "estimated"
29168
29948
  ]
29169
29949
  },
29950
+ "costSource": {
29951
+ "type": "string",
29952
+ "enum": [
29953
+ "user",
29954
+ "provider",
29955
+ "catalog",
29956
+ "mixed"
29957
+ ]
29958
+ },
29959
+ "pricingAsOf": {
29960
+ "type": "string"
29961
+ },
29170
29962
  "currentActivity": {
29171
29963
  "type": "object",
29172
29964
  "properties": {
@@ -29230,7 +30022,9 @@ export const OPERATOR_CONTRACT = {
29230
30022
  "type": "string",
29231
30023
  "enum": [
29232
30024
  "approval",
29233
- "input"
30025
+ "input",
30026
+ "pick",
30027
+ "conflict"
29234
30028
  ]
29235
30029
  },
29236
30030
  "detail": {
@@ -29253,6 +30047,133 @@ export const OPERATOR_CONTRACT = {
29253
30047
  }
29254
30048
  },
29255
30049
  "additionalProperties": false
30050
+ },
30051
+ "review": {
30052
+ "type": "object",
30053
+ "properties": {
30054
+ "score": {
30055
+ "type": "number"
30056
+ },
30057
+ "passed": {
30058
+ "type": "boolean"
30059
+ },
30060
+ "cycles": {
30061
+ "type": "number"
30062
+ },
30063
+ "checklist": {
30064
+ "type": "array",
30065
+ "items": {
30066
+ "type": "object",
30067
+ "properties": {
30068
+ "item": {
30069
+ "type": "string"
30070
+ },
30071
+ "verified": {
30072
+ "type": "boolean"
30073
+ },
30074
+ "evidence": {
30075
+ "type": "string"
30076
+ },
30077
+ "howExercised": {
30078
+ "type": "string"
30079
+ }
30080
+ },
30081
+ "required": [
30082
+ "item",
30083
+ "verified",
30084
+ "evidence"
30085
+ ],
30086
+ "additionalProperties": false
30087
+ }
30088
+ }
30089
+ },
30090
+ "required": [
30091
+ "score",
30092
+ "passed",
30093
+ "cycles",
30094
+ "checklist"
30095
+ ],
30096
+ "additionalProperties": false
30097
+ },
30098
+ "observed": {
30099
+ "type": "object",
30100
+ "properties": {
30101
+ "externalKind": {
30102
+ "type": "string",
30103
+ "enum": [
30104
+ "claude-code",
30105
+ "codex",
30106
+ "opencode",
30107
+ "unknown"
30108
+ ]
30109
+ },
30110
+ "pid": {
30111
+ "type": "number"
30112
+ },
30113
+ "cwd": {
30114
+ "type": "string"
30115
+ },
30116
+ "liveness": {
30117
+ "type": "object",
30118
+ "properties": {
30119
+ "state": {
30120
+ "type": "string",
30121
+ "enum": [
30122
+ "active",
30123
+ "quiet"
30124
+ ]
30125
+ },
30126
+ "cpuSeconds": {
30127
+ "type": "number"
30128
+ },
30129
+ "detail": {
30130
+ "type": "string"
30131
+ }
30132
+ },
30133
+ "required": [
30134
+ "state",
30135
+ "cpuSeconds",
30136
+ "detail"
30137
+ ],
30138
+ "additionalProperties": false
30139
+ },
30140
+ "steer": {
30141
+ "type": "object",
30142
+ "properties": {
30143
+ "kind": {
30144
+ "type": "string",
30145
+ "enum": [
30146
+ "tmux",
30147
+ "none"
30148
+ ]
30149
+ },
30150
+ "paneId": {
30151
+ "type": "string"
30152
+ },
30153
+ "tty": {
30154
+ "type": "string"
30155
+ },
30156
+ "reason": {
30157
+ "type": "string"
30158
+ }
30159
+ },
30160
+ "required": [
30161
+ "kind"
30162
+ ],
30163
+ "additionalProperties": false
30164
+ },
30165
+ "steerDrillInOnly": {
30166
+ "type": "boolean"
30167
+ }
30168
+ },
30169
+ "required": [
30170
+ "externalKind",
30171
+ "pid",
30172
+ "liveness",
30173
+ "steer",
30174
+ "steerDrillInOnly"
30175
+ ],
30176
+ "additionalProperties": false
29256
30177
  }
29257
30178
  },
29258
30179
  "required": [
@@ -29506,6 +30427,18 @@ export const OPERATOR_CONTRACT = {
29506
30427
  "unpriced",
29507
30428
  "estimated"
29508
30429
  ]
30430
+ },
30431
+ "costSource": {
30432
+ "type": "string",
30433
+ "enum": [
30434
+ "user",
30435
+ "provider",
30436
+ "catalog",
30437
+ "mixed"
30438
+ ]
30439
+ },
30440
+ "pricingAsOf": {
30441
+ "type": "string"
29509
30442
  }
29510
30443
  },
29511
30444
  "required": [
@@ -29672,6 +30605,9 @@ export const OPERATOR_CONTRACT = {
29672
30605
  },
29673
30606
  "winnerItemId": {
29674
30607
  "type": "string"
30608
+ },
30609
+ "confirm": {
30610
+ "type": "boolean"
29675
30611
  }
29676
30612
  },
29677
30613
  "required": [
@@ -29683,6 +30619,9 @@ export const OPERATOR_CONTRACT = {
29683
30619
  "outputSchema": {
29684
30620
  "type": "object",
29685
30621
  "properties": {
30622
+ "applied": {
30623
+ "type": "boolean"
30624
+ },
29686
30625
  "groupId": {
29687
30626
  "type": "string"
29688
30627
  },
@@ -29697,13 +30636,263 @@ export const OPERATOR_CONTRACT = {
29697
30636
  },
29698
30637
  "auto": {
29699
30638
  "type": "boolean"
30639
+ },
30640
+ "requiresConfirm": {
30641
+ "type": "boolean"
30642
+ },
30643
+ "group": {
30644
+ "type": "object",
30645
+ "properties": {
30646
+ "groupId": {
30647
+ "type": "string"
30648
+ },
30649
+ "workstreamId": {
30650
+ "type": "string"
30651
+ },
30652
+ "sourceTitle": {
30653
+ "type": "string"
30654
+ },
30655
+ "ready": {
30656
+ "type": "boolean"
30657
+ },
30658
+ "candidates": {
30659
+ "type": "array",
30660
+ "items": {
30661
+ "type": "object",
30662
+ "properties": {
30663
+ "itemId": {
30664
+ "type": "string"
30665
+ },
30666
+ "attemptIndex": {
30667
+ "type": "number"
30668
+ },
30669
+ "state": {
30670
+ "type": "string",
30671
+ "enum": [
30672
+ "held-merge",
30673
+ "failed"
30674
+ ]
30675
+ },
30676
+ "title": {
30677
+ "type": "string"
30678
+ },
30679
+ "worktreePath": {
30680
+ "anyOf": [
30681
+ {
30682
+ "type": "string"
30683
+ },
30684
+ {
30685
+ "type": "null"
30686
+ }
30687
+ ]
30688
+ },
30689
+ "branch": {
30690
+ "anyOf": [
30691
+ {
30692
+ "type": "string"
30693
+ },
30694
+ {
30695
+ "type": "null"
30696
+ }
30697
+ ]
30698
+ },
30699
+ "usage": {
30700
+ "type": "object",
30701
+ "properties": {
30702
+ "inputTokens": {
30703
+ "type": "number"
30704
+ },
30705
+ "outputTokens": {
30706
+ "type": "number"
30707
+ },
30708
+ "cacheReadTokens": {
30709
+ "type": "number"
30710
+ },
30711
+ "cacheWriteTokens": {
30712
+ "type": "number"
30713
+ },
30714
+ "reasoningTokens": {
30715
+ "type": "number"
30716
+ },
30717
+ "llmCallCount": {
30718
+ "type": "number"
30719
+ },
30720
+ "turnCount": {
30721
+ "type": "number"
30722
+ },
30723
+ "toolCallCount": {
30724
+ "type": "number"
30725
+ },
30726
+ "costUsd": {
30727
+ "anyOf": [
30728
+ {
30729
+ "type": "number"
30730
+ },
30731
+ {
30732
+ "type": "null"
30733
+ }
30734
+ ]
30735
+ },
30736
+ "costState": {
30737
+ "type": "string",
30738
+ "enum": [
30739
+ "priced",
30740
+ "unpriced",
30741
+ "estimated"
30742
+ ]
30743
+ },
30744
+ "costSource": {
30745
+ "type": "string",
30746
+ "enum": [
30747
+ "user",
30748
+ "provider",
30749
+ "catalog",
30750
+ "mixed"
30751
+ ]
30752
+ },
30753
+ "pricingAsOf": {
30754
+ "type": "string"
30755
+ }
30756
+ },
30757
+ "required": [
30758
+ "inputTokens",
30759
+ "outputTokens",
30760
+ "cacheReadTokens",
30761
+ "cacheWriteTokens",
30762
+ "llmCallCount",
30763
+ "turnCount",
30764
+ "toolCallCount",
30765
+ "costUsd",
30766
+ "costState"
30767
+ ],
30768
+ "additionalProperties": false
30769
+ },
30770
+ "failureReason": {
30771
+ "anyOf": [
30772
+ {
30773
+ "type": "string"
30774
+ },
30775
+ {
30776
+ "type": "null"
30777
+ }
30778
+ ]
30779
+ },
30780
+ "diff": {
30781
+ "anyOf": [
30782
+ {
30783
+ "type": "object",
30784
+ "properties": {
30785
+ "files": {
30786
+ "type": "array",
30787
+ "items": {
30788
+ "type": "string"
30789
+ }
30790
+ },
30791
+ "unifiedDiff": {
30792
+ "type": "string"
30793
+ },
30794
+ "stat": {
30795
+ "type": "string"
30796
+ }
30797
+ },
30798
+ "required": [
30799
+ "files",
30800
+ "unifiedDiff",
30801
+ "stat"
30802
+ ],
30803
+ "additionalProperties": false
30804
+ },
30805
+ {
30806
+ "type": "null"
30807
+ }
30808
+ ]
30809
+ }
30810
+ },
30811
+ "required": [
30812
+ "itemId",
30813
+ "attemptIndex",
30814
+ "state",
30815
+ "title",
30816
+ "worktreePath",
30817
+ "branch",
30818
+ "usage",
30819
+ "failureReason",
30820
+ "diff"
30821
+ ],
30822
+ "additionalProperties": false
30823
+ }
30824
+ },
30825
+ "autoAccept": {
30826
+ "type": "boolean"
30827
+ },
30828
+ "judgment": {
30829
+ "anyOf": [
30830
+ {
30831
+ "type": "object",
30832
+ "properties": {
30833
+ "proposedWinnerItemId": {
30834
+ "anyOf": [
30835
+ {
30836
+ "type": "string"
30837
+ },
30838
+ {
30839
+ "type": "null"
30840
+ }
30841
+ ]
30842
+ },
30843
+ "reasons": {
30844
+ "type": "array",
30845
+ "items": {
30846
+ "type": "string"
30847
+ }
30848
+ },
30849
+ "model": {
30850
+ "anyOf": [
30851
+ {
30852
+ "type": "string"
30853
+ },
30854
+ {
30855
+ "type": "null"
30856
+ }
30857
+ ]
30858
+ },
30859
+ "scoredBy": {
30860
+ "type": "string",
30861
+ "enum": [
30862
+ "model"
30863
+ ]
30864
+ }
30865
+ },
30866
+ "required": [
30867
+ "proposedWinnerItemId",
30868
+ "reasons",
30869
+ "model",
30870
+ "scoredBy"
30871
+ ],
30872
+ "additionalProperties": false
30873
+ },
30874
+ {
30875
+ "type": "null"
30876
+ }
30877
+ ]
30878
+ }
30879
+ },
30880
+ "required": [
30881
+ "groupId",
30882
+ "workstreamId",
30883
+ "sourceTitle",
30884
+ "ready",
30885
+ "candidates",
30886
+ "autoAccept",
30887
+ "judgment"
30888
+ ],
30889
+ "additionalProperties": false
29700
30890
  }
29701
30891
  },
29702
30892
  "required": [
30893
+ "applied",
29703
30894
  "groupId",
29704
- "winnerItemId",
29705
- "loserItemIds",
29706
- "auto"
30895
+ "winnerItemId"
29707
30896
  ],
29708
30897
  "additionalProperties": false
29709
30898
  },
@@ -29711,9 +30900,9 @@ export const OPERATOR_CONTRACT = {
29711
30900
  "invokable": true
29712
30901
  },
29713
30902
  {
29714
- "id": "fleet.list",
29715
- "title": "List Fleet Processes",
29716
- "description": "Paginated, filtered (kinds/states) query over the live process registry. Cursor pagination returns disjoint pages that union to the full matching set at query time.",
30903
+ "id": "fleet.conflicts.list",
30904
+ "title": "List Merge-Conflict Rows",
30905
+ "description": "Return every work item whose integration merge CONFLICTED and is waiting on a human: the kept worktree path, item branch, the STRUCTURED conflicting-file list, and the resolution session id once one was spawned. Optionally filtered to one workstream. Read-only.",
29717
30906
  "category": "fleet",
29718
30907
  "source": "builtin",
29719
30908
  "access": "authenticated",
@@ -29726,22 +30915,7 @@ export const OPERATOR_CONTRACT = {
29726
30915
  "inputSchema": {
29727
30916
  "type": "object",
29728
30917
  "properties": {
29729
- "kinds": {
29730
- "type": "array",
29731
- "items": {
29732
- "type": "string"
29733
- }
29734
- },
29735
- "states": {
29736
- "type": "array",
29737
- "items": {
29738
- "type": "string"
29739
- }
29740
- },
29741
- "limit": {
29742
- "type": "number"
29743
- },
29744
- "cursor": {
30918
+ "workstreamId": {
29745
30919
  "type": "string"
29746
30920
  }
29747
30921
  },
@@ -29750,130 +30924,448 @@ export const OPERATOR_CONTRACT = {
29750
30924
  "outputSchema": {
29751
30925
  "type": "object",
29752
30926
  "properties": {
29753
- "items": {
30927
+ "conflicts": {
29754
30928
  "type": "array",
29755
30929
  "items": {
29756
30930
  "type": "object",
29757
30931
  "properties": {
29758
- "id": {
29759
- "type": "string"
29760
- },
29761
- "kind": {
29762
- "type": "string",
29763
- "enum": [
29764
- "agent",
29765
- "wrfc-chain",
29766
- "wrfc-subtask",
29767
- "workflow",
29768
- "trigger",
29769
- "schedule",
29770
- "watcher",
29771
- "background-process",
29772
- "workstream",
29773
- "phase",
29774
- "work-item",
29775
- "code-index"
29776
- ]
29777
- },
29778
- "parentId": {
30932
+ "workstreamId": {
29779
30933
  "type": "string"
29780
30934
  },
29781
- "label": {
30935
+ "itemId": {
29782
30936
  "type": "string"
29783
30937
  },
29784
- "task": {
30938
+ "title": {
29785
30939
  "type": "string"
29786
30940
  },
29787
- "state": {
29788
- "type": "string",
29789
- "enum": [
29790
- "thinking",
29791
- "executing-tool",
29792
- "awaiting-approval",
29793
- "streaming",
29794
- "stalled",
29795
- "retrying",
29796
- "done",
29797
- "failed",
29798
- "killed",
29799
- "interrupted",
29800
- "idle",
29801
- "queued",
29802
- "paused"
29803
- ]
29804
- },
29805
- "startedAt": {
29806
- "type": "number"
29807
- },
29808
- "completedAt": {
29809
- "type": "number"
29810
- },
29811
- "elapsedMs": {
29812
- "type": "number"
29813
- },
29814
- "usage": {
29815
- "type": "object",
29816
- "properties": {
29817
- "inputTokens": {
29818
- "type": "number"
29819
- },
29820
- "outputTokens": {
29821
- "type": "number"
29822
- },
29823
- "cacheReadTokens": {
29824
- "type": "number"
29825
- },
29826
- "cacheWriteTokens": {
29827
- "type": "number"
29828
- },
29829
- "reasoningTokens": {
29830
- "type": "number"
29831
- },
29832
- "llmCallCount": {
29833
- "type": "number"
29834
- },
29835
- "turnCount": {
29836
- "type": "number"
29837
- },
29838
- "toolCallCount": {
29839
- "type": "number"
29840
- }
29841
- },
29842
- "required": [
29843
- "inputTokens",
29844
- "outputTokens",
29845
- "cacheReadTokens",
29846
- "cacheWriteTokens",
29847
- "llmCallCount",
29848
- "turnCount",
29849
- "toolCallCount"
29850
- ],
29851
- "additionalProperties": false
29852
- },
29853
- "model": {
30941
+ "worktreePath": {
29854
30942
  "type": "string"
29855
30943
  },
29856
- "provider": {
30944
+ "branch": {
29857
30945
  "type": "string"
29858
30946
  },
29859
- "costUsd": {
29860
- "anyOf": [
29861
- {
29862
- "type": "number"
29863
- },
29864
- {
29865
- "type": "null"
29866
- }
29867
- ]
30947
+ "files": {
30948
+ "type": "array",
30949
+ "items": {
30950
+ "type": "string"
30951
+ }
29868
30952
  },
29869
- "costState": {
29870
- "type": "string",
29871
- "enum": [
29872
- "priced",
29873
- "unpriced",
29874
- "estimated"
30953
+ "resolutionSessionId": {
30954
+ "type": "string"
30955
+ }
30956
+ },
30957
+ "required": [
30958
+ "workstreamId",
30959
+ "itemId",
30960
+ "title",
30961
+ "worktreePath",
30962
+ "files"
30963
+ ],
30964
+ "additionalProperties": false
30965
+ }
30966
+ }
30967
+ },
30968
+ "required": [
30969
+ "conflicts"
30970
+ ],
30971
+ "additionalProperties": false
30972
+ },
30973
+ "invokable": true
30974
+ },
30975
+ {
30976
+ "id": "fleet.conflicts.resolve",
30977
+ "title": "Spawn a Conflict-Resolution Session",
30978
+ "description": "The conflict row's one action: spawn a resolution session INSIDE the kept worktree, seeded with the structured conflict list and tree path (the same seeded-session machinery as the CI fix flow), and stamp the REAL session id back onto the item. When the resolution lands and the re-merge succeeds, the kept tree is reclaimed automatically. An item with no unresolved conflict is an honest 409.",
30979
+ "category": "fleet",
30980
+ "source": "builtin",
30981
+ "access": "authenticated",
30982
+ "transport": [
30983
+ "ws"
30984
+ ],
30985
+ "scopes": [
30986
+ "write:fleet"
30987
+ ],
30988
+ "inputSchema": {
30989
+ "type": "object",
30990
+ "properties": {
30991
+ "itemId": {
30992
+ "type": "string"
30993
+ }
30994
+ },
30995
+ "required": [
30996
+ "itemId"
30997
+ ],
30998
+ "additionalProperties": false
30999
+ },
31000
+ "outputSchema": {
31001
+ "type": "object",
31002
+ "properties": {
31003
+ "itemId": {
31004
+ "type": "string"
31005
+ },
31006
+ "sessionId": {
31007
+ "type": "string"
31008
+ },
31009
+ "worktreePath": {
31010
+ "type": "string"
31011
+ },
31012
+ "files": {
31013
+ "type": "array",
31014
+ "items": {
31015
+ "type": "string"
31016
+ }
31017
+ }
31018
+ },
31019
+ "required": [
31020
+ "itemId",
31021
+ "sessionId",
31022
+ "worktreePath",
31023
+ "files"
31024
+ ],
31025
+ "additionalProperties": false
31026
+ },
31027
+ "invokable": true
31028
+ },
31029
+ {
31030
+ "id": "fleet.graph.get",
31031
+ "title": "Get Workstream Task Graph",
31032
+ "description": "The dependency-graph view of one workstream: nodes (id, title, state, cluster, files, merge state, blocked reason, orphaned flag, deepest-remaining-path depth, stalled tell, agent), edges (from depends on to), and the elastic-pool state (ready/running counts, at-cap, cap key + size, any spawn refusal). Surfaces render the task graph under the chain from this — the fleet/observability idiom. 404 when the workstream is unknown to this daemon.",
31033
+ "category": "fleet",
31034
+ "source": "builtin",
31035
+ "access": "authenticated",
31036
+ "transport": [
31037
+ "http",
31038
+ "ws"
31039
+ ],
31040
+ "scopes": [
31041
+ "read:fleet"
31042
+ ],
31043
+ "http": {
31044
+ "method": "GET",
31045
+ "path": "/api/fleet/workstreams/{workstreamId}/graph"
31046
+ },
31047
+ "inputSchema": {
31048
+ "type": "object",
31049
+ "properties": {
31050
+ "workstreamId": {
31051
+ "type": "string"
31052
+ }
31053
+ },
31054
+ "required": [
31055
+ "workstreamId"
31056
+ ],
31057
+ "additionalProperties": false
31058
+ },
31059
+ "outputSchema": {
31060
+ "type": "object",
31061
+ "properties": {
31062
+ "workstreamId": {
31063
+ "type": "string"
31064
+ },
31065
+ "title": {
31066
+ "type": "string"
31067
+ },
31068
+ "nodes": {
31069
+ "type": "array",
31070
+ "items": {
31071
+ "type": "object",
31072
+ "properties": {
31073
+ "id": {
31074
+ "type": "string"
31075
+ },
31076
+ "title": {
31077
+ "type": "string"
31078
+ },
31079
+ "state": {
31080
+ "type": "string"
31081
+ },
31082
+ "cluster": {
31083
+ "type": "string"
31084
+ },
31085
+ "files": {
31086
+ "type": "array",
31087
+ "items": {
31088
+ "type": "string"
31089
+ }
31090
+ },
31091
+ "mergeState": {
31092
+ "type": "string"
31093
+ },
31094
+ "blockedReason": {
31095
+ "type": "string"
31096
+ },
31097
+ "orphaned": {
31098
+ "type": "boolean"
31099
+ },
31100
+ "remainingDepth": {
31101
+ "type": "number"
31102
+ },
31103
+ "stalled": {
31104
+ "type": "boolean"
31105
+ },
31106
+ "agentId": {
31107
+ "type": "string"
31108
+ }
31109
+ },
31110
+ "required": [
31111
+ "id",
31112
+ "title",
31113
+ "state",
31114
+ "files",
31115
+ "orphaned",
31116
+ "remainingDepth",
31117
+ "stalled"
31118
+ ],
31119
+ "additionalProperties": false
31120
+ }
31121
+ },
31122
+ "edges": {
31123
+ "type": "array",
31124
+ "items": {
31125
+ "type": "object",
31126
+ "properties": {
31127
+ "from": {
31128
+ "type": "string"
31129
+ },
31130
+ "to": {
31131
+ "type": "string"
31132
+ }
31133
+ },
31134
+ "required": [
31135
+ "from",
31136
+ "to"
31137
+ ],
31138
+ "additionalProperties": false
31139
+ }
31140
+ },
31141
+ "pool": {
31142
+ "anyOf": [
31143
+ {
31144
+ "type": "object",
31145
+ "properties": {
31146
+ "ready": {
31147
+ "type": "number"
31148
+ },
31149
+ "running": {
31150
+ "type": "number"
31151
+ },
31152
+ "atCap": {
31153
+ "type": "boolean"
31154
+ },
31155
+ "capKey": {
31156
+ "type": "string"
31157
+ },
31158
+ "maxSize": {
31159
+ "type": "number"
31160
+ },
31161
+ "refusal": {
31162
+ "type": "string"
31163
+ }
31164
+ },
31165
+ "required": [
31166
+ "ready",
31167
+ "running",
31168
+ "atCap",
31169
+ "capKey",
31170
+ "maxSize"
31171
+ ],
31172
+ "additionalProperties": false
31173
+ },
31174
+ {
31175
+ "type": "null"
31176
+ }
31177
+ ]
31178
+ }
31179
+ },
31180
+ "required": [
31181
+ "workstreamId",
31182
+ "title",
31183
+ "nodes",
31184
+ "edges",
31185
+ "pool"
31186
+ ],
31187
+ "additionalProperties": false
31188
+ },
31189
+ "invokable": true
31190
+ },
31191
+ {
31192
+ "id": "fleet.list",
31193
+ "title": "List Fleet Processes",
31194
+ "description": "Paginated, filtered (kinds/states) query over the live process registry. Cursor pagination returns disjoint pages that union to the full matching set at query time.",
31195
+ "category": "fleet",
31196
+ "source": "builtin",
31197
+ "access": "authenticated",
31198
+ "transport": [
31199
+ "ws"
31200
+ ],
31201
+ "scopes": [
31202
+ "read:fleet"
31203
+ ],
31204
+ "inputSchema": {
31205
+ "type": "object",
31206
+ "properties": {
31207
+ "kinds": {
31208
+ "type": "array",
31209
+ "items": {
31210
+ "type": "string"
31211
+ }
31212
+ },
31213
+ "states": {
31214
+ "type": "array",
31215
+ "items": {
31216
+ "type": "string"
31217
+ }
31218
+ },
31219
+ "limit": {
31220
+ "type": "number"
31221
+ },
31222
+ "cursor": {
31223
+ "type": "string"
31224
+ }
31225
+ },
31226
+ "additionalProperties": false
31227
+ },
31228
+ "outputSchema": {
31229
+ "type": "object",
31230
+ "properties": {
31231
+ "items": {
31232
+ "type": "array",
31233
+ "items": {
31234
+ "type": "object",
31235
+ "properties": {
31236
+ "id": {
31237
+ "type": "string"
31238
+ },
31239
+ "kind": {
31240
+ "type": "string",
31241
+ "enum": [
31242
+ "agent",
31243
+ "wrfc-chain",
31244
+ "wrfc-subtask",
31245
+ "workflow",
31246
+ "trigger",
31247
+ "schedule",
31248
+ "watcher",
31249
+ "background-process",
31250
+ "workstream",
31251
+ "phase",
31252
+ "work-item",
31253
+ "acp-agent",
31254
+ "observed-external",
31255
+ "code-index"
31256
+ ]
31257
+ },
31258
+ "parentId": {
31259
+ "type": "string"
31260
+ },
31261
+ "label": {
31262
+ "type": "string"
31263
+ },
31264
+ "task": {
31265
+ "type": "string"
31266
+ },
31267
+ "state": {
31268
+ "type": "string",
31269
+ "enum": [
31270
+ "thinking",
31271
+ "executing-tool",
31272
+ "awaiting-approval",
31273
+ "streaming",
31274
+ "stalled",
31275
+ "retrying",
31276
+ "done",
31277
+ "failed",
31278
+ "killed",
31279
+ "interrupted",
31280
+ "idle",
31281
+ "queued",
31282
+ "paused"
31283
+ ]
31284
+ },
31285
+ "startedAt": {
31286
+ "type": "number"
31287
+ },
31288
+ "completedAt": {
31289
+ "type": "number"
31290
+ },
31291
+ "elapsedMs": {
31292
+ "type": "number"
31293
+ },
31294
+ "usage": {
31295
+ "type": "object",
31296
+ "properties": {
31297
+ "inputTokens": {
31298
+ "type": "number"
31299
+ },
31300
+ "outputTokens": {
31301
+ "type": "number"
31302
+ },
31303
+ "cacheReadTokens": {
31304
+ "type": "number"
31305
+ },
31306
+ "cacheWriteTokens": {
31307
+ "type": "number"
31308
+ },
31309
+ "reasoningTokens": {
31310
+ "type": "number"
31311
+ },
31312
+ "llmCallCount": {
31313
+ "type": "number"
31314
+ },
31315
+ "turnCount": {
31316
+ "type": "number"
31317
+ },
31318
+ "toolCallCount": {
31319
+ "type": "number"
31320
+ }
31321
+ },
31322
+ "required": [
31323
+ "inputTokens",
31324
+ "outputTokens",
31325
+ "cacheReadTokens",
31326
+ "cacheWriteTokens",
31327
+ "llmCallCount",
31328
+ "turnCount",
31329
+ "toolCallCount"
31330
+ ],
31331
+ "additionalProperties": false
31332
+ },
31333
+ "model": {
31334
+ "type": "string"
31335
+ },
31336
+ "provider": {
31337
+ "type": "string"
31338
+ },
31339
+ "costUsd": {
31340
+ "anyOf": [
31341
+ {
31342
+ "type": "number"
31343
+ },
31344
+ {
31345
+ "type": "null"
31346
+ }
31347
+ ]
31348
+ },
31349
+ "costState": {
31350
+ "type": "string",
31351
+ "enum": [
31352
+ "priced",
31353
+ "unpriced",
31354
+ "estimated"
31355
+ ]
31356
+ },
31357
+ "costSource": {
31358
+ "type": "string",
31359
+ "enum": [
31360
+ "user",
31361
+ "provider",
31362
+ "catalog",
31363
+ "mixed"
29875
31364
  ]
29876
31365
  },
31366
+ "pricingAsOf": {
31367
+ "type": "string"
31368
+ },
29877
31369
  "currentActivity": {
29878
31370
  "type": "object",
29879
31371
  "properties": {
@@ -29937,7 +31429,9 @@ export const OPERATOR_CONTRACT = {
29937
31429
  "type": "string",
29938
31430
  "enum": [
29939
31431
  "approval",
29940
- "input"
31432
+ "input",
31433
+ "pick",
31434
+ "conflict"
29941
31435
  ]
29942
31436
  },
29943
31437
  "detail": {
@@ -29960,6 +31454,133 @@ export const OPERATOR_CONTRACT = {
29960
31454
  }
29961
31455
  },
29962
31456
  "additionalProperties": false
31457
+ },
31458
+ "review": {
31459
+ "type": "object",
31460
+ "properties": {
31461
+ "score": {
31462
+ "type": "number"
31463
+ },
31464
+ "passed": {
31465
+ "type": "boolean"
31466
+ },
31467
+ "cycles": {
31468
+ "type": "number"
31469
+ },
31470
+ "checklist": {
31471
+ "type": "array",
31472
+ "items": {
31473
+ "type": "object",
31474
+ "properties": {
31475
+ "item": {
31476
+ "type": "string"
31477
+ },
31478
+ "verified": {
31479
+ "type": "boolean"
31480
+ },
31481
+ "evidence": {
31482
+ "type": "string"
31483
+ },
31484
+ "howExercised": {
31485
+ "type": "string"
31486
+ }
31487
+ },
31488
+ "required": [
31489
+ "item",
31490
+ "verified",
31491
+ "evidence"
31492
+ ],
31493
+ "additionalProperties": false
31494
+ }
31495
+ }
31496
+ },
31497
+ "required": [
31498
+ "score",
31499
+ "passed",
31500
+ "cycles",
31501
+ "checklist"
31502
+ ],
31503
+ "additionalProperties": false
31504
+ },
31505
+ "observed": {
31506
+ "type": "object",
31507
+ "properties": {
31508
+ "externalKind": {
31509
+ "type": "string",
31510
+ "enum": [
31511
+ "claude-code",
31512
+ "codex",
31513
+ "opencode",
31514
+ "unknown"
31515
+ ]
31516
+ },
31517
+ "pid": {
31518
+ "type": "number"
31519
+ },
31520
+ "cwd": {
31521
+ "type": "string"
31522
+ },
31523
+ "liveness": {
31524
+ "type": "object",
31525
+ "properties": {
31526
+ "state": {
31527
+ "type": "string",
31528
+ "enum": [
31529
+ "active",
31530
+ "quiet"
31531
+ ]
31532
+ },
31533
+ "cpuSeconds": {
31534
+ "type": "number"
31535
+ },
31536
+ "detail": {
31537
+ "type": "string"
31538
+ }
31539
+ },
31540
+ "required": [
31541
+ "state",
31542
+ "cpuSeconds",
31543
+ "detail"
31544
+ ],
31545
+ "additionalProperties": false
31546
+ },
31547
+ "steer": {
31548
+ "type": "object",
31549
+ "properties": {
31550
+ "kind": {
31551
+ "type": "string",
31552
+ "enum": [
31553
+ "tmux",
31554
+ "none"
31555
+ ]
31556
+ },
31557
+ "paneId": {
31558
+ "type": "string"
31559
+ },
31560
+ "tty": {
31561
+ "type": "string"
31562
+ },
31563
+ "reason": {
31564
+ "type": "string"
31565
+ }
31566
+ },
31567
+ "required": [
31568
+ "kind"
31569
+ ],
31570
+ "additionalProperties": false
31571
+ },
31572
+ "steerDrillInOnly": {
31573
+ "type": "boolean"
31574
+ }
31575
+ },
31576
+ "required": [
31577
+ "externalKind",
31578
+ "pid",
31579
+ "liveness",
31580
+ "steer",
31581
+ "steerDrillInOnly"
31582
+ ],
31583
+ "additionalProperties": false
29963
31584
  }
29964
31585
  },
29965
31586
  "required": [
@@ -29993,6 +31614,55 @@ export const OPERATOR_CONTRACT = {
29993
31614
  },
29994
31615
  "invokable": true
29995
31616
  },
31617
+ {
31618
+ "id": "fleet.observed.steer",
31619
+ "title": "Steer an Observed Foreign Agent",
31620
+ "description": "Drill-in steer of an externally-launched coding-agent session goodvibes only OBSERVES (a Claude Code / Codex process it did not spawn or host). The steer rides the foreign session's own control channel — for a tmux-hosted session, the exact three-send recipe (message text, then two Enters) targeted at its pane. queued:false with an honest reason when the row exposes no channel (no controlling terminal / no tmux pane) or a send fails. STOP is never offered on an observed row — observing and steering is not owning the lifecycle. Weighted as a drill-in capability (see the node's observed.steerDrillInOnly), never a bulk affordance.",
31621
+ "category": "fleet",
31622
+ "source": "builtin",
31623
+ "access": "authenticated",
31624
+ "transport": [
31625
+ "ws"
31626
+ ],
31627
+ "scopes": [
31628
+ "write:fleet"
31629
+ ],
31630
+ "inputSchema": {
31631
+ "type": "object",
31632
+ "properties": {
31633
+ "id": {
31634
+ "type": "string"
31635
+ },
31636
+ "text": {
31637
+ "type": "string"
31638
+ }
31639
+ },
31640
+ "required": [
31641
+ "id",
31642
+ "text"
31643
+ ],
31644
+ "additionalProperties": false
31645
+ },
31646
+ "outputSchema": {
31647
+ "type": "object",
31648
+ "properties": {
31649
+ "queued": {
31650
+ "type": "boolean"
31651
+ },
31652
+ "messageId": {
31653
+ "type": "string"
31654
+ },
31655
+ "reason": {
31656
+ "type": "string"
31657
+ }
31658
+ },
31659
+ "required": [
31660
+ "queued"
31661
+ ],
31662
+ "additionalProperties": false
31663
+ },
31664
+ "invokable": true
31665
+ },
29996
31666
  {
29997
31667
  "id": "fleet.snapshot",
29998
31668
  "title": "Fleet Snapshot",
@@ -30039,6 +31709,8 @@ export const OPERATOR_CONTRACT = {
30039
31709
  "workstream",
30040
31710
  "phase",
30041
31711
  "work-item",
31712
+ "acp-agent",
31713
+ "observed-external",
30042
31714
  "code-index"
30043
31715
  ]
30044
31716
  },
@@ -30141,6 +31813,18 @@ export const OPERATOR_CONTRACT = {
30141
31813
  "estimated"
30142
31814
  ]
30143
31815
  },
31816
+ "costSource": {
31817
+ "type": "string",
31818
+ "enum": [
31819
+ "user",
31820
+ "provider",
31821
+ "catalog",
31822
+ "mixed"
31823
+ ]
31824
+ },
31825
+ "pricingAsOf": {
31826
+ "type": "string"
31827
+ },
30144
31828
  "currentActivity": {
30145
31829
  "type": "object",
30146
31830
  "properties": {
@@ -30204,7 +31888,9 @@ export const OPERATOR_CONTRACT = {
30204
31888
  "type": "string",
30205
31889
  "enum": [
30206
31890
  "approval",
30207
- "input"
31891
+ "input",
31892
+ "pick",
31893
+ "conflict"
30208
31894
  ]
30209
31895
  },
30210
31896
  "detail": {
@@ -30227,13 +31913,140 @@ export const OPERATOR_CONTRACT = {
30227
31913
  }
30228
31914
  },
30229
31915
  "additionalProperties": false
30230
- }
30231
- },
30232
- "required": [
30233
- "id",
30234
- "kind",
30235
- "label",
30236
- "state",
31916
+ },
31917
+ "review": {
31918
+ "type": "object",
31919
+ "properties": {
31920
+ "score": {
31921
+ "type": "number"
31922
+ },
31923
+ "passed": {
31924
+ "type": "boolean"
31925
+ },
31926
+ "cycles": {
31927
+ "type": "number"
31928
+ },
31929
+ "checklist": {
31930
+ "type": "array",
31931
+ "items": {
31932
+ "type": "object",
31933
+ "properties": {
31934
+ "item": {
31935
+ "type": "string"
31936
+ },
31937
+ "verified": {
31938
+ "type": "boolean"
31939
+ },
31940
+ "evidence": {
31941
+ "type": "string"
31942
+ },
31943
+ "howExercised": {
31944
+ "type": "string"
31945
+ }
31946
+ },
31947
+ "required": [
31948
+ "item",
31949
+ "verified",
31950
+ "evidence"
31951
+ ],
31952
+ "additionalProperties": false
31953
+ }
31954
+ }
31955
+ },
31956
+ "required": [
31957
+ "score",
31958
+ "passed",
31959
+ "cycles",
31960
+ "checklist"
31961
+ ],
31962
+ "additionalProperties": false
31963
+ },
31964
+ "observed": {
31965
+ "type": "object",
31966
+ "properties": {
31967
+ "externalKind": {
31968
+ "type": "string",
31969
+ "enum": [
31970
+ "claude-code",
31971
+ "codex",
31972
+ "opencode",
31973
+ "unknown"
31974
+ ]
31975
+ },
31976
+ "pid": {
31977
+ "type": "number"
31978
+ },
31979
+ "cwd": {
31980
+ "type": "string"
31981
+ },
31982
+ "liveness": {
31983
+ "type": "object",
31984
+ "properties": {
31985
+ "state": {
31986
+ "type": "string",
31987
+ "enum": [
31988
+ "active",
31989
+ "quiet"
31990
+ ]
31991
+ },
31992
+ "cpuSeconds": {
31993
+ "type": "number"
31994
+ },
31995
+ "detail": {
31996
+ "type": "string"
31997
+ }
31998
+ },
31999
+ "required": [
32000
+ "state",
32001
+ "cpuSeconds",
32002
+ "detail"
32003
+ ],
32004
+ "additionalProperties": false
32005
+ },
32006
+ "steer": {
32007
+ "type": "object",
32008
+ "properties": {
32009
+ "kind": {
32010
+ "type": "string",
32011
+ "enum": [
32012
+ "tmux",
32013
+ "none"
32014
+ ]
32015
+ },
32016
+ "paneId": {
32017
+ "type": "string"
32018
+ },
32019
+ "tty": {
32020
+ "type": "string"
32021
+ },
32022
+ "reason": {
32023
+ "type": "string"
32024
+ }
32025
+ },
32026
+ "required": [
32027
+ "kind"
32028
+ ],
32029
+ "additionalProperties": false
32030
+ },
32031
+ "steerDrillInOnly": {
32032
+ "type": "boolean"
32033
+ }
32034
+ },
32035
+ "required": [
32036
+ "externalKind",
32037
+ "pid",
32038
+ "liveness",
32039
+ "steer",
32040
+ "steerDrillInOnly"
32041
+ ],
32042
+ "additionalProperties": false
32043
+ }
32044
+ },
32045
+ "required": [
32046
+ "id",
32047
+ "kind",
32048
+ "label",
32049
+ "state",
30237
32050
  "elapsedMs",
30238
32051
  "costState",
30239
32052
  "capabilities"
@@ -30608,6 +32421,342 @@ export const OPERATOR_CONTRACT = {
30608
32421
  },
30609
32422
  "invokable": true
30610
32423
  },
32424
+ {
32425
+ "id": "power.keepAwake.set",
32426
+ "title": "Set the Owner Keep-Awake Toggle",
32427
+ "description": "Turn the owner keep-awake toggle on or off: a daemon-held sleep inhibitor INDEPENDENT of work state, surviving surface closes, persisted as power.keepAwake. Covers idle + sleep + lid-switch classes where grantable; the returned state names any refused class honestly. No timers, no AC-only sub-options — the always-visible chip is the safety mechanism. Emits runtime.ops OPS_POWER_STATE_CHANGED so every attached surface updates its chip.",
32428
+ "category": "health",
32429
+ "source": "builtin",
32430
+ "access": "authenticated",
32431
+ "transport": [
32432
+ "http",
32433
+ "ws"
32434
+ ],
32435
+ "scopes": [
32436
+ "write:config"
32437
+ ],
32438
+ "http": {
32439
+ "method": "POST",
32440
+ "path": "/api/power/keep-awake"
32441
+ },
32442
+ "events": [
32443
+ "runtime.ops"
32444
+ ],
32445
+ "inputSchema": {
32446
+ "type": "object",
32447
+ "properties": {
32448
+ "enabled": {
32449
+ "type": "boolean"
32450
+ }
32451
+ },
32452
+ "required": [
32453
+ "enabled"
32454
+ ],
32455
+ "additionalProperties": false
32456
+ },
32457
+ "outputSchema": {
32458
+ "type": "object",
32459
+ "properties": {
32460
+ "platform": {
32461
+ "type": "string"
32462
+ },
32463
+ "work": {
32464
+ "type": "object",
32465
+ "properties": {
32466
+ "held": {
32467
+ "type": "boolean"
32468
+ },
32469
+ "grantedClasses": {
32470
+ "type": "array",
32471
+ "items": {
32472
+ "type": "string",
32473
+ "enum": [
32474
+ "handle-lid-switch",
32475
+ "idle",
32476
+ "sleep"
32477
+ ]
32478
+ }
32479
+ },
32480
+ "deniedClasses": {
32481
+ "type": "array",
32482
+ "items": {
32483
+ "type": "string",
32484
+ "enum": [
32485
+ "handle-lid-switch",
32486
+ "idle",
32487
+ "sleep"
32488
+ ]
32489
+ }
32490
+ },
32491
+ "reasons": {
32492
+ "type": "array",
32493
+ "items": {
32494
+ "type": "string"
32495
+ }
32496
+ },
32497
+ "heldSince": {
32498
+ "anyOf": [
32499
+ {
32500
+ "type": "number"
32501
+ },
32502
+ {
32503
+ "type": "null"
32504
+ }
32505
+ ]
32506
+ },
32507
+ "capMinutes": {
32508
+ "type": "number"
32509
+ },
32510
+ "capExpiresAt": {
32511
+ "anyOf": [
32512
+ {
32513
+ "type": "number"
32514
+ },
32515
+ {
32516
+ "type": "null"
32517
+ }
32518
+ ]
32519
+ },
32520
+ "capExpired": {
32521
+ "type": "boolean"
32522
+ }
32523
+ },
32524
+ "required": [
32525
+ "held",
32526
+ "grantedClasses",
32527
+ "deniedClasses",
32528
+ "reasons",
32529
+ "heldSince",
32530
+ "capMinutes",
32531
+ "capExpiresAt",
32532
+ "capExpired"
32533
+ ],
32534
+ "additionalProperties": false
32535
+ },
32536
+ "keepAwake": {
32537
+ "type": "object",
32538
+ "properties": {
32539
+ "enabled": {
32540
+ "type": "boolean"
32541
+ },
32542
+ "held": {
32543
+ "type": "boolean"
32544
+ },
32545
+ "grantedClasses": {
32546
+ "type": "array",
32547
+ "items": {
32548
+ "type": "string",
32549
+ "enum": [
32550
+ "handle-lid-switch",
32551
+ "idle",
32552
+ "sleep"
32553
+ ]
32554
+ }
32555
+ },
32556
+ "deniedClasses": {
32557
+ "type": "array",
32558
+ "items": {
32559
+ "type": "string",
32560
+ "enum": [
32561
+ "handle-lid-switch",
32562
+ "idle",
32563
+ "sleep"
32564
+ ]
32565
+ }
32566
+ },
32567
+ "note": {
32568
+ "anyOf": [
32569
+ {
32570
+ "type": "string"
32571
+ },
32572
+ {
32573
+ "type": "null"
32574
+ }
32575
+ ]
32576
+ }
32577
+ },
32578
+ "required": [
32579
+ "enabled",
32580
+ "held",
32581
+ "grantedClasses",
32582
+ "deniedClasses",
32583
+ "note"
32584
+ ],
32585
+ "additionalProperties": false
32586
+ }
32587
+ },
32588
+ "required": [
32589
+ "platform",
32590
+ "work",
32591
+ "keepAwake"
32592
+ ],
32593
+ "additionalProperties": false
32594
+ },
32595
+ "invokable": true
32596
+ },
32597
+ {
32598
+ "id": "power.status.get",
32599
+ "title": "Get Sleep-Ownership State",
32600
+ "description": "The host sleep-ownership state: whether the automatic work inhibitor is held (and the live \"held because X\" reasons, cap, and expiry), and the owner keep-awake toggle with the classes the OS actually granted vs refused — a refused lid-switch block is stated honestly (\"idle sleep blocked; lid-close suspend is controlled by your OS here\"), never papered over. Surfaces render the always-visible \"sleep disabled\" chip from this state and the runtime.ops OPS_POWER_STATE_CHANGED event.",
32601
+ "category": "health",
32602
+ "source": "builtin",
32603
+ "access": "authenticated",
32604
+ "transport": [
32605
+ "http",
32606
+ "ws"
32607
+ ],
32608
+ "scopes": [
32609
+ "read:health"
32610
+ ],
32611
+ "http": {
32612
+ "method": "GET",
32613
+ "path": "/api/power/status"
32614
+ },
32615
+ "inputSchema": {
32616
+ "type": "object",
32617
+ "properties": {},
32618
+ "additionalProperties": false
32619
+ },
32620
+ "outputSchema": {
32621
+ "type": "object",
32622
+ "properties": {
32623
+ "platform": {
32624
+ "type": "string"
32625
+ },
32626
+ "work": {
32627
+ "type": "object",
32628
+ "properties": {
32629
+ "held": {
32630
+ "type": "boolean"
32631
+ },
32632
+ "grantedClasses": {
32633
+ "type": "array",
32634
+ "items": {
32635
+ "type": "string",
32636
+ "enum": [
32637
+ "handle-lid-switch",
32638
+ "idle",
32639
+ "sleep"
32640
+ ]
32641
+ }
32642
+ },
32643
+ "deniedClasses": {
32644
+ "type": "array",
32645
+ "items": {
32646
+ "type": "string",
32647
+ "enum": [
32648
+ "handle-lid-switch",
32649
+ "idle",
32650
+ "sleep"
32651
+ ]
32652
+ }
32653
+ },
32654
+ "reasons": {
32655
+ "type": "array",
32656
+ "items": {
32657
+ "type": "string"
32658
+ }
32659
+ },
32660
+ "heldSince": {
32661
+ "anyOf": [
32662
+ {
32663
+ "type": "number"
32664
+ },
32665
+ {
32666
+ "type": "null"
32667
+ }
32668
+ ]
32669
+ },
32670
+ "capMinutes": {
32671
+ "type": "number"
32672
+ },
32673
+ "capExpiresAt": {
32674
+ "anyOf": [
32675
+ {
32676
+ "type": "number"
32677
+ },
32678
+ {
32679
+ "type": "null"
32680
+ }
32681
+ ]
32682
+ },
32683
+ "capExpired": {
32684
+ "type": "boolean"
32685
+ }
32686
+ },
32687
+ "required": [
32688
+ "held",
32689
+ "grantedClasses",
32690
+ "deniedClasses",
32691
+ "reasons",
32692
+ "heldSince",
32693
+ "capMinutes",
32694
+ "capExpiresAt",
32695
+ "capExpired"
32696
+ ],
32697
+ "additionalProperties": false
32698
+ },
32699
+ "keepAwake": {
32700
+ "type": "object",
32701
+ "properties": {
32702
+ "enabled": {
32703
+ "type": "boolean"
32704
+ },
32705
+ "held": {
32706
+ "type": "boolean"
32707
+ },
32708
+ "grantedClasses": {
32709
+ "type": "array",
32710
+ "items": {
32711
+ "type": "string",
32712
+ "enum": [
32713
+ "handle-lid-switch",
32714
+ "idle",
32715
+ "sleep"
32716
+ ]
32717
+ }
32718
+ },
32719
+ "deniedClasses": {
32720
+ "type": "array",
32721
+ "items": {
32722
+ "type": "string",
32723
+ "enum": [
32724
+ "handle-lid-switch",
32725
+ "idle",
32726
+ "sleep"
32727
+ ]
32728
+ }
32729
+ },
32730
+ "note": {
32731
+ "anyOf": [
32732
+ {
32733
+ "type": "string"
32734
+ },
32735
+ {
32736
+ "type": "null"
32737
+ }
32738
+ ]
32739
+ }
32740
+ },
32741
+ "required": [
32742
+ "enabled",
32743
+ "held",
32744
+ "grantedClasses",
32745
+ "deniedClasses",
32746
+ "note"
32747
+ ],
32748
+ "additionalProperties": false
32749
+ }
32750
+ },
32751
+ "required": [
32752
+ "platform",
32753
+ "work",
32754
+ "keepAwake"
32755
+ ],
32756
+ "additionalProperties": false
32757
+ },
32758
+ "invokable": true
32759
+ },
30611
32760
  {
30612
32761
  "id": "intelligence.snapshot",
30613
32762
  "title": "Intelligence Snapshot",
@@ -60496,6 +62645,178 @@ export const OPERATOR_CONTRACT = {
60496
62645
  },
60497
62646
  "invokable": true
60498
62647
  },
62648
+ {
62649
+ "id": "memory.consolidation.receipts",
62650
+ "title": "Memory Consolidation Receipts",
62651
+ "description": "Return the retained memory-consolidation run receipts (what each idle/scheduled pass scanned, merged, archived, decayed) and the pending judgment PROPOSALS they carry (contradictions, cross-scope duplicates) — the records a proposal references are already marked into the review queue, and a human resolves them through the confirmation-gated review route. A runtime without the consolidation scheduler answers an honest 501.",
62652
+ "category": "memory",
62653
+ "source": "builtin",
62654
+ "access": "authenticated",
62655
+ "transport": [
62656
+ "http",
62657
+ "ws"
62658
+ ],
62659
+ "scopes": [
62660
+ "read:memory"
62661
+ ],
62662
+ "http": {
62663
+ "method": "GET",
62664
+ "path": "/api/memory/consolidation/receipts"
62665
+ },
62666
+ "inputSchema": {
62667
+ "type": "object",
62668
+ "properties": {},
62669
+ "additionalProperties": false
62670
+ },
62671
+ "outputSchema": {
62672
+ "type": "object",
62673
+ "properties": {
62674
+ "receipts": {
62675
+ "type": "array",
62676
+ "items": {
62677
+ "type": "object",
62678
+ "properties": {
62679
+ "runId": {
62680
+ "type": "string"
62681
+ },
62682
+ "ranAt": {
62683
+ "type": "string"
62684
+ },
62685
+ "trigger": {
62686
+ "type": "string"
62687
+ },
62688
+ "idle": {
62689
+ "type": "boolean"
62690
+ },
62691
+ "scanned": {
62692
+ "type": "number"
62693
+ },
62694
+ "merged": {
62695
+ "type": "array",
62696
+ "items": {
62697
+ "type": "object",
62698
+ "properties": {},
62699
+ "additionalProperties": true
62700
+ }
62701
+ },
62702
+ "archived": {
62703
+ "type": "array",
62704
+ "items": {
62705
+ "type": "object",
62706
+ "properties": {},
62707
+ "additionalProperties": true
62708
+ }
62709
+ },
62710
+ "decayed": {
62711
+ "type": "array",
62712
+ "items": {
62713
+ "type": "object",
62714
+ "properties": {},
62715
+ "additionalProperties": true
62716
+ }
62717
+ },
62718
+ "proposed": {
62719
+ "type": "array",
62720
+ "items": {
62721
+ "type": "object",
62722
+ "properties": {
62723
+ "kind": {
62724
+ "type": "string",
62725
+ "enum": [
62726
+ "contradiction",
62727
+ "cross-scope-duplicate",
62728
+ "stale-delete"
62729
+ ]
62730
+ },
62731
+ "ids": {
62732
+ "type": "array",
62733
+ "items": {
62734
+ "type": "string"
62735
+ }
62736
+ },
62737
+ "route": {
62738
+ "type": "string"
62739
+ },
62740
+ "reason": {
62741
+ "type": "string"
62742
+ }
62743
+ },
62744
+ "required": [
62745
+ "kind",
62746
+ "ids",
62747
+ "route",
62748
+ "reason"
62749
+ ],
62750
+ "additionalProperties": false
62751
+ }
62752
+ },
62753
+ "usageSignalAvailable": {
62754
+ "type": "boolean"
62755
+ },
62756
+ "note": {
62757
+ "type": "string"
62758
+ }
62759
+ },
62760
+ "required": [
62761
+ "runId",
62762
+ "ranAt",
62763
+ "trigger",
62764
+ "idle",
62765
+ "scanned",
62766
+ "merged",
62767
+ "archived",
62768
+ "decayed",
62769
+ "proposed",
62770
+ "usageSignalAvailable",
62771
+ "note"
62772
+ ],
62773
+ "additionalProperties": false
62774
+ }
62775
+ },
62776
+ "pendingProposals": {
62777
+ "type": "array",
62778
+ "items": {
62779
+ "type": "object",
62780
+ "properties": {
62781
+ "kind": {
62782
+ "type": "string",
62783
+ "enum": [
62784
+ "contradiction",
62785
+ "cross-scope-duplicate",
62786
+ "stale-delete"
62787
+ ]
62788
+ },
62789
+ "ids": {
62790
+ "type": "array",
62791
+ "items": {
62792
+ "type": "string"
62793
+ }
62794
+ },
62795
+ "route": {
62796
+ "type": "string"
62797
+ },
62798
+ "reason": {
62799
+ "type": "string"
62800
+ }
62801
+ },
62802
+ "required": [
62803
+ "kind",
62804
+ "ids",
62805
+ "route",
62806
+ "reason"
62807
+ ],
62808
+ "additionalProperties": false
62809
+ }
62810
+ }
62811
+ },
62812
+ "required": [
62813
+ "receipts",
62814
+ "pendingProposals"
62815
+ ],
62816
+ "additionalProperties": false
62817
+ },
62818
+ "invokable": true
62819
+ },
60499
62820
  {
60500
62821
  "id": "memory.doctor",
60501
62822
  "title": "Memory Doctor",
@@ -63559,6 +65880,643 @@ export const OPERATOR_CONTRACT = {
63559
65880
  },
63560
65881
  "invokable": true
63561
65882
  },
65883
+ {
65884
+ "id": "pairing.handoff.complete",
65885
+ "title": "Complete Pairing Hand-off",
65886
+ "description": "Apply the surface's per-offer decisions in ONE pass: an accepted notifications offer registers the browser push subscription (endpoint + keys, optional deviceId), an accepted passkey offer registers the WebAuthn credential, an accepted relay offer is acknowledged. Each offer returns an honest per-offer result (completed / declined / unavailable / failed); an omitted or false offer is reported as declined, never silently half-applied.",
65887
+ "category": "pairing",
65888
+ "source": "builtin",
65889
+ "access": "authenticated",
65890
+ "transport": [
65891
+ "ws"
65892
+ ],
65893
+ "scopes": [
65894
+ "write:control-plane"
65895
+ ],
65896
+ "inputSchema": {
65897
+ "type": "object",
65898
+ "properties": {
65899
+ "accept": {
65900
+ "type": "object",
65901
+ "properties": {
65902
+ "notifications": {
65903
+ "type": "object",
65904
+ "properties": {
65905
+ "endpoint": {
65906
+ "type": "string"
65907
+ },
65908
+ "keys": {
65909
+ "type": "object",
65910
+ "properties": {
65911
+ "p256dh": {
65912
+ "type": "string"
65913
+ },
65914
+ "auth": {
65915
+ "type": "string"
65916
+ }
65917
+ },
65918
+ "required": [
65919
+ "p256dh",
65920
+ "auth"
65921
+ ],
65922
+ "additionalProperties": false
65923
+ },
65924
+ "deviceId": {
65925
+ "type": "string"
65926
+ }
65927
+ },
65928
+ "required": [
65929
+ "endpoint",
65930
+ "keys"
65931
+ ],
65932
+ "additionalProperties": false
65933
+ },
65934
+ "relay": {
65935
+ "type": "boolean"
65936
+ },
65937
+ "passkey": {
65938
+ "type": "object",
65939
+ "properties": {
65940
+ "rpId": {
65941
+ "type": "string"
65942
+ },
65943
+ "origin": {
65944
+ "type": "string"
65945
+ },
65946
+ "credentialId": {
65947
+ "type": "string"
65948
+ },
65949
+ "publicKeyCose": {
65950
+ "type": "string"
65951
+ }
65952
+ },
65953
+ "required": [
65954
+ "rpId",
65955
+ "origin",
65956
+ "credentialId",
65957
+ "publicKeyCose"
65958
+ ],
65959
+ "additionalProperties": false
65960
+ }
65961
+ },
65962
+ "additionalProperties": false
65963
+ }
65964
+ },
65965
+ "additionalProperties": false
65966
+ },
65967
+ "outputSchema": {
65968
+ "type": "object",
65969
+ "properties": {
65970
+ "results": {
65971
+ "type": "array",
65972
+ "items": {
65973
+ "type": "object",
65974
+ "properties": {
65975
+ "kind": {
65976
+ "type": "string"
65977
+ },
65978
+ "status": {
65979
+ "type": "string"
65980
+ },
65981
+ "detail": {
65982
+ "type": "string"
65983
+ }
65984
+ },
65985
+ "required": [
65986
+ "kind",
65987
+ "status"
65988
+ ],
65989
+ "additionalProperties": false
65990
+ }
65991
+ }
65992
+ },
65993
+ "required": [
65994
+ "results"
65995
+ ],
65996
+ "additionalProperties": false
65997
+ },
65998
+ "invokable": true
65999
+ },
66000
+ {
66001
+ "id": "pairing.handoff.create",
66002
+ "title": "Create Pairing Hand-off",
66003
+ "description": "Mint a per-device token AND assemble the set-up OFFER SET this daemon can satisfy (notifications — carrying the VAPID public key; relay; passkey step-up), so a freshly-paired surface can complete them in one pass. Returns the offer set, the `#pair=<token>` deep-link fragment (the exact URL-fragment shape the web app consumes — token in `pair=`, offers in `offers=`), a full deep link when a web origin is configured, and that origin's honest TLS/capability POSTURE: the one plain-http-on-LAN notice line (stated here, never a nag) plus per-capability availability labels so surfaces render \"needs https — available via tailscale\" instead of dead buttons. The token secret is returned exactly once. Each offer is independently declinable at completion.",
66004
+ "category": "pairing",
66005
+ "source": "builtin",
66006
+ "access": "authenticated",
66007
+ "transport": [
66008
+ "ws"
66009
+ ],
66010
+ "scopes": [
66011
+ "write:control-plane"
66012
+ ],
66013
+ "inputSchema": {
66014
+ "type": "object",
66015
+ "properties": {
66016
+ "name": {
66017
+ "type": "string"
66018
+ },
66019
+ "offers": {
66020
+ "type": "array",
66021
+ "items": {
66022
+ "type": "string"
66023
+ }
66024
+ }
66025
+ },
66026
+ "required": [
66027
+ "name"
66028
+ ],
66029
+ "additionalProperties": false
66030
+ },
66031
+ "outputSchema": {
66032
+ "type": "object",
66033
+ "properties": {
66034
+ "token": {
66035
+ "type": "object",
66036
+ "properties": {
66037
+ "id": {
66038
+ "type": "string"
66039
+ },
66040
+ "name": {
66041
+ "type": "string"
66042
+ },
66043
+ "token": {
66044
+ "type": "string"
66045
+ },
66046
+ "createdAt": {
66047
+ "type": "number"
66048
+ }
66049
+ },
66050
+ "required": [
66051
+ "id",
66052
+ "name",
66053
+ "token",
66054
+ "createdAt"
66055
+ ],
66056
+ "additionalProperties": false
66057
+ },
66058
+ "offers": {
66059
+ "type": "array",
66060
+ "items": {
66061
+ "type": "object",
66062
+ "properties": {
66063
+ "kind": {
66064
+ "type": "string"
66065
+ },
66066
+ "available": {
66067
+ "type": "boolean"
66068
+ },
66069
+ "vapidPublicKey": {
66070
+ "type": "string"
66071
+ }
66072
+ },
66073
+ "required": [
66074
+ "kind",
66075
+ "available"
66076
+ ],
66077
+ "additionalProperties": false
66078
+ }
66079
+ },
66080
+ "fragment": {
66081
+ "type": "string"
66082
+ },
66083
+ "deepLink": {
66084
+ "type": "string"
66085
+ },
66086
+ "posture": {
66087
+ "type": "object",
66088
+ "properties": {
66089
+ "origin": {
66090
+ "type": "string"
66091
+ },
66092
+ "scheme": {
66093
+ "type": "string"
66094
+ },
66095
+ "privateNetwork": {
66096
+ "type": "boolean"
66097
+ },
66098
+ "secureContext": {
66099
+ "type": "boolean"
66100
+ },
66101
+ "notice": {
66102
+ "type": "string"
66103
+ },
66104
+ "capabilities": {
66105
+ "type": "array",
66106
+ "items": {
66107
+ "type": "object",
66108
+ "properties": {
66109
+ "capability": {
66110
+ "type": "string"
66111
+ },
66112
+ "available": {
66113
+ "type": "boolean"
66114
+ },
66115
+ "reason": {
66116
+ "type": "string"
66117
+ }
66118
+ },
66119
+ "required": [
66120
+ "capability",
66121
+ "available"
66122
+ ],
66123
+ "additionalProperties": false
66124
+ }
66125
+ }
66126
+ },
66127
+ "required": [
66128
+ "origin",
66129
+ "scheme",
66130
+ "privateNetwork",
66131
+ "secureContext",
66132
+ "capabilities"
66133
+ ],
66134
+ "additionalProperties": false
66135
+ }
66136
+ },
66137
+ "required": [
66138
+ "token",
66139
+ "offers",
66140
+ "fragment"
66141
+ ],
66142
+ "additionalProperties": false
66143
+ },
66144
+ "invokable": true
66145
+ },
66146
+ {
66147
+ "id": "pairing.posture.get",
66148
+ "title": "Get Origin TLS/Capability Posture",
66149
+ "description": "The honest TLS/capability posture of a web origin — pass your surface's current origin (or omit it to read the configured web origin). Plain http on a private-network origin (LAN IP, .local, localhost) is a supported posture reported with its ONE notice line; browser-gated capabilities (service worker/PWA install, push, microphone) are each labeled available or \"needs https — available via tailscale\" so surfaces render labels instead of dead buttons. Localhost keeps all three. The daemon never mints certificates.",
66150
+ "category": "pairing",
66151
+ "source": "builtin",
66152
+ "access": "authenticated",
66153
+ "transport": [
66154
+ "ws"
66155
+ ],
66156
+ "scopes": [
66157
+ "read:control-plane"
66158
+ ],
66159
+ "inputSchema": {
66160
+ "type": "object",
66161
+ "properties": {
66162
+ "origin": {
66163
+ "type": "string"
66164
+ }
66165
+ },
66166
+ "additionalProperties": false
66167
+ },
66168
+ "outputSchema": {
66169
+ "type": "object",
66170
+ "properties": {
66171
+ "posture": {
66172
+ "type": "object",
66173
+ "properties": {
66174
+ "origin": {
66175
+ "type": "string"
66176
+ },
66177
+ "scheme": {
66178
+ "type": "string"
66179
+ },
66180
+ "privateNetwork": {
66181
+ "type": "boolean"
66182
+ },
66183
+ "secureContext": {
66184
+ "type": "boolean"
66185
+ },
66186
+ "notice": {
66187
+ "type": "string"
66188
+ },
66189
+ "capabilities": {
66190
+ "type": "array",
66191
+ "items": {
66192
+ "type": "object",
66193
+ "properties": {
66194
+ "capability": {
66195
+ "type": "string"
66196
+ },
66197
+ "available": {
66198
+ "type": "boolean"
66199
+ },
66200
+ "reason": {
66201
+ "type": "string"
66202
+ }
66203
+ },
66204
+ "required": [
66205
+ "capability",
66206
+ "available"
66207
+ ],
66208
+ "additionalProperties": false
66209
+ }
66210
+ }
66211
+ },
66212
+ "required": [
66213
+ "origin",
66214
+ "scheme",
66215
+ "privateNetwork",
66216
+ "secureContext",
66217
+ "capabilities"
66218
+ ],
66219
+ "additionalProperties": false
66220
+ }
66221
+ },
66222
+ "required": [
66223
+ "posture"
66224
+ ],
66225
+ "additionalProperties": false
66226
+ },
66227
+ "invokable": true
66228
+ },
66229
+ {
66230
+ "id": "pairing.tokens.create",
66231
+ "title": "Mint Paired Device Token",
66232
+ "description": "Mint a new named per-device operator token and return its plaintext secret EXACTLY ONCE (for a QR / pairing hand-off). Only a hash is persisted; the secret is never listed or returned again. The name is user-visible and editable.",
66233
+ "category": "pairing",
66234
+ "source": "builtin",
66235
+ "access": "authenticated",
66236
+ "transport": [
66237
+ "ws"
66238
+ ],
66239
+ "scopes": [
66240
+ "write:control-plane"
66241
+ ],
66242
+ "inputSchema": {
66243
+ "type": "object",
66244
+ "properties": {
66245
+ "name": {
66246
+ "type": "string"
66247
+ }
66248
+ },
66249
+ "required": [
66250
+ "name"
66251
+ ],
66252
+ "additionalProperties": false
66253
+ },
66254
+ "outputSchema": {
66255
+ "type": "object",
66256
+ "properties": {
66257
+ "token": {
66258
+ "type": "object",
66259
+ "properties": {
66260
+ "id": {
66261
+ "type": "string"
66262
+ },
66263
+ "name": {
66264
+ "type": "string"
66265
+ },
66266
+ "token": {
66267
+ "type": "string"
66268
+ },
66269
+ "createdAt": {
66270
+ "type": "number"
66271
+ }
66272
+ },
66273
+ "required": [
66274
+ "id",
66275
+ "name",
66276
+ "token",
66277
+ "createdAt"
66278
+ ],
66279
+ "additionalProperties": false
66280
+ }
66281
+ },
66282
+ "required": [
66283
+ "token"
66284
+ ],
66285
+ "additionalProperties": false
66286
+ },
66287
+ "invokable": true
66288
+ },
66289
+ {
66290
+ "id": "pairing.tokens.delete",
66291
+ "title": "Revoke Paired Device Token",
66292
+ "description": "Revoke (permanently delete) one paired device token. Revocation is immediate: the token fails the very next request with a 401, and every OTHER paired device keeps working. An unknown id is a 404 PAIRING_TOKEN_NOT_FOUND, never a 200-noop.",
66293
+ "category": "pairing",
66294
+ "source": "builtin",
66295
+ "access": "authenticated",
66296
+ "transport": [
66297
+ "ws"
66298
+ ],
66299
+ "scopes": [
66300
+ "write:control-plane"
66301
+ ],
66302
+ "inputSchema": {
66303
+ "type": "object",
66304
+ "properties": {
66305
+ "id": {
66306
+ "type": "string"
66307
+ }
66308
+ },
66309
+ "required": [
66310
+ "id"
66311
+ ],
66312
+ "additionalProperties": false
66313
+ },
66314
+ "outputSchema": {
66315
+ "type": "object",
66316
+ "properties": {
66317
+ "id": {
66318
+ "type": "string"
66319
+ },
66320
+ "revoked": {
66321
+ "type": "boolean"
66322
+ }
66323
+ },
66324
+ "required": [
66325
+ "id",
66326
+ "revoked"
66327
+ ],
66328
+ "additionalProperties": false
66329
+ },
66330
+ "invokable": true
66331
+ },
66332
+ {
66333
+ "id": "pairing.tokens.list",
66334
+ "title": "List Paired Device Tokens",
66335
+ "description": "List the per-pairing operator tokens (paired devices/browsers) as redacted views: id, user-visible name, created timestamp, and last-seen timestamp. The token secret is never stored in listable form and is never returned.",
66336
+ "category": "pairing",
66337
+ "source": "builtin",
66338
+ "access": "authenticated",
66339
+ "transport": [
66340
+ "ws"
66341
+ ],
66342
+ "scopes": [
66343
+ "read:control-plane"
66344
+ ],
66345
+ "outputSchema": {
66346
+ "type": "object",
66347
+ "properties": {
66348
+ "tokens": {
66349
+ "type": "array",
66350
+ "items": {
66351
+ "type": "object",
66352
+ "properties": {
66353
+ "id": {
66354
+ "type": "string"
66355
+ },
66356
+ "name": {
66357
+ "type": "string"
66358
+ },
66359
+ "createdAt": {
66360
+ "type": "number"
66361
+ },
66362
+ "lastSeenAt": {
66363
+ "type": "number"
66364
+ }
66365
+ },
66366
+ "required": [
66367
+ "id",
66368
+ "name",
66369
+ "createdAt"
66370
+ ],
66371
+ "additionalProperties": false
66372
+ }
66373
+ },
66374
+ "legacySharedRevoked": {
66375
+ "type": "boolean"
66376
+ }
66377
+ },
66378
+ "required": [
66379
+ "tokens",
66380
+ "legacySharedRevoked"
66381
+ ],
66382
+ "additionalProperties": false
66383
+ },
66384
+ "invokable": true
66385
+ },
66386
+ {
66387
+ "id": "pairing.tokens.migrate",
66388
+ "title": "Migrate Off The Shared Token",
66389
+ "description": "A client currently authenticated with the legacy single shared token mints its OWN named per-device token and receives the plaintext secret once — the honest migration path. This does NOT revoke the shared token; that is a separate explicit step (pairing.tokens.revokeShared).",
66390
+ "category": "pairing",
66391
+ "source": "builtin",
66392
+ "access": "authenticated",
66393
+ "transport": [
66394
+ "ws"
66395
+ ],
66396
+ "scopes": [
66397
+ "write:control-plane"
66398
+ ],
66399
+ "inputSchema": {
66400
+ "type": "object",
66401
+ "properties": {
66402
+ "name": {
66403
+ "type": "string"
66404
+ }
66405
+ },
66406
+ "required": [
66407
+ "name"
66408
+ ],
66409
+ "additionalProperties": false
66410
+ },
66411
+ "outputSchema": {
66412
+ "type": "object",
66413
+ "properties": {
66414
+ "token": {
66415
+ "type": "object",
66416
+ "properties": {
66417
+ "id": {
66418
+ "type": "string"
66419
+ },
66420
+ "name": {
66421
+ "type": "string"
66422
+ },
66423
+ "token": {
66424
+ "type": "string"
66425
+ },
66426
+ "createdAt": {
66427
+ "type": "number"
66428
+ }
66429
+ },
66430
+ "required": [
66431
+ "id",
66432
+ "name",
66433
+ "token",
66434
+ "createdAt"
66435
+ ],
66436
+ "additionalProperties": false
66437
+ }
66438
+ },
66439
+ "required": [
66440
+ "token"
66441
+ ],
66442
+ "additionalProperties": false
66443
+ },
66444
+ "invokable": true
66445
+ },
66446
+ {
66447
+ "id": "pairing.tokens.rename",
66448
+ "title": "Rename Paired Device Token",
66449
+ "description": "Change the user-visible name of a paired device token. An unknown id is a 404 PAIRING_TOKEN_NOT_FOUND.",
66450
+ "category": "pairing",
66451
+ "source": "builtin",
66452
+ "access": "authenticated",
66453
+ "transport": [
66454
+ "ws"
66455
+ ],
66456
+ "scopes": [
66457
+ "write:control-plane"
66458
+ ],
66459
+ "inputSchema": {
66460
+ "type": "object",
66461
+ "properties": {
66462
+ "id": {
66463
+ "type": "string"
66464
+ },
66465
+ "name": {
66466
+ "type": "string"
66467
+ }
66468
+ },
66469
+ "required": [
66470
+ "id",
66471
+ "name"
66472
+ ],
66473
+ "additionalProperties": false
66474
+ },
66475
+ "outputSchema": {
66476
+ "type": "object",
66477
+ "properties": {
66478
+ "id": {
66479
+ "type": "string"
66480
+ },
66481
+ "renamed": {
66482
+ "type": "boolean"
66483
+ }
66484
+ },
66485
+ "required": [
66486
+ "id",
66487
+ "renamed"
66488
+ ],
66489
+ "additionalProperties": false
66490
+ },
66491
+ "invokable": true
66492
+ },
66493
+ {
66494
+ "id": "pairing.tokens.revokeShared",
66495
+ "title": "Revoke The Legacy Shared Token",
66496
+ "description": "Turn off the legacy single shared operator token. After this, only per-device pairing tokens (and user sessions) authenticate; the shared token stops working immediately. Idempotent.",
66497
+ "category": "pairing",
66498
+ "source": "builtin",
66499
+ "access": "authenticated",
66500
+ "transport": [
66501
+ "ws"
66502
+ ],
66503
+ "scopes": [
66504
+ "write:control-plane"
66505
+ ],
66506
+ "outputSchema": {
66507
+ "type": "object",
66508
+ "properties": {
66509
+ "legacySharedRevoked": {
66510
+ "type": "boolean"
66511
+ }
66512
+ },
66513
+ "required": [
66514
+ "legacySharedRevoked"
66515
+ ],
66516
+ "additionalProperties": false
66517
+ },
66518
+ "invokable": true
66519
+ },
63562
66520
  {
63563
66521
  "id": "panels.list",
63564
66522
  "title": "List Panels",
@@ -63683,6 +66641,118 @@ export const OPERATOR_CONTRACT = {
63683
66641
  },
63684
66642
  "invokable": true
63685
66643
  },
66644
+ {
66645
+ "id": "permissions.rules.delete",
66646
+ "title": "Delete a Durable Permission Rule",
66647
+ "description": "Delete one durable user-origin permission rule by id. The matching asks prompt again afterwards — deleting a grant is how a remembered decision is revoked. deleted:false when no rule with that id exists (an honest miss, not an error).",
66648
+ "category": "permissions",
66649
+ "source": "builtin",
66650
+ "access": "authenticated",
66651
+ "transport": [
66652
+ "ws"
66653
+ ],
66654
+ "scopes": [
66655
+ "write:sessions"
66656
+ ],
66657
+ "inputSchema": {
66658
+ "type": "object",
66659
+ "properties": {
66660
+ "ruleId": {
66661
+ "type": "string"
66662
+ }
66663
+ },
66664
+ "required": [
66665
+ "ruleId"
66666
+ ],
66667
+ "additionalProperties": false
66668
+ },
66669
+ "outputSchema": {
66670
+ "type": "object",
66671
+ "properties": {
66672
+ "deleted": {
66673
+ "type": "boolean"
66674
+ }
66675
+ },
66676
+ "required": [
66677
+ "deleted"
66678
+ ],
66679
+ "additionalProperties": false
66680
+ },
66681
+ "invokable": true
66682
+ },
66683
+ {
66684
+ "id": "permissions.rules.list",
66685
+ "title": "List Durable Permission Rules",
66686
+ "description": "List the durable user-origin permission rules written by remembered approval decisions (exact command / command class / path scope / whole tool), newest first — the persistent grants and denials the permission manager consults before ever prompting. Project-scoped.",
66687
+ "category": "permissions",
66688
+ "source": "builtin",
66689
+ "access": "authenticated",
66690
+ "transport": [
66691
+ "ws"
66692
+ ],
66693
+ "scopes": [
66694
+ "read:sessions"
66695
+ ],
66696
+ "inputSchema": {
66697
+ "type": "object",
66698
+ "properties": {},
66699
+ "additionalProperties": false
66700
+ },
66701
+ "outputSchema": {
66702
+ "type": "object",
66703
+ "properties": {
66704
+ "rules": {
66705
+ "type": "array",
66706
+ "items": {
66707
+ "type": "object",
66708
+ "properties": {
66709
+ "id": {
66710
+ "type": "string"
66711
+ },
66712
+ "effect": {
66713
+ "type": "string",
66714
+ "enum": [
66715
+ "allow",
66716
+ "deny"
66717
+ ]
66718
+ },
66719
+ "tier": {
66720
+ "type": "string",
66721
+ "enum": [
66722
+ "exact",
66723
+ "command-class",
66724
+ "path",
66725
+ "tool"
66726
+ ]
66727
+ },
66728
+ "tool": {
66729
+ "type": "string"
66730
+ },
66731
+ "description": {
66732
+ "type": "string"
66733
+ },
66734
+ "createdAt": {
66735
+ "type": "number"
66736
+ }
66737
+ },
66738
+ "required": [
66739
+ "id",
66740
+ "effect",
66741
+ "tier",
66742
+ "tool",
66743
+ "createdAt"
66744
+ ],
66745
+ "additionalProperties": false
66746
+ }
66747
+ }
66748
+ },
66749
+ "required": [
66750
+ "rules"
66751
+ ],
66752
+ "additionalProperties": false
66753
+ },
66754
+ "invokable": true
66755
+ },
63686
66756
  {
63687
66757
  "id": "principals.create",
63688
66758
  "title": "Create Principal",
@@ -64768,12 +67838,24 @@ export const OPERATOR_CONTRACT = {
64768
67838
  "enum": [
64769
67839
  "USD"
64770
67840
  ]
67841
+ },
67842
+ "source": {
67843
+ "type": "string",
67844
+ "enum": [
67845
+ "user",
67846
+ "provider",
67847
+ "catalog"
67848
+ ]
67849
+ },
67850
+ "asOf": {
67851
+ "type": "string"
64771
67852
  }
64772
67853
  },
64773
67854
  "required": [
64774
67855
  "inputPerMillionTokens",
64775
67856
  "outputPerMillionTokens",
64776
- "currency"
67857
+ "currency",
67858
+ "source"
64777
67859
  ],
64778
67860
  "additionalProperties": false
64779
67861
  }
@@ -65106,12 +68188,24 @@ export const OPERATOR_CONTRACT = {
65106
68188
  "enum": [
65107
68189
  "USD"
65108
68190
  ]
68191
+ },
68192
+ "source": {
68193
+ "type": "string",
68194
+ "enum": [
68195
+ "user",
68196
+ "provider",
68197
+ "catalog"
68198
+ ]
68199
+ },
68200
+ "asOf": {
68201
+ "type": "string"
65109
68202
  }
65110
68203
  },
65111
68204
  "required": [
65112
68205
  "inputPerMillionTokens",
65113
68206
  "outputPerMillionTokens",
65114
- "currency"
68207
+ "currency",
68208
+ "source"
65115
68209
  ],
65116
68210
  "additionalProperties": false
65117
68211
  }
@@ -65190,11 +68284,16 @@ export const OPERATOR_CONTRACT = {
65190
68284
  "pricingSource": {
65191
68285
  "type": "string",
65192
68286
  "enum": [
68287
+ "user",
65193
68288
  "catalog",
65194
68289
  "provider",
68290
+ "mixed",
65195
68291
  "none"
65196
68292
  ]
65197
68293
  },
68294
+ "pricingAsOf": {
68295
+ "type": "string"
68296
+ },
65198
68297
  "models": {
65199
68298
  "type": "array",
65200
68299
  "items": {
@@ -65232,12 +68331,24 @@ export const OPERATOR_CONTRACT = {
65232
68331
  "enum": [
65233
68332
  "USD"
65234
68333
  ]
68334
+ },
68335
+ "source": {
68336
+ "type": "string",
68337
+ "enum": [
68338
+ "user",
68339
+ "provider",
68340
+ "catalog"
68341
+ ]
68342
+ },
68343
+ "asOf": {
68344
+ "type": "string"
65235
68345
  }
65236
68346
  },
65237
68347
  "required": [
65238
68348
  "inputPerMillionTokens",
65239
68349
  "outputPerMillionTokens",
65240
- "currency"
68350
+ "currency",
68351
+ "source"
65241
68352
  ],
65242
68353
  "additionalProperties": false
65243
68354
  }
@@ -65325,7 +68436,7 @@ export const OPERATOR_CONTRACT = {
65325
68436
  {
65326
68437
  "id": "push.subscriptions.create",
65327
68438
  "title": "Register Web Push Subscription",
65328
- "description": "Store a browser Push subscription (endpoint capability URL + p256dh/auth keys) for the authenticated operator so the daemon can deliver notifications to that device. Re-registering the same endpoint updates its keys in place rather than duplicating it. The stored endpoint and keys are never returned over the wire; the response is the redacted subscription view.",
68439
+ "description": "Store a browser Push subscription (endpoint capability URL + p256dh/auth keys) for the authenticated operator so the daemon can deliver notifications to that device. When a stable deviceId is supplied the record reconciles on that device identity — a browser whose push endpoint rotated re-registers the same deviceId with a new endpoint and heals the one record in place rather than piling up a stale duplicate; without a deviceId it reconciles on the raw endpoint (legacy). The stored endpoint and keys are never returned over the wire; the response is the redacted subscription view.",
65329
68440
  "category": "push",
65330
68441
  "source": "builtin",
65331
68442
  "access": "authenticated",
@@ -65356,6 +68467,9 @@ export const OPERATOR_CONTRACT = {
65356
68467
  "auth"
65357
68468
  ],
65358
68469
  "additionalProperties": false
68470
+ },
68471
+ "deviceId": {
68472
+ "type": "string"
65359
68473
  }
65360
68474
  },
65361
68475
  "required": [
@@ -65376,6 +68490,9 @@ export const OPERATOR_CONTRACT = {
65376
68490
  "principalId": {
65377
68491
  "type": "string"
65378
68492
  },
68493
+ "deviceId": {
68494
+ "type": "string"
68495
+ },
65379
68496
  "endpointOrigin": {
65380
68497
  "type": "string"
65381
68498
  },
@@ -65390,6 +68507,9 @@ export const OPERATOR_CONTRACT = {
65390
68507
  },
65391
68508
  "lastOutcome": {
65392
68509
  "type": "string"
68510
+ },
68511
+ "consecutiveFailures": {
68512
+ "type": "number"
65393
68513
  }
65394
68514
  },
65395
68515
  "required": [
@@ -65479,6 +68599,9 @@ export const OPERATOR_CONTRACT = {
65479
68599
  "principalId": {
65480
68600
  "type": "string"
65481
68601
  },
68602
+ "deviceId": {
68603
+ "type": "string"
68604
+ },
65482
68605
  "endpointOrigin": {
65483
68606
  "type": "string"
65484
68607
  },
@@ -65493,6 +68616,9 @@ export const OPERATOR_CONTRACT = {
65493
68616
  },
65494
68617
  "lastOutcome": {
65495
68618
  "type": "string"
68619
+ },
68620
+ "consecutiveFailures": {
68621
+ "type": "number"
65496
68622
  }
65497
68623
  },
65498
68624
  "required": [
@@ -65513,6 +68639,107 @@ export const OPERATOR_CONTRACT = {
65513
68639
  },
65514
68640
  "invokable": true
65515
68641
  },
68642
+ {
68643
+ "id": "push.subscriptions.reconcile",
68644
+ "title": "Reconcile Web Push Subscription",
68645
+ "description": "Reconcile-on-open: the client presents its device identity (deviceId) and its CURRENT endpoint + p256dh/auth keys, and the daemon heals the record for that device in place — updating a stale endpoint the daemon had been holding — then reports what drifted (created / endpoint-updated / keys-updated / unchanged) so the client learns whether the daemon was out of date. A live reconcile also clears the bounded-retry failure counter. The stored endpoint and keys are never returned; the response is the redacted subscription view plus the drift discriminant.",
68646
+ "category": "push",
68647
+ "source": "builtin",
68648
+ "access": "authenticated",
68649
+ "transport": [
68650
+ "ws"
68651
+ ],
68652
+ "scopes": [
68653
+ "write:push"
68654
+ ],
68655
+ "inputSchema": {
68656
+ "type": "object",
68657
+ "properties": {
68658
+ "deviceId": {
68659
+ "type": "string"
68660
+ },
68661
+ "endpoint": {
68662
+ "type": "string"
68663
+ },
68664
+ "keys": {
68665
+ "type": "object",
68666
+ "properties": {
68667
+ "p256dh": {
68668
+ "type": "string"
68669
+ },
68670
+ "auth": {
68671
+ "type": "string"
68672
+ }
68673
+ },
68674
+ "required": [
68675
+ "p256dh",
68676
+ "auth"
68677
+ ],
68678
+ "additionalProperties": false
68679
+ }
68680
+ },
68681
+ "required": [
68682
+ "deviceId",
68683
+ "endpoint",
68684
+ "keys"
68685
+ ],
68686
+ "additionalProperties": false
68687
+ },
68688
+ "outputSchema": {
68689
+ "type": "object",
68690
+ "properties": {
68691
+ "subscription": {
68692
+ "type": "object",
68693
+ "properties": {
68694
+ "id": {
68695
+ "type": "string"
68696
+ },
68697
+ "principalId": {
68698
+ "type": "string"
68699
+ },
68700
+ "deviceId": {
68701
+ "type": "string"
68702
+ },
68703
+ "endpointOrigin": {
68704
+ "type": "string"
68705
+ },
68706
+ "endpointHash": {
68707
+ "type": "string"
68708
+ },
68709
+ "createdAt": {
68710
+ "type": "number"
68711
+ },
68712
+ "lastDeliveryAt": {
68713
+ "type": "number"
68714
+ },
68715
+ "lastOutcome": {
68716
+ "type": "string"
68717
+ },
68718
+ "consecutiveFailures": {
68719
+ "type": "number"
68720
+ }
68721
+ },
68722
+ "required": [
68723
+ "id",
68724
+ "principalId",
68725
+ "endpointOrigin",
68726
+ "endpointHash",
68727
+ "createdAt"
68728
+ ],
68729
+ "additionalProperties": false
68730
+ },
68731
+ "drift": {
68732
+ "type": "string"
68733
+ }
68734
+ },
68735
+ "required": [
68736
+ "subscription",
68737
+ "drift"
68738
+ ],
68739
+ "additionalProperties": false
68740
+ },
68741
+ "invokable": true
68742
+ },
65516
68743
  {
65517
68744
  "id": "push.subscriptions.verify",
65518
68745
  "title": "Send Test Web Push",
@@ -69654,6 +72881,129 @@ export const OPERATOR_CONTRACT = {
69654
72881
  },
69655
72882
  "invokable": true
69656
72883
  },
72884
+ {
72885
+ "id": "tailscale.get",
72886
+ "title": "Detect Tailscale Environment",
72887
+ "description": "READ-ONLY detection of a usable tailscale environment: binary present, logged-in status, MagicDNS name, and the https URL `tailscale serve` would yield. Never invokes a state-changing tailscale command. Where tailscale is absent the result says so once — surfaces offer the auto-wire affordance only when this reports a usable environment; nothing nags. Includes the most recent serve receipt, if any.",
72888
+ "category": "remote-access",
72889
+ "source": "builtin",
72890
+ "access": "authenticated",
72891
+ "transport": [
72892
+ "ws"
72893
+ ],
72894
+ "scopes": [
72895
+ "read:control-plane"
72896
+ ],
72897
+ "outputSchema": {
72898
+ "type": "object",
72899
+ "properties": {
72900
+ "available": {
72901
+ "type": "boolean"
72902
+ },
72903
+ "loggedIn": {
72904
+ "type": "boolean"
72905
+ },
72906
+ "magicDnsName": {
72907
+ "type": "string"
72908
+ },
72909
+ "httpsUrl": {
72910
+ "type": "string"
72911
+ },
72912
+ "detail": {
72913
+ "type": "string"
72914
+ },
72915
+ "lastServe": {
72916
+ "type": "object",
72917
+ "properties": {
72918
+ "at": {
72919
+ "type": "number"
72920
+ },
72921
+ "command": {
72922
+ "type": "string"
72923
+ },
72924
+ "ok": {
72925
+ "type": "boolean"
72926
+ },
72927
+ "url": {
72928
+ "type": "string"
72929
+ },
72930
+ "detail": {
72931
+ "type": "string"
72932
+ }
72933
+ },
72934
+ "required": [
72935
+ "at",
72936
+ "command",
72937
+ "ok",
72938
+ "detail"
72939
+ ],
72940
+ "additionalProperties": false
72941
+ }
72942
+ },
72943
+ "required": [
72944
+ "available",
72945
+ "loggedIn",
72946
+ "detail"
72947
+ ],
72948
+ "additionalProperties": false
72949
+ },
72950
+ "invokable": true
72951
+ },
72952
+ {
72953
+ "id": "tailscale.serve.run",
72954
+ "title": "Set Up Tailscale Serve For The Daemon",
72955
+ "description": "The one-action https affordance: run `tailscale serve --bg <web port>` so tailscale fronts the daemon's web surface at its https MagicDNS URL. This is the ONLY state-changing tailscale command the daemon ever runs, and only from this explicit user-initiated verb. The attempt is recorded with an honest receipt either way; on success web.publicBaseUrl is updated to the https URL from the same resolution. The daemon never mints certificates — TLS is terminated by tailscale.",
72956
+ "category": "remote-access",
72957
+ "source": "builtin",
72958
+ "access": "authenticated",
72959
+ "transport": [
72960
+ "ws"
72961
+ ],
72962
+ "scopes": [
72963
+ "write:control-plane"
72964
+ ],
72965
+ "outputSchema": {
72966
+ "type": "object",
72967
+ "properties": {
72968
+ "receipt": {
72969
+ "type": "object",
72970
+ "properties": {
72971
+ "at": {
72972
+ "type": "number"
72973
+ },
72974
+ "command": {
72975
+ "type": "string"
72976
+ },
72977
+ "ok": {
72978
+ "type": "boolean"
72979
+ },
72980
+ "url": {
72981
+ "type": "string"
72982
+ },
72983
+ "detail": {
72984
+ "type": "string"
72985
+ }
72986
+ },
72987
+ "required": [
72988
+ "at",
72989
+ "command",
72990
+ "ok",
72991
+ "detail"
72992
+ ],
72993
+ "additionalProperties": false
72994
+ },
72995
+ "publicBaseUrlUpdated": {
72996
+ "type": "boolean"
72997
+ }
72998
+ },
72999
+ "required": [
73000
+ "receipt",
73001
+ "publicBaseUrlUpdated"
73002
+ ],
73003
+ "additionalProperties": false
73004
+ },
73005
+ "invokable": true
73006
+ },
69657
73007
  {
69658
73008
  "id": "review.snapshot",
69659
73009
  "title": "Review Snapshot",
@@ -77057,6 +80407,196 @@ export const OPERATOR_CONTRACT = {
77057
80407
  },
77058
80408
  "invokable": true
77059
80409
  },
80410
+ {
80411
+ "id": "sessions.queuedMessages.delete",
80412
+ "title": "Delete a Queued Mid-Turn Message",
80413
+ "description": "Remove a message still waiting in the mid-turn queue so it is never delivered. A message already delivered to the model cannot be removed — deleting it is a 404 MESSAGE_NOT_QUEUED. Only the daemon's live local runtime session is controllable; any other session id is a 404 SESSION_NOT_LOCAL.",
80414
+ "category": "sessions",
80415
+ "source": "builtin",
80416
+ "access": "authenticated",
80417
+ "transport": [
80418
+ "http",
80419
+ "ws"
80420
+ ],
80421
+ "scopes": [
80422
+ "write:sessions"
80423
+ ],
80424
+ "http": {
80425
+ "method": "DELETE",
80426
+ "path": "/api/sessions/{sessionId}/queued-messages/{messageId}"
80427
+ },
80428
+ "events": [
80429
+ "runtime.session"
80430
+ ],
80431
+ "inputSchema": {
80432
+ "type": "object",
80433
+ "properties": {
80434
+ "sessionId": {
80435
+ "type": "string"
80436
+ },
80437
+ "messageId": {
80438
+ "type": "string"
80439
+ }
80440
+ },
80441
+ "required": [
80442
+ "sessionId",
80443
+ "messageId"
80444
+ ],
80445
+ "additionalProperties": false
80446
+ },
80447
+ "outputSchema": {
80448
+ "type": "object",
80449
+ "properties": {
80450
+ "sessionId": {
80451
+ "type": "string"
80452
+ },
80453
+ "id": {
80454
+ "type": "string"
80455
+ },
80456
+ "deleted": {
80457
+ "type": "boolean"
80458
+ }
80459
+ },
80460
+ "required": [
80461
+ "sessionId",
80462
+ "id",
80463
+ "deleted"
80464
+ ],
80465
+ "additionalProperties": false
80466
+ },
80467
+ "invokable": true
80468
+ },
80469
+ {
80470
+ "id": "sessions.queuedMessages.edit",
80471
+ "title": "Edit a Queued Mid-Turn Message",
80472
+ "description": "Replace the text of a message still waiting in the mid-turn queue. A message already delivered to the model is immutable — editing it is a 404 MESSAGE_NOT_QUEUED. Editing replaces any multimodal content with the new plain text. Only the daemon's live local runtime session is controllable; any other session id is a 404 SESSION_NOT_LOCAL.",
80473
+ "category": "sessions",
80474
+ "source": "builtin",
80475
+ "access": "authenticated",
80476
+ "transport": [
80477
+ "http",
80478
+ "ws"
80479
+ ],
80480
+ "scopes": [
80481
+ "write:sessions"
80482
+ ],
80483
+ "http": {
80484
+ "method": "POST",
80485
+ "path": "/api/sessions/{sessionId}/queued-messages/{messageId}"
80486
+ },
80487
+ "events": [
80488
+ "runtime.session"
80489
+ ],
80490
+ "inputSchema": {
80491
+ "type": "object",
80492
+ "properties": {
80493
+ "sessionId": {
80494
+ "type": "string"
80495
+ },
80496
+ "messageId": {
80497
+ "type": "string"
80498
+ },
80499
+ "text": {
80500
+ "type": "string"
80501
+ }
80502
+ },
80503
+ "required": [
80504
+ "sessionId",
80505
+ "messageId",
80506
+ "text"
80507
+ ],
80508
+ "additionalProperties": false
80509
+ },
80510
+ "outputSchema": {
80511
+ "type": "object",
80512
+ "properties": {
80513
+ "sessionId": {
80514
+ "type": "string"
80515
+ },
80516
+ "id": {
80517
+ "type": "string"
80518
+ },
80519
+ "text": {
80520
+ "type": "string"
80521
+ }
80522
+ },
80523
+ "required": [
80524
+ "sessionId",
80525
+ "id",
80526
+ "text"
80527
+ ],
80528
+ "additionalProperties": false
80529
+ },
80530
+ "invokable": true
80531
+ },
80532
+ {
80533
+ "id": "sessions.queuedMessages.list",
80534
+ "title": "List Queued Mid-Turn Messages",
80535
+ "description": "List the messages queued behind the current turn (submitted while the model was thinking), in delivery order. Queued messages remain editable and deletable until they are delivered; a delivered message no longer appears here. Only the daemon's live local runtime session is resolvable; any other session id is a 404 SESSION_NOT_LOCAL.",
80536
+ "category": "sessions",
80537
+ "source": "builtin",
80538
+ "access": "authenticated",
80539
+ "transport": [
80540
+ "http",
80541
+ "ws"
80542
+ ],
80543
+ "scopes": [
80544
+ "read:sessions"
80545
+ ],
80546
+ "http": {
80547
+ "method": "GET",
80548
+ "path": "/api/sessions/{sessionId}/queued-messages"
80549
+ },
80550
+ "inputSchema": {
80551
+ "type": "object",
80552
+ "properties": {
80553
+ "sessionId": {
80554
+ "type": "string"
80555
+ }
80556
+ },
80557
+ "required": [
80558
+ "sessionId"
80559
+ ],
80560
+ "additionalProperties": false
80561
+ },
80562
+ "outputSchema": {
80563
+ "type": "object",
80564
+ "properties": {
80565
+ "sessionId": {
80566
+ "type": "string"
80567
+ },
80568
+ "messages": {
80569
+ "type": "array",
80570
+ "items": {
80571
+ "type": "object",
80572
+ "properties": {
80573
+ "id": {
80574
+ "type": "string"
80575
+ },
80576
+ "queuedAt": {
80577
+ "type": "number"
80578
+ },
80579
+ "text": {
80580
+ "type": "string"
80581
+ }
80582
+ },
80583
+ "required": [
80584
+ "id",
80585
+ "queuedAt",
80586
+ "text"
80587
+ ],
80588
+ "additionalProperties": false
80589
+ }
80590
+ }
80591
+ },
80592
+ "required": [
80593
+ "sessionId",
80594
+ "messages"
80595
+ ],
80596
+ "additionalProperties": false
80597
+ },
80598
+ "invokable": true
80599
+ },
77060
80600
  {
77061
80601
  "id": "sessions.register",
77062
80602
  "title": "Register Shared Session",
@@ -77092,7 +80632,8 @@ export const OPERATOR_CONTRACT = {
77092
80632
  "webui",
77093
80633
  "companion-task",
77094
80634
  "companion-chat",
77095
- "automation"
80635
+ "automation",
80636
+ "acp"
77096
80637
  ]
77097
80638
  },
77098
80639
  "project": {
@@ -78346,6 +81887,65 @@ export const OPERATOR_CONTRACT = {
78346
81887
  },
78347
81888
  "invokable": true
78348
81889
  },
81890
+ {
81891
+ "id": "sessions.toolCalls.cancel",
81892
+ "title": "Cancel One In-Flight Tool Call",
81893
+ "description": "Cancel a single running tool call by its callId, leaving the turn and any other running calls untouched. The cancelled call settles as a structured \"cancelled by user\" tool result the model adapts to in the same turn — distinct from a whole-turn interrupt. Only the daemon's live local runtime session is controllable; any other session id is a 404 SESSION_NOT_LOCAL, and an unknown or already-settled callId is a 404 TOOL_CALL_NOT_RUNNING.",
81894
+ "category": "sessions",
81895
+ "source": "builtin",
81896
+ "access": "authenticated",
81897
+ "transport": [
81898
+ "http",
81899
+ "ws"
81900
+ ],
81901
+ "scopes": [
81902
+ "write:sessions"
81903
+ ],
81904
+ "http": {
81905
+ "method": "POST",
81906
+ "path": "/api/sessions/{sessionId}/tool-calls/{callId}/cancel"
81907
+ },
81908
+ "events": [
81909
+ "runtime.tools"
81910
+ ],
81911
+ "inputSchema": {
81912
+ "type": "object",
81913
+ "properties": {
81914
+ "sessionId": {
81915
+ "type": "string"
81916
+ },
81917
+ "callId": {
81918
+ "type": "string"
81919
+ }
81920
+ },
81921
+ "required": [
81922
+ "sessionId",
81923
+ "callId"
81924
+ ],
81925
+ "additionalProperties": false
81926
+ },
81927
+ "outputSchema": {
81928
+ "type": "object",
81929
+ "properties": {
81930
+ "sessionId": {
81931
+ "type": "string"
81932
+ },
81933
+ "callId": {
81934
+ "type": "string"
81935
+ },
81936
+ "cancelled": {
81937
+ "type": "boolean"
81938
+ }
81939
+ },
81940
+ "required": [
81941
+ "sessionId",
81942
+ "callId",
81943
+ "cancelled"
81944
+ ],
81945
+ "additionalProperties": false
81946
+ },
81947
+ "invokable": true
81948
+ },
78349
81949
  {
78350
81950
  "id": "security.settings",
78351
81951
  "title": "Security Settings Report",
@@ -78383,10 +81983,13 @@ export const OPERATOR_CONTRACT = {
78383
81983
  "type": {
78384
81984
  "type": "string",
78385
81985
  "enum": [
78386
- "feature-flag",
81986
+ "setting",
78387
81987
  "configuration"
78388
81988
  ]
78389
81989
  },
81990
+ "featureId": {
81991
+ "type": "string"
81992
+ },
78390
81993
  "defaultState": {
78391
81994
  "type": "string"
78392
81995
  },
@@ -78421,6 +82024,7 @@ export const OPERATOR_CONTRACT = {
78421
82024
  "required": [
78422
82025
  "key",
78423
82026
  "type",
82027
+ "featureId",
78424
82028
  "defaultState",
78425
82029
  "currentState",
78426
82030
  "securityRelevant",
@@ -85738,6 +89342,12 @@ export const OPERATOR_CONTRACT = {
85738
89342
  },
85739
89343
  "label": {
85740
89344
  "type": "string"
89345
+ },
89346
+ "origin": {
89347
+ "type": "string"
89348
+ },
89349
+ "checkpointEligible": {
89350
+ "type": "boolean"
85741
89351
  }
85742
89352
  },
85743
89353
  "required": [
@@ -85759,6 +89369,12 @@ export const OPERATOR_CONTRACT = {
85759
89369
  },
85760
89370
  "label": {
85761
89371
  "type": "string"
89372
+ },
89373
+ "origin": {
89374
+ "type": "string"
89375
+ },
89376
+ "checkpointEligible": {
89377
+ "type": "boolean"
85762
89378
  }
85763
89379
  },
85764
89380
  "required": [
@@ -85818,6 +89434,12 @@ export const OPERATOR_CONTRACT = {
85818
89434
  },
85819
89435
  "label": {
85820
89436
  "type": "string"
89437
+ },
89438
+ "origin": {
89439
+ "type": "string"
89440
+ },
89441
+ "checkpointEligible": {
89442
+ "type": "boolean"
85821
89443
  }
85822
89444
  },
85823
89445
  "required": [
@@ -85989,6 +89611,64 @@ export const OPERATOR_CONTRACT = {
85989
89611
  },
85990
89612
  "invokable": true
85991
89613
  },
89614
+ {
89615
+ "id": "worktrees.discard",
89616
+ "title": "Discard a Worktree",
89617
+ "description": "Remove a worktree per the eviction-preserving rules: any uncommitted state is first committed onto the worktree's branch (a preservation failure REFUSES the removal rather than losing work), the directory is removed, and the branch is KEPT. Returns an honest receipt (ok, branch kept, preservation commit, detail) either way.",
89618
+ "category": "worktrees",
89619
+ "source": "builtin",
89620
+ "access": "authenticated",
89621
+ "transport": [
89622
+ "ws"
89623
+ ],
89624
+ "scopes": [
89625
+ "write:worktrees"
89626
+ ],
89627
+ "inputSchema": {
89628
+ "type": "object",
89629
+ "properties": {
89630
+ "path": {
89631
+ "type": "string"
89632
+ }
89633
+ },
89634
+ "required": [
89635
+ "path"
89636
+ ],
89637
+ "additionalProperties": false
89638
+ },
89639
+ "outputSchema": {
89640
+ "type": "object",
89641
+ "properties": {
89642
+ "path": {
89643
+ "type": "string"
89644
+ },
89645
+ "ok": {
89646
+ "type": "boolean"
89647
+ },
89648
+ "branch": {
89649
+ "type": "string"
89650
+ },
89651
+ "preservedCommit": {
89652
+ "type": "string"
89653
+ },
89654
+ "discardedAt": {
89655
+ "type": "number"
89656
+ },
89657
+ "detail": {
89658
+ "type": "string"
89659
+ }
89660
+ },
89661
+ "required": [
89662
+ "path",
89663
+ "ok",
89664
+ "discardedAt",
89665
+ "detail"
89666
+ ],
89667
+ "additionalProperties": false
89668
+ },
89669
+ "dangerous": true,
89670
+ "invokable": true
89671
+ },
85992
89672
  {
85993
89673
  "id": "worktrees.setup.run",
85994
89674
  "title": "Re-run Worktree Setup",
@@ -87864,10 +91544,10 @@ export const OPERATOR_CONTRACT = {
87864
91544
  }
87865
91545
  ],
87866
91546
  "schemaCoverage": {
87867
- "methods": 384,
87868
- "typedInputs": 384,
91547
+ "methods": 412,
91548
+ "typedInputs": 412,
87869
91549
  "genericInputs": 0,
87870
- "typedOutputs": 384,
91550
+ "typedOutputs": 412,
87871
91551
  "genericOutputs": 0
87872
91552
  },
87873
91553
  "eventCoverage": {
@@ -87876,10 +91556,10 @@ export const OPERATOR_CONTRACT = {
87876
91556
  "withWireEvents": 32
87877
91557
  },
87878
91558
  "validationCoverage": {
87879
- "methods": 384,
87880
- "validated": 382,
91559
+ "methods": 412,
91560
+ "validated": 405,
87881
91561
  "skippedGeneric": 0,
87882
- "skippedUntyped": 2
91562
+ "skippedUntyped": 7
87883
91563
  }
87884
91564
  },
87885
91565
  "peer": {