@opengeni/core 2.7.5-canary.0 → 2.7.5-canary.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.
@@ -0,0 +1,36 @@
1
+ import type { GitHubActionPolicyActor, GitHubActionPolicyActorState, GitHubActionPolicyDecision, GitHubActionPolicyGroup } from "@opengeni/contracts";
2
+ import { type ConnectorActionPolicySnapshotEntry, type Database } from "@opengeni/db";
3
+ import { GITHUB_REST_MCP_APP_SERVER_ID, GITHUB_REST_MCP_PERSONAL_SERVER_ID } from "@opengeni/runtime/github-rest-mcp";
4
+ export declare const GITHUB_ACTION_POLICY_GROUP_TOOL_NAMES: {
5
+ readonly routine: ("issue_comment" | "issue_create" | "issue_update" | "pull_request_comment" | "pull_request_create" | "pull_request_request_review" | "pull_request_update" | "ref_create")[];
6
+ readonly review: readonly ["pull_request_review_submit"];
7
+ readonly merge: readonly ["pull_request_merge"];
8
+ };
9
+ export type GitHubActionPolicyActorBinding = {
10
+ actor: GitHubActionPolicyActor;
11
+ label: string;
12
+ connectionId: string;
13
+ serverId: typeof GITHUB_REST_MCP_APP_SERVER_ID | typeof GITHUB_REST_MCP_PERSONAL_SERVER_ID;
14
+ };
15
+ export declare function projectGitHubActionPolicyActor(policies: readonly ConnectorActionPolicySnapshotEntry[], binding: GitHubActionPolicyActorBinding): GitHubActionPolicyActorState;
16
+ export declare function listGitHubActionPolicyActors(db: Database, input: {
17
+ accountId: string;
18
+ workspaceId: string;
19
+ actors: readonly GitHubActionPolicyActorBinding[];
20
+ }): Promise<GitHubActionPolicyActorState[]>;
21
+ export declare function updateGitHubActionPolicyGroup(db: Database, input: {
22
+ accountId: string;
23
+ workspaceId: string;
24
+ subjectId: string;
25
+ actor: GitHubActionPolicyActorBinding;
26
+ group: GitHubActionPolicyGroup;
27
+ decision: GitHubActionPolicyDecision;
28
+ }): Promise<GitHubActionPolicyActorState>;
29
+ export declare function githubAppActionPolicyActor(input: {
30
+ installationId: number;
31
+ accountLogin: string | null;
32
+ }): GitHubActionPolicyActorBinding;
33
+ export declare function personalGitHubActionPolicyActor(input: {
34
+ connectionId: string;
35
+ githubLogin: string;
36
+ }): GitHubActionPolicyActorBinding;
@@ -80,7 +80,7 @@ export declare const prReviewAutomationAdapter: {
80
80
  eager?: boolean | undefined;
81
81
  optional?: boolean | undefined;
82
82
  }[];
83
- firstPartyMcpTools: ("artifacts_archive" | "artifacts_create" | "artifacts_get_source" | "artifacts_list" | "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_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_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" | "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_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")[];
83
+ 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" | "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_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")[];
84
84
  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")[];
85
85
  model: string | null;
86
86
  reasoningEffort: "high" | "low" | "max" | "medium" | "minimal" | "none" | "xhigh" | null;
package/dist/index.d.ts CHANGED
@@ -23,6 +23,7 @@ export * from "./domain/product-integration-pack.js";
23
23
  export * from "./domain/personal-connection-delegations.js";
24
24
  export * from "./domain/resources.js";
25
25
  export * from "./domain/github-repository-bindings.js";
26
+ export * from "./domain/github-action-policies.js";
26
27
  export * from "./domain/session-tool-policy.js";
27
28
  export * from "./domain/scheduled-tasks.js";
28
29
  export * from "./domain/sessions.js";
package/dist/index.js CHANGED
@@ -7942,6 +7942,111 @@ function applyGitHubRepositoryBindings(resources, bindings) {
7942
7942
  });
7943
7943
  }
7944
7944
 
7945
+ // src/domain/github-action-policies.ts
7946
+ import {
7947
+ listConnectorActionPolicies,
7948
+ resolveConnectorActionPolicy,
7949
+ upsertConnectorActionPolicies
7950
+ } from "@opengeni/db";
7951
+ import {
7952
+ GITHUB_REST_MCP_APP_SERVER_ID,
7953
+ GITHUB_REST_MCP_PERSONAL_SERVER_ID,
7954
+ GITHUB_REST_WRITE_TOOL_NAMES
7955
+ } from "@opengeni/runtime/github-rest-mcp";
7956
+ var GITHUB_ACTION_POLICY_GROUP_TOOL_NAMES = {
7957
+ routine: GITHUB_REST_WRITE_TOOL_NAMES.filter(
7958
+ (toolName) => toolName !== "pull_request_review_submit" && toolName !== "pull_request_merge"
7959
+ ),
7960
+ review: ["pull_request_review_submit"],
7961
+ merge: ["pull_request_merge"]
7962
+ };
7963
+ var groupedToolNames = Object.values(GITHUB_ACTION_POLICY_GROUP_TOOL_NAMES).flat();
7964
+ if (groupedToolNames.length !== new Set(groupedToolNames).size || GITHUB_REST_WRITE_TOOL_NAMES.some((toolName) => !groupedToolNames.includes(toolName))) {
7965
+ throw new Error("GitHub action policy groups must cover every write tool exactly once");
7966
+ }
7967
+ function effectiveToolDecision(policies, actor, toolName) {
7968
+ const resolved = resolveConnectorActionPolicy(policies, {
7969
+ connectionId: actor.connectionId,
7970
+ serverId: actor.serverId,
7971
+ toolName,
7972
+ actionName: toolName
7973
+ });
7974
+ if (!resolved.managed) return "allow";
7975
+ if (resolved.entry) return resolved.entry.policy;
7976
+ return resolved.decision;
7977
+ }
7978
+ function effectiveGroupDecision(policies, actor, group) {
7979
+ const decisions = new Set(
7980
+ GITHUB_ACTION_POLICY_GROUP_TOOL_NAMES[group].map(
7981
+ (toolName) => effectiveToolDecision(policies, actor, toolName)
7982
+ )
7983
+ );
7984
+ return decisions.size === 1 ? decisions.values().next().value : "mixed";
7985
+ }
7986
+ function projectGitHubActionPolicyActor(policies, binding) {
7987
+ const groups = {
7988
+ routine: effectiveGroupDecision(policies, binding, "routine"),
7989
+ review: effectiveGroupDecision(policies, binding, "review"),
7990
+ merge: effectiveGroupDecision(policies, binding, "merge")
7991
+ };
7992
+ return binding.actor.kind === "workspace_app" ? {
7993
+ kind: "workspace_app",
7994
+ installationId: binding.actor.installationId,
7995
+ label: binding.label,
7996
+ groups
7997
+ } : {
7998
+ kind: "personal",
7999
+ connectionId: binding.actor.connectionId,
8000
+ label: binding.label,
8001
+ groups
8002
+ };
8003
+ }
8004
+ async function listGitHubActionPolicyActors(db, input) {
8005
+ const policies = await listConnectorActionPolicies(db, {
8006
+ accountId: input.accountId,
8007
+ workspaceId: input.workspaceId,
8008
+ connectionIds: input.actors.map((actor) => actor.connectionId)
8009
+ });
8010
+ return input.actors.map((actor) => projectGitHubActionPolicyActor(policies, actor));
8011
+ }
8012
+ async function updateGitHubActionPolicyGroup(db, input) {
8013
+ await upsertConnectorActionPolicies(
8014
+ db,
8015
+ GITHUB_ACTION_POLICY_GROUP_TOOL_NAMES[input.group].map((toolName) => ({
8016
+ accountId: input.accountId,
8017
+ workspaceId: input.workspaceId,
8018
+ subjectId: input.subjectId,
8019
+ connectionId: input.actor.connectionId,
8020
+ serverId: input.actor.serverId,
8021
+ toolName,
8022
+ actionName: toolName,
8023
+ policy: input.decision
8024
+ }))
8025
+ );
8026
+ const policies = await listConnectorActionPolicies(db, {
8027
+ accountId: input.accountId,
8028
+ workspaceId: input.workspaceId,
8029
+ connectionIds: [input.actor.connectionId]
8030
+ });
8031
+ return projectGitHubActionPolicyActor(policies, input.actor);
8032
+ }
8033
+ function githubAppActionPolicyActor(input) {
8034
+ return {
8035
+ actor: { kind: "workspace_app", installationId: input.installationId },
8036
+ label: input.accountLogin ? `OpenGeni bot on ${input.accountLogin}` : "OpenGeni bot",
8037
+ connectionId: `github-app:${input.installationId}`,
8038
+ serverId: GITHUB_REST_MCP_APP_SERVER_ID
8039
+ };
8040
+ }
8041
+ function personalGitHubActionPolicyActor(input) {
8042
+ return {
8043
+ actor: { kind: "personal", connectionId: input.connectionId },
8044
+ label: `@${input.githubLogin}`,
8045
+ connectionId: input.connectionId,
8046
+ serverId: GITHUB_REST_MCP_PERSONAL_SERVER_ID
8047
+ };
8048
+ }
8049
+
7945
8050
  // src/domain/session-tool-policy.ts
7946
8051
  import {
7947
8052
  SESSION_EFFECTIVE_TOOL_POLICY_ID_LIMIT,
@@ -14922,6 +15027,7 @@ import {
14922
15027
  getSandbox as getSandbox5,
14923
15028
  getVariableSet as getVariableSet4,
14924
15029
  NewSessionDraftAccessError,
15030
+ newSessionDraftSelectedProjectChannelId,
14925
15031
  newSessionDraftToolsProvided,
14926
15032
  newSessionSelectionHistory,
14927
15033
  publicNewSessionDraftOptions,
@@ -14935,6 +15041,7 @@ function hasOwn(value, key) {
14935
15041
  }
14936
15042
  function mapNewSessionDraft(row) {
14937
15043
  if (!row) return null;
15044
+ const selectedProjectChannelId = newSessionDraftSelectedProjectChannelId(row);
14938
15045
  return NewSessionDraft.parse({
14939
15046
  revision: row.revision,
14940
15047
  text: row.text,
@@ -14944,6 +15051,7 @@ function mapNewSessionDraft(row) {
14944
15051
  model: row.model,
14945
15052
  reasoningEffort: row.reasoningEffort,
14946
15053
  latencyMode: row.latencyMode,
15054
+ ...selectedProjectChannelId !== void 0 ? { selectedProjectChannelId } : {},
14947
15055
  options: publicNewSessionDraftOptions(row),
14948
15056
  selectionHistory: newSessionSelectionHistory(row),
14949
15057
  updatedAt: row.updatedAt.toISOString()
@@ -15104,6 +15212,7 @@ async function saveActorNewSessionDraft(deps, grant, workspaceId, rawInput, cano
15104
15212
  model: input.model,
15105
15213
  reasoningEffort: input.reasoningEffort,
15106
15214
  latencyMode: input.latencyMode,
15215
+ ...input.selectedProjectChannelId !== void 0 ? { selectedProjectChannelId: input.selectedProjectChannelId } : {},
15107
15216
  options: input.options,
15108
15217
  // Only managed people are removed through removeWorkspaceMember().
15109
15218
  // API keys and delegated service actors (for example the first-party
@@ -16210,6 +16319,7 @@ export {
16210
16319
  EditableArtifactSnapshotVerificationError,
16211
16320
  EditableArtifactStaleBaseError,
16212
16321
  EditableArtifactUndoTargetError,
16322
+ GITHUB_ACTION_POLICY_GROUP_TOOL_NAMES,
16213
16323
  InMemoryEditableArtifactLiveTicketStore,
16214
16324
  InMemoryEditableArtifactStableIdFactory,
16215
16325
  InMemoryEditableArtifactStore,
@@ -16416,6 +16526,7 @@ export {
16416
16526
  getManagedHumanSessionCreateCapabilities,
16417
16527
  getManagedSession,
16418
16528
  getWorkspaceInsights,
16529
+ githubAppActionPolicyActor,
16419
16530
  googleDrivePublicationDelegationFromVisibleConnections,
16420
16531
  governedLearningEvidenceIsSlackDerived,
16421
16532
  governedLearningSlackImportance,
@@ -16446,6 +16557,7 @@ export {
16446
16557
  legacySandboxRuntimeFromPacks,
16447
16558
  listCapabilityPacks,
16448
16559
  listFleet,
16560
+ listGitHubActionPolicyActors,
16449
16561
  listGitHubRepositoryBindingCandidates,
16450
16562
  listManagedHumanUserResourceAuthorities,
16451
16563
  listRigChangesForApi,
@@ -16493,6 +16605,7 @@ export {
16493
16605
  personalConnectionDelegationsEqual,
16494
16606
  personalConnectionDelegationsFromParent,
16495
16607
  personalConnectionDelegationsFromVisibleConnections,
16608
+ personalGitHubActionPolicyActor,
16496
16609
  personalGitHubRepositoryResources,
16497
16610
  portableSkillCapabilityId,
16498
16611
  portableSkillPluginKey,
@@ -16507,6 +16620,7 @@ export {
16507
16620
  preferredFikenConnection,
16508
16621
  preflightCreateTimeSandboxTarget,
16509
16622
  previewCapabilityPackInstallation,
16623
+ projectGitHubActionPolicyActor,
16510
16624
  promoteSetupAppendChange,
16511
16625
  promoteVerifiedDefinitionEditChangeForApi,
16512
16626
  proposeRigChangeForApi,
@@ -16613,6 +16727,7 @@ export {
16613
16727
  syncCreatedScheduledTask,
16614
16728
  syncUpdatedScheduledTask,
16615
16729
  unboundGitHubRepositoryResources,
16730
+ updateGitHubActionPolicyGroup,
16616
16731
  updateManagedHumanSessionVisibility,
16617
16732
  updateRigForApi,
16618
16733
  updateScheduledTaskForApi,