@aperant/framework 0.11.0 → 0.12.1

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 (149) hide show
  1. package/CHANGELOG.md +226 -29
  2. package/agents/apt-planner.md +15 -0
  3. package/agents/apt-verifier.md +15 -10
  4. package/bin/apt-proof-video.mjs +256 -76
  5. package/dist/cli/commands/apply-recipe.d.mts +6 -0
  6. package/dist/cli/commands/apply-recipe.d.mts.map +1 -0
  7. package/dist/cli/commands/apply-recipe.mjs +98 -0
  8. package/dist/cli/commands/apply-recipe.mjs.map +1 -0
  9. package/dist/cli/commands/mobile-prepare.d.mts +53 -0
  10. package/dist/cli/commands/mobile-prepare.d.mts.map +1 -0
  11. package/dist/cli/commands/mobile-prepare.mjs +139 -0
  12. package/dist/cli/commands/mobile-prepare.mjs.map +1 -0
  13. package/dist/cli/commands/recipe-diff.d.mts +6 -0
  14. package/dist/cli/commands/recipe-diff.d.mts.map +1 -0
  15. package/dist/cli/commands/recipe-diff.mjs +75 -0
  16. package/dist/cli/commands/recipe-diff.mjs.map +1 -0
  17. package/dist/cli/commands/roadmap.d.mts.map +1 -1
  18. package/dist/cli/commands/roadmap.mjs +53 -0
  19. package/dist/cli/commands/roadmap.mjs.map +1 -1
  20. package/dist/cli/commands/validate-evidence.d.mts +1 -1
  21. package/dist/cli/commands/verify-sandbox.d.mts +6 -0
  22. package/dist/cli/commands/verify-sandbox.d.mts.map +1 -0
  23. package/dist/cli/commands/verify-sandbox.mjs +200 -0
  24. package/dist/cli/commands/verify-sandbox.mjs.map +1 -0
  25. package/dist/cli/consistency/parse-qa.d.mts.map +1 -1
  26. package/dist/cli/consistency/parse-qa.mjs +18 -4
  27. package/dist/cli/consistency/parse-qa.mjs.map +1 -1
  28. package/dist/cli/consistency/rules/r5-verdict-consistency.d.mts.map +1 -1
  29. package/dist/cli/consistency/rules/r5-verdict-consistency.mjs +11 -10
  30. package/dist/cli/consistency/rules/r5-verdict-consistency.mjs.map +1 -1
  31. package/dist/cli/coverage-check/user-outcomes.d.mts +7 -2
  32. package/dist/cli/coverage-check/user-outcomes.d.mts.map +1 -1
  33. package/dist/cli/coverage-check/user-outcomes.mjs +50 -17
  34. package/dist/cli/coverage-check/user-outcomes.mjs.map +1 -1
  35. package/dist/cli/design/frontmatter-schema.d.mts +8 -8
  36. package/dist/cli/dispatch.d.mts.map +1 -1
  37. package/dist/cli/dispatch.mjs +28 -0
  38. package/dist/cli/dispatch.mjs.map +1 -1
  39. package/dist/cli/gate/gates/verify-approved.d.mts +0 -48
  40. package/dist/cli/gate/gates/verify-approved.d.mts.map +1 -1
  41. package/dist/cli/gate/gates/verify-approved.mjs +23 -80
  42. package/dist/cli/gate/gates/verify-approved.mjs.map +1 -1
  43. package/dist/cli/install/mcp-server-specs.d.mts +6 -5
  44. package/dist/cli/install/mcp-server-specs.d.mts.map +1 -1
  45. package/dist/cli/install/mcp-server-specs.mjs +22 -4
  46. package/dist/cli/install/mcp-server-specs.mjs.map +1 -1
  47. package/dist/cli/personas/sidecar.d.mts +1 -1
  48. package/dist/cli/roadmap/backend-adapter.d.mts +43 -0
  49. package/dist/cli/roadmap/backend-adapter.d.mts.map +1 -0
  50. package/dist/cli/roadmap/backend-adapter.mjs +222 -0
  51. package/dist/cli/roadmap/backend-adapter.mjs.map +1 -0
  52. package/dist/cli/roadmap/lifecycle.d.mts +1 -1
  53. package/dist/cli/roadmap/rollup.d.mts +2 -2
  54. package/dist/cli/util/runtime-capabilities.d.mts +7 -0
  55. package/dist/cli/util/runtime-capabilities.d.mts.map +1 -1
  56. package/dist/cli/util/runtime-capabilities.mjs +65 -0
  57. package/dist/cli/util/runtime-capabilities.mjs.map +1 -1
  58. package/dist/cli/verify-proof/manifest-validator.mjs +13 -0
  59. package/dist/cli/verify-proof/manifest-validator.mjs.map +1 -1
  60. package/dist/cli/verify-proof/resolver.d.mts +10 -7
  61. package/dist/cli/verify-proof/resolver.d.mts.map +1 -1
  62. package/dist/cli/verify-proof/resolver.mjs +28 -7
  63. package/dist/cli/verify-proof/resolver.mjs.map +1 -1
  64. package/dist/cli/verify-proof/sandbox/apply.d.mts +64 -0
  65. package/dist/cli/verify-proof/sandbox/apply.d.mts.map +1 -0
  66. package/dist/cli/verify-proof/sandbox/apply.mjs +379 -0
  67. package/dist/cli/verify-proof/sandbox/apply.mjs.map +1 -0
  68. package/dist/cli/verify-proof/sandbox/gate-predicate.d.mts +63 -0
  69. package/dist/cli/verify-proof/sandbox/gate-predicate.d.mts.map +1 -0
  70. package/dist/cli/verify-proof/sandbox/gate-predicate.mjs +115 -0
  71. package/dist/cli/verify-proof/sandbox/gate-predicate.mjs.map +1 -0
  72. package/dist/cli/verify-proof/sandbox/pattern-matcher.d.mts +57 -0
  73. package/dist/cli/verify-proof/sandbox/pattern-matcher.d.mts.map +1 -0
  74. package/dist/cli/verify-proof/sandbox/pattern-matcher.mjs +124 -0
  75. package/dist/cli/verify-proof/sandbox/pattern-matcher.mjs.map +1 -0
  76. package/dist/cli/verify-proof/sandbox/recipe-diff.d.mts +28 -0
  77. package/dist/cli/verify-proof/sandbox/recipe-diff.d.mts.map +1 -0
  78. package/dist/cli/verify-proof/sandbox/recipe-diff.mjs +190 -0
  79. package/dist/cli/verify-proof/sandbox/recipe-diff.mjs.map +1 -0
  80. package/dist/cli/verify-proof/sandbox/sandbox-config.d.mts +25 -0
  81. package/dist/cli/verify-proof/sandbox/sandbox-config.d.mts.map +1 -0
  82. package/dist/cli/verify-proof/sandbox/sandbox-config.mjs +85 -0
  83. package/dist/cli/verify-proof/sandbox/sandbox-config.mjs.map +1 -0
  84. package/dist/cli/verify-proof/sandbox/self-test.d.mts +39 -0
  85. package/dist/cli/verify-proof/sandbox/self-test.d.mts.map +1 -0
  86. package/dist/cli/verify-proof/sandbox/self-test.mjs +248 -0
  87. package/dist/cli/verify-proof/sandbox/self-test.mjs.map +1 -0
  88. package/dist/plugin/.claude-plugin/plugin.json +1 -1
  89. package/dist/plugin/agents/apt-planner.md +15 -0
  90. package/dist/plugin/agents/apt-verifier.md +15 -10
  91. package/dist/plugin/skills/apt/SKILL.md +2 -2
  92. package/dist/plugin/skills/apt-plan/SKILL.md +23 -0
  93. package/dist/plugin/skills/apt-run/SKILL.md +1 -1
  94. package/dist/plugin/skills/apt-setup/SKILL.md +56 -0
  95. package/dist/plugin/skills/apt-verify/SKILL.md +20 -15
  96. package/dist/plugin/skills/apt-verify-proof/SKILL.md +146 -11
  97. package/dist/proof-report.d.ts.map +1 -1
  98. package/dist/proof-report.js +4 -1
  99. package/dist/proof-report.js.map +1 -1
  100. package/dist/types/config.d.ts +42 -4
  101. package/dist/types/config.d.ts.map +1 -1
  102. package/dist/types/qa-scoring.d.ts +45 -9
  103. package/dist/types/qa-scoring.d.ts.map +1 -1
  104. package/dist/types/qa-scoring.js +34 -13
  105. package/dist/types/qa-scoring.js.map +1 -1
  106. package/dist/types/state.d.ts +7 -2
  107. package/dist/types/state.d.ts.map +1 -1
  108. package/dist/types/task-record.d.ts +10 -2
  109. package/dist/types/task-record.d.ts.map +1 -1
  110. package/drivers/mobile/README.md +40 -0
  111. package/drivers/mobile/driver.mjs +106 -0
  112. package/drivers/mobile/manifest.json +49 -0
  113. package/package.json +138 -138
  114. package/prompts/inbox-clarification.md +17 -0
  115. package/prompts/inbox-triage.md +21 -0
  116. package/prompts/qa_orchestrator_agentic.md +18 -17
  117. package/prompts/qa_reviewer.md +17 -15
  118. package/skills/apt/SKILL.md +2 -2
  119. package/skills/apt-plan/SKILL.md +23 -0
  120. package/skills/apt-run/SKILL.md +1 -1
  121. package/skills/apt-setup/SKILL.md +56 -0
  122. package/skills/apt-verifier.md +7 -4
  123. package/skills/apt-verify/SKILL.md +20 -15
  124. package/skills/apt-verify-proof/SKILL.md +146 -11
  125. package/src/cli/commands/apply-recipe.mjs +105 -0
  126. package/src/cli/commands/mobile-prepare.mjs +151 -0
  127. package/src/cli/commands/recipe-diff.mjs +81 -0
  128. package/src/cli/commands/roadmap.mjs +54 -0
  129. package/src/cli/commands/verify-sandbox.mjs +231 -0
  130. package/src/cli/consistency/parse-qa.mjs +20 -4
  131. package/src/cli/consistency/rules/r5-verdict-consistency.mjs +11 -13
  132. package/src/cli/coverage-check/user-outcomes.mjs +52 -17
  133. package/src/cli/dispatch.mjs +27 -0
  134. package/src/cli/gate/gates/verify-approved.mjs +22 -81
  135. package/src/cli/install/mcp-server-specs.mjs +24 -4
  136. package/src/cli/roadmap/backend-adapter.mjs +231 -0
  137. package/src/cli/util/runtime-capabilities.mjs +67 -0
  138. package/src/cli/verify-proof/manifest-validator.mjs +15 -0
  139. package/src/cli/verify-proof/resolver.mjs +27 -7
  140. package/src/cli/verify-proof/sandbox/apply.mjs +401 -0
  141. package/src/cli/verify-proof/sandbox/gate-predicate.mjs +126 -0
  142. package/src/cli/verify-proof/sandbox/pattern-matcher.mjs +127 -0
  143. package/src/cli/verify-proof/sandbox/recipe-diff.mjs +208 -0
  144. package/src/cli/verify-proof/sandbox/sandbox-config.mjs +82 -0
  145. package/src/cli/verify-proof/sandbox/sandbox-schema.json +33 -0
  146. package/src/cli/verify-proof/sandbox/self-test.mjs +265 -0
  147. package/templates/config.json +10 -1
  148. package/templates/proof-verification.md +27 -8
  149. package/workflows/verify-proof.md +376 -302
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Task 26-05-26 subtask 2.4 — roadmap.backend dispatch adapter.
3
+ *
4
+ * Reads `.aperant/config.json :: roadmap.backend` and either delegates
5
+ * the subcommand to the Aperant Cloud MCP server (`'cloud-mcp'`) or
6
+ * returns a `{ delegated: false }` envelope so the calling subcommand
7
+ * proceeds with the existing markdown-canonical file-write path.
8
+ *
9
+ * Fast Path Guarantee: a missing `roadmap` block, a missing
10
+ * `roadmap.backend` key, or `backend: 'markdown'` ALL return
11
+ * `{ backend: 'markdown', delegated: false }` byte-identically — OSS
12
+ * framework users with zero cloud config see no behaviour change.
13
+ *
14
+ * Token resolution mirrors convex-mirror.mjs (token-source order ID-07):
15
+ * 1. process.env.MCP_ROADMAP_TOKEN
16
+ * 2. .aperant/team.json :: roadmapMcpToken
17
+ *
18
+ * Tool registration on the server side lands in subtask 2.3
19
+ * (apps/web/src/app/api/mcp/_lib/tools.ts). Until 2.3 ships, the
20
+ * adapter will issue the MCP call against whatever endpoint the user
21
+ * configured; a 404 / "unknown tool" response surfaces as a delegated
22
+ * error envelope rather than silently falling back to markdown.
23
+ */
24
+ import { existsSync, readFileSync } from 'node:fs';
25
+ import { join } from 'node:path';
26
+ /**
27
+ * Load `.aperant/config.json` defensively. Returns `{}` for any read
28
+ * or parse failure so callers never throw — the Fast Path branch must
29
+ * hit even when the config file is missing or malformed.
30
+ *
31
+ * @param {string} projectDir
32
+ * @returns {Record<string, unknown>}
33
+ */
34
+ function loadConfig(projectDir) {
35
+ const p = join(projectDir, '.aperant', 'config.json');
36
+ if (!existsSync(p))
37
+ return {};
38
+ try {
39
+ const parsed = JSON.parse(readFileSync(p, 'utf-8'));
40
+ return parsed && typeof parsed === 'object' ? parsed : {};
41
+ }
42
+ catch {
43
+ return {};
44
+ }
45
+ }
46
+ /**
47
+ * Resolve the cloud-mcp bearer token via the documented order. Returns
48
+ * `null` when neither source has a non-empty string.
49
+ *
50
+ * @param {string} projectDir
51
+ * @returns {string | null}
52
+ */
53
+ function resolveToken(projectDir) {
54
+ const env = process.env.MCP_ROADMAP_TOKEN;
55
+ if (typeof env === 'string' && env.length > 0)
56
+ return env;
57
+ const teamPath = join(projectDir, '.aperant', 'team.json');
58
+ if (!existsSync(teamPath))
59
+ return null;
60
+ try {
61
+ const parsed = JSON.parse(readFileSync(teamPath, 'utf-8'));
62
+ if (typeof parsed.roadmapMcpToken === 'string' && parsed.roadmapMcpToken.length > 0) {
63
+ return parsed.roadmapMcpToken;
64
+ }
65
+ }
66
+ catch {
67
+ // Bad JSON — fall through to null
68
+ }
69
+ return null;
70
+ }
71
+ /**
72
+ * Map a CLI subcommand to the MCP tool name registered in subtask 2.3.
73
+ * Read-side subcommands are intentionally absent — Phase 2 keeps reads
74
+ * markdown-only (cloud-mcp render is a Phase 3 follow-up per the plan).
75
+ *
76
+ * @param {string} subcommand
77
+ * @returns {string | null}
78
+ */
79
+ function toolNameFor(subcommand) {
80
+ switch (subcommand) {
81
+ case 'add-milestone':
82
+ return 'roadmap.hierarchy.milestones.create';
83
+ case 'add-phase':
84
+ return 'roadmap.hierarchy.phases.create';
85
+ case 'set-phase-status':
86
+ return 'roadmap.hierarchy.phases.update';
87
+ case 'delete-phase':
88
+ return 'roadmap.hierarchy.phases.remove';
89
+ case 'delete-milestone':
90
+ return 'roadmap.hierarchy.milestones.remove';
91
+ default:
92
+ return null;
93
+ }
94
+ }
95
+ /**
96
+ * Dispatch a roadmap write subcommand through the configured backend.
97
+ *
98
+ * Return shapes:
99
+ * - markdown (default) → `{ backend: 'markdown', delegated: false }`
100
+ * The caller proceeds with the existing markdown file-write path.
101
+ * - cloud-mcp success → `{ backend: 'cloud-mcp', delegated: true,
102
+ * result: <MCP response JSON> }`
103
+ * - cloud-mcp error → `{ backend: 'cloud-mcp', delegated: true,
104
+ * error: '<msg>', code?: <http>, status: 'error' }`
105
+ *
106
+ * The `error` branch is still `delegated: true` because the caller MUST
107
+ * NOT silently fall through to the markdown path when the user has
108
+ * opted into cloud-mcp — that would lose writes the user expected to
109
+ * land in Convex.
110
+ *
111
+ * @param {string} projectDir
112
+ * @param {string} subcommand
113
+ * @param {Record<string, unknown>} args
114
+ * @param {{ fetchImpl?: typeof fetch }} [opts]
115
+ * @returns {Promise<
116
+ * | { backend: 'markdown', delegated: false }
117
+ * | { backend: 'cloud-mcp', delegated: true, result: unknown }
118
+ * | { backend: 'cloud-mcp', delegated: true, status: 'error', error: string, code?: number }
119
+ * >}
120
+ */
121
+ export async function dispatchRoadmapWrite(projectDir, subcommand, args, opts = {}) {
122
+ const config = loadConfig(projectDir);
123
+ const roadmapBlock = config.roadmap && typeof config.roadmap === 'object' ? config.roadmap : null;
124
+ const backend = roadmapBlock && typeof roadmapBlock.backend === 'string' ? roadmapBlock.backend : 'markdown';
125
+ if (backend !== 'cloud-mcp') {
126
+ return { backend: 'markdown', delegated: false };
127
+ }
128
+ const cloudMcp = roadmapBlock && typeof roadmapBlock.cloudMcp === 'object' && roadmapBlock.cloudMcp !== null
129
+ ? roadmapBlock.cloudMcp
130
+ : {};
131
+ const teamSlug = typeof cloudMcp.teamSlug === 'string' ? cloudMcp.teamSlug : null;
132
+ if (!teamSlug || teamSlug.length === 0) {
133
+ return {
134
+ backend: 'cloud-mcp',
135
+ delegated: true,
136
+ status: 'error',
137
+ error: 'roadmap.cloudMcp.teamSlug required when roadmap.backend=cloud-mcp',
138
+ };
139
+ }
140
+ const tool = toolNameFor(subcommand);
141
+ if (!tool) {
142
+ return {
143
+ backend: 'cloud-mcp',
144
+ delegated: true,
145
+ status: 'error',
146
+ error: `cloud-mcp backend does not handle subcommand "${subcommand}" (read-side stays markdown in Phase 2)`,
147
+ };
148
+ }
149
+ const token = resolveToken(projectDir);
150
+ if (!token) {
151
+ return {
152
+ backend: 'cloud-mcp',
153
+ delegated: true,
154
+ status: 'error',
155
+ error: 'No roadmap MCP token (set MCP_ROADMAP_TOKEN or .aperant/team.json::roadmapMcpToken)',
156
+ };
157
+ }
158
+ const baseUrl = (typeof cloudMcp.mcpServerUrl === 'string' && cloudMcp.mcpServerUrl.length > 0
159
+ ? cloudMcp.mcpServerUrl
160
+ : process.env.APERANT_BASE_URL || 'https://app.aperant.com').replace(/\/$/, '');
161
+ const url = `${baseUrl}/api/mcp/${encodeURIComponent(teamSlug)}`;
162
+ // Streamable HTTP MCP body — tools/call envelope per the existing
163
+ // server-factory contract. The wire format mirrors what the
164
+ // MCP SDK clients send; the Aperant route handler dispatches on
165
+ // `params.name` to the matching tool registered in subtask 2.3.
166
+ const body = {
167
+ jsonrpc: '2.0',
168
+ id: 1,
169
+ method: 'tools/call',
170
+ params: {
171
+ name: tool,
172
+ arguments: args,
173
+ },
174
+ };
175
+ const f = opts.fetchImpl ?? fetch;
176
+ let res;
177
+ try {
178
+ res = await f(url, {
179
+ method: 'POST',
180
+ headers: {
181
+ Authorization: `Bearer ${token}`,
182
+ 'Content-Type': 'application/json',
183
+ Accept: 'application/json, text/event-stream',
184
+ },
185
+ body: JSON.stringify(body),
186
+ });
187
+ }
188
+ catch (e) {
189
+ const msg = e instanceof Error ? e.message : String(e);
190
+ return {
191
+ backend: 'cloud-mcp',
192
+ delegated: true,
193
+ status: 'error',
194
+ error: `network: ${msg}`,
195
+ };
196
+ }
197
+ if (res.status >= 400) {
198
+ let detail = '';
199
+ try {
200
+ detail = await res.text();
201
+ }
202
+ catch {
203
+ // ignore body-read failures
204
+ }
205
+ return {
206
+ backend: 'cloud-mcp',
207
+ delegated: true,
208
+ status: 'error',
209
+ code: res.status,
210
+ error: detail || `http ${res.status}`,
211
+ };
212
+ }
213
+ let parsed;
214
+ try {
215
+ parsed = await res.json();
216
+ }
217
+ catch {
218
+ parsed = null;
219
+ }
220
+ return { backend: 'cloud-mcp', delegated: true, result: parsed };
221
+ }
222
+ //# sourceMappingURL=backend-adapter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-adapter.mjs","sourceRoot":"","sources":["../../../src/cli/roadmap/backend-adapter.mjs"],"names":[],"mappings":"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"}
@@ -45,7 +45,7 @@ export function applyLifecyclePhaseSideEffect(targetDir: any, task: any, spec: a
45
45
  commit: string | null;
46
46
  rollup: {
47
47
  before: any;
48
- after: "completed" | "in-progress" | "planned" | "blocked" | null;
48
+ after: "planned" | "completed" | "blocked" | "in-progress" | null;
49
49
  changed: boolean;
50
50
  milestone_id: any;
51
51
  };
@@ -16,7 +16,7 @@ export function rollupMilestoneStatus(milestone: object): "completed" | "in-prog
16
16
  */
17
17
  export function applyRollup(roadmap: any, milestoneId: any): {
18
18
  before: any;
19
- after: "in-progress" | "completed" | "planned" | "blocked" | null;
19
+ after: "planned" | "completed" | "blocked" | "in-progress" | null;
20
20
  changed: boolean;
21
21
  milestone_id: any;
22
22
  };
@@ -31,7 +31,7 @@ export function applyRollup(roadmap: any, milestoneId: any): {
31
31
  export function writeRollup(projectDir: any, scope: any, milestoneId: any): {
32
32
  committed: boolean;
33
33
  before: any;
34
- after: "in-progress" | "completed" | "planned" | "blocked" | null;
34
+ after: "planned" | "completed" | "blocked" | "in-progress" | null;
35
35
  changed: boolean;
36
36
  milestone_id: any;
37
37
  };
@@ -25,6 +25,13 @@ export type RuntimeCapabilities = {
25
25
  is_web_frontend: boolean;
26
26
  is_expo: boolean;
27
27
  is_react_native: boolean;
28
+ /**
29
+ * — optional: always populated by the
30
+ * detector, but optional in the type so partial capability records built by
31
+ * other consumers (and pre-existing test fixtures) stay valid.
32
+ */
33
+ is_ios_native?: boolean | undefined;
34
+ is_android_native?: boolean | undefined;
28
35
  has_node: boolean;
29
36
  };
30
37
  //# sourceMappingURL=runtime-capabilities.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-capabilities.d.mts","sourceRoot":"","sources":["../../../src/cli/util/runtime-capabilities.mjs"],"names":[],"mappings":"AAsDA;;;;;GAKG;AACH,mDAHW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5B,mBAAmB,CAwD/B;AAED;;;;;;;;GAQG;AACH,oDAJW,MAAM,SACN;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,GACzB,mBAAmB,CAkC/B;;iBA/Ha,OAAO;cACP,OAAO;eACP,OAAO;aACP,OAAO;qBACP,OAAO;aACP,OAAO;qBACP,OAAO;cACP,OAAO"}
1
+ {"version":3,"file":"runtime-capabilities.d.mts","sourceRoot":"","sources":["../../../src/cli/util/runtime-capabilities.mjs"],"names":[],"mappings":"AAoEA;;;;;GAKG;AACH,mDAHW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAC5B,mBAAmB,CAwD/B;AAED;;;;;;;;GAQG;AACH,oDAJW,MAAM,SACN;IAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAAC,GACzB,mBAAmB,CAuC/B;;iBA1Ia,OAAO;cACP,OAAO;eACP,OAAO;aACP,OAAO;qBACP,OAAO;aACP,OAAO;qBACP,OAAO;;;;;;;;cAKP,OAAO"}
@@ -21,6 +21,14 @@
21
21
  * whose monorepo lives elsewhere (e.g. `packages/apps/*`) pass a
22
22
  * custom `monorepo_globs`. Setting `monorepo_globs: []` disables the
23
23
  * walk entirely (root-only escape hatch).
24
+ *
25
+ * Mobile verify-proof surface — `loadRuntimeCapabilities` ALSO detects
26
+ * pure-native iOS/Android projects (Swift `*.xcodeproj` / Kotlin
27
+ * `build.gradle`) that carry no JS deps, via a shallow fs check on the
28
+ * root + each monorepo dir (`detectNativeProject`). The pure
29
+ * `detectFromPackageJson` is intentionally NOT given fs access — native
30
+ * detection lives ONLY in the fs-walking `loadRuntimeCapabilities` so the
31
+ * pure-function contract holds (decision D-06).
24
32
  */
25
33
  import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
26
34
  import { join, resolve } from 'node:path';
@@ -33,6 +41,10 @@ import { join, resolve } from 'node:path';
33
41
  * @property {boolean} is_web_frontend
34
42
  * @property {boolean} is_expo
35
43
  * @property {boolean} is_react_native
44
+ * @property {boolean} [is_ios_native] — optional: always populated by the
45
+ * detector, but optional in the type so partial capability records built by
46
+ * other consumers (and pre-existing test fixtures) stay valid.
47
+ * @property {boolean} [is_android_native]
36
48
  * @property {boolean} has_node
37
49
  */
38
50
  /** A capability record with every flag defaulted to false. */
@@ -45,6 +57,8 @@ function emptyCapabilities() {
45
57
  is_web_frontend: false,
46
58
  is_expo: false,
47
59
  is_react_native: false,
60
+ is_ios_native: false,
61
+ is_android_native: false,
48
62
  has_node: false,
49
63
  };
50
64
  }
@@ -126,6 +140,8 @@ export function loadRuntimeCapabilities(projectDir, opts) {
126
140
  /* fall through with empty caps */
127
141
  }
128
142
  }
143
+ // Fold in pure-native detection on the root (covers a JS-less iOS/Android app).
144
+ rootCaps = orMergeCapabilities(rootCaps, detectNativeProject(root));
129
145
  // Default to the canonical Aperant monorepo layout. Passing `[]`
130
146
  // disables the walk entirely (root-only escape hatch per spec ID-05).
131
147
  const globs = opts && Array.isArray(opts.monorepo_globs) ? opts.monorepo_globs : ['apps/*'];
@@ -135,6 +151,9 @@ export function loadRuntimeCapabilities(projectDir, opts) {
135
151
  for (const glob of globs) {
136
152
  const matches = expandSimpleGlob(root, glob);
137
153
  for (const dir of matches) {
154
+ // Native detection runs regardless of package.json — a pure-native
155
+ // iOS/Android app in apps/* may carry no package.json at all.
156
+ merged = orMergeCapabilities(merged, detectNativeProject(dir));
138
157
  const childPkgPath = join(dir, 'package.json');
139
158
  if (!existsSync(childPkgPath))
140
159
  continue;
@@ -208,7 +227,53 @@ function orMergeCapabilities(a, b) {
208
227
  is_web_frontend: a.is_web_frontend || b.is_web_frontend,
209
228
  is_expo: a.is_expo || b.is_expo,
210
229
  is_react_native: a.is_react_native || b.is_react_native,
230
+ is_ios_native: a.is_ios_native || b.is_ios_native,
231
+ is_android_native: a.is_android_native || b.is_android_native,
211
232
  has_node: a.has_node || b.has_node,
212
233
  };
213
234
  }
235
+ /**
236
+ * Shallow fs detection of a pure-native mobile project — a Swift/ObjC iOS
237
+ * app (`*.xcodeproj` / `*.xcworkspace`) or a Kotlin/Java Android app
238
+ * (`build.gradle[.kts]` / `settings.gradle[.kts]`). Checks `dir` itself and
239
+ * the conventional `ios/` + `android/` subdirs (the React Native / Expo
240
+ * prebuild layout). Returns a full capability record so it OR-merges with
241
+ * the package.json-derived caps.
242
+ *
243
+ * This is the ONLY fs-touching detection — `detectFromPackageJson` stays
244
+ * pure (D-06). Fails closed (treats unreadable dirs as absent).
245
+ *
246
+ * @param {string} dir
247
+ * @returns {RuntimeCapabilities}
248
+ */
249
+ function detectNativeProject(dir) {
250
+ const caps = emptyCapabilities();
251
+ if (dirHasXcodeProject(dir) || dirHasXcodeProject(join(dir, 'ios'))) {
252
+ caps.is_ios_native = true;
253
+ }
254
+ if (dirHasGradle(dir) || dirHasGradle(join(dir, 'android'))) {
255
+ caps.is_android_native = true;
256
+ }
257
+ return caps;
258
+ }
259
+ /** True when `dir` directly contains a `*.xcodeproj` or `*.xcworkspace`. */
260
+ function dirHasXcodeProject(dir) {
261
+ if (!existsSync(dir))
262
+ return false;
263
+ try {
264
+ return readdirSync(dir).some((n) => n.endsWith('.xcodeproj') || n.endsWith('.xcworkspace'));
265
+ }
266
+ catch {
267
+ return false;
268
+ }
269
+ }
270
+ /** True when `dir` directly contains a Gradle build/settings file. */
271
+ function dirHasGradle(dir) {
272
+ if (!existsSync(dir))
273
+ return false;
274
+ return (existsSync(join(dir, 'build.gradle')) ||
275
+ existsSync(join(dir, 'build.gradle.kts')) ||
276
+ existsSync(join(dir, 'settings.gradle')) ||
277
+ existsSync(join(dir, 'settings.gradle.kts')));
278
+ }
214
279
  //# sourceMappingURL=runtime-capabilities.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-capabilities.mjs","sourceRoot":"","sources":["../../../src/cli/util/runtime-capabilities.mjs"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-capabilities.mjs","sourceRoot":"","sources":["../../../src/cli/util/runtime-capabilities.mjs"],"names":[],"mappings":"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"}
@@ -170,6 +170,19 @@ function validateNode(value, schema, path, errors) {
170
170
  }
171
171
  }
172
172
  }
173
+ // additionalProperties: false — reject any key not declared in `properties`.
174
+ if (schema.additionalProperties === false &&
175
+ schema.properties &&
176
+ typeof schema.properties === 'object') {
177
+ for (const key of Object.keys(obj)) {
178
+ if (!(key in schema.properties)) {
179
+ errors.push({
180
+ path: `${path}/${key}`,
181
+ message: `additional property "${key}" is not allowed`,
182
+ });
183
+ }
184
+ }
185
+ }
173
186
  }
174
187
  // array validation
175
188
  if (checkType(value, 'array') && schema.items) {
@@ -1 +1 @@
1
- {"version":3,"file":"manifest-validator.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/manifest-validator.mjs"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAEzD,yDAAyD;AACzD,IAAI,YAAY,GAAG,IAAI,CAAA;AAEvB,6CAA6C;AAC7C,MAAM,UAAU,kBAAkB;IACjC,IAAI,YAAY,KAAK,IAAI;QAAE,OAAO,YAAY,CAAA;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,CAAA;IAC1D,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5D,OAAO,YAAY,CAAA;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAChD,MAAM,IAAI,GAAG,MAAM,IAAI,kBAAkB,EAAE,CAAA;IAC3C,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IAC/C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAA;AAChC,CAAC;AAED,oGAAoG;AACpG,SAAS,SAAS,CAAC,KAAK,EAAE,IAAI;IAC7B,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAA;IACvD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC/E,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACnF,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,OAAO,KAAK,KAAK,SAAS,CAAA;IACzD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,KAAK,KAAK,IAAI,CAAA;IAC1C,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACjD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC5E,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,KAAK;IAC1B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAA;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAA;IACxC,OAAO,OAAO,KAAK,CAAA;AACpB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAChD,QAAQ;IACR,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI,IAAI,GAAG;gBACjB,OAAO,EAAE,kBAAkB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;aACvF,CAAC,CAAA;YACF,OAAM;QACP,CAAC;IACF,CAAC;IAED,OAAO;IACP,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACtE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI,IAAI,GAAG;gBACjB,OAAO,EAAE,iBAAiB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,KAAK,CAAC,EAAE;aACvE,CAAC,CAAA;YACF,OAAM;QACP,CAAC;IACF,CAAC;IAED,OAAO;IACP,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI,IAAI,GAAG;gBACjB,OAAO,EAAE,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;aACjF,CAAC,CAAA;YACF,OAAM;QACP,CAAC;IACF,CAAC;IAED,UAAU;IACV,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACrC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI,IAAI,GAAG;gBACjB,OAAO,EAAE,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,OAAO,EAAE;aAClF,CAAC,CAAA;YACF,OAAM;QACP,CAAC;IACF,CAAC;IAED,QAAQ;IACR,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,MAAM,YAAY,GAAG,EAAE,CAAA;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC3B,MAAM,SAAS,GAAG,EAAE,CAAA;YACpB,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;YACzC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,UAAU,EAAE,CAAA;;gBACnC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAA;QACzD,CAAC;QACD,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,IAAI,IAAI,GAAG;gBACjB,OAAO,EACN,UAAU,KAAK,CAAC;oBACf,CAAC,CAAC,mCAAmC,YAAY,CAAC,MAAM,kBAAkB;oBAC1E,CAAC,CAAC,wBAAwB,UAAU,kCAAkC;aACxE,CAAC,CAAA;YACF,OAAM;QACP,CAAC;IACF,CAAC;IAED,oBAAoB;IACpB,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,sCAAsC,CAAC,CAAC,KAAK,CAAC,CAAA;QAC1D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,sBAAsB,GAAG,WAAW,EAAE,CAAC,CAAA;gBACvF,CAAC;YACF,CAAC;QACF,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAChE,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClE,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;oBAChB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,qBAAqB,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,CAAA;gBACpF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,mBAAmB;IACnB,IAAI,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC/C,MAAM,GAAG,GAAG,wBAAwB,CAAC,CAAC,KAAK,CAAC,CAAA;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QAC3D,CAAC;IACF,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"manifest-validator.mjs","sourceRoot":"","sources":["../../../src/cli/verify-proof/manifest-validator.mjs"],"names":[],"mappings":"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"}
@@ -42,14 +42,17 @@ export function resolveDriver(opts: {
42
42
  * Map a User Outcomes surface tag to the runtime-capability flag a driver
43
43
  * must carry (via `matchesRuntime`) to be eligible for that surface.
44
44
  *
45
- * Closed surface set: `electron | web | cli | api | electron+web`.
45
+ * Closed surface set: `electron | web | cli | api | mobile | electron+web`.
46
46
  * `electron+web` is NOT a single flag — it's a cross-surface tag the
47
- * workflow runner expands into two single-surface dispatches.
47
+ * workflow runner expands into two single-surface dispatches. `mobile`
48
+ * maps to the synthetic `is_mobile` marker, which `maskRuntimeForSurface`
49
+ * expands to the four real mobile flags (the unified mobile-mcp driver
50
+ * targets ios/android/expo/react-native — decision D-08).
48
51
  *
49
- * @param {('electron'|'web'|'cli'|'api')} surface
50
- * @returns {('is_electron'|'is_web_frontend'|'has_node')}
52
+ * @param {('electron'|'web'|'cli'|'api'|'mobile')} surface
53
+ * @returns {('is_electron'|'is_web_frontend'|'has_node'|'is_mobile')}
51
54
  */
52
- export function surfaceToRequiredFlag(surface: ("electron" | "web" | "cli" | "api")): ("is_electron" | "is_web_frontend" | "has_node");
55
+ export function surfaceToRequiredFlag(surface: ("electron" | "web" | "cli" | "api" | "mobile")): ("is_electron" | "is_web_frontend" | "has_node" | "is_mobile");
53
56
  /**
54
57
  * Resolve a driver per outcome surface tag, NOT per verify-proof run
55
58
  * (per spec §ID-03). For each input outcome the function returns one
@@ -75,7 +78,7 @@ export function surfaceToRequiredFlag(surface: ("electron" | "web" | "cli" | "ap
75
78
  * @param {Object} opts
76
79
  * @param {DriverManifest[]} opts.drivers
77
80
  * @param {RuntimeCapabilities} opts.runtime
78
- * @param {Array<{id: string, surface: 'electron'|'web'|'cli'|'api'|'electron+web'}>} opts.outcomes
81
+ * @param {Array<{id: string, surface: 'electron'|'web'|'cli'|'api'|'mobile'|'electron+web'}>} opts.outcomes
79
82
  * @param {string[]} [opts.override]
80
83
  * @param {string[]} [opts.required_stability]
81
84
  * @param {string[]} [opts.required_capabilities] — defaults to ['screenshot']
@@ -86,7 +89,7 @@ export function resolveDriversForOutcomes(opts: {
86
89
  runtime: RuntimeCapabilities;
87
90
  outcomes: Array<{
88
91
  id: string;
89
- surface: "electron" | "web" | "cli" | "api" | "electron+web";
92
+ surface: "electron" | "web" | "cli" | "api" | "mobile" | "electron+web";
90
93
  }>;
91
94
  override?: string[] | undefined;
92
95
  required_stability?: string[] | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"resolver.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/resolver.mjs"],"names":[],"mappings":"AAyFA;;;;;;;GAOG;AACH,sCALW,cAAc,GAAG;IAAC,QAAQ,CAAC,EAAE,SAAS,GAAC,MAAM,GAAC,UAAU,CAAA;CAAC,WACzD,mBAAmB,YACnB,MAAM,EAAE,GACN;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAC,CAU9C;AA0CD;;;;;;;;;;;;GAYG;AACH,oCARG;IAA+B,OAAO,EAA9B,cAAc,EAAE;IACU,OAAO,EAAjC,mBAAmB;IACJ,qBAAqB,EAApC,MAAM,EAAE;IACQ,kBAAkB;IAClB,QAAQ;CAChC,GAAU;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,iBAAiB,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAqFrG;AAED;;;;;;;;;;GAUG;AACH,+CAHW,CAAC,UAAU,GAAC,KAAK,GAAC,KAAK,GAAC,KAAK,CAAC,GAC5B,CAAC,aAAa,GAAC,iBAAiB,GAAC,UAAU,CAAC,CAcxD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,gDARG;IAA+B,OAAO,EAA9B,cAAc,EAAE;IACU,OAAO,EAAjC,mBAAmB;IAC6D,QAAQ,EAAxF,KAAK,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,KAAK,GAAC,KAAK,GAAC,KAAK,GAAC,cAAc,CAAA;KAAC,CAAC;IACzD,QAAQ;IACR,kBAAkB;IAClB,qBAAqB;CAC7C,GAAU,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,iBAAiB,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAAC,CA2C/I;6BApTY,OAAO,+BAA+B,EAAE,cAAc;kCACtD,OAAO,sBAAsB,EAAE,mBAAmB"}
1
+ {"version":3,"file":"resolver.d.mts","sourceRoot":"","sources":["../../../src/cli/verify-proof/resolver.mjs"],"names":[],"mappings":"AAyFA;;;;;;;GAOG;AACH,sCALW,cAAc,GAAG;IAAC,QAAQ,CAAC,EAAE,SAAS,GAAC,MAAM,GAAC,UAAU,CAAA;CAAC,WACzD,mBAAmB,YACnB,MAAM,EAAE,GACN;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAC,CAU9C;AA4CD;;;;;;;;;;;;GAYG;AACH,oCARG;IAA+B,OAAO,EAA9B,cAAc,EAAE;IACU,OAAO,EAAjC,mBAAmB;IACJ,qBAAqB,EAApC,MAAM,EAAE;IACQ,kBAAkB;IAClB,QAAQ;CAChC,GAAU;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,iBAAiB,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAqFrG;AAED;;;;;;;;;;;;;GAaG;AACH,+CAHW,CAAC,UAAU,GAAC,KAAK,GAAC,KAAK,GAAC,KAAK,GAAC,QAAQ,CAAC,GACrC,CAAC,aAAa,GAAC,iBAAiB,GAAC,UAAU,GAAC,WAAW,CAAC,CAgBpE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,gDARG;IAA+B,OAAO,EAA9B,cAAc,EAAE;IACU,OAAO,EAAjC,mBAAmB;IACsE,QAAQ,EAAjG,KAAK,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,UAAU,GAAC,KAAK,GAAC,KAAK,GAAC,KAAK,GAAC,QAAQ,GAAC,cAAc,CAAA;KAAC,CAAC;IAClE,QAAQ;IACR,kBAAkB;IAClB,qBAAqB;CAC7C,GAAU,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,iBAAiB,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAAC,CA6C/I;6BA7TY,OAAO,+BAA+B,EAAE,cAAc;kCACtD,OAAO,sBAAsB,EAAE,mBAAmB"}
@@ -129,6 +129,10 @@ function matchesRuntime(manifest, runtime) {
129
129
  return true;
130
130
  if (stripped === 'react-native' && runtime.is_react_native)
131
131
  return true;
132
+ if (stripped === 'ios' && runtime.is_ios_native)
133
+ return true;
134
+ if (stripped === 'android' && runtime.is_android_native)
135
+ return true;
132
136
  if (stripped === 'node' && runtime.has_node)
133
137
  return true;
134
138
  if (stripped === 'cli' && runtime.has_node)
@@ -243,12 +247,15 @@ export function resolveDriver(opts) {
243
247
  * Map a User Outcomes surface tag to the runtime-capability flag a driver
244
248
  * must carry (via `matchesRuntime`) to be eligible for that surface.
245
249
  *
246
- * Closed surface set: `electron | web | cli | api | electron+web`.
250
+ * Closed surface set: `electron | web | cli | api | mobile | electron+web`.
247
251
  * `electron+web` is NOT a single flag — it's a cross-surface tag the
248
- * workflow runner expands into two single-surface dispatches.
252
+ * workflow runner expands into two single-surface dispatches. `mobile`
253
+ * maps to the synthetic `is_mobile` marker, which `maskRuntimeForSurface`
254
+ * expands to the four real mobile flags (the unified mobile-mcp driver
255
+ * targets ios/android/expo/react-native — decision D-08).
249
256
  *
250
- * @param {('electron'|'web'|'cli'|'api')} surface
251
- * @returns {('is_electron'|'is_web_frontend'|'has_node')}
257
+ * @param {('electron'|'web'|'cli'|'api'|'mobile')} surface
258
+ * @returns {('is_electron'|'is_web_frontend'|'has_node'|'is_mobile')}
252
259
  */
253
260
  export function surfaceToRequiredFlag(surface) {
254
261
  switch (surface) {
@@ -259,6 +266,8 @@ export function surfaceToRequiredFlag(surface) {
259
266
  case 'cli':
260
267
  case 'api':
261
268
  return 'has_node';
269
+ case 'mobile':
270
+ return 'is_mobile';
262
271
  default:
263
272
  throw new Error(`surfaceToRequiredFlag: unknown surface "${surface}"`);
264
273
  }
@@ -288,7 +297,7 @@ export function surfaceToRequiredFlag(surface) {
288
297
  * @param {Object} opts
289
298
  * @param {DriverManifest[]} opts.drivers
290
299
  * @param {RuntimeCapabilities} opts.runtime
291
- * @param {Array<{id: string, surface: 'electron'|'web'|'cli'|'api'|'electron+web'}>} opts.outcomes
300
+ * @param {Array<{id: string, surface: 'electron'|'web'|'cli'|'api'|'mobile'|'electron+web'}>} opts.outcomes
292
301
  * @param {string[]} [opts.override]
293
302
  * @param {string[]} [opts.required_stability]
294
303
  * @param {string[]} [opts.required_capabilities] — defaults to ['screenshot']
@@ -306,7 +315,8 @@ export function resolveDriversForOutcomes(opts) {
306
315
  for (const outcome of outcomes) {
307
316
  const surfacesToDispatch = outcome.surface === 'electron+web' ? ['electron', 'web'] : [outcome.surface];
308
317
  for (const surface of surfacesToDispatch) {
309
- const flag = surfaceToRequiredFlag(/** @type {'electron'|'web'|'cli'|'api'} */ (surface));
318
+ const flag = surfaceToRequiredFlag(
319
+ /** @type {'electron'|'web'|'cli'|'api'|'mobile'} */ (surface));
310
320
  // Synthesize a per-surface runtime view: only the surface's
311
321
  // required flag is on; every other flag is masked off so the
312
322
  // scoring prefers per-surface drivers (otherwise, on a
@@ -337,7 +347,7 @@ export function resolveDriversForOutcomes(opts) {
337
347
  * single surface during per-outcome dispatch.
338
348
  *
339
349
  * @param {RuntimeCapabilities} runtime
340
- * @param {string} flag — one of: is_electron | is_web_frontend | has_node
350
+ * @param {string} flag — one of: is_electron | is_web_frontend | has_node | is_mobile
341
351
  * @returns {RuntimeCapabilities}
342
352
  */
343
353
  function maskRuntimeForSurface(runtime, flag) {
@@ -350,6 +360,8 @@ function maskRuntimeForSurface(runtime, flag) {
350
360
  is_web_frontend: false,
351
361
  is_expo: false,
352
362
  is_react_native: false,
363
+ is_ios_native: false,
364
+ is_android_native: false,
353
365
  has_node: false,
354
366
  };
355
367
  // Only flip the surface's flag on if the project actually carries it
@@ -365,6 +377,15 @@ function maskRuntimeForSurface(runtime, flag) {
365
377
  }
366
378
  if (flag === 'has_node')
367
379
  masked.has_node = runtime.has_node;
380
+ // `is_mobile` is a synthetic surface marker — expand it to the four real
381
+ // mobile flags so the unified mobile-mcp driver (targets ios/android/
382
+ // expo/react-native) matches whichever the project actually carries.
383
+ if (flag === 'is_mobile') {
384
+ masked.is_ios_native = runtime.is_ios_native;
385
+ masked.is_android_native = runtime.is_android_native;
386
+ masked.is_expo = runtime.is_expo;
387
+ masked.is_react_native = runtime.is_react_native;
388
+ }
368
389
  return masked;
369
390
  }
370
391
  //# sourceMappingURL=resolver.mjs.map