@extentos/mcp-server 0.0.94 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tools/data/capabilities.d.ts +49 -0
- package/dist/tools/data/capabilities.d.ts.map +1 -1
- package/dist/tools/data/capabilities.js +37 -0
- package/dist/tools/data/capabilities.js.map +1 -1
- package/dist/tools/data/capabilityPatterns.d.ts.map +1 -1
- package/dist/tools/data/capabilityPatterns.js +499 -6
- package/dist/tools/data/capabilityPatterns.js.map +1 -1
- package/dist/tools/data/codeExamples.d.ts.map +1 -1
- package/dist/tools/data/codeExamples.js +916 -2
- package/dist/tools/data/codeExamples.js.map +1 -1
- package/dist/tools/data/version.d.ts +12 -0
- package/dist/tools/data/version.d.ts.map +1 -1
- package/dist/tools/data/version.js +17 -0
- package/dist/tools/data/version.js.map +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +63 -3
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/docs/index.d.ts.map +1 -1
- package/dist/tools/docs/index.js +115 -4
- package/dist/tools/docs/index.js.map +1 -1
- package/dist/tools/handlers/assertToolCalled.d.ts +3 -0
- package/dist/tools/handlers/assertToolCalled.d.ts.map +1 -0
- package/dist/tools/handlers/assertToolCalled.js +208 -0
- package/dist/tools/handlers/assertToolCalled.js.map +1 -0
- package/dist/tools/handlers/generateConnectionModule.js +21 -2
- package/dist/tools/handlers/generateConnectionModule.js.map +1 -1
- package/dist/tools/handlers/getCredentialGuide.d.ts.map +1 -1
- package/dist/tools/handlers/getCredentialGuide.js +33 -6
- package/dist/tools/handlers/getCredentialGuide.js.map +1 -1
- package/dist/tools/handlers/getProductionChecklist.d.ts.map +1 -1
- package/dist/tools/handlers/getProductionChecklist.js +52 -1
- package/dist/tools/handlers/getProductionChecklist.js.map +1 -1
- package/dist/tools/handlers/injectAssistantUtterance.d.ts +3 -0
- package/dist/tools/handlers/injectAssistantUtterance.d.ts.map +1 -0
- package/dist/tools/handlers/injectAssistantUtterance.js +378 -0
- package/dist/tools/handlers/injectAssistantUtterance.js.map +1 -0
- package/dist/tools/handlers/validateIntegration.d.ts.map +1 -1
- package/dist/tools/handlers/validateIntegration.js +67 -0
- package/dist/tools/handlers/validateIntegration.js.map +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +4 -0
- package/dist/tools/registry.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// assertToolCalled — Phase 4 S1.W.7.
|
|
2
|
+
//
|
|
3
|
+
// The other half of the agent-driven E2E loop for Phase 4 voice apps.
|
|
4
|
+
// Polls the backend event log for an `assistant.tool_called` event
|
|
5
|
+
// matching the given tool name (and optionally a partial-match against
|
|
6
|
+
// the call args), returning when found or timing out.
|
|
7
|
+
//
|
|
8
|
+
// Schema per synthesis #16:
|
|
9
|
+
// { sessionId, name, argsMatch?, timeoutMs? } → { name, args, call_id,
|
|
10
|
+
// occurred_at_ms } | error code "tool_not_called" on timeout
|
|
11
|
+
//
|
|
12
|
+
// Equivalent to getEventLog({ types: ["assistant.tool_called"],
|
|
13
|
+
// filter: { name }, timeoutMs }) but in an assertion shape — returns
|
|
14
|
+
// the matched event payload directly (no event-array unwrap) and
|
|
15
|
+
// errors clearly if no match within the timeout.
|
|
16
|
+
//
|
|
17
|
+
// USE for agent test loops:
|
|
18
|
+
// await injectAssistantUtterance({ sessionId, text: "take a picture" })
|
|
19
|
+
// await assertToolCalled({ sessionId, name: "take_picture", timeoutMs: 5000 })
|
|
20
|
+
//
|
|
21
|
+
// DON'T USE for inspecting the full event trace (use getEventLog) or
|
|
22
|
+
// for checking which tools are registered statically (use
|
|
23
|
+
// inspectIntegration).
|
|
24
|
+
import { okResponse, errorResponse } from "../response.js";
|
|
25
|
+
import { backendFetch } from "../util/backendClient.js";
|
|
26
|
+
const POLL_MS = 200;
|
|
27
|
+
const DEFAULT_TIMEOUT_MS = 5_000;
|
|
28
|
+
const MIN_TIMEOUT_MS = 250;
|
|
29
|
+
const MAX_TIMEOUT_MS = 60_000;
|
|
30
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
31
|
+
/**
|
|
32
|
+
* Shallow top-level partial match. The `expected` keys must all be
|
|
33
|
+
* present in `actual` with equal scalar values. Nested objects are
|
|
34
|
+
* compared structurally (deep equality). Per synthesis #16 v1 ships
|
|
35
|
+
* top-level partial match only — nested glob patterns deferred.
|
|
36
|
+
*/
|
|
37
|
+
function argsMatchPartial(actual, expected) {
|
|
38
|
+
for (const [key, expectedVal] of Object.entries(expected)) {
|
|
39
|
+
if (!(key in actual))
|
|
40
|
+
return false;
|
|
41
|
+
const actualVal = actual[key];
|
|
42
|
+
if (typeof expectedVal === "object" &&
|
|
43
|
+
expectedVal !== null &&
|
|
44
|
+
!Array.isArray(expectedVal)) {
|
|
45
|
+
// Recurse for nested object equality.
|
|
46
|
+
if (typeof actualVal !== "object" ||
|
|
47
|
+
actualVal === null ||
|
|
48
|
+
Array.isArray(actualVal))
|
|
49
|
+
return false;
|
|
50
|
+
if (!argsMatchPartial(actualVal, expectedVal))
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
else if (Array.isArray(expectedVal)) {
|
|
54
|
+
if (!Array.isArray(actualVal))
|
|
55
|
+
return false;
|
|
56
|
+
if (actualVal.length !== expectedVal.length)
|
|
57
|
+
return false;
|
|
58
|
+
for (let i = 0; i < expectedVal.length; i++) {
|
|
59
|
+
if (JSON.stringify(actualVal[i]) !== JSON.stringify(expectedVal[i]))
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
if (actualVal !== expectedVal)
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
export async function handleAssertToolCalled(raw) {
|
|
71
|
+
if (!raw || typeof raw !== "object") {
|
|
72
|
+
return errorResponse({
|
|
73
|
+
code: "invalid_arguments",
|
|
74
|
+
message: "assertToolCalled requires { sessionId, name }.",
|
|
75
|
+
fixHint: 'Pass { sessionId: "sim_...", name: "take_picture" }. Optional: argsMatch (object — top-level partial match), timeoutMs (default 5000).',
|
|
76
|
+
retryable: false,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const o = raw;
|
|
80
|
+
if (typeof o.sessionId !== "string" || !o.sessionId.trim()) {
|
|
81
|
+
return errorResponse({
|
|
82
|
+
code: "invalid_arguments",
|
|
83
|
+
message: "sessionId (string) is required.",
|
|
84
|
+
fixHint: "Pass the sessionId returned by createSimulatorSession.",
|
|
85
|
+
retryable: false,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (typeof o.name !== "string" || !o.name.trim()) {
|
|
89
|
+
return errorResponse({
|
|
90
|
+
code: "invalid_arguments",
|
|
91
|
+
message: "name (string, the tool name to wait for) is required.",
|
|
92
|
+
fixHint: 'Pass name: "take_picture" (or whichever tool you expect the assistant to call).',
|
|
93
|
+
retryable: false,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
const expectedName = o.name;
|
|
97
|
+
const argsMatch = o.argsMatch && typeof o.argsMatch === "object" && !Array.isArray(o.argsMatch)
|
|
98
|
+
? o.argsMatch
|
|
99
|
+
: null;
|
|
100
|
+
let timeoutMs = typeof o.timeoutMs === "number" ? Math.round(o.timeoutMs) : DEFAULT_TIMEOUT_MS;
|
|
101
|
+
timeoutMs = Math.max(MIN_TIMEOUT_MS, Math.min(MAX_TIMEOUT_MS, timeoutMs));
|
|
102
|
+
const sessionId = o.sessionId;
|
|
103
|
+
const startedAt = Date.now();
|
|
104
|
+
const deadline = startedAt + timeoutMs;
|
|
105
|
+
// **Anchor at "now" BEFORE polling** (fix 2026-05-27).
|
|
106
|
+
//
|
|
107
|
+
// Without this anchor, the first poll fetched events with no cursor,
|
|
108
|
+
// which returned the OLDEST 200 events in the session's history. If
|
|
109
|
+
// any prior `assistant.tool_called` event matched the requested name
|
|
110
|
+
// (very common in iterative testing — yesterday's runs, last hour's
|
|
111
|
+
// runs, etc.), assertToolCalled returned IMMEDIATELY with a stale
|
|
112
|
+
// call_id + occurred_at_ms from history, and a `waitedMs` that didn't
|
|
113
|
+
// represent the actual response latency at all. The bug was silent —
|
|
114
|
+
// tests appeared to pass faster than physically possible (e.g. an
|
|
115
|
+
// OpenAi tool call appearing to fire in 400ms when the real round-trip
|
|
116
|
+
// is 1-2s).
|
|
117
|
+
//
|
|
118
|
+
// Fix: a one-time anchor fetch with limit=1 returns the latest event
|
|
119
|
+
// + a cursor positioned AFTER it. We start polling from that cursor,
|
|
120
|
+
// so we only match events that arrive while assertToolCalled is
|
|
121
|
+
// running. Existing callers benefit automatically — no schema change.
|
|
122
|
+
let cursor;
|
|
123
|
+
{
|
|
124
|
+
const anchorParams = new URLSearchParams();
|
|
125
|
+
anchorParams.set("filter", "all");
|
|
126
|
+
anchorParams.set("limit", "1");
|
|
127
|
+
const anchorRes = await backendFetch(`/api/sessions/${encodeURIComponent(sessionId)}/events?${anchorParams.toString()}`);
|
|
128
|
+
if (anchorRes.status === 404) {
|
|
129
|
+
return errorResponse({
|
|
130
|
+
code: "session_not_found",
|
|
131
|
+
message: `No session found with id ${JSON.stringify(sessionId)}.`,
|
|
132
|
+
fixHint: "Call createSimulatorSession to start a new session.",
|
|
133
|
+
retryable: false,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (anchorRes.ok && anchorRes.data) {
|
|
137
|
+
cursor = anchorRes.data.cursor ?? undefined;
|
|
138
|
+
}
|
|
139
|
+
// If anchor fetch failed (network blip, transient backend issue),
|
|
140
|
+
// proceed with cursor=undefined and accept the small staleness risk
|
|
141
|
+
// for this run — the polling-loop error handler below will surface
|
|
142
|
+
// a real failure on the next iteration.
|
|
143
|
+
}
|
|
144
|
+
let lastSeenStatus;
|
|
145
|
+
while (Date.now() < deadline) {
|
|
146
|
+
const params = new URLSearchParams();
|
|
147
|
+
params.set("filter", "all");
|
|
148
|
+
params.set("limit", "200");
|
|
149
|
+
if (cursor)
|
|
150
|
+
params.set("cursor", cursor);
|
|
151
|
+
const res = await backendFetch(`/api/sessions/${encodeURIComponent(sessionId)}/events?${params.toString()}`);
|
|
152
|
+
if (res.status === 404) {
|
|
153
|
+
return errorResponse({
|
|
154
|
+
code: "session_not_found",
|
|
155
|
+
message: `No session found with id ${JSON.stringify(sessionId)}.`,
|
|
156
|
+
fixHint: "Call createSimulatorSession to start a new session.",
|
|
157
|
+
retryable: false,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
if (!res.ok || !res.data) {
|
|
161
|
+
return errorResponse({
|
|
162
|
+
code: "backend_unreachable",
|
|
163
|
+
message: `Backend events endpoint failed: ${res.errorText ?? `HTTP ${res.status}`}.`,
|
|
164
|
+
fixHint: "Ensure the Extentos backend is reachable.",
|
|
165
|
+
retryable: true,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
lastSeenStatus = res.data.sessionStatus;
|
|
169
|
+
const events = res.data.events ?? [];
|
|
170
|
+
for (const ev of events) {
|
|
171
|
+
if (ev.type !== "assistant.tool_called")
|
|
172
|
+
continue;
|
|
173
|
+
const details = ev.details ?? {};
|
|
174
|
+
const actualName = typeof details.name === "string" ? details.name : null;
|
|
175
|
+
if (actualName !== expectedName)
|
|
176
|
+
continue;
|
|
177
|
+
const actualArgs = details.args && typeof details.args === "object"
|
|
178
|
+
? details.args
|
|
179
|
+
: {};
|
|
180
|
+
if (argsMatch && !argsMatchPartial(actualArgs, argsMatch))
|
|
181
|
+
continue;
|
|
182
|
+
const callId = typeof details.call_id === "string" ? details.call_id : null;
|
|
183
|
+
const occurredAtMs = Date.parse(ev.timestamp);
|
|
184
|
+
return okResponse({
|
|
185
|
+
sessionId,
|
|
186
|
+
matched: true,
|
|
187
|
+
name: expectedName,
|
|
188
|
+
args: actualArgs,
|
|
189
|
+
call_id: callId,
|
|
190
|
+
occurred_at_ms: Number.isFinite(occurredAtMs) ? occurredAtMs : null,
|
|
191
|
+
waitedMs: Date.now() - startedAt,
|
|
192
|
+
summary: `Tool ${expectedName}(${JSON.stringify(actualArgs).slice(0, 80)}) called after ${Date.now() - startedAt}ms${callId ? ` (call_id=${callId})` : ""}.`,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
cursor = res.data.cursor ?? cursor ?? null;
|
|
196
|
+
await sleep(Math.min(POLL_MS, Math.max(0, deadline - Date.now())));
|
|
197
|
+
}
|
|
198
|
+
const argsHint = argsMatch
|
|
199
|
+
? ` matching args ${JSON.stringify(argsMatch).slice(0, 80)}`
|
|
200
|
+
: "";
|
|
201
|
+
return errorResponse({
|
|
202
|
+
code: "tool_not_called",
|
|
203
|
+
message: `Timeout waiting for tool "${expectedName}"${argsHint} after ${timeoutMs}ms. Session status: ${lastSeenStatus ?? "unknown"}.`,
|
|
204
|
+
fixHint: "Check that (a) glasses.assistant.start { ... } is running in the app with this tool registered, (b) injectAssistantUtterance ran first and was delivered (its response shows delivered:true), and (c) the tool description's keywords overlap with the injected utterance (the Mock provider matches by word overlap). Try getEventLog(types:['assistant.user_spoke','assistant.tool_called','assistant.error']) to see what the assistant did instead.",
|
|
205
|
+
retryable: true,
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=assertToolCalled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertToolCalled.js","sourceRoot":"","sources":["../../../src/tools/handlers/assertToolCalled.ts"],"names":[],"mappings":"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"}
|
|
@@ -383,6 +383,21 @@ function buildAndroid(appPackage, libraryVersion, concise, placement, projectPat
|
|
|
383
383
|
purpose: "Defaults to null. The library reads it via reflection at startup; when null the library falls through to pending-mode and auto-binds to whatever session createSimulatorSession provisions (no rebuild between sessions). createSimulatorSession only emits a URL-bake snippet that overwrites this value when auto-bind is impossible (cellular phone, cloud-hosted agent) — in that fallback case, replace null with the quoted URL it returns.",
|
|
384
384
|
requires: "android.buildFeatures.buildConfig = true",
|
|
385
385
|
},
|
|
386
|
+
{
|
|
387
|
+
// F8 (iteration-2 fix): Phase 4 assistant runtime needs BYOK OpenAI key
|
|
388
|
+
// wired through BuildConfig so the customer can call
|
|
389
|
+
// glasses.assistant.setOpenaiApiKey(BuildConfig.OPENAI_API_KEY). The key
|
|
390
|
+
// value lives in local.properties (NOT in tracked source) — the build
|
|
391
|
+
// reads it at config time and bakes the resolved value into the APK.
|
|
392
|
+
// See getCredentialGuide(services: ["openai"]) for the local.properties
|
|
393
|
+
// wiring pattern + secret-storage guidance.
|
|
394
|
+
type: "String",
|
|
395
|
+
name: "OPENAI_API_KEY",
|
|
396
|
+
placeholder: `""`,
|
|
397
|
+
appliedIn: "app/build.gradle.kts",
|
|
398
|
+
purpose: "BYOK OpenAI key for the Phase 4 assistant runtime (glasses.assistant.* with AssistantProvider.OpenAi). Add OPENAI_API_KEY=sk-proj-... to local.properties (gitignored). The standard pattern reads local.properties at Gradle config time + falls back to System.getenv(\"OPENAI_API_KEY\") for CI. **Do NOT have the AI agent write this value into local.properties** — the Claude Code harness echoes file modifications back into the conversation transcript, which would leak the key (see F-meta-2 in shared-context/phase-4-iteration-1-findings.md). The human should add the line themselves. Empty default is fine for sim-only dev / Mock provider testing — only required when starting an AssistantProvider.OpenAi session.",
|
|
399
|
+
requires: "android.buildFeatures.buildConfig = true",
|
|
400
|
+
},
|
|
386
401
|
];
|
|
387
402
|
// F-R3-4: derive counts from the actual arrays — previously hard-coded to
|
|
388
403
|
// "3 Gradle deps, 3 permissions, 1 repository" which disagreed with the
|
|
@@ -589,7 +604,9 @@ function developerInstructionsAndroid(placement, detection) {
|
|
|
589
604
|
step3 +
|
|
590
605
|
" " +
|
|
591
606
|
renderStep +
|
|
592
|
-
" Step 5: Write your handler class(es). For
|
|
607
|
+
" Step 5: Write your handler class(es). **For voice-AI work, the canonical path is Phase 4 `glasses.assistant.start(provider) { tool(name, description) { body -> ToolResult } }`** — the model owns wake/turn-taking/intent/confirmation; you write tool bodies that act on app state. See `getCodeExample(pattern: \"assistant_agent_loop\")` for the full scaffold (wake/sleep state machine, onWake greeting via session.say(), sleepAfterSilence, model-driven endOnIntent, barge-in). Wake mechanism is the developer's choice: voice phrase via `glasses.voice.onPhrase(\"hey x\") { session.wake() }` (canonical), a button tap, a hardware gesture, or any other trigger that calls `session.wake()`. For the OpenAI provider, also call `glasses.assistant.setOpenaiApiKey(BuildConfig.OPENAI_API_KEY)` once at app init — see `getCredentialGuide({ services: [\"openai\"], platform: \"android\" })`. " +
|
|
608
|
+
" For non-AI wake-phrase-only flows (no LLM, simple voice triggers), `glasses.voice.onPhrase(phrase, label, stops) { handler }` is the direct path — same substring-matching + structured-concurrency `stops` semantics as before; phrases auto-appear on the connection page and the simulator's right-rail click-to-fire panel. For other primitives, subscribe directly: `glasses.camera.capturePhoto()`, `glasses.audio.recordDiscrete()`, `glasses.camera.videoFrames()`, etc. `getCodeExample(pattern)` returns full compositions; `getCapabilityGuide(feature)` covers per-primitive call shape + gotchas. " +
|
|
609
|
+
" **The Phase 3 `glasses.conversation.onWake { listen() / speak() / ai.complete() }` runtime is DEPRECATED in v1.4.0 and REMOVED in v2.0.0** — only use it for migration reference. " +
|
|
593
610
|
"Step 6: Update the manifest's `capabilities` array with the SDK feature names your handler uses (e.g. [\"capture_photo\", \"voice_command\", \"speak\"]). " +
|
|
594
611
|
"Step 6b: Call `getPermissions({ capabilities, platform: \"android\" })` and apply the returned `android.manifestEntries` to AndroidManifest.xml. The initial scaffold only declares BLUETOOTH_CONNECT/SCAN + INTERNET; capabilities like capture_photo / record_audio / video_frames imply additional permissions (CAMERA, RECORD_AUDIO, FOREGROUND_SERVICE, FOREGROUND_SERVICE_MICROPHONE) that this step derives. " +
|
|
595
612
|
"Step 7: Call `validateIntegration` to confirm permissions / dependencies / bootstrap wiring before testing.");
|
|
@@ -605,7 +622,9 @@ function developerInstructionsIos(placement) {
|
|
|
605
622
|
return ("Step 1: Apply files[] (the ExtentosBootstrap.swift create plus the manual_patch hint for App.swift), dependencies[], infoPlistAdditions, gitignoreAdditions, and the spmBuildPhase. Replace REPLACE_ME placeholders with Meta Developer Center values. " +
|
|
606
623
|
"Step 2: Wire onOpenURL and scenePhase observers per the App.swift manual_patch. " +
|
|
607
624
|
renderStep +
|
|
608
|
-
" Step 4: Write your handler class(es). For
|
|
625
|
+
" Step 4: Write your handler class(es). **For voice-AI work, the canonical path is Phase 4 `glasses.assistant.start(provider: ...) { tool(name:description:) { body in ToolResult } }`** — the model owns wake/turn-taking/intent/confirmation; you write tool bodies. See `getCodeExample(pattern: \"assistant_agent_loop\")`. Wake mechanism is the developer's choice: voice phrase via `glasses.voice.onPhrase(\"hey x\") { try await session.wake() }` (canonical), a button tap, a gesture. For OpenAi, also call `glasses.assistant.setOpenAiApiKey(...)` once at app init — see `getCredentialGuide({ services: [\"openai\"], platform: \"ios\" })`. " +
|
|
626
|
+
" For non-AI wake-phrase-only flows, `glasses.voice.onPhrase(phrase: ..., label: ..., stops: [...]) { ... }` is the direct path — same substring-matching + structured-concurrency `stops` (withTaskGroup); phrases auto-appear on the connection page + simulator panel. For other primitives, subscribe directly: `glasses.camera.capturePhoto()`, etc. `getCodeExample(pattern)` returns full compositions; `getCapabilityGuide(feature)` covers per-primitive call shape + gotchas. " +
|
|
627
|
+
" **The Phase 3 `glasses.conversation.onWake { ... }` runtime is DEPRECATED in v1.4.0 and REMOVED in v2.0.0** — only use it for migration reference. " +
|
|
609
628
|
"Step 5: Update the manifest's `capabilities` array with the SDK feature names your handler uses (e.g. [\"capture_photo\", \"voice_command\", \"speak\"]). " +
|
|
610
629
|
"Step 5b: Call `getPermissions({ capabilities, platform: \"ios\" })` and apply the returned `ios.plistKeys` to Info.plist. The scaffold's baseline infoPlistAdditions cover the Meta DAT + transport entries; capability-derived keys (NSCameraUsageDescription, NSMicrophoneUsageDescription, NSSpeechRecognitionUsageDescription) come from this call. " +
|
|
611
630
|
"Step 5c: Call `validateIntegration` to confirm permissions / dependencies / bootstrap wiring before testing.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateConnectionModule.js","sourceRoot":"","sources":["../../../src/tools/handlers/generateConnectionModule.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,yDAAyD;AACzD,kFAAkF;AAElF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,sBAAsB,EACtB,yCAAyC,GAC1C,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,2EAA2E;AAC3E,2EAA2E;AAC3E,4DAA4D;AAC5D,MAAM,uBAAuB,GAAG,YAAY,CAAC,YAAY,CAAC;AAS1D,MAAM,aAAa,GAAyB;IAC1C,iBAAiB;IACjB,oBAAoB;IACpB,YAAY;IACZ,aAAa;IACb,UAAU;CACF,CAAC;AAwCX;;;;;;;;GAQG;AACH,SAAS,gCAAgC,CACvC,WAA+B,EAC/B,UAAkB;IAElB,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAE3E,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACpF,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAEzF,IAAI,YAAoB,CAAC;IACzB,IAAI,CAAC;QACH,YAAY,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC5D,CAAC;IAED,uEAAuE;IACvE,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,uEAAuE;IACvE,yEAAyE;IACzE,wEAAwE;IACxE,yEAAyE;IACzE,kEAAkE;IAClE,yEAAyE;IACzE,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAChF,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAEzE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAEtE,uEAAuE;IACvE,wEAAwE;IACxE,6CAA6C;IAC7C,IAAI,WAAW,KAAK,GAAG,UAAU,6BAA6B,EAAE,CAAC;QAC/D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,qBAAqB,UAAU,KAAK,CAAC;IACtD,MAAM,UAAU,GAAG,uBAAuB,UAAU,KAAK,CAAC;IAC1D,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAAE,QAAQ,GAAG,QAAQ,CAAC;SAC5D,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAAE,QAAQ,GAAG,UAAU,CAAC;IAC1E,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,iBAAiB,GAAG;IACxB,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,kDAAkD,EAAE;IACpF,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,2BAA2B,EAAE;IAChE,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAC7C,EAAE,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,wCAAwC,EAAE;IACtE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,mDAAmD,EAAE;CAC/E,CAAC;AAEF,6EAA6E;AAC7E,qFAAqF;AACrF,gEAAgE;AAChE,uDAAuD;AACvD,MAAM,2BAA2B,GAA8B;IAC7D,eAAe,EACb,2BAA2B;QAC3B,iBAAiB;QACjB,sBAAsB;QACtB,0BAA0B;QAC1B,gDAAgD;QAChD,sCAAsC;QACtC,gFAAgF;QAChF,kGAAkG;QAClG,yBAAyB;QACzB,sBAAsB;QACtB,iBAAiB;QACjB,cAAc;QACd,sBAAsB;QACtB,iFAAiF;QACjF,SAAS;QACT,GAAG;IACL,kBAAkB,EAChB,2BAA2B;QAC3B,iBAAiB;QACjB,sBAAsB;QACtB,0BAA0B;QAC1B,sDAAsD;QACtD,sCAAsC;QACtC,gFAAgF;QAChF,kGAAkG;QAClG,yBAAyB;QACzB,sBAAsB;QACtB,iBAAiB;QACjB,cAAc;QACd,sBAAsB;QACtB,iFAAiF;QACjF,SAAS;QACT,GAAG;IACL,sEAAsE;IACtE,mEAAmE;IACnE,sEAAsE;IACtE,yEAAyE;IACzE,uEAAuE;IACvE,oDAAoD;IACpD,UAAU,EACR,+CAA+C;QAC/C,sEAAsE;QACtE,mEAAmE;QACnE,aAAa;QACb,qBAAqB;QACrB,2BAA2B;QAC3B,kCAAkC;QAClC,sDAAsD;QACtD,6FAA6F;QAC7F,8DAA8D;QAC9D,6CAA6C;QAC7C,iBAAiB;QACjB,kCAAkC;QAClC,yDAAyD;QACzD,mGAAmG;QACnG,iEAAiE;QACjE,gDAAgD;QAChD,iBAAiB;QACjB,aAAa;QACb,UAAU;QACV,kBAAkB;QAClB,iGAAiG;QACjG,+CAA+C;QAC/C,qEAAqE;QACrE,SAAS;QACT,GAAG;IACL,WAAW,EACT,oBAAoB;QACpB,oEAAoE;QACpE,2CAA2C;QAC3C,SAAS;QACT,GAAG;IACL,QAAQ,EAAE,sFAAsF;CACjG,CAAC;AAEF,MAAM,uBAAuB,GAA8B;IACzD,eAAe,EACb,qBAAqB;QACrB,kBAAkB;QAClB,iEAAiE;QACjE,wDAAwD;QACxD,+CAA+C;QAC/C,aAAa;QACb,GAAG;IACL,kBAAkB,EAChB,UAAU;QACV,8DAA8D;QAC9D,KAAK;QACL,yDAAyD;QACzD,gDAAgD;QAChD,6CAA6C;QAC7C,GAAG;IACL,UAAU,EACR,aAAa;QACb,kEAAkE;QAClE,gDAAgD;QAChD,uFAAuF;QACvF,GAAG;IACL,WAAW,EACT,0CAA0C;QAC1C,kFAAkF;IACpF,QAAQ,EAAE,sFAAsF;CACjG,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,GAAG,EAAE,yCAAyC;IAC9C,QAAQ,EAAE,eAAe;IACzB,WAAW,EACT,+LAA+L;CAClM,CAAC;AAEF,MAAM,UAAU,8BAA8B,CAAC,GAAY;IACzD,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzB,8EAA8E;IAC9E,4EAA4E;IAC5E,4EAA4E;IAC5E,uEAAuE;IACvE,uDAAuD;IACvD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACpB,OAAO,UAAU,CAAC;YAChB,MAAM,EAAE,iBAAiB;YACzB,iBAAiB,EAAE;gBACjB,WAAW,EACT,oLAAoL;gBACtL,QAAQ,EAAE,4DAA4D;gBACtE,cAAc,EAAE,iBAAiB;gBACjC,oBAAoB,EAAE,sBAAsB;aAC7C;YACD,qBAAqB,EACnB,2VAA2V;YAC7V,OAAO,EACL,yGAAyG;SAC5G,CAAC,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,uBAAuB,CAAC;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC;IAElD,MAAM,OAAO,GACX,IAAI,CAAC,QAAQ,KAAK,SAAS;QACzB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC;QAC1F,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAEzE,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,SAAS,CAAC,GAAY;IAC7B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO;YACL,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,uDAAuD;gBAChE,OAAO,EAAE,8CAA8C;gBACvD,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAE3C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACjD,OAAO;YACL,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,4CAA4C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI;gBACjF,OAAO,EAAE,wCAAwC;gBACjD,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;QAClC,OAAO;YACL,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,8CAA8C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI;gBACtF,OAAO,EAAE,gCAAgC;gBACzC,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,OAAO;YACL,KAAK,EAAE,aAAa,CAAC;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,wDAAwD;gBACjE,OAAO,EAAE,iEAAiE;gBAC1E,SAAS,EAAE,KAAK;aACjB,CAAC;SACH,CAAC;IACJ,CAAC;IAED,IAAI,SAAgC,CAAC;IACrC,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAsB,CAAC,EAAE,CAAC;YAC7F,OAAO;gBACL,KAAK,EAAE,aAAa,CAAC;oBACnB,IAAI,EAAE,mBAAmB;oBACzB,OAAO,EAAE,4BAA4B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI;oBACvG,OAAO,EACL,oLAAoL;oBACtL,SAAS,EAAE,KAAK;iBACjB,CAAC;aACH,CAAC;QACJ,CAAC;QACD,SAAS,GAAG,GAAG,CAAC,SAAsB,CAAC;IACzC,CAAC;IAED,MAAM,WAAW,GACf,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAC/D,CAAC,CAAC,GAAG,CAAC,WAAW;QACjB,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,IAAI,GAAS;QACjB,QAAQ;QACR,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,cAAc,EAAE,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;QACvF,cAAc,EACZ,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,GAAG,CAAC,cAAc,KAAK,UAAU;YACnE,CAAC,CAAC,GAAG,CAAC,cAAc;YACpB,CAAC,CAAC,SAAS;QACf,SAAS;QACT,WAAW;KACZ,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CACnB,UAAkB,EAClB,cAAsB,EACtB,OAAgB,EAChB,SAAoB,EACpB,WAA+B;IAE/B,MAAM,SAAS,GAAG,gCAAgC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,qBAAqB,UAAU,gCAAgC,CAAC;IACtF,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC;IACrF,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,kBAAkB,CACjC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,EACnD,MAAM,CACP,CAAC;IACF,6EAA6E;IAC7E,0EAA0E;IAC1E,uEAAuE;IACvE,oEAAoE;IACpE,wBAAwB;IACxB,QAAQ,CAAC,cAAc,GAAG;QACxB;YACE,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,mBAAmB;YAC7B,IAAI,EAAE,oBAAoB,CAAC,gBAAgB,CAAC;YAC5C,WAAW,EAAE,MAAM;YACnB,eAAe,EAAE,0BAA0B;SAC5C;KACF,CAAC;IAEF,MAAM,KAAK,GAAgF;QACzF,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE;KACrE,CAAC;IACF,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAClC,gEAAgE;QAChE,qEAAqE;QACrE,gEAAgE;QAChE,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,IAAI,qBAAqB,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC;QAC5G,KAAK,CAAC,IAAI,CAAC;YACT,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE,yCAAyC,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC;SAC9F,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,2EAA2E;IAC3E,qEAAqE;IACrE,+DAA+D;IAC/D,MAAM,WAAW,GACf,SAAS,KAAK,iBAAiB;QAC/B,SAAS,KAAK,oBAAoB;QAClC,SAAS,KAAK,YAAY,CAAC;IAC7B,MAAM,YAAY,GAAyE;QACzF,EAAE,QAAQ,EAAE,wBAAwB,cAAc,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE;QACvF,EAAE,QAAQ,EAAE,2BAA2B,cAAc,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE;QAC1F,2EAA2E;QAC3E,qEAAqE;QACrE,iEAAiE;KAClE,CAAC;IACF,IAAI,WAAW,EAAE,CAAC;QAChB,YAAY,CAAC,IAAI,CAAC;YAChB,QAAQ,EAAE,8CAA8C;YACxD,aAAa,EAAE,gBAAgB;YAC/B,OAAO,EAAE,oBAAoB,SAAS,sGAAsG;SAC7I,CAAC,CAAC;IACL,CAAC;IACD,MAAM,WAAW,GAAG;QAClB,sCAAsC;QACtC,mCAAmC;QACnC,6BAA6B;KAC9B,CAAC;IACF,MAAM,YAAY,GAAmC;QACnD;YACE,+DAA+D;YAC/D,iEAAiE;YACjE,gEAAgE;YAChE,kEAAkE;YAClE,gEAAgE;YAChE,+DAA+D;YAC/D,+DAA+D;YAC/D,EAAE;YACF,8DAA8D;YAC9D,+DAA+D;YAC/D,2DAA2D;YAC3D,QAAQ,EACN,ydAAyd;YAC3d,SAAS,EAAE,qBAAqB;YAChC,OAAO,EACL,2bAA2b;YAC7b,mBAAmB,EAAE;gBACnB,OAAO,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC;gBAC5C,mBAAmB,EAAE,CAAC,iBAAiB,EAAE,cAAc,CAAC;gBACxD,IAAI,EAAE,qVAAqV;aAC5V;SACF;KACF,CAAC;IACF,MAAM,iBAAiB,GAAG;QACxB;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,sBAAsB;YAC5B,WAAW,EAAE,MAAM;YACnB,SAAS,EAAE,sBAAsB;YACjC,OAAO,EACL,mbAAmb;YACrb,QAAQ,EAAE,0CAA0C;SACrD;KACF,CAAC;IAEF,0EAA0E;IAC1E,wEAAwE;IACxE,uEAAuE;IACvE,oEAAoE;IACpE,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC;IACrC,MAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC;IACtC,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC;IACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAC1C,MAAM,WAAW,GACf,GAAG,QAAQ,cAAc,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI;QACtD,GAAG,SAAS,cAAc,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI;QACxD,GAAG,SAAS,WAAW,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI;QAC5D,GAAG,QAAQ,qBAAqB,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAE/D,MAAM,OAAO,GAA4B;QACvC,KAAK;QACL,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC/D,YAAY;QACZ,YAAY;QACZ,iBAAiB;QACjB,WAAW;QACX,SAAS;QACT,kBAAkB,EAAE,2BAA2B,CAAC,SAAS,CAAC;QAC1D,iBAAiB,EAAE;YACjB,MAAM,EAAE,SAAS;YACjB,cAAc,EAAE,iBAAiB;YACjC,oBAAoB,EAAE,sBAAsB;SAC7C;QACD,qBAAqB,EAAE,4BAA4B,CAAC,SAAS,EAAE,SAAS,CAAC;QACzE,oBAAoB,EAAE,SAAS;QAC/B,OAAO,EACL,SAAS,CAAC,IAAI,KAAK,UAAU;YAC3B,CAAC,CAAC,uBAAuB,cAAc,oBAAoB,UAAU,gBAAgB,SAAS,oCAAoC,SAAS,CAAC,WAAW,4FAA4F,SAAS,CAAC,QAAQ,IAAI,uBAAuB,0CAA0C,WAAW,EAAE;YACvV,CAAC,CAAC,uBAAuB,cAAc,oBAAoB,UAAU,gBAAgB,SAAS,gEAAgE,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,4GAA4G,EAAE;KAClT,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC;QACtD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,oBAAoB,CAAC;QAC5D,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC;QACjD,MAAM,KAAK,GAAG,UAAU;YACtB,CAAC,CAAC,qFAAsF,SAAwC,CAAC,WAAW,wLAAwL;YACpU,CAAC,CAAC,yBAAyB,UAAU,yEAAyE,CAAC;QACjH,OAAO,CAAC,gBAAgB;YACtB,qVAAqV;gBACrV,IAAI;gBACJ,6oBAA6oB;gBAC7oB,kkBAAkkB;gBAClkB,ofAAof;gBACpf,gEAAgE,MAAM,yCAAyC,cAAc,6EAA6E,MAAM,8BAA8B,SAAS,uBAAuB,MAAM,6EAA6E,MAAM,2IAA2I,SAAS,qBAAqB,MAAM,6HAA6H,MAAM,yBAAyB;gBAClrB,CAAC,UAAU;oBACT,CAAC,CAAC,8CAA+C,SAAwC,CAAC,WAAW,sMAAsM;oBAC3S,CAAC,CAAC,EAAE,CAAC;gBACP,yZAAyZ;gBACzZ,+CAA+C;gBAC/C,okBAAokB;gBACpkB,6CAA6C;gBAC7C,iCAAiC;gBACjC,KAAK;gBACL,0GAA0G;gBAC1G,qHAAqH,CAAC;QACxH,OAAO,CAAC,KAAK;YACX,6sBAA6sB,CAAC;IACltB,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CACf,UAAkB,EAClB,cAAsB,EACtB,OAAgB,EAChB,SAAoB;IAEpB,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,WAAW,UAAU,mCAAmC,CAAC;IAC/E,MAAM,YAAY,GAAG,WAAW,UAAU,IAAI,UAAU,WAAW,CAAC;IACpE,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,kBAAkB,CACjC,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,EAC/C,MAAM,CACP,CAAC;IACF,2EAA2E;IAC3E,2EAA2E;IAC3E,uEAAuE;IACvE,kCAAkC;IAClC,QAAQ,CAAC,cAAc,GAAG;QACxB;YACE,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,mBAAmB;YAC7B,IAAI,EAAE,oBAAoB,CAAC,gBAAgB,CAAC;YAC5C,WAAW,EAAE,MAAM;YACnB,eAAe,EAAE,0BAA0B;SAC5C;KACF,CAAC;IAEF,2EAA2E;IAC3E,sEAAsE;IACtE,yEAAyE;IACzE,0EAA0E;IAC1E,4BAA4B;IAC5B,MAAM,KAAK,GAAG;QACZ,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,QAAiB,EAAE,OAAO,EAAE,gBAAgB,EAAE;QAC7E,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,cAAuB,EAAE,OAAO,EAAE,qBAAqB,CAAC,UAAU,CAAC,EAAE;KACpG,CAAC;IAEF,MAAM,OAAO,GAA4B;QACvC,KAAK;QACL,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,QAAQ,EAAE;QAC/D,YAAY,EAAE;YACZ;gBACE,OAAO,EAAE,2CAA2C;gBACpD,OAAO,EAAE,cAAc;gBACvB,QAAQ,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,cAAc,CAAC;aACvD;SACF;QACD,aAAa,EAAE;YACb,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,WAAW;YAClB,MAAM,EACJ,qMAAqM;YACvM,OAAO,EACL,gKAAgK;SACnK;QACD,kBAAkB,EAAE,CAAC,wBAAwB,CAAC;QAC9C,WAAW,EAAE,EAAE;QACf,kBAAkB,EAAE;YAClB,KAAK,EAAE;gBACL,gBAAgB,EAAE,eAAe;gBACjC,SAAS,EAAE,YAAY;gBACvB,WAAW,EAAE,YAAY;gBACzB,MAAM,EAAE,YAAY;aACrB;YACD,gBAAgB,EAAE;gBAChB,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,YAAY,CAAC,EAAE;aACpE;YACD,2BAA2B,EAAE,CAAC,YAAY,CAAC;YAC3C,qCAAqC,EAAE,CAAC,sBAAsB,CAAC;YAC/D,iBAAiB,EAAE,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;YACtF,wBAAwB,EAAE,qDAAqD;YAC/E,4BAA4B,EAAE,6DAA6D;YAC3F,mCAAmC,EAAE,sDAAsD;YAC3F,iCAAiC,EAAE,qDAAqD;YACxF,+DAA+D;YAC/D,mEAAmE;YACnE,kEAAkE;YAClE,oEAAoE;YACpE,mEAAmE;YACnE,oEAAoE;YACpE,mEAAmE;YACnE,sBAAsB,EAAE;gBACtB,kBAAkB,EAAE;oBAClB,SAAS,EAAE,EAAE,kCAAkC,EAAE,IAAI,EAAE;oBACvD,WAAW,EAAE,EAAE,kCAAkC,EAAE,IAAI,EAAE;iBAC1D;aACF;SACF;QACD,SAAS;QACT,kBAAkB,EAAE,uBAAuB,CAAC,SAAS,CAAC;QACtD,iBAAiB,EAAE;YACjB,MAAM,EAAE,SAAS;YACjB,cAAc,EAAE,iBAAiB;YACjC,oBAAoB,EAAE,sBAAsB;SAC7C;QACD,qBAAqB,EAAE,wBAAwB,CAAC,SAAS,CAAC;QAC1D,OAAO,EAAE,uBAAuB,cAAc,mBAAmB,UAAU,oBAAoB,SAAS,4KAA4K;KACrR,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACtD,OAAO,CAAC,gBAAgB;YACtB,sQAAsQ;gBACtQ,IAAI;gBACJ,mCAAmC,QAAQ,mDAAmD,QAAQ,0PAA0P;gBAChW,oYAAoY;gBACpY,kEAAkE,cAAc,2FAA2F;gBAC3K,gJAAgJ;gBAChJ,kDAAkD;gBAClD,oCAAoC;gBACpC,YAAY,UAAU,+GAA+G;gBACrI,gFAAgF;gBAChF,qFAAqF;gBACrF,qBAAqB,CAAC;QACxB,OAAO,CAAC,KAAK;YACX,wJAAwJ;gBACxJ,wWAAwW;gBACxW,sMAAsM,CAAC;IAC3M,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,6EAA6E;AAC7E,4EAA4E;AAC5E,0EAA0E;AAC1E,SAAS,4BAA4B,CACnC,SAAoB,EACpB,SAAsC;IAEtC,MAAM,UAAU,GACd,SAAS,KAAK,UAAU;QACtB,CAAC,CAAC,iKAAiK;QACnK,CAAC,CAAC,wCAAwC,SAAS,yGAAyG,CAAC;IACjK,MAAM,KAAK,GACT,SAAS,CAAC,IAAI,KAAK,UAAU;QAC3B,CAAC,CAAC,mFAAmF,SAAS,CAAC,WAAW,iSAAiS;QAC3Y,CAAC,CAAC,+HAA+H,CAAC;IACtI,uEAAuE;IACvE,wEAAwE;IACxE,0CAA0C;IAC1C,MAAM,WAAW,GACf,SAAS,KAAK,iBAAiB;QAC/B,SAAS,KAAK,oBAAoB;QAClC,SAAS,KAAK,YAAY,CAAC;IAC7B,MAAM,KAAK,GAAG,WAAW;QACvB,CAAC,CAAC,eAAe,SAAS,6HAA6H;QACvJ,CAAC,CAAC,WAAW,SAAS,KAAK,aAAa,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,mCAAmC,oCAAoC,CAAC;IAC5J,yEAAyE;IACzE,oEAAoE;IACpE,2EAA2E;IAC3E,qEAAqE;IACrE,kEAAkE;IAClE,8EAA8E;IAC9E,OAAO,CACL,6YAA6Y;QAC7Y,6GAA6G;QAC7G,gHAAgH;QAChH,KAAK;QACL,GAAG;QACH,KAAK;QACL,GAAG;QACH,UAAU;QACV,+sBAA+sB;QAC/sB,4JAA4J;QAC5J,sZAAsZ;QACtZ,6GAA6G,CAC9G,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAAC,SAAoB;IACpD,MAAM,UAAU,GACd,SAAS,KAAK,UAAU;QACtB,CAAC,CAAC,sKAAsK;QACxK,CAAC,CAAC,wCAAwC,SAAS,yGAAyG,CAAC;IACjK,6EAA6E;IAC7E,yEAAyE;IACzE,2EAA2E;IAC3E,+EAA+E;IAC/E,OAAO,CACL,yPAAyP;QACzP,kFAAkF;QAClF,UAAU;QACV,mvBAAmvB;QACnvB,4JAA4J;QAC5J,0VAA0V;QAC1V,8GAA8G,CAC/G,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"generateConnectionModule.js","sourceRoot":"","sources":["../../../src/tools/handlers/generateConnectionModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCredentialGuide.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getCredentialGuide.ts"],"names":[],"mappings":"AASA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"getCredentialGuide.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getCredentialGuide.ts"],"names":[],"mappings":"AASA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAiJ5E,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAcjE"}
|
|
@@ -39,10 +39,11 @@ const PROVIDER_GUIDES = {
|
|
|
39
39
|
steps: [
|
|
40
40
|
"Sign in at platform.openai.com and add billing.",
|
|
41
41
|
"Navigate to API Keys → Create new secret key.",
|
|
42
|
-
"Set the desired model scopes for the key.",
|
|
43
|
-
"Store as OPENAI_API_KEY in your secrets store (never commit to git).",
|
|
44
|
-
"**Phase
|
|
45
|
-
"**
|
|
42
|
+
"Set the desired model scopes for the key (Realtime API + standard chat completions both fine).",
|
|
43
|
+
"Store as OPENAI_API_KEY in your secrets store (never commit to git). **F-meta-2 IMPORTANT:** do NOT have your AI coding agent write this value into `local.properties` — the Claude Code harness echoes file modifications back into the conversation transcript, which leaks the key. Add the line yourself in your editor (or export the env var); use the standard local.properties → BuildConfig wiring below to surface it at runtime.",
|
|
44
|
+
"**Phase 4 assistant runtime wiring (canonical)** — for apps using `glasses.assistant.start { ... }` (the Phase 4 voice-AI runtime that owns wake/turn-taking/intent), call `glasses.assistant.setOpenaiApiKey(BuildConfig.OPENAI_API_KEY)` (Android) or `glasses.assistant.setOpenAiApiKey(Secrets.openAiKey)` (iOS) once at app init, AFTER `ExtentosGlasses.create(...)` returns. The key flows DIRECT from device → wss://api.openai.com/v1/realtime via the WS Authorization header (no Extentos proxy — BYOK contract). Never logged, never persisted by the library. See `getCapabilityGuide(feature: \"assistant_runtime\")` for the full lifecycle.",
|
|
45
|
+
"**Phase 3 conversation runtime wiring (DEPRECATED in v1.4.0; REMOVED in v2.0.0)** — only for legacy apps still on `glasses.conversation` / `glasses.ai`: `glasses.ai?.setOpenaiApiKey(BuildConfig.OPENAI_API_KEY)`. Same BYOK contract. Migrate to the Phase 4 wiring above for any new code.",
|
|
46
|
+
"**Legacy customer-side wiring** (apps using BYOK_ANTHROPIC-style hand-rolled HTTP clients) — paste the key into your client constructor; the `glasses.assistant` / `glasses.ai` wiring above only applies to apps using the respective runtime.",
|
|
46
47
|
],
|
|
47
48
|
docsUrl: "https://platform.openai.com/docs/quickstart",
|
|
48
49
|
},
|
|
@@ -159,7 +160,26 @@ function buildMetaCredentials(platform) {
|
|
|
159
160
|
keys: ["MWDAT.MetaAppID", "MWDAT.ClientToken", "MWDAT.TeamID", "MWDAT.AppLinkURLScheme"],
|
|
160
161
|
example: `<key>MWDAT</key>\n<dict>\n <key>MetaAppID</key><string><your Meta App ID></string>\n <key>ClientToken</key><string><your Client Token></string>\n <key>TeamID</key><string>NKSJ4DJ375</string>\n <key>AppLinkURLScheme</key><string>yourapp://</string>\n</dict>`,
|
|
161
162
|
};
|
|
162
|
-
|
|
163
|
+
// F7 (iteration-2): `required: true` was misleading. Sim-mode dev on an
|
|
164
|
+
// Android emulator works WITHOUT real Meta DAT credentials — the
|
|
165
|
+
// simulator handles all the transport without going through real glasses.
|
|
166
|
+
// Customer-agents in iteration-1-style testing would bounce off Meta's
|
|
167
|
+
// developer-portal friction if they tried to follow these steps before
|
|
168
|
+
// they had hardware.
|
|
169
|
+
//
|
|
170
|
+
// - required: kept true for backwards compatibility (existing tooling
|
|
171
|
+
// reads this field)
|
|
172
|
+
// - requiredScope: new field — "real_hardware_only" means sim-mode works
|
|
173
|
+
// without these credentials; only follow the steps when you're ready
|
|
174
|
+
// to flash a build onto actual Ray-Bans
|
|
175
|
+
// - scopeNote: human-readable banner; surface in tool output
|
|
176
|
+
return {
|
|
177
|
+
required: true,
|
|
178
|
+
requiredScope: "real_hardware_only",
|
|
179
|
+
scopeNote: "Meta DAT credentials are only needed for builds running on actual Ray-Ban Meta hardware. Sim-mode development (Android emulator / iOS simulator + the Extentos browser sim) works WITHOUT them — the simulator handles all transport. Skip these steps until you're ready for the hardware-validation milestone. For sim-only dev, you only need the BYOK API key for your AI provider (see serviceCredentials below).",
|
|
180
|
+
steps,
|
|
181
|
+
configChange,
|
|
182
|
+
};
|
|
163
183
|
}
|
|
164
184
|
function buildServiceGuide(service, handlers, platform, singletonLink) {
|
|
165
185
|
// F-DOGFOOD-F45 (2026-05-12): when exactly ONE handler is provided AND
|
|
@@ -307,7 +327,14 @@ function guessServiceForHandler(name) {
|
|
|
307
327
|
function buildSummary(platform, meta, services) {
|
|
308
328
|
const svcCount = services.length;
|
|
309
329
|
const withHandlers = services.filter((s) => s.forHandlers.length > 0).length;
|
|
310
|
-
|
|
330
|
+
// F7: convey scope so agents don't lead the dev through Meta DAT registration
|
|
331
|
+
// before they need it.
|
|
332
|
+
const metaScope = meta.requiredScope === "real_hardware_only"
|
|
333
|
+
? "required for real-hardware builds only (sim-mode works without)"
|
|
334
|
+
: meta.required
|
|
335
|
+
? "required"
|
|
336
|
+
: "not required";
|
|
337
|
+
return `Credential guide for ${platform}: Meta DAT ${metaScope} (${meta.steps.length} steps). ${svcCount} BYOK service${svcCount === 1 ? "" : "s"}${withHandlers ? ` (${withHandlers} handler-linked)` : ""}. Keys are stored in platform-local secure storage — the Extentos library never proxies or relays them. See keyStorage for storage best practices (${platform === "android" ? "local.properties for dev, env vars for CI" : "xcconfig with env-var injection"}). **F-meta-2 warning:** do NOT have your AI coding agent write API key values into local.properties / xcconfig / Info.plist — agent-driven file edits leak through the conversation transcript via the Claude Code harness's file-modification echo. Add secret values by hand in your editor.`;
|
|
311
338
|
}
|
|
312
339
|
function buildKeyStorageGuidance(platform) {
|
|
313
340
|
if (platform === "android") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCredentialGuide.js","sourceRoot":"","sources":["../../../src/tools/handlers/getCredentialGuide.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,+BAA+B;AAC/B,EAAE;AACF,sEAAsE;AACtE,sEAAsE;AACtE,iEAAiE;AACjE,mEAAmE;AACnE,oCAAoC;AAEpC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAe5E,MAAM,cAAc,GAAc;IAChC,WAAW;IACX,QAAQ;IACR,qBAAqB;IACrB,kBAAkB;IAClB,eAAe;IACf,OAAO;IACP,iBAAiB;IACjB,aAAa;IACb,aAAa;IACb,QAAQ;CACT,CAAC;AAUF,MAAM,eAAe,GAAsD;IACzE,SAAS,EAAE;QACT,KAAK,EAAE,WAAW;QAClB,SAAS,EAAE,6CAA6C;QACxD,OAAO,EAAE,mBAAmB;QAC5B,KAAK,EAAE;YACL,8DAA8D;YAC9D,+CAA+C;YAC/C,sCAAsC;YACtC,yEAAyE;SAC1E;QACD,OAAO,EAAE,mDAAmD;KAC7D;IACD,MAAM,EAAE;QACN,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,sCAAsC;QACjD,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE;YACL,iDAAiD;YACjD,+CAA+C;YAC/C,
|
|
1
|
+
{"version":3,"file":"getCredentialGuide.js","sourceRoot":"","sources":["../../../src/tools/handlers/getCredentialGuide.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getProductionChecklist.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getProductionChecklist.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"getProductionChecklist.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/getProductionChecklist.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA6B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAmF5E,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CA8PrE"}
|
|
@@ -38,6 +38,14 @@ const HARDWARE_VERIFY_CAPS = new Set([
|
|
|
38
38
|
"conversation_listen",
|
|
39
39
|
"conversation_speak",
|
|
40
40
|
"conversation_ai_complete",
|
|
41
|
+
// Phase 4 assistant runtime — same reasoning. The assistant.start
|
|
42
|
+
// path exercises the BT HFP mic-input + speaker-output, the WebSocket
|
|
43
|
+
// to the AI provider, and tool dispatch under real-world conditions.
|
|
44
|
+
// Synthesis #3 makes real-hw validation a v2.0.0 gate.
|
|
45
|
+
"assistant_runtime",
|
|
46
|
+
"assistant_start",
|
|
47
|
+
"assistant_tool",
|
|
48
|
+
"assistant_provider_openai",
|
|
41
49
|
]);
|
|
42
50
|
// Phase 3 conversation runtime capabilities — when ANY of these are
|
|
43
51
|
// declared, a dedicated Conversation Runtime Setup step fires (manifest
|
|
@@ -49,6 +57,16 @@ const CONVERSATION_RUNTIME_CAPS = new Set([
|
|
|
49
57
|
"conversation_speak",
|
|
50
58
|
"conversation_ai_complete",
|
|
51
59
|
]);
|
|
60
|
+
// Phase 4 assistant runtime capabilities — when ANY of these are
|
|
61
|
+
// declared, a dedicated Assistant Runtime Setup step fires (BYOK key
|
|
62
|
+
// + tool description hygiene + Mock-provider test pass + real-hw
|
|
63
|
+
// validation per synthesis #3 v2.0.0 gate).
|
|
64
|
+
const ASSISTANT_RUNTIME_CAPS = new Set([
|
|
65
|
+
"assistant_runtime",
|
|
66
|
+
"assistant_start",
|
|
67
|
+
"assistant_tool",
|
|
68
|
+
"assistant_provider_openai",
|
|
69
|
+
]);
|
|
52
70
|
export function handleGetProductionChecklist(raw) {
|
|
53
71
|
const parsed = parseArgs(raw);
|
|
54
72
|
if ("error" in parsed)
|
|
@@ -63,6 +81,7 @@ export function handleGetProductionChecklist(raw) {
|
|
|
63
81
|
const ios = deriveIosFromCapabilities(capabilities);
|
|
64
82
|
const metaDat = deriveMetaDatFromCapabilities(capabilities);
|
|
65
83
|
const usesConversationRuntime = [...capsSet].some((c) => CONVERSATION_RUNTIME_CAPS.has(c));
|
|
84
|
+
const usesAssistantRuntime = [...capsSet].some((c) => ASSISTANT_RUNTIME_CAPS.has(c));
|
|
66
85
|
const steps = [];
|
|
67
86
|
// 1. Meta Developer Account
|
|
68
87
|
steps.push({
|
|
@@ -105,8 +124,11 @@ export function handleGetProductionChecklist(raw) {
|
|
|
105
124
|
description: `Wire BYOK API keys for ${handlers.length} handler${handlers.length === 1 ? "" : "s"}.`,
|
|
106
125
|
status: "needed",
|
|
107
126
|
details: "Each declared handler is expected to call a third-party AI / vision / translation service. Production builds must not ship with placeholder or in-simulator proxy credentials." +
|
|
127
|
+
(usesAssistantRuntime
|
|
128
|
+
? " **Phase 4 assistant runtime apps** need the OpenAI BYOK key wired via `glasses.assistant.setOpenaiApiKey(key)` at app init for `glasses.assistant.start(provider = AssistantProvider.OpenAi(...))` to work — see getCredentialGuide(service: \"openai\"). Key flows direct device → openai.com via the WebSocket Authorization header; Extentos backend never sees it."
|
|
129
|
+
: "") +
|
|
108
130
|
(usesConversationRuntime
|
|
109
|
-
? " **Phase 3 conversation runtime apps** need the OpenAI BYOK key wired via `glasses.ai.setOpenaiApiKey(key)` at app init for `glasses.ai.complete(prompt)` to work — see getCredentialGuide(service: \"openai\")."
|
|
131
|
+
? " **Phase 3 conversation runtime apps** need the OpenAI BYOK key wired via `glasses.ai.setOpenaiApiKey(key)` at app init for `glasses.ai.complete(prompt)` to work — see getCredentialGuide(service: \"openai\"). NOTE: this API is DEPRECATED in v1.4.0 and REMOVED in v2.0.0 — migrate to `glasses.assistant.setOpenaiApiKey(key)` per docs/migration/phase-3-to-phase-4.md."
|
|
110
132
|
: ""),
|
|
111
133
|
fix: "Call getCredentialGuide with the BYOK services to get per-provider setup steps, then wire secrets via platform-local secure storage (Android resValue/keystore, iOS Keychain/xcconfig).",
|
|
112
134
|
affectedHandlers: handlers,
|
|
@@ -134,6 +156,29 @@ export function handleGetProductionChecklist(raw) {
|
|
|
134
156
|
: { file: "extentos.manifest.json", hint: "conversation.stt.provider, conversation.tts.{provider, voice}, conversation.model" },
|
|
135
157
|
});
|
|
136
158
|
}
|
|
159
|
+
// 4c. Phase 4 Assistant Runtime Setup — only if the app declared any
|
|
160
|
+
// assistant_* capability. Four pre-ship gates that the simulator
|
|
161
|
+
// setup doesn't enforce:
|
|
162
|
+
// (a) OpenAI BYOK key wired (covered by step 4, cross-linked).
|
|
163
|
+
// (b) Tool descriptions are written for the AI (not the engineer)
|
|
164
|
+
// — quality matters; the model picks tools from descriptions.
|
|
165
|
+
// (c) Mock provider tests pass via injectAssistantUtterance +
|
|
166
|
+
// assertToolCalled (the agent-driven E2E loop).
|
|
167
|
+
// (d) Real-hardware validation done before declaring production-
|
|
168
|
+
// ready (synthesis #3 — v2.0.0 gate).
|
|
169
|
+
if (usesAssistantRuntime) {
|
|
170
|
+
steps.push({
|
|
171
|
+
category: "Phase 4 Assistant Runtime Setup",
|
|
172
|
+
description: "Validate `glasses.assistant` runtime setup — BYOK key, tool description quality, Mock-provider tests, real-hardware smoke.",
|
|
173
|
+
status: "needed",
|
|
174
|
+
details: "The Phase 4 assistant runtime (`glasses.assistant.start(provider) { tool(name, description) { body } }`) needs four things the simulator setup doesn't enforce: (1) `glasses.assistant.setOpenaiApiKey(BYOK)` wired at app init (cross-link to step 4); (2) tool descriptions written for the AI — be specific about WHEN to call (\"Take a photo when the user asks to capture a moment\") not WHAT the tool does internally (\"Captures imagery via the camera SDK\"); the model picks from these descriptions alone; (3) each tool exercised end-to-end via the agent-test loop (`injectAssistantUtterance` + `assertToolCalled`) — Mock provider for deterministic CI, OpenAi provider for end-to-end smoke; (4) real-hardware validation on actual Ray-Bans before declaring production-ready (synthesis #3 — gates v2.0.0 ship). PII note: Phase 4 events DO carry verbatim transcripts in `assistant.user_spoke` / `assistant.assistant_spoke` (different from Phase 3 which stripped text) because BYOK flows direct device → openai.com without touching Extentos backend — customer apps own their privacy disclosure for assistant telemetry.",
|
|
175
|
+
fix: "1) At app init: `glasses.assistant.setOpenaiApiKey(BuildConfig.OPENAI_API_KEY)` (Android) or `glasses.assistant.setOpenAiApiKey(Secrets.openAiKey)` (iOS). 2) Review each tool() call's description — make it answer \"when should the AI call this?\" verbatim. 3) For each tool, write an agent test: `createSimulatorSession` → `injectAssistantUtterance({ text: 'expected user utterance' })` → `assertToolCalled({ name: 'expected_tool_name', timeoutMs: 5000 })`. 4) Before customer ship, run the full handler on real Ray-Bans + a phone. Walk through 5-10 voice interactions, watching for the three sim-fidelity buckets (audio character, hardware timing, hardware failure modes — see searchDocs(topic: 'simulator_fidelity')). Full setup snippet: getCodeExample(pattern: \"assistant_agent_loop\").",
|
|
176
|
+
codeChange: {
|
|
177
|
+
file: platform === "android" ? "Application.onCreate / ExtentosBootstrap.kt" : "App.init / ExtentosBootstrap.swift",
|
|
178
|
+
hint: "glasses.assistant.setOpenaiApiKey(...) + glasses.assistant.start(provider) { tool(...) }",
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
}
|
|
137
182
|
// 5. Permissions Audit — always
|
|
138
183
|
const permCount = platform === "android" ? android.permissions.length : ios.plistKeys.length;
|
|
139
184
|
steps.push({
|
|
@@ -194,10 +239,16 @@ export function handleGetProductionChecklist(raw) {
|
|
|
194
239
|
status: "needed",
|
|
195
240
|
details: `App uses: ${hardwareVerifyCaps.join(", ")}. ` +
|
|
196
241
|
"Behavior under real SCO routing, real recognizer engines (SpeechRecognizer / SFSpeechRecognizer), thermal limits, and BT route changes can only be verified on hardware. During the test, watch getEventLog(filter: \"voice\") to confirm transcripts come through, no transport.error events surface, and the relevant operations complete cleanly." +
|
|
242
|
+
(usesAssistantRuntime
|
|
243
|
+
? " **Phase 4 assistant runtime apps**: synthesis #3 makes this gate load-bearing for v2.0.0 — at least one architecture must be dogfooded on real Ray-Bans with audio audible before the v2.0.0 cascaded-deletion ships. Watch for the three sim-fidelity buckets: (A) audio character — does the model still pick tools reliably with the noisier HFP capture vs the sim's wide-band mic?; (B) hardware timing — first-utterance HFP profile switch (~200-500 ms), A2DP↔HFP music collision; (C) hardware failure modes — BT range loss, incoming-call interruption, battery drain (~30 min HFP ceiling), thermal throttling. Confirm the assistant.* event sequence in getEventLog matches the sim test (assistant.session_started → user_spoke → tool_called → tool_result → assistant_spoke). See searchDocs(topic: \"simulator_fidelity\") for the contract."
|
|
244
|
+
: "") +
|
|
197
245
|
(usesConversationRuntime
|
|
198
246
|
? " **Phase 3 conversation runtime apps**: also confirm the symmetric A10 lifecycle event pairs (`conversation.handler_started`/`handler_finished`, `conversation.turn_started`/`turn_ended`) land in the log per handler invocation, and that `conversation.error` doesn't surface (network/STT/TTS/LLM failures all show up there). The simulator sim's right-rail ConversationPanel is the visual equivalent — green active-handler card + listening pulse → expected; red error rows → investigate."
|
|
199
247
|
: ""),
|
|
200
248
|
fix: "Pair Ray-Ban Meta to your phone, install your app, and exercise: (1) each voice path you handle; (2) record_audio / capture_video at the max duration you configure; (3) BT route change mid-recording (connect/disconnect AirPods). Verify the event log shows transcripts, no transport.error[stt_*] events, and operations complete successfully." +
|
|
249
|
+
(usesAssistantRuntime
|
|
250
|
+
? " For assistant runtime: walk 5-10 voice interactions covering every tool you registered + the take/stop pair semantics (if any). Verify (1) assistant.session_started fires on app start; (2) each tool call surfaces assistant.tool_called → assistant.tool_result with reasonable duration_ms; (3) the assistant.reconnected event fires after ~50 min — confirms the library-owned reconnection state machine works under real network conditions; (4) on BT disconnect/range loss, assistant.session_ended(error) fires + app handles re-bind on reconnect."
|
|
251
|
+
: "") +
|
|
201
252
|
(usesConversationRuntime
|
|
202
253
|
? " For conversation runtime: walk a full wake → listen → ai.complete → speak loop end-to-end, then verify (1) the handler / turn event pairs are symmetric in getEventLog, (2) BYOK key isn't rejected (no `conversation.error{kind: stt_unauthorized}` or AiException.Unauthorized), (3) Smart Turn EOU fires at natural utterance boundaries (not stuck on the 600 ms silence fallback for every turn — that signals VAD trouble)."
|
|
203
254
|
: ""),
|