@vicoa/cli 1.7.4-win32-x64 → 1.7.4
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/README.md +82 -0
- package/bin/vicoa.js +38 -0
- package/package.json +30 -10
- package/bin/_internal/VCRUNTIME140.dll +0 -0
- package/bin/_internal/VCRUNTIME140_1.dll +0 -0
- package/bin/_internal/_asyncio.pyd +0 -0
- package/bin/_internal/_bz2.pyd +0 -0
- package/bin/_internal/_cffi_backend.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/_ctypes.pyd +0 -0
- package/bin/_internal/_decimal.pyd +0 -0
- package/bin/_internal/_hashlib.pyd +0 -0
- package/bin/_internal/_lzma.pyd +0 -0
- package/bin/_internal/_multiprocessing.pyd +0 -0
- package/bin/_internal/_overlapped.pyd +0 -0
- package/bin/_internal/_queue.pyd +0 -0
- package/bin/_internal/_socket.pyd +0 -0
- package/bin/_internal/_sqlite3.pyd +0 -0
- package/bin/_internal/_ssl.pyd +0 -0
- package/bin/_internal/_uuid.pyd +0 -0
- package/bin/_internal/_wmi.pyd +0 -0
- package/bin/_internal/_zoneinfo.pyd +0 -0
- package/bin/_internal/ada92cb5d92a588d1b93__mypyc.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/aiofile-3.11.1.dist-info/INSTALLER +0 -1
- package/bin/_internal/aiofile-3.11.1.dist-info/METADATA +0 -511
- package/bin/_internal/aiofile-3.11.1.dist-info/RECORD +0 -15
- package/bin/_internal/aiofile-3.11.1.dist-info/WHEEL +0 -4
- package/bin/_internal/aiofile-3.11.1.dist-info/licenses/LICENCE +0 -195
- package/bin/_internal/aiofile-3.11.1.dist-info/licenses/LICENCE.md +0 -195
- package/bin/_internal/aiohttp/_http_parser.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/aiohttp/_http_writer.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/aiohttp/_websocket/mask.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/aiohttp/_websocket/reader_c.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/api-ms-win-core-console-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-datetime-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-debug-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-errorhandling-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-fibers-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-fibers-l1-1-1.dll +0 -0
- package/bin/_internal/api-ms-win-core-file-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-file-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-file-l2-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-handle-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-heap-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-interlocked-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-kernel32-legacy-l1-1-1.dll +0 -0
- package/bin/_internal/api-ms-win-core-libraryloader-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-localization-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-memory-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-namedpipe-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-processenvironment-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-processthreads-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-processthreads-l1-1-1.dll +0 -0
- package/bin/_internal/api-ms-win-core-profile-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-string-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-synch-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-synch-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-sysinfo-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-sysinfo-l1-2-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-timezone-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-core-util-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-conio-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-convert-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-environment-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-filesystem-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-heap-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-locale-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-math-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-process-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-runtime-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-stdio-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-string-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-time-l1-1-0.dll +0 -0
- package/bin/_internal/api-ms-win-crt-utility-l1-1-0.dll +0 -0
- package/bin/_internal/attrs-26.1.0.dist-info/INSTALLER +0 -1
- package/bin/_internal/attrs-26.1.0.dist-info/METADATA +0 -199
- package/bin/_internal/attrs-26.1.0.dist-info/RECORD +0 -55
- package/bin/_internal/attrs-26.1.0.dist-info/WHEEL +0 -4
- package/bin/_internal/attrs-26.1.0.dist-info/licenses/LICENSE +0 -21
- package/bin/_internal/base_library.zip +0 -0
- package/bin/_internal/certifi/cacert.pem +0 -3959
- package/bin/_internal/certifi/py.typed +0 -0
- package/bin/_internal/charset_normalizer/cd.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/charset_normalizer/md.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/click-8.4.2.dist-info/INSTALLER +0 -1
- package/bin/_internal/click-8.4.2.dist-info/METADATA +0 -84
- package/bin/_internal/click-8.4.2.dist-info/RECORD +0 -40
- package/bin/_internal/click-8.4.2.dist-info/WHEEL +0 -4
- package/bin/_internal/click-8.4.2.dist-info/licenses/LICENSE.txt +0 -28
- package/bin/_internal/cryptography/hazmat/bindings/_rust.pyd +0 -0
- package/bin/_internal/cryptography-50.0.0.dist-info/INSTALLER +0 -1
- package/bin/_internal/cryptography-50.0.0.dist-info/METADATA +0 -110
- package/bin/_internal/cryptography-50.0.0.dist-info/RECORD +0 -199
- package/bin/_internal/cryptography-50.0.0.dist-info/WHEEL +0 -4
- package/bin/_internal/cryptography-50.0.0.dist-info/licenses/LICENSE +0 -3
- package/bin/_internal/cryptography-50.0.0.dist-info/licenses/LICENSE.APACHE +0 -202
- package/bin/_internal/cryptography-50.0.0.dist-info/licenses/LICENSE.BSD +0 -27
- package/bin/_internal/cryptography-50.0.0.dist-info/sboms/cryptography-rust.cyclonedx.json +0 -1365
- package/bin/_internal/cryptography-50.0.0.dist-info/sboms/sbom.json +0 -43
- package/bin/_internal/email_validator-2.3.0.dist-info/INSTALLER +0 -1
- package/bin/_internal/email_validator-2.3.0.dist-info/METADATA +0 -466
- package/bin/_internal/email_validator-2.3.0.dist-info/RECORD +0 -27
- package/bin/_internal/email_validator-2.3.0.dist-info/WHEEL +0 -5
- package/bin/_internal/email_validator-2.3.0.dist-info/entry_points.txt +0 -2
- package/bin/_internal/email_validator-2.3.0.dist-info/licenses/LICENSE +0 -27
- package/bin/_internal/email_validator-2.3.0.dist-info/top_level.txt +0 -1
- package/bin/_internal/fastmcp-3.4.5.dist-info/INSTALLER +0 -1
- package/bin/_internal/fastmcp-3.4.5.dist-info/METADATA +0 -160
- package/bin/_internal/fastmcp-3.4.5.dist-info/RECORD +0 -5
- package/bin/_internal/fastmcp-3.4.5.dist-info/WHEEL +0 -4
- package/bin/_internal/fastmcp-3.4.5.dist-info/licenses/LICENSE +0 -201
- package/bin/_internal/frozenlist/_frozenlist.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/integrations/cli_wrappers/IMPORTANT_USE_CASES.md +0 -33
- package/bin/_internal/integrations/github/claude-code-action/CLAUDE.md +0 -136
- package/bin/_internal/integrations/github/claude-code-action/CODE_OF_CONDUCT.md +0 -128
- package/bin/_internal/integrations/github/claude-code-action/CONTRIBUTING.md +0 -116
- package/bin/_internal/integrations/github/claude-code-action/LICENSE +0 -21
- package/bin/_internal/integrations/github/claude-code-action/README.md +0 -53
- package/bin/_internal/integrations/github/claude-code-action/ROADMAP.md +0 -20
- package/bin/_internal/integrations/github/claude-code-action/SECURITY.md +0 -15
- package/bin/_internal/integrations/github/claude-code-action/action.yml +0 -294
- package/bin/_internal/integrations/github/claude-code-action/base-action/CLAUDE.md +0 -60
- package/bin/_internal/integrations/github/claude-code-action/base-action/CODE_OF_CONDUCT.md +0 -128
- package/bin/_internal/integrations/github/claude-code-action/base-action/CONTRIBUTING.md +0 -136
- package/bin/_internal/integrations/github/claude-code-action/base-action/LICENSE +0 -21
- package/bin/_internal/integrations/github/claude-code-action/base-action/MIRROR_DISCLAIMER.md +0 -11
- package/bin/_internal/integrations/github/claude-code-action/base-action/README.md +0 -521
- package/bin/_internal/integrations/github/claude-code-action/base-action/action.yml +0 -149
- package/bin/_internal/integrations/github/claude-code-action/base-action/bun.lock +0 -54
- package/bin/_internal/integrations/github/claude-code-action/base-action/examples/issue-triage.yml +0 -108
- package/bin/_internal/integrations/github/claude-code-action/base-action/package.json +0 -23
- package/bin/_internal/integrations/github/claude-code-action/base-action/scripts/install-hooks.sh +0 -13
- package/bin/_internal/integrations/github/claude-code-action/base-action/scripts/pre-push +0 -46
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/index.ts +0 -82
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/prepare-prompt.ts +0 -82
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/run-claude.ts +0 -257
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/run-vicoa.ts +0 -301
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/setup-claude-code-settings.ts +0 -68
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/validate-env.ts +0 -54
- package/bin/_internal/integrations/github/claude-code-action/base-action/test-local.sh +0 -12
- package/bin/_internal/integrations/github/claude-code-action/base-action/test-mcp-local.sh +0 -18
- package/bin/_internal/integrations/github/claude-code-action/base-action/tsconfig.json +0 -30
- package/bin/_internal/integrations/github/claude-code-action/bun.lock +0 -384
- package/bin/_internal/integrations/github/claude-code-action/docs/capabilities-and-limitations.md +0 -33
- package/bin/_internal/integrations/github/claude-code-action/docs/cloud-providers.md +0 -99
- package/bin/_internal/integrations/github/claude-code-action/docs/configuration.md +0 -345
- package/bin/_internal/integrations/github/claude-code-action/docs/custom-automations.md +0 -113
- package/bin/_internal/integrations/github/claude-code-action/docs/experimental.md +0 -128
- package/bin/_internal/integrations/github/claude-code-action/docs/faq.md +0 -205
- package/bin/_internal/integrations/github/claude-code-action/docs/migration-guide.md +0 -261
- package/bin/_internal/integrations/github/claude-code-action/docs/security.md +0 -38
- package/bin/_internal/integrations/github/claude-code-action/docs/setup.md +0 -146
- package/bin/_internal/integrations/github/claude-code-action/docs/usage.md +0 -213
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci/auto-fix-ci.yml +0 -97
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci/commands/fix-ci.md +0 -127
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci-signed/auto-fix-ci-signed.yml +0 -97
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci-signed/commands/fix-ci-signed.md +0 -148
- package/bin/_internal/integrations/github/claude-code-action/examples/issue-deduplication.yml +0 -63
- package/bin/_internal/integrations/github/claude-code-action/examples/issue-triage.yml +0 -75
- package/bin/_internal/integrations/github/claude-code-action/examples/vicoa.yml +0 -75
- package/bin/_internal/integrations/github/claude-code-action/package.json +0 -31
- package/bin/_internal/integrations/github/claude-code-action/scripts/install-hooks.sh +0 -13
- package/bin/_internal/integrations/github/claude-code-action/scripts/pre-commit +0 -46
- package/bin/_internal/integrations/github/claude-code-action/scripts/setup-network-restrictions.sh +0 -123
- package/bin/_internal/integrations/github/claude-code-action/src/create-prompt/index.ts +0 -799
- package/bin/_internal/integrations/github/claude-code-action/src/create-prompt/types.ts +0 -102
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/collect-inputs.ts +0 -58
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/format-turns.ts +0 -465
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/prepare.ts +0 -98
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/update-comment-link.ts +0 -245
- package/bin/_internal/integrations/github/claude-code-action/src/github/api/client.ts +0 -23
- package/bin/_internal/integrations/github/claude-code-action/src/github/api/config.ts +0 -4
- package/bin/_internal/integrations/github/claude-code-action/src/github/api/queries/github.ts +0 -117
- package/bin/_internal/integrations/github/claude-code-action/src/github/context.ts +0 -277
- package/bin/_internal/integrations/github/claude-code-action/src/github/data/fetcher.ts +0 -233
- package/bin/_internal/integrations/github/claude-code-action/src/github/data/formatter.ts +0 -144
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/branch-cleanup.ts +0 -132
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/branch.ts +0 -163
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comment-logic.ts +0 -203
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/common.ts +0 -33
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/create-initial.ts +0 -111
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/update-claude-comment.ts +0 -70
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/update-with-branch.ts +0 -57
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/git-config.ts +0 -62
- package/bin/_internal/integrations/github/claude-code-action/src/github/token.ts +0 -108
- package/bin/_internal/integrations/github/claude-code-action/src/github/types.ts +0 -98
- package/bin/_internal/integrations/github/claude-code-action/src/github/utils/image-downloader.ts +0 -246
- package/bin/_internal/integrations/github/claude-code-action/src/github/utils/sanitizer.ts +0 -100
- package/bin/_internal/integrations/github/claude-code-action/src/github/validation/actor.ts +0 -64
- package/bin/_internal/integrations/github/claude-code-action/src/github/validation/permissions.ts +0 -47
- package/bin/_internal/integrations/github/claude-code-action/src/github/validation/trigger.ts +0 -148
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-actions-server.ts +0 -279
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-comment-server.ts +0 -101
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-file-ops-server.ts +0 -677
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-inline-comment-server.ts +0 -184
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/install-mcp-server.ts +0 -201
- package/bin/_internal/integrations/github/claude-code-action/src/modes/agent/index.ts +0 -152
- package/bin/_internal/integrations/github/claude-code-action/src/modes/agent/parse-tools.ts +0 -22
- package/bin/_internal/integrations/github/claude-code-action/src/modes/detector.ts +0 -66
- package/bin/_internal/integrations/github/claude-code-action/src/modes/registry.ts +0 -54
- package/bin/_internal/integrations/github/claude-code-action/src/modes/tag/index.ts +0 -187
- package/bin/_internal/integrations/github/claude-code-action/src/modes/types.ts +0 -100
- package/bin/_internal/integrations/github/claude-code-action/src/prepare/index.ts +0 -20
- package/bin/_internal/integrations/github/claude-code-action/src/prepare/types.ts +0 -20
- package/bin/_internal/integrations/github/claude-code-action/src/utils/retry.ts +0 -40
- package/bin/_internal/integrations/github/claude-code-action/tsconfig.json +0 -30
- package/bin/_internal/integrations/headless/tests/README.md +0 -58
- package/bin/_internal/integrations/n8n/LICENSE +0 -21
- package/bin/_internal/integrations/n8n/README.md +0 -298
- package/bin/_internal/integrations/n8n/package-lock.json +0 -2989
- package/bin/_internal/integrations/n8n/package.json +0 -68
- package/bin/_internal/integrations/n8n/src/credentials/OmnaraApi.credentials.ts +0 -52
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/Omnara.node.json +0 -35
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/Omnara.node.ts +0 -304
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/index.ts +0 -37
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/send.operation.ts +0 -151
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/sendAndWait.operation.ts +0 -252
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/session/end.operation.ts +0 -56
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/session/index.ts +0 -29
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/vicoa.png +0 -0
- package/bin/_internal/integrations/n8n/src/utils/GenericFunctions.ts +0 -93
- package/bin/_internal/integrations/n8n/src/utils/sendAndWait/configureWaitTillDate.ts +0 -42
- package/bin/_internal/integrations/n8n/src/utils/sendAndWait/descriptions.ts +0 -20
- package/bin/_internal/integrations/n8n/src/utils/sendAndWaitWebhook.ts +0 -72
- package/bin/_internal/integrations/n8n/tsconfig.json +0 -20
- package/bin/_internal/jiter/jiter.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/jsonschema/benchmarks/issue232/issue.json +0 -2653
- package/bin/_internal/jsonschema-4.26.0.dist-info/INSTALLER +0 -1
- package/bin/_internal/jsonschema-4.26.0.dist-info/METADATA +0 -170
- package/bin/_internal/jsonschema-4.26.0.dist-info/RECORD +0 -82
- package/bin/_internal/jsonschema-4.26.0.dist-info/WHEEL +0 -4
- package/bin/_internal/jsonschema-4.26.0.dist-info/entry_points.txt +0 -2
- package/bin/_internal/jsonschema-4.26.0.dist-info/licenses/COPYING +0 -19
- package/bin/_internal/jsonschema_specifications/schemas/draft201909/metaschema.json +0 -42
- package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/applicator +0 -56
- package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/content +0 -17
- package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/core +0 -57
- package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/format +0 -14
- package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/meta-data +0 -37
- package/bin/_internal/jsonschema_specifications/schemas/draft201909/vocabularies/validation +0 -98
- package/bin/_internal/jsonschema_specifications/schemas/draft202012/metaschema.json +0 -58
- package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/applicator +0 -48
- package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/content +0 -17
- package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/core +0 -51
- package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/format-annotation +0 -14
- package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/format-assertion +0 -14
- package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/meta-data +0 -37
- package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/unevaluated +0 -15
- package/bin/_internal/jsonschema_specifications/schemas/draft202012/vocabularies/validation +0 -98
- package/bin/_internal/jsonschema_specifications/schemas/draft3/metaschema.json +0 -172
- package/bin/_internal/jsonschema_specifications/schemas/draft4/metaschema.json +0 -149
- package/bin/_internal/jsonschema_specifications/schemas/draft6/metaschema.json +0 -153
- package/bin/_internal/jsonschema_specifications/schemas/draft7/metaschema.json +0 -166
- package/bin/_internal/libcrypto-3.dll +0 -0
- package/bin/_internal/libffi-8.dll +0 -0
- package/bin/_internal/libssl-3.dll +0 -0
- package/bin/_internal/mcp-1.29.0.dist-info/INSTALLER +0 -1
- package/bin/_internal/mcp-1.29.0.dist-info/METADATA +0 -239
- package/bin/_internal/mcp-1.29.0.dist-info/RECORD +0 -228
- package/bin/_internal/mcp-1.29.0.dist-info/WHEEL +0 -4
- package/bin/_internal/mcp-1.29.0.dist-info/entry_points.txt +0 -2
- package/bin/_internal/mcp-1.29.0.dist-info/licenses/LICENSE +0 -21
- package/bin/_internal/multidict/_multidict.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/opentelemetry_api-1.44.0.dist-info/INSTALLER +0 -1
- package/bin/_internal/opentelemetry_api-1.44.0.dist-info/METADATA +0 -43
- package/bin/_internal/opentelemetry_api-1.44.0.dist-info/RECORD +0 -78
- package/bin/_internal/opentelemetry_api-1.44.0.dist-info/WHEEL +0 -4
- package/bin/_internal/opentelemetry_api-1.44.0.dist-info/entry_points.txt +0 -15
- package/bin/_internal/opentelemetry_api-1.44.0.dist-info/licenses/LICENSE +0 -201
- package/bin/_internal/propcache/_helpers_c.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/pydantic-2.13.4.dist-info/INSTALLER +0 -1
- package/bin/_internal/pydantic-2.13.4.dist-info/METADATA +0 -1294
- package/bin/_internal/pydantic-2.13.4.dist-info/RECORD +0 -217
- package/bin/_internal/pydantic-2.13.4.dist-info/WHEEL +0 -4
- package/bin/_internal/pydantic-2.13.4.dist-info/licenses/LICENSE +0 -21
- package/bin/_internal/pydantic_core/_pydantic_core.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/pyexpat.pyd +0 -0
- package/bin/_internal/python3.dll +0 -0
- package/bin/_internal/python312.dll +0 -0
- package/bin/_internal/pywin32_system32/pythoncom312.dll +0 -0
- package/bin/_internal/pywin32_system32/pywintypes312.dll +0 -0
- package/bin/_internal/rpds/rpds.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/select.pyd +0 -0
- package/bin/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt +0 -2
- package/bin/_internal/sqlite3.dll +0 -0
- package/bin/_internal/ucrtbase.dll +0 -0
- package/bin/_internal/unicodedata.pyd +0 -0
- package/bin/_internal/vicoa/_bin/README.md +0 -28
- package/bin/_internal/vicoa-1.7.4.dist-info/INSTALLER +0 -1
- package/bin/_internal/vicoa-1.7.4.dist-info/METADATA +0 -314
- package/bin/_internal/vicoa-1.7.4.dist-info/RECORD +0 -11
- package/bin/_internal/vicoa-1.7.4.dist-info/REQUESTED +0 -0
- package/bin/_internal/vicoa-1.7.4.dist-info/WHEEL +0 -5
- package/bin/_internal/vicoa-1.7.4.dist-info/direct_url.json +0 -1
- package/bin/_internal/vicoa-1.7.4.dist-info/entry_points.txt +0 -2
- package/bin/_internal/vicoa-1.7.4.dist-info/licenses/LICENSE +0 -201
- package/bin/_internal/vicoa-1.7.4.dist-info/top_level.txt +0 -4
- package/bin/_internal/watchfiles/_rust_notify.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/websockets/speedups.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/websockets-17.0.1.dist-info/INSTALLER +0 -1
- package/bin/_internal/websockets-17.0.1.dist-info/METADATA +0 -170
- package/bin/_internal/websockets-17.0.1.dist-info/RECORD +0 -116
- package/bin/_internal/websockets-17.0.1.dist-info/WHEEL +0 -5
- package/bin/_internal/websockets-17.0.1.dist-info/entry_points.txt +0 -2
- package/bin/_internal/websockets-17.0.1.dist-info/licenses/LICENSE +0 -24
- package/bin/_internal/websockets-17.0.1.dist-info/top_level.txt +0 -1
- package/bin/_internal/win32/_win32sysloader.pyd +0 -0
- package/bin/_internal/win32/win32api.pyd +0 -0
- package/bin/_internal/win32/win32evtlog.pyd +0 -0
- package/bin/_internal/win32/win32job.pyd +0 -0
- package/bin/_internal/yaml/_yaml.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/yarl/_quoting_c.cp312-win_amd64.pyd +0 -0
- package/bin/vicoa.exe +0 -0
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
export function stripInvisibleCharacters(content: string): string {
|
|
2
|
-
content = content.replace(/[\u200B\u200C\u200D\uFEFF]/g, "");
|
|
3
|
-
content = content.replace(
|
|
4
|
-
/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F-\u009F]/g,
|
|
5
|
-
"",
|
|
6
|
-
);
|
|
7
|
-
content = content.replace(/\u00AD/g, "");
|
|
8
|
-
content = content.replace(/[\u202A-\u202E\u2066-\u2069]/g, "");
|
|
9
|
-
return content;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function stripMarkdownImageAltText(content: string): string {
|
|
13
|
-
return content.replace(/!\[[^\]]*\]\(/g, ";
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function stripMarkdownLinkTitles(content: string): string {
|
|
17
|
-
content = content.replace(/(\[[^\]]*\]\([^)]+)\s+"[^"]*"/g, "$1");
|
|
18
|
-
content = content.replace(/(\[[^\]]*\]\([^)]+)\s+'[^']*'/g, "$1");
|
|
19
|
-
return content;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function stripHiddenAttributes(content: string): string {
|
|
23
|
-
content = content.replace(/\salt\s*=\s*["'][^"']*["']/gi, "");
|
|
24
|
-
content = content.replace(/\salt\s*=\s*[^\s>]+/gi, "");
|
|
25
|
-
content = content.replace(/\stitle\s*=\s*["'][^"']*["']/gi, "");
|
|
26
|
-
content = content.replace(/\stitle\s*=\s*[^\s>]+/gi, "");
|
|
27
|
-
content = content.replace(/\saria-label\s*=\s*["'][^"']*["']/gi, "");
|
|
28
|
-
content = content.replace(/\saria-label\s*=\s*[^\s>]+/gi, "");
|
|
29
|
-
content = content.replace(/\sdata-[a-zA-Z0-9-]+\s*=\s*["'][^"']*["']/gi, "");
|
|
30
|
-
content = content.replace(/\sdata-[a-zA-Z0-9-]+\s*=\s*[^\s>]+/gi, "");
|
|
31
|
-
content = content.replace(/\splaceholder\s*=\s*["'][^"']*["']/gi, "");
|
|
32
|
-
content = content.replace(/\splaceholder\s*=\s*[^\s>]+/gi, "");
|
|
33
|
-
return content;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function normalizeHtmlEntities(content: string): string {
|
|
37
|
-
content = content.replace(/&#(\d+);/g, (_, dec) => {
|
|
38
|
-
const num = parseInt(dec, 10);
|
|
39
|
-
if (num >= 32 && num <= 126) {
|
|
40
|
-
return String.fromCharCode(num);
|
|
41
|
-
}
|
|
42
|
-
return "";
|
|
43
|
-
});
|
|
44
|
-
content = content.replace(/&#x([0-9a-fA-F]+);/g, (_, hex) => {
|
|
45
|
-
const num = parseInt(hex, 16);
|
|
46
|
-
if (num >= 32 && num <= 126) {
|
|
47
|
-
return String.fromCharCode(num);
|
|
48
|
-
}
|
|
49
|
-
return "";
|
|
50
|
-
});
|
|
51
|
-
return content;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function sanitizeContent(content: string): string {
|
|
55
|
-
content = stripHtmlComments(content);
|
|
56
|
-
content = stripInvisibleCharacters(content);
|
|
57
|
-
content = stripMarkdownImageAltText(content);
|
|
58
|
-
content = stripMarkdownLinkTitles(content);
|
|
59
|
-
content = stripHiddenAttributes(content);
|
|
60
|
-
content = normalizeHtmlEntities(content);
|
|
61
|
-
content = redactGitHubTokens(content);
|
|
62
|
-
return content;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export function redactGitHubTokens(content: string): string {
|
|
66
|
-
// GitHub Personal Access Tokens (classic): ghp_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (40 chars)
|
|
67
|
-
content = content.replace(
|
|
68
|
-
/\bghp_[A-Za-z0-9]{36}\b/g,
|
|
69
|
-
"[REDACTED_GITHUB_TOKEN]",
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
// GitHub OAuth tokens: gho_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (40 chars)
|
|
73
|
-
content = content.replace(
|
|
74
|
-
/\bgho_[A-Za-z0-9]{36}\b/g,
|
|
75
|
-
"[REDACTED_GITHUB_TOKEN]",
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
// GitHub installation tokens: ghs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (40 chars)
|
|
79
|
-
content = content.replace(
|
|
80
|
-
/\bghs_[A-Za-z0-9]{36}\b/g,
|
|
81
|
-
"[REDACTED_GITHUB_TOKEN]",
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
// GitHub refresh tokens: ghr_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX (40 chars)
|
|
85
|
-
content = content.replace(
|
|
86
|
-
/\bghr_[A-Za-z0-9]{36}\b/g,
|
|
87
|
-
"[REDACTED_GITHUB_TOKEN]",
|
|
88
|
-
);
|
|
89
|
-
|
|
90
|
-
// GitHub fine-grained personal access tokens: github_pat_XXXXXXXXXX (up to 255 chars)
|
|
91
|
-
content = content.replace(
|
|
92
|
-
/\bgithub_pat_[A-Za-z0-9_]{11,221}\b/g,
|
|
93
|
-
"[REDACTED_GITHUB_TOKEN]",
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
return content;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export const stripHtmlComments = (content: string) =>
|
|
100
|
-
content.replace(/<!--[\s\S]*?-->/g, "");
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Check if the action trigger is from a human actor
|
|
5
|
-
* Prevents automated tools or bots from triggering Claude
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { Octokit } from "@octokit/rest";
|
|
9
|
-
import type { ParsedGitHubContext } from "../context";
|
|
10
|
-
|
|
11
|
-
export async function checkHumanActor(
|
|
12
|
-
octokit: Octokit,
|
|
13
|
-
githubContext: ParsedGitHubContext,
|
|
14
|
-
) {
|
|
15
|
-
// Fetch user information from GitHub API
|
|
16
|
-
const { data: userData } = await octokit.users.getByUsername({
|
|
17
|
-
username: githubContext.actor,
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
const actorType = userData.type;
|
|
21
|
-
|
|
22
|
-
console.log(`Actor type: ${actorType}`);
|
|
23
|
-
|
|
24
|
-
// Check bot permissions if actor is not a User
|
|
25
|
-
if (actorType !== "User") {
|
|
26
|
-
const allowedBots = githubContext.inputs.allowedBots;
|
|
27
|
-
|
|
28
|
-
// Check if all bots are allowed
|
|
29
|
-
if (allowedBots.trim() === "*") {
|
|
30
|
-
console.log(
|
|
31
|
-
`All bots are allowed, skipping human actor check for: ${githubContext.actor}`,
|
|
32
|
-
);
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Parse allowed bots list
|
|
37
|
-
const allowedBotsList = allowedBots
|
|
38
|
-
.split(",")
|
|
39
|
-
.map((bot) =>
|
|
40
|
-
bot
|
|
41
|
-
.trim()
|
|
42
|
-
.toLowerCase()
|
|
43
|
-
.replace(/\[bot\]$/, ""),
|
|
44
|
-
)
|
|
45
|
-
.filter((bot) => bot.length > 0);
|
|
46
|
-
|
|
47
|
-
const botName = githubContext.actor.toLowerCase().replace(/\[bot\]$/, "");
|
|
48
|
-
|
|
49
|
-
// Check if specific bot is allowed
|
|
50
|
-
if (allowedBotsList.includes(botName)) {
|
|
51
|
-
console.log(
|
|
52
|
-
`Bot ${botName} is in allowed list, skipping human actor check`,
|
|
53
|
-
);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// Bot not allowed
|
|
58
|
-
throw new Error(
|
|
59
|
-
`Workflow initiated by non-human actor: ${botName} (type: ${actorType}). Add bot to allowed_bots list or use '*' to allow all bots.`,
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
console.log(`Verified human actor: ${githubContext.actor}`);
|
|
64
|
-
}
|
package/bin/_internal/integrations/github/claude-code-action/src/github/validation/permissions.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import * as core from "@actions/core";
|
|
2
|
-
import type { ParsedGitHubContext } from "../context";
|
|
3
|
-
import type { Octokit } from "@octokit/rest";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Check if the actor has write permissions to the repository
|
|
7
|
-
* @param octokit - The Octokit REST client
|
|
8
|
-
* @param context - The GitHub context
|
|
9
|
-
* @returns true if the actor has write permissions, false otherwise
|
|
10
|
-
*/
|
|
11
|
-
export async function checkWritePermissions(
|
|
12
|
-
octokit: Octokit,
|
|
13
|
-
context: ParsedGitHubContext,
|
|
14
|
-
): Promise<boolean> {
|
|
15
|
-
const { repository, actor } = context;
|
|
16
|
-
|
|
17
|
-
try {
|
|
18
|
-
core.info(`Checking permissions for actor: ${actor}`);
|
|
19
|
-
|
|
20
|
-
// Check if the actor is a GitHub App (bot user)
|
|
21
|
-
if (actor.endsWith("[bot]")) {
|
|
22
|
-
core.info(`Actor is a GitHub App: ${actor}`);
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Check permissions directly using the permission endpoint
|
|
27
|
-
const response = await octokit.repos.getCollaboratorPermissionLevel({
|
|
28
|
-
owner: repository.owner,
|
|
29
|
-
repo: repository.repo,
|
|
30
|
-
username: actor,
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
const permissionLevel = response.data.permission;
|
|
34
|
-
core.info(`Permission level retrieved: ${permissionLevel}`);
|
|
35
|
-
|
|
36
|
-
if (permissionLevel === "admin" || permissionLevel === "write") {
|
|
37
|
-
core.info(`Actor has write access: ${permissionLevel}`);
|
|
38
|
-
return true;
|
|
39
|
-
} else {
|
|
40
|
-
core.warning(`Actor has insufficient permissions: ${permissionLevel}`);
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
} catch (error) {
|
|
44
|
-
core.error(`Failed to check permissions: ${error}`);
|
|
45
|
-
throw new Error(`Failed to check permissions for ${actor}: ${error}`);
|
|
46
|
-
}
|
|
47
|
-
}
|
package/bin/_internal/integrations/github/claude-code-action/src/github/validation/trigger.ts
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import * as core from "@actions/core";
|
|
4
|
-
import {
|
|
5
|
-
isIssuesEvent,
|
|
6
|
-
isIssuesAssignedEvent,
|
|
7
|
-
isIssueCommentEvent,
|
|
8
|
-
isPullRequestEvent,
|
|
9
|
-
isPullRequestReviewEvent,
|
|
10
|
-
isPullRequestReviewCommentEvent,
|
|
11
|
-
} from "../context";
|
|
12
|
-
import type { ParsedGitHubContext } from "../context";
|
|
13
|
-
|
|
14
|
-
export function checkContainsTrigger(context: ParsedGitHubContext): boolean {
|
|
15
|
-
const {
|
|
16
|
-
inputs: { assigneeTrigger, labelTrigger, triggerPhrase, prompt },
|
|
17
|
-
} = context;
|
|
18
|
-
|
|
19
|
-
// If prompt is provided, always trigger
|
|
20
|
-
if (prompt) {
|
|
21
|
-
console.log(`Prompt provided, triggering action`);
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// Check for assignee trigger
|
|
26
|
-
if (isIssuesAssignedEvent(context)) {
|
|
27
|
-
// Remove @ symbol from assignee_trigger if present
|
|
28
|
-
let triggerUser = assigneeTrigger.replace(/^@/, "");
|
|
29
|
-
const assigneeUsername = context.payload.assignee?.login || "";
|
|
30
|
-
|
|
31
|
-
if (triggerUser && assigneeUsername === triggerUser) {
|
|
32
|
-
console.log(`Issue assigned to trigger user '${triggerUser}'`);
|
|
33
|
-
return true;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// Check for label trigger
|
|
38
|
-
if (isIssuesEvent(context) && context.eventAction === "labeled") {
|
|
39
|
-
const labelName = (context.payload as any).label?.name || "";
|
|
40
|
-
|
|
41
|
-
if (labelTrigger && labelName === labelTrigger) {
|
|
42
|
-
console.log(`Issue labeled with trigger label '${labelTrigger}'`);
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Check for issue body and title trigger on issue creation
|
|
48
|
-
if (isIssuesEvent(context) && context.eventAction === "opened") {
|
|
49
|
-
const issueBody = context.payload.issue.body || "";
|
|
50
|
-
const issueTitle = context.payload.issue.title || "";
|
|
51
|
-
// Check for exact match with word boundaries or punctuation
|
|
52
|
-
const regex = new RegExp(
|
|
53
|
-
`(^|\\s)${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`,
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
// Check in body
|
|
57
|
-
if (regex.test(issueBody)) {
|
|
58
|
-
console.log(
|
|
59
|
-
`Issue body contains exact trigger phrase '${triggerPhrase}'`,
|
|
60
|
-
);
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// Check in title
|
|
65
|
-
if (regex.test(issueTitle)) {
|
|
66
|
-
console.log(
|
|
67
|
-
`Issue title contains exact trigger phrase '${triggerPhrase}'`,
|
|
68
|
-
);
|
|
69
|
-
return true;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Check for pull request body and title trigger
|
|
74
|
-
if (isPullRequestEvent(context)) {
|
|
75
|
-
const prBody = context.payload.pull_request.body || "";
|
|
76
|
-
const prTitle = context.payload.pull_request.title || "";
|
|
77
|
-
// Check for exact match with word boundaries or punctuation
|
|
78
|
-
const regex = new RegExp(
|
|
79
|
-
`(^|\\s)${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`,
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
// Check in body
|
|
83
|
-
if (regex.test(prBody)) {
|
|
84
|
-
console.log(
|
|
85
|
-
`Pull request body contains exact trigger phrase '${triggerPhrase}'`,
|
|
86
|
-
);
|
|
87
|
-
return true;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Check in title
|
|
91
|
-
if (regex.test(prTitle)) {
|
|
92
|
-
console.log(
|
|
93
|
-
`Pull request title contains exact trigger phrase '${triggerPhrase}'`,
|
|
94
|
-
);
|
|
95
|
-
return true;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Check for pull request review body trigger
|
|
100
|
-
if (
|
|
101
|
-
isPullRequestReviewEvent(context) &&
|
|
102
|
-
(context.eventAction === "submitted" || context.eventAction === "edited")
|
|
103
|
-
) {
|
|
104
|
-
const reviewBody = context.payload.review.body || "";
|
|
105
|
-
// Check for exact match with word boundaries or punctuation
|
|
106
|
-
const regex = new RegExp(
|
|
107
|
-
`(^|\\s)${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`,
|
|
108
|
-
);
|
|
109
|
-
if (regex.test(reviewBody)) {
|
|
110
|
-
console.log(
|
|
111
|
-
`Pull request review contains exact trigger phrase '${triggerPhrase}'`,
|
|
112
|
-
);
|
|
113
|
-
return true;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Check for comment trigger
|
|
118
|
-
if (
|
|
119
|
-
isIssueCommentEvent(context) ||
|
|
120
|
-
isPullRequestReviewCommentEvent(context)
|
|
121
|
-
) {
|
|
122
|
-
const commentBody = isIssueCommentEvent(context)
|
|
123
|
-
? context.payload.comment.body
|
|
124
|
-
: context.payload.comment.body;
|
|
125
|
-
// Check for exact match with word boundaries or punctuation
|
|
126
|
-
const regex = new RegExp(
|
|
127
|
-
`(^|\\s)${escapeRegExp(triggerPhrase)}([\\s.,!?;:]|$)`,
|
|
128
|
-
);
|
|
129
|
-
if (regex.test(commentBody)) {
|
|
130
|
-
console.log(`Comment contains exact trigger phrase '${triggerPhrase}'`);
|
|
131
|
-
return true;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
console.log(`No trigger was met for ${triggerPhrase}`);
|
|
136
|
-
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
export function escapeRegExp(string: string) {
|
|
141
|
-
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
export async function checkTriggerAction(context: ParsedGitHubContext) {
|
|
145
|
-
const containsTrigger = checkContainsTrigger(context);
|
|
146
|
-
core.setOutput("contains_trigger", containsTrigger.toString());
|
|
147
|
-
return containsTrigger;
|
|
148
|
-
}
|
package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-actions-server.ts
DELETED
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
|
-
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
|
-
import { z } from "zod";
|
|
6
|
-
import { GITHUB_API_URL } from "../github/api/config";
|
|
7
|
-
import { mkdir, writeFile } from "fs/promises";
|
|
8
|
-
import { Octokit } from "@octokit/rest";
|
|
9
|
-
|
|
10
|
-
const REPO_OWNER = process.env.REPO_OWNER;
|
|
11
|
-
const REPO_NAME = process.env.REPO_NAME;
|
|
12
|
-
const PR_NUMBER = process.env.PR_NUMBER;
|
|
13
|
-
const GITHUB_TOKEN = process.env.GITHUB_TOKEN;
|
|
14
|
-
const RUNNER_TEMP = process.env.RUNNER_TEMP || "/tmp";
|
|
15
|
-
|
|
16
|
-
if (!REPO_OWNER || !REPO_NAME || !PR_NUMBER || !GITHUB_TOKEN) {
|
|
17
|
-
console.error(
|
|
18
|
-
"[GitHub CI Server] Error: REPO_OWNER, REPO_NAME, PR_NUMBER, and GITHUB_TOKEN environment variables are required",
|
|
19
|
-
);
|
|
20
|
-
process.exit(1);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const server = new McpServer({
|
|
24
|
-
name: "GitHub CI Server",
|
|
25
|
-
version: "0.0.1",
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
console.error("[GitHub CI Server] MCP Server instance created");
|
|
29
|
-
|
|
30
|
-
server.tool(
|
|
31
|
-
"get_ci_status",
|
|
32
|
-
"Get CI status summary for this PR",
|
|
33
|
-
{
|
|
34
|
-
status: z
|
|
35
|
-
.enum([
|
|
36
|
-
"completed",
|
|
37
|
-
"action_required",
|
|
38
|
-
"cancelled",
|
|
39
|
-
"failure",
|
|
40
|
-
"neutral",
|
|
41
|
-
"skipped",
|
|
42
|
-
"stale",
|
|
43
|
-
"success",
|
|
44
|
-
"timed_out",
|
|
45
|
-
"in_progress",
|
|
46
|
-
"queued",
|
|
47
|
-
"requested",
|
|
48
|
-
"waiting",
|
|
49
|
-
"pending",
|
|
50
|
-
])
|
|
51
|
-
.optional()
|
|
52
|
-
.describe("Filter workflow runs by status"),
|
|
53
|
-
},
|
|
54
|
-
async ({ status }) => {
|
|
55
|
-
try {
|
|
56
|
-
const client = new Octokit({
|
|
57
|
-
auth: GITHUB_TOKEN,
|
|
58
|
-
baseUrl: GITHUB_API_URL,
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
// Get the PR to find the head SHA
|
|
62
|
-
const { data: prData } = await client.pulls.get({
|
|
63
|
-
owner: REPO_OWNER!,
|
|
64
|
-
repo: REPO_NAME!,
|
|
65
|
-
pull_number: parseInt(PR_NUMBER!, 10),
|
|
66
|
-
});
|
|
67
|
-
const headSha = prData.head.sha;
|
|
68
|
-
|
|
69
|
-
const { data: runsData } = await client.actions.listWorkflowRunsForRepo({
|
|
70
|
-
owner: REPO_OWNER!,
|
|
71
|
-
repo: REPO_NAME!,
|
|
72
|
-
head_sha: headSha,
|
|
73
|
-
...(status && { status }),
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
// Process runs to create summary
|
|
77
|
-
const runs = runsData.workflow_runs || [];
|
|
78
|
-
const summary = {
|
|
79
|
-
total_runs: runs.length,
|
|
80
|
-
failed: 0,
|
|
81
|
-
passed: 0,
|
|
82
|
-
pending: 0,
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
const processedRuns = runs.map((run: any) => {
|
|
86
|
-
// Update summary counts
|
|
87
|
-
if (run.status === "completed") {
|
|
88
|
-
if (run.conclusion === "success") {
|
|
89
|
-
summary.passed++;
|
|
90
|
-
} else if (run.conclusion === "failure") {
|
|
91
|
-
summary.failed++;
|
|
92
|
-
}
|
|
93
|
-
} else {
|
|
94
|
-
summary.pending++;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return {
|
|
98
|
-
id: run.id,
|
|
99
|
-
name: run.name,
|
|
100
|
-
status: run.status,
|
|
101
|
-
conclusion: run.conclusion,
|
|
102
|
-
html_url: run.html_url,
|
|
103
|
-
created_at: run.created_at,
|
|
104
|
-
};
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
const result = {
|
|
108
|
-
summary,
|
|
109
|
-
runs: processedRuns,
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
return {
|
|
113
|
-
content: [
|
|
114
|
-
{
|
|
115
|
-
type: "text",
|
|
116
|
-
text: JSON.stringify(result, null, 2),
|
|
117
|
-
},
|
|
118
|
-
],
|
|
119
|
-
};
|
|
120
|
-
} catch (error) {
|
|
121
|
-
const errorMessage =
|
|
122
|
-
error instanceof Error ? error.message : String(error);
|
|
123
|
-
return {
|
|
124
|
-
content: [
|
|
125
|
-
{
|
|
126
|
-
type: "text",
|
|
127
|
-
text: `Error: ${errorMessage}`,
|
|
128
|
-
},
|
|
129
|
-
],
|
|
130
|
-
error: errorMessage,
|
|
131
|
-
isError: true,
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
},
|
|
135
|
-
);
|
|
136
|
-
|
|
137
|
-
server.tool(
|
|
138
|
-
"get_workflow_run_details",
|
|
139
|
-
"Get job and step details for a workflow run",
|
|
140
|
-
{
|
|
141
|
-
run_id: z.number().describe("The workflow run ID"),
|
|
142
|
-
},
|
|
143
|
-
async ({ run_id }) => {
|
|
144
|
-
try {
|
|
145
|
-
const client = new Octokit({
|
|
146
|
-
auth: GITHUB_TOKEN,
|
|
147
|
-
baseUrl: GITHUB_API_URL,
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
// Get jobs for this workflow run
|
|
151
|
-
const { data: jobsData } = await client.actions.listJobsForWorkflowRun({
|
|
152
|
-
owner: REPO_OWNER!,
|
|
153
|
-
repo: REPO_NAME!,
|
|
154
|
-
run_id,
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
const processedJobs = jobsData.jobs.map((job: any) => {
|
|
158
|
-
// Extract failed steps
|
|
159
|
-
const failedSteps = (job.steps || [])
|
|
160
|
-
.filter((step: any) => step.conclusion === "failure")
|
|
161
|
-
.map((step: any) => ({
|
|
162
|
-
name: step.name,
|
|
163
|
-
number: step.number,
|
|
164
|
-
}));
|
|
165
|
-
|
|
166
|
-
return {
|
|
167
|
-
id: job.id,
|
|
168
|
-
name: job.name,
|
|
169
|
-
conclusion: job.conclusion,
|
|
170
|
-
html_url: job.html_url,
|
|
171
|
-
failed_steps: failedSteps,
|
|
172
|
-
};
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
const result = {
|
|
176
|
-
jobs: processedJobs,
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
return {
|
|
180
|
-
content: [
|
|
181
|
-
{
|
|
182
|
-
type: "text",
|
|
183
|
-
text: JSON.stringify(result, null, 2),
|
|
184
|
-
},
|
|
185
|
-
],
|
|
186
|
-
};
|
|
187
|
-
} catch (error) {
|
|
188
|
-
const errorMessage =
|
|
189
|
-
error instanceof Error ? error.message : String(error);
|
|
190
|
-
|
|
191
|
-
return {
|
|
192
|
-
content: [
|
|
193
|
-
{
|
|
194
|
-
type: "text",
|
|
195
|
-
text: `Error: ${errorMessage}`,
|
|
196
|
-
},
|
|
197
|
-
],
|
|
198
|
-
error: errorMessage,
|
|
199
|
-
isError: true,
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
},
|
|
203
|
-
);
|
|
204
|
-
|
|
205
|
-
server.tool(
|
|
206
|
-
"download_job_log",
|
|
207
|
-
"Download job logs to disk",
|
|
208
|
-
{
|
|
209
|
-
job_id: z.number().describe("The job ID"),
|
|
210
|
-
},
|
|
211
|
-
async ({ job_id }) => {
|
|
212
|
-
try {
|
|
213
|
-
const client = new Octokit({
|
|
214
|
-
auth: GITHUB_TOKEN,
|
|
215
|
-
baseUrl: GITHUB_API_URL,
|
|
216
|
-
});
|
|
217
|
-
|
|
218
|
-
const response = await client.actions.downloadJobLogsForWorkflowRun({
|
|
219
|
-
owner: REPO_OWNER!,
|
|
220
|
-
repo: REPO_NAME!,
|
|
221
|
-
job_id,
|
|
222
|
-
});
|
|
223
|
-
|
|
224
|
-
const logsText = response.data as unknown as string;
|
|
225
|
-
|
|
226
|
-
const logsDir = `${RUNNER_TEMP}/github-ci-logs`;
|
|
227
|
-
await mkdir(logsDir, { recursive: true });
|
|
228
|
-
|
|
229
|
-
const logPath = `${logsDir}/job-${job_id}.log`;
|
|
230
|
-
await writeFile(logPath, logsText, "utf-8");
|
|
231
|
-
|
|
232
|
-
const result = {
|
|
233
|
-
path: logPath,
|
|
234
|
-
size_bytes: Buffer.byteLength(logsText, "utf-8"),
|
|
235
|
-
};
|
|
236
|
-
|
|
237
|
-
return {
|
|
238
|
-
content: [
|
|
239
|
-
{
|
|
240
|
-
type: "text",
|
|
241
|
-
text: JSON.stringify(result, null, 2),
|
|
242
|
-
},
|
|
243
|
-
],
|
|
244
|
-
};
|
|
245
|
-
} catch (error) {
|
|
246
|
-
const errorMessage =
|
|
247
|
-
error instanceof Error ? error.message : String(error);
|
|
248
|
-
|
|
249
|
-
return {
|
|
250
|
-
content: [
|
|
251
|
-
{
|
|
252
|
-
type: "text",
|
|
253
|
-
text: `Error: ${errorMessage}`,
|
|
254
|
-
},
|
|
255
|
-
],
|
|
256
|
-
error: errorMessage,
|
|
257
|
-
isError: true,
|
|
258
|
-
};
|
|
259
|
-
}
|
|
260
|
-
},
|
|
261
|
-
);
|
|
262
|
-
|
|
263
|
-
async function runServer() {
|
|
264
|
-
try {
|
|
265
|
-
const transport = new StdioServerTransport();
|
|
266
|
-
|
|
267
|
-
await server.connect(transport);
|
|
268
|
-
|
|
269
|
-
process.on("exit", () => {
|
|
270
|
-
server.close();
|
|
271
|
-
});
|
|
272
|
-
} catch (error) {
|
|
273
|
-
throw error;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
runServer().catch(() => {
|
|
278
|
-
process.exit(1);
|
|
279
|
-
});
|