@shipfox/api-integration-github 7.1.0 → 9.0.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.
Files changed (99) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +45 -0
  3. package/dist/api/client.js +1 -1
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/api/installation-token-envelope.d.ts +1 -1
  6. package/dist/api/installation-token-envelope.d.ts.map +1 -1
  7. package/dist/api/installation-token-envelope.js +1 -1
  8. package/dist/api/installation-token-envelope.js.map +1 -1
  9. package/dist/api/installation-token-provider.d.ts +1 -1
  10. package/dist/api/installation-token-provider.d.ts.map +1 -1
  11. package/dist/api/installation-token-provider.js.map +1 -1
  12. package/dist/core/actions-logs.d.ts +1 -1
  13. package/dist/core/actions-logs.d.ts.map +1 -1
  14. package/dist/core/actions-logs.js +2 -2
  15. package/dist/core/actions-logs.js.map +1 -1
  16. package/dist/core/agent-tool-selection.d.ts +1 -1
  17. package/dist/core/agent-tool-selection.d.ts.map +1 -1
  18. package/dist/core/agent-tool-selection.js +1 -1
  19. package/dist/core/agent-tool-selection.js.map +1 -1
  20. package/dist/core/agent-tools.d.ts +4 -4
  21. package/dist/core/agent-tools.d.ts.map +1 -1
  22. package/dist/core/agent-tools.js +2 -2
  23. package/dist/core/agent-tools.js.map +1 -1
  24. package/dist/core/errors.d.ts +1 -1
  25. package/dist/core/errors.d.ts.map +1 -1
  26. package/dist/core/errors.js +1 -1
  27. package/dist/core/errors.js.map +1 -1
  28. package/dist/core/github-agent-tool-catalog.d.ts +49 -0
  29. package/dist/core/github-agent-tool-catalog.d.ts.map +1 -0
  30. package/dist/core/github-agent-tool-catalog.js +867 -0
  31. package/dist/core/github-agent-tool-catalog.js.map +1 -0
  32. package/dist/core/install.d.ts +1 -1
  33. package/dist/core/install.d.ts.map +1 -1
  34. package/dist/core/install.js.map +1 -1
  35. package/dist/core/source-control.d.ts +1 -1
  36. package/dist/core/source-control.d.ts.map +1 -1
  37. package/dist/core/source-control.js +1 -1
  38. package/dist/core/source-control.js.map +1 -1
  39. package/dist/core/webhook-processor.d.ts +1 -1
  40. package/dist/core/webhook-processor.d.ts.map +1 -1
  41. package/dist/core/webhook-processor.js +1 -1
  42. package/dist/core/webhook-processor.js.map +1 -1
  43. package/dist/core/webhook.d.ts +1 -1
  44. package/dist/core/webhook.d.ts.map +1 -1
  45. package/dist/core/webhook.js +1 -1
  46. package/dist/core/webhook.js.map +1 -1
  47. package/dist/index.d.ts +2 -2
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +1 -1
  50. package/dist/index.js.map +1 -1
  51. package/dist/metrics/instance.d.ts +1 -1
  52. package/dist/metrics/instance.d.ts.map +1 -1
  53. package/dist/metrics/instance.js.map +1 -1
  54. package/dist/presentation/dto/integrations.d.ts +8 -7
  55. package/dist/presentation/dto/integrations.d.ts.map +1 -1
  56. package/dist/presentation/dto/integrations.js +18 -7
  57. package/dist/presentation/dto/integrations.js.map +1 -1
  58. package/dist/presentation/e2eRoutes/create-connection.d.ts +1 -1
  59. package/dist/presentation/e2eRoutes/create-connection.d.ts.map +1 -1
  60. package/dist/presentation/e2eRoutes/create-connection.js +1 -1
  61. package/dist/presentation/e2eRoutes/create-connection.js.map +1 -1
  62. package/dist/presentation/routes/errors.js +1 -1
  63. package/dist/presentation/routes/errors.js.map +1 -1
  64. package/dist/presentation/routes/install.d.ts +1 -1
  65. package/dist/presentation/routes/install.d.ts.map +1 -1
  66. package/dist/presentation/routes/install.js.map +1 -1
  67. package/dist/presentation/routes/webhooks.d.ts +1 -1
  68. package/dist/presentation/routes/webhooks.d.ts.map +1 -1
  69. package/dist/presentation/routes/webhooks.js +1 -1
  70. package/dist/presentation/routes/webhooks.js.map +1 -1
  71. package/dist/tsconfig.test.tsbuildinfo +1 -1
  72. package/package.json +17 -15
  73. package/src/api/client.ts +1 -1
  74. package/src/api/installation-token-envelope.ts +1 -1
  75. package/src/api/installation-token-provider.test.ts +1 -1
  76. package/src/api/installation-token-provider.ts +1 -1
  77. package/src/core/actions-logs.ts +2 -2
  78. package/src/core/agent-tool-selection.ts +1 -1
  79. package/src/core/agent-tools.ts +10 -10
  80. package/src/core/errors.ts +1 -1
  81. package/src/core/github-agent-tool-catalog.ts +963 -0
  82. package/src/core/install.test.ts +1 -1
  83. package/src/core/install.ts +1 -1
  84. package/src/core/source-control.ts +1 -1
  85. package/src/core/webhook-processor.test.ts +1 -1
  86. package/src/core/webhook-processor.ts +1 -1
  87. package/src/core/webhook.test.ts +1 -1
  88. package/src/core/webhook.ts +7 -7
  89. package/src/index.ts +2 -1
  90. package/src/metrics/instance.ts +1 -1
  91. package/src/presentation/dto/integrations.ts +24 -6
  92. package/src/presentation/e2eRoutes/create-connection.ts +2 -2
  93. package/src/presentation/e2eRoutes/index.test.ts +1 -1
  94. package/src/presentation/routes/errors.ts +1 -1
  95. package/src/presentation/routes/install.test.ts +1 -1
  96. package/src/presentation/routes/install.ts +1 -1
  97. package/src/presentation/routes/webhooks.test.ts +1 -1
  98. package/src/presentation/routes/webhooks.ts +2 -5
  99. package/tsconfig.build.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/agent-tools.ts"],"sourcesContent":["import type {\n AgentToolCallInput,\n AgentToolCatalogEntry,\n AgentToolSelectionCatalog,\n AgentToolSession,\n AgentToolsProvider,\n IntegrationConnection,\n OpenAgentToolsSessionInput,\n} from '@shipfox/api-integration-core-dto';\nimport {\n type GithubAgentToolCatalogEntry,\n type GithubAgentToolId,\n type GithubAgentToolRequiredScope,\n githubAgentToolCatalog,\n githubAgentToolSelectionCatalog,\n} from '@shipfox/api-integration-github-dto';\nimport {Octokit} from 'octokit';\nimport {\n createGithubInstallationTokenProvider,\n type GithubInstallationTokenProvider,\n} from '#api/installation-token-provider.js';\nimport {normalizedGithubApiBaseUrl} from '#config.js';\nimport type {GithubInstallation} from '#db/installations.js';\nimport {GithubIntegrationProviderError} from './errors.js';\n\nexport type {\n GithubAgentToolCatalogEntry,\n GithubAgentToolCategory,\n GithubAgentToolId,\n GithubAgentToolPermission,\n GithubAgentToolPermissionAccess,\n GithubAgentToolRequiredPermission,\n GithubAgentToolRequiredScope,\n GithubAgentToolSensitivity,\n} from '@shipfox/api-integration-github-dto';\nexport {\n buildGithubAgentToolSelectionCatalog,\n DEFAULT_JOB_LOG_TAIL_LINES,\n githubAgentToolCatalog,\n githubAgentToolSelectionCatalog,\n} from '@shipfox/api-integration-github-dto';\n\ntype GithubIntegrationConnection = IntegrationConnection<'github'>;\n\ntype GithubToolCallResult = {\n isError?: boolean | undefined;\n content: readonly {type: 'text'; text: string}[];\n structuredContent?: Record<string, unknown> | undefined;\n};\n\nexport class GithubAgentToolsProvider\n implements\n AgentToolsProvider<\n GithubIntegrationConnection,\n GithubAgentToolRequiredScope,\n unknown,\n GithubToolCallResult\n >\n{\n private readonly tokenProvider: GithubInstallationTokenProvider;\n\n constructor(private readonly options: GithubAgentToolsProviderOptions = {}) {\n this.tokenProvider = options.tokenProvider ?? createGithubInstallationTokenProvider();\n }\n\n catalog(): readonly GithubAgentToolCatalogEntry[] {\n return githubAgentToolCatalog;\n }\n\n selectionCatalog(): AgentToolSelectionCatalog {\n return githubAgentToolSelectionCatalog;\n }\n\n async openSession(\n input: OpenAgentToolsSessionInput<GithubIntegrationConnection, GithubAgentToolRequiredScope>,\n ): Promise<AgentToolSession<GithubToolCallResult>> {\n const installation = await this.options.getInstallationByConnectionId?.(input.connection.id);\n if (!installation) {\n throw new GithubIntegrationProviderError(\n 'installation-not-found',\n 'GitHub installation is not connected to this integration',\n );\n }\n const installationId = Number(installation.installationId);\n if (!Number.isSafeInteger(installationId) || installationId < 1) {\n throw new GithubIntegrationProviderError(\n 'malformed-provider-response',\n 'GitHub installation has an invalid installation ID',\n );\n }\n let tokenPromise:\n | ReturnType<GithubInstallationTokenProvider['getInstallationAccessToken']>\n | undefined;\n\n return {\n call: async (call) => {\n const tool = input.tools.find((candidate) => candidate.id === call.toolId);\n if (!tool) return githubToolError(`Unknown GitHub tool: ${call.toolId}`);\n const operation = resolveGithubOperation(tool, call);\n if (operation === undefined) return githubToolError('Unknown GitHub tool operation');\n const validationError = validateGithubToolArguments(tool, call.arguments);\n if (validationError) return githubToolError(validationError);\n tokenPromise ??= this.tokenProvider.getInstallationAccessToken(installationId);\n const token = await tokenPromise;\n if (!hasGrantedPermissions(token.permissions ?? {}, tool, call)) {\n return githubToolError(\n 'GitHub installation token is missing permission for this operation',\n );\n }\n const client = (this.options.createClient ?? createOctokitClient)(token.token);\n\n try {\n const response = await client.request(operation.route, operation.parameters);\n return githubToolResult(tool.id as GithubAgentToolId, response.data);\n } catch (error) {\n if (error instanceof GithubIntegrationProviderError)\n return githubToolError(error.message);\n throw error;\n }\n },\n };\n }\n}\n\nexport interface GithubAgentToolsProviderOptions {\n getInstallationByConnectionId?:\n | ((connectionId: string) => Promise<GithubInstallation | undefined>)\n | undefined;\n tokenProvider?: GithubInstallationTokenProvider | undefined;\n createClient?: GithubToolClientFactory | undefined;\n}\n\nexport interface GithubToolClient {\n request(route: string, parameters: Record<string, unknown>): Promise<{data: unknown}>;\n}\n\nexport type GithubToolClientFactory = (token: string) => GithubToolClient;\n\ninterface GithubToolOperation {\n route: string;\n parameters: Record<string, unknown>;\n}\n\nfunction createOctokitClient(token: string): GithubToolClient {\n const octokit = new Octokit({\n auth: token,\n baseUrl: normalizedGithubApiBaseUrl(),\n retry: {enabled: false},\n });\n return {\n request: async (route, parameters) => await octokit.request(route, parameters),\n };\n}\n\nfunction resolveGithubOperation(\n tool: AgentToolCatalogEntry<GithubAgentToolRequiredScope>,\n call: AgentToolCallInput,\n): GithubToolOperation | undefined {\n const args = call.arguments;\n const method = typeof args.method === 'string' ? args.method : undefined;\n const params = {...args};\n delete params.method;\n\n if (tool.methods && !tool.methods.some((candidate) => candidate.id === method)) return undefined;\n\n const toolId = tool.id as GithubAgentToolId;\n const route = githubOperationRoute(toolId, method, params);\n return route === undefined\n ? undefined\n : {route, parameters: projectGithubOperationParameters(toolId, method, params)};\n}\n\nfunction githubOperationRoute(\n toolId: GithubAgentToolId,\n method: string | undefined,\n args: Record<string, unknown>,\n): string | undefined {\n const owner = '{owner}';\n const repo = '{repo}';\n const issue = '{issue_number}';\n const pull = '{pull_number}';\n const run = '{run_id}';\n const resource = '{resource_id}';\n const repoPath = `/repos/${owner}/${repo}`;\n\n switch (`${toolId}.${method ?? ''}`) {\n case 'issue_read.get':\n return `GET ${repoPath}/issues/${issue}`;\n case 'issue_read.get_comments':\n return `GET ${repoPath}/issues/${issue}/comments`;\n case 'issue_read.get_sub_issues':\n return `GET ${repoPath}/issues/${issue}/sub_issues`;\n case 'issue_read.get_parent':\n return `GET ${repoPath}/issues/${issue}/parent`;\n case 'issue_read.get_labels':\n return `GET ${repoPath}/issues/${issue}/labels`;\n case 'list_issue_types.':\n return args.repo === undefined\n ? 'GET /orgs/{owner}/issue-types'\n : `GET ${repoPath}/issue-types`;\n case 'list_issues.':\n return `GET ${repoPath}/issues`;\n case 'search_issues.':\n return 'GET /search/issues';\n case 'add_issue_comment.':\n if (args.comment_id !== undefined)\n return `POST ${repoPath}/issues/comments/{comment_id}/reactions`;\n return args.reaction !== undefined && args.body === undefined\n ? `POST ${repoPath}/issues/${issue}/reactions`\n : `POST ${repoPath}/issues/${issue}/comments`;\n case 'issue_write.create':\n return `POST ${repoPath}/issues`;\n case 'issue_write.update':\n return `PATCH ${repoPath}/issues/${issue}`;\n case 'sub_issue_write.add':\n return `POST ${repoPath}/issues/${issue}/sub_issues`;\n case 'sub_issue_write.remove':\n return `DELETE ${repoPath}/issues/${issue}/sub_issues/{sub_issue_id}`;\n case 'sub_issue_write.reprioritize':\n return `PATCH ${repoPath}/issues/${issue}/sub_issues/{sub_issue_id}`;\n case 'pull_request_read.get':\n return `GET ${repoPath}/pulls/${pull}`;\n case 'pull_request_read.get_diff':\n return `GET ${repoPath}/pulls/${pull}`;\n case 'pull_request_read.get_status':\n return `GET ${repoPath}/commits/{ref}/status`;\n case 'pull_request_read.get_files':\n return `GET ${repoPath}/pulls/${pull}/files`;\n case 'pull_request_read.get_commits':\n return `GET ${repoPath}/pulls/${pull}/commits`;\n case 'pull_request_read.get_review_comments':\n return `GET ${repoPath}/pulls/${pull}/comments`;\n case 'pull_request_read.get_reviews':\n return `GET ${repoPath}/pulls/${pull}/reviews`;\n case 'pull_request_read.get_comments':\n return `GET ${repoPath}/issues/${pull}/comments`;\n case 'pull_request_read.get_check_runs':\n return `GET ${repoPath}/commits/{ref}/check-runs`;\n case 'list_pull_requests.':\n return `GET ${repoPath}/pulls`;\n case 'search_pull_requests.':\n return 'GET /search/issues';\n case 'create_pull_request.':\n return `POST ${repoPath}/pulls`;\n case 'update_pull_request.':\n return `PATCH ${repoPath}/pulls/${pull}`;\n case 'add_reply_to_pull_request_comment.':\n return `POST ${repoPath}/pulls/{comment_id}/replies`;\n case 'merge_pull_request.':\n return `PUT ${repoPath}/pulls/${pull}/merge`;\n case 'update_pull_request_branch.':\n return `PUT ${repoPath}/pulls/${pull}/update-branch`;\n case 'pull_request_review_write.create':\n return `POST ${repoPath}/pulls/${pull}/reviews`;\n case 'pull_request_review_write.submit_pending':\n return `POST ${repoPath}/pulls/${pull}/reviews/{review_id}/events`;\n case 'pull_request_review_write.delete_pending':\n return `DELETE ${repoPath}/pulls/${pull}/reviews/{review_id}`;\n case 'add_comment_to_pending_review.':\n return `POST ${repoPath}/pulls/${pull}/comments`;\n case 'actions_list.list_workflows':\n return `GET ${repoPath}/actions/workflows`;\n case 'actions_list.list_workflow_runs':\n return `GET ${repoPath}/actions/workflows/${resource}/runs`;\n case 'actions_list.list_workflow_jobs':\n return `GET ${repoPath}/actions/runs/${resource}/jobs`;\n case 'actions_list.list_workflow_run_artifacts':\n return `GET ${repoPath}/actions/runs/${resource}/artifacts`;\n case 'actions_get.get_workflow':\n return `GET ${repoPath}/actions/workflows/${resource}`;\n case 'actions_get.get_workflow_run':\n return `GET ${repoPath}/actions/runs/${resource}`;\n case 'actions_get.get_workflow_job':\n return `GET ${repoPath}/actions/jobs/${resource}`;\n case 'actions_get.download_workflow_run_artifact':\n return `GET ${repoPath}/actions/artifacts/${resource}/{archive_format}`;\n case 'actions_get.get_workflow_run_usage':\n return `GET ${repoPath}/actions/runs/${resource}/timing`;\n case 'actions_get.get_workflow_run_logs_url':\n return `GET ${repoPath}/actions/runs/${resource}/logs`;\n case 'actions_run_trigger.run_workflow':\n return `POST ${repoPath}/actions/workflows/{workflow_id}/dispatches`;\n case 'actions_run_trigger.rerun_workflow_run':\n return `POST ${repoPath}/actions/runs/${run}/rerun`;\n case 'actions_run_trigger.rerun_failed_jobs':\n return `POST ${repoPath}/actions/runs/${run}/rerun-failed-jobs`;\n case 'actions_run_trigger.cancel_workflow_run':\n return `POST ${repoPath}/actions/runs/${run}/cancel`;\n case 'actions_run_trigger.delete_workflow_run_logs':\n return `DELETE ${repoPath}/actions/runs/${run}/logs`;\n case 'get_job_logs.':\n return `GET ${repoPath}/actions/jobs/{job_id}/logs`;\n default:\n return undefined;\n }\n}\n\nfunction projectGithubOperationParameters(\n toolId: GithubAgentToolId,\n method: string | undefined,\n args: Record<string, unknown>,\n): Record<string, unknown> {\n const parameters = {...args};\n if (toolId === 'add_issue_comment' && parameters.reaction !== undefined) {\n parameters.content = parameters.reaction;\n delete parameters.reaction;\n if (parameters.body === undefined) delete parameters.body;\n }\n if (toolId === 'pull_request_read' && method === 'get_diff') {\n parameters.headers = {accept: 'application/vnd.github.diff'};\n }\n return parameters;\n}\n\nfunction githubToolResult(toolId: GithubAgentToolId, data: unknown): GithubToolCallResult {\n const structuredContent = projectGithubToolOutput(toolId, data);\n return {\n content: [{type: 'text', text: JSON.stringify(structuredContent)}],\n structuredContent,\n };\n}\n\nfunction projectGithubToolOutput(\n toolId: GithubAgentToolId,\n data: unknown,\n): Record<string, unknown> {\n switch (toolId) {\n case 'list_issue_types':\n return {issue_types: data};\n case 'list_issues':\n return {issues: data};\n case 'search_issues':\n return {issues: githubSearchItems(data)};\n case 'list_pull_requests':\n return {pull_requests: data};\n case 'search_pull_requests':\n return {pull_requests: githubSearchItems(data)};\n case 'create_pull_request':\n case 'update_pull_request':\n return {pull_request: data};\n case 'merge_pull_request':\n return {merge: data};\n default:\n return isRecord(data) ? data : {result: data};\n }\n}\n\nfunction githubSearchItems(data: unknown): unknown {\n return isRecord(data) ? data.items : data;\n}\n\nfunction githubToolError(message: string): GithubToolCallResult {\n return {isError: true, content: [{type: 'text', text: message}]};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction validateGithubToolArguments(\n tool: AgentToolCatalogEntry<GithubAgentToolRequiredScope>,\n arguments_: Record<string, unknown>,\n): string | undefined {\n const required = Array.isArray(tool.inputSchema.required) ? tool.inputSchema.required : [];\n for (const name of required) {\n if (typeof name === 'string' && arguments_[name] === undefined) {\n return `Missing required parameter: ${name}`;\n }\n }\n\n const methodRequired = methodRequiredParameters(tool.inputSchema, arguments_);\n for (const name of methodRequired) {\n if (arguments_[name] === undefined) return `Missing required parameter: ${name}`;\n }\n\n const properties = tool.inputSchema.properties;\n if (typeof properties !== 'object' || properties === null || Array.isArray(properties)) {\n return undefined;\n }\n const propertySchemas = properties as Record<string, unknown>;\n for (const [name, value] of Object.entries(arguments_)) {\n const schema = propertySchemas[name];\n if (typeof schema !== 'object' || schema === null || Array.isArray(schema)) continue;\n const type = (schema as {type?: unknown}).type;\n if (type === 'integer' && (!Number.isInteger(value) || typeof value !== 'number')) {\n return `Parameter ${name} must be an integer`;\n }\n if (type === 'array' && !Array.isArray(value)) return `Parameter ${name} must be an array`;\n }\n return undefined;\n}\n\nfunction methodRequiredParameters(\n inputSchema: AgentToolCatalogEntry<GithubAgentToolRequiredScope>['inputSchema'],\n arguments_: Record<string, unknown>,\n): string[] {\n const method = arguments_.method;\n if (typeof method !== 'string' || !Array.isArray(inputSchema.oneOf)) return [];\n\n for (const candidate of inputSchema.oneOf) {\n if (!isRecord(candidate) || !isRecord(candidate.properties)) continue;\n const methodSchema = candidate.properties.method;\n if (!isRecord(methodSchema) || methodSchema.const !== method) continue;\n return Array.isArray(candidate.required)\n ? candidate.required.filter((name): name is string => typeof name === 'string')\n : [];\n }\n\n return [];\n}\n\nfunction hasGrantedPermissions(\n granted: Record<string, 'read' | 'write' | 'admin'>,\n tool: AgentToolCatalogEntry<GithubAgentToolRequiredScope>,\n call: AgentToolCallInput,\n): boolean {\n const method = typeof call.arguments.method === 'string' ? call.arguments.method : undefined;\n const required =\n tool.methods?.find((candidate) => candidate.id === method)?.requiredScope ?? tool.requiredScope;\n return required.every(({permission, access}) => {\n const actual = granted[permission];\n return actual === 'write' || actual === 'admin' || actual === access;\n });\n}\n"],"names":["githubAgentToolCatalog","githubAgentToolSelectionCatalog","Octokit","createGithubInstallationTokenProvider","normalizedGithubApiBaseUrl","GithubIntegrationProviderError","buildGithubAgentToolSelectionCatalog","DEFAULT_JOB_LOG_TAIL_LINES","GithubAgentToolsProvider","options","tokenProvider","catalog","selectionCatalog","openSession","input","installation","getInstallationByConnectionId","connection","id","installationId","Number","isSafeInteger","tokenPromise","call","tool","tools","find","candidate","toolId","githubToolError","operation","resolveGithubOperation","undefined","validationError","validateGithubToolArguments","arguments","getInstallationAccessToken","token","hasGrantedPermissions","permissions","client","createClient","createOctokitClient","response","request","route","parameters","githubToolResult","data","error","message","octokit","auth","baseUrl","retry","enabled","args","method","params","methods","some","githubOperationRoute","projectGithubOperationParameters","owner","repo","issue","pull","run","resource","repoPath","comment_id","reaction","body","content","headers","accept","structuredContent","projectGithubToolOutput","type","text","JSON","stringify","issue_types","issues","githubSearchItems","pull_requests","pull_request","merge","isRecord","result","items","isError","value","Array","isArray","arguments_","required","inputSchema","name","methodRequired","methodRequiredParameters","properties","propertySchemas","Object","entries","schema","isInteger","oneOf","methodSchema","const","filter","granted","requiredScope","every","permission","access","actual"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/core/agent-tools.ts"],"sourcesContent":["import type {\n AgentToolCallInput,\n AgentToolCatalogEntry,\n AgentToolSelectionCatalog,\n AgentToolSession,\n AgentToolsProvider,\n IntegrationConnection,\n OpenAgentToolsSessionInput,\n} from '@shipfox/api-integration-spi';\nimport {Octokit} from 'octokit';\nimport {\n createGithubInstallationTokenProvider,\n type GithubInstallationTokenProvider,\n} from '#api/installation-token-provider.js';\nimport {normalizedGithubApiBaseUrl} from '#config.js';\nimport type {GithubInstallation} from '#db/installations.js';\nimport {GithubIntegrationProviderError} from './errors.js';\nimport {\n type GithubAgentToolCatalogEntry,\n type GithubAgentToolId,\n type GithubAgentToolRequiredScope,\n githubAgentToolCatalog,\n githubAgentToolSelectionCatalog,\n} from './github-agent-tool-catalog.js';\n\nexport type {\n GithubAgentToolCatalogEntry,\n GithubAgentToolCategory,\n GithubAgentToolId,\n GithubAgentToolPermission,\n GithubAgentToolPermissionAccess,\n GithubAgentToolRequiredPermission,\n GithubAgentToolRequiredScope,\n GithubAgentToolSensitivity,\n} from './github-agent-tool-catalog.js';\nexport {\n buildGithubAgentToolSelectionCatalog,\n DEFAULT_JOB_LOG_TAIL_LINES,\n githubAgentToolCatalog,\n githubAgentToolSelectionCatalog,\n} from './github-agent-tool-catalog.js';\n\ntype GithubIntegrationConnection = IntegrationConnection<'github'>;\n\ntype GithubToolCallResult = {\n isError?: boolean | undefined;\n content: readonly {type: 'text'; text: string}[];\n structuredContent?: Record<string, unknown> | undefined;\n};\n\nexport class GithubAgentToolsProvider\n implements\n AgentToolsProvider<\n GithubIntegrationConnection,\n GithubAgentToolRequiredScope,\n unknown,\n GithubToolCallResult\n >\n{\n private readonly tokenProvider: GithubInstallationTokenProvider;\n\n constructor(private readonly options: GithubAgentToolsProviderOptions = {}) {\n this.tokenProvider = options.tokenProvider ?? createGithubInstallationTokenProvider();\n }\n\n catalog(): readonly GithubAgentToolCatalogEntry[] {\n return githubAgentToolCatalog;\n }\n\n selectionCatalog(): AgentToolSelectionCatalog {\n return githubAgentToolSelectionCatalog;\n }\n\n async openSession(\n input: OpenAgentToolsSessionInput<GithubIntegrationConnection, GithubAgentToolRequiredScope>,\n ): Promise<AgentToolSession<GithubToolCallResult>> {\n const installation = await this.options.getInstallationByConnectionId?.(input.connection.id);\n if (!installation) {\n throw new GithubIntegrationProviderError(\n 'installation-not-found',\n 'GitHub installation is not connected to this integration',\n );\n }\n const installationId = Number(installation.installationId);\n if (!Number.isSafeInteger(installationId) || installationId < 1) {\n throw new GithubIntegrationProviderError(\n 'malformed-provider-response',\n 'GitHub installation has an invalid installation ID',\n );\n }\n let tokenPromise:\n | ReturnType<GithubInstallationTokenProvider['getInstallationAccessToken']>\n | undefined;\n\n return {\n call: async (call) => {\n const tool = input.tools.find((candidate) => candidate.id === call.toolId);\n if (!tool) return githubToolError(`Unknown GitHub tool: ${call.toolId}`);\n const operation = resolveGithubOperation(tool, call);\n if (operation === undefined) return githubToolError('Unknown GitHub tool operation');\n const validationError = validateGithubToolArguments(tool, call.arguments);\n if (validationError) return githubToolError(validationError);\n tokenPromise ??= this.tokenProvider.getInstallationAccessToken(installationId);\n const token = await tokenPromise;\n if (!hasGrantedPermissions(token.permissions ?? {}, tool, call)) {\n return githubToolError(\n 'GitHub installation token is missing permission for this operation',\n );\n }\n const client = (this.options.createClient ?? createOctokitClient)(token.token);\n\n try {\n const response = await client.request(operation.route, operation.parameters);\n return githubToolResult(tool.id as GithubAgentToolId, response.data);\n } catch (error) {\n if (error instanceof GithubIntegrationProviderError)\n return githubToolError(error.message);\n throw error;\n }\n },\n };\n }\n}\n\nexport interface GithubAgentToolsProviderOptions {\n getInstallationByConnectionId?:\n | ((connectionId: string) => Promise<GithubInstallation | undefined>)\n | undefined;\n tokenProvider?: GithubInstallationTokenProvider | undefined;\n createClient?: GithubToolClientFactory | undefined;\n}\n\nexport interface GithubToolClient {\n request(route: string, parameters: Record<string, unknown>): Promise<{data: unknown}>;\n}\n\nexport type GithubToolClientFactory = (token: string) => GithubToolClient;\n\ninterface GithubToolOperation {\n route: string;\n parameters: Record<string, unknown>;\n}\n\nfunction createOctokitClient(token: string): GithubToolClient {\n const octokit = new Octokit({\n auth: token,\n baseUrl: normalizedGithubApiBaseUrl(),\n retry: {enabled: false},\n });\n return {\n request: async (route, parameters) => await octokit.request(route, parameters),\n };\n}\n\nfunction resolveGithubOperation(\n tool: AgentToolCatalogEntry<GithubAgentToolRequiredScope>,\n call: AgentToolCallInput,\n): GithubToolOperation | undefined {\n const args = call.arguments;\n const method = typeof args.method === 'string' ? args.method : undefined;\n const params = {...args};\n delete params.method;\n\n if (tool.methods && !tool.methods.some((candidate) => candidate.id === method)) return undefined;\n\n const toolId = tool.id as GithubAgentToolId;\n const route = githubOperationRoute(toolId, method, params);\n return route === undefined\n ? undefined\n : {route, parameters: projectGithubOperationParameters(toolId, method, params)};\n}\n\nfunction githubOperationRoute(\n toolId: GithubAgentToolId,\n method: string | undefined,\n args: Record<string, unknown>,\n): string | undefined {\n const owner = '{owner}';\n const repo = '{repo}';\n const issue = '{issue_number}';\n const pull = '{pull_number}';\n const run = '{run_id}';\n const resource = '{resource_id}';\n const repoPath = `/repos/${owner}/${repo}`;\n\n switch (`${toolId}.${method ?? ''}`) {\n case 'issue_read.get':\n return `GET ${repoPath}/issues/${issue}`;\n case 'issue_read.get_comments':\n return `GET ${repoPath}/issues/${issue}/comments`;\n case 'issue_read.get_sub_issues':\n return `GET ${repoPath}/issues/${issue}/sub_issues`;\n case 'issue_read.get_parent':\n return `GET ${repoPath}/issues/${issue}/parent`;\n case 'issue_read.get_labels':\n return `GET ${repoPath}/issues/${issue}/labels`;\n case 'list_issue_types.':\n return args.repo === undefined\n ? 'GET /orgs/{owner}/issue-types'\n : `GET ${repoPath}/issue-types`;\n case 'list_issues.':\n return `GET ${repoPath}/issues`;\n case 'search_issues.':\n return 'GET /search/issues';\n case 'add_issue_comment.':\n if (args.comment_id !== undefined)\n return `POST ${repoPath}/issues/comments/{comment_id}/reactions`;\n return args.reaction !== undefined && args.body === undefined\n ? `POST ${repoPath}/issues/${issue}/reactions`\n : `POST ${repoPath}/issues/${issue}/comments`;\n case 'issue_write.create':\n return `POST ${repoPath}/issues`;\n case 'issue_write.update':\n return `PATCH ${repoPath}/issues/${issue}`;\n case 'sub_issue_write.add':\n return `POST ${repoPath}/issues/${issue}/sub_issues`;\n case 'sub_issue_write.remove':\n return `DELETE ${repoPath}/issues/${issue}/sub_issues/{sub_issue_id}`;\n case 'sub_issue_write.reprioritize':\n return `PATCH ${repoPath}/issues/${issue}/sub_issues/{sub_issue_id}`;\n case 'pull_request_read.get':\n return `GET ${repoPath}/pulls/${pull}`;\n case 'pull_request_read.get_diff':\n return `GET ${repoPath}/pulls/${pull}`;\n case 'pull_request_read.get_status':\n return `GET ${repoPath}/commits/{ref}/status`;\n case 'pull_request_read.get_files':\n return `GET ${repoPath}/pulls/${pull}/files`;\n case 'pull_request_read.get_commits':\n return `GET ${repoPath}/pulls/${pull}/commits`;\n case 'pull_request_read.get_review_comments':\n return `GET ${repoPath}/pulls/${pull}/comments`;\n case 'pull_request_read.get_reviews':\n return `GET ${repoPath}/pulls/${pull}/reviews`;\n case 'pull_request_read.get_comments':\n return `GET ${repoPath}/issues/${pull}/comments`;\n case 'pull_request_read.get_check_runs':\n return `GET ${repoPath}/commits/{ref}/check-runs`;\n case 'list_pull_requests.':\n return `GET ${repoPath}/pulls`;\n case 'search_pull_requests.':\n return 'GET /search/issues';\n case 'create_pull_request.':\n return `POST ${repoPath}/pulls`;\n case 'update_pull_request.':\n return `PATCH ${repoPath}/pulls/${pull}`;\n case 'add_reply_to_pull_request_comment.':\n return `POST ${repoPath}/pulls/{comment_id}/replies`;\n case 'merge_pull_request.':\n return `PUT ${repoPath}/pulls/${pull}/merge`;\n case 'update_pull_request_branch.':\n return `PUT ${repoPath}/pulls/${pull}/update-branch`;\n case 'pull_request_review_write.create':\n return `POST ${repoPath}/pulls/${pull}/reviews`;\n case 'pull_request_review_write.submit_pending':\n return `POST ${repoPath}/pulls/${pull}/reviews/{review_id}/events`;\n case 'pull_request_review_write.delete_pending':\n return `DELETE ${repoPath}/pulls/${pull}/reviews/{review_id}`;\n case 'add_comment_to_pending_review.':\n return `POST ${repoPath}/pulls/${pull}/comments`;\n case 'actions_list.list_workflows':\n return `GET ${repoPath}/actions/workflows`;\n case 'actions_list.list_workflow_runs':\n return `GET ${repoPath}/actions/workflows/${resource}/runs`;\n case 'actions_list.list_workflow_jobs':\n return `GET ${repoPath}/actions/runs/${resource}/jobs`;\n case 'actions_list.list_workflow_run_artifacts':\n return `GET ${repoPath}/actions/runs/${resource}/artifacts`;\n case 'actions_get.get_workflow':\n return `GET ${repoPath}/actions/workflows/${resource}`;\n case 'actions_get.get_workflow_run':\n return `GET ${repoPath}/actions/runs/${resource}`;\n case 'actions_get.get_workflow_job':\n return `GET ${repoPath}/actions/jobs/${resource}`;\n case 'actions_get.download_workflow_run_artifact':\n return `GET ${repoPath}/actions/artifacts/${resource}/{archive_format}`;\n case 'actions_get.get_workflow_run_usage':\n return `GET ${repoPath}/actions/runs/${resource}/timing`;\n case 'actions_get.get_workflow_run_logs_url':\n return `GET ${repoPath}/actions/runs/${resource}/logs`;\n case 'actions_run_trigger.run_workflow':\n return `POST ${repoPath}/actions/workflows/{workflow_id}/dispatches`;\n case 'actions_run_trigger.rerun_workflow_run':\n return `POST ${repoPath}/actions/runs/${run}/rerun`;\n case 'actions_run_trigger.rerun_failed_jobs':\n return `POST ${repoPath}/actions/runs/${run}/rerun-failed-jobs`;\n case 'actions_run_trigger.cancel_workflow_run':\n return `POST ${repoPath}/actions/runs/${run}/cancel`;\n case 'actions_run_trigger.delete_workflow_run_logs':\n return `DELETE ${repoPath}/actions/runs/${run}/logs`;\n case 'get_job_logs.':\n return `GET ${repoPath}/actions/jobs/{job_id}/logs`;\n default:\n return undefined;\n }\n}\n\nfunction projectGithubOperationParameters(\n toolId: GithubAgentToolId,\n method: string | undefined,\n args: Record<string, unknown>,\n): Record<string, unknown> {\n const parameters = {...args};\n if (toolId === 'add_issue_comment' && parameters.reaction !== undefined) {\n parameters.content = parameters.reaction;\n delete parameters.reaction;\n if (parameters.body === undefined) delete parameters.body;\n }\n if (toolId === 'pull_request_read' && method === 'get_diff') {\n parameters.headers = {accept: 'application/vnd.github.diff'};\n }\n return parameters;\n}\n\nfunction githubToolResult(toolId: GithubAgentToolId, data: unknown): GithubToolCallResult {\n const structuredContent = projectGithubToolOutput(toolId, data);\n return {\n content: [{type: 'text', text: JSON.stringify(structuredContent)}],\n structuredContent,\n };\n}\n\nfunction projectGithubToolOutput(\n toolId: GithubAgentToolId,\n data: unknown,\n): Record<string, unknown> {\n switch (toolId) {\n case 'list_issue_types':\n return {issue_types: data};\n case 'list_issues':\n return {issues: data};\n case 'search_issues':\n return {issues: githubSearchItems(data)};\n case 'list_pull_requests':\n return {pull_requests: data};\n case 'search_pull_requests':\n return {pull_requests: githubSearchItems(data)};\n case 'create_pull_request':\n case 'update_pull_request':\n return {pull_request: data};\n case 'merge_pull_request':\n return {merge: data};\n default:\n return isRecord(data) ? data : {result: data};\n }\n}\n\nfunction githubSearchItems(data: unknown): unknown {\n return isRecord(data) ? data.items : data;\n}\n\nfunction githubToolError(message: string): GithubToolCallResult {\n return {isError: true, content: [{type: 'text', text: message}]};\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction validateGithubToolArguments(\n tool: AgentToolCatalogEntry<GithubAgentToolRequiredScope>,\n arguments_: Record<string, unknown>,\n): string | undefined {\n const required = Array.isArray(tool.inputSchema.required) ? tool.inputSchema.required : [];\n for (const name of required) {\n if (typeof name === 'string' && arguments_[name] === undefined) {\n return `Missing required parameter: ${name}`;\n }\n }\n\n const methodRequired = methodRequiredParameters(tool.inputSchema, arguments_);\n for (const name of methodRequired) {\n if (arguments_[name] === undefined) return `Missing required parameter: ${name}`;\n }\n\n const properties = tool.inputSchema.properties;\n if (typeof properties !== 'object' || properties === null || Array.isArray(properties)) {\n return undefined;\n }\n const propertySchemas = properties as Record<string, unknown>;\n for (const [name, value] of Object.entries(arguments_)) {\n const schema = propertySchemas[name];\n if (typeof schema !== 'object' || schema === null || Array.isArray(schema)) continue;\n const type = (schema as {type?: unknown}).type;\n if (type === 'integer' && (!Number.isInteger(value) || typeof value !== 'number')) {\n return `Parameter ${name} must be an integer`;\n }\n if (type === 'array' && !Array.isArray(value)) return `Parameter ${name} must be an array`;\n }\n return undefined;\n}\n\nfunction methodRequiredParameters(\n inputSchema: AgentToolCatalogEntry<GithubAgentToolRequiredScope>['inputSchema'],\n arguments_: Record<string, unknown>,\n): string[] {\n const method = arguments_.method;\n if (typeof method !== 'string' || !Array.isArray(inputSchema.oneOf)) return [];\n\n for (const candidate of inputSchema.oneOf) {\n if (!isRecord(candidate) || !isRecord(candidate.properties)) continue;\n const methodSchema = candidate.properties.method;\n if (!isRecord(methodSchema) || methodSchema.const !== method) continue;\n return Array.isArray(candidate.required)\n ? candidate.required.filter((name): name is string => typeof name === 'string')\n : [];\n }\n\n return [];\n}\n\nfunction hasGrantedPermissions(\n granted: Record<string, 'read' | 'write' | 'admin'>,\n tool: AgentToolCatalogEntry<GithubAgentToolRequiredScope>,\n call: AgentToolCallInput,\n): boolean {\n const method = typeof call.arguments.method === 'string' ? call.arguments.method : undefined;\n const required =\n tool.methods?.find((candidate) => candidate.id === method)?.requiredScope ?? tool.requiredScope;\n return required.every(({permission, access}) => {\n const actual = granted[permission];\n return actual === 'write' || actual === 'admin' || actual === access;\n });\n}\n"],"names":["Octokit","createGithubInstallationTokenProvider","normalizedGithubApiBaseUrl","GithubIntegrationProviderError","githubAgentToolCatalog","githubAgentToolSelectionCatalog","buildGithubAgentToolSelectionCatalog","DEFAULT_JOB_LOG_TAIL_LINES","GithubAgentToolsProvider","options","tokenProvider","catalog","selectionCatalog","openSession","input","installation","getInstallationByConnectionId","connection","id","installationId","Number","isSafeInteger","tokenPromise","call","tool","tools","find","candidate","toolId","githubToolError","operation","resolveGithubOperation","undefined","validationError","validateGithubToolArguments","arguments","getInstallationAccessToken","token","hasGrantedPermissions","permissions","client","createClient","createOctokitClient","response","request","route","parameters","githubToolResult","data","error","message","octokit","auth","baseUrl","retry","enabled","args","method","params","methods","some","githubOperationRoute","projectGithubOperationParameters","owner","repo","issue","pull","run","resource","repoPath","comment_id","reaction","body","content","headers","accept","structuredContent","projectGithubToolOutput","type","text","JSON","stringify","issue_types","issues","githubSearchItems","pull_requests","pull_request","merge","isRecord","result","items","isError","value","Array","isArray","arguments_","required","inputSchema","name","methodRequired","methodRequiredParameters","properties","propertySchemas","Object","entries","schema","isInteger","oneOf","methodSchema","const","filter","granted","requiredScope","every","permission","access","actual"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { IntegrationProviderError } from '@shipfox/api-integration-core-dto';
1
+ import { IntegrationProviderError } from '@shipfox/api-integration-spi';
2
2
  export declare class GithubIntegrationProviderError extends IntegrationProviderError {
3
3
  }
4
4
  export declare class GithubInstallStateError extends Error {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,mCAAmC,CAAC;AAE3E,qBAAa,8BAA+B,SAAQ,wBAAwB;CAAG;AAE/E,qBAAa,uBAAwB,SAAQ,KAAK;CAAG;AAErD,qBAAa,oCAAqC,SAAQ,KAAK;;CAI9D;AAED,qBAAa,oCAAqC,SAAQ,KAAK;gBACjD,cAAc,EAAE,MAAM;CAGnC;AAED,qBAAa,oCAAqC,SAAQ,KAAK;gBACjD,cAAc,EAAE,MAAM,GAAG,MAAM;CAG5C"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAAC,MAAM,8BAA8B,CAAC;AAEtE,qBAAa,8BAA+B,SAAQ,wBAAwB;CAAG;AAE/E,qBAAa,uBAAwB,SAAQ,KAAK;CAAG;AAErD,qBAAa,oCAAqC,SAAQ,KAAK;;CAI9D;AAED,qBAAa,oCAAqC,SAAQ,KAAK;gBACjD,cAAc,EAAE,MAAM;CAGnC;AAED,qBAAa,oCAAqC,SAAQ,KAAK;gBACjD,cAAc,EAAE,MAAM,GAAG,MAAM;CAG5C"}
@@ -1,4 +1,4 @@
1
- import { IntegrationProviderError } from '@shipfox/api-integration-core-dto';
1
+ import { IntegrationProviderError } from '@shipfox/api-integration-spi';
2
2
  export class GithubIntegrationProviderError extends IntegrationProviderError {
3
3
  }
4
4
  export class GithubInstallStateError extends Error {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/errors.ts"],"sourcesContent":["import {IntegrationProviderError} from '@shipfox/api-integration-core-dto';\n\nexport class GithubIntegrationProviderError extends IntegrationProviderError {}\n\nexport class GithubInstallStateError extends Error {}\n\nexport class GithubInstallStateActorMismatchError extends Error {\n constructor() {\n super('GitHub install state was issued for a different user');\n }\n}\n\nexport class GithubInstallationNotAuthorizedError extends Error {\n constructor(installationId: number) {\n super(`GitHub installation is not accessible to the installing user: ${installationId}`);\n }\n}\n\nexport class GithubInstallationAlreadyLinkedError extends Error {\n constructor(installationId: number | string) {\n super(`GitHub installation is already linked to another Shipfox workspace: ${installationId}`);\n }\n}\n"],"names":["IntegrationProviderError","GithubIntegrationProviderError","GithubInstallStateError","Error","GithubInstallStateActorMismatchError","GithubInstallationNotAuthorizedError","installationId","GithubInstallationAlreadyLinkedError"],"mappings":"AAAA,SAAQA,wBAAwB,QAAO,oCAAoC;AAE3E,OAAO,MAAMC,uCAAuCD;AAA0B;AAE9E,OAAO,MAAME,gCAAgCC;AAAO;AAEpD,OAAO,MAAMC,6CAA6CD;IACxD,aAAc;QACZ,KAAK,CAAC;IACR;AACF;AAEA,OAAO,MAAME,6CAA6CF;IACxD,YAAYG,cAAsB,CAAE;QAClC,KAAK,CAAC,CAAC,8DAA8D,EAAEA,gBAAgB;IACzF;AACF;AAEA,OAAO,MAAMC,6CAA6CJ;IACxD,YAAYG,cAA+B,CAAE;QAC3C,KAAK,CAAC,CAAC,oEAAoE,EAAEA,gBAAgB;IAC/F;AACF"}
1
+ {"version":3,"sources":["../../src/core/errors.ts"],"sourcesContent":["import {IntegrationProviderError} from '@shipfox/api-integration-spi';\n\nexport class GithubIntegrationProviderError extends IntegrationProviderError {}\n\nexport class GithubInstallStateError extends Error {}\n\nexport class GithubInstallStateActorMismatchError extends Error {\n constructor() {\n super('GitHub install state was issued for a different user');\n }\n}\n\nexport class GithubInstallationNotAuthorizedError extends Error {\n constructor(installationId: number) {\n super(`GitHub installation is not accessible to the installing user: ${installationId}`);\n }\n}\n\nexport class GithubInstallationAlreadyLinkedError extends Error {\n constructor(installationId: number | string) {\n super(`GitHub installation is already linked to another Shipfox workspace: ${installationId}`);\n }\n}\n"],"names":["IntegrationProviderError","GithubIntegrationProviderError","GithubInstallStateError","Error","GithubInstallStateActorMismatchError","GithubInstallationNotAuthorizedError","installationId","GithubInstallationAlreadyLinkedError"],"mappings":"AAAA,SAAQA,wBAAwB,QAAO,+BAA+B;AAEtE,OAAO,MAAMC,uCAAuCD;AAA0B;AAE9E,OAAO,MAAME,gCAAgCC;AAAO;AAEpD,OAAO,MAAMC,6CAA6CD;IACxD,aAAc;QACZ,KAAK,CAAC;IACR;AACF;AAEA,OAAO,MAAME,6CAA6CF;IACxD,YAAYG,cAAsB,CAAE;QAClC,KAAK,CAAC,CAAC,8DAA8D,EAAEA,gBAAgB;IACzF;AACF;AAEA,OAAO,MAAMC,6CAA6CJ;IACxD,YAAYG,cAA+B,CAAE;QAC3C,KAAK,CAAC,CAAC,oEAAoE,EAAEA,gBAAgB;IAC/F;AACF"}
@@ -0,0 +1,49 @@
1
+ type AgentToolSensitivity = 'read' | 'write';
2
+ type AgentToolJsonSchema = Record<string, unknown>;
3
+ interface AgentToolCatalogMethod<RequiredScope = unknown> {
4
+ id: string;
5
+ description: string;
6
+ sensitivity: AgentToolSensitivity;
7
+ sensitive: boolean;
8
+ requiredScope: RequiredScope;
9
+ }
10
+ interface AgentToolCatalogEntry<RequiredScope = unknown> {
11
+ id: string;
12
+ description: string;
13
+ sensitivity: AgentToolSensitivity;
14
+ sensitive: boolean;
15
+ requiredScope: RequiredScope;
16
+ inputSchema: AgentToolJsonSchema;
17
+ outputSchema?: AgentToolJsonSchema | undefined;
18
+ methods?: readonly AgentToolCatalogMethod<RequiredScope>[] | undefined;
19
+ }
20
+ interface AgentToolSelector {
21
+ readonly token: string;
22
+ readonly kind: 'family' | 'family_wildcard' | 'method' | 'standalone';
23
+ readonly sensitivity: AgentToolSensitivity;
24
+ readonly sensitive: boolean;
25
+ }
26
+ interface AgentToolSelectionCatalog {
27
+ readonly selectors: readonly AgentToolSelector[];
28
+ }
29
+ export declare const DEFAULT_JOB_LOG_TAIL_LINES = 500;
30
+ export type GithubAgentToolCategory = 'issues' | 'pull_requests' | 'actions';
31
+ export type GithubAgentToolPermission = 'actions' | 'contents' | 'issues' | 'pull_requests';
32
+ export type GithubAgentToolPermissionAccess = 'read' | 'write';
33
+ export type GithubAgentToolSensitivity = 'read' | 'write';
34
+ export interface GithubAgentToolRequiredPermission {
35
+ permission: GithubAgentToolPermission;
36
+ access: GithubAgentToolPermissionAccess;
37
+ }
38
+ export type GithubAgentToolRequiredScope = readonly GithubAgentToolRequiredPermission[];
39
+ export type GithubAgentToolCatalogMethod = AgentToolCatalogMethod<GithubAgentToolRequiredScope>;
40
+ export interface GithubAgentToolCatalogEntry extends AgentToolCatalogEntry<GithubAgentToolRequiredScope> {
41
+ category: GithubAgentToolCategory;
42
+ methods?: readonly GithubAgentToolCatalogMethod[] | undefined;
43
+ }
44
+ export declare const githubAgentToolCatalog: readonly [GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry, GithubAgentToolCatalogEntry];
45
+ export type GithubAgentToolId = (typeof githubAgentToolCatalog)[number]['id'];
46
+ export declare function buildGithubAgentToolSelectionCatalog(catalog: readonly GithubAgentToolCatalogEntry[]): AgentToolSelectionCatalog;
47
+ export declare const githubAgentToolSelectionCatalog: AgentToolSelectionCatalog;
48
+ export {};
49
+ //# sourceMappingURL=github-agent-tool-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-agent-tool-catalog.d.ts","sourceRoot":"","sources":["../../src/core/github-agent-tool-catalog.ts"],"names":[],"mappings":"AAAA,KAAK,oBAAoB,GAAG,MAAM,GAAG,OAAO,CAAC;AAC7C,KAAK,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnD,UAAU,sBAAsB,CAAC,aAAa,GAAG,OAAO;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,oBAAoB,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,UAAU,qBAAqB,CAAC,aAAa,GAAG,OAAO;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,oBAAoB,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,mBAAmB,CAAC;IACjC,YAAY,CAAC,EAAE,mBAAmB,GAAG,SAAS,CAAC;IAC/C,OAAO,CAAC,EAAE,SAAS,sBAAsB,CAAC,aAAa,CAAC,EAAE,GAAG,SAAS,CAAC;CACxE;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,iBAAiB,GAAG,QAAQ,GAAG,YAAY,CAAC;IACtE,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,UAAU,yBAAyB;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;CAClD;AAED,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,CAAC;AAC7E,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,eAAe,CAAC;AAC5F,MAAM,MAAM,+BAA+B,GAAG,MAAM,GAAG,OAAO,CAAC;AAC/D,MAAM,MAAM,0BAA0B,GAAG,MAAM,GAAG,OAAO,CAAC;AAE1D,MAAM,WAAW,iCAAiC;IAChD,UAAU,EAAE,yBAAyB,CAAC;IACtC,MAAM,EAAE,+BAA+B,CAAC;CACzC;AAED,MAAM,MAAM,4BAA4B,GAAG,SAAS,iCAAiC,EAAE,CAAC;AAExF,MAAM,MAAM,4BAA4B,GAAG,sBAAsB,CAAC,4BAA4B,CAAC,CAAC;AAEhG,MAAM,WAAW,2BACf,SAAQ,qBAAqB,CAAC,4BAA4B,CAAC;IAC3D,QAAQ,EAAE,uBAAuB,CAAC;IAClC,OAAO,CAAC,EAAE,SAAS,4BAA4B,EAAE,GAAG,SAAS,CAAC;CAC/D;AAsOD,eAAO,MAAM,sBAAsB,4mBAqfwB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAE9E,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,SAAS,2BAA2B,EAAE,GAC9C,yBAAyB,CAoC3B;AAED,eAAO,MAAM,+BAA+B,2BACkB,CAAC"}