@aperant/framework 0.11.0 → 0.12.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.
- package/CHANGELOG.md +213 -30
- package/agents/apt-planner.md +15 -0
- package/agents/apt-verifier.md +15 -10
- package/bin/apt-proof-video.mjs +256 -76
- package/dist/cli/commands/apply-recipe.d.mts +6 -0
- package/dist/cli/commands/apply-recipe.d.mts.map +1 -0
- package/dist/cli/commands/apply-recipe.mjs +98 -0
- package/dist/cli/commands/apply-recipe.mjs.map +1 -0
- package/dist/cli/commands/mobile-prepare.d.mts +53 -0
- package/dist/cli/commands/mobile-prepare.d.mts.map +1 -0
- package/dist/cli/commands/mobile-prepare.mjs +139 -0
- package/dist/cli/commands/mobile-prepare.mjs.map +1 -0
- package/dist/cli/commands/recipe-diff.d.mts +6 -0
- package/dist/cli/commands/recipe-diff.d.mts.map +1 -0
- package/dist/cli/commands/recipe-diff.mjs +75 -0
- package/dist/cli/commands/recipe-diff.mjs.map +1 -0
- package/dist/cli/commands/roadmap.d.mts.map +1 -1
- package/dist/cli/commands/roadmap.mjs +53 -0
- package/dist/cli/commands/roadmap.mjs.map +1 -1
- package/dist/cli/commands/validate-evidence.d.mts +1 -1
- package/dist/cli/commands/verify-sandbox.d.mts +6 -0
- package/dist/cli/commands/verify-sandbox.d.mts.map +1 -0
- package/dist/cli/commands/verify-sandbox.mjs +200 -0
- package/dist/cli/commands/verify-sandbox.mjs.map +1 -0
- package/dist/cli/consistency/parse-qa.d.mts.map +1 -1
- package/dist/cli/consistency/parse-qa.mjs +18 -4
- package/dist/cli/consistency/parse-qa.mjs.map +1 -1
- package/dist/cli/consistency/rules/r5-verdict-consistency.d.mts.map +1 -1
- package/dist/cli/consistency/rules/r5-verdict-consistency.mjs +11 -10
- package/dist/cli/consistency/rules/r5-verdict-consistency.mjs.map +1 -1
- package/dist/cli/coverage-check/user-outcomes.d.mts +7 -2
- package/dist/cli/coverage-check/user-outcomes.d.mts.map +1 -1
- package/dist/cli/coverage-check/user-outcomes.mjs +50 -17
- package/dist/cli/coverage-check/user-outcomes.mjs.map +1 -1
- package/dist/cli/design/frontmatter-schema.d.mts +8 -8
- package/dist/cli/dispatch.d.mts.map +1 -1
- package/dist/cli/dispatch.mjs +28 -0
- package/dist/cli/dispatch.mjs.map +1 -1
- package/dist/cli/gate/gates/verify-approved.d.mts +0 -48
- package/dist/cli/gate/gates/verify-approved.d.mts.map +1 -1
- package/dist/cli/gate/gates/verify-approved.mjs +23 -80
- package/dist/cli/gate/gates/verify-approved.mjs.map +1 -1
- package/dist/cli/install/mcp-server-specs.d.mts +6 -5
- package/dist/cli/install/mcp-server-specs.d.mts.map +1 -1
- package/dist/cli/install/mcp-server-specs.mjs +22 -4
- package/dist/cli/install/mcp-server-specs.mjs.map +1 -1
- package/dist/cli/personas/sidecar.d.mts +1 -1
- package/dist/cli/roadmap/backend-adapter.d.mts +43 -0
- package/dist/cli/roadmap/backend-adapter.d.mts.map +1 -0
- package/dist/cli/roadmap/backend-adapter.mjs +222 -0
- package/dist/cli/roadmap/backend-adapter.mjs.map +1 -0
- package/dist/cli/roadmap/lifecycle.d.mts +1 -1
- package/dist/cli/roadmap/rollup.d.mts +2 -2
- package/dist/cli/util/runtime-capabilities.d.mts +7 -0
- package/dist/cli/util/runtime-capabilities.d.mts.map +1 -1
- package/dist/cli/util/runtime-capabilities.mjs +65 -0
- package/dist/cli/util/runtime-capabilities.mjs.map +1 -1
- package/dist/cli/verify-proof/manifest-validator.mjs +13 -0
- package/dist/cli/verify-proof/manifest-validator.mjs.map +1 -1
- package/dist/cli/verify-proof/resolver.d.mts +10 -7
- package/dist/cli/verify-proof/resolver.d.mts.map +1 -1
- package/dist/cli/verify-proof/resolver.mjs +28 -7
- package/dist/cli/verify-proof/resolver.mjs.map +1 -1
- package/dist/cli/verify-proof/sandbox/apply.d.mts +64 -0
- package/dist/cli/verify-proof/sandbox/apply.d.mts.map +1 -0
- package/dist/cli/verify-proof/sandbox/apply.mjs +379 -0
- package/dist/cli/verify-proof/sandbox/apply.mjs.map +1 -0
- package/dist/cli/verify-proof/sandbox/gate-predicate.d.mts +63 -0
- package/dist/cli/verify-proof/sandbox/gate-predicate.d.mts.map +1 -0
- package/dist/cli/verify-proof/sandbox/gate-predicate.mjs +115 -0
- package/dist/cli/verify-proof/sandbox/gate-predicate.mjs.map +1 -0
- package/dist/cli/verify-proof/sandbox/pattern-matcher.d.mts +57 -0
- package/dist/cli/verify-proof/sandbox/pattern-matcher.d.mts.map +1 -0
- package/dist/cli/verify-proof/sandbox/pattern-matcher.mjs +124 -0
- package/dist/cli/verify-proof/sandbox/pattern-matcher.mjs.map +1 -0
- package/dist/cli/verify-proof/sandbox/recipe-diff.d.mts +28 -0
- package/dist/cli/verify-proof/sandbox/recipe-diff.d.mts.map +1 -0
- package/dist/cli/verify-proof/sandbox/recipe-diff.mjs +190 -0
- package/dist/cli/verify-proof/sandbox/recipe-diff.mjs.map +1 -0
- package/dist/cli/verify-proof/sandbox/sandbox-config.d.mts +25 -0
- package/dist/cli/verify-proof/sandbox/sandbox-config.d.mts.map +1 -0
- package/dist/cli/verify-proof/sandbox/sandbox-config.mjs +85 -0
- package/dist/cli/verify-proof/sandbox/sandbox-config.mjs.map +1 -0
- package/dist/cli/verify-proof/sandbox/self-test.d.mts +39 -0
- package/dist/cli/verify-proof/sandbox/self-test.d.mts.map +1 -0
- package/dist/cli/verify-proof/sandbox/self-test.mjs +248 -0
- package/dist/cli/verify-proof/sandbox/self-test.mjs.map +1 -0
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/dist/plugin/agents/apt-planner.md +15 -0
- package/dist/plugin/agents/apt-verifier.md +15 -10
- package/dist/plugin/skills/apt-plan/SKILL.md +23 -0
- package/dist/plugin/skills/apt-run/SKILL.md +1 -1
- package/dist/plugin/skills/apt-setup/SKILL.md +56 -0
- package/dist/plugin/skills/apt-verify/SKILL.md +20 -15
- package/dist/plugin/skills/apt-verify-proof/SKILL.md +146 -11
- package/dist/proof-report.d.ts.map +1 -1
- package/dist/proof-report.js +4 -1
- package/dist/proof-report.js.map +1 -1
- package/dist/types/config.d.ts +42 -4
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/qa-scoring.d.ts +45 -9
- package/dist/types/qa-scoring.d.ts.map +1 -1
- package/dist/types/qa-scoring.js +34 -13
- package/dist/types/qa-scoring.js.map +1 -1
- package/dist/types/state.d.ts +7 -2
- package/dist/types/state.d.ts.map +1 -1
- package/dist/types/task-record.d.ts +10 -2
- package/dist/types/task-record.d.ts.map +1 -1
- package/drivers/mobile/README.md +40 -0
- package/drivers/mobile/driver.mjs +106 -0
- package/drivers/mobile/manifest.json +49 -0
- package/package.json +138 -138
- package/prompts/inbox-clarification.md +11 -0
- package/prompts/inbox-triage.md +20 -0
- package/prompts/qa_orchestrator_agentic.md +18 -17
- package/prompts/qa_reviewer.md +17 -15
- package/skills/apt-plan/SKILL.md +23 -0
- package/skills/apt-run/SKILL.md +1 -1
- package/skills/apt-setup/SKILL.md +56 -0
- package/skills/apt-verifier.md +7 -4
- package/skills/apt-verify/SKILL.md +20 -15
- package/skills/apt-verify-proof/SKILL.md +146 -11
- package/src/cli/commands/apply-recipe.mjs +105 -0
- package/src/cli/commands/mobile-prepare.mjs +151 -0
- package/src/cli/commands/recipe-diff.mjs +81 -0
- package/src/cli/commands/roadmap.mjs +54 -0
- package/src/cli/commands/verify-sandbox.mjs +231 -0
- package/src/cli/consistency/parse-qa.mjs +20 -4
- package/src/cli/consistency/rules/r5-verdict-consistency.mjs +11 -13
- package/src/cli/coverage-check/user-outcomes.mjs +52 -17
- package/src/cli/dispatch.mjs +27 -0
- package/src/cli/gate/gates/verify-approved.mjs +22 -81
- package/src/cli/install/mcp-server-specs.mjs +24 -4
- package/src/cli/roadmap/backend-adapter.mjs +231 -0
- package/src/cli/util/runtime-capabilities.mjs +67 -0
- package/src/cli/verify-proof/manifest-validator.mjs +15 -0
- package/src/cli/verify-proof/resolver.mjs +27 -7
- package/src/cli/verify-proof/sandbox/apply.mjs +401 -0
- package/src/cli/verify-proof/sandbox/gate-predicate.mjs +126 -0
- package/src/cli/verify-proof/sandbox/pattern-matcher.mjs +127 -0
- package/src/cli/verify-proof/sandbox/recipe-diff.mjs +208 -0
- package/src/cli/verify-proof/sandbox/sandbox-config.mjs +82 -0
- package/src/cli/verify-proof/sandbox/sandbox-schema.json +33 -0
- package/src/cli/verify-proof/sandbox/self-test.mjs +265 -0
- package/templates/config.json +10 -1
- package/templates/proof-verification.md +27 -8
- 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: "
|
|
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: "
|
|
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: "
|
|
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":"
|
|
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":"AAAA
|
|
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;
|
|
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(
|
|
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
|