@shipfox/api-integration-github 2.0.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +22 -0
- package/dist/core/actions-logs.d.ts +1 -1
- package/dist/core/actions-logs.d.ts.map +1 -1
- package/dist/core/actions-logs.js +2 -1
- package/dist/core/actions-logs.js.map +1 -1
- package/dist/core/agent-tool-selection.d.ts +1 -3
- package/dist/core/agent-tool-selection.d.ts.map +1 -1
- package/dist/core/agent-tool-selection.js +1 -36
- package/dist/core/agent-tool-selection.js.map +1 -1
- package/dist/core/agent-tools.d.ts +4 -19
- package/dist/core/agent-tools.d.ts.map +1 -1
- package/dist/core/agent-tools.js +17 -816
- package/dist/core/agent-tools.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/src/core/actions-logs.ts +2 -1
- package/src/core/agent-tool-selection.ts +1 -42
- package/src/core/agent-tools.test.ts +38 -1
- package/src/core/agent-tools.ts +49 -894
- package/tsconfig.build.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
$ shipfox-swc
|
|
2
|
-
Successfully compiled: 28 files with swc (
|
|
2
|
+
Successfully compiled: 28 files with swc (410.65ms)
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @shipfox/api-integration-github
|
|
2
2
|
|
|
3
|
+
## 4.0.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [bbba3b7]
|
|
8
|
+
- @shipfox/node-drizzle@0.3.0
|
|
9
|
+
- @shipfox/api-workspaces@4.0.0
|
|
10
|
+
|
|
11
|
+
## 3.0.0
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 6b23868: Adds provider event and GitHub agent-tool catalogs for generated integration reference documentation.
|
|
16
|
+
- Updated dependencies [6b23868]
|
|
17
|
+
- Updated dependencies [7a71e7d]
|
|
18
|
+
- @shipfox/api-integration-core-dto@3.0.0
|
|
19
|
+
- @shipfox/api-integration-github-dto@3.0.0
|
|
20
|
+
- @shipfox/node-opentelemetry@0.5.1
|
|
21
|
+
- @shipfox/api-workspaces@3.0.0
|
|
22
|
+
- @shipfox/node-fastify@0.2.2
|
|
23
|
+
- @shipfox/api-auth-context@3.0.0
|
|
24
|
+
|
|
3
25
|
## 2.0.0
|
|
4
26
|
|
|
5
27
|
### Minor Changes
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { DEFAULT_JOB_LOG_TAIL_LINES } from '@shipfox/api-integration-github-dto';
|
|
2
2
|
export declare const DEFAULT_JOB_LOG_CONTENT_WINDOW_LINES = 5000;
|
|
3
3
|
export declare const MAX_JOB_LOG_RING_BUFFER_LINES = 100000;
|
|
4
4
|
export declare const MAX_JOB_LOG_LINE_BYTES: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions-logs.d.ts","sourceRoot":"","sources":["../../src/core/actions-logs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions-logs.d.ts","sourceRoot":"","sources":["../../src/core/actions-logs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,0BAA0B,EAAC,MAAM,qCAAqC,CAAC;AAC/E,eAAO,MAAM,oCAAoC,OAAO,CAAC;AACzD,eAAO,MAAM,6BAA6B,SAAS,CAAC;AACpD,eAAO,MAAM,sBAAsB,QAAmB,CAAC;AACvD,eAAO,MAAM,gCAAgC,OAAO,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,kCAAkC;IACjD,GAAG,EAAE,kBAAkB,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,mCAAmC;IAClD,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzD,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACxC,aAAa,CAAC,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAC,GAAG,SAAS,CAAC;CAC/D;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,kCAAkC,GACxC,OAAO,CAAC,kBAAkB,CAAC,CAE7B;AAED,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,mCAAmC,GACzC,OAAO,CAAC,yBAAyB,CAAC,CAiCpC;AAkCD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAM,GACrF;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,CAWvC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Buffer } from 'node:buffer';
|
|
2
|
-
|
|
2
|
+
import { DEFAULT_JOB_LOG_TAIL_LINES } from '@shipfox/api-integration-github-dto';
|
|
3
|
+
export { DEFAULT_JOB_LOG_TAIL_LINES } from '@shipfox/api-integration-github-dto';
|
|
3
4
|
export const DEFAULT_JOB_LOG_CONTENT_WINDOW_LINES = 5000;
|
|
4
5
|
export const MAX_JOB_LOG_RING_BUFFER_LINES = 100000;
|
|
5
6
|
export const MAX_JOB_LOG_LINE_BYTES = 10 * 1024 * 1024;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/actions-logs.ts"],"sourcesContent":["import {Buffer} from 'node:buffer';\n\nexport const DEFAULT_JOB_LOG_TAIL_LINES = 500;\nexport const DEFAULT_JOB_LOG_CONTENT_WINDOW_LINES = 5000;\nexport const MAX_JOB_LOG_RING_BUFFER_LINES = 100000;\nexport const MAX_JOB_LOG_LINE_BYTES = 10 * 1024 * 1024;\nexport const MAX_TRUNCATED_JOB_LOG_LINE_CHARS = 1000;\n\nexport interface GithubJobLogSource {\n jobId: number;\n name?: string | undefined;\n conclusion?: string | undefined;\n logsUrl: string;\n fetchContent?: (() => Promise<string>) | undefined;\n}\n\nexport interface BuildGithubSingleJobLogResultInput {\n job: GithubJobLogSource;\n returnContent?: boolean | undefined;\n tailLines?: number | undefined;\n contentWindowSize?: number | undefined;\n}\n\nexport interface BuildGithubFailedJobLogsResultInput {\n jobs: readonly GithubJobLogSource[];\n runId: number;\n returnContent?: boolean | undefined;\n tailLines?: number | undefined;\n contentWindowSize?: number | undefined;\n}\n\nexport type GithubJobLogResult = Record<string, unknown>;\n\nexport interface GithubFailedJobLogsResult {\n message: string;\n run_id: number;\n total_jobs: number;\n failed_jobs: number;\n logs?: GithubJobLogResult[] | undefined;\n return_format?: {content: boolean; urls: boolean} | undefined;\n}\n\nexport function buildGithubSingleJobLogResult(\n input: BuildGithubSingleJobLogResultInput,\n): Promise<GithubJobLogResult> {\n return buildGithubJobLogData(input);\n}\n\nexport async function buildGithubFailedJobLogsResult(\n input: BuildGithubFailedJobLogsResultInput,\n): Promise<GithubFailedJobLogsResult> {\n const failedJobs = input.jobs.filter((job) => job.conclusion === 'failure');\n\n if (failedJobs.length === 0) {\n return {\n message: 'No failed jobs found in this workflow run',\n run_id: input.runId,\n total_jobs: input.jobs.length,\n failed_jobs: 0,\n };\n }\n\n const logs: GithubJobLogResult[] = [];\n for (const job of failedJobs) {\n try {\n logs.push(await buildGithubJobLogData({job, ...input}));\n } catch (error) {\n logs.push({\n job_id: job.jobId,\n ...(job.name ? {job_name: job.name} : {}),\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return {\n message: `Retrieved logs for ${failedJobs.length} failed jobs`,\n run_id: input.runId,\n total_jobs: input.jobs.length,\n failed_jobs: failedJobs.length,\n logs,\n return_format: {content: input.returnContent === true, urls: input.returnContent !== true},\n };\n}\n\nfunction buildGithubJobLogData(\n input: BuildGithubSingleJobLogResultInput,\n): Promise<GithubJobLogResult> {\n const result: GithubJobLogResult = {\n job_id: input.job.jobId,\n ...(input.job.name ? {job_name: input.job.name} : {}),\n };\n\n if (input.returnContent === true) {\n const content = input.job.fetchContent ? input.job.fetchContent() : Promise.resolve('');\n return content.then((logsContent) => {\n const processed = processGithubJobLogContent(logsContent, {\n tailLines: input.tailLines,\n contentWindowSize: input.contentWindowSize,\n });\n return {\n ...result,\n logs_content: processed.content,\n message: 'Job logs content retrieved successfully',\n original_length: processed.totalLines,\n };\n });\n }\n\n return Promise.resolve({\n ...result,\n logs_url: input.job.logsUrl,\n message: 'Job logs are available for download',\n note: 'The logs_url provides a download link for the individual job logs in plain text format.\\nUse return_content=true to get the actual log content.',\n });\n}\n\nexport function processGithubJobLogContent(\n content: string,\n options: {tailLines?: number | undefined; contentWindowSize?: number | undefined} = {},\n): {content: string; totalLines: number} {\n const tailLines = normalizeTailLines(options.tailLines);\n const maxLines = Math.min(\n tailLines,\n options.contentWindowSize ?? DEFAULT_JOB_LOG_CONTENT_WINDOW_LINES,\n );\n const processed = processResponseAsRingBufferToEnd(content, maxLines);\n const lines = processed.content.split('\\n');\n const finalLines = lines.length > tailLines ? lines.slice(-tailLines) : lines;\n\n return {content: finalLines.join('\\n'), totalLines: processed.totalLines};\n}\n\nfunction normalizeTailLines(tailLines: number | undefined): number {\n if (tailLines === undefined) return DEFAULT_JOB_LOG_TAIL_LINES;\n if (!Number.isFinite(tailLines) || tailLines <= 0) return DEFAULT_JOB_LOG_TAIL_LINES;\n return Math.trunc(tailLines);\n}\n\nfunction processResponseAsRingBufferToEnd(\n content: string,\n maxJobLogLines: number,\n): {content: string; totalLines: number} {\n let maxLines = Math.trunc(maxJobLogLines);\n if (maxLines <= 0) maxLines = DEFAULT_JOB_LOG_TAIL_LINES;\n if (maxLines > MAX_JOB_LOG_RING_BUFFER_LINES) maxLines = MAX_JOB_LOG_RING_BUFFER_LINES;\n\n const lines = new Array<string>(maxLines);\n const validLines = new Array<boolean>(maxLines).fill(false);\n let totalLines = 0;\n let writeIndex = 0;\n\n const storeLine = (line: string) => {\n lines[writeIndex] = truncateLongLine(line);\n validLines[writeIndex] = true;\n totalLines += 1;\n writeIndex = (writeIndex + 1) % maxLines;\n };\n\n for (const line of splitLogLines(content)) {\n storeLine(line);\n }\n\n const result: string[] = [];\n const linesInBuffer = Math.min(totalLines, maxLines);\n const startIndex = totalLines > maxLines ? writeIndex : 0;\n\n for (let offset = 0; offset < linesInBuffer; offset += 1) {\n const index = (startIndex + offset) % maxLines;\n if (validLines[index]) result.push(lines[index] ?? '');\n }\n\n return {content: result.join('\\n'), totalLines};\n}\n\nfunction splitLogLines(content: string): string[] {\n if (content.length === 0) return [];\n const lines = content.split('\\n');\n if (content.endsWith('\\n')) lines.pop();\n return lines;\n}\n\nfunction truncateLongLine(line: string): string {\n if (Buffer.byteLength(line, 'utf8') < MAX_JOB_LOG_LINE_BYTES) return line;\n return `${Array.from(line).slice(0, MAX_TRUNCATED_JOB_LOG_LINE_CHARS).join('')}...\\n[TRUNCATED]`;\n}\n"],"names":["Buffer","DEFAULT_JOB_LOG_TAIL_LINES","DEFAULT_JOB_LOG_CONTENT_WINDOW_LINES","MAX_JOB_LOG_RING_BUFFER_LINES","MAX_JOB_LOG_LINE_BYTES","MAX_TRUNCATED_JOB_LOG_LINE_CHARS","buildGithubSingleJobLogResult","input","buildGithubJobLogData","buildGithubFailedJobLogsResult","failedJobs","jobs","filter","job","conclusion","length","message","run_id","runId","total_jobs","failed_jobs","logs","push","error","job_id","jobId","name","job_name","Error","String","return_format","content","returnContent","urls","result","fetchContent","Promise","resolve","then","logsContent","processed","processGithubJobLogContent","tailLines","contentWindowSize","logs_content","original_length","totalLines","logs_url","logsUrl","note","options","normalizeTailLines","maxLines","Math","min","processResponseAsRingBufferToEnd","lines","split","finalLines","slice","join","undefined","Number","isFinite","trunc","maxJobLogLines","Array","validLines","fill","writeIndex","storeLine","line","truncateLongLine","splitLogLines","linesInBuffer","startIndex","offset","index","endsWith","pop","byteLength","from"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/actions-logs.ts"],"sourcesContent":["import {Buffer} from 'node:buffer';\nimport {DEFAULT_JOB_LOG_TAIL_LINES} from '@shipfox/api-integration-github-dto';\n\nexport {DEFAULT_JOB_LOG_TAIL_LINES} from '@shipfox/api-integration-github-dto';\nexport const DEFAULT_JOB_LOG_CONTENT_WINDOW_LINES = 5000;\nexport const MAX_JOB_LOG_RING_BUFFER_LINES = 100000;\nexport const MAX_JOB_LOG_LINE_BYTES = 10 * 1024 * 1024;\nexport const MAX_TRUNCATED_JOB_LOG_LINE_CHARS = 1000;\n\nexport interface GithubJobLogSource {\n jobId: number;\n name?: string | undefined;\n conclusion?: string | undefined;\n logsUrl: string;\n fetchContent?: (() => Promise<string>) | undefined;\n}\n\nexport interface BuildGithubSingleJobLogResultInput {\n job: GithubJobLogSource;\n returnContent?: boolean | undefined;\n tailLines?: number | undefined;\n contentWindowSize?: number | undefined;\n}\n\nexport interface BuildGithubFailedJobLogsResultInput {\n jobs: readonly GithubJobLogSource[];\n runId: number;\n returnContent?: boolean | undefined;\n tailLines?: number | undefined;\n contentWindowSize?: number | undefined;\n}\n\nexport type GithubJobLogResult = Record<string, unknown>;\n\nexport interface GithubFailedJobLogsResult {\n message: string;\n run_id: number;\n total_jobs: number;\n failed_jobs: number;\n logs?: GithubJobLogResult[] | undefined;\n return_format?: {content: boolean; urls: boolean} | undefined;\n}\n\nexport function buildGithubSingleJobLogResult(\n input: BuildGithubSingleJobLogResultInput,\n): Promise<GithubJobLogResult> {\n return buildGithubJobLogData(input);\n}\n\nexport async function buildGithubFailedJobLogsResult(\n input: BuildGithubFailedJobLogsResultInput,\n): Promise<GithubFailedJobLogsResult> {\n const failedJobs = input.jobs.filter((job) => job.conclusion === 'failure');\n\n if (failedJobs.length === 0) {\n return {\n message: 'No failed jobs found in this workflow run',\n run_id: input.runId,\n total_jobs: input.jobs.length,\n failed_jobs: 0,\n };\n }\n\n const logs: GithubJobLogResult[] = [];\n for (const job of failedJobs) {\n try {\n logs.push(await buildGithubJobLogData({job, ...input}));\n } catch (error) {\n logs.push({\n job_id: job.jobId,\n ...(job.name ? {job_name: job.name} : {}),\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return {\n message: `Retrieved logs for ${failedJobs.length} failed jobs`,\n run_id: input.runId,\n total_jobs: input.jobs.length,\n failed_jobs: failedJobs.length,\n logs,\n return_format: {content: input.returnContent === true, urls: input.returnContent !== true},\n };\n}\n\nfunction buildGithubJobLogData(\n input: BuildGithubSingleJobLogResultInput,\n): Promise<GithubJobLogResult> {\n const result: GithubJobLogResult = {\n job_id: input.job.jobId,\n ...(input.job.name ? {job_name: input.job.name} : {}),\n };\n\n if (input.returnContent === true) {\n const content = input.job.fetchContent ? input.job.fetchContent() : Promise.resolve('');\n return content.then((logsContent) => {\n const processed = processGithubJobLogContent(logsContent, {\n tailLines: input.tailLines,\n contentWindowSize: input.contentWindowSize,\n });\n return {\n ...result,\n logs_content: processed.content,\n message: 'Job logs content retrieved successfully',\n original_length: processed.totalLines,\n };\n });\n }\n\n return Promise.resolve({\n ...result,\n logs_url: input.job.logsUrl,\n message: 'Job logs are available for download',\n note: 'The logs_url provides a download link for the individual job logs in plain text format.\\nUse return_content=true to get the actual log content.',\n });\n}\n\nexport function processGithubJobLogContent(\n content: string,\n options: {tailLines?: number | undefined; contentWindowSize?: number | undefined} = {},\n): {content: string; totalLines: number} {\n const tailLines = normalizeTailLines(options.tailLines);\n const maxLines = Math.min(\n tailLines,\n options.contentWindowSize ?? DEFAULT_JOB_LOG_CONTENT_WINDOW_LINES,\n );\n const processed = processResponseAsRingBufferToEnd(content, maxLines);\n const lines = processed.content.split('\\n');\n const finalLines = lines.length > tailLines ? lines.slice(-tailLines) : lines;\n\n return {content: finalLines.join('\\n'), totalLines: processed.totalLines};\n}\n\nfunction normalizeTailLines(tailLines: number | undefined): number {\n if (tailLines === undefined) return DEFAULT_JOB_LOG_TAIL_LINES;\n if (!Number.isFinite(tailLines) || tailLines <= 0) return DEFAULT_JOB_LOG_TAIL_LINES;\n return Math.trunc(tailLines);\n}\n\nfunction processResponseAsRingBufferToEnd(\n content: string,\n maxJobLogLines: number,\n): {content: string; totalLines: number} {\n let maxLines = Math.trunc(maxJobLogLines);\n if (maxLines <= 0) maxLines = DEFAULT_JOB_LOG_TAIL_LINES;\n if (maxLines > MAX_JOB_LOG_RING_BUFFER_LINES) maxLines = MAX_JOB_LOG_RING_BUFFER_LINES;\n\n const lines = new Array<string>(maxLines);\n const validLines = new Array<boolean>(maxLines).fill(false);\n let totalLines = 0;\n let writeIndex = 0;\n\n const storeLine = (line: string) => {\n lines[writeIndex] = truncateLongLine(line);\n validLines[writeIndex] = true;\n totalLines += 1;\n writeIndex = (writeIndex + 1) % maxLines;\n };\n\n for (const line of splitLogLines(content)) {\n storeLine(line);\n }\n\n const result: string[] = [];\n const linesInBuffer = Math.min(totalLines, maxLines);\n const startIndex = totalLines > maxLines ? writeIndex : 0;\n\n for (let offset = 0; offset < linesInBuffer; offset += 1) {\n const index = (startIndex + offset) % maxLines;\n if (validLines[index]) result.push(lines[index] ?? '');\n }\n\n return {content: result.join('\\n'), totalLines};\n}\n\nfunction splitLogLines(content: string): string[] {\n if (content.length === 0) return [];\n const lines = content.split('\\n');\n if (content.endsWith('\\n')) lines.pop();\n return lines;\n}\n\nfunction truncateLongLine(line: string): string {\n if (Buffer.byteLength(line, 'utf8') < MAX_JOB_LOG_LINE_BYTES) return line;\n return `${Array.from(line).slice(0, MAX_TRUNCATED_JOB_LOG_LINE_CHARS).join('')}...\\n[TRUNCATED]`;\n}\n"],"names":["Buffer","DEFAULT_JOB_LOG_TAIL_LINES","DEFAULT_JOB_LOG_CONTENT_WINDOW_LINES","MAX_JOB_LOG_RING_BUFFER_LINES","MAX_JOB_LOG_LINE_BYTES","MAX_TRUNCATED_JOB_LOG_LINE_CHARS","buildGithubSingleJobLogResult","input","buildGithubJobLogData","buildGithubFailedJobLogsResult","failedJobs","jobs","filter","job","conclusion","length","message","run_id","runId","total_jobs","failed_jobs","logs","push","error","job_id","jobId","name","job_name","Error","String","return_format","content","returnContent","urls","result","fetchContent","Promise","resolve","then","logsContent","processed","processGithubJobLogContent","tailLines","contentWindowSize","logs_content","original_length","totalLines","logs_url","logsUrl","note","options","normalizeTailLines","maxLines","Math","min","processResponseAsRingBufferToEnd","lines","split","finalLines","slice","join","undefined","Number","isFinite","trunc","maxJobLogLines","Array","validLines","fill","writeIndex","storeLine","line","truncateLongLine","splitLogLines","linesInBuffer","startIndex","offset","index","endsWith","pop","byteLength","from"],"mappings":"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"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import type { GithubAgentToolCatalogEntry } from './agent-tools.js';
|
|
3
|
-
export declare function buildGithubAgentToolSelectionCatalog(catalog: readonly GithubAgentToolCatalogEntry[]): AgentToolSelectionCatalog;
|
|
1
|
+
export { buildGithubAgentToolSelectionCatalog } from '@shipfox/api-integration-github-dto';
|
|
4
2
|
//# sourceMappingURL=agent-tool-selection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tool-selection.d.ts","sourceRoot":"","sources":["../../src/core/agent-tool-selection.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"agent-tool-selection.d.ts","sourceRoot":"","sources":["../../src/core/agent-tool-selection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,oCAAoC,EAAC,MAAM,qCAAqC,CAAC"}
|
|
@@ -1,38 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
return {
|
|
3
|
-
selectors: catalog.flatMap((entry)=>{
|
|
4
|
-
if (!entry.methods) {
|
|
5
|
-
return [
|
|
6
|
-
{
|
|
7
|
-
token: entry.id,
|
|
8
|
-
kind: 'standalone',
|
|
9
|
-
sensitivity: entry.sensitivity,
|
|
10
|
-
sensitive: entry.sensitive
|
|
11
|
-
}
|
|
12
|
-
];
|
|
13
|
-
}
|
|
14
|
-
return [
|
|
15
|
-
{
|
|
16
|
-
token: entry.id,
|
|
17
|
-
kind: 'family',
|
|
18
|
-
sensitivity: entry.sensitivity,
|
|
19
|
-
sensitive: entry.sensitive
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
token: `${entry.id}.*`,
|
|
23
|
-
kind: 'family_wildcard',
|
|
24
|
-
sensitivity: entry.sensitivity,
|
|
25
|
-
sensitive: entry.sensitive
|
|
26
|
-
},
|
|
27
|
-
...entry.methods.map((method)=>({
|
|
28
|
-
token: `${entry.id}.${method.id}`,
|
|
29
|
-
kind: 'method',
|
|
30
|
-
sensitivity: method.sensitivity,
|
|
31
|
-
sensitive: method.sensitive
|
|
32
|
-
}))
|
|
33
|
-
];
|
|
34
|
-
})
|
|
35
|
-
};
|
|
36
|
-
}
|
|
1
|
+
export { buildGithubAgentToolSelectionCatalog } from '@shipfox/api-integration-github-dto';
|
|
37
2
|
|
|
38
3
|
//# sourceMappingURL=agent-tool-selection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/agent-tool-selection.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../src/core/agent-tool-selection.ts"],"sourcesContent":["export {buildGithubAgentToolSelectionCatalog} from '@shipfox/api-integration-github-dto';\n"],"names":["buildGithubAgentToolSelectionCatalog"],"mappings":"AAAA,SAAQA,oCAAoC,QAAO,sCAAsC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { AgentToolSelectionCatalog, AgentToolSession, AgentToolsProvider, IntegrationConnection, OpenAgentToolsSessionInput } from '@shipfox/api-integration-core-dto';
|
|
2
|
+
import { type GithubAgentToolCatalogEntry, type GithubAgentToolRequiredScope } from '@shipfox/api-integration-github-dto';
|
|
2
3
|
import { type GithubInstallationTokenProvider } from '#api/installation-token-provider.js';
|
|
3
4
|
import type { GithubInstallation } from '#db/installations.js';
|
|
5
|
+
export type { GithubAgentToolCatalogEntry, GithubAgentToolCategory, GithubAgentToolId, GithubAgentToolPermission, GithubAgentToolPermissionAccess, GithubAgentToolRequiredPermission, GithubAgentToolRequiredScope, GithubAgentToolSensitivity, } from '@shipfox/api-integration-github-dto';
|
|
6
|
+
export { buildGithubAgentToolSelectionCatalog, DEFAULT_JOB_LOG_TAIL_LINES, githubAgentToolCatalog, githubAgentToolSelectionCatalog, } from '@shipfox/api-integration-github-dto';
|
|
4
7
|
type GithubIntegrationConnection = IntegrationConnection<'github'>;
|
|
5
8
|
type GithubToolCallResult = {
|
|
6
9
|
isError?: boolean | undefined;
|
|
@@ -10,23 +13,6 @@ type GithubToolCallResult = {
|
|
|
10
13
|
}[];
|
|
11
14
|
structuredContent?: Record<string, unknown> | undefined;
|
|
12
15
|
};
|
|
13
|
-
export type GithubAgentToolCategory = 'issues' | 'pull_requests' | 'actions';
|
|
14
|
-
export type GithubAgentToolPermission = 'actions' | 'contents' | 'issues' | 'pull_requests';
|
|
15
|
-
export type GithubAgentToolPermissionAccess = 'read' | 'write';
|
|
16
|
-
export type GithubAgentToolSensitivity = 'read' | 'write';
|
|
17
|
-
export interface GithubAgentToolRequiredPermission {
|
|
18
|
-
permission: GithubAgentToolPermission;
|
|
19
|
-
access: GithubAgentToolPermissionAccess;
|
|
20
|
-
}
|
|
21
|
-
export type GithubAgentToolRequiredScope = readonly GithubAgentToolRequiredPermission[];
|
|
22
|
-
export type GithubAgentToolCatalogMethod = AgentToolCatalogMethod<GithubAgentToolRequiredScope>;
|
|
23
|
-
export interface GithubAgentToolCatalogEntry extends AgentToolCatalogEntry<GithubAgentToolRequiredScope> {
|
|
24
|
-
category: GithubAgentToolCategory;
|
|
25
|
-
methods?: readonly GithubAgentToolCatalogMethod[] | undefined;
|
|
26
|
-
}
|
|
27
|
-
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];
|
|
28
|
-
export type GithubAgentToolId = (typeof githubAgentToolCatalog)[number]['id'];
|
|
29
|
-
export declare const githubAgentToolSelectionCatalog: AgentToolSelectionCatalog;
|
|
30
16
|
export declare class GithubAgentToolsProvider implements AgentToolsProvider<GithubIntegrationConnection, GithubAgentToolRequiredScope, unknown, GithubToolCallResult> {
|
|
31
17
|
private readonly options;
|
|
32
18
|
private readonly tokenProvider;
|
|
@@ -46,5 +32,4 @@ export interface GithubToolClient {
|
|
|
46
32
|
}>;
|
|
47
33
|
}
|
|
48
34
|
export type GithubToolClientFactory = (token: string) => GithubToolClient;
|
|
49
|
-
export {};
|
|
50
35
|
//# sourceMappingURL=agent-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-tools.d.ts","sourceRoot":"","sources":["../../src/core/agent-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"agent-tools.d.ts","sourceRoot":"","sources":["../../src/core/agent-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,yBAAyB,EACzB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,2BAA2B,EAEhC,KAAK,4BAA4B,EAGlC,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AAG7D,YAAY,EACV,2BAA2B,EAC3B,uBAAuB,EACvB,iBAAiB,EACjB,yBAAyB,EACzB,+BAA+B,EAC/B,iCAAiC,EACjC,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,oCAAoC,EACpC,0BAA0B,EAC1B,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,qCAAqC,CAAC;AAE7C,KAAK,2BAA2B,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAEnE,KAAK,oBAAoB,GAAG;IAC1B,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,SAAS;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,EAAE,CAAC;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CACzD,CAAC;AAEF,qBAAa,wBACX,YACE,kBAAkB,CAChB,2BAA2B,EAC3B,4BAA4B,EAC5B,OAAO,EACP,oBAAoB,CACrB;IAIS,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;gBAEnC,OAAO,GAAE,+BAAoC;IAI1E,OAAO,IAAI,SAAS,2BAA2B,EAAE;IAIjD,gBAAgB,IAAI,yBAAyB;IAIvC,WAAW,CACf,KAAK,EAAE,0BAA0B,CAAC,2BAA2B,EAAE,4BAA4B,CAAC,GAC3F,OAAO,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC;CA+CnD;AAED,MAAM,WAAW,+BAA+B;IAC9C,6BAA6B,CAAC,EAC1B,CAAC,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC,GACnE,SAAS,CAAC;IACd,aAAa,CAAC,EAAE,+BAA+B,GAAG,SAAS,CAAC;IAC5D,YAAY,CAAC,EAAE,uBAAuB,GAAG,SAAS,CAAC;CACpD;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAC,CAAC,CAAC;CACvF;AAED,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,gBAAgB,CAAC"}
|