@symerian/symi 3.5.27 → 3.5.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{agent-DxRVDqSg.js → agent-BsRYHa15.js} +1 -1
- package/dist/{agent-CB5yb-7V.js → agent-TRt_SsAW.js} +1 -1
- package/dist/{agents-DtRd3yEb.js → agents-7qMp2MWu.js} +2 -2
- package/dist/{auth-choice-5SLfZiQ7.js → auth-choice-C8lwYiEQ.js} +1 -1
- package/dist/{auth-choice-DQplW60s.js → auth-choice-DcB72YWZ.js} +1 -1
- package/dist/{banner-B_P_FrmA.js → banner-B5Hv4rlk.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +4 -4
- package/dist/bundled/session-memory/handler.js +4 -4
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-DnWkDAWi.js → channel-options-DOzFci6h.js} +1 -1
- package/dist/{channel-options-8NGYZjfd.js → channel-options-ZkruGuHl.js} +1 -1
- package/dist/{channels-cli-Bx90nSmB.js → channels-cli-CEz9LILV.js} +7 -7
- package/dist/{channels-cli-CGCyzahW.js → channels-cli-DMShhX0d.js} +7 -7
- package/dist/{chrome-OTJg3QKn.js → chrome-CmQwGAuL.js} +7 -7
- package/dist/{cli-DZAtyHzb.js → cli-Byovb_j5.js} +4 -4
- package/dist/{cli-DHG9iZJi.js → cli-MDHkESMC.js} +4 -4
- package/dist/{command-registry-DBbzZvh6.js → command-registry-Dzj-Uz5N.js} +10 -10
- package/dist/{completion-cli-Cbf0-8ob.js → completion-cli-CsJ2f_fk.js} +1 -1
- package/dist/{completion-cli-DoQrkCAd.js → completion-cli-vAwL_uEK.js} +2 -2
- package/dist/{config-cli-9a5qBcdo.js → config-cli-CqqCDyf0.js} +1 -1
- package/dist/{config-cli-D4RmoOxe.js → config-cli-cmea_Z-A.js} +1 -1
- package/dist/{configure-ryB8EvyP.js → configure-BEPKQuJj.js} +2 -2
- package/dist/{configure-kaf3aurx.js → configure-DymrZd1n.js} +2 -2
- package/dist/control-ui/css/style.css +145 -7
- package/dist/control-ui/index.html +14 -0
- package/dist/control-ui/js/symframe-bidirectional.js +210 -0
- package/dist/{deliver-BiWlR84Y.js → deliver-B04yNX82.js} +4 -4
- package/dist/{doctor-completion-Bk55g4MP.js → doctor-completion--phnyAqO.js} +1 -1
- package/dist/{doctor-completion--j-3qqz6.js → doctor-completion-BY72G6-l.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +2 -2
- package/dist/{gateway-cli-B3FuQctH.js → gateway-cli-BVpyqk_H.js} +10 -10
- package/dist/{gateway-cli-BGMVOW2G.js → gateway-cli-Bo80TSkq.js} +10 -10
- package/dist/{glass-ui-ws-Z-W33_mF.js → glass-ui-ws-BK5qk7-_.js} +8 -8
- package/dist/{glass-ui-ws-BJcI_IdV.js → glass-ui-ws-CrmnRYxe.js} +8 -8
- package/dist/{hooks-cli-D43GEG-W.js → hooks-cli-CjklMDuK.js} +5 -5
- package/dist/{hooks-cli-Bn6x6Jnj.js → hooks-cli-CqmTdxT6.js} +5 -5
- package/dist/index.js +8 -8
- package/dist/llm-slug-generator.js +4 -4
- package/dist/{manager-Cw7IJGbB.js → manager-CL767Sv9.js} +1 -1
- package/dist/{manager-DbVMwpDc.js → manager-DM2oPS8M.js} +1 -1
- package/dist/{manager-BHddoe4T.js → manager-DogrTmEo.js} +1 -1
- package/dist/{manager-DH00nlW8.js → manager-XfNxjaX5.js} +1 -1
- package/dist/{memory-C02Znuee.js → memory-CTf9MdBg.js} +2 -2
- package/dist/{memory-BZ24UkLW.js → memory-DOl2l2AS.js} +2 -2
- package/dist/{memory-cli-0HHYm-B8.js → memory-cli-B9_Vfaow.js} +2 -2
- package/dist/{memory-cli-083UJtVJ.js → memory-cli-CA5PbH9y.js} +2 -2
- package/dist/{models-Bh_frCup.js → models-DgiBOeVH.js} +2 -2
- package/dist/{models-cli-C2EXmrYH.js → models-cli-B7gTrlgn.js} +5 -5
- package/dist/{models-cli-BhBu4Dwm.js → models-cli-BHN3bt0f.js} +6 -6
- package/dist/{onboard-DnwWawQO.js → onboard-BNdKimpG.js} +1 -1
- package/dist/{onboard-BSxqEQfo.js → onboard-DGp6mHJD.js} +1 -1
- package/dist/{onboard-channels-BkR3MKMp.js → onboard-channels-DSBWRjSp.js} +1 -1
- package/dist/{onboard-channels-qDThNkyj.js → onboard-channels-Dhb-28-_.js} +1 -1
- package/dist/{onboarding-DxZAGVkD.js → onboarding-BG23DuS1.js} +3 -3
- package/dist/{onboarding-CrCGoZ4H.js → onboarding-MPSU9pXd.js} +3 -3
- package/dist/{onboarding.finalize-BYzduVFA.js → onboarding.finalize-B-mxzJ08.js} +4 -4
- package/dist/{onboarding.finalize-Dt-rcgpk.js → onboarding.finalize-Cv20GyNt.js} +3 -3
- package/dist/{pi-embedded-DGnpyHm-.js → pi-embedded-DdoLFoXg.js} +4 -3
- package/dist/{plugin-registry-D2_TLnOr.js → plugin-registry-CBV_Y6Dj.js} +1 -1
- package/dist/{plugin-registry-B74FBx4U.js → plugin-registry-c3Skr0q9.js} +1 -1
- package/dist/plugin-sdk/index.js +6 -6
- package/dist/{plugins-cli-Cmf3kRf5.js → plugins-cli-8Jo1X8SU.js} +5 -5
- package/dist/{plugins-cli-CqV1Q7ao.js → plugins-cli-Dl7-FSCq.js} +5 -5
- package/dist/{program-CGuYYumL.js → program-D-LYHEvk.js} +10 -10
- package/dist/{program-context-B0ovpbFU.js → program-context-BpeLcVUB.js} +18 -18
- package/dist/{prompt-select-styled-B5GrNfqR.js → prompt-select-styled-Ceih9wkY.js} +4 -4
- package/dist/{prompt-select-styled-b752FPLG.js → prompt-select-styled-ZWxB2Odf.js} +4 -4
- package/dist/{provider-auth-helpers-DU8RlQz7.js → provider-auth-helpers-BCejcf5o.js} +1 -1
- package/dist/{provider-auth-helpers-BKveYcEH.js → provider-auth-helpers-BdvW7eau.js} +1 -1
- package/dist/{push-apns-HNg0rTkI.js → push-apns-D4iLNyBo.js} +1 -1
- package/dist/{push-apns-CyAPMMJC.js → push-apns-HQd5hCpM.js} +1 -1
- package/dist/{pw-ai-DY_6l11g.js → pw-ai-DLsdzdgc.js} +1 -1
- package/dist/{register.agent-DbPYGG3u.js → register.agent-DoUbqZIu.js} +9 -9
- package/dist/{register.agent-BKbQhrre.js → register.agent-zwVEiCHs.js} +8 -8
- package/dist/{register.configure-C4_ShaQV.js → register.configure-CSe8Rlda.js} +8 -8
- package/dist/{register.configure-B0M15y31.js → register.configure-jBKvvOnk.js} +8 -8
- package/dist/{register.maintenance-bzLNOqch.js → register.maintenance-BdikNAV1.js} +9 -9
- package/dist/{register.maintenance-BOYWTu9C.js → register.maintenance-royLmVA2.js} +8 -8
- package/dist/{register.message-Bfukmte_.js → register.message-C1H5Vcnb.js} +5 -5
- package/dist/{register.message-BtCthbpo.js → register.message-C_0uLdYn.js} +5 -5
- package/dist/{register.onboard-D5GmuX8K.js → register.onboard-DTLtb0SN.js} +2 -2
- package/dist/{register.onboard-CDsSVoFI.js → register.onboard-DnMRUtnl.js} +2 -2
- package/dist/{register.setup-Bp8rYeRx.js → register.setup-B9sjRH7l.js} +2 -2
- package/dist/{register.setup-DzospfSf.js → register.setup-KA8Cs3HJ.js} +2 -2
- package/dist/{register.status-health-sessions-NVbWTQpZ.js → register.status-health-sessions-B_jcsH3c.js} +3 -3
- package/dist/{register.status-health-sessions-DE2db_Uo.js → register.status-health-sessions-BwiKHLEj.js} +3 -3
- package/dist/{register.subclis-QXO75pUm.js → register.subclis-B_V8vNI0.js} +9 -9
- package/dist/{run-main-MD8Z8ydF.js → run-main-DhgQtxI0.js} +17 -17
- package/dist/{server-methods-Bl41VzMu.js → server-methods-6-10RyMD.js} +7 -7
- package/dist/{server-methods-DTkVQH8Q.js → server-methods-Bdz-OwQ4.js} +7 -7
- package/dist/{server-node-events-C0smPxrR.js → server-node-events-B3Yey3h9.js} +6 -6
- package/dist/{server-node-events-CxYKzrbU.js → server-node-events-C4giIb7q.js} +6 -6
- package/dist/{status-DrWy5OkC.js → status-BRUIJsUm.js} +1 -1
- package/dist/{status-OTYFx93W.js → status-B_CQpjQ9.js} +1 -1
- package/dist/{status-D7QX7VDk.js → status-CCAO6ZHm.js} +1 -1
- package/dist/{status-BEZotN01.js → status-D_0593yR.js} +1 -1
- package/dist/{subagent-registry-CVhLz4p3.js → subagent-registry-D8BIWG9Q.js} +4 -3
- package/dist/{synthesis-CO5pr92g.js → synthesis-Bfhs-a4F.js} +4 -4
- package/dist/{synthesis-ts2nG0tK.js → synthesis-CV94EuT_.js} +4 -4
- package/dist/{synthesis-C1mZnGqD.js → synthesis-Cggd0_wq.js} +2 -2
- package/dist/{synthesis-RhT991Ni.js → synthesis-qvteT0Ti.js} +4 -4
- package/dist/{unified-runner-O3qR5Iie.js → unified-runner-C7BRCFJF.js} +11 -10
- package/dist/{unified-runner-4O0ifBsI.js → unified-runner-CtSJoaGS.js} +4 -3
- package/dist/{update-cli-BMURsYJU.js → update-cli-BrryYmFA.js} +8 -8
- package/dist/{update-cli-D9g9s187.js → update-cli-CUos9qgT.js} +9 -9
- package/extensions/memory-core/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/outlook/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/package.json +1 -1
|
@@ -961,6 +961,121 @@ body {
|
|
|
961
961
|
color: var(--text);
|
|
962
962
|
}
|
|
963
963
|
|
|
964
|
+
/* ── Stage E (3.5.28): considering button ─────────────────────── */
|
|
965
|
+
/* "What are you considering?" — clicking dwells every weighing card
|
|
966
|
+
AND adds .considering-weighing to #symframe (CSS below) which dims
|
|
967
|
+
non-weighing cards for the duration. */
|
|
968
|
+
.considering-btn {
|
|
969
|
+
margin-left: 4px;
|
|
970
|
+
padding: 2px 7px;
|
|
971
|
+
font-size: 11px;
|
|
972
|
+
line-height: 1;
|
|
973
|
+
font-family: var(--font-mono);
|
|
974
|
+
color: #f5b73a; /* amber — same hue as weighing intent */
|
|
975
|
+
background: transparent;
|
|
976
|
+
border: 1px solid rgba(245, 183, 58, 0.32);
|
|
977
|
+
border-radius: 8px;
|
|
978
|
+
cursor: pointer;
|
|
979
|
+
transition:
|
|
980
|
+
background 0.15s ease,
|
|
981
|
+
border-color 0.15s ease,
|
|
982
|
+
transform 0.15s ease;
|
|
983
|
+
}
|
|
984
|
+
.considering-btn:hover {
|
|
985
|
+
background: rgba(245, 183, 58, 0.12);
|
|
986
|
+
border-color: #f5b73a;
|
|
987
|
+
}
|
|
988
|
+
.considering-btn:active {
|
|
989
|
+
transform: scale(0.95);
|
|
990
|
+
}
|
|
991
|
+
/* Brief red flash when clicked while no weighing cards exist —
|
|
992
|
+
tells the user "I have nothing to surface here." */
|
|
993
|
+
.considering-btn.considering-empty {
|
|
994
|
+
animation: considering-empty-pulse 0.8s ease-out;
|
|
995
|
+
}
|
|
996
|
+
@keyframes considering-empty-pulse {
|
|
997
|
+
0%,
|
|
998
|
+
100% {
|
|
999
|
+
border-color: rgba(245, 183, 58, 0.32);
|
|
1000
|
+
}
|
|
1001
|
+
50% {
|
|
1002
|
+
border-color: rgba(244, 114, 182, 0.6);
|
|
1003
|
+
background: rgba(244, 114, 182, 0.1);
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
/* While considering-weighing is active, dim non-weighing cards so the
|
|
1007
|
+
weighing ones (now pulsing from dwell) stand out. */
|
|
1008
|
+
.symframe.considering-weighing .symframe-card-dynamic:not([data-intent="weighing"]) {
|
|
1009
|
+
opacity: 0.32;
|
|
1010
|
+
filter: blur(1px);
|
|
1011
|
+
transition:
|
|
1012
|
+
opacity 0.4s ease,
|
|
1013
|
+
filter 0.4s ease;
|
|
1014
|
+
}
|
|
1015
|
+
.symframe.considering-weighing .symframe-substrate {
|
|
1016
|
+
opacity: 0.45;
|
|
1017
|
+
transition: opacity 0.4s ease;
|
|
1018
|
+
}
|
|
1019
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1020
|
+
.considering-btn.considering-empty {
|
|
1021
|
+
animation: none;
|
|
1022
|
+
}
|
|
1023
|
+
.symframe.considering-weighing .symframe-card-dynamic:not([data-intent="weighing"]) {
|
|
1024
|
+
transition: opacity 0.2s ease;
|
|
1025
|
+
filter: none;
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
/* ── Stage E (3.5.28): mention-binding spans ──────────────────── */
|
|
1030
|
+
/* When an assistant chat message contains `[panel:<card-id>]`, the
|
|
1031
|
+
mention-binding scanner replaces the literal text with a clickable
|
|
1032
|
+
.panel-ref span showing the card's title. Clicking the span dwells
|
|
1033
|
+
the referenced card (cyan border pulse). */
|
|
1034
|
+
.panel-ref {
|
|
1035
|
+
display: inline;
|
|
1036
|
+
color: var(--accent-cyan);
|
|
1037
|
+
border-bottom: 1px dashed currentColor;
|
|
1038
|
+
cursor: pointer;
|
|
1039
|
+
font-weight: 500;
|
|
1040
|
+
padding: 0 2px;
|
|
1041
|
+
border-radius: 3px;
|
|
1042
|
+
transition:
|
|
1043
|
+
background 0.15s ease,
|
|
1044
|
+
border-bottom-style 0.15s ease;
|
|
1045
|
+
}
|
|
1046
|
+
.panel-ref::before {
|
|
1047
|
+
content: "↗ ";
|
|
1048
|
+
font-size: 0.85em;
|
|
1049
|
+
opacity: 0.7;
|
|
1050
|
+
}
|
|
1051
|
+
.panel-ref:hover {
|
|
1052
|
+
background: rgba(0, 212, 255, 0.12);
|
|
1053
|
+
border-bottom-style: solid;
|
|
1054
|
+
}
|
|
1055
|
+
/* Orphan reference — the card is no longer in the panel. Subdued so
|
|
1056
|
+
the user sees the link works but the card isn't currently here. */
|
|
1057
|
+
.panel-ref.panel-ref-orphan {
|
|
1058
|
+
color: var(--text-dim);
|
|
1059
|
+
opacity: 0.7;
|
|
1060
|
+
}
|
|
1061
|
+
.panel-ref.panel-ref-orphan::before {
|
|
1062
|
+
content: "↗ ";
|
|
1063
|
+
}
|
|
1064
|
+
/* Click-miss flash: a brief pink tint signals "I tried to dwell but
|
|
1065
|
+
that card isn't currently registered." */
|
|
1066
|
+
.panel-ref.panel-ref-miss {
|
|
1067
|
+
animation: panel-ref-miss-pulse 1s ease-out;
|
|
1068
|
+
}
|
|
1069
|
+
@keyframes panel-ref-miss-pulse {
|
|
1070
|
+
0%,
|
|
1071
|
+
100% {
|
|
1072
|
+
background: rgba(0, 212, 255, 0.12);
|
|
1073
|
+
}
|
|
1074
|
+
50% {
|
|
1075
|
+
background: rgba(244, 114, 182, 0.22);
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
|
|
964
1079
|
/* ── Per-mode layout overrides ───────────────────────────────── */
|
|
965
1080
|
/* Default (ambient): inherits the base .symframe grid above —
|
|
966
1081
|
auto / 1fr / auto rows. No override needed. */
|
|
@@ -996,24 +1111,40 @@ body {
|
|
|
996
1111
|
them, so we use a generic "the card whose id matches" pattern via
|
|
997
1112
|
:has() (when supported) plus a fallback class added by JS. */
|
|
998
1113
|
.symframe[data-mode="focus"] .symframe-card-focused {
|
|
1114
|
+
/* Stage D.2: dropped `transform: scale(1.02)` — the scaled render
|
|
1115
|
+
area extends beyond the card's layout box and can leak past the
|
|
1116
|
+
cards container's overflow boundary. The halo + cyan border are
|
|
1117
|
+
plenty of focus signal on their own. */
|
|
999
1118
|
opacity: 1 !important;
|
|
1000
1119
|
box-shadow:
|
|
1001
1120
|
0 0 24px rgba(0, 212, 255, 0.35),
|
|
1002
1121
|
inset 0 1px 0 rgba(255, 255, 255, 0.06),
|
|
1003
1122
|
0 4px 12px rgba(0, 0, 0, 0.25);
|
|
1004
1123
|
border-color: var(--accent-cyan) !important;
|
|
1005
|
-
transform: scale(1.02);
|
|
1006
|
-
transform-origin: center;
|
|
1007
1124
|
transition:
|
|
1008
1125
|
box-shadow 0.4s ease,
|
|
1009
|
-
border-color 0.4s ease
|
|
1010
|
-
transform 0.4s ease;
|
|
1126
|
+
border-color 0.4s ease;
|
|
1011
1127
|
}
|
|
1012
1128
|
|
|
1013
1129
|
/* Awaiting mode: footer dominant; cards collapse to title strips;
|
|
1014
|
-
substrate dims to a status band.
|
|
1130
|
+
substrate dims to a status band.
|
|
1131
|
+
|
|
1132
|
+
Stage D.2 fix (3.5.29): the original Stage D rules removed
|
|
1133
|
+
max-height on .symframe-awaiting and .awaiting-list to let the
|
|
1134
|
+
footer dominate — but with `display: flex; flex-direction: column`
|
|
1135
|
+
on .symframe-awaiting, the internal flex children (header / list /
|
|
1136
|
+
button) couldn't size correctly: the list had no flex-grow so it
|
|
1137
|
+
stayed at intrinsic content size, and the footer grew past its
|
|
1138
|
+
grid cell when the list was long. The list's content overflowed
|
|
1139
|
+
the column via the cascade.
|
|
1140
|
+
|
|
1141
|
+
The fix: keep .symframe-awaiting capped at 80% of the column
|
|
1142
|
+
(was max-height: 40% in Stage C.4 — bumped for the awaiting mode
|
|
1143
|
+
posture), and turn .awaiting-list into a flex: 1 0 0 child that
|
|
1144
|
+
scrolls internally when its content exceeds the now-larger footer.
|
|
1145
|
+
*/
|
|
1015
1146
|
.symframe[data-mode="awaiting"] {
|
|
1016
|
-
grid-template-rows: auto minmax(60px, 1fr)
|
|
1147
|
+
grid-template-rows: auto minmax(60px, 1fr) auto;
|
|
1017
1148
|
}
|
|
1018
1149
|
.symframe[data-mode="awaiting"] .symframe-substrate {
|
|
1019
1150
|
opacity: 0.35;
|
|
@@ -1030,13 +1161,20 @@ body {
|
|
|
1030
1161
|
display: none;
|
|
1031
1162
|
}
|
|
1032
1163
|
.symframe[data-mode="awaiting"] .symframe-awaiting {
|
|
1033
|
-
|
|
1164
|
+
/* Bump from C.4's 40% baseline cap to 80% so the footer can be
|
|
1165
|
+
"dominant" without exceeding the column. The `overflow: hidden`
|
|
1166
|
+
from C.4 still clips any overflow from misbehaving children. */
|
|
1167
|
+
max-height: 80%;
|
|
1034
1168
|
background: rgba(0, 212, 255, 0.04);
|
|
1035
1169
|
border-radius: 10px;
|
|
1036
1170
|
margin-top: 8px;
|
|
1037
1171
|
}
|
|
1038
1172
|
.symframe[data-mode="awaiting"] .awaiting-list {
|
|
1173
|
+
/* The footer is now sized larger than baseline. Let the list flex
|
|
1174
|
+
to fill it AND scroll internally if items exceed the cell. */
|
|
1039
1175
|
max-height: none;
|
|
1176
|
+
flex: 1 1 0;
|
|
1177
|
+
min-height: 0;
|
|
1040
1178
|
}
|
|
1041
1179
|
|
|
1042
1180
|
/* Quiet mode: only the substrate breathes. Cards + AWAITING hidden.
|
|
@@ -242,6 +242,19 @@
|
|
|
242
242
|
<button type="button" class="mode-auto" id="mode-auto" hidden title="Release to agent">
|
|
243
243
|
AUTO
|
|
244
244
|
</button>
|
|
245
|
+
<!-- Stage E (3.5.28): "what are you considering?" — clicking -->
|
|
246
|
+
<!-- this dwells every weighing card and dims non-weighing cards -->
|
|
247
|
+
<!-- for ~5s. Direct visual answer to "what options is the agent -->
|
|
248
|
+
<!-- holding open right now?" -->
|
|
249
|
+
<button
|
|
250
|
+
type="button"
|
|
251
|
+
class="considering-btn"
|
|
252
|
+
id="considering-btn"
|
|
253
|
+
title="What are you considering? (highlights weighing cards)"
|
|
254
|
+
aria-label="Highlight weighing cards"
|
|
255
|
+
>
|
|
256
|
+
⚖
|
|
257
|
+
</button>
|
|
245
258
|
</div>
|
|
246
259
|
<div class="symframe-sub">window into the agent's mind</div>
|
|
247
260
|
</div>
|
|
@@ -1029,5 +1042,6 @@
|
|
|
1029
1042
|
<script src="js/symframe-substrate.js"></script>
|
|
1030
1043
|
<script src="js/symframe-awaiting.js"></script>
|
|
1031
1044
|
<script src="js/symframe-modes.js"></script>
|
|
1045
|
+
<script src="js/symframe-bidirectional.js"></script>
|
|
1032
1046
|
</body>
|
|
1033
1047
|
</html>
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
// ── Symframe Bidirectional ──────────────────────────────────────────
|
|
2
|
+
// Stage E of the Dynamic Glass Panel arc — see ~/Documents/dynamic-glass-panel.md §5 Stage E.
|
|
3
|
+
//
|
|
4
|
+
// Two user-facing features that bridge the chat column and the symframe:
|
|
5
|
+
//
|
|
6
|
+
// 1. Mention-binding (agent → user direction)
|
|
7
|
+
// When the agent writes `[panel:<card-id>]` in a chat message, this
|
|
8
|
+
// module rewrites the literal text into a clickable span showing the
|
|
9
|
+
// card's title (or id if no title) AND auto-pulses (dwell) the
|
|
10
|
+
// referenced card. Clicking the span re-pulses. Fresh messages
|
|
11
|
+
// auto-dwell once on first render; history-loaded messages get
|
|
12
|
+
// clickable spans but no auto-dwell (so a session with 50 referenced
|
|
13
|
+
// messages doesn't dwell 50 times on reload).
|
|
14
|
+
//
|
|
15
|
+
// 2. "What are you considering?" (user → agent introspection)
|
|
16
|
+
// Small button in the symframe header. On click, dwells every
|
|
17
|
+
// weighing card AND adds .considering-weighing to #symframe which
|
|
18
|
+
// dims non-weighing cards for ~5s. Direct visual answer to "what
|
|
19
|
+
// options are the agent holding open right now?"
|
|
20
|
+
//
|
|
21
|
+
// Implementation notes:
|
|
22
|
+
// - Mention-scanning runs on a 500ms interval over all unscanned
|
|
23
|
+
// assistant bubbles; once processed, a bubble gets the
|
|
24
|
+
// .mentions-scanned class and is skipped. Streaming bubbles
|
|
25
|
+
// (.stream-bubble without .done) are skipped until they finalize.
|
|
26
|
+
// - The pageReadyAt + 1500ms grace window suppresses the initial
|
|
27
|
+
// auto-dwell flood from history reload.
|
|
28
|
+
// - The considering button reads window.symframe.list() to find
|
|
29
|
+
// weighing cards. Sticky cards (subagents/scheduling panels —
|
|
30
|
+
// mostly gone post-Stage-C, but defensive) are excluded.
|
|
31
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
32
|
+
|
|
33
|
+
"use strict";
|
|
34
|
+
|
|
35
|
+
(function () {
|
|
36
|
+
const PANEL_REF_PATTERN = /\[panel:([a-zA-Z0-9_-]+)\]/g;
|
|
37
|
+
const SCAN_INTERVAL_MS = 500;
|
|
38
|
+
const PAGE_READY_AT = Date.now() + 1500;
|
|
39
|
+
const CONSIDERING_DURATION_MS = 5000;
|
|
40
|
+
|
|
41
|
+
// ── Mention-binding ─────────────────────────────────────────────
|
|
42
|
+
function buildPanelRefSpan(id) {
|
|
43
|
+
const span = document.createElement("span");
|
|
44
|
+
span.className = "panel-ref";
|
|
45
|
+
span.dataset.cardId = id;
|
|
46
|
+
const cards = window.symframe?.list?.() || [];
|
|
47
|
+
const card = cards.find((c) => c.id === id);
|
|
48
|
+
const hasCard = !!card;
|
|
49
|
+
span.textContent = card?.title || id;
|
|
50
|
+
span.title = hasCard
|
|
51
|
+
? `Click to pulse "${card.title || id}" in the panel`
|
|
52
|
+
: `Card "${id}" — not currently in the panel`;
|
|
53
|
+
if (!hasCard) {
|
|
54
|
+
span.classList.add("panel-ref-orphan");
|
|
55
|
+
}
|
|
56
|
+
span.addEventListener("click", (e) => {
|
|
57
|
+
e.preventDefault();
|
|
58
|
+
const result = window.symframe?.dwell?.(id);
|
|
59
|
+
if (!result) {
|
|
60
|
+
span.classList.add("panel-ref-miss");
|
|
61
|
+
setTimeout(() => span.classList.remove("panel-ref-miss"), 1000);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return span;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function walkTextNodes(node, callback) {
|
|
68
|
+
if (!node) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
72
|
+
callback(node);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (node.nodeType !== Node.ELEMENT_NODE) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const el = node;
|
|
79
|
+
// Skip elements we've already processed, code blocks, and links.
|
|
80
|
+
if (el.classList?.contains("panel-ref")) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (el.tagName === "CODE" || el.tagName === "PRE" || el.tagName === "A") {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
for (const child of Array.from(el.childNodes)) {
|
|
87
|
+
walkTextNodes(child, callback);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function processMentionsIn(bubble) {
|
|
92
|
+
const matchedIds = [];
|
|
93
|
+
walkTextNodes(bubble, (textNode) => {
|
|
94
|
+
const text = textNode.textContent;
|
|
95
|
+
if (!text) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
PANEL_REF_PATTERN.lastIndex = 0;
|
|
99
|
+
if (!PANEL_REF_PATTERN.test(text)) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
PANEL_REF_PATTERN.lastIndex = 0;
|
|
103
|
+
const fragment = document.createDocumentFragment();
|
|
104
|
+
let lastIndex = 0;
|
|
105
|
+
let match;
|
|
106
|
+
while ((match = PANEL_REF_PATTERN.exec(text)) !== null) {
|
|
107
|
+
const literal = match[0];
|
|
108
|
+
const id = match[1];
|
|
109
|
+
if (match.index > lastIndex) {
|
|
110
|
+
fragment.appendChild(document.createTextNode(text.slice(lastIndex, match.index)));
|
|
111
|
+
}
|
|
112
|
+
fragment.appendChild(buildPanelRefSpan(id));
|
|
113
|
+
matchedIds.push(id);
|
|
114
|
+
lastIndex = match.index + literal.length;
|
|
115
|
+
}
|
|
116
|
+
if (lastIndex < text.length) {
|
|
117
|
+
fragment.appendChild(document.createTextNode(text.slice(lastIndex)));
|
|
118
|
+
}
|
|
119
|
+
textNode.replaceWith(fragment);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
// Auto-dwell on fresh mentions only — suppress during the initial
|
|
123
|
+
// history-reload window so we don't flood with pulses.
|
|
124
|
+
if (matchedIds.length > 0 && Date.now() >= PAGE_READY_AT) {
|
|
125
|
+
for (const id of matchedIds) {
|
|
126
|
+
try {
|
|
127
|
+
window.symframe?.dwell?.(id);
|
|
128
|
+
} catch (err) {
|
|
129
|
+
console.warn("[symframe-bidirectional] dwell threw:", err);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function scanForMentions() {
|
|
136
|
+
const bubbles = document.querySelectorAll(".message.symi-msg .bubble:not(.mentions-scanned)");
|
|
137
|
+
for (const bubble of bubbles) {
|
|
138
|
+
// Skip still-streaming bubbles (delta still incoming)
|
|
139
|
+
if (bubble.classList.contains("stream-bubble") && !bubble.classList.contains("done")) {
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
processMentionsIn(bubble);
|
|
143
|
+
bubble.classList.add("mentions-scanned");
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// ── "What are you considering?" gesture ──────────────────────────
|
|
148
|
+
let considerTimer = null;
|
|
149
|
+
|
|
150
|
+
function showConsidering() {
|
|
151
|
+
const symframeRoot = document.getElementById("symframe");
|
|
152
|
+
if (!symframeRoot) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const list = window.symframe?.list?.() || [];
|
|
156
|
+
const weighing = list.filter((c) => c.intent === "weighing" && !c.sticky);
|
|
157
|
+
if (weighing.length === 0) {
|
|
158
|
+
// Brief flash on the considering button itself to signal "no
|
|
159
|
+
// weighing cards right now"
|
|
160
|
+
const btn = document.getElementById("considering-btn");
|
|
161
|
+
if (btn) {
|
|
162
|
+
btn.classList.add("considering-empty");
|
|
163
|
+
setTimeout(() => btn.classList.remove("considering-empty"), 800);
|
|
164
|
+
}
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
// Add the dimming class to non-weighing cards
|
|
168
|
+
symframeRoot.classList.add("considering-weighing");
|
|
169
|
+
// Dwell each weighing card (cyan halo pulses)
|
|
170
|
+
for (const c of weighing) {
|
|
171
|
+
try {
|
|
172
|
+
window.symframe?.dwell?.(c.id);
|
|
173
|
+
} catch (err) {
|
|
174
|
+
console.warn("[symframe-bidirectional] dwell threw:", err);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Clear after the duration
|
|
178
|
+
if (considerTimer) {
|
|
179
|
+
clearTimeout(considerTimer);
|
|
180
|
+
}
|
|
181
|
+
considerTimer = setTimeout(() => {
|
|
182
|
+
symframeRoot.classList.remove("considering-weighing");
|
|
183
|
+
considerTimer = null;
|
|
184
|
+
}, CONSIDERING_DURATION_MS);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function wireConsideringButton() {
|
|
188
|
+
const btn = document.getElementById("considering-btn");
|
|
189
|
+
if (!btn) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
btn.addEventListener("click", (e) => {
|
|
193
|
+
e.preventDefault();
|
|
194
|
+
showConsidering();
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// ── Init ────────────────────────────────────────────────────────
|
|
199
|
+
function init() {
|
|
200
|
+
setInterval(scanForMentions, SCAN_INTERVAL_MS);
|
|
201
|
+
scanForMentions();
|
|
202
|
+
wireConsideringButton();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (document.readyState === "loading") {
|
|
206
|
+
document.addEventListener("DOMContentLoaded", init);
|
|
207
|
+
} else {
|
|
208
|
+
init();
|
|
209
|
+
}
|
|
210
|
+
})();
|
|
@@ -9,7 +9,7 @@ import { t as formatCliCommand } from "./command-format-BrrHNE8r.js";
|
|
|
9
9
|
import { n as isPidAlive, t as resolveProcessScopedMap } from "./process-scoped-map-B-dHc_9I.js";
|
|
10
10
|
import { c as loadConfig, d as writeConfigFile, m as parseByteSize, p as parseDurationMs, s as createConfigIO, t as SsrFBlockedError } from "./ssrf-DNhyFMRW.js";
|
|
11
11
|
import { t as parseBooleanValue } from "./boolean-BsqeuxE6.js";
|
|
12
|
-
import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-
|
|
12
|
+
import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, M as DEFAULT_SYMI_BROWSER_ENABLED, N as DEFAULT_SYMI_BROWSER_PROFILE_NAME, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, S as stopChromeExtensionRelayServer, _ as fetchJson, a as resolveSymiUserDataDir, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, g as appendCdpPath, h as withBrowserNavigationPolicy, i as launchSymiChrome, j as DEFAULT_SYMI_BROWSER_COLOR, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, l as createTargetViaCdp, m as assertBrowserNavigationAllowed, n as isChromeCdpReady, o as stopSymiChrome, p as InvalidBrowserNavigationUrlError, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as fetchOk, w as isLoopbackHost, x as ensureChromeExtensionRelayServer } from "./chrome-CmQwGAuL.js";
|
|
13
13
|
import { a as syncSkillsToWorkspace, l as resolveSandboxInputPath, m as sanitizeEnvVars, u as resolveSandboxPath } from "./skills-Dm4gX4Tl.js";
|
|
14
14
|
import { n as formatErrorMessage, t as extractErrorCode } from "./errors-C89ppfp9.js";
|
|
15
15
|
import { b as SafeOpenError, d as extensionForMime, i as buildImageResizeSideGrid, l as resizeToJpeg, o as getImageMetadata, r as IMAGE_REDUCE_QUALITY_STEPS, t as getAgentScopedMediaLocalRoots, u as detectMime, x as openFileWithinRoot } from "./local-roots-C7fBKoOI.js";
|
|
@@ -939,7 +939,7 @@ function isModuleNotFoundError(err) {
|
|
|
939
939
|
}
|
|
940
940
|
async function loadPwAiModule(mode) {
|
|
941
941
|
try {
|
|
942
|
-
return await import("./pw-ai-
|
|
942
|
+
return await import("./pw-ai-DLsdzdgc.js");
|
|
943
943
|
} catch (err) {
|
|
944
944
|
if (mode === "soft") return null;
|
|
945
945
|
if (isModuleNotFoundError(err)) return null;
|
|
@@ -3536,11 +3536,11 @@ function createProfileContext(opts, profile) {
|
|
|
3536
3536
|
const userDataDir = resolveSymiUserDataDir(profile.name);
|
|
3537
3537
|
const profileState = getProfileState();
|
|
3538
3538
|
if (await isHttpReachable(300) && !profileState.running) try {
|
|
3539
|
-
await (await import("./pw-ai-
|
|
3539
|
+
await (await import("./pw-ai-DLsdzdgc.js")).closePlaywrightBrowserConnection();
|
|
3540
3540
|
} catch {}
|
|
3541
3541
|
if (profileState.running) await stopRunningBrowser();
|
|
3542
3542
|
try {
|
|
3543
|
-
await (await import("./pw-ai-
|
|
3543
|
+
await (await import("./pw-ai-DLsdzdgc.js")).closePlaywrightBrowserConnection();
|
|
3544
3544
|
} catch {}
|
|
3545
3545
|
if (!fs.existsSync(userDataDir)) return {
|
|
3546
3546
|
moved: false,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as resolveCliName } from "./cli-name-DY75UA5M.js";
|
|
2
2
|
import { t as resolveSymiPackageRoot } from "./symi-root-Ctw1Rb_n.js";
|
|
3
3
|
import { t as note } from "./note-BIAQpZxi.js";
|
|
4
|
-
import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-
|
|
4
|
+
import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-vAwL_uEK.js";
|
|
5
5
|
import { spawnSync } from "node:child_process";
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as resolveCliName } from "./cli-name-CzMV-gJF.js";
|
|
2
2
|
import { t as resolveSymiPackageRoot } from "./symi-root-BQ0IpoW2.js";
|
|
3
3
|
import { t as note } from "./note-D9FXI2qW.js";
|
|
4
|
-
import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-
|
|
4
|
+
import { a as resolveCompletionCachePath, i as isCompletionInstalled, o as resolveShellFromEnv, r as installCompletion, s as usesSlowDynamicCompletion, t as completionCacheExists } from "./completion-cli-CsJ2f_fk.js";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { spawnSync } from "node:child_process";
|
|
7
7
|
|
package/dist/entry.js
CHANGED
|
@@ -2315,7 +2315,7 @@ if (!ensureExperimentalWarningSuppressed()) {
|
|
|
2315
2315
|
applyCliProfileEnv({ profile: parsed.profile });
|
|
2316
2316
|
process$1.argv = parsed.argv;
|
|
2317
2317
|
}
|
|
2318
|
-
import("./run-main-
|
|
2318
|
+
import("./run-main-DhgQtxI0.js").then(({ runCli }) => runCli(process$1.argv)).catch((error) => {
|
|
2319
2319
|
console.error("[symi] Failed to start CLI:", error instanceof Error ? error.stack ?? error.message : error);
|
|
2320
2320
|
process$1.exitCode = 1;
|
|
2321
2321
|
});
|
package/dist/extensionAPI.js
CHANGED
|
@@ -6,7 +6,7 @@ import { _ as DEFAULT_PROVIDER, g as DEFAULT_MODEL, p as resolveThinkingDefault
|
|
|
6
6
|
import { a as resolveAgentIdentity } from "./reply-prefix-i-FPYcoQ.js";
|
|
7
7
|
import "./plugins-CZ_mYwXq.js";
|
|
8
8
|
import "./replies-0nzkXt6o.js";
|
|
9
|
-
import { a as resolveAgentTimeoutMs, r as runEmbeddedPiAgent } from "./pi-embedded-
|
|
9
|
+
import { a as resolveAgentTimeoutMs, r as runEmbeddedPiAgent } from "./pi-embedded-DdoLFoXg.js";
|
|
10
10
|
import { $ as loadSessionStore, nt as saveSessionStore } from "./deliver-f3cIWxXT.js";
|
|
11
11
|
import "./diagnostic-BdRnGknC.js";
|
|
12
12
|
import "./diagnostic-session-state-DpxCUzoM.js";
|
|
@@ -23,7 +23,7 @@ import "./errors-BEU7IHU6.js";
|
|
|
23
23
|
import "./tokens-yWO1wD7Z.js";
|
|
24
24
|
import "./thinking-DgjGxdSP.js";
|
|
25
25
|
import { n as resolveSessionFilePath, s as resolveStorePath } from "./paths-BsT3BvfH.js";
|
|
26
|
-
import "./manager-
|
|
26
|
+
import "./manager-DogrTmEo.js";
|
|
27
27
|
import "./github-copilot-token-dYUr1mDQ.js";
|
|
28
28
|
import "./sqlite-D8iYC_CU.js";
|
|
29
29
|
import "./markdown-tables-jQzXAsf3.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as isExternalHookSession, $t as emitAgentEvent, A as resolveSessionDeliveryTarget, At as resolveInputFileLimits, B as normalizeOptionalSessionKey, Bt as countActiveDescendantRuns, Cn as CommandLane, Ct as DEFAULT_INPUT_IMAGE_MAX_BYTES, Dn as runWithModelFallback, Dt as extractFileContentFromSource, Et as DEFAULT_INPUT_TIMEOUT_MS, F as normalizeHttpWebhookUrl, G as buildDeliveryFromLegacyPayload, H as normalizePayloadToSystemText, Ht as initSubagentRegistry, Jt as readLatestAssistantReply, K as hasLegacyDeliveryHints, Kt as resolveAgentTimeoutMs, N as resetDirectoryCache, O as resolveOutboundSessionRoute, Ot as extractImageContentFromSource, Q as getHookType, Qt as clearAgentRunContext, R as inferLegacyName, S as createSymiTools, Sn as waitForActiveTasks, T as resolveAnnounceTargetFromKey, Tn as resolveModelProfile, Tt as DEFAULT_INPUT_MAX_REDIRECTS, U as normalizeRequiredName, Ut as listDescendantRunsForRequester, V as normalizeOptionalText, Vt as countActiveRunsForSession, W as migrateLegacyCronPayload, X as buildSafeExternalPrompt, Z as detectSuspiciousPatterns, a as getPluginToolMeta, an as getActiveEmbeddedRunCount, at as isGatewaySigusr1RestartExternallyAllowed, bn as resetAllLanes, c as handleSlackHttpRequest, cn as registerUnhandledRejectionHandler, ct as setGatewaySigusr1RestartPolicy, d as buildHistoryContextFromEntries, dn as formatUserTime, en as getAgentRunContext, fn as resolveUserTimeFormat, h as getTotalPendingReplies, it as emitGatewayRestart, k as resolveOutboundTarget, kt as normalizeMimeList, l as readJsonBodyWithLimit, ln as ToolInputError, lt as setPreRestartDeferralCheck, n as applyToolPolicyPipeline, nn as registerAgentRunContext, nt as consumeGatewaySigusr1RestartAuthorization, ot as markGatewaySigusr1RestartHandled, pn as resolveUserTimezone, q as stripLegacyDeliveryFields, qt as runSubagentAnnounceFlow, r as buildDefaultToolPolicyPipelineSteps, rt as deferGatewayRestartUntilIdle, s as loadSymiPlugins, t as runAgentTurn, tn as onAgentEvent, u as requestBodyErrorToText, vn as getActiveTaskCount, wn as classifyOutboundMessage, wt as DEFAULT_INPUT_IMAGE_MIMES, xn as setCommandLaneConcurrency, yn as getTotalQueueSize, z as normalizeOptionalAgentId } from "./unified-runner-
|
|
1
|
+
import { $ as isExternalHookSession, $t as emitAgentEvent, A as resolveSessionDeliveryTarget, At as resolveInputFileLimits, B as normalizeOptionalSessionKey, Bt as countActiveDescendantRuns, Cn as CommandLane, Ct as DEFAULT_INPUT_IMAGE_MAX_BYTES, Dn as runWithModelFallback, Dt as extractFileContentFromSource, Et as DEFAULT_INPUT_TIMEOUT_MS, F as normalizeHttpWebhookUrl, G as buildDeliveryFromLegacyPayload, H as normalizePayloadToSystemText, Ht as initSubagentRegistry, Jt as readLatestAssistantReply, K as hasLegacyDeliveryHints, Kt as resolveAgentTimeoutMs, N as resetDirectoryCache, O as resolveOutboundSessionRoute, Ot as extractImageContentFromSource, Q as getHookType, Qt as clearAgentRunContext, R as inferLegacyName, S as createSymiTools, Sn as waitForActiveTasks, T as resolveAnnounceTargetFromKey, Tn as resolveModelProfile, Tt as DEFAULT_INPUT_MAX_REDIRECTS, U as normalizeRequiredName, Ut as listDescendantRunsForRequester, V as normalizeOptionalText, Vt as countActiveRunsForSession, W as migrateLegacyCronPayload, X as buildSafeExternalPrompt, Z as detectSuspiciousPatterns, a as getPluginToolMeta, an as getActiveEmbeddedRunCount, at as isGatewaySigusr1RestartExternallyAllowed, bn as resetAllLanes, c as handleSlackHttpRequest, cn as registerUnhandledRejectionHandler, ct as setGatewaySigusr1RestartPolicy, d as buildHistoryContextFromEntries, dn as formatUserTime, en as getAgentRunContext, fn as resolveUserTimeFormat, h as getTotalPendingReplies, it as emitGatewayRestart, k as resolveOutboundTarget, kt as normalizeMimeList, l as readJsonBodyWithLimit, ln as ToolInputError, lt as setPreRestartDeferralCheck, n as applyToolPolicyPipeline, nn as registerAgentRunContext, nt as consumeGatewaySigusr1RestartAuthorization, ot as markGatewaySigusr1RestartHandled, pn as resolveUserTimezone, q as stripLegacyDeliveryFields, qt as runSubagentAnnounceFlow, r as buildDefaultToolPolicyPipelineSteps, rt as deferGatewayRestartUntilIdle, s as loadSymiPlugins, t as runAgentTurn, tn as onAgentEvent, u as requestBodyErrorToText, vn as getActiveTaskCount, wn as classifyOutboundMessage, wt as DEFAULT_INPUT_IMAGE_MIMES, xn as setCommandLaneConcurrency, yn as getTotalQueueSize, z as normalizeOptionalAgentId } from "./unified-runner-CtSJoaGS.js";
|
|
2
2
|
import { A as isRich, E as setVerbose, H as createInternalHookEvent, M as getChildLogger, N as getLogger, P as getResolvedLoggerSettings, U as registerInternalHook, V as clearInternalHooks, W as triggerInternalHook, j as theme, k as colorize, m as createEmptyPluginRegistry, r as DEFAULT_CHAT_CHANNEL } from "./registry-Sbac4a4z.js";
|
|
3
3
|
import { _ as resolveStateDir, i as isNixMode, l as resolveGatewayLockDir, o as resolveConfigPath, r as STATE_DIR, t as CONFIG_PATH, u as resolveGatewayPort, v as expandHomePrefix } from "./paths-By0XjHBk.js";
|
|
4
4
|
import { h as resolveUserPath, s as ensureDir, t as CONFIG_DIR, v as shortenHomePath, x as truncateUtf16Safe } from "./utils-CTPsqyE_.js";
|
|
@@ -58,8 +58,8 @@ import { c as hasNonzeroUsage, s as deriveSessionTotalTokens } from "./session-c
|
|
|
58
58
|
import { C as enqueueSystemEvent, a as loadCombinedSessionStoreForGateway, f as formatRestartSentinelMessage, i as listSessionsFromStore, m as summarizeRestartSentinel, o as loadSessionEntry, u as consumeRestartSentinel, x as lookupContextTokens } from "./session-utils-Cs1jlD-q.js";
|
|
59
59
|
import { r as getMachineDisplayName } from "./with-timeout-DPR4A2dx.js";
|
|
60
60
|
import { a as resolveAgentIdentity } from "./reply-prefix-BFNeXT65.js";
|
|
61
|
-
import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-
|
|
62
|
-
import { c as resolveMemorySearchConfig } from "./manager-
|
|
61
|
+
import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-DOl2l2AS.js";
|
|
62
|
+
import { c as resolveMemorySearchConfig } from "./manager-CL767Sv9.js";
|
|
63
63
|
import "./sqlite-Cod7C5ba.js";
|
|
64
64
|
import "./chunk-BxfKjCUx.js";
|
|
65
65
|
import "./markdown-tables-CS1Tvb3z.js";
|
|
@@ -92,7 +92,7 @@ import { t as formatDocsLink } from "./links-Bqr0FxXx.js";
|
|
|
92
92
|
import { n as runCommandWithRuntime } from "./cli-utils-CuyGL3rq.js";
|
|
93
93
|
import { t as formatHelpExamples } from "./help-format-7hFcsqss.js";
|
|
94
94
|
import { n as withProgress } from "./progress-swt2y17x.js";
|
|
95
|
-
import "./memory-cli-
|
|
95
|
+
import "./memory-cli-B9_Vfaow.js";
|
|
96
96
|
import "./logging-BWknayJl.js";
|
|
97
97
|
import "./replies-CbXXjn9X.js";
|
|
98
98
|
import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-H2t-Xkfc.js";
|
|
@@ -124,15 +124,15 @@ import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } fr
|
|
|
124
124
|
import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-1xPo9ygd.js";
|
|
125
125
|
import { c as resolveNodeCommandAllowlist, l as probeGateway, n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./audit-C_3fAFeS.js";
|
|
126
126
|
import { t as discoverGatewayBeacons } from "./bonjour-discovery-CWTnBKX8.js";
|
|
127
|
-
import { r as pickGatewaySelfPresence } from "./status-
|
|
127
|
+
import { r as pickGatewaySelfPresence } from "./status-CCAO6ZHm.js";
|
|
128
128
|
import { i as styleHealthChannelLine, n as getHealthSnapshot, t as formatHealthChannelLines } from "./health-7UqIGG8U.js";
|
|
129
129
|
import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-CJQ97d4u.js";
|
|
130
130
|
import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-BCL_K7kx.js";
|
|
131
|
-
import { t as runOnboardingWizard } from "./onboarding-
|
|
132
|
-
import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-
|
|
133
|
-
import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-
|
|
131
|
+
import { t as runOnboardingWizard } from "./onboarding-BG23DuS1.js";
|
|
132
|
+
import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-6-10RyMD.js";
|
|
133
|
+
import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-HQd5hCpM.js";
|
|
134
134
|
import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-CGaQ7-Vb.js";
|
|
135
|
-
import { a as getCliSessionId, o as setCliSessionId, s as runCliAgent, t as agentCommand } from "./agent-
|
|
135
|
+
import { a as getCliSessionId, o as setCliSessionId, s as runCliAgent, t as agentCommand } from "./agent-BsRYHa15.js";
|
|
136
136
|
import { t as createOutboundSendDeps } from "./outbound-send-deps--SpwgFhS.js";
|
|
137
137
|
import { s as loadAgentIdentityFromWorkspace } from "./agents.config-B7sNDvhz.js";
|
|
138
138
|
import "./dm-policy-shared-CeFt0nch.js";
|
|
@@ -12051,7 +12051,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
|
|
|
12051
12051
|
});
|
|
12052
12052
|
let glassUiBridgeCleanup = null;
|
|
12053
12053
|
if (!minimalTestGateway) {
|
|
12054
|
-
const { createGlassUiBridge } = await import("./glass-ui-ws-
|
|
12054
|
+
const { createGlassUiBridge } = await import("./glass-ui-ws-CrmnRYxe.js");
|
|
12055
12055
|
glassUiBridgeCleanup = createGlassUiBridge({
|
|
12056
12056
|
wss: glassUiWss,
|
|
12057
12057
|
context: gatewayRequestContext,
|
|
@@ -26,7 +26,7 @@ import "./pairing-token-B-OTYROz.js";
|
|
|
26
26
|
import { t as safeEqualSecret } from "./secret-equal-CDUVxXmp.js";
|
|
27
27
|
import { a as isValidIPv4, c as resolveClientIp, d as resolveHostName, f as rawDataToString, i as isTrustedProxyAddress, l as resolveGatewayBindHost, n as isLoopbackHost, o as normalizeHostHeader, t as isLoopbackAddress, u as resolveGatewayListenHosts } from "./net-TZUXtwGR.js";
|
|
28
28
|
import { n as pickPrimaryTailnetIPv4, r as pickPrimaryTailnetIPv6 } from "./tailnet-B2SPYrh4.js";
|
|
29
|
-
import { $ as normalizeHttpWebhookUrl, $t as resolveInputFileLimits, Cn as emitAgentEvent, Ct as deferGatewayRestartUntilIdle, D as getActiveEmbeddedRunCount, En as registerAgentRunContext, Et as markGatewaySigusr1RestartHandled, F as createSymiTools, Gt as registerUnhandledRejectionHandler, H as resolveOutboundSessionRoute, Jt as DEFAULT_INPUT_MAX_REDIRECTS, Kt as DEFAULT_INPUT_IMAGE_MAX_BYTES, M as resolveModelProfile, Ot as setGatewaySigusr1RestartPolicy, Qt as normalizeMimeList, R as readLatestAssistantReply, S as getTotalPendingReplies, Sn as clearAgentRunContext, St as consumeGatewaySigusr1RestartAuthorization, T as runAgentTurn, Tn as onAgentEvent, Tt as isGatewaySigusr1RestartExternallyAllowed, U as resolveOutboundTarget, W as resolveSessionDeliveryTarget, Xt as extractFileContentFromSource, Y as runWithModelFallback, Yt as DEFAULT_INPUT_TIMEOUT_MS, Zt as extractImageContentFromSource, _ as requestBodyErrorToText, _n as getTotalQueueSize, _t as isExternalHookSession, at as normalizeOptionalText, bn as waitForActiveTasks, ct as migrateLegacyCronPayload, dn as formatUserTime, dt as stripLegacyDeliveryFields, f as getPluginToolMeta, fn as resolveUserTimeFormat, g as readJsonBodyWithLimit, gn as getActiveTaskCount, gt as getHookType, h as handleSlackHttpRequest, ht as detectSuspiciousPatterns, i as listDescendantRunsForRequester, it as normalizeOptionalSessionKey, j as classifyOutboundMessage, kt as setPreRestartDeferralCheck, l as applyToolPolicyPipeline, ln as ToolInputError, lt as buildDeliveryFromLegacyPayload, m as loadSymiPlugins, mt as buildSafeExternalPrompt, n as countActiveRunsForSession, nt as inferLegacyName, ot as normalizePayloadToSystemText, pn as resolveUserTimezone, q as resetDirectoryCache, qt as DEFAULT_INPUT_IMAGE_MIMES, r as initSubagentRegistry, rt as normalizeOptionalAgentId, s as runSubagentAnnounceFlow, st as normalizeRequiredName, t as countActiveDescendantRuns, tn as resolveAgentTimeoutMs, u as buildDefaultToolPolicyPipelineSteps, ut as hasLegacyDeliveryHints, v as buildHistoryContextFromEntries, vn as resetAllLanes, wn as getAgentRunContext, wt as emitGatewayRestart, xn as CommandLane, yn as setCommandLaneConcurrency, z as resolveAnnounceTargetFromKey } from "./subagent-registry-
|
|
29
|
+
import { $ as normalizeHttpWebhookUrl, $t as resolveInputFileLimits, Cn as emitAgentEvent, Ct as deferGatewayRestartUntilIdle, D as getActiveEmbeddedRunCount, En as registerAgentRunContext, Et as markGatewaySigusr1RestartHandled, F as createSymiTools, Gt as registerUnhandledRejectionHandler, H as resolveOutboundSessionRoute, Jt as DEFAULT_INPUT_MAX_REDIRECTS, Kt as DEFAULT_INPUT_IMAGE_MAX_BYTES, M as resolveModelProfile, Ot as setGatewaySigusr1RestartPolicy, Qt as normalizeMimeList, R as readLatestAssistantReply, S as getTotalPendingReplies, Sn as clearAgentRunContext, St as consumeGatewaySigusr1RestartAuthorization, T as runAgentTurn, Tn as onAgentEvent, Tt as isGatewaySigusr1RestartExternallyAllowed, U as resolveOutboundTarget, W as resolveSessionDeliveryTarget, Xt as extractFileContentFromSource, Y as runWithModelFallback, Yt as DEFAULT_INPUT_TIMEOUT_MS, Zt as extractImageContentFromSource, _ as requestBodyErrorToText, _n as getTotalQueueSize, _t as isExternalHookSession, at as normalizeOptionalText, bn as waitForActiveTasks, ct as migrateLegacyCronPayload, dn as formatUserTime, dt as stripLegacyDeliveryFields, f as getPluginToolMeta, fn as resolveUserTimeFormat, g as readJsonBodyWithLimit, gn as getActiveTaskCount, gt as getHookType, h as handleSlackHttpRequest, ht as detectSuspiciousPatterns, i as listDescendantRunsForRequester, it as normalizeOptionalSessionKey, j as classifyOutboundMessage, kt as setPreRestartDeferralCheck, l as applyToolPolicyPipeline, ln as ToolInputError, lt as buildDeliveryFromLegacyPayload, m as loadSymiPlugins, mt as buildSafeExternalPrompt, n as countActiveRunsForSession, nt as inferLegacyName, ot as normalizePayloadToSystemText, pn as resolveUserTimezone, q as resetDirectoryCache, qt as DEFAULT_INPUT_IMAGE_MIMES, r as initSubagentRegistry, rt as normalizeOptionalAgentId, s as runSubagentAnnounceFlow, st as normalizeRequiredName, t as countActiveDescendantRuns, tn as resolveAgentTimeoutMs, u as buildDefaultToolPolicyPipelineSteps, ut as hasLegacyDeliveryHints, v as buildHistoryContextFromEntries, vn as resetAllLanes, wn as getAgentRunContext, wt as emitGatewayRestart, xn as CommandLane, yn as setCommandLaneConcurrency, z as resolveAnnounceTargetFromKey } from "./subagent-registry-D8BIWG9Q.js";
|
|
30
30
|
import { D as resolveSessionResetPolicy, F as resolveMainSessionKey, H as cleanStaleLockFiles, I as resolveMainSessionKeyFromConfig, K as mergeDeliveryContext, M as canonicalizeMainSessionAlias, N as resolveAgentMainSessionKey, T as evaluateSessionFreshness, W as deliveryContextFromSession, d as updateSessionStore, n as parseSessionThreadInfo, o as loadSessionStore } from "./sessions-Dn6VXn4p.js";
|
|
31
31
|
import { n as listChannelPlugins, r as normalizeChannelId, t as getChannelPlugin } from "./plugins-BsEhWvLn.js";
|
|
32
32
|
import "./send-Dq252-bi.js";
|
|
@@ -56,8 +56,8 @@ import "./model-auth-Byr7Gic_.js";
|
|
|
56
56
|
import "./github-copilot-token-B5y4__YM.js";
|
|
57
57
|
import "./models-config-CiR_RUxw.js";
|
|
58
58
|
import { a as resolveAgentIdentity } from "./reply-prefix-DV3KhOhL.js";
|
|
59
|
-
import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-
|
|
60
|
-
import { c as resolveMemorySearchConfig } from "./manager-
|
|
59
|
+
import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-CTf9MdBg.js";
|
|
60
|
+
import { c as resolveMemorySearchConfig } from "./manager-XfNxjaX5.js";
|
|
61
61
|
import "./sqlite-9jF_eajd.js";
|
|
62
62
|
import "./chunk-B2lBXhR0.js";
|
|
63
63
|
import "./markdown-tables-BEdkErjm.js";
|
|
@@ -90,7 +90,7 @@ import { t as formatDocsLink } from "./links-Dnmd-RS-.js";
|
|
|
90
90
|
import { n as runCommandWithRuntime } from "./cli-utils-DXfA5936.js";
|
|
91
91
|
import { t as formatHelpExamples } from "./help-format-Dbp8yEhl.js";
|
|
92
92
|
import { n as withProgress } from "./progress-CI19Xh3z.js";
|
|
93
|
-
import "./memory-cli-
|
|
93
|
+
import "./memory-cli-CA5PbH9y.js";
|
|
94
94
|
import "./logging-UO6tk8Em.js";
|
|
95
95
|
import "./replies-CLREUzzB.js";
|
|
96
96
|
import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, r as resolveEffectiveToolPolicy } from "./pi-tools.policy-06k__URR.js";
|
|
@@ -117,17 +117,17 @@ import { n as resolveWideAreaDiscoveryDomain, r as writeWideAreaGatewayZone } fr
|
|
|
117
117
|
import { i as toOptionString, n as extractGatewayMiskeys, r as maybeExplainGatewayServiceStop, t as describeUnknownError } from "./shared-Dl4ZrOve.js";
|
|
118
118
|
import { c as resolveNodeCommandAllowlist, l as probeGateway, n as DEFAULT_GATEWAY_HTTP_TOOL_DENY } from "./audit-DyncRBKq.js";
|
|
119
119
|
import { t as discoverGatewayBeacons } from "./bonjour-discovery-XbH0AYJ4.js";
|
|
120
|
-
import { i as pickGatewaySelfPresence } from "./status-
|
|
120
|
+
import { i as pickGatewaySelfPresence } from "./status-D_0593yR.js";
|
|
121
121
|
import { a as styleHealthChannelLine, n as getHealthSnapshot, t as formatHealthChannelLines } from "./health-Dkwuq8ta.js";
|
|
122
122
|
import { n as createDefaultDeps, t as createOutboundSendDeps } from "./outbound-send-deps-BCyarBRf.js";
|
|
123
123
|
import { a as resolveControlUiRootSync, i as resolveControlUiRootOverrideSync, t as ensureControlUiAssetsBuilt } from "./control-ui-assets-Dnz69KRU.js";
|
|
124
124
|
import { t as ensureSymiCliOnPath } from "./path-env-SUrcTSJ-.js";
|
|
125
125
|
import { a as resolveNpmChannelTag, c as DEFAULT_PACKAGE_CHANNEL, m as normalizeUpdateChannel, n as compareSemverStrings, t as checkUpdateStatus } from "./update-check-DLOnLuop.js";
|
|
126
|
-
import { t as runOnboardingWizard } from "./onboarding-
|
|
127
|
-
import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-
|
|
128
|
-
import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-
|
|
126
|
+
import { t as runOnboardingWizard } from "./onboarding-MPSU9pXd.js";
|
|
127
|
+
import { C as startGatewayConfigReloader, S as resolveCronRunLogPath, _ as MAX_PAYLOAD_BYTES, a as loadFavoritesSet, b as abortChatRunById, c as resolveAssistantIdentity, d as formatError, f as loadVoiceWakeConfig, g as MAX_BUFFERED_BYTES, h as HEALTH_REFRESH_INTERVAL_MS, i as safeParseJson, l as listSystemPresence, m as DEDUPE_TTL_MS, n as handleGatewayRequest, o as reconcileFavorites, p as DEDUPE_MAX, r as broadcastPresenceSnapshot, s as DEFAULT_ASSISTANT_IDENTITY, t as coreGatewayHandlers, u as upsertPresence, v as TICK_INTERVAL_MS, x as appendCronRunLog, y as getHandshakeTimeoutMs } from "./server-methods-Bdz-OwQ4.js";
|
|
128
|
+
import { d as shouldLogWs, f as summarizeAgentEventForWsLog, l as formatForLog, p as setGatewayWsLogStyle, u as logWs } from "./push-apns-D4iLNyBo.js";
|
|
129
129
|
import { T as resolveGmailHookRuntimeConfig, _ as buildGogWatchServeArgs, i as ensureTailscaleEndpoint, v as buildGogWatchStartArgs } from "./gmail-setup-utils-BYBwPfuu.js";
|
|
130
|
-
import { a as getCliSessionId, o as setCliSessionId, s as runCliAgent, t as agentCommand } from "./agent-
|
|
130
|
+
import { a as getCliSessionId, o as setCliSessionId, s as runCliAgent, t as agentCommand } from "./agent-TRt_SsAW.js";
|
|
131
131
|
import { s as loadAgentIdentityFromWorkspace } from "./agents.config-CqfMQEiy.js";
|
|
132
132
|
import "./dm-policy-shared-BtrdvOIT.js";
|
|
133
133
|
import "./node-service-CZlyWmxa.js";
|
|
@@ -12046,7 +12046,7 @@ async function startGatewayServer(port = 18789, opts = {}) {
|
|
|
12046
12046
|
});
|
|
12047
12047
|
let glassUiBridgeCleanup = null;
|
|
12048
12048
|
if (!minimalTestGateway) {
|
|
12049
|
-
const { createGlassUiBridge } = await import("./glass-ui-ws-
|
|
12049
|
+
const { createGlassUiBridge } = await import("./glass-ui-ws-BK5qk7-_.js");
|
|
12050
12050
|
glassUiBridgeCleanup = createGlassUiBridge({
|
|
12051
12051
|
wss: glassUiWss,
|
|
12052
12052
|
context: gatewayRequestContext,
|