@opengeni/api-router 2.13.0-canary.1 → 2.13.0-canary.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.
Files changed (50) hide show
  1. package/dist/app.js +1 -1
  2. package/dist/{chunk-V4IDX7VJ.js → chunk-K2NU4KRK.js} +3138 -3635
  3. package/dist/{chunk-V4IDX7VJ.js.map → chunk-K2NU4KRK.js.map} +1 -1
  4. package/dist/index.js +5 -4
  5. package/dist/index.js.map +1 -1
  6. package/dist/integrations/github-lens-connect.d.ts +1 -1
  7. package/dist/integrations/slack-interactions.d.ts +1 -1
  8. package/dist/mcp/documents.d.ts +5 -13
  9. package/dist/mcp/files.d.ts +2 -2
  10. package/dist/mcp/first-party-tool-permissions.d.ts +36 -0
  11. package/dist/mcp/knowledge-entries.d.ts +5 -0
  12. package/dist/mcp/server.d.ts +4 -4
  13. package/dist/routes/host-mcp-resolvers.d.ts +3 -0
  14. package/dist/routes/knowledge.d.ts +3 -0
  15. package/dist/sandbox-file-artifacts.d.ts +6 -2
  16. package/dist/workspace-state-projection.d.ts +3 -5
  17. package/package.json +19 -19
  18. package/src/access-grant-rls.ts +13 -1
  19. package/src/app.ts +4 -11
  20. package/src/index.ts +4 -3
  21. package/src/integrations/atlassian.ts +31 -28
  22. package/src/integrations/google-drive.ts +33 -30
  23. package/src/integrations/marketplace-plugin.ts +1 -1
  24. package/src/integrations/provider-oauth.ts +11 -2
  25. package/src/mcp/documents.ts +57 -428
  26. package/src/mcp/files.ts +76 -58
  27. package/src/mcp/first-party-tool-permissions.ts +9 -0
  28. package/src/mcp/knowledge-entries.ts +276 -0
  29. package/src/mcp/server.ts +7 -361
  30. package/src/routes/company-brain.ts +58 -107
  31. package/src/routes/documents.ts +78 -294
  32. package/src/routes/files.ts +68 -3
  33. package/src/routes/host-mcp-resolvers.ts +41 -0
  34. package/src/routes/knowledge.ts +386 -0
  35. package/src/routes/organization-memberships.ts +33 -0
  36. package/src/routes/scheduled-tasks.ts +9 -1
  37. package/src/routes/sessions.ts +20 -3
  38. package/src/routes/skill-content.ts +8 -2
  39. package/src/routes/video-generation.ts +7 -5
  40. package/src/routes/workspace-learning.ts +12 -82
  41. package/src/routes/workspace-state.ts +34 -25
  42. package/src/routes/workspaces.ts +20 -10
  43. package/src/sandbox-file-artifacts.ts +54 -2
  44. package/src/scheduled-task-deletion.ts +3 -2
  45. package/src/workspace-state-projection.ts +18 -148
  46. package/src/workspace-tool-gateway.ts +3 -15
  47. package/dist/mcp/company-brain-governed-writes.d.ts +0 -26
  48. package/dist/mcp/remember.d.ts +0 -28
  49. package/src/mcp/company-brain-governed-writes.ts +0 -271
  50. package/src/mcp/remember.ts +0 -191
@@ -104,7 +104,7 @@ export declare function requireGitHubLensConnect(deps: ApiRouteDeps, workspaceId
104
104
  eager?: boolean | undefined;
105
105
  optional?: boolean | undefined;
106
106
  }[];
107
- 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_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_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_propose" | "interaction_discover" | "interaction_request_human" | "knowledge_correct" | "knowledge_propose" | "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")[];
107
+ 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_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_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_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")[];
108
108
  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")[];
109
109
  model: string | null;
110
110
  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_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_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_propose" | "interaction_discover" | "interaction_request_human" | "knowledge_correct" | "knowledge_propose" | "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")[];
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_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_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_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;
@@ -1,16 +1,8 @@
1
- import { type DocumentServices } from "@opengeni/documents";
2
- import { type Database, type MemoryAgentScope } from "@opengeni/db";
1
+ import type { DocumentServices } from "@opengeni/documents";
2
+ import { type KnowledgeContext, type Database } from "@opengeni/db";
3
3
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ /** The docs endpoint is a transport for canonical Knowledge retrieval. Legacy
5
+ * chunk/base retrieval is retired: it cannot bypass pending Knowledge review. */
4
6
  export declare function buildDocumentsMcpServer(db: Database, accountId: string, workspaceId: string, documentServices: DocumentServices, options: {
5
- createdBySessionId?: string | undefined;
6
- attemptId?: string | undefined;
7
- /** Immutable human subject whose agent is making this retrieval request. */
8
- initiatingSubjectId: string;
9
- /**
10
- * The bound session's typed Memory selector (migration 0427), resolved by
11
- * the caller from the session row. `off` registers neither memory tool;
12
- * `user`/`session` search the workspace layer plus the own private layer.
13
- * Omitted keeps the workspace layer.
14
- */
15
- memory?: MemoryAgentScope | null | undefined;
7
+ knowledge: KnowledgeContext;
16
8
  }): McpServer;
@@ -1,5 +1,5 @@
1
1
  import type { AccessGrant } from "@opengeni/contracts";
2
- import { type ApiRouteDeps } from "@opengeni/core";
2
+ import { type AccessGrantAuthorization, type ApiRouteDeps } from "@opengeni/core";
3
3
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
4
  /** Dedicated file MCP surface. The broad `opengeni` server never registers it. */
5
- export declare function buildFilesMcpServer(deps: ApiRouteDeps, grant: AccessGrant): McpServer;
5
+ export declare function buildFilesMcpServer(deps: ApiRouteDeps, authority: AccessGrant | AccessGrantAuthorization): McpServer;
@@ -42,6 +42,42 @@ export declare const FIRST_PARTY_TOOL_AUTHORIZATION: {
42
42
  sessionRequired: true;
43
43
  allOf: "goals:manage"[];
44
44
  };
45
+ knowledge_search: {
46
+ sessionRequired: true;
47
+ allOf: "documents:search"[];
48
+ };
49
+ knowledge_get: {
50
+ sessionRequired: true;
51
+ allOf: "documents:search"[];
52
+ };
53
+ knowledge_browse: {
54
+ sessionRequired: true;
55
+ allOf: "documents:search"[];
56
+ };
57
+ knowledge_retain_file: {
58
+ sessionRequired: true;
59
+ allOf: ("documents:search" | "files:read")[];
60
+ };
61
+ knowledge_retain_message: {
62
+ sessionRequired: true;
63
+ allOf: ("documents:search" | "sessions:read")[];
64
+ };
65
+ knowledge_save: {
66
+ sessionRequired: true;
67
+ allOf: "documents:search"[];
68
+ };
69
+ knowledge_archive: {
70
+ sessionRequired: true;
71
+ allOf: "documents:search"[];
72
+ };
73
+ instruction_policy_save: {
74
+ sessionRequired: true;
75
+ allOf: "documents:search"[];
76
+ };
77
+ instruction_policy_get: {
78
+ sessionRequired: true;
79
+ allOf: "documents:search"[];
80
+ };
45
81
  memory_search: {
46
82
  sessionRequired: true;
47
83
  allOf: "documents:search"[];
@@ -0,0 +1,5 @@
1
+ import { type AccessGrant } from "@opengeni/contracts";
2
+ import { type ApiRouteDeps } from "@opengeni/core";
3
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ /** One structured write and retrieval path, independent of the legacy Memory toggle. */
5
+ export declare function registerKnowledgeEntryTools(server: McpServer, deps: ApiRouteDeps, grant: AccessGrant, sessionId: string): void;
@@ -199,7 +199,7 @@ export declare function capSessionDiscoveryCompactPage(page: Awaited<ReturnType<
199
199
  updatedAt: string;
200
200
  queuedPromptCount?: number;
201
201
  latestMessage: {
202
- type: "agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded";
202
+ type: "agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "instruction.confirmation.recovered" | "knowledge.confirmation.recovered" | "knowledge.source.failed" | "knowledge.source.prepared" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded";
203
203
  previewOmitted: boolean;
204
204
  previewOmissionReason: "aggregatePreviewBudget";
205
205
  previewDrillDownTool: "session_events";
@@ -210,10 +210,10 @@ export declare function capSessionDiscoveryCompactPage(page: Awaited<ReturnType<
210
210
  mode: "monitoring";
211
211
  payloadMode: "summary";
212
212
  sessionId: string;
213
- includeTypes: ("agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded")[];
213
+ includeTypes: ("agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "instruction.confirmation.recovered" | "knowledge.confirmation.recovered" | "knowledge.source.failed" | "knowledge.source.prepared" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded")[];
214
214
  };
215
215
  } | {
216
- type: "agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded";
216
+ type: "agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "instruction.confirmation.recovered" | "knowledge.confirmation.recovered" | "knowledge.source.failed" | "knowledge.source.prepared" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded";
217
217
  preview: string | null;
218
218
  previewTruncated?: boolean;
219
219
  };
@@ -298,7 +298,7 @@ export declare function capSessionDiscoveryPage(page: Awaited<ReturnType<typeof
298
298
  noAdditionalAccess: true;
299
299
  };
300
300
  latestMessage?: {
301
- type: "agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded";
301
+ type: "agent.message.completed" | "agent.message.delta" | "agent.model.request" | "agent.model.usage" | "agent.reasoning.delta" | "agent.toolCall.created" | "agent.toolCall.output" | "agent.updated" | "artifact.created" | "codex.account.selection.changed" | "codex.account.switched" | "codex.capacity.resumed" | "codex.capacity.superseded" | "codex.capacity.waiting" | "codex.credential.selected" | "codex.fleet.decision" | "credential.auth_needed" | "fs.changed" | "git.changed" | "goal.cleared" | "goal.completed" | "goal.continuation" | "goal.held" | "goal.paused" | "goal.progress" | "goal.resumed" | "goal.rewrite.proposed" | "goal.rewrite.rejected" | "goal.set" | "goal.updated" | "instruction.confirmation.recovered" | "knowledge.confirmation.recovered" | "knowledge.source.failed" | "knowledge.source.prepared" | "machine.link.lost" | "machine.link.restored" | "machine.op.failed" | "machine.op.recovered" | "machine.runner.restarted" | "memory.corrected" | "memory.saved" | "recording.available" | "recording.failed" | "recording.started" | "rig.setup.completed" | "rig.setup.failed" | "rig.setup.skipped" | "rig.setup.started" | "sandbox.box.created" | "sandbox.box.lost" | "sandbox.box.snapshot" | "sandbox.box.terminated" | "sandbox.command.output.delta" | "sandbox.env.drift" | "sandbox.operation.completed" | "sandbox.operation.failed" | "sandbox.operation.started" | "session.command.backgrounded" | "session.command.finished" | "session.context.cleared" | "session.context.compacted" | "session.context.compaction.requested" | "session.context.compaction.skipped" | "session.context.compaction.started" | "session.control.paused" | "session.control.resumed" | "session.control.steer_requested" | "session.created" | "session.event.envelope_omitted" | "session.humanInput.requested" | "session.mcp.approval_policy.updated" | "session.personal_resources.attached" | "session.queue.changed" | "session.queue.history" | "session.queue.prompt.cancelled" | "session.realtime.ended" | "session.realtime.started" | "session.requiresAction" | "session.route.reconciled" | "session.runtime.configured" | "session.status.changed" | "session.title_set" | "session.tool_policy.updated" | "session.variable_sets.updated" | "session.visibility.changed" | "session.wait.finished" | "session.wait.started" | "stream.closed" | "stream.opened" | "stream.revoked" | "stream.url.rotated" | "system.update.cancelled" | "system.update.delivered" | "system.update.pending" | "system.update.settled" | "system.update.superseded" | "terminal.pty.exited" | "terminal.pty.output.delta" | "terminal.pty.started" | "tool.auth_needed" | "turn.cancelled" | "turn.capacity_waiting" | "turn.completed" | "turn.event.rejected_late" | "turn.failed" | "turn.queued" | "turn.recovery.requested" | "turn.started" | "turn.startup.phase.completed" | "turn.startup.phase.failed" | "turn.startup.phase.started" | "turn.superseded" | "user.approvalDecision" | "user.humanInputResponse" | "user.message" | "user.pause" | "workspace.inference.paused" | "workspace.inference.resumed" | "workspace.revision.captured" | "workspace.revision.degraded";
302
302
  preview: string | null;
303
303
  previewTruncated: boolean;
304
304
  } | null;
@@ -0,0 +1,3 @@
1
+ import type { Hono } from "hono";
2
+ import { type ApiRouteDeps } from "@opengeni/core";
3
+ export declare function registerHostMcpResolverRoutes(app: Hono, deps: ApiRouteDeps): void;
@@ -0,0 +1,3 @@
1
+ import { type ApiRouteDeps } from "@opengeni/core";
2
+ import type { Hono } from "hono";
3
+ export declare function registerKnowledgeRoutes(app: Hono, deps: ApiRouteDeps): void;
@@ -1,7 +1,10 @@
1
1
  import { SandboxFileArtifactReceipt, type AccessGrant, type Session } from "@opengeni/contracts";
2
- import { type ApiRouteDeps } from "@opengeni/core";
3
- export declare function publishSandboxFileArtifact(deps: ApiRouteDeps, input: {
2
+ import { type ApiRouteDeps, type AccessGrantAuthorization } from "@opengeni/core";
3
+ /** Original bytes inherit the already-authorized source session's ownership. */
4
+ export declare function publishSandboxFileArtifact(deps: ApiRouteDeps, input: Parameters<typeof publishSandboxFileArtifactInScope>[1]): Promise<SandboxFileArtifactReceipt>;
5
+ declare function publishSandboxFileArtifactInScope(deps: ApiRouteDeps, input: {
4
6
  grant: AccessGrant;
7
+ authorization?: AccessGrantAuthorization;
5
8
  session: Session;
6
9
  path: string;
7
10
  signal?: AbortSignal | undefined;
@@ -9,3 +12,4 @@ export declare function publishSandboxFileArtifact(deps: ApiRouteDeps, input: {
9
12
  export declare function sandboxArtifactRelativePath(value: string): string;
10
13
  export declare function sandboxArtifactSafeFilename(filename: string): string;
11
14
  export declare function sandboxFileContentType(filename: string): string;
15
+ export {};
@@ -1,9 +1,7 @@
1
- import { type WorkspaceInstructionPolicyListResponse, type WorkspaceInstructionPolicySnapshot, type WorkspaceStateResponse as WorkspaceStateResponseType } from "@opengeni/contracts";
2
- import type { WorkspaceStateMemoryRecord } from "@opengeni/db";
3
- import type { DocumentInventory } from "@opengeni/documents";
1
+ import { type KnowledgeEntrySummary, type WorkspaceInstructionPolicyListResponse, type WorkspaceInstructionPolicySnapshot, type WorkspaceStateResponse as WorkspaceStateResponseType } from "@opengeni/contracts";
4
2
  type KnowledgeProjectionInput = {
5
- documents: DocumentInventory;
6
- memories: WorkspaceStateMemoryRecord[];
3
+ entries: Pick<KnowledgeEntrySummary, "id" | "scope" | "revision" | "updatedAt">[];
4
+ nextCursor: string | null;
7
5
  };
8
6
  type PreferenceGovernanceIdentity = {
9
7
  id: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengeni/api-router",
3
- "version": "2.13.0-canary.1",
3
+ "version": "2.13.0-canary.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-canary.1",
47
- "@opengeni/artifact-tool": "^0.3.27-canary.1",
48
- "@opengeni/capabilities": "^0.3.3-canary.13",
49
- "@opengeni/codemode": "^0.5.7-canary.1",
50
- "@opengeni/codex": "^0.2.22-canary.13",
51
- "@opengeni/config": "^1.2.0-canary.1",
52
- "@opengeni/contracts": "^3.1.0-canary.1",
53
- "@opengeni/core": "^2.10.0-canary.1",
54
- "@opengeni/db": "^4.4.0-canary.1",
55
- "@opengeni/documents": "^0.8.28-canary.1",
56
- "@opengeni/events": "^0.4.26-canary.1",
57
- "@opengeni/github": "^0.7.11-canary.1",
58
- "@opengeni/network": "^0.3.1-canary.13",
59
- "@opengeni/observability": "^0.8.27-canary.1",
60
- "@opengeni/runtime": "^2.6.0-canary.1",
61
- "@opengeni/storage": "^0.2.128-canary.1",
62
- "@opengeni/tool-gateway": "^0.1.8-canary.1",
63
- "@opengeni/xai-subscription": "^0.1.4-canary.13",
46
+ "@opengeni/agent-proto": "^0.6.0-canary.2",
47
+ "@opengeni/artifact-tool": "^0.3.27-canary.2",
48
+ "@opengeni/capabilities": "^0.3.3-canary.14",
49
+ "@opengeni/codemode": "^0.5.7-canary.2",
50
+ "@opengeni/codex": "^0.2.22-canary.14",
51
+ "@opengeni/config": "^1.2.0-canary.2",
52
+ "@opengeni/contracts": "^3.1.0-canary.2",
53
+ "@opengeni/core": "^2.10.0-canary.2",
54
+ "@opengeni/db": "^4.4.0-canary.2",
55
+ "@opengeni/documents": "^0.8.28-canary.2",
56
+ "@opengeni/events": "^0.4.26-canary.2",
57
+ "@opengeni/github": "^0.7.11-canary.2",
58
+ "@opengeni/network": "^0.3.1-canary.14",
59
+ "@opengeni/observability": "^0.8.27-canary.2",
60
+ "@opengeni/runtime": "^2.6.0-canary.2",
61
+ "@opengeni/storage": "^0.2.128-canary.2",
62
+ "@opengeni/tool-gateway": "^0.1.8-canary.2",
63
+ "@opengeni/xai-subscription": "^0.1.4-canary.14",
64
64
  "@temporalio/client": "^1.17.0",
65
65
  "better-auth": "^1.6.14",
66
66
  "hono": "^4.12.18",
@@ -4,7 +4,7 @@ import {
4
4
  SessionAuthorizationDeniedError,
5
5
  type ApiRouteDeps,
6
6
  } from "@opengeni/core";
7
- import { withSessionRlsActorContext } from "@opengeni/db";
7
+ import { freezeAgentLearningPolicy, withSessionRlsActorContext } from "@opengeni/db";
8
8
  import { HTTPException } from "hono/http-exception";
9
9
 
10
10
  export async function withAccessGrantSessionRlsContext<T>(
@@ -21,10 +21,22 @@ export async function withAccessGrantSessionRlsContext<T>(
21
21
  }
22
22
  try {
23
23
  const actor = await requireLiveAgentAttemptAuthorization(deps.db, grant, callerSessionId);
24
+ const learning = await freezeAgentLearningPolicy(deps.db, {
25
+ accountId: grant.accountId,
26
+ workspaceId: grant.workspaceId,
27
+ actor: {
28
+ kind: "agent",
29
+ sessionId: actor.callerSessionId,
30
+ turnId: actor.turnId,
31
+ attemptId: actor.attemptId,
32
+ executionGeneration: actor.executionGeneration,
33
+ },
34
+ });
24
35
  return await withSessionRlsActorContext(
25
36
  {
26
37
  subjectId: actor.subjectId,
27
38
  initiatingHumanSubjectId: actor.initiatingHumanSubjectId,
39
+ privateFileOwnerSubjectId: learning.defaultScope === "personal" ? learning.subjectId : null,
28
40
  },
29
41
  fn,
30
42
  );
package/src/app.ts CHANGED
@@ -111,7 +111,6 @@ import {
111
111
  assertOrganizationUserSetupQueryTransportConfigured,
112
112
  } from "./auth/organization-user-setup";
113
113
  import { createApiSandboxClient, makeResumeBoxById } from "./sandbox/access";
114
- import { requireLimit } from "@opengeni/core";
115
114
  import { buildOpenGeniMcpServer } from "./mcp/server";
116
115
  import {
117
116
  buildWorkspaceToolGatewayMcpServer,
@@ -154,8 +153,10 @@ import { registerSuperGrokRoutes } from "./routes/supergrok";
154
153
  import { registerConnectionRoutes } from "./routes/connections";
155
154
  import { registerConnectRoutes } from "./routes/connect";
156
155
  import { registerHostMcpBindingRoutes } from "./routes/host-mcp-bindings";
156
+ import { registerHostMcpResolverRoutes } from "./routes/host-mcp-resolvers";
157
157
  import { registerExternalIdentityLinkRoutes } from "./routes/external-identity-links";
158
158
  import { registerDocumentRoutes } from "./routes/documents";
159
+ import { registerKnowledgeRoutes } from "./routes/knowledge";
159
160
  import { registerEnrollmentRoutes } from "./routes/enrollments";
160
161
  import { registerMachineRoutes } from "./routes/machines";
161
162
  import { registerMemorySlackPublicationRoutes } from "./routes/memory-slack-publications";
@@ -349,16 +350,6 @@ export function createAppComposition(deps: AppDependencies): {
349
350
  workspaceId,
350
351
  documentId,
351
352
  getDocumentServices(),
352
- {
353
- beforeEmbed: async ({ chunkCount }) => {
354
- await requireLimit(routeDeps, {
355
- accountId,
356
- workspaceId,
357
- action: "document:index",
358
- quantity: chunkCount,
359
- });
360
- },
361
- },
362
353
  { viewerSubjectId: authoritySubjectId },
363
354
  );
364
355
  if (
@@ -1243,6 +1234,7 @@ export function createAppComposition(deps: AppDependencies): {
1243
1234
  registerBrowserSessionRoutes(app, routeDeps);
1244
1235
  registerComputerSessionRoutes(app, routeDeps);
1245
1236
  registerDocumentRoutes(app, routeDeps);
1237
+ registerKnowledgeRoutes(app, routeDeps);
1246
1238
  registerGitHubRoutes(app, routeDeps);
1247
1239
  registerInstallRoutes(app, routeDeps);
1248
1240
  registerInteractionResourceRoutes(app, routeDeps);
@@ -1263,6 +1255,7 @@ export function createAppComposition(deps: AppDependencies): {
1263
1255
  registerConnectionRoutes(app, routeDeps);
1264
1256
  registerConnectRoutes(app, routeDeps);
1265
1257
  registerHostMcpBindingRoutes(app, routeDeps);
1258
+ registerHostMcpResolverRoutes(app, routeDeps);
1266
1259
  registerExternalIdentityLinkRoutes(app, routeDeps);
1267
1260
  registerCapabilityRoutes(app, routeDeps);
1268
1261
  registerApiIntegrationRoutes(app, routeDeps);
package/src/index.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { scheduledTaskKnowledgeSource } from "@opengeni/contracts";
1
2
  import {
2
3
  dbSearchPath,
3
4
  getSettings,
@@ -27,7 +28,7 @@ import {
27
28
  type Observability,
28
29
  } from "@opengeni/observability";
29
30
  import { createObjectStorage } from "@opengeni/storage";
30
- import { createRemoteMcpCredentialsPort } from "@opengeni/core/remote-mcp-credentials";
31
+ import { createNativeRemoteMcpCredentialsPort } from "@opengeni/core/remote-mcp-credentials";
31
32
  import { isArtifactRuntimeConfigured } from "@opengeni/artifact-tool/runtime/development";
32
33
  import {
33
34
  resolveCatalogSettings,
@@ -420,7 +421,7 @@ export async function startApi(
420
421
  }
421
422
  const { app, routeDeps } = createAppComposition({
422
423
  settings,
423
- connectionCredentials: createRemoteMcpCredentialsPort(settings),
424
+ connectionCredentials: createNativeRemoteMcpCredentialsPort(settings, dbClient.db),
424
425
  db: dbClient.db,
425
426
  bus,
426
427
  workflowClient: workflowClient.client,
@@ -692,7 +693,7 @@ function temporalScheduleOptions(task: ScheduledTask, taskQueue: string): Schedu
692
693
 
693
694
  function scheduledTaskEffectivelyPaused(task: ScheduledTask): boolean {
694
695
  if (task.status === "paused") return true;
695
- if (task.action.kind !== "knowledge_source_sync") return false;
696
+ if (!scheduledTaskKnowledgeSource(task)) return false;
696
697
  const control = task.metadata.knowledgeSourceSync;
697
698
  if (!control || typeof control !== "object") return false;
698
699
  const record = control as Record<string, unknown>;
@@ -1,3 +1,8 @@
1
+ import {
2
+ scheduledTaskKnowledgeSource,
3
+ requireScheduledTaskKnowledgeSource,
4
+ knowledgeSourceAgentConfig,
5
+ } from "@opengeni/contracts";
1
6
  import type { Settings } from "@opengeni/config";
2
7
  import { createHash } from "node:crypto";
3
8
  import { ExternalActorContinuation } from "@opengeni/contracts/external-identities";
@@ -840,10 +845,10 @@ export async function preflightAtlassianScheduleAuthorization(
840
845
  input: { task: ScheduledTask; subjectId: string },
841
846
  ): Promise<void> {
842
847
  const { task } = input;
843
- if (task.action.kind !== "knowledge_source_sync") return;
848
+ if (!scheduledTaskKnowledgeSource(task)) return;
844
849
  if (
845
- task.action.initiatingSubjectId !== input.subjectId ||
846
- task.action.connection.ownerSubjectId !== input.subjectId
850
+ requireScheduledTaskKnowledgeSource(task).initiatingSubjectId !== input.subjectId ||
851
+ requireScheduledTaskKnowledgeSource(task).connection.ownerSubjectId !== input.subjectId
847
852
  ) {
848
853
  throw new HTTPException(403, {
849
854
  message: "knowledge source schedule requires the exact initiating subject",
@@ -862,10 +867,10 @@ export async function revokeAtlassianScheduleAuthorization(
862
867
  input: { task: ScheduledTask; subjectId: string },
863
868
  ): Promise<void> {
864
869
  const { task } = input;
865
- if (task.action.kind !== "knowledge_source_sync") return;
870
+ if (!scheduledTaskKnowledgeSource(task)) return;
866
871
  if (
867
- task.action.initiatingSubjectId !== input.subjectId ||
868
- task.action.connection.ownerSubjectId !== input.subjectId
872
+ requireScheduledTaskKnowledgeSource(task).initiatingSubjectId !== input.subjectId ||
873
+ requireScheduledTaskKnowledgeSource(task).connection.ownerSubjectId !== input.subjectId
869
874
  ) {
870
875
  throw new HTTPException(403, {
871
876
  message: "knowledge source schedule requires the exact initiating subject",
@@ -879,11 +884,11 @@ export async function revokeAtlassianScheduleAuthorization(
879
884
  taskId: task.id,
880
885
  accountId: task.accountId,
881
886
  workspaceId: task.workspaceId,
882
- connectionId: task.action.connection.connectionId,
883
- connectionVersion: task.action.connection.connectionVersion,
884
- sourceId: task.action.sourceId,
885
- sourceLifecycleGeneration: task.action.sourceLifecycleGeneration,
886
- sourceConfigGeneration: task.action.sourceConfigGeneration,
887
+ connectionId: requireScheduledTaskKnowledgeSource(task).connection.connectionId,
888
+ connectionVersion: requireScheduledTaskKnowledgeSource(task).connection.connectionVersion,
889
+ sourceId: requireScheduledTaskKnowledgeSource(task).sourceId,
890
+ sourceLifecycleGeneration: requireScheduledTaskKnowledgeSource(task).sourceLifecycleGeneration,
891
+ sourceConfigGeneration: requireScheduledTaskKnowledgeSource(task).sourceConfigGeneration,
887
892
  externalSourceId,
888
893
  subjectId: input.subjectId,
889
894
  });
@@ -1014,11 +1019,11 @@ async function materializeSchedules(
1014
1019
  let source = null as Awaited<ReturnType<typeof upsertKnowledgeSource>> | null;
1015
1020
  let existingTask: (typeof tasks)[number] | null = null;
1016
1021
  for (const task of tasks) {
1017
- if (task.action.kind !== "knowledge_source_sync") continue;
1022
+ if (!scheduledTaskKnowledgeSource(task)) continue;
1018
1023
  const resolved = await getKnowledgeSourceForSyncAuthority(deps.db, {
1019
1024
  accountId: input.accountId,
1020
1025
  workspaceId: input.workspaceId,
1021
- sourceId: task.action.sourceId,
1026
+ sourceId: requireScheduledTaskKnowledgeSource(task).sourceId,
1022
1027
  initiatingSubjectId: input.subjectId,
1023
1028
  });
1024
1029
  if (resolved?.source.externalSourceId !== identity.externalSourceId) continue;
@@ -1125,7 +1130,10 @@ async function materializeSchedules(
1125
1130
  name: `Sync ${selectedSource.kind === "jira_project" ? "Jira" : "Confluence"}: ${selectedSource.name}`,
1126
1131
  schedule: atlassianSchedule(selectedSource.syncCadence),
1127
1132
  overlapPolicy: "buffer_one",
1128
- action,
1133
+ action: { kind: "agent_turn" },
1134
+ agentConfig: knowledgeSourceAgentConfig(action, existingTask.agentConfig),
1135
+ refreshPersonalResourceAuthority: true,
1136
+ authorityUpdatedBy: { kind: "subject", subjectId: input.subjectId },
1129
1137
  metadata: {
1130
1138
  ...existingTask.metadata,
1131
1139
  connectorKind: "atlassian",
@@ -1153,16 +1161,11 @@ async function materializeSchedules(
1153
1161
  status: "active",
1154
1162
  schedule: atlassianSchedule(selectedSource.syncCadence),
1155
1163
  overlapPolicy: "buffer_one",
1156
- action,
1164
+ action: { kind: "agent_turn" },
1157
1165
  runMode: "new_session_per_run",
1158
1166
  targetSessionId: null,
1159
1167
  connectionAuthorities: [],
1160
- agentConfig: {
1161
- prompt: "Knowledge source synchronization",
1162
- resources: [],
1163
- tools: [],
1164
- metadata: {},
1165
- },
1168
+ agentConfig: knowledgeSourceAgentConfig(action),
1166
1169
  variableSetId: null,
1167
1170
  environmentId: null,
1168
1171
  rigId: null,
@@ -1187,11 +1190,11 @@ async function materializeSchedules(
1187
1190
  }
1188
1191
 
1189
1192
  for (const task of tasks) {
1190
- if (task.action.kind !== "knowledge_source_sync") continue;
1193
+ if (!scheduledTaskKnowledgeSource(task)) continue;
1191
1194
  const resolved = await getKnowledgeSourceForSyncAuthority(deps.db, {
1192
1195
  accountId: input.accountId,
1193
1196
  workspaceId: input.workspaceId,
1194
- sourceId: task.action.sourceId,
1197
+ sourceId: requireScheduledTaskKnowledgeSource(task).sourceId,
1195
1198
  initiatingSubjectId: input.subjectId,
1196
1199
  });
1197
1200
  if (!resolved || enabledIds.has(resolved.source.externalSourceId)) continue;
@@ -1510,20 +1513,20 @@ async function deauthorizeConnectionSources(
1510
1513
  connection.id,
1511
1514
  );
1512
1515
  for (const task of tasks) {
1513
- if (task.action.kind !== "knowledge_source_sync") continue;
1516
+ if (!scheduledTaskKnowledgeSource(task)) continue;
1514
1517
  const resolved = await getKnowledgeSourceForSyncAuthority(deps.db, {
1515
1518
  accountId: task.accountId,
1516
1519
  workspaceId: task.workspaceId,
1517
- sourceId: task.action.sourceId,
1520
+ sourceId: requireScheduledTaskKnowledgeSource(task).sourceId,
1518
1521
  initiatingSubjectId: subjectId,
1519
1522
  });
1520
1523
  if (!resolved || resolved.source.lifecycleState !== "active") continue;
1521
1524
  await deauthorizeKnowledgeSourceRetrieval(deps.db, {
1522
1525
  accountId: task.accountId,
1523
1526
  workspaceId: task.workspaceId,
1524
- sourceId: task.action.sourceId,
1525
- audience: task.action.destination,
1526
- operationId: `atlassian-deauthorize:${connection.id}:${connection.version + 1}:${task.action.sourceId}:${reasonCode}`,
1527
+ sourceId: requireScheduledTaskKnowledgeSource(task).sourceId,
1528
+ audience: requireScheduledTaskKnowledgeSource(task).destination,
1529
+ operationId: `atlassian-deauthorize:${connection.id}:${connection.version + 1}:${requireScheduledTaskKnowledgeSource(task).sourceId}:${reasonCode}`,
1527
1530
  reasonCode,
1528
1531
  actor: { kind: "human", subjectId, initiatingHumanSubjectId: subjectId },
1529
1532
  });