swipium 2.0.0 → 2.2.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 (152) hide show
  1. package/CHANGELOG.md +76 -0
  2. package/README.md +32 -20
  3. package/THREAT_MODEL.md +109 -21
  4. package/dist/automationGen/run.js.map +1 -1
  5. package/dist/cli/init.js +101 -11
  6. package/dist/cli/init.js.map +1 -1
  7. package/dist/cli/verify.js +2 -2
  8. package/dist/cli/verify.js.map +1 -1
  9. package/dist/consent/consent.js +365 -17
  10. package/dist/consent/consent.js.map +1 -1
  11. package/dist/context/projectRoot.js +9 -4
  12. package/dist/context/projectRoot.js.map +1 -1
  13. package/dist/context/protocolEra.js +15 -0
  14. package/dist/context/protocolEra.js.map +1 -0
  15. package/dist/drivers/DirectDriver.js +5 -2
  16. package/dist/drivers/DirectDriver.js.map +1 -1
  17. package/dist/featureTesting/executionBootstrap.js +85 -77
  18. package/dist/featureTesting/executionBootstrap.js.map +1 -1
  19. package/dist/flows/run.js +9 -5
  20. package/dist/flows/run.js.map +1 -1
  21. package/dist/lib/abortScope.js +36 -3
  22. package/dist/lib/abortScope.js.map +1 -1
  23. package/dist/lib/android.js +15 -6
  24. package/dist/lib/android.js.map +1 -1
  25. package/dist/lib/codexEnv.js +112 -0
  26. package/dist/lib/codexEnv.js.map +1 -0
  27. package/dist/lib/logger.js +18 -0
  28. package/dist/lib/logger.js.map +1 -1
  29. package/dist/lib/result.js +188 -10
  30. package/dist/lib/result.js.map +1 -1
  31. package/dist/lib/schemaHash.js +20 -31
  32. package/dist/lib/schemaHash.js.map +1 -1
  33. package/dist/lib/simctl.js +102 -3
  34. package/dist/lib/simctl.js.map +1 -1
  35. package/dist/lib/toolSchema.js +143 -0
  36. package/dist/lib/toolSchema.js.map +1 -0
  37. package/dist/lib/wda.js +5 -2
  38. package/dist/lib/wda.js.map +1 -1
  39. package/dist/mobileAudit/runner.js +12 -4
  40. package/dist/mobileAudit/runner.js.map +1 -1
  41. package/dist/oracle/failures.js +2 -2
  42. package/dist/oracle/failures.js.map +1 -1
  43. package/dist/orchestration/testThis/execute.js +21 -4
  44. package/dist/orchestration/testThis/execute.js.map +1 -1
  45. package/dist/orchestration/testThis/pipeline.js +2 -0
  46. package/dist/orchestration/testThis/pipeline.js.map +1 -1
  47. package/dist/orchestration/testThis/plan.js.map +1 -1
  48. package/dist/report/export.js +1 -1
  49. package/dist/report/export.js.map +1 -1
  50. package/dist/server.js +564 -139
  51. package/dist/server.js.map +1 -1
  52. package/dist/services/prepareAndroid.js +3 -2
  53. package/dist/services/prepareAndroid.js.map +1 -1
  54. package/dist/services/prepareIos.js +31 -4
  55. package/dist/services/prepareIos.js.map +1 -1
  56. package/dist/services/smoke.js +38 -4
  57. package/dist/services/smoke.js.map +1 -1
  58. package/dist/session/processRegistry.js +12 -1
  59. package/dist/session/processRegistry.js.map +1 -1
  60. package/dist/snapshot/parse.js +64 -9
  61. package/dist/snapshot/parse.js.map +1 -1
  62. package/dist/snapshot/present.js +14 -4
  63. package/dist/snapshot/present.js.map +1 -1
  64. package/dist/snapshot/settle.js +14 -3
  65. package/dist/snapshot/settle.js.map +1 -1
  66. package/dist/tools/act.js +694 -670
  67. package/dist/tools/act.js.map +1 -1
  68. package/dist/tools/agent.js +15 -16
  69. package/dist/tools/agent.js.map +1 -1
  70. package/dist/tools/appControl.js +4 -4
  71. package/dist/tools/appControl.js.map +1 -1
  72. package/dist/tools/appMap.js +11 -13
  73. package/dist/tools/appMap.js.map +1 -1
  74. package/dist/tools/build.js +4 -6
  75. package/dist/tools/build.js.map +1 -1
  76. package/dist/tools/bundletool.js +3 -3
  77. package/dist/tools/bundletool.js.map +1 -1
  78. package/dist/tools/clearOverlay.js +2 -3
  79. package/dist/tools/clearOverlay.js.map +1 -1
  80. package/dist/tools/device.js +4 -3
  81. package/dist/tools/device.js.map +1 -1
  82. package/dist/tools/doctor.js +23 -11
  83. package/dist/tools/doctor.js.map +1 -1
  84. package/dist/tools/explore.js +15 -21
  85. package/dist/tools/explore.js.map +1 -1
  86. package/dist/tools/featureTesting.js +22 -6
  87. package/dist/tools/featureTesting.js.map +1 -1
  88. package/dist/tools/firstRun.js +4 -5
  89. package/dist/tools/firstRun.js.map +1 -1
  90. package/dist/tools/flow.js +13 -17
  91. package/dist/tools/flow.js.map +1 -1
  92. package/dist/tools/flowRepair.js +3 -5
  93. package/dist/tools/flowRepair.js.map +1 -1
  94. package/dist/tools/generate.js +10 -11
  95. package/dist/tools/generate.js.map +1 -1
  96. package/dist/tools/getArtifact.js +114 -10
  97. package/dist/tools/getArtifact.js.map +1 -1
  98. package/dist/tools/health.js +2 -1
  99. package/dist/tools/health.js.map +1 -1
  100. package/dist/tools/ios.js +35 -13
  101. package/dist/tools/ios.js.map +1 -1
  102. package/dist/tools/issues.js +8 -8
  103. package/dist/tools/issues.js.map +1 -1
  104. package/dist/tools/jobs.js +26 -10
  105. package/dist/tools/jobs.js.map +1 -1
  106. package/dist/tools/metro.js +4 -5
  107. package/dist/tools/metro.js.map +1 -1
  108. package/dist/tools/mobileAudit.js +11 -10
  109. package/dist/tools/mobileAudit.js.map +1 -1
  110. package/dist/tools/note.js +2 -3
  111. package/dist/tools/note.js.map +1 -1
  112. package/dist/tools/prepareIosTarget.js +102 -31
  113. package/dist/tools/prepareIosTarget.js.map +1 -1
  114. package/dist/tools/prepareTarget.js +3 -5
  115. package/dist/tools/prepareTarget.js.map +1 -1
  116. package/dist/tools/report.js +4 -5
  117. package/dist/tools/report.js.map +1 -1
  118. package/dist/tools/resolveArtifact.js +2 -3
  119. package/dist/tools/resolveArtifact.js.map +1 -1
  120. package/dist/tools/resolveTarget.js +3 -6
  121. package/dist/tools/resolveTarget.js.map +1 -1
  122. package/dist/tools/screenRecord.js +2 -3
  123. package/dist/tools/screenRecord.js.map +1 -1
  124. package/dist/tools/screenshot.js +2 -2
  125. package/dist/tools/screenshot.js.map +1 -1
  126. package/dist/tools/smoke.js +4 -2
  127. package/dist/tools/smoke.js.map +1 -1
  128. package/dist/tools/snapshot.js +6 -7
  129. package/dist/tools/snapshot.js.map +1 -1
  130. package/dist/tools/startSession.js +12 -16
  131. package/dist/tools/startSession.js.map +1 -1
  132. package/dist/tools/suite.js +2 -4
  133. package/dist/tools/suite.js.map +1 -1
  134. package/dist/tools/testSuite.js +13 -19
  135. package/dist/tools/testSuite.js.map +1 -1
  136. package/dist/tools/testThis.js +28 -13
  137. package/dist/tools/testThis.js.map +1 -1
  138. package/dist/tools/visual.js +7 -9
  139. package/dist/tools/visual.js.map +1 -1
  140. package/dist/tools/wait.js +130 -21
  141. package/dist/tools/wait.js.map +1 -1
  142. package/dist/tools/wda.js +199 -60
  143. package/dist/tools/wda.js.map +1 -1
  144. package/dist/version.js +1 -1
  145. package/docs/README.md +4 -4
  146. package/docs/ci-reports.md +39 -7
  147. package/docs/concepts.md +37 -25
  148. package/docs/flows.md +1 -1
  149. package/docs/mcp-server.md +281 -76
  150. package/docs/physical-devices.md +4 -4
  151. package/docs/tools.md +59 -30
  152. package/package.json +4 -3
@@ -9,8 +9,31 @@
9
9
  // declined, dismissed (`cancel`), timed-out or failed prompt is a REFUSAL. It never falls back
10
10
  // to the model-mediated re-call. Which path decided an action is tagged as its
11
11
  // ApprovalMechanism and lands in the mutation ledger.
12
- import { randomUUID } from 'node:crypto';
12
+ //
13
+ // Protocol 2026-07-28 has no server-to-client requests: the same prompt rides inside an
14
+ // InputRequiredResult and the answer arrives on the client's retry of the tool call, correlated by
15
+ // a single-use server-side handle (issueConsentPrompt / redeemConsentPrompt below). The decision
16
+ // phases and outcomes are shared with the 2025 path; the ledger tags both 'elicitation'.
17
+ //
18
+ // Operator pre-approval (SWIPIUM_CONSENT_PREAPPROVE): headless clients (codex exec, claude -p)
19
+ // advertise elicitation but answer every prompt automatically (decline / cancel), so no gated
20
+ // action can ever run there. The OPERATOR can pre-approve exact action names in the server
21
+ // process environment (whatever the MCP client passes, e.g. its config `env`). It is read ONLY
22
+ // from process.env, never from the repo (.swipium/config.json etc.), so neither the model nor a
23
+ // checked-out project can grant it. No wildcards: each action must be named. Code-level tiers
24
+ // (CONSENT_ACTION_TIERS) narrow what a name can grant:
25
+ // - runsCode actions execute repo- or model-chosen code/commands; they are pre-approvable only
26
+ // when SWIPIUM_CONSENT_PREAPPROVE_RUN_CODE=1 is ALSO set (under codex exec that lets the model
27
+ // run code outside the client's sandbox);
28
+ // - never-pre-approvable actions (wda_non_loopback, which has its own exact-URL opt-in) are
29
+ // ignored;
30
+ // - test_this_plan covers its bundled sub-steps only when every runsCode sub-step (e.g. a
31
+ // build_from_source step) is itself pre-approvable.
32
+ // A pre-approved challenge is still session-bound and single-use; it is ledgered as
33
+ // 'operator-policy' and logged at warn with the exact command.
34
+ import { createHash, randomBytes, randomUUID } from 'node:crypto';
13
35
  import { AsyncLocalStorage } from 'node:async_hooks';
36
+ import { log } from '../lib/logger.js';
14
37
  // The calling tool invocation's sessionId, set once per call by the server's tool wrapper
15
38
  // (src/server.ts) so every consent-gated tool is session-bound with zero per-tool changes.
16
39
  const consentScope = new AsyncLocalStorage();
@@ -43,8 +66,238 @@ function prunePending(now = Date.now()) {
43
66
  function forget(consentId) {
44
67
  pending.delete(consentId);
45
68
  elicitationApproved.delete(consentId);
69
+ operatorApproved.delete(consentId);
46
70
  awaitingElicitation.delete(consentId);
71
+ const token = promptTokenByConsent.get(consentId);
72
+ if (token !== undefined)
73
+ promptHandles.delete(token);
74
+ promptTokenByConsent.delete(consentId);
75
+ }
76
+ /** Every ConsentRequest.action a tool can mint (test/consentPreapprove.test.ts keeps this in sync
77
+ * with the requireConsent call sites). SWIPIUM_CONSENT_PREAPPROVE accepts only these names. */
78
+ export const CONSENT_ACTIONS = [
79
+ 'app_clear_data',
80
+ 'app_fresh_start',
81
+ 'automation_project_write',
82
+ 'build_from_source',
83
+ 'destructive_ui_candidate',
84
+ 'erase_device',
85
+ 'flow_mutation_run',
86
+ 'geo_set',
87
+ 'install_app',
88
+ 'network_change',
89
+ 'ocr_run',
90
+ 'permission_grant',
91
+ 'permission_revoke',
92
+ 'prepare_plan',
93
+ 'privacy_reset',
94
+ 'screen_record',
95
+ 'seed_state',
96
+ 'start_metro',
97
+ 'suite_fresh_state_replay',
98
+ 'test_this_plan',
99
+ 'wda_build',
100
+ 'wda_non_loopback',
101
+ 'wda_start',
102
+ ];
103
+ const CONSENT_ACTION_SET = new Set(CONSENT_ACTIONS);
104
+ /** Code-level risk tier per consent action (every action must be classified). */
105
+ export const CONSENT_ACTION_TIERS = {
106
+ app_clear_data: { runsCode: false },
107
+ app_fresh_start: { runsCode: false },
108
+ automation_project_write: { runsCode: false }, // writes generated files, never runs them
109
+ build_from_source: { runsCode: true }, // repo build scripts (gradle / xcodebuild / npm)
110
+ destructive_ui_candidate: { runsCode: false },
111
+ erase_device: { runsCode: false },
112
+ flow_mutation_run: { runsCode: true }, // seed scripts from repo fixtures, external OCR, openUrl with variables
113
+ geo_set: { runsCode: false },
114
+ install_app: { runsCode: false },
115
+ network_change: { runsCode: false },
116
+ ocr_run: { runsCode: true }, // repo-configured OCR / visual mask command
117
+ permission_grant: { runsCode: false },
118
+ permission_revoke: { runsCode: false },
119
+ prepare_plan: { runsCode: false },
120
+ privacy_reset: { runsCode: false },
121
+ screen_record: { runsCode: false },
122
+ seed_state: { runsCode: true }, // fixture seed scripts from the repo
123
+ start_metro: { runsCode: true }, // npx expo/react-native start loads the project's Metro/Babel config
124
+ suite_fresh_state_replay: { runsCode: true }, // state-profile prepare/teardown can run seed scripts
125
+ test_this_plan: { runsCode: false }, // bundled sub-steps are checked separately (planRunsCodeSteps)
126
+ wda_build: { runsCode: true }, // xcodebuild on a model-chosen wdaProjectPath
127
+ wda_non_loopback: {
128
+ runsCode: false,
129
+ notPreapprovable: 'use SWIPIUM_ALLOW_REMOTE_WDA=<exact URL> (the exact-URL pre-approval for remote WDA)',
130
+ },
131
+ wda_start: { runsCode: true }, // xcodebuild on a model-chosen wdaProjectPath
132
+ };
133
+ export const PREAPPROVE_ENV = 'SWIPIUM_CONSENT_PREAPPROVE';
134
+ export const PREAPPROVE_RUN_CODE_ENV = 'SWIPIUM_CONSENT_PREAPPROVE_RUN_CODE';
135
+ function tierOf(action) {
136
+ return CONSENT_ACTION_SET.has(action) ? CONSENT_ACTION_TIERS[action] : undefined;
137
+ }
138
+ /** True when the action executes repo- or model-chosen code (see ConsentActionTier.runsCode). */
139
+ export function actionRunsCode(action) {
140
+ return tierOf(action)?.runsCode === true;
141
+ }
142
+ /** Parse SWIPIUM_CONSENT_PREAPPROVE: comma-separated exact action names. Anything else (unknown
143
+ * names, `*`, `risk<=x`) is NOT honoured and is returned in `ignored`. Known names whose tier
144
+ * forbids pre-approval are returned in `blocked`. `runCode` is SWIPIUM_CONSENT_PREAPPROVE_RUN_CODE. */
145
+ export function parseConsentPreapproval(raw, runCode) {
146
+ const actions = new Set();
147
+ const ignored = [];
148
+ const blocked = [];
149
+ const runCodeOptIn = runCode?.trim() === '1';
150
+ for (const part of (raw ?? '').split(',')) {
151
+ const name = part.trim();
152
+ if (!name)
153
+ continue;
154
+ const tier = tierOf(name);
155
+ if (!tier)
156
+ ignored.push(name);
157
+ else if (tier.notPreapprovable)
158
+ blocked.push({ name, reason: `never pre-approvable: ${tier.notPreapprovable}` });
159
+ else if (tier.runsCode && !runCodeOptIn)
160
+ blocked.push({
161
+ name,
162
+ reason: `runs repo- or model-chosen code: also set ${PREAPPROVE_RUN_CODE_ENV}=1 to pre-approve it`,
163
+ });
164
+ else
165
+ actions.add(name);
166
+ }
167
+ return { actions, ignored, blocked };
168
+ }
169
+ function currentPreapproval() {
170
+ return parseConsentPreapproval(process.env[PREAPPROVE_ENV], process.env[PREAPPROVE_RUN_CODE_ENV]);
171
+ }
172
+ /** True when the operator pre-approved `action` in the server's own environment (and its tier
173
+ * allows it). Read per call from process.env only (never repo config). */
174
+ export function isOperatorPreapproved(action) {
175
+ return currentPreapproval().actions.has(action);
176
+ }
177
+ /** test_this_plan bundles sub-steps; return the kinds of the ones that run code. Read from the
178
+ * structured `affects.steps[].kind` (src/services/preflight.ts) AND the `exactCommand` bullet
179
+ * lines ("• <kind>: <cmd>"), so a malformed payload fails closed rather than open. */
180
+ export function planRunsCodeSteps(req) {
181
+ const kinds = new Set();
182
+ const steps = req.affects?.steps;
183
+ if (Array.isArray(steps)) {
184
+ for (const st of steps) {
185
+ const kind = st?.kind;
186
+ if (typeof kind === 'string')
187
+ kinds.add(kind);
188
+ }
189
+ }
190
+ for (const line of (req.exactCommand ?? '').split('\n')) {
191
+ const m = /^\s*(?:•\s*)?([a-z_]+)\s*(?::|$)/.exec(line);
192
+ if (m)
193
+ kinds.add(m[1]);
194
+ }
195
+ return [...kinds].filter((k) => actionRunsCode(k)).sort();
196
+ }
197
+ /** Does the operator policy approve this exact request? Unlike isOperatorPreapproved, this also
198
+ * applies the test_this_plan sub-step rule. `reason` is set when the action is listed but the
199
+ * policy still does not cover it. */
200
+ export function operatorPolicyCovers(req) {
201
+ const { actions } = currentPreapproval();
202
+ if (!actions.has(req.action))
203
+ return { approved: false };
204
+ if (req.action === 'test_this_plan') {
205
+ const uncovered = planRunsCodeSteps(req).filter((k) => !actions.has(k));
206
+ if (uncovered.length)
207
+ return {
208
+ approved: false,
209
+ reason: `test_this_plan includes ${uncovered.join(', ')}, which runs code and is not itself pre-approved ` +
210
+ `(list it in ${PREAPPROVE_ENV} and set ${PREAPPROVE_RUN_CODE_ENV}=1)`,
211
+ };
212
+ }
213
+ return { approved: true };
214
+ }
215
+ function levenshtein(a, b) {
216
+ const dp = Array.from({ length: b.length + 1 }, (_, j) => j);
217
+ for (let i = 1; i <= a.length; i++) {
218
+ let prev = dp[0];
219
+ dp[0] = i;
220
+ for (let j = 1; j <= b.length; j++) {
221
+ const tmp = dp[j];
222
+ dp[j] = Math.min(dp[j] + 1, dp[j - 1] + 1, prev + (a[i - 1] === b[j - 1] ? 0 : 1));
223
+ prev = tmp;
224
+ }
225
+ }
226
+ return dp[b.length];
227
+ }
228
+ /** Case-insensitive near-miss for an unknown name ("INSTALL-APP" > install_app), or undefined. */
229
+ export function suggestConsentAction(name) {
230
+ const norm = name
231
+ .trim()
232
+ .toLowerCase()
233
+ .replace(/[-\s.]+/g, '_');
234
+ if (!norm || /[*<>=]/.test(norm))
235
+ return undefined;
236
+ let best;
237
+ for (const a of CONSENT_ACTIONS) {
238
+ const d = levenshtein(norm, a);
239
+ if (!best || d < best.d)
240
+ best = { name: a, d };
241
+ }
242
+ return best && best.d <= Math.max(1, Math.floor(best.name.length / 4)) ? best.name : undefined;
243
+ }
244
+ let preapprovalWarned = false;
245
+ /** One stderr line at startup for each class of names in SWIPIUM_CONSENT_PREAPPROVE that is ignored. */
246
+ export function warnIgnoredPreapprovals() {
247
+ if (preapprovalWarned)
248
+ return;
249
+ const raw = process.env[PREAPPROVE_ENV];
250
+ if (!raw)
251
+ return;
252
+ preapprovalWarned = true;
253
+ const { actions, ignored, blocked } = currentPreapproval();
254
+ if (ignored.length) {
255
+ const suggestions = ignored
256
+ .map((n) => ({ n, s: suggestConsentAction(n) }))
257
+ .filter((x) => !!x.s)
258
+ .map((x) => `"${x.n}": did you mean ${x.s}?`);
259
+ log('warn', `${PREAPPROVE_ENV}: ignoring unknown action names (exact names only, no wildcards)`, {
260
+ ignored,
261
+ ...(suggestions.length ? { suggestions } : {}),
262
+ known: CONSENT_ACTIONS,
263
+ });
264
+ }
265
+ if (blocked.length)
266
+ log('warn', `${PREAPPROVE_ENV}: ignoring actions that cannot be pre-approved this way`, { blocked });
267
+ if (actions.size)
268
+ log('info', `${PREAPPROVE_ENV}: operator pre-approved consent actions`, { actions: [...actions] });
269
+ }
270
+ /** Headless-client hint for a decline / cancel nobody may have seen (only add it when the answer
271
+ * was likely automatic: a real human decline must not be nudged toward disabling consent). */
272
+ export function preapproveHint(action, req) {
273
+ const tier = tierOf(action);
274
+ const lead = 'If this client runs headless (codex exec, claude -p), it answers consent prompts automatically. ';
275
+ if (tier?.notPreapprovable)
276
+ return `${lead}"${action}" cannot be pre-approved by name: ${tier.notPreapprovable}.`;
277
+ const names = [action, ...(req && action === 'test_this_plan' ? planRunsCodeSteps(req) : [])];
278
+ const needsRunCode = names.some((n) => actionRunsCode(n));
279
+ return (lead +
280
+ `An operator can pre-approve this action with ${PREAPPROVE_ENV}=${names.join(',')} in the MCP server env` +
281
+ (needsRunCode
282
+ ? ` plus ${PREAPPROVE_RUN_CODE_ENV}=1, because it runs repository or model-chosen code (under codex exec, outside the client sandbox).`
283
+ : '.'));
284
+ }
285
+ /** Audit line for an approval nobody was asked about: the action plus the exact command(s), or a
286
+ * short hash and the first 200 chars when the command is long. */
287
+ function commandAudit(req) {
288
+ const cmd = req.exactCommand ?? '';
289
+ if (!cmd)
290
+ return { exactCommand: null, affects: JSON.stringify(req.affects ?? {}).slice(0, 200) };
291
+ if (cmd.length <= 200)
292
+ return { exactCommand: cmd };
293
+ return {
294
+ exactCommandSha256: createHash('sha256').update(cmd).digest('hex').slice(0, 16),
295
+ exactCommandHead: cmd.slice(0, 200),
296
+ exactCommandLength: cmd.length,
297
+ };
47
298
  }
299
+ /** A decline / cancel faster than this was most likely answered by the client, not a human. */
300
+ export const AUTO_ANSWER_MS = 1500;
48
301
  let elicitationProvider;
49
302
  /** Installed once at server construction (src/server.ts); undefined disables elicitation. */
50
303
  export function setElicitationProvider(provider) {
@@ -55,9 +308,13 @@ export function setElicitationProvider(provider) {
55
308
  // (SessionStore.recordMutation reads this). Bounded like the ledger itself.
56
309
  const consumedMechanisms = new Map();
57
310
  const elicitationApproved = new Set();
311
+ // Challenges approved by SWIPIUM_CONSENT_PREAPPROVE (consumed like an elicitation approval).
312
+ const operatorApproved = new Set();
58
313
  // Challenges currently routed to (or decided by) an out-of-band prompt: a client re-call can
59
314
  // never approve these. Only the elicitation answer can (no approve:true bypass).
60
315
  const awaitingElicitation = new Set();
316
+ const promptHandles = new Map(); // token > handle
317
+ const promptTokenByConsent = new Map(); // consentId > its one live token
61
318
  /** Mechanism that approved an already-consumed consentId (audit trail for the ledger). */
62
319
  export function approvalMechanismFor(consentId) {
63
320
  return consumedMechanisms.get(consentId);
@@ -79,7 +336,14 @@ export function requireConsent(req) {
79
336
  const consentId = randomUUID().slice(0, 8);
80
337
  const sessionId = currentConsentSession();
81
338
  pending.set(consentId, { req, createdAt: Date.now(), ...(sessionId ? { sessionId } : {}) });
82
- const payload = { requiresConsent: true, consentId, ...req };
339
+ // `next` repeats the approval instruction in structuredContent: Claude Code / Codex show the
340
+ // model that JSON, not the text block, for non-error results.
341
+ const payload = {
342
+ requiresConsent: true,
343
+ consentId,
344
+ ...req,
345
+ next: [`To approve, re-call this tool with consentId="${consentId}" and approve=true`],
346
+ };
83
347
  const text = `🔐 Consent required (${req.risk}): ${req.explain}\n` +
84
348
  (req.exactCommand ? `Will run: ${req.exactCommand}\n` : '') +
85
349
  `To approve, re-call this tool with consentId="${consentId}" and approve=true.\n\n` +
@@ -90,6 +354,9 @@ export function requireConsent(req) {
90
354
  }
91
355
  /**
92
356
  * Ask the connected client's HUMAN to decide a freshly-minted consent via MCP elicitation.
357
+ * - operator-policy: the action is listed in SWIPIUM_CONSENT_PREAPPROVE, so it is approved
358
+ * without asking (any client, and even with SWIPIUM_REQUIRE_ELICITATION=1: the operator made
359
+ * that decision explicitly). consumeConsent tags it 'operator-policy'.
93
360
  * - approved: the caller re-invokes the tool; consumeConsent tags mechanism 'elicitation'.
94
361
  * - declined / cancelled (dismissed, timed out, transport error, aborted call): REFUSAL. The
95
362
  * challenge is burned so the client cannot self-approve it afterwards (a re-call of the tool
@@ -97,17 +364,25 @@ export function requireConsent(req) {
97
364
  * - unavailable (client does not advertise elicitation): portable re-call convention
98
365
  * ('client-assertion'), unless SWIPIUM_REQUIRE_ELICITATION=1, in which case EVERY
99
366
  * consent-gated action (builds, Metro, installs, data wipes, seeds…) is refused outright.
367
+ * Protocol 2026-07-28 connections cannot await an answer inside one request: src/server.ts runs
368
+ * the same phases itself (operatorPolicyDecision, issueConsentPrompt / redeemConsentPrompt,
369
+ * settleConsentAnswer, noPromptDecision), so both eras share every outcome below.
100
370
  */
101
371
  export async function requestConsentDecision(consentId, ctx) {
102
372
  const req = peekConsent(consentId);
103
373
  if (!req)
104
374
  return { mechanism: 'client-assertion' };
375
+ const byPolicy = operatorPolicyDecision(consentId);
376
+ if (byPolicy)
377
+ return byPolicy;
378
+ const startedAt = Date.now();
105
379
  let answer = 'unavailable';
106
380
  let failure;
107
- if (elicitationProvider) {
381
+ const provider = ctx?.provider ?? elicitationProvider;
382
+ if (provider) {
108
383
  awaitingElicitation.add(consentId);
109
384
  try {
110
- answer = await elicitationProvider(req, ctx);
385
+ answer = await provider(req, ctx);
111
386
  }
112
387
  catch (e) {
113
388
  // The client advertised elicitation, so a throw here is a timeout / transport failure /
@@ -118,22 +393,59 @@ export async function requestConsentDecision(consentId, ctx) {
118
393
  if (answer === 'unavailable')
119
394
  awaitingElicitation.delete(consentId);
120
395
  }
396
+ if (answer === 'unavailable')
397
+ return noPromptDecision(consentId);
398
+ return settleConsentAnswer(consentId, answer, Date.now() - startedAt, failure);
399
+ }
400
+ /** Phase 1 (both eras): the operator pre-approval (SWIPIUM_CONSENT_PREAPPROVE + its tiers), checked
401
+ * BEFORE anyone is asked. Returns the approval, or undefined when the user must decide. */
402
+ export function operatorPolicyDecision(consentId) {
403
+ const req = peekConsent(consentId);
404
+ if (!req)
405
+ return undefined;
406
+ const policy = operatorPolicyCovers(req);
407
+ if (policy.approved) {
408
+ operatorApproved.add(consentId);
409
+ // warn, not info: SWIPIUM_LOG_LEVEL=warn must still show what ran without a prompt.
410
+ log('warn', `consent approved by operator policy (${PREAPPROVE_ENV}), no prompt shown`, {
411
+ action: req.action,
412
+ consentId,
413
+ risk: req.risk,
414
+ ...commandAudit(req),
415
+ });
416
+ return { mechanism: 'operator-policy', approved: true };
417
+ }
418
+ if (policy.reason)
419
+ log('warn', `${PREAPPROVE_ENV} does not cover this request; asking instead`, { action: req.action, consentId, reason: policy.reason });
420
+ return undefined;
421
+ }
422
+ /** Phase 2 (both eras): record what the out-of-band prompt answered. 'approved' lets the caller
423
+ * re-invoke the tool (consumeConsent tags it 'elicitation'); anything else burns the challenge. */
424
+ export function settleConsentAnswer(consentId, answer, elapsedMs, failure) {
425
+ const action = peekConsent(consentId)?.action ?? 'unknown';
121
426
  if (answer === 'approved') {
122
427
  elicitationApproved.add(consentId);
123
428
  return { mechanism: 'elicitation', approved: true };
124
429
  }
125
- if (answer === 'declined' || answer === 'cancelled') {
126
- forget(consentId);
127
- return {
128
- mechanism: 'elicitation',
129
- approved: false,
130
- outcome: answer,
131
- reason: answer === 'declined'
132
- ? `User declined "${req.action}" in the consent prompt`
133
- : `Consent prompt for "${req.action}" was dismissed or not answered${failure ? ` (${failure})` : ''}, treated as a refusal`,
134
- };
135
- }
136
- if (process.env.SWIPIUM_REQUIRE_ELICITATION === '1') {
430
+ forget(consentId);
431
+ return {
432
+ mechanism: 'elicitation',
433
+ approved: false,
434
+ outcome: answer,
435
+ elapsedMs,
436
+ ...(failure !== undefined ? { failure } : {}),
437
+ reason: answer === 'declined'
438
+ ? `User declined "${action}" in the consent prompt`
439
+ : failure !== undefined
440
+ ? `Consent prompt for "${action}" failed before anyone answered (${failure}), treated as a refusal`
441
+ : `Consent prompt for "${action}" was dismissed or not answered, treated as a refusal`,
442
+ };
443
+ }
444
+ /** Phase 2 when the client cannot show a prompt (no form elicitation): the portable re-call
445
+ * ('client-assertion'), or a refusal under SWIPIUM_REQUIRE_ELICITATION=1. */
446
+ export function noPromptDecision(consentId) {
447
+ const req = peekConsent(consentId);
448
+ if (req && process.env.SWIPIUM_REQUIRE_ELICITATION === '1') {
137
449
  forget(consentId);
138
450
  return {
139
451
  mechanism: 'refused',
@@ -143,6 +455,41 @@ export async function requestConsentDecision(consentId, ctx) {
143
455
  }
144
456
  return { mechanism: 'client-assertion' };
145
457
  }
458
+ /** Protocol 2026-07-28: open (or re-open) the out-of-band prompt for a pending consent and return
459
+ * the single-use requestState handle for its InputRequiredResult. From here on only the prompt's
460
+ * answer can approve the consent (an approve:true re-call is refused, as on 2025 elicitation).
461
+ * Re-opening replaces the previous handle. Undefined when the consent is no longer pending. */
462
+ export function issueConsentPrompt(consentId, binding) {
463
+ if (!peekConsent(consentId))
464
+ return undefined;
465
+ const previous = promptTokenByConsent.get(consentId);
466
+ if (previous !== undefined)
467
+ promptHandles.delete(previous);
468
+ const token = `swp1.${randomBytes(32).toString('base64url')}`;
469
+ promptHandles.set(token, {
470
+ consentId,
471
+ tool: binding.tool,
472
+ argsDigest: binding.argsDigest,
473
+ ...(binding.sessionId !== undefined ? { sessionId: binding.sessionId } : {}),
474
+ issuedAt: Date.now(),
475
+ });
476
+ promptTokenByConsent.set(consentId, token);
477
+ awaitingElicitation.add(consentId);
478
+ return token;
479
+ }
480
+ /** Protocol 2026-07-28: redeem a requestState handle. SINGLE-USE: the handle is deleted on the
481
+ * first presentation, whatever happens next. Undefined for an unknown, forged, replayed or
482
+ * expired handle (the consent behind it is pruned with the challenge, CONSENT_TTL_MS). */
483
+ export function redeemConsentPrompt(token) {
484
+ prunePending();
485
+ const handle = promptHandles.get(token);
486
+ if (!handle)
487
+ return undefined;
488
+ promptHandles.delete(token);
489
+ if (promptTokenByConsent.get(handle.consentId) === token)
490
+ promptTokenByConsent.delete(handle.consentId);
491
+ return handle;
492
+ }
146
493
  /**
147
494
  * Validate a resume call. Consent is single-use AND bound to the exact action:
148
495
  * `expected.action`/`expected.affects` must match what was originally requested, so an
@@ -173,6 +520,7 @@ export function consumeConsent(consentId, approve, expected) {
173
520
  return { approved: false, req, reason: 'consent does not match the affected target' };
174
521
  }
175
522
  const wasElicited = elicitationApproved.has(consentId);
523
+ const byOperator = operatorApproved.has(consentId);
176
524
  const routed = awaitingElicitation.has(consentId);
177
525
  forget(consentId);
178
526
  if (!approve)
@@ -181,7 +529,7 @@ export function consumeConsent(consentId, approve, expected) {
181
529
  // re-call with approve:true (e.g. racing the dialog) must not bypass the human.
182
530
  if (routed && !wasElicited)
183
531
  return { approved: false, req, reason: 'consent is awaiting the out-of-band user prompt' };
184
- const mechanism = wasElicited ? 'elicitation' : 'client-assertion';
532
+ const mechanism = byOperator ? 'operator-policy' : wasElicited ? 'elicitation' : 'client-assertion';
185
533
  recordMechanism(consentId, mechanism);
186
534
  return { approved: true, req, mechanism };
187
535
  }
@@ -1 +1 @@
1
- {"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/consent/consent.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,sFAAsF;AACtF,0FAA0F;AAC1F,EAAE;AACF,6FAA6F;AAC7F,6FAA6F;AAC7F,4FAA4F;AAC5F,gGAAgG;AAChG,+FAA+F;AAC/F,+EAA+E;AAC/E,sDAAsD;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAqBrD,0FAA0F;AAC1F,2FAA2F;AAC3F,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAA0B,CAAC;AAErE,oFAAoF;AACpF,MAAM,UAAU,mBAAmB,CAAI,SAA6B,EAAE,EAAW;IAC/E,OAAO,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;AACjH,CAAC;AAED,SAAS,qBAAqB;IAC5B,OAAO,YAAY,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC;AAC5C,CAAC;AAED,4FAA4F;AAC5F,0FAA0F;AAC1F,8FAA8F;AAC9F,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,GAAG,MAAM,CAAC;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;AAElD,SAAS,YAAY,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IACpC,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,cAAc;YAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,uFAAuF;IACvF,OAAO,OAAO,CAAC,IAAI,GAAG,mBAAmB,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAC3C,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,SAAiB;IAC/B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1B,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAsBD,IAAI,mBAAoD,CAAC;AAEzD,6FAA6F;AAC7F,MAAM,UAAU,sBAAsB,CAAC,QAAyC;IAC9E,mBAAmB,GAAG,QAAQ,CAAC;AACjC,CAAC;AAED,0FAA0F;AAC1F,oFAAoF;AACpF,4EAA4E;AAC5E,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAA6B,CAAC;AAChE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;AAC9C,6FAA6F;AAC7F,iFAAiF;AACjF,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE9C,0FAA0F;AAC1F,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,OAAO,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,SAAS,GAAG,cAAc;QAAE,OAAO,SAAS,CAAC;IACtE,OAAO,CAAC,CAAC,GAAG,CAAC;AACf,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,MAAM,CAAC,SAAS,CAAC,CAAC;AACpB,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,cAAc,CAAC,GAAmB;IAChD,YAAY,EAAE,CAAC;IACf,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;IAC1C,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5F,MAAM,OAAO,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,GAAG,EAAE,CAAC;IAC7D,MAAM,IAAI,GACR,wBAAwB,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,OAAO,IAAI;QACrD,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,iDAAiD,SAAS,yBAAyB;QACnF,WAAW;QACX,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC;IACV,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;AAC3E,CAAC;AAQD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,SAAiB,EAAE,GAAwB;IACtF,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;IACnD,IAAI,MAAM,GAAsB,aAAa,CAAC;IAC9C,IAAI,OAA2B,CAAC;IAChC,IAAI,mBAAmB,EAAE,CAAC;QACxB,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,wFAAwF;YACxF,+EAA+E;YAC/E,MAAM,GAAG,WAAW,CAAC;YACrB,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,IAAI,MAAM,KAAK,aAAa;YAAE,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC1B,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,CAAC;QAClB,OAAO;YACL,SAAS,EAAE,aAAa;YACxB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,MAAM;YACf,MAAM,EACJ,MAAM,KAAK,UAAU;gBACnB,CAAC,CAAC,kBAAkB,GAAG,CAAC,MAAM,yBAAyB;gBACvD,CAAC,CAAC,uBAAuB,GAAG,CAAC,MAAM,kCAAkC,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,wBAAwB;SAChI,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,GAAG,EAAE,CAAC;QACpD,MAAM,CAAC,SAAS,CAAC,CAAC;QAClB,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,MAAM,EACJ,mCAAmC,GAAG,CAAC,MAAM,WAAW,GAAG,CAAC,IAAI,sCAAsC;gBACtG,4DAA4D;SAC/D,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AAC3C,CAAC;AAUD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAkB,EAClB,OAAiB,EACjB,QAAiE;IAEjE,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,GAAG,cAAc,EAAE,CAAC;QAC3D,MAAM,CAAC,SAAS,CAAC,CAAC;QAClB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,kEAAkE,EAAE,CAAC;IACzG,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,CAAC;IACvB,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;IAClF,gGAAgG;IAChG,0DAA0D;IAC1D,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,qBAAqB,EAAE,EAAE,CAAC;QACjF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC;IACxF,CAAC;IACD,oFAAoF;IACpF,sDAAsD;IACtD,IAAI,QAAQ,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QACvD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,mBAAmB,GAAG,CAAC,MAAM,WAAW,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;IACtG,CAAC;IACD,IAAI,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC;IACxF,CAAC;IACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,SAAS,CAAC,CAAC;IAClB,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAC9E,4FAA4F;IAC5F,gFAAgF;IAChF,IAAI,MAAM,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,iDAAiD,EAAE,CAAC;IACvH,MAAM,SAAS,GAAsB,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,kBAAkB,CAAC;IACtF,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACtC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB,EAAE,SAA4B;IACtE,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC7C,IAAI,kBAAkB,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QACtD,IAAI,MAAM,KAAK,SAAS;YAAE,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"consent.js","sourceRoot":"","sources":["../../src/consent/consent.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,9 @@
2
2
  // Order (first hit wins):
3
3
  // 1. explicit `projectRoot` arg (must be absolute + an existing directory; an invalid explicit
4
4
  // value is an error, never silently replaced by a fallback)
5
- // 2. MCP roots (the client's declared workspace, the proper mechanism)
5
+ // 2. MCP roots (the client's declared workspace), on 2025-era connections only: protocol
6
+ // 2026-07-28 deprecates roots and has no server-to-client roots/list, so 2026 clients go
7
+ // straight to the fallbacks below (pass projectRoot, or set SWIPIUM_PROJECT_ROOT)
6
8
  // 3. env SWIPIUM_PROJECT_ROOT (user-set in the client's server config)
7
9
  // 4. env CLAUDE_PROJECT_DIR (Claude Code sets it for every stdio server it launches)
8
10
  // 5. process.cwd(), only when it is a real directory that is NOT the filesystem root and NOT
@@ -17,6 +19,7 @@ import { fileURLToPath } from 'node:url';
17
19
  import { isAbsolute, join, parse, resolve } from 'node:path';
18
20
  import { homedir } from 'node:os';
19
21
  import { qaError } from '../lib/result.js';
22
+ import { servesModernEra } from './protocolEra.js';
20
23
  export const PROJECT_ROOT_UNRESOLVED = 'PROJECT_ROOT_UNRESOLVED';
21
24
  function isDir(p) {
22
25
  try {
@@ -157,11 +160,13 @@ async function resolveProjectRootUnrecorded(server, explicit, opts = {}) {
157
160
  }
158
161
  return { source: 'none', hint: `Path not found or not a directory: ${p}` };
159
162
  }
160
- // 2) MCP roots (workspace the client exposed)
163
+ // 2) MCP roots (workspace the client exposed). Never on a 2026-07-28 instance: listRoots()
164
+ // throws there (no server-to-client requests), and roots are deprecated in that revision.
161
165
  try {
162
- const caps = server.server.getClientCapabilities?.();
166
+ const caps = servesModernEra(server) ? undefined : server.server.getClientCapabilities?.();
163
167
  if (caps?.roots) {
164
- const res = await server.server.listRoots();
168
+ // Same 5 s cap as currentProjectRoots (src/server.ts); the SDK default is 60 s.
169
+ const res = await server.server.listRoots(undefined, { timeout: 5_000 });
165
170
  const picked = pickMcpRoot((res.roots ?? []).map((r) => r.uri), opts.home ?? homedir());
166
171
  if (picked)
167
172
  return { root: picked, source: 'mcp-roots' };
@@ -1 +1 @@
1
- {"version":3,"file":"projectRoot.js","sourceRoot":"","sources":["../../src/context/projectRoot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projectRoot.js","sourceRoot":"","sources":["../../src/context/projectRoot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ // Which MCP protocol era an McpServer instance serves. Under serveStdio (src/server.ts) the era is
2
+ // fixed per instance when it is built: 'legacy' (2025-06-18 / 2025-11-25, `initialize` handshake)
3
+ // or 'modern' (2026-07-28, `server/discover` + per-request `_meta`). Modern instances have no
4
+ // server-to-client requests (roots/list, elicitation/create, sampling throw there), so the code
5
+ // that would send one asks here first. Keyed by object identity so tests can hand in fakes.
6
+ const modernServers = new WeakSet();
7
+ /** Mark `server` (an McpServer, or anything standing in for one) as serving protocol 2026-07-28. */
8
+ export function markModernServer(server) {
9
+ modernServers.add(server);
10
+ }
11
+ /** True when `server` serves protocol 2026-07-28 (no server-to-client requests available). */
12
+ export function servesModernEra(server) {
13
+ return server !== undefined && server !== null && modernServers.has(server);
14
+ }
15
+ //# sourceMappingURL=protocolEra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocolEra.js","sourceRoot":"","sources":["../../src/context/protocolEra.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,kGAAkG;AAClG,8FAA8F;AAC9F,gGAAgG;AAChG,4FAA4F;AAE5F,MAAM,aAAa,GAAG,IAAI,OAAO,EAAU,CAAC;AAE5C,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,eAAe,CAAC,MAA0B;IACxD,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC9E,CAAC"}
@@ -5,7 +5,7 @@
5
5
  // The shell-tap / `input text` approach is the same one proven in the Inn suite for
6
6
  // React Native custom inputs that don't respond to programmatic clicks.
7
7
  import { run, runBinary } from '../lib/spawn.js';
8
- import { currentSignal } from '../lib/abortScope.js';
8
+ import { currentSignal, isAbortError, sleepOrCancel } from '../lib/abortScope.js';
9
9
  import { adbDevices } from '../lib/android.js';
10
10
  /** Characters the device-side /system/bin/sh (mksh) treats specially; each gets a backslash.
11
11
  * Includes brace/glob expansion (`{a,b}` > `a b`, `[s]dcard` > `sdcard`). Backslash itself is
@@ -334,13 +334,16 @@ export class DirectDriver {
334
334
  lastErr = r.stdout.trim() || r.stderr.trim();
335
335
  }
336
336
  catch (e) {
337
+ // Cancelled: rethrow at once (still an AbortError for isAbortError) instead of retrying.
338
+ if (isAbortError(e))
339
+ throw e;
337
340
  lastErr = String(e);
338
341
  }
339
342
  if (attempt + 1 >= ATTEMPTS || (deadline !== undefined && deadline - Date.now() <= 400)) {
340
343
  attempt++;
341
344
  break;
342
345
  }
343
- await new Promise((res) => setTimeout(res, 400));
346
+ await sleepOrCancel(400);
344
347
  }
345
348
  throw new Error(`uiautomator dump failed after ${attempt} attempt(s): ${lastErr}`);
346
349
  }