@usabledev/usable-chat 1.214.0 → 1.215.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +124 -45
- package/package.json +1 -1
package/cli.js
CHANGED
|
@@ -91866,6 +91866,35 @@ var init_emitter = __esm({
|
|
|
91866
91866
|
}
|
|
91867
91867
|
});
|
|
91868
91868
|
|
|
91869
|
+
// src/core/orchestrator/interactive-capabilities-prompt.ts
|
|
91870
|
+
function buildInteractiveCapabilitiesPrompt(input) {
|
|
91871
|
+
const tools = new Set(input.tools);
|
|
91872
|
+
const lines = [];
|
|
91873
|
+
if (tools.has("ask-subagent") && input.searchExpertAvailable) {
|
|
91874
|
+
lines.push(
|
|
91875
|
+
"Public web research, news, documentation and ordinary URL extraction: delegate to search-expert using ask-subagent. The expert returns sources; synthesize them for the user."
|
|
91876
|
+
);
|
|
91877
|
+
}
|
|
91878
|
+
if (tools.has("browser")) {
|
|
91879
|
+
lines.push(
|
|
91880
|
+
"You, the main agent, can use `browser` for live page inspection, authenticated pages, navigation, clicks, typing and other browser input. Keep the stateful browser session under main-agent control. Public research remains with the search expert when available; a mixed task can research first, then interact with the returned site.",
|
|
91881
|
+
'For website sign-in call browser with action "login". The user selects or enters credentials in a secure card; you receive status only. Use action "handoff" for captchas, 2FA, user takeover and irreversible-action confirmation. After hand back, read a fresh snapshot. Never request passwords or codes in chat, or type them yourself. These tools also work in signed-in Work mode when present.'
|
|
91882
|
+
);
|
|
91883
|
+
}
|
|
91884
|
+
if (tools.has("vault_secret_request")) {
|
|
91885
|
+
lines.push(
|
|
91886
|
+
"When a credential/API key is missing, call `vault_secret_request` to open a trusted secure form. Prefer an existing suitable secret from vault_secret_list. The user submits directly to Vault; you only receive the full secret UUID, name/reference and status. Never ask for secret values in chat or an ordinary question form.",
|
|
91887
|
+
"Saving a secret does not grant access to an integration or Work command. Follow the separate consumer approval/grant flow. A declined or expired request is not permission to retry automatically."
|
|
91888
|
+
);
|
|
91889
|
+
}
|
|
91890
|
+
return lines.length ? ["## Research, browser and secure input", ...lines].join("\n\n") : null;
|
|
91891
|
+
}
|
|
91892
|
+
var init_interactive_capabilities_prompt = __esm({
|
|
91893
|
+
"src/core/orchestrator/interactive-capabilities-prompt.ts"() {
|
|
91894
|
+
"use strict";
|
|
91895
|
+
}
|
|
91896
|
+
});
|
|
91897
|
+
|
|
91869
91898
|
// src/components/chat/language-prompt.ts
|
|
91870
91899
|
var LANGUAGE_PROMPT;
|
|
91871
91900
|
var init_language_prompt = __esm({
|
|
@@ -163655,6 +163684,36 @@ var init_store = __esm({
|
|
|
163655
163684
|
}
|
|
163656
163685
|
});
|
|
163657
163686
|
|
|
163687
|
+
// src/core/secret-request/contracts.ts
|
|
163688
|
+
var secretRequestSchema, secretRequestDescriptorSchema, secretRequestSubmissionSchema, secretRequestResumeSchema;
|
|
163689
|
+
var init_contracts = __esm({
|
|
163690
|
+
"src/core/secret-request/contracts.ts"() {
|
|
163691
|
+
"use strict";
|
|
163692
|
+
init_zod();
|
|
163693
|
+
secretRequestSchema = external_exports.object({
|
|
163694
|
+
suggestedName: external_exports.string().min(1).max(255),
|
|
163695
|
+
type: external_exports.enum(["generic", "env-var", "api-key", "git-ssh"]),
|
|
163696
|
+
provider: external_exports.string().min(1).max(64),
|
|
163697
|
+
reason: external_exports.string().min(1).max(280).refine((value) => !/https?:\/\/|www\./i.test(value), "Use plain text without links")
|
|
163698
|
+
}).strict();
|
|
163699
|
+
secretRequestDescriptorSchema = secretRequestSchema.extend({
|
|
163700
|
+
requestId: external_exports.string().uuid(),
|
|
163701
|
+
resumeToken: external_exports.string().uuid(),
|
|
163702
|
+
expiresAt: external_exports.string().datetime()
|
|
163703
|
+
}).strict();
|
|
163704
|
+
secretRequestSubmissionSchema = external_exports.discriminatedUnion("choice", [
|
|
163705
|
+
external_exports.object({
|
|
163706
|
+
choice: external_exports.literal("create"),
|
|
163707
|
+
name: external_exports.string().min(1).max(255),
|
|
163708
|
+
value: external_exports.string().min(1).max(1e4)
|
|
163709
|
+
}).strict(),
|
|
163710
|
+
external_exports.object({ choice: external_exports.literal("existing"), secretId: external_exports.string().uuid() }).strict(),
|
|
163711
|
+
external_exports.object({ choice: external_exports.literal("decline") }).strict()
|
|
163712
|
+
]);
|
|
163713
|
+
secretRequestResumeSchema = external_exports.object({ resumeToken: external_exports.string().uuid() }).strict();
|
|
163714
|
+
}
|
|
163715
|
+
});
|
|
163716
|
+
|
|
163658
163717
|
// src/core/ask-question/tool.ts
|
|
163659
163718
|
function isAskQuestionPause(output) {
|
|
163660
163719
|
if (!output || typeof output !== "object") return false;
|
|
@@ -163695,6 +163754,20 @@ function isMcpApprovalPause(output) {
|
|
|
163695
163754
|
return pause !== void 0 && pause.kind === MCP_APPROVAL_PAUSE_KIND && typeof pause.resumeToken === "string" && typeof pause.mcpApproval?.profileId === "string" && typeof pause.mcpApproval.fingerprint === "string";
|
|
163696
163755
|
}
|
|
163697
163756
|
function detectPause(toolResult, toolCallId) {
|
|
163757
|
+
if (toolResult && typeof toolResult === "object") {
|
|
163758
|
+
const pause = toolResult.__pause;
|
|
163759
|
+
if (pause?.kind === "secret-request") {
|
|
163760
|
+
const parsed = secretRequestDescriptorSchema.safeParse(pause.secretRequest);
|
|
163761
|
+
if (parsed.success && parsed.data.resumeToken === pause.resumeToken) {
|
|
163762
|
+
return {
|
|
163763
|
+
kind: "secret-request",
|
|
163764
|
+
resumeToken: parsed.data.resumeToken,
|
|
163765
|
+
secretRequest: parsed.data,
|
|
163766
|
+
toolCallId
|
|
163767
|
+
};
|
|
163768
|
+
}
|
|
163769
|
+
}
|
|
163770
|
+
}
|
|
163698
163771
|
if (isAskQuestionPause(toolResult)) {
|
|
163699
163772
|
return {
|
|
163700
163773
|
resumeToken: toolResult.__pause.resumeToken,
|
|
@@ -163726,6 +163799,7 @@ var MCP_APPROVAL_PAUSE_KIND, BROWSER_HANDOFF_PAUSE_KIND;
|
|
|
163726
163799
|
var init_envelope = __esm({
|
|
163727
163800
|
"src/core/pause/envelope.ts"() {
|
|
163728
163801
|
"use strict";
|
|
163802
|
+
init_contracts();
|
|
163729
163803
|
init_tool();
|
|
163730
163804
|
MCP_APPROVAL_PAUSE_KIND = "mcp-approval";
|
|
163731
163805
|
BROWSER_HANDOFF_PAUSE_KIND = "browser-handoff";
|
|
@@ -207852,7 +207926,6 @@ var init_search_expert = __esm({
|
|
|
207852
207926
|
"current information",
|
|
207853
207927
|
"recent updates",
|
|
207854
207928
|
"what's new",
|
|
207855
|
-
"search for",
|
|
207856
207929
|
"find information about",
|
|
207857
207930
|
"context7",
|
|
207858
207931
|
"documentation for",
|
|
@@ -207886,6 +207959,9 @@ You search the web and documentation, then return STRUCTURED DATA to the main as
|
|
|
207886
207959
|
- **WebSearch**: General web search
|
|
207887
207960
|
- **Context7 tools**: Library documentation lookup (use resolve-library-id first, then query-docs)
|
|
207888
207961
|
|
|
207962
|
+
## Browser boundary
|
|
207963
|
+
You research public sources. The main agent owns interactive/authenticated browser sessions, Secure Login, user takeover and secret requests. If a page requires interaction or sign-in, return its URL and the required action to the main agent. Never request credentials.
|
|
207964
|
+
|
|
207889
207965
|
## Search Strategy
|
|
207890
207966
|
1. For library docs \u2192 Use Context7 tools first
|
|
207891
207967
|
2. For general info \u2192 Use exa-search or WebSearch
|
|
@@ -207924,6 +208000,10 @@ You MUST respond with a JSON object. Do NOT write long explanations. Your respon
|
|
|
207924
208000
|
temperature: 0.5,
|
|
207925
208001
|
canHandle: (query, _context) => {
|
|
207926
208002
|
const lowerQuery = query.toLowerCase();
|
|
208003
|
+
if (/\b(sign[ -]?in|log[ -]?in|click|type into|fill (?:in |out )?|take over|checkout)\b/i.test(
|
|
208004
|
+
query
|
|
208005
|
+
))
|
|
208006
|
+
return false;
|
|
207927
208007
|
for (const keyword of SEARCH_KEYWORDS) {
|
|
207928
208008
|
if (lowerQuery.includes(keyword)) {
|
|
207929
208009
|
return true;
|
|
@@ -208470,6 +208550,7 @@ var init_tool_categories = __esm({
|
|
|
208470
208550
|
"browser_folder__edit_file",
|
|
208471
208551
|
"browser_folder__create_directory",
|
|
208472
208552
|
"browser_folder__delete_entry",
|
|
208553
|
+
"vault_secret_request",
|
|
208473
208554
|
"update_todo_list",
|
|
208474
208555
|
"update_agent_personalization"
|
|
208475
208556
|
];
|
|
@@ -209857,7 +209938,7 @@ Each expert has access to specific tools and knowledge for their domain.
|
|
|
209857
209938
|
${getExpertsDescription()}
|
|
209858
209939
|
|
|
209859
209940
|
**When to use:**
|
|
209860
|
-
- **search-expert**:
|
|
209941
|
+
- **search-expert**: Public web searches, online research, ordinary URL extraction and library documentation. Keep authenticated browser interaction, clicking/typing, Secure Login, takeover and secret requests with the main agent.
|
|
209861
209942
|
- **image-expert**: For generating **photorealistic / artistic imagery** or analyzing images (ALWAYS use targetFileIds for image analysis!)
|
|
209862
209943
|
|
|
209863
209944
|
**\u26A0\uFE0F Do NOT delegate diagrams / flowcharts / sequence diagrams / SVG illustrations to image-expert.** Emit a \`<visualization>\` block yourself instead \u2014 the sandboxed iframe renders Chart.js, D3, Plotly, Three.js, and raw SVG directly. The image-expert is reserved for pixel imagery that cannot be produced with inline SVG or CDN JS libraries.
|
|
@@ -221158,6 +221239,7 @@ __export2(store_exports, {
|
|
|
221158
221239
|
claimConsume: () => claimConsume,
|
|
221159
221240
|
deletePauseState: () => deletePauseState,
|
|
221160
221241
|
getPauseState: () => getPauseState,
|
|
221242
|
+
releaseConsumeClaim: () => releaseConsumeClaim,
|
|
221161
221243
|
setInFlightStreamKey: () => setInFlightStreamKey,
|
|
221162
221244
|
storePauseState: () => storePauseState
|
|
221163
221245
|
});
|
|
@@ -221288,6 +221370,10 @@ async function setInFlightStreamKey(resumeToken, streamKey) {
|
|
|
221288
221370
|
}
|
|
221289
221371
|
throw new Error("Redis unavailable; cannot register resumable stream");
|
|
221290
221372
|
}
|
|
221373
|
+
async function releaseConsumeClaim(resumeToken) {
|
|
221374
|
+
const redis = getRedis();
|
|
221375
|
+
if (redis) await redis.del(consumedKey(resumeToken));
|
|
221376
|
+
}
|
|
221291
221377
|
var KEY_PREFIX;
|
|
221292
221378
|
var init_store2 = __esm({
|
|
221293
221379
|
"src/core/ask-question/store.ts"() {
|
|
@@ -342881,7 +342967,7 @@ var init_image_content_resolver = __esm({
|
|
|
342881
342967
|
|
|
342882
342968
|
// src/core/work-runtime/contracts.ts
|
|
342883
342969
|
var workVisitorPrincipalSchema, workIdentityBindingSchema, workRunBindingSchema, workCapabilitySchema, workAdmissionLeaseSchema, workAdmissionRequestSchema, workResumeRequestSchema, workCredentialResolutionRequestSchema, workCredentialResolutionResultSchema, workEventSchema, workProviderStreamRequestSchema, workProviderStreamEventSchema, workSnapshotBarrierSchema, workDescendantFenceSchema, workAdmissionResultSchema, workRecoveryQualificationSchema, dataProcessLaunchRequestSchema, dataProcessLaunchReceiptSchema, workDataTransferSchema, dataProcessSessionSchema, dataProcessDispatchRequestSchema, dataProcessDispatchReceiptSchema, workLocalBridgeRequestSchema, workLocalBridgeResultSchema;
|
|
342884
|
-
var
|
|
342970
|
+
var init_contracts2 = __esm({
|
|
342885
342971
|
"src/core/work-runtime/contracts.ts"() {
|
|
342886
342972
|
"use strict";
|
|
342887
342973
|
init_zod();
|
|
@@ -343055,7 +343141,7 @@ var init_artifacts = __esm({
|
|
|
343055
343141
|
"src/core/work-runtime/artifacts.ts"() {
|
|
343056
343142
|
"use strict";
|
|
343057
343143
|
init_zod();
|
|
343058
|
-
|
|
343144
|
+
init_contracts2();
|
|
343059
343145
|
workArtifactSchema = external_exports.object({
|
|
343060
343146
|
fileId: external_exports.string().uuid(),
|
|
343061
343147
|
conversationId: external_exports.string().uuid(),
|
|
@@ -362549,7 +362635,7 @@ var claimsSchema;
|
|
|
362549
362635
|
var init_resume_proof = __esm({
|
|
362550
362636
|
"src/lib/work-runtime/resume-proof.ts"() {
|
|
362551
362637
|
"use strict";
|
|
362552
|
-
|
|
362638
|
+
init_contracts2();
|
|
362553
362639
|
init_zod();
|
|
362554
362640
|
claimsSchema = external_exports.object({
|
|
362555
362641
|
proofId: external_exports.string().uuid(),
|
|
@@ -362681,7 +362767,7 @@ var init_visitor_authority = __esm({
|
|
|
362681
362767
|
init_embed_key_service();
|
|
362682
362768
|
init_embed_config_service();
|
|
362683
362769
|
init_pat_validation_service();
|
|
362684
|
-
|
|
362770
|
+
init_contracts2();
|
|
362685
362771
|
init_host_jwt();
|
|
362686
362772
|
init_resume_proof();
|
|
362687
362773
|
init_storage_client();
|
|
@@ -362954,7 +363040,7 @@ var init_credit_preflight_service = __esm({
|
|
|
362954
363040
|
var init_broker = __esm({
|
|
362955
363041
|
"src/core/work-runtime/broker.ts"() {
|
|
362956
363042
|
"use strict";
|
|
362957
|
-
|
|
363043
|
+
init_contracts2();
|
|
362958
363044
|
}
|
|
362959
363045
|
});
|
|
362960
363046
|
|
|
@@ -363026,7 +363112,7 @@ var init_broker_session = __esm({
|
|
|
363026
363112
|
"use strict";
|
|
363027
363113
|
init_config();
|
|
363028
363114
|
init_redis();
|
|
363029
|
-
|
|
363115
|
+
init_contracts2();
|
|
363030
363116
|
init_api2();
|
|
363031
363117
|
}
|
|
363032
363118
|
});
|
|
@@ -363222,7 +363308,7 @@ var init_storage_authorization = __esm({
|
|
|
363222
363308
|
init_schema3();
|
|
363223
363309
|
init_schema_work_identity();
|
|
363224
363310
|
init_schema_work_storage();
|
|
363225
|
-
|
|
363311
|
+
init_contracts2();
|
|
363226
363312
|
init_work_eligibility_service();
|
|
363227
363313
|
init_credit_preflight_service();
|
|
363228
363314
|
init_broker_session();
|
|
@@ -364733,7 +364819,10 @@ function createPauseCallback({
|
|
|
364733
364819
|
data2.kind === "mcp-approval" ? "Pause detected \u2014 MCP approval (deferred persist)" : data2.kind === "browser-handoff" ? "Pause detected \u2014 browser handoff (deferred persist)" : "Pause detected \u2014 askUserQuestion (deferred persist)",
|
|
364734
364820
|
{
|
|
364735
364821
|
resumeToken: data2.resumeToken,
|
|
364736
|
-
...data2.kind === "mcp-approval" ? { profileId: data2.mcpApproval.profileId } : data2.kind === "browser-handoff" ? {
|
|
364822
|
+
...data2.kind === "mcp-approval" ? { profileId: data2.mcpApproval.profileId } : data2.kind === "browser-handoff" ? {
|
|
364823
|
+
browserSessionId: data2.browserHandoff.sessionId,
|
|
364824
|
+
reason: data2.browserHandoff.reason
|
|
364825
|
+
} : data2.kind === "secret-request" ? { requestId: data2.secretRequest.requestId } : { questionCount: data2.questions.length }
|
|
364737
364826
|
}
|
|
364738
364827
|
);
|
|
364739
364828
|
pendingPauseRef.current = { data: data2 };
|
|
@@ -364776,7 +364865,7 @@ async function drainPendingPause({
|
|
|
364776
364865
|
resolveStreamComplete
|
|
364777
364866
|
}) {
|
|
364778
364867
|
const { data: data2 } = pending;
|
|
364779
|
-
if (data2.kind === "browser-handoff") {
|
|
364868
|
+
if (data2.kind === "browser-handoff" || data2.kind === "secret-request") {
|
|
364780
364869
|
return drainBrowserHandoffPause({
|
|
364781
364870
|
data: data2,
|
|
364782
364871
|
toolCalls,
|
|
@@ -364947,12 +365036,14 @@ async function drainBrowserHandoffPause({
|
|
|
364947
365036
|
resolveStreamComplete
|
|
364948
365037
|
}) {
|
|
364949
365038
|
const { buildBrowserHandoffPlaceholder: buildBrowserHandoffPlaceholder2 } = await Promise.resolve().then(() => (init_browser_handoff(), browser_handoff_exports));
|
|
364950
|
-
const pausedToolUseId = toolCalls.find((tc) => tc.id === data2.toolCallId)?.id ?? [...toolCalls].reverse().find(
|
|
365039
|
+
const pausedToolUseId = toolCalls.find((tc) => tc.id === data2.toolCallId)?.id ?? [...toolCalls].reverse().find(
|
|
365040
|
+
(tc) => tc.name === "browser" || tc.name === "computer" || tc.name === "vault_secret_request"
|
|
365041
|
+
)?.id;
|
|
364951
365042
|
if (pausedToolUseId) {
|
|
364952
365043
|
replacePauseToolResultPlaceholder(
|
|
364953
365044
|
conversationMessages,
|
|
364954
365045
|
pausedToolUseId,
|
|
364955
|
-
buildBrowserHandoffPlaceholder2(data2.browserHandoff)
|
|
365046
|
+
data2.kind === "secret-request" ? "[Awaiting secure Vault input from the user]" : buildBrowserHandoffPlaceholder2(data2.browserHandoff)
|
|
364956
365047
|
);
|
|
364957
365048
|
} else {
|
|
364958
365049
|
orchestrationLogger.warn("Browser handoff pause signaled but its tool_call was not found");
|
|
@@ -364962,9 +365053,9 @@ async function drainBrowserHandoffPause({
|
|
|
364962
365053
|
const now2 = /* @__PURE__ */ new Date();
|
|
364963
365054
|
try {
|
|
364964
365055
|
const { storePauseState: storePauseState2 } = await Promise.resolve().then(() => (init_store2(), store_exports));
|
|
364965
|
-
|
|
364966
|
-
kind:
|
|
364967
|
-
browserHandoff: data2.browserHandoff,
|
|
365056
|
+
const state4 = {
|
|
365057
|
+
kind: data2.kind,
|
|
365058
|
+
...data2.kind === "secret-request" ? { secretRequest: data2.secretRequest } : { browserHandoff: data2.browserHandoff },
|
|
364968
365059
|
resumeToken: data2.resumeToken,
|
|
364969
365060
|
userId: context3.session?.user?.id || "",
|
|
364970
365061
|
conversationId: context3.metadata?.conversationId,
|
|
@@ -364980,14 +365071,17 @@ async function drainBrowserHandoffPause({
|
|
|
364980
365071
|
embedSnapshot,
|
|
364981
365072
|
pausedAt: now2.toISOString(),
|
|
364982
365073
|
expiresAt: new Date(now2.getTime() + 60 * 60 * 1e3).toISOString()
|
|
364983
|
-
}
|
|
365074
|
+
};
|
|
365075
|
+
if (context3.persistPauseState) await context3.persistPauseState(state4);
|
|
365076
|
+
else await storePauseState2(state4);
|
|
364984
365077
|
} catch (error41) {
|
|
365078
|
+
if (context3.persistPauseState || data2.kind === "secret-request") throw error41;
|
|
364985
365079
|
orchestrationLogger.warn("Browser handoff pause cache unavailable; hand back still works", {
|
|
364986
365080
|
resumeToken: data2.resumeToken,
|
|
364987
365081
|
error: error41 instanceof Error ? error41.message : String(error41)
|
|
364988
365082
|
});
|
|
364989
365083
|
}
|
|
364990
|
-
const handoffEvent = emitter.emit(
|
|
365084
|
+
const handoffEvent = data2.kind === "secret-request" ? emitter.emit("secret-request", data2.secretRequest) : emitter.emit(
|
|
364991
365085
|
"browser-handoff-request",
|
|
364992
365086
|
{
|
|
364993
365087
|
interactionId: data2.resumeToken,
|
|
@@ -364996,12 +365090,6 @@ async function drainBrowserHandoffPause({
|
|
|
364996
365090
|
}
|
|
364997
365091
|
);
|
|
364998
365092
|
multiplexer.send(handoffEvent);
|
|
364999
|
-
orchestrationLogger.info("Browser handoff requested, closing stream", {
|
|
365000
|
-
resumeToken: data2.resumeToken,
|
|
365001
|
-
browserSessionId: data2.browserHandoff.sessionId,
|
|
365002
|
-
pausedToolUseId,
|
|
365003
|
-
lastSequence
|
|
365004
|
-
});
|
|
365005
365093
|
multiplexer.close();
|
|
365006
365094
|
resolveStreamComplete();
|
|
365007
365095
|
}
|
|
@@ -367571,25 +367659,11 @@ ${f20.content}`);
|
|
|
367571
367659
|
} else if (persona.system) {
|
|
367572
367660
|
systemMessageParts.push(persona.system);
|
|
367573
367661
|
}
|
|
367574
|
-
|
|
367575
|
-
|
|
367576
|
-
|
|
367577
|
-
|
|
367578
|
-
|
|
367579
|
-
if ("exa-get-contents" in mcpTools) {
|
|
367580
|
-
capabilities.push(
|
|
367581
|
-
"Exa.ai URL content extraction for reading full articles from specific URLs"
|
|
367582
|
-
);
|
|
367583
|
-
}
|
|
367584
|
-
systemMessageParts.push(
|
|
367585
|
-
`
|
|
367586
|
-
You have access to ${capabilities.join(" and ")}. Use exa-search when you need to find information, and use exa-get-contents when you have a specific URL and need to read its full content (e.g., news articles, government portals, blog posts).`
|
|
367587
|
-
);
|
|
367588
|
-
orchestrationLogger.info("Web search enabled - Exa.ai tools available", {
|
|
367589
|
-
hasSearch: "exa-search" in mcpTools,
|
|
367590
|
-
hasContentExtraction: "exa-get-contents" in mcpTools
|
|
367591
|
-
});
|
|
367592
|
-
}
|
|
367662
|
+
const interactiveGuidance = buildInteractiveCapabilitiesPrompt({
|
|
367663
|
+
tools: Object.keys(aiTools),
|
|
367664
|
+
searchExpertAvailable: experts.some((expert) => expert.id === "search-expert")
|
|
367665
|
+
});
|
|
367666
|
+
if (interactiveGuidance) systemMessageParts.push(interactiveGuidance);
|
|
367593
367667
|
if (shouldInjectVisualizationPrompt(config3)) {
|
|
367594
367668
|
systemMessageParts.push(VISUALIZATION_PROMPT);
|
|
367595
367669
|
}
|
|
@@ -369272,7 +369346,11 @@ Continue once without hiding or replacing your prior response.`
|
|
|
369272
369346
|
{ type: "text", text: toolResult.summarizedContent },
|
|
369273
369347
|
{
|
|
369274
369348
|
type: "image",
|
|
369275
|
-
source: {
|
|
369349
|
+
source: {
|
|
369350
|
+
type: "base64",
|
|
369351
|
+
media_type: shot.mimeType,
|
|
369352
|
+
data: shot.base64
|
|
369353
|
+
}
|
|
369276
369354
|
}
|
|
369277
369355
|
] : toolResult.summarizedContent,
|
|
369278
369356
|
// Use summarized content for history
|
|
@@ -369675,6 +369753,7 @@ var HARNESS_COMPACT_RATIO, HARNESS_KEEP_RECENT_RATIO, KEEP_ALL_TOOL_TURNS, HARD_
|
|
|
369675
369753
|
var init_orchestrator = __esm({
|
|
369676
369754
|
"src/core/orchestrator/index.ts"() {
|
|
369677
369755
|
"use strict";
|
|
369756
|
+
init_interactive_capabilities_prompt();
|
|
369678
369757
|
init_language_prompt();
|
|
369679
369758
|
init_visualization_prompt();
|
|
369680
369759
|
init_data_staging_prompt();
|
|
@@ -392999,7 +393078,7 @@ init_tui_select();
|
|
|
392999
393078
|
init_model_registry();
|
|
393000
393079
|
|
|
393001
393080
|
// package.json
|
|
393002
|
-
var version2 = "1.
|
|
393081
|
+
var version2 = "1.215.1";
|
|
393003
393082
|
|
|
393004
393083
|
// src/adapters/cli/model-catalog.ts
|
|
393005
393084
|
init_codex_auth();
|