@vicoa/cli 1.3.11-linux-x64 → 1.3.11-win32-x64
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/bin/_internal/81d243bd2c585b0f4821__mypyc.cp312-win_amd64.pyd +0 -0
- 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/_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/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/base_library.zip +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/cryptography/hazmat/bindings/_rust.pyd +0 -0
- package/bin/_internal/cryptography-46.0.7.dist-info/RECORD +2 -2
- package/bin/_internal/cryptography-46.0.7.dist-info/WHEEL +1 -2
- package/bin/_internal/email_validator-2.3.0.dist-info/RECORD +1 -1
- package/bin/_internal/frozenlist/_frozenlist.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/integrations/cli_wrappers/IMPORTANT_USE_CASES.md +32 -32
- package/bin/_internal/integrations/github/claude-code-action/CLAUDE.md +136 -136
- package/bin/_internal/integrations/github/claude-code-action/CODE_OF_CONDUCT.md +128 -128
- package/bin/_internal/integrations/github/claude-code-action/CONTRIBUTING.md +116 -116
- package/bin/_internal/integrations/github/claude-code-action/LICENSE +20 -20
- package/bin/_internal/integrations/github/claude-code-action/README.md +52 -52
- package/bin/_internal/integrations/github/claude-code-action/ROADMAP.md +20 -20
- package/bin/_internal/integrations/github/claude-code-action/SECURITY.md +15 -15
- package/bin/_internal/integrations/github/claude-code-action/action.yml +294 -294
- package/bin/_internal/integrations/github/claude-code-action/base-action/CLAUDE.md +60 -60
- package/bin/_internal/integrations/github/claude-code-action/base-action/CODE_OF_CONDUCT.md +128 -128
- package/bin/_internal/integrations/github/claude-code-action/base-action/CONTRIBUTING.md +136 -136
- package/bin/_internal/integrations/github/claude-code-action/base-action/LICENSE +21 -21
- package/bin/_internal/integrations/github/claude-code-action/base-action/MIRROR_DISCLAIMER.md +11 -11
- package/bin/_internal/integrations/github/claude-code-action/base-action/README.md +521 -521
- package/bin/_internal/integrations/github/claude-code-action/base-action/action.yml +149 -149
- package/bin/_internal/integrations/github/claude-code-action/base-action/bun.lock +54 -54
- package/bin/_internal/integrations/github/claude-code-action/base-action/examples/issue-triage.yml +108 -108
- package/bin/_internal/integrations/github/claude-code-action/base-action/package.json +23 -23
- package/bin/_internal/integrations/github/claude-code-action/base-action/scripts/install-hooks.sh +12 -12
- package/bin/_internal/integrations/github/claude-code-action/base-action/scripts/pre-push +45 -45
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/index.ts +82 -82
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/prepare-prompt.ts +82 -82
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/run-claude.ts +257 -257
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/run-vicoa.ts +300 -300
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/setup-claude-code-settings.ts +68 -68
- package/bin/_internal/integrations/github/claude-code-action/base-action/src/validate-env.ts +54 -54
- package/bin/_internal/integrations/github/claude-code-action/base-action/test-local.sh +11 -11
- package/bin/_internal/integrations/github/claude-code-action/base-action/test-mcp-local.sh +17 -17
- package/bin/_internal/integrations/github/claude-code-action/base-action/tsconfig.json +30 -30
- package/bin/_internal/integrations/github/claude-code-action/bun.lock +384 -384
- package/bin/_internal/integrations/github/claude-code-action/docs/capabilities-and-limitations.md +33 -33
- package/bin/_internal/integrations/github/claude-code-action/docs/cloud-providers.md +99 -99
- package/bin/_internal/integrations/github/claude-code-action/docs/configuration.md +345 -345
- package/bin/_internal/integrations/github/claude-code-action/docs/custom-automations.md +113 -113
- package/bin/_internal/integrations/github/claude-code-action/docs/experimental.md +128 -128
- package/bin/_internal/integrations/github/claude-code-action/docs/faq.md +205 -205
- package/bin/_internal/integrations/github/claude-code-action/docs/migration-guide.md +261 -261
- package/bin/_internal/integrations/github/claude-code-action/docs/security.md +38 -38
- package/bin/_internal/integrations/github/claude-code-action/docs/setup.md +146 -146
- package/bin/_internal/integrations/github/claude-code-action/docs/usage.md +213 -213
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci/auto-fix-ci.yml +97 -97
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci/commands/fix-ci.md +127 -127
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci-signed/auto-fix-ci-signed.yml +97 -97
- package/bin/_internal/integrations/github/claude-code-action/examples/auto-fix-ci-signed/commands/fix-ci-signed.md +148 -148
- package/bin/_internal/integrations/github/claude-code-action/examples/issue-deduplication.yml +63 -63
- package/bin/_internal/integrations/github/claude-code-action/examples/issue-triage.yml +75 -75
- package/bin/_internal/integrations/github/claude-code-action/examples/vicoa.yml +74 -74
- package/bin/_internal/integrations/github/claude-code-action/package.json +31 -31
- package/bin/_internal/integrations/github/claude-code-action/scripts/install-hooks.sh +12 -12
- package/bin/_internal/integrations/github/claude-code-action/scripts/pre-commit +45 -45
- package/bin/_internal/integrations/github/claude-code-action/scripts/setup-network-restrictions.sh +122 -122
- package/bin/_internal/integrations/github/claude-code-action/src/create-prompt/index.ts +799 -799
- package/bin/_internal/integrations/github/claude-code-action/src/create-prompt/types.ts +102 -102
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/collect-inputs.ts +58 -58
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/format-turns.ts +465 -465
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/prepare.ts +98 -98
- package/bin/_internal/integrations/github/claude-code-action/src/entrypoints/update-comment-link.ts +245 -245
- package/bin/_internal/integrations/github/claude-code-action/src/github/api/client.ts +23 -23
- package/bin/_internal/integrations/github/claude-code-action/src/github/api/config.ts +4 -4
- package/bin/_internal/integrations/github/claude-code-action/src/github/api/queries/github.ts +117 -117
- package/bin/_internal/integrations/github/claude-code-action/src/github/context.ts +277 -277
- package/bin/_internal/integrations/github/claude-code-action/src/github/data/fetcher.ts +233 -233
- package/bin/_internal/integrations/github/claude-code-action/src/github/data/formatter.ts +144 -144
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/branch-cleanup.ts +132 -132
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/branch.ts +163 -163
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comment-logic.ts +203 -203
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/common.ts +33 -33
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/create-initial.ts +111 -111
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/update-claude-comment.ts +70 -70
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/comments/update-with-branch.ts +57 -57
- package/bin/_internal/integrations/github/claude-code-action/src/github/operations/git-config.ts +62 -62
- package/bin/_internal/integrations/github/claude-code-action/src/github/token.ts +108 -108
- package/bin/_internal/integrations/github/claude-code-action/src/github/types.ts +98 -98
- package/bin/_internal/integrations/github/claude-code-action/src/github/utils/image-downloader.ts +246 -246
- package/bin/_internal/integrations/github/claude-code-action/src/github/utils/sanitizer.ts +100 -100
- package/bin/_internal/integrations/github/claude-code-action/src/github/validation/actor.ts +64 -64
- package/bin/_internal/integrations/github/claude-code-action/src/github/validation/permissions.ts +47 -47
- package/bin/_internal/integrations/github/claude-code-action/src/github/validation/trigger.ts +148 -148
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-actions-server.ts +279 -279
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-comment-server.ts +101 -101
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-file-ops-server.ts +677 -677
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/github-inline-comment-server.ts +184 -184
- package/bin/_internal/integrations/github/claude-code-action/src/mcp/install-mcp-server.ts +201 -201
- package/bin/_internal/integrations/github/claude-code-action/src/modes/agent/index.ts +152 -152
- package/bin/_internal/integrations/github/claude-code-action/src/modes/agent/parse-tools.ts +22 -22
- package/bin/_internal/integrations/github/claude-code-action/src/modes/detector.ts +66 -66
- package/bin/_internal/integrations/github/claude-code-action/src/modes/registry.ts +54 -54
- package/bin/_internal/integrations/github/claude-code-action/src/modes/tag/index.ts +187 -187
- package/bin/_internal/integrations/github/claude-code-action/src/modes/types.ts +100 -100
- package/bin/_internal/integrations/github/claude-code-action/src/prepare/index.ts +20 -20
- package/bin/_internal/integrations/github/claude-code-action/src/prepare/types.ts +20 -20
- package/bin/_internal/integrations/github/claude-code-action/src/utils/retry.ts +40 -40
- package/bin/_internal/integrations/github/claude-code-action/tsconfig.json +30 -30
- package/bin/_internal/integrations/n8n/LICENSE +20 -20
- package/bin/_internal/integrations/n8n/README.md +297 -297
- package/bin/_internal/integrations/n8n/package-lock.json +2989 -2989
- package/bin/_internal/integrations/n8n/package.json +68 -68
- package/bin/_internal/integrations/n8n/src/credentials/OmnaraApi.credentials.ts +52 -52
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/Omnara.node.json +34 -34
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/Omnara.node.ts +304 -304
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/index.ts +37 -37
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/send.operation.ts +151 -151
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/message/sendAndWait.operation.ts +252 -252
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/session/end.operation.ts +56 -56
- package/bin/_internal/integrations/n8n/src/nodes/Omnara/actions/session/index.ts +29 -29
- package/bin/_internal/integrations/n8n/src/utils/GenericFunctions.ts +92 -92
- package/bin/_internal/integrations/n8n/src/utils/sendAndWait/configureWaitTillDate.ts +42 -42
- package/bin/_internal/integrations/n8n/src/utils/sendAndWait/descriptions.ts +20 -20
- package/bin/_internal/integrations/n8n/src/utils/sendAndWaitWebhook.ts +72 -72
- package/bin/_internal/integrations/n8n/tsconfig.json +19 -19
- package/bin/_internal/jiter/jiter.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/jsonschema-4.26.0.dist-info/RECORD +1 -1
- 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.27.0.dist-info/RECORD +1 -1
- package/bin/_internal/multidict/_multidict.cp312-win_amd64.pyd +0 -0
- package/bin/_internal/propcache/_helpers_c.cp312-win_amd64.pyd +0 -0
- 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/ucrtbase.dll +0 -0
- package/bin/_internal/{python3.12/lib-dynload/unicodedata.cpython-312-x86_64-linux-gnu.so → unicodedata.pyd} +0 -0
- package/bin/_internal/vicoa/_bin/README.md +28 -28
- package/bin/_internal/vicoa-1.3.10.dist-info/METADATA +311 -311
- package/bin/_internal/vicoa-1.3.10.dist-info/RECORD +6 -6
- package/bin/_internal/vicoa-1.3.10.dist-info/WHEEL +1 -1
- package/bin/_internal/vicoa-1.3.10.dist-info/direct_url.json +1 -1
- package/bin/_internal/vicoa-1.3.10.dist-info/licenses/LICENSE +201 -201
- 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-16.0.dist-info/METADATA +179 -179
- package/bin/_internal/websockets-16.0.dist-info/RECORD +53 -53
- package/bin/_internal/websockets-16.0.dist-info/WHEEL +1 -3
- package/bin/_internal/websockets-16.0.dist-info/licenses/LICENSE +24 -24
- 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 → vicoa.exe} +0 -0
- package/package.json +3 -3
- package/bin/_internal/81d243bd2c585b0f4821__mypyc.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/_cffi_backend.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/aiohttp/_http_parser.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/aiohttp/_http_writer.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/aiohttp/_websocket/mask.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/aiohttp/_websocket/reader_c.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/caio/linux_aio.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/caio/thread_aio.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/charset_normalizer/cd.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/charset_normalizer/md.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/cryptography/hazmat/bindings/_rust.abi3.so +0 -0
- package/bin/_internal/frozenlist/_frozenlist.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/jiter/jiter.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/libbz2.so.1.0 +0 -0
- package/bin/_internal/libcrypto.so.3 +0 -0
- package/bin/_internal/libffi.so.8 +0 -0
- package/bin/_internal/libgcc_s.so.1 +0 -0
- package/bin/_internal/liblzma.so.5 +0 -0
- package/bin/_internal/libpython3.12.so.1.0 +0 -0
- package/bin/_internal/libreadline.so.8 +0 -0
- package/bin/_internal/libssl.so.3 +0 -0
- package/bin/_internal/libstdc++.so.6 +0 -0
- package/bin/_internal/libtinfo.so.6 +0 -0
- package/bin/_internal/libuuid.so.1 +0 -0
- package/bin/_internal/libz.so.1 +0 -0
- package/bin/_internal/multidict/_multidict.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/propcache/_helpers_c.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/pydantic_core/_pydantic_core.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_asyncio.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_bisect.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_blake2.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_bz2.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_cn.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_hk.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_iso2022.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_jp.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_kr.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_codecs_tw.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_contextvars.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_csv.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_ctypes.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_datetime.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_decimal.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_hashlib.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_heapq.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_json.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_lzma.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_md5.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_multibytecodec.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_multiprocessing.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_opcode.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_pickle.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_posixshmem.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_posixsubprocess.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_queue.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_random.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_sha1.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_sha2.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_sha3.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_socket.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_ssl.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_statistics.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_struct.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_uuid.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/_zoneinfo.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/array.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/binascii.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/fcntl.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/grp.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/math.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/mmap.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/pyexpat.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/readline.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/resource.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/select.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/syslog.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/termios.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/python3.12/lib-dynload/zlib.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/rpds/rpds.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/watchfiles/_rust_notify.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/websockets/speedups.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/yaml/_yaml.cpython-312-x86_64-linux-gnu.so +0 -0
- package/bin/_internal/yarl/_quoting_c.cpython-312-x86_64-linux-gnu.so +0 -0
|
@@ -1,100 +1,100 @@
|
|
|
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
|
+
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 +1,64 @@
|
|
|
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
|
-
}
|
|
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
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
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
|
-
}
|
|
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
|
+
}
|