@opengeni/api-router 4.1.2-canary.36079201993001 → 4.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/app.js +1 -1
- package/dist/{chunk-PTO4RZT5.js → chunk-2SSU5KWV.js} +3 -84
- package/dist/{chunk-PTO4RZT5.js.map → chunk-2SSU5KWV.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/integrations/github-lens-connect.d.ts +1 -1
- package/dist/integrations/slack-interactions.d.ts +1 -1
- package/dist/mcp/first-party-tool-permissions.d.ts +0 -4
- package/dist/mcp/scheduled-task-view.d.ts +3 -3
- package/package.json +19 -19
- package/src/mcp/first-party-tool-permissions.ts +0 -4
- package/src/mcp/server.ts +1 -67
- package/src/routes/browser-sessions.ts +0 -27
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
createOpenGeniSlackBotInteractionClient,
|
|
8
8
|
startSlackInteractionPump,
|
|
9
9
|
startTemporalScheduleCleanupPump
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-2SSU5KWV.js";
|
|
11
11
|
|
|
12
12
|
// src/index.ts
|
|
13
13
|
import { scheduledTaskKnowledgeSource } from "@opengeni/contracts";
|
|
@@ -46,7 +46,7 @@ export declare function requireGitHubLensConnect(deps: ApiRouteDeps): Promise<{
|
|
|
46
46
|
eager?: boolean | undefined;
|
|
47
47
|
optional?: boolean | undefined;
|
|
48
48
|
}[];
|
|
49
|
-
firstPartyMcpTools: ("artifacts_archive" | "artifacts_create" | "artifacts_get_source" | "artifacts_list" | "artifacts_prepare_upload" | "artifacts_publish" | "artifacts_restore" | "artifacts_rollback" | "atlassian_get" | "atlassian_search" | "atlassian_sources_list" | "browser_act" | "browser_auth" | "browser_clipboard" | "browser_debug" | "browser_identity" | "browser_lifecycle" | "browser_observe" | "browser_open" | "browser_publish" | "browser_read" | "browser_screenshot" | "browser_tabs" | "capability_authorization_request" | "capability_catalog_search" | "command_read" | "command_wait" | "company_profile_confirm" | "company_profile_propose" | "computer_act" | "computer_clipboard" | "computer_lifecycle" | "computer_observe" | "computer_open" | "computer_targets" | "connected_machine_enroll_token" | "connected_machine_remove" | "
|
|
49
|
+
firstPartyMcpTools: ("artifacts_archive" | "artifacts_create" | "artifacts_get_source" | "artifacts_list" | "artifacts_prepare_upload" | "artifacts_publish" | "artifacts_restore" | "artifacts_rollback" | "atlassian_get" | "atlassian_search" | "atlassian_sources_list" | "browser_act" | "browser_auth" | "browser_clipboard" | "browser_debug" | "browser_identity" | "browser_lifecycle" | "browser_observe" | "browser_open" | "browser_publish" | "browser_read" | "browser_screenshot" | "browser_tabs" | "capability_authorization_request" | "capability_catalog_search" | "command_read" | "command_wait" | "company_profile_confirm" | "company_profile_propose" | "computer_act" | "computer_clipboard" | "computer_lifecycle" | "computer_observe" | "computer_open" | "computer_targets" | "connected_machine_enroll_token" | "connected_machine_remove" | "editable_artifact_apply" | "editable_artifact_create" | "editable_artifact_export" | "editable_artifact_export_status" | "editable_artifact_get" | "editable_artifact_import" | "editable_artifact_inspect" | "editable_artifact_list" | "environment_list" | "environment_set_variable" | "fiken_bank_accounts_list" | "fiken_companies_list" | "fiken_contact_create" | "fiken_contacts_list" | "fiken_invoice_draft_create" | "fiken_invoice_get" | "fiken_invoices_list" | "fiken_products_list" | "fiken_purchases_list" | "fiken_sales_list" | "github_connect_link" | "github_repositories_list" | "goal_complete" | "goal_pause" | "goal_progress" | "goal_resume" | "goal_set" | "goal_update" | "instruction_policy_get" | "instruction_policy_propose" | "instruction_policy_save" | "interaction_discover" | "interaction_request_human" | "knowledge_archive" | "knowledge_browse" | "knowledge_correct" | "knowledge_get" | "knowledge_prepare_save" | "knowledge_propose" | "knowledge_retain_file" | "knowledge_retain_message" | "knowledge_save" | "knowledge_search" | "memory_correct" | "memory_save" | "memory_search" | "preference_propose" | "preference_registry_get" | "preference_registry_summary" | "project_create" | "project_delete" | "project_get" | "project_list" | "project_reorder" | "project_update" | "reddit_accounts_list" | "reddit_mentions_live" | "reddit_post_reply" | "reddit_posts_sync" | "reddit_search_live" | "reddit_thread_fetch" | "remember" | "remember_confirm" | "rig_get" | "rig_list" | "rig_promote" | "rig_propose_change" | "rig_verify" | "run_on" | "sandbox_attach" | "sandbox_file_publish" | "sandbox_provision" | "sandbox_swap" | "sandboxes_list" | "scheduled_task_runs_list" | "scheduled_tasks_create" | "scheduled_tasks_delete" | "scheduled_tasks_get" | "scheduled_tasks_list" | "scheduled_tasks_pause" | "scheduled_tasks_resume" | "scheduled_tasks_trigger" | "scheduled_tasks_update" | "session_create" | "session_events" | "session_get" | "session_human_input_respond" | "session_pause" | "session_resume" | "session_send_message" | "session_set_project" | "session_steer" | "session_wait" | "sessions_list" | "set_other_session_title" | "set_session_title" | "slack_bot_channel_history" | "slack_bot_delete_message" | "slack_bot_file_content" | "slack_bot_file_info" | "slack_bot_list_channels" | "slack_bot_list_files" | "slack_bot_list_users" | "slack_bot_post_message" | "slack_bot_search" | "slack_bot_thread_replies" | "social_connections_list" | "social_daily_analysis_context" | "social_mentions_live" | "social_post_reply" | "social_posts_recent" | "social_posts_sync" | "social_search_live" | "social_thread_fetch" | "task_note_archive" | "task_note_promote_instruction_policy" | "task_note_promote_knowledge" | "task_note_promote_preference" | "task_note_replace" | "task_note_save" | "task_notes_list" | "variable_set_get_variable" | "variable_set_list" | "variable_set_set_variable" | "wait_for_input" | "work_claim_release" | "work_claim_upsert" | "x_accounts_list" | "x_mentions_live" | "x_post_reply" | "x_posts_sync" | "x_search_live" | "x_thread_fetch")[];
|
|
50
50
|
firstPartyMcpPermissions: ("account:admin" | "account:read" | "api_keys:manage" | "artifacts:publish" | "artifacts:read" | "billing:manage" | "billing:read" | "capabilities:manage" | "codemode:call" | "connections:read" | "connections:write" | "documents:manage" | "documents:search" | "enrollments:manage" | "enrollments:read" | "environments:manage" | "environments:use" | "files:read" | "files:upload" | "files:write" | "github:manage" | "github:use" | "goals:manage" | "mcp_servers:attach" | "members:manage" | "rigs:manage" | "rigs:use" | "scheduled_tasks:manage" | "scheduled_tasks:run" | "secrets:list" | "secrets:read" | "secrets:write" | "sessions:control" | "sessions:create" | "sessions:read" | "stream:acknowledge" | "stream:control" | "stream:view" | "terminal:attach" | "variable-sets:attach" | "variable-sets:list" | "variable-sets:manage" | "variable-sets:read" | "variable-sets:use" | "variable-sets:write" | "workspace:admin" | "workspace:create" | "workspace:read")[];
|
|
51
51
|
model: string | null;
|
|
52
52
|
reasoningEffort: "high" | "low" | "max" | "medium" | "minimal" | "none" | "xhigh" | null;
|
|
@@ -19,7 +19,7 @@ export declare const SLACK_SESSION_INSTRUCTIONS: string;
|
|
|
19
19
|
* selection at session creation while keeping Slack mutations out of the model
|
|
20
20
|
* surface; interaction delivery remains owned by the durable delivery pump.
|
|
21
21
|
*/
|
|
22
|
-
export declare const SLACK_TASK_FIRST_PARTY_MCP_TOOLS: ("artifacts_archive" | "artifacts_create" | "artifacts_get_source" | "artifacts_list" | "artifacts_prepare_upload" | "artifacts_publish" | "artifacts_restore" | "artifacts_rollback" | "atlassian_get" | "atlassian_search" | "atlassian_sources_list" | "browser_act" | "browser_auth" | "browser_clipboard" | "browser_debug" | "browser_identity" | "browser_lifecycle" | "browser_observe" | "browser_open" | "browser_publish" | "browser_read" | "browser_screenshot" | "browser_tabs" | "capability_authorization_request" | "capability_catalog_search" | "command_read" | "command_wait" | "company_profile_confirm" | "company_profile_propose" | "computer_act" | "computer_clipboard" | "computer_lifecycle" | "computer_observe" | "computer_open" | "computer_targets" | "connected_machine_enroll_token" | "connected_machine_remove" | "
|
|
22
|
+
export declare const SLACK_TASK_FIRST_PARTY_MCP_TOOLS: ("artifacts_archive" | "artifacts_create" | "artifacts_get_source" | "artifacts_list" | "artifacts_prepare_upload" | "artifacts_publish" | "artifacts_restore" | "artifacts_rollback" | "atlassian_get" | "atlassian_search" | "atlassian_sources_list" | "browser_act" | "browser_auth" | "browser_clipboard" | "browser_debug" | "browser_identity" | "browser_lifecycle" | "browser_observe" | "browser_open" | "browser_publish" | "browser_read" | "browser_screenshot" | "browser_tabs" | "capability_authorization_request" | "capability_catalog_search" | "command_read" | "command_wait" | "company_profile_confirm" | "company_profile_propose" | "computer_act" | "computer_clipboard" | "computer_lifecycle" | "computer_observe" | "computer_open" | "computer_targets" | "connected_machine_enroll_token" | "connected_machine_remove" | "editable_artifact_apply" | "editable_artifact_create" | "editable_artifact_export" | "editable_artifact_export_status" | "editable_artifact_get" | "editable_artifact_import" | "editable_artifact_inspect" | "editable_artifact_list" | "environment_list" | "environment_set_variable" | "fiken_bank_accounts_list" | "fiken_companies_list" | "fiken_contact_create" | "fiken_contacts_list" | "fiken_invoice_draft_create" | "fiken_invoice_get" | "fiken_invoices_list" | "fiken_products_list" | "fiken_purchases_list" | "fiken_sales_list" | "github_connect_link" | "github_repositories_list" | "goal_complete" | "goal_pause" | "goal_progress" | "goal_resume" | "goal_set" | "goal_update" | "instruction_policy_get" | "instruction_policy_propose" | "instruction_policy_save" | "interaction_discover" | "interaction_request_human" | "knowledge_archive" | "knowledge_browse" | "knowledge_correct" | "knowledge_get" | "knowledge_prepare_save" | "knowledge_propose" | "knowledge_retain_file" | "knowledge_retain_message" | "knowledge_save" | "knowledge_search" | "memory_correct" | "memory_save" | "memory_search" | "preference_propose" | "preference_registry_get" | "preference_registry_summary" | "project_create" | "project_delete" | "project_get" | "project_list" | "project_reorder" | "project_update" | "reddit_accounts_list" | "reddit_mentions_live" | "reddit_post_reply" | "reddit_posts_sync" | "reddit_search_live" | "reddit_thread_fetch" | "remember" | "remember_confirm" | "rig_get" | "rig_list" | "rig_promote" | "rig_propose_change" | "rig_verify" | "run_on" | "sandbox_attach" | "sandbox_file_publish" | "sandbox_provision" | "sandbox_swap" | "sandboxes_list" | "scheduled_task_runs_list" | "scheduled_tasks_create" | "scheduled_tasks_delete" | "scheduled_tasks_get" | "scheduled_tasks_list" | "scheduled_tasks_pause" | "scheduled_tasks_resume" | "scheduled_tasks_trigger" | "scheduled_tasks_update" | "session_create" | "session_events" | "session_get" | "session_human_input_respond" | "session_pause" | "session_resume" | "session_send_message" | "session_set_project" | "session_steer" | "session_wait" | "sessions_list" | "set_other_session_title" | "set_session_title" | "slack_bot_channel_history" | "slack_bot_delete_message" | "slack_bot_file_content" | "slack_bot_file_info" | "slack_bot_list_channels" | "slack_bot_list_files" | "slack_bot_list_users" | "slack_bot_post_message" | "slack_bot_search" | "slack_bot_thread_replies" | "social_connections_list" | "social_daily_analysis_context" | "social_mentions_live" | "social_post_reply" | "social_posts_recent" | "social_posts_sync" | "social_search_live" | "social_thread_fetch" | "task_note_archive" | "task_note_promote_instruction_policy" | "task_note_promote_knowledge" | "task_note_promote_preference" | "task_note_replace" | "task_note_save" | "task_notes_list" | "variable_set_get_variable" | "variable_set_list" | "variable_set_set_variable" | "wait_for_input" | "work_claim_release" | "work_claim_upsert" | "x_accounts_list" | "x_mentions_live" | "x_post_reply" | "x_posts_sync" | "x_search_live" | "x_thread_fetch")[];
|
|
23
23
|
export type NormalizedSlackInteraction = {
|
|
24
24
|
providerEventId: string;
|
|
25
25
|
providerMessageId: string;
|
|
@@ -359,10 +359,6 @@ export declare const FIRST_PARTY_TOOL_AUTHORIZATION: {
|
|
|
359
359
|
sessionRequired: true;
|
|
360
360
|
allOf: "workspace:read"[];
|
|
361
361
|
};
|
|
362
|
-
custom_mcp_setup_request: {
|
|
363
|
-
sessionRequired: true;
|
|
364
|
-
allOf: "workspace:read"[];
|
|
365
|
-
};
|
|
366
362
|
github_connect_link: {
|
|
367
363
|
allOf: "github:use"[];
|
|
368
364
|
};
|
|
@@ -82,8 +82,8 @@ export declare function scheduledTaskMcpSummary(task: ScheduledTask): {
|
|
|
82
82
|
runMode: "existing_session" | "new_session_per_run" | "reusable_session";
|
|
83
83
|
overlapPolicy: "allow_concurrent" | "buffer_one" | "skip";
|
|
84
84
|
action: {
|
|
85
|
-
readonly sourceId?: never;
|
|
86
85
|
kind: "agent_turn";
|
|
86
|
+
sourceId?: never;
|
|
87
87
|
sourceGeneration?: never;
|
|
88
88
|
sourceLifecycleGeneration?: never;
|
|
89
89
|
destination?: never;
|
|
@@ -205,8 +205,8 @@ export declare function boundScheduledTaskDetailMcp(task: ScheduledTask): {
|
|
|
205
205
|
runMode: "existing_session" | "new_session_per_run" | "reusable_session";
|
|
206
206
|
overlapPolicy: "allow_concurrent" | "buffer_one" | "skip";
|
|
207
207
|
action: {
|
|
208
|
-
readonly sourceId?: never;
|
|
209
208
|
kind: "agent_turn";
|
|
209
|
+
sourceId?: never;
|
|
210
210
|
sourceGeneration?: never;
|
|
211
211
|
sourceLifecycleGeneration?: never;
|
|
212
212
|
destination?: never;
|
|
@@ -389,8 +389,8 @@ export declare function boundScheduledTaskMcpPage(input: {
|
|
|
389
389
|
runMode: "existing_session" | "new_session_per_run" | "reusable_session";
|
|
390
390
|
overlapPolicy: "allow_concurrent" | "buffer_one" | "skip";
|
|
391
391
|
action: {
|
|
392
|
-
readonly sourceId?: never;
|
|
393
392
|
kind: "agent_turn";
|
|
393
|
+
sourceId?: never;
|
|
394
394
|
sourceGeneration?: never;
|
|
395
395
|
sourceLifecycleGeneration?: never;
|
|
396
396
|
destination?: never;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opengeni/api-router",
|
|
3
|
-
"version": "4.1.2
|
|
3
|
+
"version": "4.1.2",
|
|
4
4
|
"description": "OpenGeni HTTP surface: the Hono adapter/router (createApp), routes, MCP HTTP transport, and HTTP access adapters over @opengeni/core. An engine-distribution surface — its runtime closure includes engine-internal packages.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -43,24 +43,24 @@
|
|
|
43
43
|
"@hono/zod-validator": "^0.7.6",
|
|
44
44
|
"@llamaindex/liteparse": "2.14.2",
|
|
45
45
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
46
|
-
"@opengeni/agent-proto": "^0.6.0
|
|
47
|
-
"@opengeni/artifact-tool": "^0.3.32
|
|
48
|
-
"@opengeni/capabilities": "^0.3.4
|
|
49
|
-
"@opengeni/codemode": "^0.6.2
|
|
50
|
-
"@opengeni/codex": "^0.2.26
|
|
51
|
-
"@opengeni/config": "^2.1.1
|
|
52
|
-
"@opengeni/contracts": "^5.1.1
|
|
53
|
-
"@opengeni/core": "^4.0.3
|
|
54
|
-
"@opengeni/db": "^6.0.3
|
|
55
|
-
"@opengeni/documents": "^0.8.34
|
|
56
|
-
"@opengeni/events": "^0.4.32
|
|
57
|
-
"@opengeni/github": "^0.7.16
|
|
58
|
-
"@opengeni/network": "^0.3.1
|
|
59
|
-
"@opengeni/observability": "^0.8.32
|
|
60
|
-
"@opengeni/runtime": "^4.0.3
|
|
61
|
-
"@opengeni/storage": "^0.2.133
|
|
62
|
-
"@opengeni/tool-gateway": "^0.1.13
|
|
63
|
-
"@opengeni/xai-subscription": "^0.1.4
|
|
46
|
+
"@opengeni/agent-proto": "^0.6.0",
|
|
47
|
+
"@opengeni/artifact-tool": "^0.3.32",
|
|
48
|
+
"@opengeni/capabilities": "^0.3.4",
|
|
49
|
+
"@opengeni/codemode": "^0.6.2",
|
|
50
|
+
"@opengeni/codex": "^0.2.26",
|
|
51
|
+
"@opengeni/config": "^2.1.1",
|
|
52
|
+
"@opengeni/contracts": "^5.1.1",
|
|
53
|
+
"@opengeni/core": "^4.0.3",
|
|
54
|
+
"@opengeni/db": "^6.0.3",
|
|
55
|
+
"@opengeni/documents": "^0.8.34",
|
|
56
|
+
"@opengeni/events": "^0.4.32",
|
|
57
|
+
"@opengeni/github": "^0.7.16",
|
|
58
|
+
"@opengeni/network": "^0.3.1",
|
|
59
|
+
"@opengeni/observability": "^0.8.32",
|
|
60
|
+
"@opengeni/runtime": "^4.0.3",
|
|
61
|
+
"@opengeni/storage": "^0.2.133",
|
|
62
|
+
"@opengeni/tool-gateway": "^0.1.13",
|
|
63
|
+
"@opengeni/xai-subscription": "^0.1.4",
|
|
64
64
|
"@temporalio/client": "^1.17.0",
|
|
65
65
|
"better-auth": "^1.6.14",
|
|
66
66
|
"hono": "^4.12.18",
|
|
@@ -154,10 +154,6 @@ export const FIRST_PARTY_TOOL_AUTHORIZATION = {
|
|
|
154
154
|
sessionRequired: true,
|
|
155
155
|
allOf: ["workspace:read"],
|
|
156
156
|
},
|
|
157
|
-
custom_mcp_setup_request: {
|
|
158
|
-
sessionRequired: true,
|
|
159
|
-
allOf: ["workspace:read"],
|
|
160
|
-
},
|
|
161
157
|
github_connect_link: { allOf: ["github:use"] },
|
|
162
158
|
github_repositories_list: { allOf: ["github:use"] },
|
|
163
159
|
social_connections_list: { allOf: ["connections:read"] },
|
package/src/mcp/server.ts
CHANGED
|
@@ -2521,7 +2521,7 @@ function registerGoalTools(
|
|
|
2521
2521
|
"goal_update",
|
|
2522
2522
|
{
|
|
2523
2523
|
description:
|
|
2524
|
-
"
|
|
2524
|
+
"Propose or apply a semantic goal revision under the session's mutation policy. Retain the standing goal unless explicit user direction or meaningful new evidence justifies the declared refinement, adaptation, or replacement. Every rewrite must use the exact expected objective revision and a concise rationale. Root constraints cannot be changed by an agent. A rewrite is not an execution-progress audit fact; use the optional goal_progress tool when such a fact should be recorded.",
|
|
2525
2525
|
inputSchema: {
|
|
2526
2526
|
text: goalText.optional(),
|
|
2527
2527
|
successCriteria: successCriteriaSchema.nullable().optional(),
|
|
@@ -6026,72 +6026,6 @@ function registerCapabilityDiscoveryTools(
|
|
|
6026
6026
|
});
|
|
6027
6027
|
},
|
|
6028
6028
|
);
|
|
6029
|
-
|
|
6030
|
-
server.registerTool(
|
|
6031
|
-
"custom_mcp_setup_request",
|
|
6032
|
-
{
|
|
6033
|
-
description:
|
|
6034
|
-
"Show a review card for a remote HTTPS MCP server that is not in the workspace catalog. Use only an endpoint supplied by the user or established by reliable documentation; do not invent a URL. Never include query parameters or secrets in this URL; the human can edit it in the protected setup form. The agent cannot add, enable, or contact the server. Search the catalog first and do not propose an already available integration.",
|
|
6035
|
-
inputSchema: {
|
|
6036
|
-
name: z4.string().trim().min(1).max(256),
|
|
6037
|
-
endpointUrl: z4
|
|
6038
|
-
.string()
|
|
6039
|
-
.url()
|
|
6040
|
-
.max(2048)
|
|
6041
|
-
.refine((url) => {
|
|
6042
|
-
const parsed = new URL(url);
|
|
6043
|
-
return (
|
|
6044
|
-
parsed.protocol === "https:" &&
|
|
6045
|
-
!parsed.username &&
|
|
6046
|
-
!parsed.password &&
|
|
6047
|
-
!parsed.hash &&
|
|
6048
|
-
!parsed.search
|
|
6049
|
-
);
|
|
6050
|
-
}),
|
|
6051
|
-
rationale: z4.string().trim().min(1).max(2000),
|
|
6052
|
-
},
|
|
6053
|
-
},
|
|
6054
|
-
async ({ name, endpointUrl, rationale }) => {
|
|
6055
|
-
await authorize();
|
|
6056
|
-
const current = await catalog();
|
|
6057
|
-
const existing = current.items.find(
|
|
6058
|
-
(item) => item.kind === "mcp" && item.endpointUrl === endpointUrl && !item.stale,
|
|
6059
|
-
);
|
|
6060
|
-
if (existing) {
|
|
6061
|
-
return json({
|
|
6062
|
-
status: "already_in_catalog",
|
|
6063
|
-
capabilityId: existing.id,
|
|
6064
|
-
message: "Use the catalog authorization flow for this server instead.",
|
|
6065
|
-
});
|
|
6066
|
-
}
|
|
6067
|
-
const claims = exactAgentCommandContext(grant, sessionId);
|
|
6068
|
-
const payload = ToolAuthNeededPayload.parse({
|
|
6069
|
-
serverId: "opengeni",
|
|
6070
|
-
toolName: "custom_mcp_setup_request",
|
|
6071
|
-
providerDomain: new URL(endpointUrl).hostname,
|
|
6072
|
-
reason: "missing_connection",
|
|
6073
|
-
setupRequest: { kind: "mcp", name, endpointUrl, rationale },
|
|
6074
|
-
});
|
|
6075
|
-
const appended = await appendAndPublishTurnEventsFenced(
|
|
6076
|
-
deps.db,
|
|
6077
|
-
deps.bus,
|
|
6078
|
-
grant.workspaceId,
|
|
6079
|
-
sessionId,
|
|
6080
|
-
claims.callerTurnId,
|
|
6081
|
-
claims.callerExecutionGeneration,
|
|
6082
|
-
claims.callerAttemptId,
|
|
6083
|
-
[{ type: "tool.auth_needed", payload }],
|
|
6084
|
-
);
|
|
6085
|
-
if (!appended.accepted) {
|
|
6086
|
-
throw new Error("The calling turn was replaced before the setup request committed.");
|
|
6087
|
-
}
|
|
6088
|
-
return json({
|
|
6089
|
-
status: "setup_requested",
|
|
6090
|
-
eventId: appended.events[0]?.id ?? null,
|
|
6091
|
-
message: "The human review card was posted. No server was added or contacted.",
|
|
6092
|
-
});
|
|
6093
|
-
},
|
|
6094
|
-
);
|
|
6095
6029
|
}
|
|
6096
6030
|
|
|
6097
6031
|
async function capabilitySetupProjection(
|
|
@@ -93,7 +93,6 @@ import {
|
|
|
93
93
|
dispatchExternalAuth,
|
|
94
94
|
dispatchProtectedAuthFill,
|
|
95
95
|
failBrowserSessionOperation,
|
|
96
|
-
failPreparedBrowserSessionEnd,
|
|
97
96
|
failPreparedBrowserSessionSuspend,
|
|
98
97
|
failBrowserSessionResume,
|
|
99
98
|
failBrowserSessionResumePreparation,
|
|
@@ -2608,11 +2607,6 @@ export function registerBrowserSessionRoutes(app: Hono, deps: ApiRouteDeps): voi
|
|
|
2608
2607
|
const request = await parseJsonBody(context, BrowserSessionLifecycleRequest);
|
|
2609
2608
|
const startedAtMs = performance.now();
|
|
2610
2609
|
const origin = requestOrigin(context, deps.settings);
|
|
2611
|
-
let endPreparation: {
|
|
2612
|
-
restoreLifecycle: BrowserSessionValue["lifecycle"];
|
|
2613
|
-
restoreFailureCode: string | null;
|
|
2614
|
-
expectedControllerGeneration: string | null;
|
|
2615
|
-
} | null = null;
|
|
2616
2610
|
try {
|
|
2617
2611
|
const before = await getBrowserSessionControlRecord(deps.db, {
|
|
2618
2612
|
accountId: grant.accountId,
|
|
@@ -2627,9 +2621,6 @@ export function registerBrowserSessionRoutes(app: Hono, deps: ApiRouteDeps): voi
|
|
|
2627
2621
|
browserSessionId,
|
|
2628
2622
|
operationId: request.operationId,
|
|
2629
2623
|
actorSubjectId: grant.subjectId,
|
|
2630
|
-
expectedLifecycle: before.session.lifecycle,
|
|
2631
|
-
expectedFailureCode: before.session.failureCode,
|
|
2632
|
-
expectedControllerGeneration: before.session.controller?.controllerGeneration ?? null,
|
|
2633
2624
|
});
|
|
2634
2625
|
if (isTerminalOperation(prepared.operation.state)) {
|
|
2635
2626
|
if (prepared.operation.state === "completed") {
|
|
@@ -2645,13 +2636,6 @@ export function registerBrowserSessionRoutes(app: Hono, deps: ApiRouteDeps): voi
|
|
|
2645
2636
|
observeLifecycleResult(deps.observability, startedAtMs, parsed);
|
|
2646
2637
|
return context.json(parsed, 200);
|
|
2647
2638
|
}
|
|
2648
|
-
if (before.session.lifecycle !== "ending") {
|
|
2649
|
-
endPreparation = {
|
|
2650
|
-
restoreLifecycle: before.session.lifecycle,
|
|
2651
|
-
restoreFailureCode: before.session.failureCode,
|
|
2652
|
-
expectedControllerGeneration: before.session.controller?.controllerGeneration ?? null,
|
|
2653
|
-
};
|
|
2654
|
-
}
|
|
2655
2639
|
|
|
2656
2640
|
const record = await getBrowserSessionControlRecord(deps.db, {
|
|
2657
2641
|
accountId: grant.accountId,
|
|
@@ -2745,16 +2729,6 @@ export function registerBrowserSessionRoutes(app: Hono, deps: ApiRouteDeps): voi
|
|
|
2745
2729
|
observeLifecycleResult(deps.observability, startedAtMs, parsed);
|
|
2746
2730
|
return context.json(parsed, 200);
|
|
2747
2731
|
} catch (error) {
|
|
2748
|
-
if (endPreparation) {
|
|
2749
|
-
await failPreparedBrowserSessionEnd(deps.db, {
|
|
2750
|
-
accountId: grant.accountId,
|
|
2751
|
-
workspaceId,
|
|
2752
|
-
browserSessionId,
|
|
2753
|
-
operationId: request.operationId,
|
|
2754
|
-
...endPreparation,
|
|
2755
|
-
error: interactionFailure(error),
|
|
2756
|
-
});
|
|
2757
|
-
}
|
|
2758
2732
|
throw browserRouteError(error);
|
|
2759
2733
|
}
|
|
2760
2734
|
},
|
|
@@ -4144,7 +4118,6 @@ async function settleBrowserSessionSuspensionCaptureFailure(
|
|
|
4144
4118
|
return await failBrowserSessionSuspension(deps.db, {
|
|
4145
4119
|
...input,
|
|
4146
4120
|
...(outcomeUnknown ? { state: "outcome_unknown" as const } : {}),
|
|
4147
|
-
missingControllerSession: error.status === 404 && isMissingBrowserControllerSession(error),
|
|
4148
4121
|
error: error.error,
|
|
4149
4122
|
});
|
|
4150
4123
|
}
|