@agent-deck/backend 1.10.5 → 1.11.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.
Files changed (40) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/data/oauth-provider-guides.js +1 -1
  3. package/dist/data/oauth-provider-guides.js.map +1 -1
  4. package/dist/mcp-server.d.ts.map +1 -1
  5. package/dist/mcp-server.js +27 -2
  6. package/dist/mcp-server.js.map +1 -1
  7. package/dist/mcp-session-binding.d.ts +18 -0
  8. package/dist/mcp-session-binding.d.ts.map +1 -1
  9. package/dist/mcp-session-binding.js +25 -0
  10. package/dist/mcp-session-binding.js.map +1 -1
  11. package/dist/mcp-tools/elicitation.d.ts +129 -0
  12. package/dist/mcp-tools/elicitation.d.ts.map +1 -0
  13. package/dist/mcp-tools/elicitation.js +231 -0
  14. package/dist/mcp-tools/elicitation.js.map +1 -0
  15. package/dist/mcp-tools/policy.d.ts.map +1 -1
  16. package/dist/mcp-tools/policy.js +2 -0
  17. package/dist/mcp-tools/policy.js.map +1 -1
  18. package/dist/mcp-tools/register.d.ts +14 -0
  19. package/dist/mcp-tools/register.d.ts.map +1 -1
  20. package/dist/mcp-tools/register.js +109 -129
  21. package/dist/mcp-tools/register.js.map +1 -1
  22. package/dist/playbooks/stub-sync.d.ts +55 -12
  23. package/dist/playbooks/stub-sync.d.ts.map +1 -1
  24. package/dist/playbooks/stub-sync.js +136 -197
  25. package/dist/playbooks/stub-sync.js.map +1 -1
  26. package/dist/routes/trusted-session.d.ts.map +1 -1
  27. package/dist/routes/trusted-session.js +241 -6
  28. package/dist/routes/trusted-session.js.map +1 -1
  29. package/dist/trusted-session/route-policy-registry.d.ts.map +1 -1
  30. package/dist/trusted-session/route-policy-registry.js +22 -0
  31. package/dist/trusted-session/route-policy-registry.js.map +1 -1
  32. package/dist/trusted-session/store.d.ts +174 -2
  33. package/dist/trusted-session/store.d.ts.map +1 -1
  34. package/dist/trusted-session/store.js +459 -2
  35. package/dist/trusted-session/store.js.map +1 -1
  36. package/package.json +2 -2
  37. package/static-ui/assets/{index-DKn5XqhM.js → index-B86VjIYT.js} +4 -4
  38. package/static-ui/assets/index-DlL_F4GS.css +1 -0
  39. package/static-ui/index.html +2 -2
  40. package/static-ui/assets/index-CbccleVj.css +0 -1
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ /**
3
+ * NOT-213: host-native MCP form elicitation for deck-switch approval.
4
+ *
5
+ * Presentation order (deck-switching redesign spec 2.3): host-native MCP
6
+ * form first, bootstrapped browser approval second, menubar pending-request
7
+ * recovery third. This adapter is the first surface: after `switch_deck`
8
+ * creates a pending request, it presents one choice — This session only,
9
+ * This workspace by default, or Decline — through the host's structured
10
+ * input UI when the connected client advertises form elicitation.
11
+ *
12
+ * Design notes:
13
+ * - The adapter is transport-agnostic and SDK-free: capability detection
14
+ * takes the client's reported capabilities object, and elicitation /
15
+ * approval submission are injected. The production provider lives in
16
+ * mcp-server.ts (per-session McpServer) and register.ts.
17
+ * - Decision and commit authority stay server-side. The form carries only
18
+ * the opaque request id (echoed back) and the chosen scope; the adapter
19
+ * pins both to the request it just created before submitting, and the
20
+ * approval API re-validates ownership, scope, and pending status. A
21
+ * forged scope or request id is rejected there (400/404/403).
22
+ * - Cancellation (dismissed form) never touches the approval API: the
23
+ * request stays pending for browser/menubar recovery and the response
24
+ * explains how to reopen it.
25
+ * - Unsupported capability, timeout, transport error, malformed response,
26
+ * or an unavailable commit path all degrade to the browser-fallback
27
+ * presentation hint with the deck unchanged.
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.DeckSwitchApprovalCommitUnavailable = exports.DECK_SWITCH_SCOPE_LABELS = exports.DECK_SWITCH_ELICITATION_TIMEOUT_MS = void 0;
31
+ exports.isDeckSwitchApprovalScope = isDeckSwitchApprovalScope;
32
+ exports.supportsFormElicitation = supportsFormElicitation;
33
+ exports.buildDeckSwitchElicitationInput = buildDeckSwitchElicitationInput;
34
+ exports.buildCancelRecoveryPayload = buildCancelRecoveryPayload;
35
+ exports.presentDeckSwitchApproval = presentDeckSwitchApproval;
36
+ exports.submitDeckSwitchApprovalViaBackend = submitDeckSwitchApprovalViaBackend;
37
+ const admin_secret_1 = require("../trusted-session/admin-secret");
38
+ /** How long the tool call waits for the human to answer the native form. */
39
+ exports.DECK_SWITCH_ELICITATION_TIMEOUT_MS = 60_000;
40
+ const APPROVAL_SCOPES = new Set([
41
+ 'session',
42
+ 'workspace-default',
43
+ 'decline',
44
+ ]);
45
+ function isDeckSwitchApprovalScope(value) {
46
+ return typeof value === 'string' && APPROVAL_SCOPES.has(value);
47
+ }
48
+ /** Human labels shown in the native form (enumNames). */
49
+ exports.DECK_SWITCH_SCOPE_LABELS = {
50
+ session: 'This session only',
51
+ 'workspace-default': 'This workspace by default',
52
+ decline: 'Decline',
53
+ };
54
+ /**
55
+ * Capability gate: true only when the connected client advertises
56
+ * `elicitation.form` (SDK ClientCapabilities shape). Anything else —
57
+ * missing, malformed, or url-only — means the browser fallback owns
58
+ * the approval.
59
+ */
60
+ function supportsFormElicitation(capabilities) {
61
+ if (!capabilities || typeof capabilities !== 'object') {
62
+ return false;
63
+ }
64
+ const elicitation = capabilities.elicitation;
65
+ if (!elicitation || typeof elicitation !== 'object') {
66
+ return false;
67
+ }
68
+ const form = elicitation.form;
69
+ return !!form && typeof form === 'object';
70
+ }
71
+ /**
72
+ * Build the `elicitation/create` form params for one pending request.
73
+ * The message reuses the creation response's display-safe labels; the
74
+ * schema carries only the opaque request id (as the default) and the
75
+ * scope enum with all three human labels. No URLs, no secrets.
76
+ */
77
+ function buildDeckSwitchElicitationInput(creation) {
78
+ const requestId = String(creation.requestId ?? '');
79
+ const current = typeof creation.currentDeckName === 'string' ? creation.currentDeckName : 'current deck';
80
+ const requested = typeof creation.requestedDeckName === 'string' ? creation.requestedDeckName : 'requested deck';
81
+ const body = typeof creation.presentation?.body === 'string' ? creation.presentation.body : null;
82
+ const message = body ?? `Agent requested a deck switch from "${current}" to "${requested}". The active deck is unchanged until a human approves.`;
83
+ return {
84
+ message,
85
+ requestedSchema: {
86
+ type: 'object',
87
+ properties: {
88
+ requestId: {
89
+ type: 'string',
90
+ title: 'Request ID',
91
+ description: 'Pending deck-switch request this decision applies to.',
92
+ default: requestId,
93
+ },
94
+ scope: {
95
+ type: 'string',
96
+ title: 'Approval scope',
97
+ description: `Approve the switch to "${requested}" for this session only or as the workspace default, or decline it.`,
98
+ enum: ['session', 'workspace-default', 'decline'],
99
+ enumNames: [
100
+ exports.DECK_SWITCH_SCOPE_LABELS.session,
101
+ exports.DECK_SWITCH_SCOPE_LABELS['workspace-default'],
102
+ exports.DECK_SWITCH_SCOPE_LABELS.decline,
103
+ ],
104
+ },
105
+ },
106
+ required: ['requestId', 'scope'],
107
+ },
108
+ };
109
+ }
110
+ /**
111
+ * Cancel payload: the request is still pending, the deck is unchanged,
112
+ * and the agent gets a secret-free, URL-free note explaining where the
113
+ * human can reopen the decision (browser approval page, menubar inbox).
114
+ */
115
+ function buildCancelRecoveryPayload(creation) {
116
+ const requestId = String(creation.requestId ?? '');
117
+ const current = typeof creation.currentDeckName === 'string' ? creation.currentDeckName : 'current deck';
118
+ const requested = typeof creation.requestedDeckName === 'string' ? creation.requestedDeckName : 'requested deck';
119
+ return {
120
+ requestId,
121
+ status: 'pending',
122
+ currentDeckName: creation.currentDeckName,
123
+ requestedDeckName: creation.requestedDeckName,
124
+ expiresAt: creation.expiresAt,
125
+ channel: 'browser',
126
+ message: `Approval dismissed with no decision. Request ${requestId} is still pending and the active deck ` +
127
+ `("${current}") is unchanged. Approve the switch to "${requested}" ("This session only" or ` +
128
+ `"This workspace by default") or decline it from the browser approval page or the menubar ` +
129
+ `pending-requests inbox.`,
130
+ };
131
+ }
132
+ /**
133
+ * Present one pending deck-switch request through the host-native form.
134
+ * Never throws for elicitation-level failures: those degrade to the
135
+ * browser-fallback payload. Approval API rejections propagate so the
136
+ * caller surfaces them without retrying.
137
+ */
138
+ async function presentDeckSwitchApproval(deps) {
139
+ const { creation, runtimeSessionId } = deps;
140
+ let supported = false;
141
+ try {
142
+ supported = deps.supportsFormElicitation();
143
+ }
144
+ catch {
145
+ supported = false;
146
+ }
147
+ if (!supported) {
148
+ return { handled: 'fallback', payload: creation };
149
+ }
150
+ let result;
151
+ try {
152
+ result = await deps.elicitForm(buildDeckSwitchElicitationInput(creation));
153
+ }
154
+ catch {
155
+ // Timeout, transport error, or schema mismatch (SDK validates the
156
+ // accepted content against requestedSchema and throws McpError).
157
+ return { handled: 'fallback', payload: creation };
158
+ }
159
+ if (!result || typeof result !== 'object' || typeof result.action !== 'string') {
160
+ return { handled: 'fallback', payload: creation };
161
+ }
162
+ const requestId = String(creation.requestId ?? '');
163
+ if (result.action === 'cancel') {
164
+ return { handled: 'pending-recovery', payload: buildCancelRecoveryPayload(creation) };
165
+ }
166
+ const submit = async (decision) => {
167
+ try {
168
+ const payload = await deps.submitApproval({ requestId, runtimeSessionId, decision });
169
+ return { handled: 'resolved', payload };
170
+ }
171
+ catch (error) {
172
+ // The server cannot submit (no commit credential): the request is
173
+ // still pending, so the browser fallback is the honest answer.
174
+ if (error instanceof DeckSwitchApprovalCommitUnavailable) {
175
+ return { handled: 'fallback', payload: creation };
176
+ }
177
+ throw error;
178
+ }
179
+ };
180
+ if (result.action === 'decline') {
181
+ // Host-level decline without a submitted scope: the human declined
182
+ // the switch itself.
183
+ return submit('decline');
184
+ }
185
+ if (result.action !== 'accept') {
186
+ return { handled: 'fallback', payload: creation };
187
+ }
188
+ const content = result.content;
189
+ if (!content || typeof content !== 'object') {
190
+ return { handled: 'fallback', payload: creation };
191
+ }
192
+ // Pin the echoed request id to the request just created: a forged or
193
+ // mismatched id must never commit, here or elsewhere.
194
+ if (typeof content.requestId !== 'string' || content.requestId !== requestId) {
195
+ return { handled: 'fallback', payload: creation };
196
+ }
197
+ if (!isDeckSwitchApprovalScope(content.scope)) {
198
+ return { handled: 'fallback', payload: creation };
199
+ }
200
+ return submit(content.scope);
201
+ }
202
+ /** The server holds no credential that the approval API accepts. */
203
+ class DeckSwitchApprovalCommitUnavailable extends Error {
204
+ constructor(message = 'Deck-switch approval commit unavailable: no server credential for the approval API') {
205
+ super(message);
206
+ this.name = 'DeckSwitchApprovalCommitUnavailable';
207
+ }
208
+ }
209
+ exports.DeckSwitchApprovalCommitUnavailable = DeckSwitchApprovalCommitUnavailable;
210
+ /**
211
+ * Submit one elicited decision to the NOT-207 resolve endpoint. The MCP
212
+ * server authenticates as a dashboard principal with the host's admin
213
+ * secret (same credential the backend itself accepts for dashboard
214
+ * callers); the endpoint still enforces request ownership, scope, and
215
+ * pending status, so forged ids/scopes are rejected there.
216
+ */
217
+ async function submitDeckSwitchApprovalViaBackend(deps) {
218
+ const secret = await (deps.readSecret ?? admin_secret_1.readAdminSecretFromEnvOrFile)();
219
+ if (!secret) {
220
+ throw new DeckSwitchApprovalCommitUnavailable();
221
+ }
222
+ return deps.callBackendAPI(`/api/trusted-session/deck-switch/${encodeURIComponent(deps.requestId)}/resolve`, {
223
+ method: 'POST',
224
+ headers: {
225
+ 'Content-Type': 'application/json',
226
+ Authorization: `Bearer ${secret}`,
227
+ },
228
+ body: JSON.stringify({ runtimeSessionId: deps.runtimeSessionId, decision: deps.decision }),
229
+ });
230
+ }
231
+ //# sourceMappingURL=elicitation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elicitation.js","sourceRoot":"","sources":["../../src/mcp-tools/elicitation.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;;;AAgBH,8DAEC;AAuDD,0DAUC;AAQD,0EAmCC;AAOD,gEAiBC;AAQD,8DAwEC;AAiBD,gFAsBC;AA3QD,kEAA+E;AAE/E,4EAA4E;AAC/D,QAAA,kCAAkC,GAAG,MAAM,CAAC;AAKzD,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IACnD,SAAS;IACT,mBAAmB;IACnB,SAAS;CACV,CAAC,CAAC;AAEH,SAAgB,yBAAyB,CAAC,KAAc;IACtD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,yDAAyD;AAC5C,QAAA,wBAAwB,GAA4C;IAC/E,OAAO,EAAE,mBAAmB;IAC5B,mBAAmB,EAAE,2BAA2B;IAChD,OAAO,EAAE,SAAS;CACnB,CAAC;AA0CF;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAC,YAAqB;IAC3D,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,WAAW,GAAI,YAA0C,CAAC,WAAW,CAAC;IAC5E,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,IAAI,GAAI,WAAkC,CAAC,IAAI,CAAC;IACtD,OAAO,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,+BAA+B,CAAC,QAAkC;IAIhF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;IACzG,MAAM,SAAS,GAAG,OAAO,QAAQ,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACjH,MAAM,IAAI,GAAG,OAAO,QAAQ,CAAC,YAAY,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,MAAM,OAAO,GAAG,IAAI,IAAI,uCAAuC,OAAO,SAAS,SAAS,yDAAyD,CAAC;IAClJ,OAAO;QACL,OAAO;QACP,eAAe,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,YAAY;oBACnB,WAAW,EAAE,uDAAuD;oBACpE,OAAO,EAAE,SAAS;iBACnB;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,gBAAgB;oBACvB,WAAW,EAAE,0BAA0B,SAAS,qEAAqE;oBACrH,IAAI,EAAE,CAAC,SAAS,EAAE,mBAAmB,EAAE,SAAS,CAAC;oBACjD,SAAS,EAAE;wBACT,gCAAwB,CAAC,OAAO;wBAChC,gCAAwB,CAAC,mBAAmB,CAAC;wBAC7C,gCAAwB,CAAC,OAAO;qBACjC;iBACF;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC;SACjC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,0BAA0B,CAAC,QAAkC;IAC3E,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;IACzG,MAAM,SAAS,GAAG,OAAO,QAAQ,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACjH,OAAO;QACL,SAAS;QACT,MAAM,EAAE,SAAS;QACjB,eAAe,EAAE,QAAQ,CAAC,eAAe;QACzC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;QAC7C,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,OAAO,EAAE,SAAS;QAClB,OAAO,EACL,gDAAgD,SAAS,wCAAwC;YACjG,KAAK,OAAO,2CAA2C,SAAS,4BAA4B;YAC5F,2FAA2F;YAC3F,yBAAyB;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,yBAAyB,CAAC,IAM/C;IACC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IAE5C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,CAAC;QACH,SAAS,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,MAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,kEAAkE;QAClE,iEAAiE;QACjE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,EAAE,QAAiC,EAAsC,EAAE;QAC7F,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kEAAkE;YAClE,+DAA+D;YAC/D,IAAI,KAAK,YAAY,mCAAmC,EAAE,CAAC;gBACzD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YACpD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,mEAAmE;QACnE,qBAAqB;QACrB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpD,CAAC;IACD,qEAAqE;IACrE,sDAAsD;IACtD,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpD,CAAC;IACD,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,oEAAoE;AACpE,MAAa,mCAAoC,SAAQ,KAAK;IAC5D,YAAY,OAAO,GAAG,oFAAoF;QACxG,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qCAAqC,CAAC;IACpD,CAAC;CACF;AALD,kFAKC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,kCAAkC,CAAC,IAMxD;IACC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,2CAA4B,CAAC,EAAE,CAAC;IACzE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,mCAAmC,EAAE,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC,cAAc,CACxB,oCAAoC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAChF;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,EAAE;SAClC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;KAC3F,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO;;;;;;EAWhD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,uBAAuB;;;;;;EAM3D;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;EAU1G;AAmBD,+FAA+F;AAC/F,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC,CAa1G;AAED,wBAAgB,mBAAmB,IAAI,UAAU,CAAC,OAAO,cAAc,CAAC,GAAG,IAAI,CAK9E"}
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO;;;;;;EAWhD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,uBAAuB;;;;;;EAM3D;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;EAU1G;AAqBD,+FAA+F;AAC/F,wBAAsB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC,CAa1G;AAED,wBAAgB,mBAAmB,IAAI,UAAU,CAAC,OAAO,cAAc,CAAC,GAAG,IAAI,CAK9E"}
@@ -51,6 +51,8 @@ function bodyMessage(code) {
51
51
  return 'Resource is outside the bound deck';
52
52
  case 'DECK_FIXED':
53
53
  return "This connection's deck was set when it was launched and cannot be changed by the agent. Change it where the connection is configured (for example the Agent Dealer profile).";
54
+ case 'SWITCH_APPROVAL_REQUIRED':
55
+ return 'This session already has a deck. Agents cannot switch decks directly — call switch_deck to request a switch and wait for the human to approve it as This session only or This workspace by default. The active deck is unchanged and no reload is needed.';
54
56
  default:
55
57
  return code;
56
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/mcp-tools/policy.ts"],"names":[],"mappings":";;AAQA,gDAWC;AAED,wCAMC;AAED,4CAUC;AAoBD,0CAaC;AAED,kDAKC;AA/ED,+CAAuF;AAEvF,gEAA2D;AAG3D,4FAA4F;AAC5F,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAEjE,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,IAAI,KAAK,YAAY,mCAAe,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACxD,IAAI,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,OAAO,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QACpF,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,IAA6B;IAC1D,MAAM,IAAI,GAAG,IAAA,4BAAmB,EAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAChE,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,UAAkB,EAAE,OAAe,EAAE,WAAqC;IACzG,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;aACtE;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,IAA6B;IAChD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gBAAgB;YACnB,OAAO,kCAAkC,CAAC;QAC5C,KAAK,oBAAoB;YACvB,OAAO,0CAA0C,CAAC;QACpD,KAAK,gBAAgB;YACnB,OAAO,sCAAsC,CAAC;QAChD,KAAK,uBAAuB;YAC1B,OAAO,oCAAoC,CAAC;QAC9C,KAAK,YAAY;YACf,OAAO,8KAA8K,CAAC;QACxL;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,+FAA+F;AACxF,KAAK,UAAU,eAAe,CAAC,IAAiB;IACrD,IAAI,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACpD,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,OAAO,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB;IACjC,IAAI,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,cAAc,CAAC,oBAAoB,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/mcp-tools/policy.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import type { ElicitationResult } from './elicitation';
2
3
  import type { StubBindSyncResult } from '../playbooks/stub-sync';
3
4
  import { McpToolProfile } from './profile';
4
5
  type RegisterToolFn = (name: string, config: {
@@ -52,6 +53,19 @@ export type McpToolHost = {
52
53
  };
53
54
  badgeBySession: Map<string, string>;
54
55
  backendUrl: string;
56
+ /**
57
+ * NOT-213: host-native approval form. Absent when the MCP server has no
58
+ * elicitation provider wired for this session — the tool then keeps the
59
+ * established browser fallback. Present but reporting unsupported also
60
+ * falls back.
61
+ */
62
+ elicitation?: {
63
+ supportsFormElicitation(): boolean;
64
+ elicitForm(input: {
65
+ message: string;
66
+ requestedSchema: Record<string, unknown>;
67
+ }): Promise<ElicitationResult>;
68
+ };
55
69
  toolResult(data: unknown): {
56
70
  content: Array<{
57
71
  type: 'text';
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/register.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/mcp-tools/register.ts"],"names":[],"mappings":"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"}